[{"data":1,"prerenderedAt":173056},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-mo-fa-ming-ling-memit":3,"wiki-doc-nav":74},{"id":4,"title":5,"body":6,"description":66,"extension":67,"meta":68,"navigation":69,"path":70,"seo":71,"stem":72,"__hash__":73},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":8,"toc":63},"minimark",[9,13,17,20,23,26,33,36,39,42,45,48,51,54,57,60],[10,11,5],"h1",{"id":12},"_19魔法命令memit",[14,15,16],"p",{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,18,19],{},"说明：",[14,21,22],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,24,25],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,27,28],{},[29,30],"img",{"alt":31,"src":32},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,34,35],{},"补充：",[14,37,38],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,40,41],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,43,44],{},"解决方法：",[14,46,47],{},"1.cmd",[14,49,50],{},"2.依次输入以下代码：",[14,52,53],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,55,56],{},"pip install --upgrade ipython",[14,58,59],{},"#升级 memory_profiler 和 setuptools",[14,61,62],{},"pip install --upgrade memory_profiler setuptools",{"title":31,"searchDepth":64,"depth":64,"links":65},2,[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":5,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",[75,5191,6299,7719,10708,12059,13548,14637,23400,23412,24011,24037,24161,24402,24467,24485,24498,24545,24668,24837,25036,25216,25421,25557,25652,25689,25702,26012,26753,27461,27482,28502,30133,30284,30297,30309,30610,50422,50437,50454,50487,53359,76707,92852,92873,92986,93107,93877,94540,94901,94939,95045,95145,95188,95214,95255,96909,97010,97035,97526,98026,99106,99389,100131,100633,100645,102661,104325,105828,107526,109443,111362,113384,116854,117286,117749,118498,121442,121790,121812,122168,125475,125487,125890,125913,126060,126227,126432,126733,127290,127947,129878,131476,132125,133619,135050,136285,137979,139731,142141,142257,143192,143403,144288,145523,145751,145764,146919,149331,151699,155020,157497,159141,160918,162931,165983,168163,170690,172884],{"id":76,"title":77,"body":78,"description":31,"extension":67,"meta":5186,"navigation":69,"path":5187,"seo":5188,"stem":5189,"__hash__":5190},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":79,"toc":5158},[80,83,88,91,95,108,112,117,120,123,126,129,132,167,171,174,177,180,183,236,240,259,261,275,278,286,289,1152,1159,1176,1180,1271,1275,1281,1370,1374,1412,1416,1480,1484,1488,1494,1505,1509,1514,1518,1523,1527,1532,1536,1540,1545,1815,1820,1958,1963,2220,2223,2231,2235,2240,2343,2346,2652,2661,2762,2765,2768,2771,2774,3034,3039,3179,3182,3361,3364,3492,3495,3647,3651,3656,3659,3670,3678,3681,3788,3792,3796,3801,3851,3856,3861,3885,3890,3943,3946,3951,4128,4133,4418,4423,4820,4824,4829,4886,4891,4899,4902,5042,5045,5154],[10,81,77],{"id":82},"_1基础入门",[84,85,87],"h2",{"id":86},"_11注释","1.1注释",[14,89,90],{},"\u002F\u002F或者\u002F* *\u002F",[84,92,94],{"id":93},"_12命名","1.2命名",[96,97,98,102,105],"ol",{},[99,100,101],"li",{},"字母数字下划线",[99,103,104],{},"开头必须是字母或_",[99,106,107],{},"不能使用关键词",[84,109,111],{"id":110},"_13数据类型","1.3数据类型",[113,114,116],"h3",{"id":115},"_131整形","1.3.1整形",[14,118,119],{},"short 短整形 2",[14,121,122],{},"int 整形 4",[14,124,125],{},"long 长整形 win4 linux32位4 linux64位8",[14,127,128],{},"long long 长长整形 8",[14,130,131],{},"利用sizeof可以求数据类型占用的内存空间大小",[133,134,138],"pre",{"className":135,"code":136,"language":137,"meta":31,"style":31},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[139,140,141,160],"code",{"__ignoreMap":31},[142,143,146,150,154,157],"span",{"class":144,"line":145},"line",1,[142,147,149],{"class":148},"szBVR","sizeof",[142,151,153],{"class":152},"sVt8B","(",[142,155,156],{"class":148},"int",[142,158,159],{"class":152},")\n",[142,161,162,164],{"class":144,"line":64},[142,163,149],{"class":148},[142,165,166],{"class":152},"(num)\n",[113,168,170],{"id":169},"_132浮点型","1.3.2浮点型",[14,172,173],{},"float 单精度 4节 7位有效数字",[14,175,176],{},"double 双精度 8节 15-16有效数字",[14,178,179],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,181,182],{},"注意点：",[133,184,186],{"className":135,"code":185,"language":137,"meta":31,"style":31},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[139,187,188,213],{"__ignoreMap":31},[142,189,190,193,196,199,203,206,209],{"class":144,"line":145},[142,191,192],{"class":148},"float",[142,194,195],{"class":152}," f1",[142,197,198],{"class":148},"=",[142,200,202],{"class":201},"sj4cs","3.14",[142,204,205],{"class":148},"f",[142,207,208],{"class":152},";",[142,210,212],{"class":211},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[142,214,215,217,220,222,225,228,231,233],{"class":144,"line":64},[142,216,192],{"class":148},[142,218,219],{"class":152}," f2",[142,221,198],{"class":148},[142,223,224],{"class":201},"3",[142,226,227],{"class":148},"e",[142,229,230],{"class":201},"2",[142,232,208],{"class":152},[142,234,235],{"class":211}," \u002F\u002F科学记数法\n",[113,237,239],{"id":238},"_133字符型","1.3.3字符型",[133,241,243],{"className":135,"code":242,"language":137,"meta":31,"style":31},"char ch='a'\n",[139,244,245],{"__ignoreMap":31},[142,246,247,250,253,255],{"class":144,"line":145},[142,248,249],{"class":148},"char",[142,251,252],{"class":152}," ch",[142,254,198],{"class":148},[142,256,258],{"class":257},"sZZnC","'a'\n",[14,260,182],{},[96,262,263,266,269,272],{},[99,264,265],{},"在显示字符型变量时，只能单引号，双引号x",[99,267,268],{},"单引号内只能一个字符，不能字符串",[99,270,271],{},"c和c++字符型变量只占用一个字符",[99,273,274],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,276,277],{},"ASCII码大致由以下两部分组成：",[96,279,280,283],{},[99,281,282],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[99,284,285],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,287,288],{},"ASCII码表格：",[290,291,292,336],"table",{},[293,294,295],"thead",{},[296,297,298,306,311,315,320,324,328,332],"tr",{},[299,300,301,305],"th",{},[302,303,304],"strong",{},"ASCII","值",[299,307,308],{},[302,309,310],{},"控制字符",[299,312,313,305],{},[302,314,304],{},[299,316,317],{},[302,318,319],{},"字符",[299,321,322,305],{},[302,323,304],{},[299,325,326],{},[302,327,319],{},[299,329,330,305],{},[302,331,304],{},[299,333,334],{},[302,335,319],{},[337,338,339,366,392,417,442,468,493,518,544,569,595,621,647,672,698,724,750,774,799,824,849,874,899,924,949,974,999,1025,1050,1075,1100,1126],"tbody",{},[296,340,341,345,348,351,354,357,360,363],{},[342,343,344],"td",{},"0",[342,346,347],{},"NUT",[342,349,350],{},"32",[342,352,353],{},"(space)",[342,355,356],{},"64",[342,358,359],{},"@",[342,361,362],{},"96",[342,364,365],{},"、",[296,367,368,371,374,377,380,383,386,389],{},[342,369,370],{},"1",[342,372,373],{},"SOH",[342,375,376],{},"33",[342,378,379],{},"!",[342,381,382],{},"65",[342,384,385],{},"A",[342,387,388],{},"97",[342,390,391],{},"a",[296,393,394,396,399,402,405,408,411,414],{},[342,395,230],{},[342,397,398],{},"STX",[342,400,401],{},"34",[342,403,404],{},"\"",[342,406,407],{},"66",[342,409,410],{},"B",[342,412,413],{},"98",[342,415,416],{},"b",[296,418,419,421,424,427,430,433,436,439],{},[342,420,224],{},[342,422,423],{},"ETX",[342,425,426],{},"35",[342,428,429],{},"#",[342,431,432],{},"67",[342,434,435],{},"C",[342,437,438],{},"99",[342,440,441],{},"c",[296,443,444,447,450,453,456,459,462,465],{},[342,445,446],{},"4",[342,448,449],{},"EOT",[342,451,452],{},"36",[342,454,455],{},"$",[342,457,458],{},"68",[342,460,461],{},"D",[342,463,464],{},"100",[342,466,467],{},"d",[296,469,470,473,476,479,482,485,488,491],{},[342,471,472],{},"5",[342,474,475],{},"ENQ",[342,477,478],{},"37",[342,480,481],{},"%",[342,483,484],{},"69",[342,486,487],{},"E",[342,489,490],{},"101",[342,492,227],{},[296,494,495,498,501,504,507,510,513,516],{},[342,496,497],{},"6",[342,499,500],{},"ACK",[342,502,503],{},"38",[342,505,506],{},"&",[342,508,509],{},"70",[342,511,512],{},"F",[342,514,515],{},"102",[342,517,205],{},[296,519,520,523,526,529,532,535,538,541],{},[342,521,522],{},"7",[342,524,525],{},"BEL",[342,527,528],{},"39",[342,530,531],{},",",[342,533,534],{},"71",[342,536,537],{},"G",[342,539,540],{},"103",[342,542,543],{},"g",[296,545,546,549,552,555,557,560,563,566],{},[342,547,548],{},"8",[342,550,551],{},"BS",[342,553,554],{},"40",[342,556,153],{},[342,558,559],{},"72",[342,561,562],{},"H",[342,564,565],{},"104",[342,567,568],{},"h",[296,570,571,574,577,580,583,586,589,592],{},[342,572,573],{},"9",[342,575,576],{},"HT",[342,578,579],{},"41",[342,581,582],{},")",[342,584,585],{},"73",[342,587,588],{},"I",[342,590,591],{},"105",[342,593,594],{},"i",[296,596,597,600,603,606,609,612,615,618],{},[342,598,599],{},"10",[342,601,602],{},"LF",[342,604,605],{},"42",[342,607,608],{},"*",[342,610,611],{},"74",[342,613,614],{},"J",[342,616,617],{},"106",[342,619,620],{},"j",[296,622,623,626,629,632,635,638,641,644],{},[342,624,625],{},"11",[342,627,628],{},"VT",[342,630,631],{},"43",[342,633,634],{},"+",[342,636,637],{},"75",[342,639,640],{},"K",[342,642,643],{},"107",[342,645,646],{},"k",[296,648,649,652,655,658,660,663,666,669],{},[342,650,651],{},"12",[342,653,654],{},"FF",[342,656,657],{},"44",[342,659,531],{},[342,661,662],{},"76",[342,664,665],{},"L",[342,667,668],{},"108",[342,670,671],{},"l",[296,673,674,677,680,683,686,689,692,695],{},[342,675,676],{},"13",[342,678,679],{},"CR",[342,681,682],{},"45",[342,684,685],{},"-",[342,687,688],{},"77",[342,690,691],{},"M",[342,693,694],{},"109",[342,696,697],{},"m",[296,699,700,703,706,709,712,715,718,721],{},[342,701,702],{},"14",[342,704,705],{},"SO",[342,707,708],{},"46",[342,710,711],{},".",[342,713,714],{},"78",[342,716,717],{},"N",[342,719,720],{},"110",[342,722,723],{},"n",[296,725,726,729,732,735,738,741,744,747],{},[342,727,728],{},"15",[342,730,731],{},"SI",[342,733,734],{},"47",[342,736,737],{},"\u002F",[342,739,740],{},"79",[342,742,743],{},"O",[342,745,746],{},"111",[342,748,749],{},"o",[296,751,752,755,758,761,763,766,769,772],{},[342,753,754],{},"16",[342,756,757],{},"DLE",[342,759,760],{},"48",[342,762,344],{},[342,764,765],{},"80",[342,767,768],{},"P",[342,770,771],{},"112",[342,773,14],{},[296,775,776,779,782,785,787,790,793,796],{},[342,777,778],{},"17",[342,780,781],{},"DCI",[342,783,784],{},"49",[342,786,370],{},[342,788,789],{},"81",[342,791,792],{},"Q",[342,794,795],{},"113",[342,797,798],{},"q",[296,800,801,804,807,810,812,815,818,821],{},[342,802,803],{},"18",[342,805,806],{},"DC2",[342,808,809],{},"50",[342,811,230],{},[342,813,814],{},"82",[342,816,817],{},"R",[342,819,820],{},"114",[342,822,823],{},"r",[296,825,826,829,832,835,837,840,843,846],{},[342,827,828],{},"19",[342,830,831],{},"DC3",[342,833,834],{},"51",[342,836,224],{},[342,838,839],{},"83",[342,841,842],{},"S",[342,844,845],{},"115",[342,847,848],{},"s",[296,850,851,854,857,860,862,865,868,871],{},[342,852,853],{},"20",[342,855,856],{},"DC4",[342,858,859],{},"52",[342,861,446],{},[342,863,864],{},"84",[342,866,867],{},"T",[342,869,870],{},"116",[342,872,873],{},"t",[296,875,876,879,882,885,887,890,893,896],{},[342,877,878],{},"21",[342,880,881],{},"NAK",[342,883,884],{},"53",[342,886,472],{},[342,888,889],{},"85",[342,891,892],{},"U",[342,894,895],{},"117",[342,897,898],{},"u",[296,900,901,904,907,910,912,915,918,921],{},[342,902,903],{},"22",[342,905,906],{},"SYN",[342,908,909],{},"54",[342,911,497],{},[342,913,914],{},"86",[342,916,917],{},"V",[342,919,920],{},"118",[342,922,923],{},"v",[296,925,926,929,932,935,937,940,943,946],{},[342,927,928],{},"23",[342,930,931],{},"TB",[342,933,934],{},"55",[342,936,522],{},[342,938,939],{},"87",[342,941,942],{},"W",[342,944,945],{},"119",[342,947,948],{},"w",[296,950,951,954,957,960,962,965,968,971],{},[342,952,953],{},"24",[342,955,956],{},"CAN",[342,958,959],{},"56",[342,961,548],{},[342,963,964],{},"88",[342,966,967],{},"X",[342,969,970],{},"120",[342,972,973],{},"x",[296,975,976,979,982,985,987,990,993,996],{},[342,977,978],{},"25",[342,980,981],{},"EM",[342,983,984],{},"57",[342,986,573],{},[342,988,989],{},"89",[342,991,992],{},"Y",[342,994,995],{},"121",[342,997,998],{},"y",[296,1000,1001,1004,1007,1010,1013,1016,1019,1022],{},[342,1002,1003],{},"26",[342,1005,1006],{},"SUB",[342,1008,1009],{},"58",[342,1011,1012],{},":",[342,1014,1015],{},"90",[342,1017,1018],{},"Z",[342,1020,1021],{},"122",[342,1023,1024],{},"z",[296,1026,1027,1030,1033,1036,1038,1041,1044,1047],{},[342,1028,1029],{},"27",[342,1031,1032],{},"ESC",[342,1034,1035],{},"59",[342,1037,208],{},[342,1039,1040],{},"91",[342,1042,1043],{},"[",[342,1045,1046],{},"123",[342,1048,1049],{},"{",[296,1051,1052,1055,1058,1061,1064,1067,1069,1072],{},[342,1053,1054],{},"28",[342,1056,1057],{},"FS",[342,1059,1060],{},"60",[342,1062,1063],{},"\u003C",[342,1065,1066],{},"92",[342,1068,737],{},[342,1070,1071],{},"124",[342,1073,1074],{},"|",[296,1076,1077,1080,1083,1086,1088,1091,1094,1097],{},[342,1078,1079],{},"29",[342,1081,1082],{},"GS",[342,1084,1085],{},"61",[342,1087,198],{},[342,1089,1090],{},"93",[342,1092,1093],{},"]",[342,1095,1096],{},"125",[342,1098,1099],{},"}",[296,1101,1102,1105,1108,1111,1114,1117,1120,1123],{},[342,1103,1104],{},"30",[342,1106,1107],{},"RS",[342,1109,1110],{},"62",[342,1112,1113],{},">",[342,1115,1116],{},"94",[342,1118,1119],{},"^",[342,1121,1122],{},"126",[342,1124,1125],{},"`",[296,1127,1128,1131,1134,1137,1140,1143,1146,1149],{},[342,1129,1130],{},"31",[342,1132,1133],{},"US",[342,1135,1136],{},"63",[342,1138,1139],{},"?",[342,1141,1142],{},"95",[342,1144,1145],{},"_",[342,1147,1148],{},"127",[342,1150,1151],{},"DEL",[14,1153,1154,1155,1158],{},"ASCII 码大致由以下",[302,1156,1157],{},"两部分组","成：",[1160,1161,1162,1169],"ul",{},[99,1163,1164,1165,1168],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[302,1166,1167],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[99,1170,1171,1172,1175],{},"ASCII 打印字符：数字 ",[302,1173,1174],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[113,1177,1179],{"id":1178},"_134转义字符","1.3.4转义字符",[133,1181,1183],{"className":135,"code":1182,"language":137,"meta":31,"style":31},"\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",[139,1184,1185,1190,1206,1221,1227,1241,1247],{"__ignoreMap":31},[142,1186,1187],{"class":144,"line":145},[142,1188,1189],{"class":211},"\u002F\u002F换行符\n",[142,1191,1192,1195,1198,1201,1203],{"class":144,"line":64},[142,1193,1194],{"class":152},"cout ",[142,1196,1197],{"class":148},"\u003C\u003C",[142,1199,1200],{"class":257},"\"hello world\u002Fn\"",[142,1202,208],{"class":152},[142,1204,1205],{"class":211}," \u002F\u002F就等同于如下：\n",[142,1207,1209,1211,1213,1216,1218],{"class":144,"line":1208},3,[142,1210,1194],{"class":152},[142,1212,1197],{"class":148},[142,1214,1215],{"class":257},"\"hello world\"",[142,1217,1197],{"class":148},[142,1219,1220],{"class":152},"endl;\n",[142,1222,1224],{"class":144,"line":1223},4,[142,1225,1226],{"class":211},"\u002F\u002F反斜杠\n",[142,1228,1230,1232,1234,1237,1239],{"class":144,"line":1229},5,[142,1231,1194],{"class":152},[142,1233,1197],{"class":148},[142,1235,1236],{"class":257},"\"\u002F\u002F\"",[142,1238,1197],{"class":148},[142,1240,1220],{"class":152},[142,1242,1244],{"class":144,"line":1243},6,[142,1245,1246],{"class":211},"\u002F\u002F水平制表符\n",[142,1248,1250,1252,1254,1257,1260,1263,1265,1268],{"class":144,"line":1249},7,[142,1251,1194],{"class":152},[142,1253,1197],{"class":148},[142,1255,1256],{"class":257},"\"aaaa",[142,1258,1259],{"class":201},"\\t",[142,1261,1262],{"class":257},"helloworld\"",[142,1264,1197],{"class":148},[142,1266,1267],{"class":152},"endl;",[142,1269,1270],{"class":211}," \u002F\u002F输出窗口时有对齐效果\n",[113,1272,1274],{"id":1273},"_135字符串型","1.3.5字符串型",[14,1276,1277,1278,1280],{},"char 变量名",[142,1279],{},"=\"字符串值\"",[133,1282,1284],{"className":135,"code":1283,"language":137,"meta":31,"style":31},"\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",[139,1285,1286,1291,1296,1301,1306,1320,1333,1338,1344,1356],{"__ignoreMap":31},[142,1287,1288],{"class":144,"line":145},[142,1289,1290],{"class":211},"\u002F\u002Fc风格字符串\n",[142,1292,1293],{"class":144,"line":64},[142,1294,1295],{"class":211},"\u002F\u002F注意事项：\n",[142,1297,1298],{"class":144,"line":1208},[142,1299,1300],{"class":211},"\u002F\u002F1.char字符串名[]\n",[142,1302,1303],{"class":144,"line":1223},[142,1304,1305],{"class":211},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[142,1307,1308,1310,1313,1315,1317],{"class":144,"line":1229},[142,1309,249],{"class":148},[142,1311,1312],{"class":152}," str[]",[142,1314,198],{"class":148},[142,1316,1215],{"class":257},[142,1318,1319],{"class":152},";\n",[142,1321,1322,1324,1326,1329,1331],{"class":144,"line":1243},[142,1323,1194],{"class":152},[142,1325,1197],{"class":148},[142,1327,1328],{"class":152},"str",[142,1330,1197],{"class":148},[142,1332,1220],{"class":152},[142,1334,1335],{"class":144,"line":1249},[142,1336,1337],{"class":211},"\u002F\u002Fc++风格字符串\n",[142,1339,1341],{"class":144,"line":1340},8,[142,1342,1343],{"class":211},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[142,1345,1347,1350,1352,1354],{"class":144,"line":1346},9,[142,1348,1349],{"class":152},"string str2",[142,1351,198],{"class":148},[142,1353,1215],{"class":257},[142,1355,1319],{"class":152},[142,1357,1359,1361,1363,1366,1368],{"class":144,"line":1358},10,[142,1360,1194],{"class":152},[142,1362,1197],{"class":148},[142,1364,1365],{"class":152},"str2",[142,1367,1197],{"class":148},[142,1369,1220],{"class":152},[113,1371,1373],{"id":1372},"_136布尔类型bool","1.3.6布尔类型bool",[133,1375,1377],{"className":135,"code":1376,"language":137,"meta":31,"style":31},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[139,1378,1379,1394],{"__ignoreMap":31},[142,1380,1381,1384,1387,1389,1392],{"class":144,"line":145},[142,1382,1383],{"class":148},"bool",[142,1385,1386],{"class":152}," flag",[142,1388,198],{"class":148},[142,1390,1391],{"class":201},"true",[142,1393,1319],{"class":152},[142,1395,1396,1399,1402,1405,1407,1409],{"class":144,"line":64},[142,1397,1398],{"class":152},"cout",[142,1400,1401],{"class":148},"\u003C\u003Csizeof",[142,1403,1404],{"class":152},"(flag)",[142,1406,1197],{"class":148},[142,1408,1267],{"class":152},[142,1410,1411],{"class":211}," \u002F\u002F查看布尔占内存空间\n",[84,1413,1415],{"id":1414},"_14键盘输入cin","1.4键盘输入cin",[133,1417,1419],{"className":135,"code":1418,"language":137,"meta":31,"style":31},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[139,1420,1421,1434,1451,1462],{"__ignoreMap":31},[142,1422,1423,1425,1428,1430,1432],{"class":144,"line":145},[142,1424,156],{"class":148},[142,1426,1427],{"class":152}," a",[142,1429,198],{"class":148},[142,1431,344],{"class":201},[142,1433,1319],{"class":152},[142,1435,1436,1438,1440,1443,1445,1447,1449],{"class":144,"line":64},[142,1437,1398],{"class":152},[142,1439,1197],{"class":148},[142,1441,1442],{"class":257},"\"请给整型变量a赋值\"",[142,1444,1197],{"class":148},[142,1446,391],{"class":152},[142,1448,1197],{"class":148},[142,1450,1220],{"class":152},[142,1452,1453,1456,1459],{"class":144,"line":1208},[142,1454,1455],{"class":152},"cin ",[142,1457,1458],{"class":148},">>",[142,1460,1461],{"class":152}," a;\n",[142,1463,1464,1466,1468,1471,1474,1476,1478],{"class":144,"line":1223},[142,1465,1194],{"class":152},[142,1467,1197],{"class":148},[142,1469,1470],{"class":257}," \"整型变量a=\"",[142,1472,1473],{"class":148}," \u003C\u003C",[142,1475,391],{"class":152},[142,1477,1197],{"class":148},[142,1479,1220],{"class":152},[84,1481,1483],{"id":1482},"_15运算符","1.5运算符",[113,1485,1487],{"id":1486},"_151算术运算符","1.5.1算术运算符",[14,1489,1490,1493],{},[29,1491],{"alt":31,"src":1492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[96,1495,1496,1499,1502],{},[99,1497,1498],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[99,1500,1501],{},"两个小数不可以做取模运算",[99,1503,1504],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[113,1506,1508],{"id":1507},"_152赋值运算符","1.5.2赋值运算符",[14,1510,1511],{},[29,1512],{"alt":31,"src":1513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[113,1515,1517],{"id":1516},"_153比较运算符","1.5.3比较运算符",[14,1519,1520],{},[29,1521],{"alt":31,"src":1522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[113,1524,1526],{"id":1525},"_154逻辑运算符","1.5.4逻辑运算符",[14,1528,1529],{},[29,1530],{"alt":31,"src":1531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[84,1533,1535],{"id":1534},"_16程序流程结构","1.6程序流程结构",[113,1537,1539],{"id":1538},"_161选择结构","1.6.1选择结构",[96,1541,1542],{},[99,1543,1544],{},"if语句\n单行、多行、多条件if语句",[133,1546,1548],{"className":135,"code":1547,"language":137,"meta":31,"style":31},"\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",[139,1549,1550,1555,1570,1575,1589,1594,1599,1608,1621,1625,1638,1643,1649,1654,1668,1673,1679,1700,1705,1719,1724,1753,1758,1775,1780,1785,1790,1804,1809],{"__ignoreMap":31},[142,1551,1552],{"class":144,"line":145},[142,1553,1554],{"class":211},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[142,1556,1557,1560,1563,1565,1568],{"class":144,"line":64},[142,1558,1559],{"class":148},"if",[142,1561,1562],{"class":152},"(score",[142,1564,1113],{"class":148},[142,1566,1567],{"class":201},"600",[142,1569,159],{"class":152},[142,1571,1572],{"class":144,"line":1208},[142,1573,1574],{"class":152},"{\n",[142,1576,1577,1580,1582,1585,1587],{"class":144,"line":1223},[142,1578,1579],{"class":152},"    cout",[142,1581,1197],{"class":148},[142,1583,1584],{"class":257},"'这是单行if语句'",[142,1586,1197],{"class":148},[142,1588,1220],{"class":152},[142,1590,1591],{"class":144,"line":1229},[142,1592,1593],{"class":152},"}\n",[142,1595,1596],{"class":144,"line":1243},[142,1597,1598],{"class":211},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[142,1600,1601,1603,1605],{"class":144,"line":1249},[142,1602,1455],{"class":152},[142,1604,1458],{"class":148},[142,1606,1607],{"class":152}," score\n",[142,1609,1610,1612,1614,1617,1619],{"class":144,"line":1340},[142,1611,1559],{"class":148},[142,1613,1562],{"class":152},[142,1615,1616],{"class":148},"\u003C=",[142,1618,1567],{"class":201},[142,1620,159],{"class":152},[142,1622,1623],{"class":144,"line":1346},[142,1624,1574],{"class":152},[142,1626,1627,1629,1631,1634,1636],{"class":144,"line":1358},[142,1628,1579],{"class":152},[142,1630,1458],{"class":148},[142,1632,1633],{"class":257},"\"小于等于600\"",[142,1635,1197],{"class":148},[142,1637,1220],{"class":152},[142,1639,1641],{"class":144,"line":1640},11,[142,1642,1593],{"class":152},[142,1644,1646],{"class":144,"line":1645},12,[142,1647,1648],{"class":148},"else\n",[142,1650,1652],{"class":144,"line":1651},13,[142,1653,1574],{"class":152},[142,1655,1657,1659,1661,1664,1666],{"class":144,"line":1656},14,[142,1658,1579],{"class":152},[142,1660,1458],{"class":148},[142,1662,1663],{"class":257},"\"大于600\"",[142,1665,1458],{"class":148},[142,1667,1220],{"class":152},[142,1669,1671],{"class":144,"line":1670},15,[142,1672,1593],{"class":152},[142,1674,1676],{"class":144,"line":1675},16,[142,1677,1678],{"class":211},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[142,1680,1682,1684,1687,1689,1691,1694,1696,1698],{"class":144,"line":1681},17,[142,1683,1559],{"class":148},[142,1685,1686],{"class":152}," (",[142,1688,344],{"class":201},[142,1690,1063],{"class":148},[142,1692,1693],{"class":152},"num",[142,1695,1063],{"class":148},[142,1697,464],{"class":201},[142,1699,159],{"class":152},[142,1701,1703],{"class":144,"line":1702},18,[142,1704,1574],{"class":152},[142,1706,1708,1710,1712,1715,1717],{"class":144,"line":1707},19,[142,1709,1579],{"class":152},[142,1711,1197],{"class":148},[142,1713,1714],{"class":257},"\"小于100\"",[142,1716,1197],{"class":148},[142,1718,1220],{"class":152},[142,1720,1722],{"class":144,"line":1721},20,[142,1723,1593],{"class":152},[142,1725,1727,1730,1733,1736,1739,1741,1744,1746,1748,1751],{"class":144,"line":1726},21,[142,1728,1729],{"class":148},"else",[142,1731,1732],{"class":148}," if",[142,1734,1735],{"class":152}," (nmu",[142,1737,1738],{"class":148},">=",[142,1740,464],{"class":201},[142,1742,1743],{"class":148},"&&",[142,1745,1693],{"class":152},[142,1747,1063],{"class":148},[142,1749,1750],{"class":201},"200",[142,1752,159],{"class":152},[142,1754,1756],{"class":144,"line":1755},22,[142,1757,1574],{"class":152},[142,1759,1761,1763,1765,1768,1770,1772],{"class":144,"line":1760},23,[142,1762,1579],{"class":152},[142,1764,1197],{"class":148},[142,1766,1767],{"class":257},"\"不小于100且小于200\"",[142,1769,1197],{"class":148},[142,1771,1267],{"class":152},[142,1773,1774],{"class":211}," \u002F\u002F可以无限else if,python中是elif：\n",[142,1776,1778],{"class":144,"line":1777},24,[142,1779,1593],{"class":152},[142,1781,1783],{"class":144,"line":1782},25,[142,1784,1648],{"class":148},[142,1786,1788],{"class":144,"line":1787},26,[142,1789,1574],{"class":152},[142,1791,1793,1795,1797,1800,1802],{"class":144,"line":1792},27,[142,1794,1579],{"class":152},[142,1796,1197],{"class":148},[142,1798,1799],{"class":257},"\"不小于200\"",[142,1801,1197],{"class":148},[142,1803,1220],{"class":152},[142,1805,1807],{"class":144,"line":1806},28,[142,1808,1593],{"class":152},[142,1810,1812],{"class":144,"line":1811},29,[142,1813,1814],{"class":211},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[96,1816,1817],{"start":64},[99,1818,1819],{},"三目运算符",[133,1821,1823],{"className":135,"code":1822,"language":137,"meta":31,"style":31},"\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",[139,1824,1825,1830,1835,1861,1883,1900,1905,1928,1943],{"__ignoreMap":31},[142,1826,1827],{"class":144,"line":145},[142,1828,1829],{"class":211},"\u002F\u002F创建三个变量a,b,c\n",[142,1831,1832],{"class":144,"line":64},[142,1833,1834],{"class":211},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[142,1836,1837,1839,1841,1843,1845,1848,1850,1852,1855,1857,1859],{"class":144,"line":1208},[142,1838,156],{"class":148},[142,1840,1427],{"class":152},[142,1842,198],{"class":148},[142,1844,853],{"class":201},[142,1846,1847],{"class":152},",b",[142,1849,198],{"class":148},[142,1851,599],{"class":201},[142,1853,1854],{"class":152},",c",[142,1856,198],{"class":148},[142,1858,344],{"class":201},[142,1860,1319],{"class":152},[142,1862,1863,1865,1867,1870,1872,1874,1876,1878,1880],{"class":144,"line":1223},[142,1864,441],{"class":152},[142,1866,198],{"class":148},[142,1868,1869],{"class":152},"(a",[142,1871,1113],{"class":148},[142,1873,416],{"class":152},[142,1875,1139],{"class":148},[142,1877,391],{"class":152},[142,1879,1012],{"class":148},[142,1881,1882],{"class":152},"b)\n",[142,1884,1885,1887,1889,1892,1894,1896,1898],{"class":144,"line":1229},[142,1886,1398],{"class":152},[142,1888,1197],{"class":148},[142,1890,1891],{"class":257},"\"c=\"",[142,1893,1197],{"class":148},[142,1895,441],{"class":152},[142,1897,1197],{"class":148},[142,1899,1220],{"class":152},[142,1901,1902],{"class":144,"line":1243},[142,1903,1904],{"class":211},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[142,1906,1907,1909,1911,1913,1915,1917,1919,1922,1924,1926],{"class":144,"line":1249},[142,1908,1869],{"class":152},[142,1910,1113],{"class":148},[142,1912,416],{"class":152},[142,1914,1139],{"class":148},[142,1916,391],{"class":152},[142,1918,1012],{"class":148},[142,1920,1921],{"class":152},"b)",[142,1923,198],{"class":148},[142,1925,464],{"class":201},[142,1927,1319],{"class":152},[142,1929,1930,1932,1934,1936,1938,1940],{"class":144,"line":1340},[142,1931,1398],{"class":152},[142,1933,1197],{"class":148},[142,1935,391],{"class":152},[142,1937,1197],{"class":148},[142,1939,1267],{"class":152},[142,1941,1942],{"class":211}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[142,1944,1945,1947,1949,1951,1953,1955],{"class":144,"line":1346},[142,1946,1398],{"class":152},[142,1948,1197],{"class":148},[142,1950,416],{"class":152},[142,1952,1197],{"class":148},[142,1954,1267],{"class":152},[142,1956,1957],{"class":211}," \u002F\u002F10   a>b,b还是原值\n",[96,1959,1960],{"start":1208},[99,1961,1962],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[133,1964,1966],{"className":135,"code":1965,"language":137,"meta":31,"style":31},"\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",[139,1967,1968,1973,1981,1995,2005,2009,2023,2036,2046,2054,2059,2084,2105,2127,2148,2170,2191,2211,2216],{"__ignoreMap":31},[142,1969,1970],{"class":144,"line":145},[142,1971,1972],{"class":211},"\u002F\u002F案例-电影打分\n",[142,1974,1975,1978],{"class":144,"line":64},[142,1976,1977],{"class":148},"#include",[142,1979,1980],{"class":257},"\u003Ciostream>\n",[142,1982,1983,1986,1989,1993],{"class":144,"line":1208},[142,1984,1985],{"class":148},"using",[142,1987,1988],{"class":148}," namespace",[142,1990,1992],{"class":1991},"sScJk"," std",[142,1994,1319],{"class":152},[142,1996,1997,1999,2002],{"class":144,"line":1223},[142,1998,156],{"class":148},[142,2000,2001],{"class":1991}," main",[142,2003,2004],{"class":152},"()\n",[142,2006,2007],{"class":144,"line":1229},[142,2008,1574],{"class":152},[142,2010,2011,2014,2017,2019,2021],{"class":144,"line":1243},[142,2012,2013],{"class":148},"    int",[142,2015,2016],{"class":152}," score",[142,2018,198],{"class":148},[142,2020,344],{"class":201},[142,2022,1319],{"class":152},[142,2024,2025,2027,2029,2032,2034],{"class":144,"line":1249},[142,2026,1579],{"class":152},[142,2028,1197],{"class":148},[142,2030,2031],{"class":257},"\"电影打分：\"",[142,2033,1197],{"class":148},[142,2035,1220],{"class":152},[142,2037,2038,2041,2043],{"class":144,"line":1340},[142,2039,2040],{"class":152},"    cin",[142,2042,1458],{"class":148},[142,2044,2045],{"class":152},"score;\n",[142,2047,2048,2051],{"class":144,"line":1346},[142,2049,2050],{"class":148},"    switch",[142,2052,2053],{"class":152},"(score)\n",[142,2055,2056],{"class":144,"line":1358},[142,2057,2058],{"class":152},"    {\n",[142,2060,2061,2064,2067,2070,2072,2075,2077,2079,2082],{"class":144,"line":1640},[142,2062,2063],{"class":148},"        case",[142,2065,2066],{"class":201}," 10",[142,2068,2069],{"class":152},":cout",[142,2071,1197],{"class":148},[142,2073,2074],{"class":257},"\"经典\"",[142,2076,1197],{"class":148},[142,2078,1267],{"class":152},[142,2080,2081],{"class":148},"break",[142,2083,1319],{"class":152},[142,2085,2086,2088,2091,2093,2095,2097,2099,2101,2103],{"class":144,"line":1645},[142,2087,2063],{"class":148},[142,2089,2090],{"class":201}," 9",[142,2092,2069],{"class":152},[142,2094,1197],{"class":148},[142,2096,2074],{"class":257},[142,2098,1197],{"class":148},[142,2100,1267],{"class":152},[142,2102,2081],{"class":148},[142,2104,1319],{"class":152},[142,2106,2107,2109,2112,2114,2116,2119,2121,2123,2125],{"class":144,"line":1651},[142,2108,2063],{"class":148},[142,2110,2111],{"class":201}," 8",[142,2113,2069],{"class":152},[142,2115,1197],{"class":148},[142,2117,2118],{"class":257},"\"非常好\"",[142,2120,1197],{"class":148},[142,2122,1267],{"class":152},[142,2124,2081],{"class":148},[142,2126,1319],{"class":152},[142,2128,2129,2131,2134,2136,2138,2140,2142,2144,2146],{"class":144,"line":1656},[142,2130,2063],{"class":148},[142,2132,2133],{"class":201}," 7",[142,2135,2069],{"class":152},[142,2137,1197],{"class":148},[142,2139,2118],{"class":257},[142,2141,1197],{"class":148},[142,2143,1267],{"class":152},[142,2145,2081],{"class":148},[142,2147,1319],{"class":152},[142,2149,2150,2152,2155,2157,2159,2162,2164,2166,2168],{"class":144,"line":1670},[142,2151,2063],{"class":148},[142,2153,2154],{"class":201}," 6",[142,2156,2069],{"class":152},[142,2158,1197],{"class":148},[142,2160,2161],{"class":257},"\"一般\"",[142,2163,1197],{"class":148},[142,2165,1267],{"class":152},[142,2167,2081],{"class":148},[142,2169,1319],{"class":152},[142,2171,2172,2174,2177,2179,2181,2183,2185,2187,2189],{"class":144,"line":1675},[142,2173,2063],{"class":148},[142,2175,2176],{"class":201}," 5",[142,2178,2069],{"class":152},[142,2180,1197],{"class":148},[142,2182,2161],{"class":257},[142,2184,1197],{"class":148},[142,2186,1267],{"class":152},[142,2188,2081],{"class":148},[142,2190,1319],{"class":152},[142,2192,2193,2196,2198,2200,2203,2205,2207,2209],{"class":144,"line":1681},[142,2194,2195],{"class":148},"        default",[142,2197,2069],{"class":152},[142,2199,1197],{"class":148},[142,2201,2202],{"class":257},"\"烂片\"",[142,2204,1197],{"class":148},[142,2206,1267],{"class":152},[142,2208,2081],{"class":148},[142,2210,1319],{"class":152},[142,2212,2213],{"class":144,"line":1702},[142,2214,2215],{"class":152},"    }\n",[142,2217,2218],{"class":144,"line":1707},[142,2219,1593],{"class":152},[14,2221,2222],{},"if和switch区别：",[1160,2224,2225,2228],{},[99,2226,2227],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[99,2229,2230],{},"switch优点：结构清晰，执行效率高",[113,2232,2234],{"id":2233},"_162循环结构","1.6.2循环结构",[96,2236,2237],{},[99,2238,2239],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[133,2241,2243],{"className":135,"code":2242,"language":137,"meta":31,"style":31},"\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",[139,2244,2245,2250,2258,2262,2275,2289,2293,2313,2323,2327,2339],{"__ignoreMap":31},[142,2246,2247],{"class":144,"line":145},[142,2248,2249],{"class":211},"\u002F\u002F打印0-9数字\n",[142,2251,2252,2254,2256],{"class":144,"line":64},[142,2253,156],{"class":148},[142,2255,2001],{"class":1991},[142,2257,2004],{"class":152},[142,2259,2260],{"class":144,"line":1208},[142,2261,1574],{"class":152},[142,2263,2264,2266,2269,2271,2273],{"class":144,"line":1223},[142,2265,2013],{"class":148},[142,2267,2268],{"class":152}," num",[142,2270,198],{"class":148},[142,2272,344],{"class":201},[142,2274,1319],{"class":152},[142,2276,2277,2280,2283,2285,2287],{"class":144,"line":1229},[142,2278,2279],{"class":148},"    while",[142,2281,2282],{"class":152},"(num",[142,2284,1063],{"class":148},[142,2286,599],{"class":201},[142,2288,159],{"class":152},[142,2290,2291],{"class":144,"line":1243},[142,2292,2058],{"class":152},[142,2294,2295,2298,2301,2303,2305,2307,2310],{"class":144,"line":1249},[142,2296,2297],{"class":1991},"       std",[142,2299,2300],{"class":152},"::cout",[142,2302,1197],{"class":148},[142,2304,1693],{"class":152},[142,2306,1197],{"class":148},[142,2308,2309],{"class":1991},"std",[142,2311,2312],{"class":152},"::endl;\n",[142,2314,2315,2318,2321],{"class":144,"line":1340},[142,2316,2317],{"class":152},"        num",[142,2319,2320],{"class":148},"++",[142,2322,1319],{"class":152},[142,2324,2325],{"class":144,"line":1346},[142,2326,2215],{"class":152},[142,2328,2329,2332,2334,2337],{"class":144,"line":1358},[142,2330,2331],{"class":1991},"    system",[142,2333,153],{"class":152},[142,2335,2336],{"class":257},"\"pause\"",[142,2338,159],{"class":152},[142,2340,2341],{"class":144,"line":1640},[142,2342,1593],{"class":152},[14,2344,2345],{},"注意：写好循环条件，避免死循环情况",[133,2347,2349],{"className":135,"code":2348,"language":137,"meta":31,"style":31},"\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",[139,2350,2351,2356,2363,2370,2380,2388,2392,2397,2424,2429,2434,2442,2469,2474,2479,2492,2502,2506,2516,2521,2534,2539,2553,2558,2573,2577,2590,2594,2599,2603,2617,2625,2630,2636,2642,2647],{"__ignoreMap":31},[142,2352,2353],{"class":144,"line":145},[142,2354,2355],{"class":211},"\u002F\u002F循环结构-猜数字\n",[142,2357,2358,2360],{"class":144,"line":64},[142,2359,1977],{"class":148},[142,2361,2362],{"class":257}," \u003Ciostream>\n",[142,2364,2365,2367],{"class":144,"line":1208},[142,2366,1977],{"class":148},[142,2368,2369],{"class":257}," \u003Cctime>\n",[142,2371,2372,2374,2376,2378],{"class":144,"line":1223},[142,2373,1985],{"class":148},[142,2375,1988],{"class":148},[142,2377,1992],{"class":1991},[142,2379,1319],{"class":152},[142,2381,2382,2384,2386],{"class":144,"line":1229},[142,2383,156],{"class":148},[142,2385,2001],{"class":1991},[142,2387,2004],{"class":152},[142,2389,2390],{"class":144,"line":1243},[142,2391,1574],{"class":152},[142,2393,2394],{"class":144,"line":1249},[142,2395,2396],{"class":211},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[142,2398,2399,2402,2405,2408,2411,2413,2416,2418,2421],{"class":144,"line":1340},[142,2400,2401],{"class":1991},"    srand",[142,2403,2404],{"class":152},"((",[142,2406,2407],{"class":148},"unsigned",[142,2409,2410],{"class":148}," int",[142,2412,582],{"class":152},[142,2414,2415],{"class":1991},"time",[142,2417,153],{"class":152},[142,2419,2420],{"class":201},"NULL",[142,2422,2423],{"class":152},"));\n",[142,2425,2426],{"class":144,"line":1346},[142,2427,2428],{"emptyLinePlaceholder":69},"\n",[142,2430,2431],{"class":144,"line":1358},[142,2432,2433],{"class":211},"    \u002F\u002F1.系统生成随机数\n",[142,2435,2436,2439],{"class":144,"line":1640},[142,2437,2438],{"class":211},"    \u002F\u002Frand()%100",[142,2440,2441],{"class":211}," \u002F\u002F生成0-99的随机数\n",[142,2443,2444,2446,2448,2450,2453,2456,2458,2460,2462,2464,2466],{"class":144,"line":1645},[142,2445,2013],{"class":148},[142,2447,2268],{"class":152},[142,2449,198],{"class":148},[142,2451,2452],{"class":1991},"rand",[142,2454,2455],{"class":152},"()",[142,2457,481],{"class":148},[142,2459,464],{"class":201},[142,2461,634],{"class":148},[142,2463,370],{"class":201},[142,2465,208],{"class":152},[142,2467,2468],{"class":211}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[142,2470,2471],{"class":144,"line":1651},[142,2472,2473],{"class":211},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[142,2475,2476],{"class":144,"line":1656},[142,2477,2478],{"class":211},"    \u002F\u002F2.玩家猜测\n",[142,2480,2481,2483,2486,2488,2490],{"class":144,"line":1670},[142,2482,2013],{"class":148},[142,2484,2485],{"class":152}," val",[142,2487,198],{"class":148},[142,2489,344],{"class":201},[142,2491,1319],{"class":152},[142,2493,2494,2496,2498,2500],{"class":144,"line":1675},[142,2495,2279],{"class":148},[142,2497,1686],{"class":152},[142,2499,370],{"class":201},[142,2501,159],{"class":152},[142,2503,2504],{"class":144,"line":1681},[142,2505,2058],{"class":152},[142,2507,2508,2511,2513],{"class":144,"line":1702},[142,2509,2510],{"class":152},"        cin",[142,2512,1458],{"class":148},[142,2514,2515],{"class":152},"val;\n",[142,2517,2518],{"class":144,"line":1707},[142,2519,2520],{"class":211},"        \u002F\u002F3.判断玩家猜测\n",[142,2522,2523,2526,2529,2531],{"class":144,"line":1721},[142,2524,2525],{"class":148},"        if",[142,2527,2528],{"class":152},"(val",[142,2530,1063],{"class":148},[142,2532,2533],{"class":152},"num) \n",[142,2535,2536],{"class":144,"line":1726},[142,2537,2538],{"class":152},"        {\n",[142,2540,2541,2544,2546,2549,2551],{"class":144,"line":1755},[142,2542,2543],{"class":152},"            cout",[142,2545,1197],{"class":148},[142,2547,2548],{"class":257},"\"猜小了！\"",[142,2550,1197],{"class":148},[142,2552,1220],{"class":152},[142,2554,2555],{"class":144,"line":1760},[142,2556,2557],{"class":152},"        }\n",[142,2559,2560,2563,2565,2568,2570],{"class":144,"line":1777},[142,2561,2562],{"class":148},"        else",[142,2564,1732],{"class":148},[142,2566,2567],{"class":152}," (val",[142,2569,1113],{"class":148},[142,2571,2572],{"class":152},"num)\n",[142,2574,2575],{"class":144,"line":1782},[142,2576,2538],{"class":152},[142,2578,2579,2581,2583,2586,2588],{"class":144,"line":1787},[142,2580,2543],{"class":152},[142,2582,1197],{"class":148},[142,2584,2585],{"class":257},"\"猜大了！\"",[142,2587,1197],{"class":148},[142,2589,1220],{"class":152},[142,2591,2592],{"class":144,"line":1792},[142,2593,2557],{"class":152},[142,2595,2596],{"class":144,"line":1806},[142,2597,2598],{"class":148},"        else\n",[142,2600,2601],{"class":144,"line":1811},[142,2602,2538],{"class":152},[142,2604,2606,2608,2610,2613,2615],{"class":144,"line":2605},30,[142,2607,2543],{"class":152},[142,2609,1197],{"class":148},[142,2611,2612],{"class":257},"\"猜对了！\"",[142,2614,1197],{"class":148},[142,2616,1220],{"class":152},[142,2618,2620,2623],{"class":144,"line":2619},31,[142,2621,2622],{"class":148},"            break",[142,2624,1319],{"class":152},[142,2626,2628],{"class":144,"line":2627},32,[142,2629,2557],{"class":152},[142,2631,2633],{"class":144,"line":2632},33,[142,2634,2635],{"class":211},"        \u002F\u002F猜对 退出游戏\n",[142,2637,2639],{"class":144,"line":2638},34,[142,2640,2641],{"class":211},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[142,2643,2645],{"class":144,"line":2644},35,[142,2646,2215],{"class":152},[142,2648,2650],{"class":144,"line":2649},36,[142,2651,1593],{"class":152},[96,2653,2654],{"start":64},[99,2655,2656,2657,2660],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[302,2658,2659],{},"do...while会先执行一次循环语句","，在判断循环语句",[133,2662,2664],{"className":135,"code":2663,"language":137,"meta":31,"style":31},"\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",[139,2665,2666,2671,2679,2683,2695,2703,2707,2724,2731,2735,2748,2758],{"__ignoreMap":31},[142,2667,2668],{"class":144,"line":145},[142,2669,2670],{"class":211},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[142,2672,2673,2675,2677],{"class":144,"line":64},[142,2674,156],{"class":148},[142,2676,2001],{"class":1991},[142,2678,2004],{"class":152},[142,2680,2681],{"class":144,"line":1208},[142,2682,1574],{"class":152},[142,2684,2685,2687,2689,2691,2693],{"class":144,"line":1223},[142,2686,2013],{"class":148},[142,2688,2268],{"class":152},[142,2690,198],{"class":148},[142,2692,344],{"class":201},[142,2694,1319],{"class":152},[142,2696,2697,2700],{"class":144,"line":1229},[142,2698,2699],{"class":148},"    do",[142,2701,2702],{"class":152}," \n",[142,2704,2705],{"class":144,"line":1243},[142,2706,2058],{"class":152},[142,2708,2709,2712,2714,2716,2718,2720,2722],{"class":144,"line":1249},[142,2710,2711],{"class":1991},"        std",[142,2713,2300],{"class":152},[142,2715,1197],{"class":148},[142,2717,1693],{"class":152},[142,2719,1197],{"class":148},[142,2721,2309],{"class":1991},[142,2723,2312],{"class":152},[142,2725,2726,2728],{"class":144,"line":1340},[142,2727,2317],{"class":152},[142,2729,2730],{"class":148},"++\n",[142,2732,2733],{"class":144,"line":1346},[142,2734,2215],{"class":152},[142,2736,2737,2739,2741,2743,2745],{"class":144,"line":1358},[142,2738,2279],{"class":148},[142,2740,2282],{"class":152},[142,2742,1063],{"class":148},[142,2744,599],{"class":201},[142,2746,2747],{"class":152},");\n",[142,2749,2750,2752,2754,2756],{"class":144,"line":1640},[142,2751,2331],{"class":1991},[142,2753,153],{"class":152},[142,2755,2336],{"class":257},[142,2757,2747],{"class":152},[142,2759,2760],{"class":144,"line":1645},[142,2761,1593],{"class":152},[14,2763,2764],{},"案例-水仙花数",[14,2766,2767],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2769,2770],{},"例如：1^3+5^3+3^3=153",[14,2772,2773],{},"请用do...while语句，求出所有3位数的水仙花数",[133,2775,2777],{"className":135,"code":2776,"language":137,"meta":31,"style":31},"#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",[139,2778,2779,2785,2795,2803,2807,2812,2824,2830,2834,2839,2855,2871,2887,2902,2921,2936,2984,2988,3000,3004,3012,3016,3030],{"__ignoreMap":31},[142,2780,2781,2783],{"class":144,"line":145},[142,2782,1977],{"class":148},[142,2784,2362],{"class":257},[142,2786,2787,2789,2791,2793],{"class":144,"line":64},[142,2788,1985],{"class":148},[142,2790,1988],{"class":148},[142,2792,1992],{"class":1991},[142,2794,1319],{"class":152},[142,2796,2797,2799,2801],{"class":144,"line":1208},[142,2798,156],{"class":148},[142,2800,2001],{"class":1991},[142,2802,2004],{"class":152},[142,2804,2805],{"class":144,"line":1223},[142,2806,1574],{"class":152},[142,2808,2809],{"class":144,"line":1229},[142,2810,2811],{"class":211},"    \u002F\u002F1.先打印所有三位数字\n",[142,2813,2814,2816,2818,2820,2822],{"class":144,"line":1243},[142,2815,2013],{"class":148},[142,2817,2268],{"class":152},[142,2819,198],{"class":148},[142,2821,464],{"class":201},[142,2823,1319],{"class":152},[142,2825,2826,2828],{"class":144,"line":1249},[142,2827,2699],{"class":148},[142,2829,2702],{"class":152},[142,2831,2832],{"class":144,"line":1340},[142,2833,2058],{"class":152},[142,2835,2836],{"class":144,"line":1346},[142,2837,2838],{"class":211},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[142,2840,2841,2844,2846,2848,2850,2852],{"class":144,"line":1358},[142,2842,2843],{"class":148},"        int",[142,2845,1427],{"class":152},[142,2847,198],{"class":148},[142,2849,344],{"class":201},[142,2851,208],{"class":152},[142,2853,2854],{"class":211}," \u002F\u002F个位\n",[142,2856,2857,2859,2862,2864,2866,2868],{"class":144,"line":1640},[142,2858,2843],{"class":148},[142,2860,2861],{"class":152}," b",[142,2863,198],{"class":148},[142,2865,344],{"class":201},[142,2867,208],{"class":152},[142,2869,2870],{"class":211}," \u002F\u002F十位\n",[142,2872,2873,2875,2878,2880,2882,2884],{"class":144,"line":1645},[142,2874,2843],{"class":148},[142,2876,2877],{"class":152}," c",[142,2879,198],{"class":148},[142,2881,344],{"class":201},[142,2883,208],{"class":152},[142,2885,2886],{"class":211}," \u002F\u002F百位\n",[142,2888,2889,2892,2894,2896,2898,2900],{"class":144,"line":1651},[142,2890,2891],{"class":152},"        a",[142,2893,198],{"class":148},[142,2895,1693],{"class":152},[142,2897,481],{"class":148},[142,2899,599],{"class":201},[142,2901,1319],{"class":152},[142,2903,2904,2907,2909,2911,2913,2915,2917,2919],{"class":144,"line":1656},[142,2905,2906],{"class":152},"        b",[142,2908,198],{"class":148},[142,2910,1693],{"class":152},[142,2912,737],{"class":148},[142,2914,599],{"class":201},[142,2916,481],{"class":148},[142,2918,599],{"class":201},[142,2920,1319],{"class":152},[142,2922,2923,2926,2928,2930,2932,2934],{"class":144,"line":1670},[142,2924,2925],{"class":152},"        c",[142,2927,198],{"class":148},[142,2929,1693],{"class":152},[142,2931,737],{"class":148},[142,2933,464],{"class":201},[142,2935,1319],{"class":152},[142,2937,2938,2940,2942,2944,2946,2948,2950,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972,2975,2978,2981],{"class":144,"line":1675},[142,2939,2525],{"class":148},[142,2941,1869],{"class":152},[142,2943,608],{"class":148},[142,2945,391],{"class":152},[142,2947,608],{"class":148},[142,2949,391],{"class":152},[142,2951,634],{"class":148},[142,2953,416],{"class":152},[142,2955,608],{"class":148},[142,2957,416],{"class":152},[142,2959,608],{"class":148},[142,2961,416],{"class":152},[142,2963,634],{"class":148},[142,2965,441],{"class":152},[142,2967,608],{"class":148},[142,2969,441],{"class":152},[142,2971,608],{"class":148},[142,2973,2974],{"class":152},"c ",[142,2976,2977],{"class":148},"==",[142,2979,2980],{"class":152}," num)",[142,2982,2983],{"class":211}," \u002F\u002F如果是水仙花数，才打印\n",[142,2985,2986],{"class":144,"line":1681},[142,2987,2538],{"class":152},[142,2989,2990,2992,2994,2996,2998],{"class":144,"line":1702},[142,2991,2543],{"class":152},[142,2993,1197],{"class":148},[142,2995,1693],{"class":152},[142,2997,1197],{"class":148},[142,2999,1220],{"class":152},[142,3001,3002],{"class":144,"line":1707},[142,3003,2557],{"class":152},[142,3005,3006,3008,3010],{"class":144,"line":1721},[142,3007,2317],{"class":152},[142,3009,2320],{"class":148},[142,3011,1319],{"class":152},[142,3013,3014],{"class":144,"line":1726},[142,3015,2215],{"class":152},[142,3017,3018,3020,3023,3025,3028],{"class":144,"line":1755},[142,3019,2279],{"class":148},[142,3021,3022],{"class":152}," (num ",[142,3024,1063],{"class":148},[142,3026,3027],{"class":201}," 1000",[142,3029,2747],{"class":152},[142,3031,3032],{"class":144,"line":1760},[142,3033,1593],{"class":152},[96,3035,3036],{"start":1208},[99,3037,3038],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[133,3040,3042],{"className":135,"code":3041,"language":137,"meta":31,"style":31},"\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",[139,3043,3044,3049,3078,3082,3094,3098,3103,3114,3121,3125,3139,3143,3150,3154,3166,3175],{"__ignoreMap":31},[142,3045,3046],{"class":144,"line":145},[142,3047,3048],{"class":211},"\u002F\u002F从数字0-9打印\n",[142,3050,3051,3054,3056,3058,3061,3063,3065,3068,3070,3072,3074,3076],{"class":144,"line":64},[142,3052,3053],{"class":148},"for",[142,3055,153],{"class":152},[142,3057,156],{"class":148},[142,3059,3060],{"class":152}," i",[142,3062,198],{"class":148},[142,3064,344],{"class":201},[142,3066,3067],{"class":152},";i",[142,3069,1063],{"class":148},[142,3071,599],{"class":201},[142,3073,3067],{"class":152},[142,3075,2320],{"class":148},[142,3077,159],{"class":152},[142,3079,3080],{"class":144,"line":1208},[142,3081,1574],{"class":152},[142,3083,3084,3086,3088,3090,3092],{"class":144,"line":1223},[142,3085,1579],{"class":152},[142,3087,1197],{"class":148},[142,3089,594],{"class":152},[142,3091,1197],{"class":148},[142,3093,1220],{"class":152},[142,3095,3096],{"class":144,"line":1229},[142,3097,1593],{"class":152},[142,3099,3100],{"class":144,"line":1243},[142,3101,3102],{"class":211},"\u002F\u002F上式可以进行拆分\n",[142,3104,3105,3107,3109,3111],{"class":144,"line":1249},[142,3106,156],{"class":148},[142,3108,3060],{"class":152},[142,3110,198],{"class":148},[142,3112,3113],{"class":201},"0\n",[142,3115,3116,3118],{"class":144,"line":1340},[142,3117,3053],{"class":148},[142,3119,3120],{"class":152},"(;;;)\n",[142,3122,3123],{"class":144,"line":1346},[142,3124,1574],{"class":152},[142,3126,3127,3130,3133,3135,3137],{"class":144,"line":1358},[142,3128,3129],{"class":148},"    if",[142,3131,3132],{"class":152},"(i",[142,3134,1738],{"class":148},[142,3136,599],{"class":201},[142,3138,159],{"class":152},[142,3140,3141],{"class":144,"line":1640},[142,3142,2058],{"class":152},[142,3144,3145,3148],{"class":144,"line":1645},[142,3146,3147],{"class":148},"        break",[142,3149,1319],{"class":152},[142,3151,3152],{"class":144,"line":1651},[142,3153,2215],{"class":152},[142,3155,3156,3158,3160,3162,3164],{"class":144,"line":1656},[142,3157,1579],{"class":152},[142,3159,1197],{"class":148},[142,3161,594],{"class":152},[142,3163,1197],{"class":148},[142,3165,1220],{"class":152},[142,3167,3168,3171,3173],{"class":144,"line":1670},[142,3169,3170],{"class":152},"    i",[142,3172,2320],{"class":148},[142,3174,1319],{"class":152},[142,3176,3177],{"class":144,"line":1675},[142,3178,1593],{"class":152},[14,3180,3181],{},"小练习",[133,3183,3185],{"className":135,"code":3184,"language":137,"meta":31,"style":31},"#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",[139,3186,3187,3193,3203,3211,3215,3220,3225,3253,3257,3262,3267,3308,3312,3325,3329,3333,3337,3349,3353,3357],{"__ignoreMap":31},[142,3188,3189,3191],{"class":144,"line":145},[142,3190,1977],{"class":148},[142,3192,1980],{"class":257},[142,3194,3195,3197,3199,3201],{"class":144,"line":64},[142,3196,1985],{"class":148},[142,3198,1988],{"class":148},[142,3200,1992],{"class":1991},[142,3202,1319],{"class":152},[142,3204,3205,3207,3209],{"class":144,"line":1208},[142,3206,156],{"class":148},[142,3208,2001],{"class":1991},[142,3210,2004],{"class":152},[142,3212,3213],{"class":144,"line":1223},[142,3214,1574],{"class":152},[142,3216,3217],{"class":144,"line":1229},[142,3218,3219],{"class":211},"    \u002F\u002F敲桌子案例\n",[142,3221,3222],{"class":144,"line":1243},[142,3223,3224],{"class":211},"    \u002F\u002F1.先输出1-100的数字\n",[142,3226,3227,3230,3232,3234,3236,3238,3240,3243,3245,3247,3249,3251],{"class":144,"line":1249},[142,3228,3229],{"class":148},"    for",[142,3231,153],{"class":152},[142,3233,156],{"class":148},[142,3235,3060],{"class":152},[142,3237,198],{"class":148},[142,3239,370],{"class":201},[142,3241,3242],{"class":152},"; i",[142,3244,1616],{"class":148},[142,3246,464],{"class":201},[142,3248,3242],{"class":152},[142,3250,2320],{"class":148},[142,3252,159],{"class":152},[142,3254,3255],{"class":144,"line":1340},[142,3256,2058],{"class":152},[142,3258,3259],{"class":144,"line":1346},[142,3260,3261],{"class":211},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[142,3263,3264],{"class":144,"line":1358},[142,3265,3266],{"class":211},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[142,3268,3269,3271,3273,3275,3277,3279,3281,3284,3286,3288,3290,3292,3294,3296,3298,3300,3302,3304,3306],{"class":144,"line":1640},[142,3270,2525],{"class":148},[142,3272,3132],{"class":152},[142,3274,481],{"class":148},[142,3276,522],{"class":201},[142,3278,2977],{"class":148},[142,3280,344],{"class":201},[142,3282,3283],{"class":148}," ||",[142,3285,3060],{"class":152},[142,3287,481],{"class":148},[142,3289,599],{"class":201},[142,3291,2977],{"class":148},[142,3293,522],{"class":201},[142,3295,3283],{"class":148},[142,3297,3060],{"class":152},[142,3299,737],{"class":148},[142,3301,599],{"class":201},[142,3303,2977],{"class":148},[142,3305,522],{"class":201},[142,3307,159],{"class":152},[142,3309,3310],{"class":144,"line":1645},[142,3311,2538],{"class":152},[142,3313,3314,3316,3318,3321,3323],{"class":144,"line":1651},[142,3315,2543],{"class":152},[142,3317,1197],{"class":148},[142,3319,3320],{"class":257},"\"敲桌子\"",[142,3322,1197],{"class":148},[142,3324,1220],{"class":152},[142,3326,3327],{"class":144,"line":1656},[142,3328,2557],{"class":152},[142,3330,3331],{"class":144,"line":1670},[142,3332,2598],{"class":148},[142,3334,3335],{"class":144,"line":1675},[142,3336,2538],{"class":152},[142,3338,3339,3341,3343,3345,3347],{"class":144,"line":1681},[142,3340,2543],{"class":152},[142,3342,1197],{"class":148},[142,3344,594],{"class":152},[142,3346,1197],{"class":148},[142,3348,1220],{"class":152},[142,3350,3351],{"class":144,"line":1702},[142,3352,2557],{"class":152},[142,3354,3355],{"class":144,"line":1707},[142,3356,2215],{"class":152},[142,3358,3359],{"class":144,"line":1721},[142,3360,1593],{"class":152},[14,3362,3363],{},"嵌套实现星图",[133,3365,3367],{"className":135,"code":3366,"language":137,"meta":31,"style":31},"#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",[139,3368,3369,3375,3385,3393,3397,3423,3427,3456,3460,3471,3475,3484,3488],{"__ignoreMap":31},[142,3370,3371,3373],{"class":144,"line":145},[142,3372,1977],{"class":148},[142,3374,1980],{"class":257},[142,3376,3377,3379,3381,3383],{"class":144,"line":64},[142,3378,1985],{"class":148},[142,3380,1988],{"class":148},[142,3382,1992],{"class":1991},[142,3384,1319],{"class":152},[142,3386,3387,3389,3391],{"class":144,"line":1208},[142,3388,156],{"class":148},[142,3390,2001],{"class":1991},[142,3392,2004],{"class":152},[142,3394,3395],{"class":144,"line":1223},[142,3396,1574],{"class":152},[142,3398,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421],{"class":144,"line":1229},[142,3400,3229],{"class":148},[142,3402,1686],{"class":152},[142,3404,156],{"class":148},[142,3406,3060],{"class":152},[142,3408,198],{"class":148},[142,3410,344],{"class":201},[142,3412,3067],{"class":152},[142,3414,1063],{"class":148},[142,3416,599],{"class":201},[142,3418,3067],{"class":152},[142,3420,2320],{"class":148},[142,3422,159],{"class":152},[142,3424,3425],{"class":144,"line":1243},[142,3426,2058],{"class":152},[142,3428,3429,3432,3434,3436,3439,3441,3443,3446,3448,3450,3452,3454],{"class":144,"line":1249},[142,3430,3431],{"class":148},"        for",[142,3433,1686],{"class":152},[142,3435,156],{"class":148},[142,3437,3438],{"class":152}," j",[142,3440,198],{"class":148},[142,3442,344],{"class":201},[142,3444,3445],{"class":152},";j",[142,3447,1063],{"class":148},[142,3449,599],{"class":201},[142,3451,3445],{"class":152},[142,3453,2320],{"class":148},[142,3455,159],{"class":152},[142,3457,3458],{"class":144,"line":1340},[142,3459,2538],{"class":152},[142,3461,3462,3464,3466,3469],{"class":144,"line":1346},[142,3463,2543],{"class":152},[142,3465,1197],{"class":148},[142,3467,3468],{"class":257},"\"*\"",[142,3470,1319],{"class":152},[142,3472,3473],{"class":144,"line":1358},[142,3474,2557],{"class":152},[142,3476,3477,3480,3482],{"class":144,"line":1640},[142,3478,3479],{"class":152},"        cout",[142,3481,1197],{"class":148},[142,3483,1220],{"class":152},[142,3485,3486],{"class":144,"line":1645},[142,3487,2215],{"class":152},[142,3489,3490],{"class":144,"line":1651},[142,3491,1593],{"class":152},[14,3493,3494],{},"乘法口诀表",[133,3496,3498],{"className":135,"code":3497,"language":137,"meta":31,"style":31},"#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",[139,3499,3500,3506,3516,3524,3528,3554,3558,3583,3587,3627,3631,3639,3643],{"__ignoreMap":31},[142,3501,3502,3504],{"class":144,"line":145},[142,3503,1977],{"class":148},[142,3505,2362],{"class":257},[142,3507,3508,3510,3512,3514],{"class":144,"line":64},[142,3509,1985],{"class":148},[142,3511,1988],{"class":148},[142,3513,1992],{"class":1991},[142,3515,1319],{"class":152},[142,3517,3518,3520,3522],{"class":144,"line":1208},[142,3519,156],{"class":148},[142,3521,2001],{"class":1991},[142,3523,2004],{"class":152},[142,3525,3526],{"class":144,"line":1223},[142,3527,1574],{"class":152},[142,3529,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552],{"class":144,"line":1229},[142,3531,3229],{"class":148},[142,3533,153],{"class":152},[142,3535,156],{"class":148},[142,3537,3060],{"class":152},[142,3539,198],{"class":148},[142,3541,370],{"class":201},[142,3543,3067],{"class":152},[142,3545,1063],{"class":148},[142,3547,599],{"class":201},[142,3549,3067],{"class":152},[142,3551,2320],{"class":148},[142,3553,159],{"class":152},[142,3555,3556],{"class":144,"line":1243},[142,3557,2058],{"class":152},[142,3559,3560,3562,3564,3566,3568,3570,3572,3574,3576,3579,3581],{"class":144,"line":1249},[142,3561,3431],{"class":148},[142,3563,153],{"class":152},[142,3565,156],{"class":148},[142,3567,3438],{"class":152},[142,3569,198],{"class":148},[142,3571,370],{"class":201},[142,3573,3445],{"class":152},[142,3575,1616],{"class":148},[142,3577,3578],{"class":152},"i;j",[142,3580,2320],{"class":148},[142,3582,159],{"class":152},[142,3584,3585],{"class":144,"line":1340},[142,3586,2538],{"class":152},[142,3588,3589,3591,3593,3595,3597,3599,3601,3603,3605,3608,3610,3612,3614,3616,3618,3621,3623,3625],{"class":144,"line":1346},[142,3590,2543],{"class":152},[142,3592,1197],{"class":148},[142,3594,620],{"class":152},[142,3596,1197],{"class":148},[142,3598,3468],{"class":257},[142,3600,1197],{"class":148},[142,3602,594],{"class":152},[142,3604,1197],{"class":148},[142,3606,3607],{"class":257},"\"=\"",[142,3609,1197],{"class":148},[142,3611,594],{"class":152},[142,3613,608],{"class":148},[142,3615,620],{"class":152},[142,3617,1197],{"class":148},[142,3619,3620],{"class":257},"'",[142,3622,1259],{"class":201},[142,3624,3620],{"class":257},[142,3626,1319],{"class":152},[142,3628,3629],{"class":144,"line":1358},[142,3630,2557],{"class":152},[142,3632,3633,3635,3637],{"class":144,"line":1640},[142,3634,3479],{"class":152},[142,3636,1197],{"class":148},[142,3638,1220],{"class":152},[142,3640,3641],{"class":144,"line":1645},[142,3642,2215],{"class":152},[142,3644,3645],{"class":144,"line":1651},[142,3646,1593],{"class":152},[113,3648,3650],{"id":3649},"_163跳出语句","1.6.3跳出语句",[96,3652,3653],{},[99,3654,3655],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3657,3658],{},"break使用时机：",[1160,3660,3661,3664,3667],{},[99,3662,3663],{},"出现在switch条件语句中，作用是终止case并跳出switch",[99,3665,3666],{},"出现在循环结构中，作用是跳出当前的循环结构",[99,3668,3669],{},"出现在嵌套循环中，跳出最近的内层循环语句",[96,3671,3672,3675],{"start":64},[99,3673,3674],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[99,3676,3677],{},"goto语句\n语法：goto 标记;",[14,3679,3680],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[133,3682,3684],{"className":135,"code":3683,"language":137,"meta":31,"style":31},"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",[139,3685,3686,3694,3698,3711,3721,3734,3747,3760,3768,3784],{"__ignoreMap":31},[142,3687,3688,3690,3692],{"class":144,"line":145},[142,3689,156],{"class":148},[142,3691,2001],{"class":1991},[142,3693,2004],{"class":152},[142,3695,3696],{"class":144,"line":64},[142,3697,1574],{"class":152},[142,3699,3700,3702,3704,3707,3709],{"class":144,"line":1208},[142,3701,1579],{"class":152},[142,3703,1197],{"class":148},[142,3705,3706],{"class":257},"\"1\"",[142,3708,1197],{"class":148},[142,3710,1220],{"class":152},[142,3712,3713,3716,3719],{"class":144,"line":1223},[142,3714,3715],{"class":148},"    goto",[142,3717,3718],{"class":1991}," FLAG",[142,3720,1319],{"class":152},[142,3722,3723,3725,3727,3730,3732],{"class":144,"line":1229},[142,3724,1579],{"class":152},[142,3726,1197],{"class":148},[142,3728,3729],{"class":257},"\"2\"",[142,3731,1197],{"class":148},[142,3733,1220],{"class":152},[142,3735,3736,3738,3740,3743,3745],{"class":144,"line":1243},[142,3737,1579],{"class":152},[142,3739,1197],{"class":148},[142,3741,3742],{"class":257},"\"3\"",[142,3744,1197],{"class":148},[142,3746,1220],{"class":152},[142,3748,3749,3751,3753,3756,3758],{"class":144,"line":1249},[142,3750,1579],{"class":152},[142,3752,1197],{"class":148},[142,3754,3755],{"class":257},"\"4\"",[142,3757,1197],{"class":148},[142,3759,1220],{"class":152},[142,3761,3762,3765],{"class":144,"line":1340},[142,3763,3764],{"class":1991},"    FLAG",[142,3766,3767],{"class":152},":\n",[142,3769,3770,3772,3774,3777,3779,3781],{"class":144,"line":1346},[142,3771,1579],{"class":152},[142,3773,1197],{"class":148},[142,3775,3776],{"class":257},"\"5\"",[142,3778,1197],{"class":148},[142,3780,1267],{"class":152},[142,3782,3783],{"class":211},"\u002F\u002F跳过了2,3,4,直接到5\n",[142,3785,3786],{"class":144,"line":1358},[142,3787,1593],{"class":152},[84,3789,3791],{"id":3790},"_17数组","1.7数组",[113,3793,3795],{"id":3794},"_171一维数组","1.7.1一维数组",[96,3797,3798],{},[99,3799,3800],{},"一维数组定义方式",[290,3802,3803,3813],{},[293,3804,3805],{},[296,3806,3807,3810],{},[299,3808,3809],{},"方式",[299,3811,3812],{},"注意事项",[337,3814,3815,3829,3839],{},[296,3816,3817,3823],{},[342,3818,3819,3820,208],{},"数据类型 数组名",[142,3821,3822],{},"数组长度",[342,3824,3825,3826,3828],{},"这种方式是先定义再arr",[142,3827,594],{},"赋值",[296,3830,3831,3836],{},[342,3832,3819,3833,3835],{},[142,3834,3822],{},"={值1,值2....};",[342,3837,3838],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[296,3840,3841,3845],{},[342,3842,3819,3843,3835],{},[142,3844],{},[342,3846,3847,3848,3850],{},"int arr",[142,3849],{},";这是不正确的，按照这样的方式定义必须有初始长度",[96,3852,3853],{"start":64},[99,3854,3855],{},"一维数组数组名\n用途：",[1160,3857,3858],{},[99,3859,3860],{},"1.可以统计整个数组在内存中的长度：",[133,3862,3864],{"className":135,"code":3863,"language":137,"meta":31,"style":31},"sizeof(arr);\nsizeof(arr[0]);\n",[139,3865,3866,3873],{"__ignoreMap":31},[142,3867,3868,3870],{"class":144,"line":145},[142,3869,149],{"class":148},[142,3871,3872],{"class":152},"(arr);\n",[142,3874,3875,3877,3880,3882],{"class":144,"line":64},[142,3876,149],{"class":148},[142,3878,3879],{"class":152},"(arr[",[142,3881,344],{"class":201},[142,3883,3884],{"class":152},"]);\n",[1160,3886,3887],{},[99,3888,3889],{},"2.可以获取数组在内存中的首地址:",[133,3891,3893],{"className":135,"code":3892,"language":137,"meta":31,"style":31},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[139,3894,3895,3900,3913,3918],{"__ignoreMap":31},[142,3896,3897],{"class":144,"line":145},[142,3898,3899],{"class":211},"\u002F\u002F查看16进制的首地址\n",[142,3901,3902,3904,3906,3909,3911],{"class":144,"line":64},[142,3903,1398],{"class":152},[142,3905,1197],{"class":148},[142,3907,3908],{"class":152},"arr",[142,3910,1197],{"class":148},[142,3912,1220],{"class":152},[142,3914,3915],{"class":144,"line":1208},[142,3916,3917],{"class":211},"\u002F\u002F看10进制数\n",[142,3919,3920,3922,3924,3926,3928,3930,3932,3935,3937,3939,3941],{"class":144,"line":1223},[142,3921,1398],{"class":152},[142,3923,1197],{"class":148},[142,3925,153],{"class":152},[142,3927,156],{"class":148},[142,3929,582],{"class":152},[142,3931,506],{"class":148},[142,3933,3934],{"class":152},"arr[",[142,3936,344],{"class":201},[142,3938,1093],{"class":152},[142,3940,1197],{"class":148},[142,3942,1220],{"class":152},[14,3944,3945],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1160,3947,3948],{},[99,3949,3950],{},"1️⃣五只小猪称体重",[133,3952,3954],{"className":135,"code":3953,"language":137,"meta":31,"style":31},"#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",[139,3955,3956,3962,3972,3980,3984,4024,4037,4063,4067,4079,4083,4093,4097,4101,4114,4124],{"__ignoreMap":31},[142,3957,3958,3960],{"class":144,"line":145},[142,3959,1977],{"class":148},[142,3961,1980],{"class":257},[142,3963,3964,3966,3968,3970],{"class":144,"line":64},[142,3965,1985],{"class":148},[142,3967,1988],{"class":148},[142,3969,1992],{"class":1991},[142,3971,1319],{"class":152},[142,3973,3974,3976,3978],{"class":144,"line":1208},[142,3975,156],{"class":148},[142,3977,2001],{"class":1991},[142,3979,2004],{"class":152},[142,3981,3982],{"class":144,"line":1223},[142,3983,1574],{"class":152},[142,3985,3986,3988,3991,3993,3995,3997,3999,4002,4004,4007,4009,4011,4013,4016,4018,4021],{"class":144,"line":1229},[142,3987,2013],{"class":148},[142,3989,3990],{"class":152}," arr[",[142,3992,472],{"class":201},[142,3994,1093],{"class":152},[142,3996,198],{"class":148},[142,3998,1049],{"class":152},[142,4000,4001],{"class":201},"300",[142,4003,531],{"class":152},[142,4005,4006],{"class":201},"350",[142,4008,531],{"class":152},[142,4010,1750],{"class":201},[142,4012,531],{"class":152},[142,4014,4015],{"class":201},"400",[142,4017,531],{"class":152},[142,4019,4020],{"class":201},"250",[142,4022,4023],{"class":152},"};\n",[142,4025,4026,4028,4031,4033,4035],{"class":144,"line":1243},[142,4027,2013],{"class":148},[142,4029,4030],{"class":152}," tmp",[142,4032,198],{"class":148},[142,4034,344],{"class":201},[142,4036,1319],{"class":152},[142,4038,4039,4041,4043,4045,4047,4049,4051,4053,4055,4057,4059,4061],{"class":144,"line":1249},[142,4040,3229],{"class":148},[142,4042,1686],{"class":152},[142,4044,156],{"class":148},[142,4046,3060],{"class":152},[142,4048,198],{"class":148},[142,4050,344],{"class":201},[142,4052,3067],{"class":152},[142,4054,1063],{"class":148},[142,4056,472],{"class":201},[142,4058,3067],{"class":152},[142,4060,2320],{"class":148},[142,4062,159],{"class":152},[142,4064,4065],{"class":144,"line":1340},[142,4066,2058],{"class":152},[142,4068,4069,4071,4074,4076],{"class":144,"line":1346},[142,4070,2525],{"class":148},[142,4072,4073],{"class":152},"(tmp",[142,4075,1063],{"class":148},[142,4077,4078],{"class":152},"arr[i])\n",[142,4080,4081],{"class":144,"line":1358},[142,4082,2538],{"class":152},[142,4084,4085,4088,4090],{"class":144,"line":1640},[142,4086,4087],{"class":152},"            tmp",[142,4089,198],{"class":148},[142,4091,4092],{"class":152},"arr[i];\n",[142,4094,4095],{"class":144,"line":1645},[142,4096,2557],{"class":152},[142,4098,4099],{"class":144,"line":1651},[142,4100,2215],{"class":152},[142,4102,4103,4105,4107,4110,4112],{"class":144,"line":1656},[142,4104,1579],{"class":152},[142,4106,1197],{"class":148},[142,4108,4109],{"class":152},"tmp",[142,4111,1197],{"class":148},[142,4113,1220],{"class":152},[142,4115,4116,4119,4122],{"class":144,"line":1670},[142,4117,4118],{"class":148},"    return",[142,4120,4121],{"class":201}," 0",[142,4123,1319],{"class":152},[142,4125,4126],{"class":144,"line":1675},[142,4127,1593],{"class":152},[1160,4129,4130],{},[99,4131,4132],{},"2️⃣数组元素逆置",[133,4134,4136],{"className":135,"code":4135,"language":137,"meta":31,"style":31},"\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",[139,4137,4138,4143,4149,4159,4167,4171,4206,4222,4254,4267,4272,4277,4289,4299,4309,4314,4323,4333,4338,4343,4370,4374,4390,4394,4405,4414],{"__ignoreMap":31},[142,4139,4140],{"class":144,"line":145},[142,4141,4142],{"class":211},"\u002F\u002F元素逆置\n",[142,4144,4145,4147],{"class":144,"line":64},[142,4146,1977],{"class":148},[142,4148,1980],{"class":257},[142,4150,4151,4153,4155,4157],{"class":144,"line":1208},[142,4152,1985],{"class":148},[142,4154,1988],{"class":148},[142,4156,1992],{"class":1991},[142,4158,1319],{"class":152},[142,4160,4161,4163,4165],{"class":144,"line":1223},[142,4162,156],{"class":148},[142,4164,2001],{"class":1991},[142,4166,2004],{"class":152},[142,4168,4169],{"class":144,"line":1229},[142,4170,1574],{"class":152},[142,4172,4173,4176,4178,4180,4182,4184,4186,4188,4190,4192,4194,4196,4198,4200,4202,4204],{"class":144,"line":1243},[142,4174,4175],{"class":148},"   int",[142,4177,3990],{"class":152},[142,4179,472],{"class":201},[142,4181,1093],{"class":152},[142,4183,198],{"class":148},[142,4185,1049],{"class":152},[142,4187,370],{"class":201},[142,4189,531],{"class":152},[142,4191,230],{"class":201},[142,4193,531],{"class":152},[142,4195,224],{"class":201},[142,4197,531],{"class":152},[142,4199,446],{"class":201},[142,4201,531],{"class":152},[142,4203,472],{"class":201},[142,4205,4023],{"class":152},[142,4207,4208,4210,4213,4215,4217,4219],{"class":144,"line":1249},[142,4209,4175],{"class":148},[142,4211,4212],{"class":152}," start",[142,4214,198],{"class":148},[142,4216,344],{"class":201},[142,4218,208],{"class":152},[142,4220,4221],{"class":211},"\u002F\u002F起始下标\n",[142,4223,4224,4226,4229,4232,4235,4238,4240,4242,4245,4247,4249,4251],{"class":144,"line":1340},[142,4225,4175],{"class":148},[142,4227,4228],{"class":152}," end",[142,4230,4231],{"class":148},"=sizeof",[142,4233,4234],{"class":152},"(arr)",[142,4236,4237],{"class":148},"\u002Fsizeof",[142,4239,3879],{"class":152},[142,4241,344],{"class":201},[142,4243,4244],{"class":152},"])",[142,4246,685],{"class":148},[142,4248,370],{"class":201},[142,4250,208],{"class":152},[142,4252,4253],{"class":211},"\u002F\u002F结束下标\n",[142,4255,4256,4259,4262,4264],{"class":144,"line":1346},[142,4257,4258],{"class":148},"   while",[142,4260,4261],{"class":152}," (start",[142,4263,1063],{"class":148},[142,4265,4266],{"class":152},"end)\n",[142,4268,4269],{"class":144,"line":1358},[142,4270,4271],{"class":152},"   {\n",[142,4273,4274],{"class":144,"line":1640},[142,4275,4276],{"class":211},"    \u002F\u002F实现元素互换代码\n",[142,4278,4279,4281,4284,4286],{"class":144,"line":1645},[142,4280,2013],{"class":148},[142,4282,4283],{"class":152}," temp",[142,4285,198],{"class":148},[142,4287,4288],{"class":152},"arr[start];\n",[142,4290,4291,4294,4296],{"class":144,"line":1651},[142,4292,4293],{"class":152},"    arr[start]",[142,4295,198],{"class":148},[142,4297,4298],{"class":152},"arr[end];\n",[142,4300,4301,4304,4306],{"class":144,"line":1656},[142,4302,4303],{"class":152},"    arr[end]",[142,4305,198],{"class":148},[142,4307,4308],{"class":152},"temp;\n",[142,4310,4311],{"class":144,"line":1670},[142,4312,4313],{"class":211},"    \u002F\u002F下标更新\n",[142,4315,4316,4319,4321],{"class":144,"line":1675},[142,4317,4318],{"class":152},"    start",[142,4320,2320],{"class":148},[142,4322,1319],{"class":152},[142,4324,4325,4328,4331],{"class":144,"line":1681},[142,4326,4327],{"class":152},"    end",[142,4329,4330],{"class":148},"--",[142,4332,1319],{"class":152},[142,4334,4335],{"class":144,"line":1702},[142,4336,4337],{"class":152},"   }\n",[142,4339,4340],{"class":144,"line":1707},[142,4341,4342],{"class":211},"   \u002F\u002F输出逆置后的数组\n",[142,4344,4345,4348,4350,4352,4354,4356,4358,4360,4362,4364,4366,4368],{"class":144,"line":1721},[142,4346,4347],{"class":148},"   for",[142,4349,1686],{"class":152},[142,4351,156],{"class":148},[142,4353,3060],{"class":152},[142,4355,198],{"class":148},[142,4357,344],{"class":201},[142,4359,3067],{"class":152},[142,4361,1063],{"class":148},[142,4363,472],{"class":201},[142,4365,3067],{"class":152},[142,4367,2320],{"class":148},[142,4369,159],{"class":152},[142,4371,4372],{"class":144,"line":1726},[142,4373,4271],{"class":152},[142,4375,4376,4378,4380,4383,4385,4388],{"class":144,"line":1755},[142,4377,1579],{"class":152},[142,4379,1197],{"class":148},[142,4381,4382],{"class":152},"arr[i]",[142,4384,1197],{"class":148},[142,4386,4387],{"class":257},"\" \"",[142,4389,1319],{"class":152},[142,4391,4392],{"class":144,"line":1760},[142,4393,4337],{"class":152},[142,4395,4396,4399,4401,4403],{"class":144,"line":1777},[142,4397,4398],{"class":1991},"   system",[142,4400,153],{"class":152},[142,4402,2336],{"class":257},[142,4404,2747],{"class":152},[142,4406,4407,4410,4412],{"class":144,"line":1782},[142,4408,4409],{"class":148},"   return",[142,4411,4121],{"class":201},[142,4413,1319],{"class":152},[142,4415,4416],{"class":144,"line":1787},[142,4417,1593],{"class":152},[1160,4419,4420],{},[99,4421,4422],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[133,4424,4426],{"className":135,"code":4425,"language":137,"meta":31,"style":31},"\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",[139,4427,4428,4433,4439,4449,4457,4461,4513,4526,4552,4556,4570,4574,4579,4584,4614,4618,4623,4657,4661,4666,4686,4691,4703,4719,4734,4739,4743,4747,4760,4786,4790,4804,4808,4816],{"__ignoreMap":31},[142,4429,4430],{"class":144,"line":145},[142,4431,4432],{"class":211},"\u002F\u002F冒泡排序,升序\n",[142,4434,4435,4437],{"class":144,"line":64},[142,4436,1977],{"class":148},[142,4438,1980],{"class":257},[142,4440,4441,4443,4445,4447],{"class":144,"line":1208},[142,4442,1985],{"class":148},[142,4444,1988],{"class":148},[142,4446,1992],{"class":1991},[142,4448,1319],{"class":152},[142,4450,4451,4453,4455],{"class":144,"line":1223},[142,4452,156],{"class":148},[142,4454,2001],{"class":1991},[142,4456,2004],{"class":152},[142,4458,4459],{"class":144,"line":1229},[142,4460,1574],{"class":152},[142,4462,4463,4465,4467,4469,4472,4474,4477,4479,4481,4483,4485,4487,4489,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509,4511],{"class":144,"line":1243},[142,4464,2013],{"class":148},[142,4466,3990],{"class":152},[142,4468,573],{"class":201},[142,4470,4471],{"class":152},"] ",[142,4473,198],{"class":148},[142,4475,4476],{"class":152}," {",[142,4478,446],{"class":201},[142,4480,531],{"class":152},[142,4482,230],{"class":201},[142,4484,531],{"class":152},[142,4486,548],{"class":201},[142,4488,531],{"class":152},[142,4490,344],{"class":201},[142,4492,531],{"class":152},[142,4494,472],{"class":201},[142,4496,531],{"class":152},[142,4498,522],{"class":201},[142,4500,531],{"class":152},[142,4502,370],{"class":201},[142,4504,531],{"class":152},[142,4506,224],{"class":201},[142,4508,531],{"class":152},[142,4510,573],{"class":201},[142,4512,4023],{"class":152},[142,4514,4515,4517,4519,4522,4524],{"class":144,"line":1249},[142,4516,1579],{"class":152},[142,4518,1197],{"class":148},[142,4520,4521],{"class":257},"\"排序前：\"",[142,4523,1197],{"class":148},[142,4525,1220],{"class":152},[142,4527,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550],{"class":144,"line":1340},[142,4529,3229],{"class":148},[142,4531,1686],{"class":152},[142,4533,156],{"class":148},[142,4535,3060],{"class":152},[142,4537,198],{"class":148},[142,4539,344],{"class":201},[142,4541,3067],{"class":152},[142,4543,1063],{"class":148},[142,4545,573],{"class":201},[142,4547,3067],{"class":152},[142,4549,2320],{"class":148},[142,4551,159],{"class":152},[142,4553,4554],{"class":144,"line":1346},[142,4555,2058],{"class":152},[142,4557,4558,4560,4562,4564,4566,4568],{"class":144,"line":1358},[142,4559,3479],{"class":152},[142,4561,1197],{"class":148},[142,4563,4382],{"class":152},[142,4565,1197],{"class":148},[142,4567,4387],{"class":257},[142,4569,1319],{"class":152},[142,4571,4572],{"class":144,"line":1640},[142,4573,2215],{"class":152},[142,4575,4576],{"class":144,"line":1645},[142,4577,4578],{"class":211},"    \u002F\u002F开始冒泡排序\n",[142,4580,4581],{"class":144,"line":1651},[142,4582,4583],{"class":211},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[142,4585,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612],{"class":144,"line":1656},[142,4587,3229],{"class":148},[142,4589,1686],{"class":152},[142,4591,156],{"class":148},[142,4593,3060],{"class":152},[142,4595,198],{"class":148},[142,4597,344],{"class":201},[142,4599,3067],{"class":152},[142,4601,1063],{"class":148},[142,4603,573],{"class":201},[142,4605,685],{"class":148},[142,4607,370],{"class":201},[142,4609,3067],{"class":152},[142,4611,2320],{"class":148},[142,4613,159],{"class":152},[142,4615,4616],{"class":144,"line":1670},[142,4617,2058],{"class":152},[142,4619,4620],{"class":144,"line":1675},[142,4621,4622],{"class":211},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[142,4624,4625,4627,4629,4631,4633,4635,4637,4639,4641,4643,4645,4647,4649,4651,4653,4655],{"class":144,"line":1681},[142,4626,3431],{"class":148},[142,4628,1686],{"class":152},[142,4630,156],{"class":148},[142,4632,3438],{"class":152},[142,4634,198],{"class":148},[142,4636,344],{"class":201},[142,4638,3445],{"class":152},[142,4640,1063],{"class":148},[142,4642,573],{"class":201},[142,4644,685],{"class":148},[142,4646,594],{"class":152},[142,4648,685],{"class":148},[142,4650,370],{"class":201},[142,4652,3445],{"class":152},[142,4654,2320],{"class":148},[142,4656,159],{"class":152},[142,4658,4659],{"class":144,"line":1702},[142,4660,2538],{"class":152},[142,4662,4663],{"class":144,"line":1707},[142,4664,4665],{"class":211},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[142,4667,4668,4671,4674,4676,4679,4681,4683],{"class":144,"line":1721},[142,4669,4670],{"class":148},"            if",[142,4672,4673],{"class":152},"(arr[j]",[142,4675,1113],{"class":148},[142,4677,4678],{"class":152},"arr[j",[142,4680,634],{"class":148},[142,4682,370],{"class":201},[142,4684,4685],{"class":152},"])\n",[142,4687,4688],{"class":144,"line":1726},[142,4689,4690],{"class":152},"            {\n",[142,4692,4693,4696,4698,4700],{"class":144,"line":1755},[142,4694,4695],{"class":148},"                int",[142,4697,4283],{"class":152},[142,4699,198],{"class":148},[142,4701,4702],{"class":152},"arr[j];\n",[142,4704,4705,4708,4710,4712,4714,4716],{"class":144,"line":1760},[142,4706,4707],{"class":152},"                arr[j]",[142,4709,198],{"class":148},[142,4711,4678],{"class":152},[142,4713,634],{"class":148},[142,4715,370],{"class":201},[142,4717,4718],{"class":152},"];\n",[142,4720,4721,4724,4726,4728,4730,4732],{"class":144,"line":1777},[142,4722,4723],{"class":152},"                arr[j",[142,4725,634],{"class":148},[142,4727,370],{"class":201},[142,4729,1093],{"class":152},[142,4731,198],{"class":148},[142,4733,4308],{"class":152},[142,4735,4736],{"class":144,"line":1782},[142,4737,4738],{"class":152},"            }\n",[142,4740,4741],{"class":144,"line":1787},[142,4742,2557],{"class":152},[142,4744,4745],{"class":144,"line":1792},[142,4746,2215],{"class":152},[142,4748,4749,4751,4753,4756,4758],{"class":144,"line":1806},[142,4750,1579],{"class":152},[142,4752,1197],{"class":148},[142,4754,4755],{"class":257},"\"排序后：\"",[142,4757,1197],{"class":148},[142,4759,1220],{"class":152},[142,4761,4762,4764,4766,4768,4770,4772,4774,4776,4778,4780,4782,4784],{"class":144,"line":1811},[142,4763,3229],{"class":148},[142,4765,1686],{"class":152},[142,4767,156],{"class":148},[142,4769,3060],{"class":152},[142,4771,198],{"class":148},[142,4773,344],{"class":201},[142,4775,3067],{"class":152},[142,4777,1063],{"class":148},[142,4779,573],{"class":201},[142,4781,3067],{"class":152},[142,4783,2320],{"class":148},[142,4785,159],{"class":152},[142,4787,4788],{"class":144,"line":2605},[142,4789,2058],{"class":152},[142,4791,4792,4794,4796,4798,4800,4802],{"class":144,"line":2619},[142,4793,3479],{"class":152},[142,4795,1197],{"class":148},[142,4797,4382],{"class":152},[142,4799,1197],{"class":148},[142,4801,4387],{"class":257},[142,4803,1319],{"class":152},[142,4805,4806],{"class":144,"line":2627},[142,4807,2215],{"class":152},[142,4809,4810,4812,4814],{"class":144,"line":2632},[142,4811,4118],{"class":148},[142,4813,4121],{"class":201},[142,4815,1319],{"class":152},[142,4817,4818],{"class":144,"line":2638},[142,4819,1593],{"class":152},[113,4821,4823],{"id":4822},"_172二维数组","1.7.2二维数组",[96,4825,4826],{},[99,4827,4828],{},"二维数组的四种定义方式",[290,4830,4831,4840],{},[293,4832,4833],{},[296,4834,4835,4838],{},[299,4836,4837],{},"序号",[299,4839,3809],{},[337,4841,4842,4852,4861,4870,4879],{},[296,4843,4844,4846],{},[342,4845,370],{},[342,4847,4848,4849,208],{},"数据类型 数组名[行数]",[142,4850,4851],{},"列数",[296,4853,4854,4856],{},[342,4855,230],{},[342,4857,4848,4858,4860],{},[142,4859,4851],{},"={ {数据1,数据2}，{数据3，数据4}... }",[296,4862,4863,4865],{},[342,4864,224],{},[342,4866,4848,4867,4869],{},[142,4868,4851],{},"={数据1,数据2,数据3...}",[296,4871,4872,4874],{},[342,4873,446],{},[342,4875,4876,4877,4869],{},"数据类型 数组名[]",[142,4878,4851],{},[296,4880,4881,4884],{},[342,4882,4883],{},"注意：不能只省略列数",[342,4885],{},[96,4887,4888],{"start":64},[99,4889,4890],{},"二维数组数组名",[1160,4892,4893,4896],{},[99,4894,4895],{},"1.查看二维数组所占内存空间",[99,4897,4898],{},"2.获取二维数组首地址",[14,4900,4901],{},"已知二维数组，求二维数组的行数与列数",[133,4903,4905],{"className":135,"code":4904,"language":137,"meta":31,"style":31},"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",[139,4906,4907,4915,4919,4937,4941,4959,4975,4980,5005,5038],{"__ignoreMap":31},[142,4908,4909,4911,4913],{"class":144,"line":145},[142,4910,156],{"class":148},[142,4912,2001],{"class":1991},[142,4914,2004],{"class":152},[142,4916,4917],{"class":144,"line":64},[142,4918,1574],{"class":152},[142,4920,4921,4923,4925,4927,4930,4932,4934],{"class":144,"line":1208},[142,4922,2013],{"class":148},[142,4924,3990],{"class":152},[142,4926,230],{"class":201},[142,4928,4929],{"class":152},"][",[142,4931,224],{"class":201},[142,4933,1093],{"class":152},[142,4935,4936],{"class":148},"=\n",[142,4938,4939],{"class":144,"line":1223},[142,4940,2058],{"class":152},[142,4942,4943,4946,4948,4950,4952,4954,4956],{"class":144,"line":1229},[142,4944,4945],{"class":152},"        {",[142,4947,370],{"class":201},[142,4949,531],{"class":152},[142,4951,230],{"class":201},[142,4953,531],{"class":152},[142,4955,224],{"class":201},[142,4957,4958],{"class":152},"},\n",[142,4960,4961,4963,4965,4967,4969,4971,4973],{"class":144,"line":1243},[142,4962,4945],{"class":152},[142,4964,446],{"class":201},[142,4966,531],{"class":152},[142,4968,472],{"class":201},[142,4970,531],{"class":152},[142,4972,497],{"class":201},[142,4974,1593],{"class":152},[142,4976,4977],{"class":144,"line":1249},[142,4978,4979],{"class":152},"    };\n",[142,4981,4982,4984,4986,4989,4991,4993,4995,4997,4999,5001,5003],{"class":144,"line":1340},[142,4983,1579],{"class":152},[142,4985,1197],{"class":148},[142,4987,4988],{"class":257},"\"二维数组的行数\"",[142,4990,1401],{"class":148},[142,4992,4234],{"class":152},[142,4994,4237],{"class":148},[142,4996,3879],{"class":152},[142,4998,344],{"class":201},[142,5000,4244],{"class":152},[142,5002,1197],{"class":148},[142,5004,1220],{"class":152},[142,5006,5007,5009,5011,5014,5016,5018,5020,5022,5024,5026,5028,5030,5032,5034,5036],{"class":144,"line":1346},[142,5008,1579],{"class":152},[142,5010,1197],{"class":148},[142,5012,5013],{"class":257},"\"二维数组的列数\"",[142,5015,1401],{"class":148},[142,5017,3879],{"class":152},[142,5019,344],{"class":201},[142,5021,4244],{"class":152},[142,5023,4237],{"class":148},[142,5025,3879],{"class":152},[142,5027,344],{"class":201},[142,5029,4929],{"class":152},[142,5031,344],{"class":201},[142,5033,4244],{"class":152},[142,5035,1197],{"class":148},[142,5037,1220],{"class":152},[142,5039,5040],{"class":144,"line":1358},[142,5041,1593],{"class":152},[14,5043,5044],{},"查看二维数组首地址",[133,5046,5048],{"className":135,"code":5047,"language":137,"meta":31,"style":31},"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",[139,5049,5050,5067,5093,5118],{"__ignoreMap":31},[142,5051,5052,5054,5056,5059,5061,5063,5065],{"class":144,"line":145},[142,5053,1398],{"class":152},[142,5055,1197],{"class":148},[142,5057,5058],{"class":257},"\"二维数组首地址：\"",[142,5060,1197],{"class":148},[142,5062,3908],{"class":152},[142,5064,1197],{"class":148},[142,5066,1220],{"class":152},[142,5068,5069,5071,5073,5076,5078,5080,5082,5085,5087,5089,5091],{"class":144,"line":64},[142,5070,1398],{"class":152},[142,5072,1197],{"class":148},[142,5074,5075],{"class":257},"\"二维数组第一行的首地址：\"",[142,5077,1197],{"class":148},[142,5079,153],{"class":152},[142,5081,156],{"class":148},[142,5083,5084],{"class":152},")arr[",[142,5086,344],{"class":201},[142,5088,1093],{"class":152},[142,5090,1197],{"class":148},[142,5092,1220],{"class":152},[142,5094,5095,5097,5099,5102,5104,5106,5108,5110,5112,5114,5116],{"class":144,"line":1208},[142,5096,1398],{"class":152},[142,5098,1197],{"class":148},[142,5100,5101],{"class":257},"\"二维数组第二行的首地址：\"",[142,5103,1197],{"class":148},[142,5105,153],{"class":152},[142,5107,156],{"class":148},[142,5109,5084],{"class":152},[142,5111,370],{"class":201},[142,5113,1093],{"class":152},[142,5115,1197],{"class":148},[142,5117,1220],{"class":152},[142,5119,5120,5122,5124,5127,5129,5131,5133,5135,5137,5139,5141,5143,5145,5147,5149,5151],{"class":144,"line":1223},[142,5121,1398],{"class":152},[142,5123,1197],{"class":148},[142,5125,5126],{"class":257},"\"二维数组第一个元素的首地址:\"",[142,5128,1197],{"class":148},[142,5130,153],{"class":152},[142,5132,156],{"class":148},[142,5134,582],{"class":152},[142,5136,506],{"class":148},[142,5138,3934],{"class":152},[142,5140,344],{"class":201},[142,5142,4929],{"class":152},[142,5144,344],{"class":201},[142,5146,1093],{"class":152},[142,5148,1197],{"class":148},[142,5150,1267],{"class":152},[142,5152,5153],{"class":211},"\u002F\u002F对于数，要加取址符\n",[5155,5156,5157],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":31,"searchDepth":64,"depth":64,"links":5159},[5160,5161,5162,5170,5171,5177,5182],{"id":86,"depth":64,"text":87},{"id":93,"depth":64,"text":94},{"id":110,"depth":64,"text":111,"children":5163},[5164,5165,5166,5167,5168,5169],{"id":115,"depth":1208,"text":116},{"id":169,"depth":1208,"text":170},{"id":238,"depth":1208,"text":239},{"id":1178,"depth":1208,"text":1179},{"id":1273,"depth":1208,"text":1274},{"id":1372,"depth":1208,"text":1373},{"id":1414,"depth":64,"text":1415},{"id":1482,"depth":64,"text":1483,"children":5172},[5173,5174,5175,5176],{"id":1486,"depth":1208,"text":1487},{"id":1507,"depth":1208,"text":1508},{"id":1516,"depth":1208,"text":1517},{"id":1525,"depth":1208,"text":1526},{"id":1534,"depth":64,"text":1535,"children":5178},[5179,5180,5181],{"id":1538,"depth":1208,"text":1539},{"id":2233,"depth":1208,"text":2234},{"id":3649,"depth":1208,"text":3650},{"id":3790,"depth":64,"text":3791,"children":5183},[5184,5185],{"id":3794,"depth":1208,"text":3795},{"id":4822,"depth":1208,"text":4823},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":77,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5192,"title":5193,"body":5194,"description":31,"extension":67,"meta":6294,"navigation":69,"path":6295,"seo":6296,"stem":6297,"__hash__":6298},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5195,"toc":6286},[5196,5199,5203,5211,5219,5222,5288,5292,5295,5371,5375,5378,5381,5384,5597,5601,5606,5670,5675,5742,5747,5838,5841,5946,5950,5953,5959,6103,6107,6110,6124,6127,6172,6175,6283],[10,5197,5193],{"id":5198},"_2函数",[84,5200,5202],{"id":5201},"_21函数概述","2.1函数概述",[96,5204,5205,5208],{},[99,5206,5207],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[99,5209,5210],{},"语法：",[133,5212,5217],{"className":5213,"code":5215,"language":5216,"meta":31},[5214],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[139,5218,5215],{"__ignoreMap":31},[14,5220,5221],{},"小案例",[133,5223,5225],{"className":135,"code":5224,"language":137,"meta":31,"style":31},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[139,5226,5227,5232,5256,5260,5277,5284],{"__ignoreMap":31},[142,5228,5229],{"class":144,"line":145},[142,5230,5231],{"class":211},"\u002F\u002Fnum1,num2形参\n",[142,5233,5234,5236,5239,5241,5243,5247,5249,5251,5254],{"class":144,"line":64},[142,5235,156],{"class":148},[142,5237,5238],{"class":1991}," add",[142,5240,153],{"class":152},[142,5242,156],{"class":148},[142,5244,5246],{"class":5245},"s4XuR"," num1",[142,5248,531],{"class":152},[142,5250,156],{"class":148},[142,5252,5253],{"class":5245}," num2",[142,5255,159],{"class":152},[142,5257,5258],{"class":144,"line":1208},[142,5259,1574],{"class":152},[142,5261,5262,5264,5267,5269,5272,5274],{"class":144,"line":1223},[142,5263,2013],{"class":148},[142,5265,5266],{"class":152}," sum",[142,5268,198],{"class":148},[142,5270,5271],{"class":152},"num1",[142,5273,634],{"class":148},[142,5275,5276],{"class":152},"num2;\n",[142,5278,5279,5281],{"class":144,"line":1229},[142,5280,4118],{"class":148},[142,5282,5283],{"class":152}," sum;\n",[142,5285,5286],{"class":144,"line":1243},[142,5287,1593],{"class":152},[84,5289,5291],{"id":5290},"_22函数调用","2.2函数调用",[14,5293,5294],{},"调用刚刚写的求和函数",[133,5296,5298],{"className":135,"code":5297,"language":137,"meta":31,"style":31},"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",[139,5299,5300,5308,5312,5317,5329,5341,5350,5355,5367],{"__ignoreMap":31},[142,5301,5302,5304,5306],{"class":144,"line":145},[142,5303,156],{"class":148},[142,5305,2001],{"class":1991},[142,5307,2004],{"class":152},[142,5309,5310],{"class":144,"line":64},[142,5311,1574],{"class":152},[142,5313,5314],{"class":144,"line":1208},[142,5315,5316],{"class":211},"    \u002F\u002Fa,b实参\n",[142,5318,5319,5321,5323,5325,5327],{"class":144,"line":1223},[142,5320,2013],{"class":148},[142,5322,1427],{"class":152},[142,5324,198],{"class":148},[142,5326,344],{"class":201},[142,5328,1319],{"class":152},[142,5330,5331,5333,5335,5337,5339],{"class":144,"line":1229},[142,5332,2013],{"class":148},[142,5334,2861],{"class":152},[142,5336,198],{"class":148},[142,5338,344],{"class":201},[142,5340,1319],{"class":152},[142,5342,5343,5345,5347],{"class":144,"line":1243},[142,5344,2040],{"class":152},[142,5346,1458],{"class":148},[142,5348,5349],{"class":152},"a,b;\n",[142,5351,5352],{"class":144,"line":1249},[142,5353,5354],{"class":211},"    \u002F\u002F调用函数时，实参值传给了形参\n",[142,5356,5357,5359,5361,5364],{"class":144,"line":1340},[142,5358,1579],{"class":152},[142,5360,1197],{"class":148},[142,5362,5363],{"class":1991},"add",[142,5365,5366],{"class":152},"(a,b);\n",[142,5368,5369],{"class":144,"line":1346},[142,5370,1593],{"class":152},[84,5372,5374],{"id":5373},"_23值传递","2.3值传递",[14,5376,5377],{},"值传递就是函数调用时实参将数值传给形参",[14,5379,5380],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5382,5383],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[133,5385,5387],{"className":135,"code":5386,"language":137,"meta":31,"style":31},"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",[139,5388,5389,5411,5415,5428,5445,5463,5474,5483,5492,5505,5521,5537,5546,5550,5558,5562,5574,5586,5593],{"__ignoreMap":31},[142,5390,5391,5394,5397,5399,5401,5403,5405,5407,5409],{"class":144,"line":145},[142,5392,5393],{"class":148},"void",[142,5395,5396],{"class":1991}," swap",[142,5398,153],{"class":152},[142,5400,156],{"class":148},[142,5402,5246],{"class":5245},[142,5404,531],{"class":152},[142,5406,156],{"class":148},[142,5408,5253],{"class":5245},[142,5410,159],{"class":152},[142,5412,5413],{"class":144,"line":64},[142,5414,1574],{"class":152},[142,5416,5417,5419,5421,5424,5426],{"class":144,"line":1208},[142,5418,1579],{"class":152},[142,5420,1197],{"class":148},[142,5422,5423],{"class":257},"\"交换前：\"",[142,5425,1197],{"class":148},[142,5427,1220],{"class":152},[142,5429,5430,5432,5434,5437,5439,5441,5443],{"class":144,"line":1223},[142,5431,1579],{"class":152},[142,5433,1197],{"class":148},[142,5435,5436],{"class":257},"\"num1=\"",[142,5438,1197],{"class":148},[142,5440,5271],{"class":152},[142,5442,1197],{"class":148},[142,5444,1220],{"class":152},[142,5446,5447,5449,5451,5454,5456,5459,5461],{"class":144,"line":1229},[142,5448,1579],{"class":152},[142,5450,1197],{"class":148},[142,5452,5453],{"class":257},"\"num2=\"",[142,5455,1197],{"class":148},[142,5457,5458],{"class":152},"num2",[142,5460,1197],{"class":148},[142,5462,1220],{"class":152},[142,5464,5465,5467,5469,5471],{"class":144,"line":1243},[142,5466,2013],{"class":148},[142,5468,4283],{"class":152},[142,5470,198],{"class":148},[142,5472,5473],{"class":152},"num1;\n",[142,5475,5476,5479,5481],{"class":144,"line":1249},[142,5477,5478],{"class":152},"    num1",[142,5480,198],{"class":148},[142,5482,5276],{"class":152},[142,5484,5485,5488,5490],{"class":144,"line":1340},[142,5486,5487],{"class":152},"    num2",[142,5489,198],{"class":148},[142,5491,4308],{"class":152},[142,5493,5494,5496,5498,5501,5503],{"class":144,"line":1346},[142,5495,1579],{"class":152},[142,5497,1197],{"class":148},[142,5499,5500],{"class":257},"\"交换后：\"",[142,5502,1197],{"class":148},[142,5504,1220],{"class":152},[142,5506,5507,5509,5511,5513,5515,5517,5519],{"class":144,"line":1358},[142,5508,1579],{"class":152},[142,5510,1197],{"class":148},[142,5512,5436],{"class":257},[142,5514,1197],{"class":148},[142,5516,5271],{"class":152},[142,5518,1197],{"class":148},[142,5520,1220],{"class":152},[142,5522,5523,5525,5527,5529,5531,5533,5535],{"class":144,"line":1640},[142,5524,1579],{"class":152},[142,5526,1197],{"class":148},[142,5528,5453],{"class":257},[142,5530,1197],{"class":148},[142,5532,5458],{"class":152},[142,5534,1197],{"class":148},[142,5536,1220],{"class":152},[142,5538,5539,5541,5543],{"class":144,"line":1645},[142,5540,4118],{"class":148},[142,5542,208],{"class":152},[142,5544,5545],{"class":211},"\u002F\u002F或者不写\n",[142,5547,5548],{"class":144,"line":1651},[142,5549,1593],{"class":152},[142,5551,5552,5554,5556],{"class":144,"line":1656},[142,5553,156],{"class":148},[142,5555,2001],{"class":1991},[142,5557,2004],{"class":152},[142,5559,5560],{"class":144,"line":1670},[142,5561,1574],{"class":152},[142,5563,5564,5566,5568,5570,5572],{"class":144,"line":1675},[142,5565,2013],{"class":148},[142,5567,1427],{"class":152},[142,5569,198],{"class":148},[142,5571,599],{"class":201},[142,5573,1319],{"class":152},[142,5575,5576,5578,5580,5582,5584],{"class":144,"line":1681},[142,5577,2013],{"class":148},[142,5579,2861],{"class":152},[142,5581,198],{"class":148},[142,5583,853],{"class":201},[142,5585,1319],{"class":152},[142,5587,5588,5591],{"class":144,"line":1702},[142,5589,5590],{"class":1991},"    swap",[142,5592,5366],{"class":152},[142,5594,5595],{"class":144,"line":1707},[142,5596,1593],{"class":152},[84,5598,5600],{"id":5599},"_24函数的常见形式","2.4函数的常见形式",[96,5602,5603],{},[99,5604,5605],{},"无参无返",[133,5607,5609],{"className":135,"code":5608,"language":137,"meta":31,"style":31},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[139,5610,5611,5620,5624,5637,5641,5649,5653,5658,5666],{"__ignoreMap":31},[142,5612,5613,5615,5618],{"class":144,"line":145},[142,5614,5393],{"class":148},[142,5616,5617],{"class":1991}," test01",[142,5619,2004],{"class":152},[142,5621,5622],{"class":144,"line":64},[142,5623,1574],{"class":152},[142,5625,5626,5628,5630,5633,5635],{"class":144,"line":1208},[142,5627,1579],{"class":152},[142,5629,1197],{"class":148},[142,5631,5632],{"class":257},"\"你好\"",[142,5634,1197],{"class":148},[142,5636,1220],{"class":152},[142,5638,5639],{"class":144,"line":1223},[142,5640,1593],{"class":152},[142,5642,5643,5645,5647],{"class":144,"line":1229},[142,5644,156],{"class":148},[142,5646,2001],{"class":1991},[142,5648,2004],{"class":152},[142,5650,5651],{"class":144,"line":1243},[142,5652,1574],{"class":152},[142,5654,5655],{"class":144,"line":1249},[142,5656,5657],{"class":211},"    \u002F\u002F函数调用\n",[142,5659,5660,5663],{"class":144,"line":1340},[142,5661,5662],{"class":1991},"    test01",[142,5664,5665],{"class":152},"();\n",[142,5667,5668],{"class":144,"line":1346},[142,5669,1593],{"class":152},[96,5671,5672],{"start":64},[99,5673,5674],{},"有参无返",[133,5676,5678],{"className":135,"code":5677,"language":137,"meta":31,"style":31},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[139,5679,5680,5695,5699,5711,5715,5723,5727,5738],{"__ignoreMap":31},[142,5681,5682,5684,5687,5689,5691,5693],{"class":144,"line":145},[142,5683,5393],{"class":148},[142,5685,5686],{"class":1991}," test02",[142,5688,153],{"class":152},[142,5690,156],{"class":148},[142,5692,1427],{"class":5245},[142,5694,159],{"class":152},[142,5696,5697],{"class":144,"line":64},[142,5698,1574],{"class":152},[142,5700,5701,5703,5705,5707,5709],{"class":144,"line":1208},[142,5702,1579],{"class":152},[142,5704,1197],{"class":148},[142,5706,5632],{"class":257},[142,5708,1197],{"class":148},[142,5710,1220],{"class":152},[142,5712,5713],{"class":144,"line":1223},[142,5714,1593],{"class":152},[142,5716,5717,5719,5721],{"class":144,"line":1229},[142,5718,156],{"class":148},[142,5720,2001],{"class":1991},[142,5722,2004],{"class":152},[142,5724,5725],{"class":144,"line":1243},[142,5726,1574],{"class":152},[142,5728,5729,5732,5734,5736],{"class":144,"line":1249},[142,5730,5731],{"class":1991},"    test02",[142,5733,153],{"class":152},[142,5735,464],{"class":201},[142,5737,2747],{"class":152},[142,5739,5740],{"class":144,"line":1340},[142,5741,1593],{"class":152},[96,5743,5744],{"start":1208},[99,5745,5746],{},"无参有返",[133,5748,5750],{"className":135,"code":5749,"language":137,"meta":31,"style":31},"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",[139,5751,5752,5761,5765,5777,5786,5790,5798,5802,5815,5834],{"__ignoreMap":31},[142,5753,5754,5756,5759],{"class":144,"line":145},[142,5755,156],{"class":148},[142,5757,5758],{"class":1991}," test03",[142,5760,2004],{"class":152},[142,5762,5763],{"class":144,"line":64},[142,5764,1574],{"class":152},[142,5766,5767,5769,5771,5773,5775],{"class":144,"line":1208},[142,5768,1579],{"class":152},[142,5770,1197],{"class":148},[142,5772,5632],{"class":257},[142,5774,1197],{"class":148},[142,5776,1220],{"class":152},[142,5778,5779,5781,5784],{"class":144,"line":1223},[142,5780,4118],{"class":148},[142,5782,5783],{"class":201}," 100",[142,5785,1319],{"class":152},[142,5787,5788],{"class":144,"line":1229},[142,5789,1593],{"class":152},[142,5791,5792,5794,5796],{"class":144,"line":1243},[142,5793,156],{"class":148},[142,5795,2001],{"class":1991},[142,5797,2004],{"class":152},[142,5799,5800],{"class":144,"line":1249},[142,5801,1574],{"class":152},[142,5803,5804,5806,5808,5810,5813],{"class":144,"line":1340},[142,5805,2013],{"class":148},[142,5807,5246],{"class":152},[142,5809,198],{"class":148},[142,5811,5812],{"class":1991},"test03",[142,5814,5665],{"class":152},[142,5816,5817,5819,5821,5823,5825,5827,5829,5831],{"class":144,"line":1346},[142,5818,1579],{"class":152},[142,5820,1197],{"class":148},[142,5822,5436],{"class":257},[142,5824,1197],{"class":148},[142,5826,5271],{"class":152},[142,5828,1197],{"class":148},[142,5830,1267],{"class":152},[142,5832,5833],{"class":211}," \u002F\u002F100\n",[142,5835,5836],{"class":144,"line":1358},[142,5837,1593],{"class":152},[14,5839,5840],{},"4.有参有返",[133,5842,5844],{"className":135,"code":5843,"language":137,"meta":31,"style":31},"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",[139,5845,5846,5861,5865,5878,5884,5888,5897,5901,5913,5927,5942],{"__ignoreMap":31},[142,5847,5848,5850,5853,5855,5857,5859],{"class":144,"line":145},[142,5849,156],{"class":148},[142,5851,5852],{"class":1991}," test04",[142,5854,153],{"class":152},[142,5856,156],{"class":148},[142,5858,1427],{"class":5245},[142,5860,159],{"class":152},[142,5862,5863],{"class":144,"line":64},[142,5864,1574],{"class":152},[142,5866,5867,5869,5871,5874,5876],{"class":144,"line":1208},[142,5868,1579],{"class":152},[142,5870,1197],{"class":148},[142,5872,5873],{"class":257},"\"hello\"",[142,5875,1197],{"class":148},[142,5877,1220],{"class":152},[142,5879,5880,5882],{"class":144,"line":1223},[142,5881,4118],{"class":148},[142,5883,1461],{"class":152},[142,5885,5886],{"class":144,"line":1229},[142,5887,1593],{"class":152},[142,5889,5890,5892,5895],{"class":144,"line":1243},[142,5891,156],{"class":148},[142,5893,5894],{"class":1991}," mian",[142,5896,2004],{"class":152},[142,5898,5899],{"class":144,"line":1249},[142,5900,1574],{"class":152},[142,5902,5903,5905,5907,5909,5911],{"class":144,"line":1340},[142,5904,2013],{"class":148},[142,5906,2861],{"class":152},[142,5908,198],{"class":148},[142,5910,370],{"class":201},[142,5912,1319],{"class":152},[142,5914,5915,5917,5919,5921,5924],{"class":144,"line":1346},[142,5916,2013],{"class":148},[142,5918,2877],{"class":152},[142,5920,198],{"class":148},[142,5922,5923],{"class":1991},"test04",[142,5925,5926],{"class":152},"(b);\n",[142,5928,5929,5931,5933,5935,5937,5939],{"class":144,"line":1358},[142,5930,1579],{"class":152},[142,5932,1197],{"class":148},[142,5934,441],{"class":152},[142,5936,1197],{"class":148},[142,5938,1267],{"class":152},[142,5940,5941],{"class":211}," \u002F\u002F1\n",[142,5943,5944],{"class":144,"line":1640},[142,5945,1593],{"class":152},[84,5947,5949],{"id":5948},"_25函数的声明","2.5函数的声明",[14,5951,5952],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5954,5955,5956],{},"函数的",[302,5957,5958],{},"声明可以多次，但是函数的定义只能有一次",[133,5960,5962],{"className":135,"code":5961,"language":137,"meta":31,"style":31},"\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",[139,5963,5964,5969,5974,5999,6008,6012,6024,6036,6052,6056,6076,6080,6099],{"__ignoreMap":31},[142,5965,5966],{"class":144,"line":145},[142,5967,5968],{"class":211},"\u002F\u002F函数声明\n",[142,5970,5971],{"class":144,"line":64},[142,5972,5973],{"class":211},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[142,5975,5976,5978,5981,5983,5985,5987,5989,5991,5993,5996],{"class":144,"line":1208},[142,5977,156],{"class":148},[142,5979,5980],{"class":1991}," max",[142,5982,153],{"class":152},[142,5984,156],{"class":148},[142,5986,1427],{"class":5245},[142,5988,531],{"class":152},[142,5990,156],{"class":148},[142,5992,2861],{"class":5245},[142,5994,5995],{"class":152},");",[142,5997,5998],{"class":211},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[142,6000,6001,6003,6005],{"class":144,"line":1223},[142,6002,156],{"class":148},[142,6004,2001],{"class":1991},[142,6006,6007],{"class":152},"() \n",[142,6009,6010],{"class":144,"line":1229},[142,6011,1574],{"class":152},[142,6013,6014,6016,6018,6020,6022],{"class":144,"line":1243},[142,6015,2013],{"class":148},[142,6017,1427],{"class":152},[142,6019,198],{"class":148},[142,6021,599],{"class":201},[142,6023,1319],{"class":152},[142,6025,6026,6028,6030,6032,6034],{"class":144,"line":1249},[142,6027,2013],{"class":148},[142,6029,2861],{"class":152},[142,6031,198],{"class":148},[142,6033,853],{"class":201},[142,6035,1319],{"class":152},[142,6037,6038,6040,6042,6045,6048,6050],{"class":144,"line":1340},[142,6039,1579],{"class":152},[142,6041,1197],{"class":148},[142,6043,6044],{"class":1991},"max",[142,6046,6047],{"class":152},"(a,b)",[142,6049,1197],{"class":148},[142,6051,1220],{"class":152},[142,6053,6054],{"class":144,"line":1346},[142,6055,1593],{"class":152},[142,6057,6058,6060,6062,6064,6066,6068,6070,6072,6074],{"class":144,"line":1358},[142,6059,156],{"class":148},[142,6061,5980],{"class":1991},[142,6063,153],{"class":152},[142,6065,156],{"class":148},[142,6067,1427],{"class":5245},[142,6069,531],{"class":152},[142,6071,156],{"class":148},[142,6073,2861],{"class":5245},[142,6075,159],{"class":152},[142,6077,6078],{"class":144,"line":1640},[142,6079,1574],{"class":152},[142,6081,6082,6084,6086,6088,6090,6092,6094,6096],{"class":144,"line":1645},[142,6083,4118],{"class":148},[142,6085,1427],{"class":152},[142,6087,1113],{"class":148},[142,6089,416],{"class":152},[142,6091,1139],{"class":148},[142,6093,391],{"class":152},[142,6095,1012],{"class":148},[142,6097,6098],{"class":152},"b;\n",[142,6100,6101],{"class":144,"line":1651},[142,6102,1593],{"class":152},[84,6104,6106],{"id":6105},"_26函数的分文件编写","2.6函数的分文件编写",[14,6108,6109],{},"4个步骤：",[1160,6111,6112,6115,6118,6121],{},[99,6113,6114],{},"1.创建后缀名为.h的头文件",[99,6116,6117],{},"2.创建后缀名为.cpp的源文件",[99,6119,6120],{},"3.在头文件中写函数的定义",[99,6122,6123],{},"4.在源文件中写函数的定义\n示例：",[14,6125,6126],{},"头文件：swap.h",[133,6128,6130],{"className":135,"code":6129,"language":137,"meta":31,"style":31},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[139,6131,6132,6138,6148,6152],{"__ignoreMap":31},[142,6133,6134,6136],{"class":144,"line":145},[142,6135,1977],{"class":148},[142,6137,1980],{"class":257},[142,6139,6140,6142,6144,6146],{"class":144,"line":64},[142,6141,1985],{"class":148},[142,6143,1988],{"class":148},[142,6145,1992],{"class":1991},[142,6147,1319],{"class":152},[142,6149,6150],{"class":144,"line":1208},[142,6151,5968],{"class":211},[142,6153,6154,6156,6158,6160,6162,6164,6166,6168,6170],{"class":144,"line":1223},[142,6155,5393],{"class":148},[142,6157,5396],{"class":1991},[142,6159,153],{"class":152},[142,6161,156],{"class":148},[142,6163,1427],{"class":5245},[142,6165,531],{"class":152},[142,6167,156],{"class":148},[142,6169,2861],{"class":5245},[142,6171,2747],{"class":152},[14,6173,6174],{},"源文件：swap.cpp",[133,6176,6178],{"className":135,"code":6177,"language":137,"meta":31,"style":31},"#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",[139,6179,6180,6187,6192,6212,6216,6227,6236,6245,6262,6279],{"__ignoreMap":31},[142,6181,6182,6184],{"class":144,"line":145},[142,6183,1977],{"class":148},[142,6185,6186],{"class":257}," \"swap.h\"\n",[142,6188,6189],{"class":144,"line":64},[142,6190,6191],{"class":211},"\u002F\u002F函数的定义\n",[142,6193,6194,6196,6198,6200,6202,6204,6206,6208,6210],{"class":144,"line":1208},[142,6195,5393],{"class":148},[142,6197,5396],{"class":1991},[142,6199,153],{"class":152},[142,6201,156],{"class":148},[142,6203,1427],{"class":5245},[142,6205,531],{"class":152},[142,6207,156],{"class":148},[142,6209,2861],{"class":5245},[142,6211,159],{"class":152},[142,6213,6214],{"class":144,"line":1223},[142,6215,1574],{"class":152},[142,6217,6218,6220,6222,6224],{"class":144,"line":1229},[142,6219,2013],{"class":148},[142,6221,4283],{"class":152},[142,6223,198],{"class":148},[142,6225,6226],{"class":152},"a;\n",[142,6228,6229,6232,6234],{"class":144,"line":1243},[142,6230,6231],{"class":152},"    a",[142,6233,198],{"class":148},[142,6235,6098],{"class":152},[142,6237,6238,6241,6243],{"class":144,"line":1249},[142,6239,6240],{"class":152},"    b",[142,6242,198],{"class":148},[142,6244,4308],{"class":152},[142,6246,6247,6249,6251,6254,6256,6258,6260],{"class":144,"line":1340},[142,6248,1579],{"class":152},[142,6250,1197],{"class":148},[142,6252,6253],{"class":257},"\"a=\"",[142,6255,1197],{"class":148},[142,6257,391],{"class":152},[142,6259,1197],{"class":148},[142,6261,1220],{"class":152},[142,6263,6264,6266,6268,6271,6273,6275,6277],{"class":144,"line":1346},[142,6265,1579],{"class":152},[142,6267,1197],{"class":148},[142,6269,6270],{"class":257},"\"b=\"",[142,6272,1197],{"class":148},[142,6274,416],{"class":152},[142,6276,1197],{"class":148},[142,6278,1220],{"class":152},[142,6280,6281],{"class":144,"line":1358},[142,6282,1593],{"class":152},[5155,6284,6285],{},"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":31,"searchDepth":64,"depth":64,"links":6287},[6288,6289,6290,6291,6292,6293],{"id":5201,"depth":64,"text":5202},{"id":5290,"depth":64,"text":5291},{"id":5373,"depth":64,"text":5374},{"id":5599,"depth":64,"text":5600},{"id":5948,"depth":64,"text":5949},{"id":6105,"depth":64,"text":6106},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5193,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6300,"title":6301,"body":6302,"description":6309,"extension":67,"meta":7714,"navigation":69,"path":7715,"seo":7716,"stem":7717,"__hash__":7718},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6303,"toc":7704},[6304,6307,6310,6314,6476,6480,6483,6486,6489,6492,6632,6636,6639,6642,6645,6710,6714,6719,6786,6789,6793,6796,6807,6812,6832,6835,6840,6859,6862,6866,6885,6888,6892,7127,7131,7134,7137,7140,7302,7305,7309,7312,7318,7701],[10,6305,6301],{"id":6306},"_3指针",[14,6308,6309],{},"通过指针保存一个地址，指针就是个地址",[84,6311,6313],{"id":6312},"_31定义指针","3.1定义指针",[133,6315,6317],{"className":135,"code":6316,"language":137,"meta":31,"style":31},"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",[139,6318,6319,6327,6331,6336,6348,6353,6361,6371,6389,6409,6413,6418,6423,6428,6442,6458,6472],{"__ignoreMap":31},[142,6320,6321,6323,6325],{"class":144,"line":145},[142,6322,156],{"class":148},[142,6324,2001],{"class":1991},[142,6326,2004],{"class":152},[142,6328,6329],{"class":144,"line":64},[142,6330,1574],{"class":152},[142,6332,6333],{"class":144,"line":1208},[142,6334,6335],{"class":211},"    \u002F\u002F1.定义指针\n",[142,6337,6338,6340,6342,6344,6346],{"class":144,"line":1223},[142,6339,2013],{"class":148},[142,6341,1427],{"class":152},[142,6343,198],{"class":148},[142,6345,599],{"class":201},[142,6347,1319],{"class":152},[142,6349,6350],{"class":144,"line":1229},[142,6351,6352],{"class":211},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[142,6354,6355,6358],{"class":144,"line":1243},[142,6356,6357],{"class":148},"    int*",[142,6359,6360],{"class":152},"p;\n",[142,6362,6363,6366,6369],{"class":144,"line":1249},[142,6364,6365],{"class":152},"    p",[142,6367,6368],{"class":148},"=&",[142,6370,6226],{"class":152},[142,6372,6373,6375,6377,6380,6383,6385,6387],{"class":144,"line":1340},[142,6374,1579],{"class":152},[142,6376,1197],{"class":148},[142,6378,6379],{"class":257},"\"a的地址为：\"",[142,6381,6382],{"class":148},"\u003C\u003C&",[142,6384,391],{"class":152},[142,6386,1197],{"class":148},[142,6388,1220],{"class":152},[142,6390,6391,6393,6395,6398,6400,6402,6404,6406],{"class":144,"line":1346},[142,6392,1579],{"class":152},[142,6394,1197],{"class":148},[142,6396,6397],{"class":257},"\"指针p为：\"",[142,6399,1197],{"class":148},[142,6401,14],{"class":152},[142,6403,1197],{"class":148},[142,6405,1267],{"class":152},[142,6407,6408],{"class":211},"\u002F\u002F指针p表示的就是a的地址\n",[142,6410,6411],{"class":144,"line":1358},[142,6412,2428],{"emptyLinePlaceholder":69},[142,6414,6415],{"class":144,"line":1640},[142,6416,6417],{"class":211},"    \u002F\u002F2.使用指针\n",[142,6419,6420],{"class":144,"line":1645},[142,6421,6422],{"class":211},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[142,6424,6425],{"class":144,"line":1651},[142,6426,6427],{"class":211},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[142,6429,6430,6433,6435,6437,6440],{"class":144,"line":1656},[142,6431,6432],{"class":148},"    *",[142,6434,14],{"class":152},[142,6436,198],{"class":148},[142,6438,6439],{"class":201},"1000",[142,6441,1319],{"class":152},[142,6443,6444,6446,6449,6451,6453,6455],{"class":144,"line":1670},[142,6445,1579],{"class":152},[142,6447,6448],{"class":148},"\u003C\u003C*",[142,6450,14],{"class":152},[142,6452,1197],{"class":148},[142,6454,1267],{"class":152},[142,6456,6457],{"class":211},"\u002F\u002F1000\n",[142,6459,6460,6462,6464,6466,6468,6470],{"class":144,"line":1675},[142,6461,1579],{"class":152},[142,6463,1197],{"class":148},[142,6465,391],{"class":152},[142,6467,1197],{"class":148},[142,6469,1267],{"class":152},[142,6471,6457],{"class":211},[142,6473,6474],{"class":144,"line":1681},[142,6475,1593],{"class":152},[84,6477,6479],{"id":6478},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6481,6482],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6484,6485],{},"在32位操作系统下：占用4个字节空间",[14,6487,6488],{},"在64位操作系统下：占用8个字节空间",[14,6490,6491],{},"上方是不管啥数据类型的",[133,6493,6495],{"className":135,"code":6494,"language":137,"meta":31,"style":31},"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",[139,6496,6497,6505,6509,6514,6526,6531,6536,6541,6554,6576,6602,6628],{"__ignoreMap":31},[142,6498,6499,6501,6503],{"class":144,"line":145},[142,6500,156],{"class":148},[142,6502,2001],{"class":1991},[142,6504,2004],{"class":152},[142,6506,6507],{"class":144,"line":64},[142,6508,1574],{"class":152},[142,6510,6511],{"class":144,"line":1208},[142,6512,6513],{"class":211},"    \u002F\u002F指针所占内存空间\n",[142,6515,6516,6518,6520,6522,6524],{"class":144,"line":1223},[142,6517,2013],{"class":148},[142,6519,1427],{"class":152},[142,6521,198],{"class":148},[142,6523,599],{"class":201},[142,6525,1319],{"class":152},[142,6527,6528],{"class":144,"line":1229},[142,6529,6530],{"class":211},"    \u002F\u002Fint *p;\n",[142,6532,6533],{"class":144,"line":1243},[142,6534,6535],{"class":211},"    \u002F\u002Fp=&a;\n",[142,6537,6538],{"class":144,"line":1249},[142,6539,6540],{"class":211},"    \u002F\u002F上述可以写为以下：\n",[142,6542,6543,6545,6548,6550,6552],{"class":144,"line":1340},[142,6544,2013],{"class":148},[142,6546,6547],{"class":148}," *",[142,6549,14],{"class":152},[142,6551,6368],{"class":148},[142,6553,6226],{"class":152},[142,6555,6556,6559,6561,6564,6566,6569,6571,6573],{"class":144,"line":1346},[142,6557,6558],{"class":152},"    cout ",[142,6560,1197],{"class":148},[142,6562,6563],{"class":257},"\"sizeof(int *)\"",[142,6565,1401],{"class":148},[142,6567,6568],{"class":152},"(p)",[142,6570,1197],{"class":148},[142,6572,1267],{"class":152},[142,6574,6575],{"class":211},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[142,6577,6578,6580,6582,6584,6586,6588,6590,6592,6594,6596,6599],{"class":144,"line":1358},[142,6579,6558],{"class":152},[142,6581,1197],{"class":148},[142,6583,6563],{"class":257},[142,6585,1401],{"class":148},[142,6587,153],{"class":152},[142,6589,156],{"class":148},[142,6591,6547],{"class":148},[142,6593,582],{"class":152},[142,6595,1197],{"class":148},[142,6597,6598],{"class":152},"endl",[142,6600,6601],{"class":211},"  \u002F\u002F4字节(32位的话)\n",[142,6603,6604,6606,6608,6611,6613,6615,6617,6619,6621,6623,6625],{"class":144,"line":1640},[142,6605,6558],{"class":152},[142,6607,1197],{"class":148},[142,6609,6610],{"class":257},"\"sizeof(char *)\"",[142,6612,1401],{"class":148},[142,6614,153],{"class":152},[142,6616,249],{"class":148},[142,6618,6547],{"class":148},[142,6620,582],{"class":152},[142,6622,1197],{"class":148},[142,6624,1267],{"class":152},[142,6626,6627],{"class":211}," \u002F\u002F4字节(32位的话)\n",[142,6629,6630],{"class":144,"line":1645},[142,6631,1593],{"class":152},[84,6633,6635],{"id":6634},"_33空指针","3.3空指针",[14,6637,6638],{},"空指针：指针变量指向内存中编号为0的空间",[14,6640,6641],{},"用途：初始化指针变量",[14,6643,6644],{},"注意：空指针指向的内存是不可以访问的",[133,6646,6648],{"className":135,"code":6647,"language":137,"meta":31,"style":31},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[139,6649,6650,6658,6662,6667,6681,6686,6701,6706],{"__ignoreMap":31},[142,6651,6652,6654,6656],{"class":144,"line":145},[142,6653,156],{"class":148},[142,6655,2001],{"class":1991},[142,6657,2004],{"class":152},[142,6659,6660],{"class":144,"line":64},[142,6661,1574],{"class":152},[142,6663,6664],{"class":144,"line":1208},[142,6665,6666],{"class":211},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[142,6668,6669,6671,6673,6675,6677,6679],{"class":144,"line":1223},[142,6670,2013],{"class":148},[142,6672,6547],{"class":148},[142,6674,14],{"class":152},[142,6676,198],{"class":148},[142,6678,2420],{"class":201},[142,6680,1319],{"class":152},[142,6682,6683],{"class":144,"line":1229},[142,6684,6685],{"class":211},"    \u002F\u002F2.空指针不能进行访问\n",[142,6687,6688,6690,6692,6694,6696,6698],{"class":144,"line":1243},[142,6689,6432],{"class":148},[142,6691,14],{"class":152},[142,6693,198],{"class":148},[142,6695,464],{"class":201},[142,6697,208],{"class":152},[142,6699,6700],{"class":211},"\u002F\u002F直接报错，压根不能访问\n",[142,6702,6703],{"class":144,"line":1249},[142,6704,6705],{"class":211},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[142,6707,6708],{"class":144,"line":1340},[142,6709,1593],{"class":152},[84,6711,6713],{"id":6712},"_34野指针","3.4野指针",[14,6715,6716],{},[302,6717,6718],{},"指针变量指向非法的内存空间",[133,6720,6722],{"className":135,"code":6721,"language":137,"meta":31,"style":31},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[139,6723,6724,6732,6736,6765,6770,6782],{"__ignoreMap":31},[142,6725,6726,6728,6730],{"class":144,"line":145},[142,6727,156],{"class":148},[142,6729,2001],{"class":1991},[142,6731,2004],{"class":152},[142,6733,6734],{"class":144,"line":64},[142,6735,1574],{"class":152},[142,6737,6738,6740,6742,6744,6746,6748,6750,6752,6754,6757,6760,6762],{"class":144,"line":1208},[142,6739,2013],{"class":148},[142,6741,6547],{"class":148},[142,6743,14],{"class":152},[142,6745,198],{"class":148},[142,6747,153],{"class":152},[142,6749,156],{"class":148},[142,6751,6547],{"class":148},[142,6753,582],{"class":152},[142,6755,6756],{"class":148},"0x",[142,6758,6759],{"class":201},"1100",[142,6761,208],{"class":152},[142,6763,6764],{"class":211}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[142,6766,6767],{"class":144,"line":1223},[142,6768,6769],{"class":211},"    \u002F\u002F访问野指针报错\n",[142,6771,6772,6774,6776,6778,6780],{"class":144,"line":1229},[142,6773,1579],{"class":152},[142,6775,6448],{"class":148},[142,6777,14],{"class":152},[142,6779,1197],{"class":148},[142,6781,1220],{"class":152},[142,6783,6784],{"class":144,"line":1243},[142,6785,1593],{"class":152},[14,6787,6788],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[84,6790,6792],{"id":6791},"_35const修饰指针","3.5const修饰指针",[14,6794,6795],{},"三种情况：",[1160,6797,6798,6801,6804],{},[99,6799,6800],{},"const修饰指针 常量指针",[99,6802,6803],{},"const修饰常量 指针常量",[99,6805,6806],{},"const即修饰指针，又修饰常量",[96,6808,6809],{},[99,6810,6811],{},"常量指针",[133,6813,6815],{"className":135,"code":6814,"language":137,"meta":31,"style":31},"const int *p=&a;\n",[139,6816,6817],{"__ignoreMap":31},[142,6818,6819,6822,6824,6826,6828,6830],{"class":144,"line":145},[142,6820,6821],{"class":148},"const",[142,6823,2410],{"class":148},[142,6825,6547],{"class":148},[142,6827,14],{"class":152},[142,6829,6368],{"class":148},[142,6831,6226],{"class":152},[14,6833,6834],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[96,6836,6837],{"start":64},[99,6838,6839],{},"指针常量",[133,6841,6843],{"className":135,"code":6842,"language":137,"meta":31,"style":31},"int *const p=&a;\n",[139,6844,6845],{"__ignoreMap":31},[142,6846,6847,6849,6852,6855,6857],{"class":144,"line":145},[142,6848,156],{"class":148},[142,6850,6851],{"class":148}," *const",[142,6853,6854],{"class":152}," p",[142,6856,6368],{"class":148},[142,6858,6226],{"class":152},[14,6860,6861],{},"指针的指向不可以改，指针指向的值可以改",[96,6863,6864],{"start":1208},[99,6865,6806],{},[133,6867,6869],{"className":135,"code":6868,"language":137,"meta":31,"style":31},"const int *const p=&a;\n",[139,6870,6871],{"__ignoreMap":31},[142,6872,6873,6875,6877,6879,6881,6883],{"class":144,"line":145},[142,6874,6821],{"class":148},[142,6876,2410],{"class":148},[142,6878,6851],{"class":148},[142,6880,6854],{"class":152},[142,6882,6368],{"class":148},[142,6884,6226],{"class":152},[14,6886,6887],{},"指针的指向和指针指向的值都不可以改变",[84,6889,6891],{"id":6890},"_36指针和数组","3.6指针和数组",[133,6893,6895],{"className":135,"code":6894,"language":137,"meta":31,"style":31},"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",[139,6896,6897,6905,6909,6914,6968,6989,7005,7021,7032,7049,7054,7068,7094,7098,7110,7119,7123],{"__ignoreMap":31},[142,6898,6899,6901,6903],{"class":144,"line":145},[142,6900,156],{"class":148},[142,6902,2001],{"class":1991},[142,6904,2004],{"class":152},[142,6906,6907],{"class":144,"line":64},[142,6908,1574],{"class":152},[142,6910,6911],{"class":144,"line":1208},[142,6912,6913],{"class":211},"    \u002F\u002F利用指针访问数组中的元素\n",[142,6915,6916,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6938,6940,6942,6944,6946,6948,6950,6952,6954,6956,6958,6960,6962,6964,6966],{"class":144,"line":1223},[142,6917,2013],{"class":148},[142,6919,3990],{"class":152},[142,6921,599],{"class":201},[142,6923,1093],{"class":152},[142,6925,198],{"class":148},[142,6927,1049],{"class":152},[142,6929,370],{"class":201},[142,6931,531],{"class":152},[142,6933,230],{"class":201},[142,6935,531],{"class":152},[142,6937,224],{"class":201},[142,6939,531],{"class":152},[142,6941,446],{"class":201},[142,6943,531],{"class":152},[142,6945,472],{"class":201},[142,6947,531],{"class":152},[142,6949,497],{"class":201},[142,6951,531],{"class":152},[142,6953,522],{"class":201},[142,6955,531],{"class":152},[142,6957,548],{"class":201},[142,6959,531],{"class":152},[142,6961,573],{"class":201},[142,6963,531],{"class":152},[142,6965,599],{"class":201},[142,6967,4023],{"class":152},[142,6969,6970,6972,6974,6977,6979,6981,6983,6985,6987],{"class":144,"line":1229},[142,6971,1579],{"class":152},[142,6973,1197],{"class":148},[142,6975,6976],{"class":257},"\"数组的第一个元素为：\"",[142,6978,1197],{"class":148},[142,6980,3934],{"class":152},[142,6982,344],{"class":201},[142,6984,1093],{"class":152},[142,6986,1197],{"class":148},[142,6988,1220],{"class":152},[142,6990,6991,6993,6995,6997,6999,7002],{"class":144,"line":1243},[142,6992,2013],{"class":148},[142,6994,6547],{"class":148},[142,6996,14],{"class":152},[142,6998,198],{"class":148},[142,7000,7001],{"class":152},"arr;",[142,7003,7004],{"class":211},"\u002F\u002F注意数才要加取地址符号&\n",[142,7006,7007,7009,7011,7013,7015,7017,7019],{"class":144,"line":1249},[142,7008,1579],{"class":152},[142,7010,1197],{"class":148},[142,7012,6976],{"class":257},[142,7014,6448],{"class":148},[142,7016,14],{"class":152},[142,7018,1197],{"class":148},[142,7020,1220],{"class":152},[142,7022,7023,7025,7027,7029],{"class":144,"line":1340},[142,7024,6365],{"class":152},[142,7026,2320],{"class":148},[142,7028,208],{"class":152},[142,7030,7031],{"class":211}," \u002F\u002F让指针向后偏移4个字节\n",[142,7033,7034,7036,7038,7041,7043,7045,7047],{"class":144,"line":1346},[142,7035,1579],{"class":152},[142,7037,1197],{"class":148},[142,7039,7040],{"class":257},"\"数组的第二个元素为：\"",[142,7042,6448],{"class":148},[142,7044,14],{"class":152},[142,7046,1197],{"class":148},[142,7048,1220],{"class":152},[142,7050,7051],{"class":144,"line":1358},[142,7052,7053],{"class":211},"    \u002F\u002F利用指针遍历数组\n",[142,7055,7056,7058,7060,7063,7065],{"class":144,"line":1640},[142,7057,2013],{"class":148},[142,7059,6547],{"class":148},[142,7061,7062],{"class":152},"p2",[142,7064,198],{"class":148},[142,7066,7067],{"class":152},"arr;\n",[142,7069,7070,7072,7074,7076,7078,7080,7082,7084,7086,7088,7090,7092],{"class":144,"line":1645},[142,7071,3229],{"class":148},[142,7073,1686],{"class":152},[142,7075,156],{"class":148},[142,7077,3060],{"class":152},[142,7079,198],{"class":148},[142,7081,344],{"class":201},[142,7083,3067],{"class":152},[142,7085,1063],{"class":148},[142,7087,599],{"class":201},[142,7089,3067],{"class":152},[142,7091,2320],{"class":148},[142,7093,159],{"class":152},[142,7095,7096],{"class":144,"line":1651},[142,7097,2058],{"class":152},[142,7099,7100,7102,7104,7106,7108],{"class":144,"line":1656},[142,7101,3479],{"class":152},[142,7103,6448],{"class":148},[142,7105,7062],{"class":152},[142,7107,1197],{"class":148},[142,7109,1220],{"class":152},[142,7111,7112,7115,7117],{"class":144,"line":1670},[142,7113,7114],{"class":152},"        p2",[142,7116,2320],{"class":148},[142,7118,1319],{"class":152},[142,7120,7121],{"class":144,"line":1675},[142,7122,2215],{"class":152},[142,7124,7125],{"class":144,"line":1681},[142,7126,1593],{"class":152},[84,7128,7130],{"id":7129},"_37指针和函数","3.7指针和函数",[14,7132,7133],{},"利用指针做函数参数，可以修改实参的值",[14,7135,7136],{},"值传递：只改变形参，不改变实参",[14,7138,7139],{},"地址传递：",[133,7141,7143],{"className":135,"code":7142,"language":137,"meta":31,"style":31},"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",[139,7144,7145,7170,7174,7186,7197,7207,7211,7219,7223,7235,7247,7252,7268,7283,7298],{"__ignoreMap":31},[142,7146,7147,7149,7151,7153,7155,7157,7160,7162,7164,7166,7168],{"class":144,"line":145},[142,7148,5393],{"class":148},[142,7150,5396],{"class":1991},[142,7152,153],{"class":152},[142,7154,156],{"class":148},[142,7156,6547],{"class":148},[142,7158,7159],{"class":5245},"p1",[142,7161,531],{"class":152},[142,7163,156],{"class":148},[142,7165,6547],{"class":148},[142,7167,7062],{"class":5245},[142,7169,159],{"class":152},[142,7171,7172],{"class":144,"line":64},[142,7173,1574],{"class":152},[142,7175,7176,7178,7180,7183],{"class":144,"line":1208},[142,7177,2013],{"class":148},[142,7179,4283],{"class":152},[142,7181,7182],{"class":148},"=*",[142,7184,7185],{"class":152},"p1;\n",[142,7187,7188,7190,7192,7194],{"class":144,"line":1223},[142,7189,6432],{"class":148},[142,7191,7159],{"class":152},[142,7193,7182],{"class":148},[142,7195,7196],{"class":152},"p2;\n",[142,7198,7199,7201,7203,7205],{"class":144,"line":1229},[142,7200,6432],{"class":148},[142,7202,7062],{"class":152},[142,7204,198],{"class":148},[142,7206,4308],{"class":152},[142,7208,7209],{"class":144,"line":1243},[142,7210,1593],{"class":152},[142,7212,7213,7215,7217],{"class":144,"line":1249},[142,7214,156],{"class":148},[142,7216,2001],{"class":1991},[142,7218,2004],{"class":152},[142,7220,7221],{"class":144,"line":1340},[142,7222,1574],{"class":152},[142,7224,7225,7227,7229,7231,7233],{"class":144,"line":1346},[142,7226,2013],{"class":148},[142,7228,1427],{"class":152},[142,7230,198],{"class":148},[142,7232,599],{"class":201},[142,7234,1319],{"class":152},[142,7236,7237,7239,7241,7243,7245],{"class":144,"line":1358},[142,7238,2013],{"class":148},[142,7240,2861],{"class":152},[142,7242,198],{"class":148},[142,7244,853],{"class":201},[142,7246,1319],{"class":152},[142,7248,7249],{"class":144,"line":1640},[142,7250,7251],{"class":211},"    \u002F\u002F地址传递\n",[142,7253,7254,7256,7258,7260,7263,7265],{"class":144,"line":1645},[142,7255,5590],{"class":1991},[142,7257,153],{"class":152},[142,7259,506],{"class":148},[142,7261,7262],{"class":152},"a,",[142,7264,506],{"class":148},[142,7266,7267],{"class":152},"b);\n",[142,7269,7270,7272,7274,7276,7278,7280],{"class":144,"line":1651},[142,7271,1579],{"class":152},[142,7273,1197],{"class":148},[142,7275,391],{"class":152},[142,7277,1197],{"class":148},[142,7279,1267],{"class":152},[142,7281,7282],{"class":211},"\u002F\u002F20\n",[142,7284,7285,7287,7289,7291,7293,7295],{"class":144,"line":1656},[142,7286,1579],{"class":152},[142,7288,1197],{"class":148},[142,7290,416],{"class":152},[142,7292,1197],{"class":148},[142,7294,1267],{"class":152},[142,7296,7297],{"class":211},"\u002F\u002F10\n",[142,7299,7300],{"class":144,"line":1670},[142,7301,1593],{"class":152},[14,7303,7304],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[84,7306,7308],{"id":7307},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7310,7311],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7313,7314,7315,7317],{},"例如数组：int arr",[142,7316,599],{},"={4,3,6,9,1,2,10,8,7,5}",[133,7319,7321],{"className":135,"code":7320,"language":137,"meta":31,"style":31},"#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",[139,7322,7323,7329,7339,7363,7367,7398,7402,7436,7440,7458,7462,7473,7488,7503,7507,7511,7515,7519,7523,7531,7535,7540,7594,7606,7618,7623,7631,7635,7640,7665,7669,7684,7693,7697],{"__ignoreMap":31},[142,7324,7325,7327],{"class":144,"line":145},[142,7326,1977],{"class":148},[142,7328,1980],{"class":257},[142,7330,7331,7333,7335,7337],{"class":144,"line":64},[142,7332,1985],{"class":148},[142,7334,1988],{"class":148},[142,7336,1992],{"class":1991},[142,7338,1319],{"class":152},[142,7340,7341,7343,7346,7348,7350,7352,7354,7356,7358,7361],{"class":144,"line":1208},[142,7342,5393],{"class":148},[142,7344,7345],{"class":1991}," bubbleSort",[142,7347,153],{"class":152},[142,7349,156],{"class":148},[142,7351,6547],{"class":148},[142,7353,14],{"class":5245},[142,7355,531],{"class":152},[142,7357,156],{"class":148},[142,7359,7360],{"class":5245}," len",[142,7362,159],{"class":152},[142,7364,7365],{"class":144,"line":1223},[142,7366,1574],{"class":152},[142,7368,7369,7371,7373,7375,7377,7379,7381,7383,7385,7388,7390,7392,7394,7396],{"class":144,"line":1229},[142,7370,3229],{"class":148},[142,7372,153],{"class":152},[142,7374,156],{"class":148},[142,7376,3060],{"class":152},[142,7378,198],{"class":148},[142,7380,344],{"class":201},[142,7382,3067],{"class":152},[142,7384,1063],{"class":148},[142,7386,7387],{"class":152},"len",[142,7389,685],{"class":148},[142,7391,370],{"class":201},[142,7393,3067],{"class":152},[142,7395,2320],{"class":148},[142,7397,159],{"class":152},[142,7399,7400],{"class":144,"line":1243},[142,7401,2058],{"class":152},[142,7403,7404,7406,7408,7410,7412,7414,7416,7418,7420,7422,7424,7426,7428,7430,7432,7434],{"class":144,"line":1249},[142,7405,3431],{"class":148},[142,7407,153],{"class":152},[142,7409,156],{"class":148},[142,7411,3438],{"class":152},[142,7413,198],{"class":148},[142,7415,344],{"class":201},[142,7417,3445],{"class":152},[142,7419,1063],{"class":148},[142,7421,7387],{"class":152},[142,7423,685],{"class":148},[142,7425,594],{"class":152},[142,7427,685],{"class":148},[142,7429,370],{"class":201},[142,7431,3445],{"class":152},[142,7433,2320],{"class":148},[142,7435,159],{"class":152},[142,7437,7438],{"class":144,"line":1340},[142,7439,2538],{"class":152},[142,7441,7442,7444,7447,7449,7452,7454,7456],{"class":144,"line":1346},[142,7443,4670],{"class":148},[142,7445,7446],{"class":152},"(p[j]",[142,7448,1113],{"class":148},[142,7450,7451],{"class":152},"p[j",[142,7453,634],{"class":148},[142,7455,370],{"class":201},[142,7457,4685],{"class":152},[142,7459,7460],{"class":144,"line":1358},[142,7461,4690],{"class":152},[142,7463,7464,7466,7468,7470],{"class":144,"line":1640},[142,7465,4695],{"class":148},[142,7467,4283],{"class":152},[142,7469,198],{"class":148},[142,7471,7472],{"class":152},"p[j];\n",[142,7474,7475,7478,7480,7482,7484,7486],{"class":144,"line":1645},[142,7476,7477],{"class":152},"                p[j]",[142,7479,198],{"class":148},[142,7481,7451],{"class":152},[142,7483,634],{"class":148},[142,7485,370],{"class":201},[142,7487,4718],{"class":152},[142,7489,7490,7493,7495,7497,7499,7501],{"class":144,"line":1651},[142,7491,7492],{"class":152},"                p[j",[142,7494,634],{"class":148},[142,7496,370],{"class":201},[142,7498,1093],{"class":152},[142,7500,198],{"class":148},[142,7502,4308],{"class":152},[142,7504,7505],{"class":144,"line":1656},[142,7506,4738],{"class":152},[142,7508,7509],{"class":144,"line":1670},[142,7510,2557],{"class":152},[142,7512,7513],{"class":144,"line":1675},[142,7514,2215],{"class":152},[142,7516,7517],{"class":144,"line":1681},[142,7518,1593],{"class":152},[142,7520,7521],{"class":144,"line":1702},[142,7522,2428],{"emptyLinePlaceholder":69},[142,7524,7525,7527,7529],{"class":144,"line":1707},[142,7526,156],{"class":148},[142,7528,2001],{"class":1991},[142,7530,2004],{"class":152},[142,7532,7533],{"class":144,"line":1721},[142,7534,1574],{"class":152},[142,7536,7537],{"class":144,"line":1726},[142,7538,7539],{"class":211},"    \u002F\u002F 1.创建数组\n",[142,7541,7542,7544,7546,7548,7550,7552,7554,7556,7558,7560,7562,7564,7566,7568,7570,7572,7574,7576,7578,7580,7582,7584,7586,7588,7590,7592],{"class":144,"line":1755},[142,7543,2013],{"class":148},[142,7545,3990],{"class":152},[142,7547,599],{"class":201},[142,7549,1093],{"class":152},[142,7551,198],{"class":148},[142,7553,1049],{"class":152},[142,7555,446],{"class":201},[142,7557,531],{"class":152},[142,7559,224],{"class":201},[142,7561,531],{"class":152},[142,7563,497],{"class":201},[142,7565,531],{"class":152},[142,7567,573],{"class":201},[142,7569,531],{"class":152},[142,7571,370],{"class":201},[142,7573,531],{"class":152},[142,7575,230],{"class":201},[142,7577,531],{"class":152},[142,7579,599],{"class":201},[142,7581,531],{"class":152},[142,7583,548],{"class":201},[142,7585,531],{"class":152},[142,7587,522],{"class":201},[142,7589,531],{"class":152},[142,7591,472],{"class":201},[142,7593,4023],{"class":152},[142,7595,7596,7598,7600,7602,7604],{"class":144,"line":1760},[142,7597,2013],{"class":148},[142,7599,7360],{"class":152},[142,7601,198],{"class":148},[142,7603,599],{"class":201},[142,7605,1319],{"class":152},[142,7607,7608,7610,7612,7614,7616],{"class":144,"line":1777},[142,7609,2013],{"class":148},[142,7611,6547],{"class":148},[142,7613,14],{"class":152},[142,7615,198],{"class":148},[142,7617,7067],{"class":152},[142,7619,7620],{"class":144,"line":1782},[142,7621,7622],{"class":211},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[142,7624,7625,7628],{"class":144,"line":1787},[142,7626,7627],{"class":1991},"    bubbleSort",[142,7629,7630],{"class":152},"(p,len);\n",[142,7632,7633],{"class":144,"line":1792},[142,7634,2428],{"emptyLinePlaceholder":69},[142,7636,7637],{"class":144,"line":1806},[142,7638,7639],{"class":211},"    \u002F\u002F 3.打印排序后的数组\n",[142,7641,7642,7644,7646,7648,7650,7652,7654,7656,7658,7661,7663],{"class":144,"line":1811},[142,7643,3229],{"class":148},[142,7645,1686],{"class":152},[142,7647,156],{"class":148},[142,7649,3060],{"class":152},[142,7651,198],{"class":148},[142,7653,344],{"class":201},[142,7655,3242],{"class":152},[142,7657,1063],{"class":148},[142,7659,7660],{"class":152},"len; i",[142,7662,2320],{"class":148},[142,7664,159],{"class":152},[142,7666,7667],{"class":144,"line":2605},[142,7668,2058],{"class":152},[142,7670,7671,7673,7675,7677,7679,7682],{"class":144,"line":2619},[142,7672,3479],{"class":152},[142,7674,6448],{"class":148},[142,7676,14],{"class":152},[142,7678,1197],{"class":148},[142,7680,7681],{"class":257},"\"\"",[142,7683,1319],{"class":152},[142,7685,7686,7689,7691],{"class":144,"line":2627},[142,7687,7688],{"class":152},"        p",[142,7690,2320],{"class":148},[142,7692,1319],{"class":152},[142,7694,7695],{"class":144,"line":2632},[142,7696,2215],{"class":152},[142,7698,7699],{"class":144,"line":2638},[142,7700,1593],{"class":152},[5155,7702,7703],{},"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":31,"searchDepth":64,"depth":64,"links":7705},[7706,7707,7708,7709,7710,7711,7712,7713],{"id":6312,"depth":64,"text":6313},{"id":6478,"depth":64,"text":6479},{"id":6634,"depth":64,"text":6635},{"id":6712,"depth":64,"text":6713},{"id":6791,"depth":64,"text":6792},{"id":6890,"depth":64,"text":6891},{"id":7129,"depth":64,"text":7130},{"id":7307,"depth":64,"text":7308},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6301,"description":6309},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7720,"title":7721,"body":7722,"description":7729,"extension":67,"meta":10703,"navigation":69,"path":10704,"seo":10705,"stem":10706,"__hash__":10707},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7723,"toc":10694},[7724,7727,7730,7734,7737,7740,7751,8089,8092,8096,8099,8106,8361,8365,8368,8371,8526,8530,8533,8536,8742,8746,8749,9052,9055,9063,9067,9070,9221,9223,9234,9291,9295,9300,9957,9965,9968,10062,10065,10685,10691],[10,7725,7721],{"id":7726},"_4结构体",[14,7728,7729],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[84,7731,7733],{"id":7732},"_41结构体定义与使用","4.1结构体定义与使用",[14,7735,7736],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7738,7739],{},"通过结构体创建变量的方式：",[1160,7741,7742,7745,7748],{},[99,7743,7744],{},"struct 结构体名 变量名",[99,7746,7747],{},"struct 结构体名 变量名={成员1值，成员2值...}",[99,7749,7750],{},"定义结构体时顺便创建变量",[133,7752,7754],{"className":135,"code":7753,"language":137,"meta":31,"style":31},"#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",[139,7755,7756,7762,7772,7779,7784,7792,7796,7801,7805,7810,7815,7820,7827,7832,7839,7843,7850,7854,7858,7862,7866,7870,7874,7880,7884,7890,7898,7906,7910,7915,7920,7931,7936,7948,7959,7970,7975,7999,8004,8010,8037,8042,8048,8060,8072,8084],{"__ignoreMap":31},[142,7757,7758,7760],{"class":144,"line":145},[142,7759,1977],{"class":148},[142,7761,1980],{"class":257},[142,7763,7764,7766,7768,7770],{"class":144,"line":64},[142,7765,1985],{"class":148},[142,7767,1988],{"class":148},[142,7769,1992],{"class":1991},[142,7771,1319],{"class":152},[142,7773,7774,7776],{"class":144,"line":1208},[142,7775,1977],{"class":148},[142,7777,7778],{"class":257},"\u003Cstring>\n",[142,7780,7781],{"class":144,"line":1223},[142,7782,7783],{"class":211},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[142,7785,7786,7789],{"class":144,"line":1229},[142,7787,7788],{"class":148},"struct",[142,7790,7791],{"class":1991}," Student\n",[142,7793,7794],{"class":144,"line":1243},[142,7795,1574],{"class":152},[142,7797,7798],{"class":144,"line":1249},[142,7799,7800],{"class":211},"    \u002F\u002F成员列表\n",[142,7802,7803],{"class":144,"line":1340},[142,7804,2428],{"emptyLinePlaceholder":69},[142,7806,7807],{"class":144,"line":1346},[142,7808,7809],{"class":211},"    \u002F\u002F姓名\n",[142,7811,7812],{"class":144,"line":1358},[142,7813,7814],{"class":152},"    string name;\n",[142,7816,7817],{"class":144,"line":1640},[142,7818,7819],{"class":211},"    \u002F\u002F年龄\n",[142,7821,7822,7824],{"class":144,"line":1645},[142,7823,2013],{"class":148},[142,7825,7826],{"class":152}," age;\n",[142,7828,7829],{"class":144,"line":1651},[142,7830,7831],{"class":211},"    \u002F\u002F分数\n",[142,7833,7834,7836],{"class":144,"line":1656},[142,7835,2013],{"class":148},[142,7837,7838],{"class":152}," score;\n",[142,7840,7841],{"class":144,"line":1670},[142,7842,4023],{"class":152},[142,7844,7845,7847],{"class":144,"line":1675},[142,7846,7788],{"class":148},[142,7848,7849],{"class":1991}," School\n",[142,7851,7852],{"class":144,"line":1681},[142,7853,1574],{"class":152},[142,7855,7856],{"class":144,"line":1702},[142,7857,7800],{"class":211},[142,7859,7860],{"class":144,"line":1707},[142,7861,2428],{"emptyLinePlaceholder":69},[142,7863,7864],{"class":144,"line":1721},[142,7865,7809],{"class":211},[142,7867,7868],{"class":144,"line":1726},[142,7869,7814],{"class":152},[142,7871,7872],{"class":144,"line":1755},[142,7873,7819],{"class":211},[142,7875,7876,7878],{"class":144,"line":1760},[142,7877,2013],{"class":148},[142,7879,7826],{"class":152},[142,7881,7882],{"class":144,"line":1777},[142,7883,7831],{"class":211},[142,7885,7886,7888],{"class":144,"line":1782},[142,7887,2013],{"class":148},[142,7889,7838],{"class":152},[142,7891,7892,7895],{"class":144,"line":1787},[142,7893,7894],{"class":152},"} s3;",[142,7896,7897],{"class":211}," \u002F\u002F创建结构体时就创建了变量\n",[142,7899,7900,7902,7904],{"class":144,"line":1792},[142,7901,156],{"class":148},[142,7903,2001],{"class":1991},[142,7905,2004],{"class":152},[142,7907,7908],{"class":144,"line":1806},[142,7909,1574],{"class":152},[142,7911,7912],{"class":144,"line":1811},[142,7913,7914],{"class":211},"    \u002F\u002F2.通过学生类型创建具体学生\n",[142,7916,7917],{"class":144,"line":2605},[142,7918,7919],{"class":211},"    \u002F\u002F2.1 struct Student s1;\n",[142,7921,7922,7925,7928],{"class":144,"line":2619},[142,7923,7924],{"class":148},"    struct",[142,7926,7927],{"class":1991}," Student",[142,7929,7930],{"class":152}," s1;\n",[142,7932,7933],{"class":144,"line":2627},[142,7934,7935],{"class":211},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[142,7937,7938,7941,7943,7946],{"class":144,"line":2632},[142,7939,7940],{"class":152},"    s1.name",[142,7942,198],{"class":148},[142,7944,7945],{"class":257},"\"张三\"",[142,7947,1319],{"class":152},[142,7949,7950,7953,7955,7957],{"class":144,"line":2638},[142,7951,7952],{"class":152},"    s1.age",[142,7954,198],{"class":148},[142,7956,803],{"class":201},[142,7958,1319],{"class":152},[142,7960,7961,7964,7966,7968],{"class":144,"line":2644},[142,7962,7963],{"class":152},"    s1.score",[142,7965,198],{"class":148},[142,7967,407],{"class":201},[142,7969,1319],{"class":152},[142,7971,7972],{"class":144,"line":2649},[142,7973,7974],{"class":211},"    \u002F\u002F输出结果\n",[142,7976,7978,7980,7982,7985,7987,7990,7992,7995,7997],{"class":144,"line":7977},37,[142,7979,1579],{"class":152},[142,7981,1197],{"class":148},[142,7983,7984],{"class":152},"s1.name",[142,7986,1197],{"class":148},[142,7988,7989],{"class":152},"s1.age",[142,7991,1197],{"class":148},[142,7993,7994],{"class":152},"s1.score",[142,7996,1197],{"class":148},[142,7998,1220],{"class":152},[142,8000,8002],{"class":144,"line":8001},38,[142,8003,2428],{"emptyLinePlaceholder":69},[142,8005,8007],{"class":144,"line":8006},39,[142,8008,8009],{"class":211},"    \u002F\u002F2.2 struct Student s2={...}\n",[142,8011,8013,8015,8017,8020,8022,8024,8027,8029,8031,8033,8035],{"class":144,"line":8012},40,[142,8014,7924],{"class":148},[142,8016,7927],{"class":1991},[142,8018,8019],{"class":152}," s2",[142,8021,198],{"class":148},[142,8023,1049],{"class":152},[142,8025,8026],{"class":257},"\"王五\"",[142,8028,531],{"class":152},[142,8030,803],{"class":201},[142,8032,531],{"class":152},[142,8034,407],{"class":201},[142,8036,4023],{"class":152},[142,8038,8040],{"class":144,"line":8039},41,[142,8041,2428],{"emptyLinePlaceholder":69},[142,8043,8045],{"class":144,"line":8044},42,[142,8046,8047],{"class":211},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[142,8049,8051,8054,8056,8058],{"class":144,"line":8050},43,[142,8052,8053],{"class":152},"    s3.name",[142,8055,198],{"class":148},[142,8057,3706],{"class":257},[142,8059,1319],{"class":152},[142,8061,8063,8066,8068,8070],{"class":144,"line":8062},44,[142,8064,8065],{"class":152},"    s3.age",[142,8067,198],{"class":148},[142,8069,803],{"class":201},[142,8071,1319],{"class":152},[142,8073,8075,8078,8080,8082],{"class":144,"line":8074},45,[142,8076,8077],{"class":152},"    s3.score",[142,8079,198],{"class":148},[142,8081,853],{"class":201},[142,8083,1319],{"class":152},[142,8085,8087],{"class":144,"line":8086},46,[142,8088,1593],{"class":152},[14,8090,8091],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[84,8093,8095],{"id":8094},"_42结构体数组","4.2结构体数组",[14,8097,8098],{},"将自定义的结构体放入到数组中方便维护",[14,8100,8101,8102,8105],{},"语法：struct 结构体名 数组名",[142,8103,8104],{},"元素个数","={ {}，{},...{} };",[133,8107,8109],{"className":135,"code":8108,"language":137,"meta":31,"style":31},"#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",[139,8110,8111,8117,8127,8133,8138,8144,8148,8152,8158,8164,8168,8172,8180,8184,8189,8204,8208,8224,8240,8244,8249,8265,8280,8295,8300,8326,8330,8353,8357],{"__ignoreMap":31},[142,8112,8113,8115],{"class":144,"line":145},[142,8114,1977],{"class":148},[142,8116,1980],{"class":257},[142,8118,8119,8121,8123,8125],{"class":144,"line":64},[142,8120,1985],{"class":148},[142,8122,1988],{"class":148},[142,8124,1992],{"class":1991},[142,8126,1319],{"class":152},[142,8128,8129,8131],{"class":144,"line":1208},[142,8130,1977],{"class":148},[142,8132,7778],{"class":257},[142,8134,8135],{"class":144,"line":1223},[142,8136,8137],{"class":211},"\u002F\u002F1.定义结构体\n",[142,8139,8140,8142],{"class":144,"line":1229},[142,8141,7788],{"class":148},[142,8143,7791],{"class":1991},[142,8145,8146],{"class":144,"line":1243},[142,8147,1574],{"class":152},[142,8149,8150],{"class":144,"line":1249},[142,8151,7814],{"class":152},[142,8153,8154,8156],{"class":144,"line":1340},[142,8155,2013],{"class":148},[142,8157,7826],{"class":152},[142,8159,8160,8162],{"class":144,"line":1346},[142,8161,2013],{"class":148},[142,8163,7838],{"class":152},[142,8165,8166],{"class":144,"line":1358},[142,8167,2428],{"emptyLinePlaceholder":69},[142,8169,8170],{"class":144,"line":1640},[142,8171,4023],{"class":152},[142,8173,8174,8176,8178],{"class":144,"line":1645},[142,8175,156],{"class":148},[142,8177,2001],{"class":1991},[142,8179,2004],{"class":152},[142,8181,8182],{"class":144,"line":1651},[142,8183,1574],{"class":152},[142,8185,8186],{"class":144,"line":1656},[142,8187,8188],{"class":211},"    \u002F\u002F2.创建结构体数组\n",[142,8190,8191,8193,8195,8198,8200,8202],{"class":144,"line":1670},[142,8192,7924],{"class":148},[142,8194,7927],{"class":1991},[142,8196,8197],{"class":152}," stuArray[",[142,8199,230],{"class":201},[142,8201,1093],{"class":152},[142,8203,4936],{"class":148},[142,8205,8206],{"class":144,"line":1675},[142,8207,2058],{"class":152},[142,8209,8210,8212,8214,8216,8218,8220,8222],{"class":144,"line":1681},[142,8211,4945],{"class":152},[142,8213,7945],{"class":257},[142,8215,531],{"class":152},[142,8217,803],{"class":201},[142,8219,531],{"class":152},[142,8221,464],{"class":201},[142,8223,4958],{"class":152},[142,8225,8226,8228,8230,8232,8234,8236,8238],{"class":144,"line":1702},[142,8227,4945],{"class":152},[142,8229,3706],{"class":257},[142,8231,531],{"class":152},[142,8233,728],{"class":201},[142,8235,531],{"class":152},[142,8237,728],{"class":201},[142,8239,1593],{"class":152},[142,8241,8242],{"class":144,"line":1707},[142,8243,2215],{"class":152},[142,8245,8246],{"class":144,"line":1721},[142,8247,8248],{"class":211},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[142,8250,8251,8254,8256,8259,8261,8263],{"class":144,"line":1726},[142,8252,8253],{"class":152},"    stuArray[",[142,8255,370],{"class":201},[142,8257,8258],{"class":152},"].name",[142,8260,198],{"class":148},[142,8262,3729],{"class":257},[142,8264,1319],{"class":152},[142,8266,8267,8269,8271,8274,8276,8278],{"class":144,"line":1755},[142,8268,8253],{"class":152},[142,8270,370],{"class":201},[142,8272,8273],{"class":152},"].age",[142,8275,198],{"class":148},[142,8277,230],{"class":201},[142,8279,1319],{"class":152},[142,8281,8282,8284,8286,8289,8291,8293],{"class":144,"line":1760},[142,8283,8253],{"class":152},[142,8285,370],{"class":201},[142,8287,8288],{"class":152},"].score",[142,8290,198],{"class":148},[142,8292,230],{"class":201},[142,8294,1319],{"class":152},[142,8296,8297],{"class":144,"line":1777},[142,8298,8299],{"class":211},"    \u002F\u002F4.遍历结构体数组\n",[142,8301,8302,8304,8306,8308,8310,8312,8314,8316,8318,8320,8322,8324],{"class":144,"line":1782},[142,8303,3229],{"class":148},[142,8305,1686],{"class":152},[142,8307,156],{"class":148},[142,8309,3060],{"class":152},[142,8311,198],{"class":148},[142,8313,344],{"class":201},[142,8315,3067],{"class":152},[142,8317,1063],{"class":148},[142,8319,230],{"class":201},[142,8321,3067],{"class":152},[142,8323,2320],{"class":148},[142,8325,159],{"class":152},[142,8327,8328],{"class":144,"line":1787},[142,8329,2058],{"class":152},[142,8331,8332,8334,8336,8339,8341,8344,8346,8349,8351],{"class":144,"line":1792},[142,8333,3479],{"class":152},[142,8335,1197],{"class":148},[142,8337,8338],{"class":152},"stuArray[i].name",[142,8340,1197],{"class":148},[142,8342,8343],{"class":152},"stuArray[i].age",[142,8345,1197],{"class":148},[142,8347,8348],{"class":152},"stuArray[i].score",[142,8350,1197],{"class":148},[142,8352,1220],{"class":152},[142,8354,8355],{"class":144,"line":1806},[142,8356,2215],{"class":152},[142,8358,8359],{"class":144,"line":1811},[142,8360,1593],{"class":152},[84,8362,8364],{"id":8363},"_43结构体指针","4.3结构体指针",[14,8366,8367],{},"作用：通过指针访问结构体中的成员",[14,8369,8370],{},"利用操作符->可以通过结构体指针访问结构体属性",[133,8372,8374],{"className":135,"code":8373,"language":137,"meta":31,"style":31},"#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",[139,8375,8376,8382,8392,8398,8402,8408,8412,8416,8422,8428,8432,8440,8444,8449,8474,8479,8494,8499,8522],{"__ignoreMap":31},[142,8377,8378,8380],{"class":144,"line":145},[142,8379,1977],{"class":148},[142,8381,1980],{"class":257},[142,8383,8384,8386,8388,8390],{"class":144,"line":64},[142,8385,1985],{"class":148},[142,8387,1988],{"class":148},[142,8389,1992],{"class":1991},[142,8391,1319],{"class":152},[142,8393,8394,8396],{"class":144,"line":1208},[142,8395,1977],{"class":148},[142,8397,7778],{"class":257},[142,8399,8400],{"class":144,"line":1223},[142,8401,8137],{"class":211},[142,8403,8404,8406],{"class":144,"line":1229},[142,8405,7788],{"class":148},[142,8407,7791],{"class":1991},[142,8409,8410],{"class":144,"line":1243},[142,8411,1574],{"class":152},[142,8413,8414],{"class":144,"line":1249},[142,8415,7814],{"class":152},[142,8417,8418,8420],{"class":144,"line":1340},[142,8419,2013],{"class":148},[142,8421,7826],{"class":152},[142,8423,8424,8426],{"class":144,"line":1346},[142,8425,2013],{"class":148},[142,8427,7838],{"class":152},[142,8429,8430],{"class":144,"line":1358},[142,8431,4023],{"class":152},[142,8433,8434,8436,8438],{"class":144,"line":1640},[142,8435,156],{"class":148},[142,8437,2001],{"class":1991},[142,8439,2004],{"class":152},[142,8441,8442],{"class":144,"line":1645},[142,8443,1574],{"class":152},[142,8445,8446],{"class":144,"line":1651},[142,8447,8448],{"class":211},"    \u002F\u002F创建学生结构体变量\n",[142,8450,8451,8453,8455,8458,8460,8462,8464,8466,8468,8470,8472],{"class":144,"line":1656},[142,8452,7924],{"class":148},[142,8454,7927],{"class":1991},[142,8456,8457],{"class":152}," s",[142,8459,198],{"class":148},[142,8461,1049],{"class":152},[142,8463,7945],{"class":257},[142,8465,531],{"class":152},[142,8467,803],{"class":201},[142,8469,531],{"class":152},[142,8471,1750],{"class":201},[142,8473,4023],{"class":152},[142,8475,8476],{"class":144,"line":1670},[142,8477,8478],{"class":211},"    \u002F\u002F通过指针指向结构体变量\n",[142,8480,8481,8483,8485,8487,8489,8491],{"class":144,"line":1675},[142,8482,7924],{"class":148},[142,8484,7927],{"class":1991},[142,8486,6547],{"class":148},[142,8488,14],{"class":152},[142,8490,6368],{"class":148},[142,8492,8493],{"class":152},"s\n",[142,8495,8496],{"class":144,"line":1681},[142,8497,8498],{"class":211},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[142,8500,8501,8503,8505,8508,8510,8513,8515,8518,8520],{"class":144,"line":1702},[142,8502,1579],{"class":152},[142,8504,1197],{"class":148},[142,8506,8507],{"class":152},"p->name",[142,8509,1197],{"class":148},[142,8511,8512],{"class":152},"p->age",[142,8514,1197],{"class":148},[142,8516,8517],{"class":152},"p->score",[142,8519,1197],{"class":148},[142,8521,1220],{"class":152},[142,8523,8524],{"class":144,"line":1707},[142,8525,1593],{"class":152},[84,8527,8529],{"id":8528},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8531,8532],{},"作用：结构体中的成员可以是另一个结构体",[14,8534,8535],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[133,8537,8539],{"className":135,"code":8538,"language":137,"meta":31,"style":31},"#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",[139,8540,8541,8547,8557,8563,8568,8576,8580,8584,8590,8596,8600,8605,8612,8616,8623,8627,8633,8638,8642,8650,8654,8659,8664,8669,8680,8692,8703,8716,8727,8738],{"__ignoreMap":31},[142,8542,8543,8545],{"class":144,"line":145},[142,8544,1977],{"class":148},[142,8546,1980],{"class":257},[142,8548,8549,8551,8553,8555],{"class":144,"line":64},[142,8550,1985],{"class":148},[142,8552,1988],{"class":148},[142,8554,1992],{"class":1991},[142,8556,1319],{"class":152},[142,8558,8559,8561],{"class":144,"line":1208},[142,8560,1977],{"class":148},[142,8562,7778],{"class":257},[142,8564,8565],{"class":144,"line":1223},[142,8566,8567],{"class":211},"\u002F\u002F定义学生结构体\n",[142,8569,8570,8572,8574],{"class":144,"line":1229},[142,8571,7788],{"class":148},[142,8573,7927],{"class":1991},[142,8575,2702],{"class":152},[142,8577,8578],{"class":144,"line":1243},[142,8579,1574],{"class":152},[142,8581,8582],{"class":144,"line":1249},[142,8583,7814],{"class":152},[142,8585,8586,8588],{"class":144,"line":1340},[142,8587,2013],{"class":148},[142,8589,7826],{"class":152},[142,8591,8592,8594],{"class":144,"line":1346},[142,8593,2013],{"class":148},[142,8595,7838],{"class":152},[142,8597,8598],{"class":144,"line":1358},[142,8599,1593],{"class":152},[142,8601,8602],{"class":144,"line":1640},[142,8603,8604],{"class":211},"\u002F\u002F定义老师结构体\n",[142,8606,8607,8609],{"class":144,"line":1645},[142,8608,7788],{"class":148},[142,8610,8611],{"class":1991}," Teacher\n",[142,8613,8614],{"class":144,"line":1651},[142,8615,1574],{"class":152},[142,8617,8618,8620],{"class":144,"line":1656},[142,8619,2013],{"class":148},[142,8621,8622],{"class":152}," id;\n",[142,8624,8625],{"class":144,"line":1670},[142,8626,7814],{"class":152},[142,8628,8629,8631],{"class":144,"line":1675},[142,8630,2013],{"class":148},[142,8632,7826],{"class":152},[142,8634,8635],{"class":144,"line":1681},[142,8636,8637],{"class":152},"    Student stu;\n",[142,8639,8640],{"class":144,"line":1702},[142,8641,1593],{"class":152},[142,8643,8644,8646,8648],{"class":144,"line":1707},[142,8645,156],{"class":148},[142,8647,2001],{"class":1991},[142,8649,6007],{"class":152},[142,8651,8652],{"class":144,"line":1721},[142,8653,1574],{"class":152},[142,8655,8656],{"class":144,"line":1726},[142,8657,8658],{"class":211},"    \u002F\u002F结构体嵌套结构体\n",[142,8660,8661],{"class":144,"line":1755},[142,8662,8663],{"class":211},"    \u002F\u002F创建老师\n",[142,8665,8666],{"class":144,"line":1760},[142,8667,8668],{"class":152},"    Teacher t;\n",[142,8670,8671,8674,8676,8678],{"class":144,"line":1777},[142,8672,8673],{"class":152},"    t.id",[142,8675,198],{"class":148},[142,8677,464],{"class":201},[142,8679,1319],{"class":152},[142,8681,8682,8685,8687,8690],{"class":144,"line":1782},[142,8683,8684],{"class":152},"    t.name",[142,8686,198],{"class":148},[142,8688,8689],{"class":257},"\"老王\"",[142,8691,1319],{"class":152},[142,8693,8694,8697,8699,8701],{"class":144,"line":1787},[142,8695,8696],{"class":152},"    t.age",[142,8698,198],{"class":148},[142,8700,803],{"class":201},[142,8702,1319],{"class":152},[142,8704,8705,8708,8710,8713],{"class":144,"line":1792},[142,8706,8707],{"class":152},"    t.stu.name",[142,8709,198],{"class":148},[142,8711,8712],{"class":257},"\"小王\"",[142,8714,8715],{"class":152},"；\n",[142,8717,8718,8721,8723,8725],{"class":144,"line":1806},[142,8719,8720],{"class":152},"    t.stu.age",[142,8722,198],{"class":148},[142,8724,853],{"class":201},[142,8726,1319],{"class":152},[142,8728,8729,8732,8734,8736],{"class":144,"line":1811},[142,8730,8731],{"class":152},"    t.stu.score",[142,8733,198],{"class":148},[142,8735,497],{"class":201},[142,8737,1319],{"class":152},[142,8739,8740],{"class":144,"line":2605},[142,8741,1593],{"class":152},[84,8743,8745],{"id":8744},"_45结构体做函数参数","4.5结构体做函数参数",[14,8747,8748],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[133,8750,8752],{"className":135,"code":8751,"language":137,"meta":31,"style":31},"#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",[139,8753,8754,8760,8770,8776,8782,8786,8790,8796,8802,8806,8811,8816,8833,8837,8870,8874,8879,8898,8902,8933,8937,8945,8949,8958,8970,8982,8994,9007,9015,9028,9040,9048],{"__ignoreMap":31},[142,8755,8756,8758],{"class":144,"line":145},[142,8757,1977],{"class":148},[142,8759,1980],{"class":257},[142,8761,8762,8764,8766,8768],{"class":144,"line":64},[142,8763,1985],{"class":148},[142,8765,1988],{"class":148},[142,8767,1992],{"class":1991},[142,8769,1319],{"class":152},[142,8771,8772,8774],{"class":144,"line":1208},[142,8773,1977],{"class":148},[142,8775,7778],{"class":257},[142,8777,8778,8780],{"class":144,"line":1223},[142,8779,7788],{"class":148},[142,8781,7791],{"class":1991},[142,8783,8784],{"class":144,"line":1229},[142,8785,1574],{"class":152},[142,8787,8788],{"class":144,"line":1243},[142,8789,7814],{"class":152},[142,8791,8792,8794],{"class":144,"line":1249},[142,8793,2013],{"class":148},[142,8795,7826],{"class":152},[142,8797,8798,8800],{"class":144,"line":1340},[142,8799,2013],{"class":148},[142,8801,7838],{"class":152},[142,8803,8804],{"class":144,"line":1346},[142,8805,4023],{"class":152},[142,8807,8808],{"class":144,"line":1358},[142,8809,8810],{"class":211},"\u002F\u002F打印学生信息的函数\n",[142,8812,8813],{"class":144,"line":1640},[142,8814,8815],{"class":211},"\u002F\u002F值传递\n",[142,8817,8818,8820,8823,8825,8827,8829,8831],{"class":144,"line":1645},[142,8819,5393],{"class":148},[142,8821,8822],{"class":1991}," printStudent1",[142,8824,153],{"class":152},[142,8826,7788],{"class":148},[142,8828,7927],{"class":1991},[142,8830,8457],{"class":5245},[142,8832,159],{"class":152},[142,8834,8835],{"class":144,"line":1651},[142,8836,1574],{"class":152},[142,8838,8839,8841,8843,8846,8848,8851,8853,8856,8858,8860,8862,8865,8867],{"class":144,"line":1656},[142,8840,6558],{"class":152},[142,8842,1197],{"class":148},[142,8844,8845],{"class":152}," s.name ",[142,8847,1197],{"class":148},[142,8849,8850],{"class":257}," \" \"",[142,8852,1473],{"class":148},[142,8854,8855],{"class":152}," s.age ",[142,8857,1197],{"class":148},[142,8859,8850],{"class":257},[142,8861,1473],{"class":148},[142,8863,8864],{"class":152}," s.score ",[142,8866,1197],{"class":148},[142,8868,8869],{"class":152}," endl;\n",[142,8871,8872],{"class":144,"line":1670},[142,8873,1593],{"class":152},[142,8875,8876],{"class":144,"line":1675},[142,8877,8878],{"class":211},"\u002F\u002F地址传递\n",[142,8880,8881,8883,8886,8888,8890,8892,8894,8896],{"class":144,"line":1681},[142,8882,5393],{"class":148},[142,8884,8885],{"class":1991}," printStudent2",[142,8887,153],{"class":152},[142,8889,7788],{"class":148},[142,8891,7927],{"class":1991},[142,8893,6547],{"class":148},[142,8895,848],{"class":5245},[142,8897,159],{"class":152},[142,8899,8900],{"class":144,"line":1702},[142,8901,1574],{"class":152},[142,8903,8904,8906,8908,8911,8913,8915,8917,8920,8922,8924,8926,8929,8931],{"class":144,"line":1707},[142,8905,6558],{"class":152},[142,8907,1197],{"class":148},[142,8909,8910],{"class":152}," s->name ",[142,8912,1197],{"class":148},[142,8914,8850],{"class":257},[142,8916,1473],{"class":148},[142,8918,8919],{"class":152}," s->age ",[142,8921,1197],{"class":148},[142,8923,8850],{"class":257},[142,8925,1473],{"class":148},[142,8927,8928],{"class":152}," s->score ",[142,8930,1197],{"class":148},[142,8932,8869],{"class":152},[142,8934,8935],{"class":144,"line":1721},[142,8936,1593],{"class":152},[142,8938,8939,8941,8943],{"class":144,"line":1726},[142,8940,156],{"class":148},[142,8942,2001],{"class":1991},[142,8944,2004],{"class":152},[142,8946,8947],{"class":144,"line":1755},[142,8948,1574],{"class":152},[142,8950,8951,8953,8955],{"class":144,"line":1760},[142,8952,7924],{"class":148},[142,8954,7927],{"class":1991},[142,8956,8957],{"class":152}," s;\n",[142,8959,8960,8963,8965,8968],{"class":144,"line":1777},[142,8961,8962],{"class":152},"    s.name ",[142,8964,198],{"class":148},[142,8966,8967],{"class":257}," \"张三\"",[142,8969,1319],{"class":152},[142,8971,8972,8975,8977,8980],{"class":144,"line":1782},[142,8973,8974],{"class":152},"    s.age ",[142,8976,198],{"class":148},[142,8978,8979],{"class":201}," 20",[142,8981,1319],{"class":152},[142,8983,8984,8987,8989,8992],{"class":144,"line":1787},[142,8985,8986],{"class":152},"    s.score ",[142,8988,198],{"class":148},[142,8990,8991],{"class":201}," 85",[142,8993,1319],{"class":152},[142,8995,8996,8998,9000,9003,9005],{"class":144,"line":1792},[142,8997,1579],{"class":152},[142,8999,1197],{"class":148},[142,9001,9002],{"class":257},"\"值传递:\"",[142,9004,1197],{"class":148},[142,9006,1220],{"class":152},[142,9008,9009,9012],{"class":144,"line":1806},[142,9010,9011],{"class":1991},"    printStudent1",[142,9013,9014],{"class":152},"(s);\n",[142,9016,9017,9019,9021,9024,9026],{"class":144,"line":1811},[142,9018,1579],{"class":152},[142,9020,1197],{"class":148},[142,9022,9023],{"class":257},"\"地址传递:\"",[142,9025,1197],{"class":148},[142,9027,1220],{"class":152},[142,9029,9030,9033,9035,9037],{"class":144,"line":2605},[142,9031,9032],{"class":1991},"    printStudent2",[142,9034,153],{"class":152},[142,9036,506],{"class":148},[142,9038,9039],{"class":152},"s); \n",[142,9041,9042,9044,9046],{"class":144,"line":2619},[142,9043,4118],{"class":148},[142,9045,4121],{"class":201},[142,9047,1319],{"class":152},[142,9049,9050],{"class":144,"line":2627},[142,9051,1593],{"class":152},[14,9053,9054],{},"注意：",[1160,9056,9057,9060],{},[99,9058,9059],{},"1.先定义结构体，不要在函数中写结构体的定义",[99,9061,9062],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[84,9064,9066],{"id":9065},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9068,9069],{},"用const防止误操作",[133,9071,9073],{"className":135,"code":9072,"language":137,"meta":31,"style":31},"#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",[139,9074,9075,9081,9091,9097,9102,9106,9110,9116,9122,9126,9142,9146,9169,9173,9181,9185,9206,9213,9217],{"__ignoreMap":31},[142,9076,9077,9079],{"class":144,"line":145},[142,9078,1977],{"class":148},[142,9080,1980],{"class":257},[142,9082,9083,9085,9087,9089],{"class":144,"line":64},[142,9084,1985],{"class":148},[142,9086,1988],{"class":148},[142,9088,1992],{"class":1991},[142,9090,1319],{"class":152},[142,9092,9093,9095],{"class":144,"line":1208},[142,9094,1977],{"class":148},[142,9096,7778],{"class":257},[142,9098,9099],{"class":144,"line":1223},[142,9100,9101],{"class":152},"sctuct Student\n",[142,9103,9104],{"class":144,"line":1229},[142,9105,1574],{"class":152},[142,9107,9108],{"class":144,"line":1243},[142,9109,7814],{"class":152},[142,9111,9112,9114],{"class":144,"line":1249},[142,9113,2013],{"class":148},[142,9115,7826],{"class":152},[142,9117,9118,9120],{"class":144,"line":1340},[142,9119,2013],{"class":148},[142,9121,7838],{"class":152},[142,9123,9124],{"class":144,"line":1346},[142,9125,4023],{"class":152},[142,9127,9128,9130,9133,9135,9138,9140],{"class":144,"line":1358},[142,9129,5393],{"class":148},[142,9131,9132],{"class":1991}," printStudents",[142,9134,153],{"class":152},[142,9136,9137],{"class":1991},"student",[142,9139,8457],{"class":5245},[142,9141,159],{"class":152},[142,9143,9144],{"class":144,"line":1640},[142,9145,1574],{"class":152},[142,9147,9148,9150,9152,9155,9157,9160,9162,9165,9167],{"class":144,"line":1645},[142,9149,1579],{"class":152},[142,9151,1197],{"class":148},[142,9153,9154],{"class":152},"s.name",[142,9156,1197],{"class":148},[142,9158,9159],{"class":152},"s.age",[142,9161,1197],{"class":148},[142,9163,9164],{"class":152},"s.score",[142,9166,1197],{"class":148},[142,9168,1220],{"class":152},[142,9170,9171],{"class":144,"line":1651},[142,9172,1593],{"class":152},[142,9174,9175,9177,9179],{"class":144,"line":1656},[142,9176,156],{"class":148},[142,9178,2001],{"class":1991},[142,9180,6007],{"class":152},[142,9182,9183],{"class":144,"line":1670},[142,9184,1574],{"class":152},[142,9186,9187,9190,9192,9194,9196,9198,9200,9202,9204],{"class":144,"line":1675},[142,9188,9189],{"class":152},"    Student s",[142,9191,198],{"class":148},[142,9193,1049],{"class":152},[142,9195,7945],{"class":257},[142,9197,531],{"class":152},[142,9199,803],{"class":201},[142,9201,531],{"class":152},[142,9203,803],{"class":201},[142,9205,4023],{"class":152},[142,9207,9208,9211],{"class":144,"line":1681},[142,9209,9210],{"class":1991},"    printStudent",[142,9212,9014],{"class":152},[142,9214,9215],{"class":144,"line":1702},[142,9216,2428],{"emptyLinePlaceholder":69},[142,9218,9219],{"class":144,"line":1707},[142,9220,1593],{"class":152},[14,9222,9054],{},[1160,9224,9225,9228,9231],{},[99,9226,9227],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[99,9229,9230],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[99,9232,9233],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[133,9235,9237],{"className":135,"code":9236,"language":137,"meta":31,"style":31},"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",[139,9238,9239,9258,9262,9267,9287],{"__ignoreMap":31},[142,9240,9241,9243,9245,9247,9249,9252,9254,9256],{"class":144,"line":145},[142,9242,5393],{"class":148},[142,9244,9132],{"class":1991},[142,9246,153],{"class":152},[142,9248,6821],{"class":148},[142,9250,9251],{"class":1991}," student",[142,9253,6547],{"class":148},[142,9255,848],{"class":5245},[142,9257,159],{"class":152},[142,9259,9260],{"class":144,"line":64},[142,9261,1574],{"class":152},[142,9263,9264],{"class":144,"line":1208},[142,9265,9266],{"class":211},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[142,9268,9269,9271,9273,9275,9277,9279,9281,9283,9285],{"class":144,"line":1223},[142,9270,1579],{"class":152},[142,9272,1197],{"class":148},[142,9274,9154],{"class":152},[142,9276,1197],{"class":148},[142,9278,9159],{"class":152},[142,9280,1197],{"class":148},[142,9282,9164],{"class":152},[142,9284,1197],{"class":148},[142,9286,1220],{"class":152},[142,9288,9289],{"class":144,"line":1229},[142,9290,1593],{"class":152},[84,9292,9294],{"id":9293},"_47案例","4.7案例",[96,9296,9297],{},[99,9298,9299],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[133,9301,9303],{"className":135,"code":9302,"language":137,"meta":31,"style":31},"#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",[139,9304,9305,9311,9321,9327,9334,9338,9344,9348,9353,9359,9365,9369,9373,9379,9383,9388,9393,9406,9410,9415,9441,9445,9457,9484,9488,9500,9510,9514,9519,9548,9552,9564,9573,9600,9611,9621,9625,9629,9633,9638,9662,9666,9690,9694,9713,9739,9743,9768,9791,9815,9820,9825,9830,9839,9844,9850,9871,9877,9891,9897,9924,9933,9939,9947,9952],{"__ignoreMap":31},[142,9306,9307,9309],{"class":144,"line":145},[142,9308,1977],{"class":148},[142,9310,1980],{"class":257},[142,9312,9313,9315,9317,9319],{"class":144,"line":64},[142,9314,1985],{"class":148},[142,9316,1988],{"class":148},[142,9318,1992],{"class":1991},[142,9320,1319],{"class":152},[142,9322,9323,9325],{"class":144,"line":1208},[142,9324,1977],{"class":148},[142,9326,7778],{"class":257},[142,9328,9329,9331],{"class":144,"line":1223},[142,9330,1977],{"class":148},[142,9332,9333],{"class":257},"\u003Cctime>\n",[142,9335,9336],{"class":144,"line":1229},[142,9337,8567],{"class":211},[142,9339,9340,9342],{"class":144,"line":1243},[142,9341,7788],{"class":148},[142,9343,7791],{"class":1991},[142,9345,9346],{"class":144,"line":1249},[142,9347,1574],{"class":152},[142,9349,9350],{"class":144,"line":1340},[142,9351,9352],{"class":152},"    string sName;\n",[142,9354,9355,9357],{"class":144,"line":1346},[142,9356,2013],{"class":148},[142,9358,7826],{"class":152},[142,9360,9361,9363],{"class":144,"line":1358},[142,9362,2013],{"class":148},[142,9364,7838],{"class":152},[142,9366,9367],{"class":144,"line":1640},[142,9368,4023],{"class":152},[142,9370,9371],{"class":144,"line":1645},[142,9372,8604],{"class":211},[142,9374,9375,9377],{"class":144,"line":1651},[142,9376,7788],{"class":148},[142,9378,8611],{"class":1991},[142,9380,9381],{"class":144,"line":1656},[142,9382,1574],{"class":152},[142,9384,9385],{"class":144,"line":1670},[142,9386,9387],{"class":152},"    string tName;\n",[142,9389,9390],{"class":144,"line":1675},[142,9391,9392],{"class":211},"    \u002F\u002F学生数组\n",[142,9394,9395,9397,9399,9402,9404],{"class":144,"line":1681},[142,9396,7924],{"class":148},[142,9398,7927],{"class":1991},[142,9400,9401],{"class":152}," sArray[",[142,9403,472],{"class":201},[142,9405,4718],{"class":152},[142,9407,9408],{"class":144,"line":1702},[142,9409,4023],{"class":152},[142,9411,9412],{"class":144,"line":1707},[142,9413,9414],{"class":211},"\u002F\u002F给老师和学生赋值的函数\n",[142,9416,9417,9419,9422,9424,9426,9429,9432,9435,9437,9439],{"class":144,"line":1721},[142,9418,5393],{"class":148},[142,9420,9421],{"class":1991}," allocateSpace",[142,9423,153],{"class":152},[142,9425,7788],{"class":148},[142,9427,9428],{"class":1991}," Teacher",[142,9430,9431],{"class":5245}," tArray",[142,9433,9434],{"class":152},"[],",[142,9436,156],{"class":148},[142,9438,7360],{"class":5245},[142,9440,159],{"class":152},[142,9442,9443],{"class":144,"line":1726},[142,9444,1574],{"class":152},[142,9446,9447,9450,9452,9455],{"class":144,"line":1755},[142,9448,9449],{"class":152},"    string nameSeed",[142,9451,198],{"class":148},[142,9453,9454],{"class":257},"\"ABCDE\"",[142,9456,1319],{"class":152},[142,9458,9459,9461,9463,9465,9468,9470,9472,9475,9477,9480,9482],{"class":144,"line":1760},[142,9460,3229],{"class":148},[142,9462,1686],{"class":152},[142,9464,156],{"class":148},[142,9466,9467],{"class":152}," i ",[142,9469,198],{"class":148},[142,9471,4121],{"class":201},[142,9473,9474],{"class":152},"; i ",[142,9476,1063],{"class":148},[142,9478,9479],{"class":152}," len; i",[142,9481,2320],{"class":148},[142,9483,159],{"class":152},[142,9485,9486],{"class":144,"line":1777},[142,9487,2058],{"class":152},[142,9489,9490,9493,9495,9498],{"class":144,"line":1782},[142,9491,9492],{"class":152},"        tArray[i].tName ",[142,9494,198],{"class":148},[142,9496,9497],{"class":257}," \"Teacher_\"",[142,9499,1319],{"class":152},[142,9501,9502,9504,9507],{"class":144,"line":1787},[142,9503,9492],{"class":152},[142,9505,9506],{"class":148},"+=",[142,9508,9509],{"class":152},"nameSeed[i];\n",[142,9511,9512],{"class":144,"line":1792},[142,9513,2428],{"emptyLinePlaceholder":69},[142,9515,9516],{"class":144,"line":1806},[142,9517,9518],{"class":211},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[142,9520,9521,9523,9525,9527,9530,9532,9534,9537,9539,9541,9544,9546],{"class":144,"line":1811},[142,9522,3431],{"class":148},[142,9524,1686],{"class":152},[142,9526,156],{"class":148},[142,9528,9529],{"class":152}," j ",[142,9531,198],{"class":148},[142,9533,4121],{"class":201},[142,9535,9536],{"class":152},"; j ",[142,9538,1063],{"class":148},[142,9540,2176],{"class":201},[142,9542,9543],{"class":152},"; j",[142,9545,2320],{"class":148},[142,9547,159],{"class":152},[142,9549,9550],{"class":144,"line":2605},[142,9551,2538],{"class":152},[142,9553,9554,9557,9559,9562],{"class":144,"line":2619},[142,9555,9556],{"class":152},"            tArray[i].sArray[j].sName ",[142,9558,198],{"class":148},[142,9560,9561],{"class":257}," \"Student_\"",[142,9563,1319],{"class":152},[142,9565,9566,9568,9570],{"class":144,"line":2627},[142,9567,9556],{"class":152},[142,9569,9506],{"class":148},[142,9571,9572],{"class":152}," nameSeed[j];\n",[142,9574,9575,9578,9581,9583,9585,9587,9589,9591,9593,9595,9597],{"class":144,"line":2632},[142,9576,9577],{"class":148},"            int",[142,9579,9580],{"class":152}," random",[142,9582,198],{"class":148},[142,9584,2452],{"class":1991},[142,9586,2455],{"class":152},[142,9588,481],{"class":148},[142,9590,1060],{"class":201},[142,9592,634],{"class":148},[142,9594,554],{"class":201},[142,9596,208],{"class":152},[142,9598,9599],{"class":211},"\u002F\u002F40~99\n",[142,9601,9602,9605,9607,9609],{"class":144,"line":2638},[142,9603,9604],{"class":152},"            tArray[i].sArray[j].age ",[142,9606,198],{"class":148},[142,9608,8979],{"class":201},[142,9610,1319],{"class":152},[142,9612,9613,9616,9618],{"class":144,"line":2644},[142,9614,9615],{"class":152},"            tArray[i].sArray[j].score ",[142,9617,198],{"class":148},[142,9619,9620],{"class":152}," random;\n",[142,9622,9623],{"class":144,"line":2649},[142,9624,2557],{"class":152},[142,9626,9627],{"class":144,"line":7977},[142,9628,2215],{"class":152},[142,9630,9631],{"class":144,"line":8001},[142,9632,1593],{"class":152},[142,9634,9635],{"class":144,"line":8006},[142,9636,9637],{"class":211},"\u002F\u002F打印所有信息的函数\n",[142,9639,9640,9642,9645,9647,9649,9651,9653,9656,9658,9660],{"class":144,"line":8012},[142,9641,5393],{"class":148},[142,9643,9644],{"class":1991}," printInfo",[142,9646,153],{"class":152},[142,9648,7788],{"class":148},[142,9650,9428],{"class":1991},[142,9652,9431],{"class":5245},[142,9654,9655],{"class":152},"[], ",[142,9657,156],{"class":148},[142,9659,7360],{"class":5245},[142,9661,159],{"class":152},[142,9663,9664],{"class":144,"line":8039},[142,9665,1574],{"class":152},[142,9667,9668,9670,9672,9674,9676,9678,9680,9682,9684,9686,9688],{"class":144,"line":8044},[142,9669,3229],{"class":148},[142,9671,1686],{"class":152},[142,9673,156],{"class":148},[142,9675,9467],{"class":152},[142,9677,198],{"class":148},[142,9679,4121],{"class":201},[142,9681,9474],{"class":152},[142,9683,1063],{"class":148},[142,9685,9479],{"class":152},[142,9687,2320],{"class":148},[142,9689,159],{"class":152},[142,9691,9692],{"class":144,"line":8050},[142,9693,2058],{"class":152},[142,9695,9696,9699,9701,9704,9706,9709,9711],{"class":144,"line":8062},[142,9697,9698],{"class":152},"        cout ",[142,9700,1197],{"class":148},[142,9702,9703],{"class":257}," \"Teacher: \"",[142,9705,1473],{"class":148},[142,9707,9708],{"class":152}," tArray[i].tName ",[142,9710,1197],{"class":148},[142,9712,8869],{"class":152},[142,9714,9715,9717,9719,9721,9723,9725,9727,9729,9731,9733,9735,9737],{"class":144,"line":8074},[142,9716,3431],{"class":148},[142,9718,1686],{"class":152},[142,9720,156],{"class":148},[142,9722,9529],{"class":152},[142,9724,198],{"class":148},[142,9726,4121],{"class":201},[142,9728,9536],{"class":152},[142,9730,1063],{"class":148},[142,9732,2176],{"class":201},[142,9734,9543],{"class":152},[142,9736,2320],{"class":148},[142,9738,159],{"class":152},[142,9740,9741],{"class":144,"line":8086},[142,9742,2538],{"class":152},[142,9744,9746,9749,9751,9754,9756,9759,9761,9764,9766],{"class":144,"line":9745},47,[142,9747,9748],{"class":152},"            cout ",[142,9750,1197],{"class":148},[142,9752,9753],{"class":257}," \"",[142,9755,1259],{"class":201},[142,9757,9758],{"class":257},"Student: \"",[142,9760,1473],{"class":148},[142,9762,9763],{"class":152}," tArray[i].sArray[j].sName",[142,9765,1197],{"class":148},[142,9767,1220],{"class":152},[142,9769,9771,9773,9775,9777,9779,9782,9784,9787,9789],{"class":144,"line":9770},48,[142,9772,9748],{"class":152},[142,9774,1197],{"class":148},[142,9776,9753],{"class":257},[142,9778,1259],{"class":201},[142,9780,9781],{"class":257},"Age: \"",[142,9783,1473],{"class":148},[142,9785,9786],{"class":152}," tArray[i].sArray[j].age ",[142,9788,1197],{"class":148},[142,9790,8869],{"class":152},[142,9792,9794,9796,9798,9800,9802,9805,9807,9810,9812],{"class":144,"line":9793},49,[142,9795,9748],{"class":152},[142,9797,1197],{"class":148},[142,9799,9753],{"class":257},[142,9801,1259],{"class":201},[142,9803,9804],{"class":257},"Score: \"",[142,9806,1473],{"class":148},[142,9808,9809],{"class":152}," tArray[i].sArray[j].score ",[142,9811,1197],{"class":148},[142,9813,9814],{"class":152}," endl;   \n",[142,9816,9818],{"class":144,"line":9817},50,[142,9819,2557],{"class":152},[142,9821,9823],{"class":144,"line":9822},51,[142,9824,2215],{"class":152},[142,9826,9828],{"class":144,"line":9827},52,[142,9829,1593],{"class":152},[142,9831,9833,9835,9837],{"class":144,"line":9832},53,[142,9834,156],{"class":148},[142,9836,2001],{"class":1991},[142,9838,2004],{"class":152},[142,9840,9842],{"class":144,"line":9841},54,[142,9843,1574],{"class":152},[142,9845,9847],{"class":144,"line":9846},55,[142,9848,9849],{"class":211},"    \u002F\u002F随机数种子\n",[142,9851,9853,9855,9857,9859,9861,9863,9865,9867,9869],{"class":144,"line":9852},56,[142,9854,2401],{"class":1991},[142,9856,2404],{"class":152},[142,9858,2407],{"class":148},[142,9860,2410],{"class":148},[142,9862,582],{"class":152},[142,9864,2415],{"class":1991},[142,9866,153],{"class":152},[142,9868,2420],{"class":201},[142,9870,2423],{"class":152},[142,9872,9874],{"class":144,"line":9873},57,[142,9875,9876],{"class":211},"    \u002F\u002F1.创建3名老师的数组\n",[142,9878,9880,9882,9884,9887,9889],{"class":144,"line":9879},58,[142,9881,7924],{"class":148},[142,9883,9428],{"class":1991},[142,9885,9886],{"class":152}," tArray[",[142,9888,224],{"class":201},[142,9890,4718],{"class":152},[142,9892,9894],{"class":144,"line":9893},59,[142,9895,9896],{"class":211},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[142,9898,9900,9902,9905,9907,9910,9913,9915,9917,9920,9922],{"class":144,"line":9899},60,[142,9901,2013],{"class":148},[142,9903,9904],{"class":152}," len ",[142,9906,198],{"class":148},[142,9908,9909],{"class":148}," sizeof",[142,9911,9912],{"class":152},"(tArray) ",[142,9914,737],{"class":148},[142,9916,9909],{"class":148},[142,9918,9919],{"class":152},"(tArray[",[142,9921,344],{"class":201},[142,9923,3884],{"class":152},[142,9925,9927,9930],{"class":144,"line":9926},61,[142,9928,9929],{"class":1991},"    allocateSpace",[142,9931,9932],{"class":152},"(tArray, len);\n",[142,9934,9936],{"class":144,"line":9935},62,[142,9937,9938],{"class":211},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[142,9940,9942,9945],{"class":144,"line":9941},63,[142,9943,9944],{"class":1991},"    printInfo",[142,9946,9932],{"class":152},[142,9948,9950],{"class":144,"line":9949},64,[142,9951,2428],{"emptyLinePlaceholder":69},[142,9953,9955],{"class":144,"line":9954},65,[142,9956,1593],{"class":152},[96,9958,9959],{"start":64},[99,9960,9961,9964],{},[302,9962,9963],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,9966,9967],{},"五名英雄信息如下：",[133,9969,9973],{"className":9970,"code":9971,"language":9972,"meta":31,"style":31},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[139,9974,9975,9993,10010,10027,10044],{"__ignoreMap":31},[142,9976,9977,9979,9982,9984,9986,9988,9991],{"class":144,"line":145},[142,9978,4945],{"class":152},[142,9980,9981],{"class":257},"\"刘备\"",[142,9983,531],{"class":152},[142,9985,928],{"class":201},[142,9987,531],{"class":152},[142,9989,9990],{"class":257},"\"男\"",[142,9992,4958],{"class":152},[142,9994,9995,9997,10000,10002,10004,10006,10008],{"class":144,"line":64},[142,9996,4945],{"class":152},[142,9998,9999],{"class":257},"\"关羽\"",[142,10001,531],{"class":152},[142,10003,903],{"class":201},[142,10005,531],{"class":152},[142,10007,9990],{"class":257},[142,10009,4958],{"class":152},[142,10011,10012,10014,10017,10019,10021,10023,10025],{"class":144,"line":1208},[142,10013,4945],{"class":152},[142,10015,10016],{"class":257},"\"张飞\"",[142,10018,531],{"class":152},[142,10020,853],{"class":201},[142,10022,531],{"class":152},[142,10024,9990],{"class":257},[142,10026,4958],{"class":152},[142,10028,10029,10031,10034,10036,10038,10040,10042],{"class":144,"line":1223},[142,10030,4945],{"class":152},[142,10032,10033],{"class":257},"\"赵云\"",[142,10035,531],{"class":152},[142,10037,878],{"class":201},[142,10039,531],{"class":152},[142,10041,9990],{"class":257},[142,10043,4958],{"class":152},[142,10045,10046,10048,10051,10053,10055,10057,10060],{"class":144,"line":1229},[142,10047,4945],{"class":152},[142,10049,10050],{"class":257},"\"貂蝉\"",[142,10052,531],{"class":152},[142,10054,828],{"class":201},[142,10056,531],{"class":152},[142,10058,10059],{"class":257},"\"女\"",[142,10061,4958],{"class":152},[14,10063,10064],{},"代码：",[133,10066,10068],{"className":135,"code":10067,"language":137,"meta":31,"style":31},"#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",[139,10069,10070,10076,10086,10092,10099,10103,10107,10113,10118,10122,10127,10150,10154,10179,10183,10216,10221,10250,10255,10270,10296,10316,10321,10326,10330,10334,10339,10361,10365,10389,10393,10455,10459,10463,10471,10475,10480,10491,10495,10511,10527,10543,10559,10575,10579,10599,10621,10626,10639,10646,10651,10657,10662,10675,10681],{"__ignoreMap":31},[142,10071,10072,10074],{"class":144,"line":145},[142,10073,1977],{"class":148},[142,10075,1980],{"class":257},[142,10077,10078,10080,10082,10084],{"class":144,"line":64},[142,10079,1985],{"class":148},[142,10081,1988],{"class":148},[142,10083,1992],{"class":1991},[142,10085,1319],{"class":152},[142,10087,10088,10090],{"class":144,"line":1208},[142,10089,1977],{"class":148},[142,10091,7778],{"class":257},[142,10093,10094,10096],{"class":144,"line":1223},[142,10095,7788],{"class":148},[142,10097,10098],{"class":1991}," Sanguo\n",[142,10100,10101],{"class":144,"line":1229},[142,10102,1574],{"class":152},[142,10104,10105],{"class":144,"line":1243},[142,10106,7814],{"class":152},[142,10108,10109,10111],{"class":144,"line":1249},[142,10110,2013],{"class":148},[142,10112,7826],{"class":152},[142,10114,10115],{"class":144,"line":1340},[142,10116,10117],{"class":152},"    string gender;\n",[142,10119,10120],{"class":144,"line":1346},[142,10121,4023],{"class":152},[142,10123,10124],{"class":144,"line":1358},[142,10125,10126],{"class":211},"\u002F\u002F定义排序函数\n",[142,10128,10129,10131,10133,10135,10138,10140,10142,10144,10146,10148],{"class":144,"line":1640},[142,10130,5393],{"class":148},[142,10132,7345],{"class":1991},[142,10134,153],{"class":152},[142,10136,10137],{"class":1991},"Sanguo",[142,10139,6547],{"class":148},[142,10141,848],{"class":5245},[142,10143,531],{"class":152},[142,10145,156],{"class":148},[142,10147,7360],{"class":5245},[142,10149,159],{"class":152},[142,10151,10152],{"class":144,"line":1645},[142,10153,1574],{"class":152},[142,10155,10156,10158,10160,10162,10164,10166,10168,10170,10172,10175,10177],{"class":144,"line":1651},[142,10157,3229],{"class":148},[142,10159,153],{"class":152},[142,10161,156],{"class":148},[142,10163,3060],{"class":152},[142,10165,198],{"class":148},[142,10167,344],{"class":201},[142,10169,3067],{"class":152},[142,10171,1063],{"class":148},[142,10173,10174],{"class":152},"len;i",[142,10176,2320],{"class":148},[142,10178,159],{"class":152},[142,10180,10181],{"class":144,"line":1656},[142,10182,2058],{"class":152},[142,10184,10185,10188,10190,10192,10194,10196,10198,10200,10202,10204,10206,10208,10210,10212,10214],{"class":144,"line":1670},[142,10186,10187],{"class":148},"     for",[142,10189,1686],{"class":152},[142,10191,156],{"class":148},[142,10193,3438],{"class":152},[142,10195,198],{"class":148},[142,10197,344],{"class":201},[142,10199,3445],{"class":152},[142,10201,1063],{"class":148},[142,10203,7387],{"class":152},[142,10205,685],{"class":148},[142,10207,370],{"class":201},[142,10209,685],{"class":148},[142,10211,3578],{"class":152},[142,10213,2320],{"class":148},[142,10215,159],{"class":152},[142,10217,10218],{"class":144,"line":1675},[142,10219,10220],{"class":152},"     {\n",[142,10222,10223,10226,10229,10231,10234,10236,10239,10241,10243,10245,10247],{"class":144,"line":1681},[142,10224,10225],{"class":148},"         if",[142,10227,10228],{"class":152}," ((s",[142,10230,634],{"class":148},[142,10232,10233],{"class":152},"j)->age ",[142,10235,1113],{"class":148},[142,10237,10238],{"class":152}," (s",[142,10240,634],{"class":148},[142,10242,620],{"class":152},[142,10244,634],{"class":148},[142,10246,370],{"class":201},[142,10248,10249],{"class":152},")->age)\n",[142,10251,10252],{"class":144,"line":1702},[142,10253,10254],{"class":152},"         {\n",[142,10256,10257,10260,10262,10265,10267],{"class":144,"line":1707},[142,10258,10259],{"class":152},"             Sanguo temp",[142,10261,7182],{"class":148},[142,10263,10264],{"class":152},"(s",[142,10266,634],{"class":148},[142,10268,10269],{"class":152},"j);\n",[142,10271,10272,10275,10277,10279,10282,10284,10286,10288,10290,10292,10294],{"class":144,"line":1721},[142,10273,10274],{"class":148},"             *",[142,10276,10264],{"class":152},[142,10278,634],{"class":148},[142,10280,10281],{"class":152},"j)",[142,10283,7182],{"class":148},[142,10285,10264],{"class":152},[142,10287,634],{"class":148},[142,10289,620],{"class":152},[142,10291,634],{"class":148},[142,10293,370],{"class":201},[142,10295,2747],{"class":152},[142,10297,10298,10300,10302,10304,10306,10308,10310,10312,10314],{"class":144,"line":1726},[142,10299,10274],{"class":148},[142,10301,10264],{"class":152},[142,10303,634],{"class":148},[142,10305,620],{"class":152},[142,10307,634],{"class":148},[142,10309,370],{"class":201},[142,10311,582],{"class":152},[142,10313,198],{"class":148},[142,10315,4308],{"class":152},[142,10317,10318],{"class":144,"line":1755},[142,10319,10320],{"class":152},"         }\n",[142,10322,10323],{"class":144,"line":1760},[142,10324,10325],{"class":152},"     }\n",[142,10327,10328],{"class":144,"line":1777},[142,10329,2215],{"class":152},[142,10331,10332],{"class":144,"line":1782},[142,10333,1593],{"class":152},[142,10335,10336],{"class":144,"line":1787},[142,10337,10338],{"class":211},"\u002F\u002F定义打印函数\n",[142,10340,10341,10343,10345,10347,10349,10351,10353,10355,10357,10359],{"class":144,"line":1792},[142,10342,5393],{"class":148},[142,10344,9644],{"class":1991},[142,10346,153],{"class":152},[142,10348,10137],{"class":1991},[142,10350,6547],{"class":148},[142,10352,848],{"class":5245},[142,10354,531],{"class":152},[142,10356,156],{"class":148},[142,10358,7360],{"class":5245},[142,10360,159],{"class":152},[142,10362,10363],{"class":144,"line":1806},[142,10364,1574],{"class":152},[142,10366,10367,10369,10371,10373,10375,10377,10379,10381,10383,10385,10387],{"class":144,"line":1811},[142,10368,3229],{"class":148},[142,10370,1686],{"class":152},[142,10372,156],{"class":148},[142,10374,3060],{"class":152},[142,10376,198],{"class":148},[142,10378,344],{"class":201},[142,10380,3067],{"class":152},[142,10382,1063],{"class":148},[142,10384,10174],{"class":152},[142,10386,2320],{"class":148},[142,10388,159],{"class":152},[142,10390,10391],{"class":144,"line":2605},[142,10392,2058],{"class":152},[142,10394,10395,10397,10399,10401,10403,10406,10408,10410,10412,10415,10417,10419,10421,10424,10426,10428,10430,10433,10435,10437,10439,10442,10444,10446,10448,10451,10453],{"class":144,"line":2619},[142,10396,3479],{"class":152},[142,10398,1197],{"class":148},[142,10400,404],{"class":257},[142,10402,1259],{"class":201},[142,10404,10405],{"class":257},"姓名：\"",[142,10407,1197],{"class":148},[142,10409,10264],{"class":152},[142,10411,634],{"class":148},[142,10413,10414],{"class":152},"i)->name",[142,10416,1197],{"class":148},[142,10418,404],{"class":257},[142,10420,1259],{"class":201},[142,10422,10423],{"class":257},"年龄：\"",[142,10425,1197],{"class":148},[142,10427,10264],{"class":152},[142,10429,634],{"class":148},[142,10431,10432],{"class":152},"i)->age",[142,10434,1197],{"class":148},[142,10436,404],{"class":257},[142,10438,1259],{"class":201},[142,10440,10441],{"class":257},"性别：\"",[142,10443,1197],{"class":148},[142,10445,10264],{"class":152},[142,10447,634],{"class":148},[142,10449,10450],{"class":152},"i)->gender",[142,10452,1197],{"class":148},[142,10454,1220],{"class":152},[142,10456,10457],{"class":144,"line":2627},[142,10458,2215],{"class":152},[142,10460,10461],{"class":144,"line":2632},[142,10462,1593],{"class":152},[142,10464,10465,10467,10469],{"class":144,"line":2638},[142,10466,156],{"class":148},[142,10468,2001],{"class":1991},[142,10470,2004],{"class":152},[142,10472,10473],{"class":144,"line":2644},[142,10474,1574],{"class":152},[142,10476,10477],{"class":144,"line":2649},[142,10478,10479],{"class":211},"    \u002F\u002F定义结构体变量\n",[142,10481,10482,10485,10487,10489],{"class":144,"line":7977},[142,10483,10484],{"class":152},"    Sanguo s1[",[142,10486,472],{"class":201},[142,10488,1093],{"class":152},[142,10490,4936],{"class":148},[142,10492,10493],{"class":144,"line":8001},[142,10494,2058],{"class":152},[142,10496,10497,10499,10501,10503,10505,10507,10509],{"class":144,"line":8006},[142,10498,4945],{"class":152},[142,10500,9981],{"class":257},[142,10502,531],{"class":152},[142,10504,928],{"class":201},[142,10506,531],{"class":152},[142,10508,9990],{"class":257},[142,10510,4958],{"class":152},[142,10512,10513,10515,10517,10519,10521,10523,10525],{"class":144,"line":8012},[142,10514,4945],{"class":152},[142,10516,9999],{"class":257},[142,10518,531],{"class":152},[142,10520,903],{"class":201},[142,10522,531],{"class":152},[142,10524,9990],{"class":257},[142,10526,4958],{"class":152},[142,10528,10529,10531,10533,10535,10537,10539,10541],{"class":144,"line":8039},[142,10530,4945],{"class":152},[142,10532,10016],{"class":257},[142,10534,531],{"class":152},[142,10536,853],{"class":201},[142,10538,531],{"class":152},[142,10540,9990],{"class":257},[142,10542,4958],{"class":152},[142,10544,10545,10547,10549,10551,10553,10555,10557],{"class":144,"line":8044},[142,10546,4945],{"class":152},[142,10548,10033],{"class":257},[142,10550,531],{"class":152},[142,10552,878],{"class":201},[142,10554,531],{"class":152},[142,10556,9990],{"class":257},[142,10558,4958],{"class":152},[142,10560,10561,10563,10565,10567,10569,10571,10573],{"class":144,"line":8050},[142,10562,4945],{"class":152},[142,10564,10050],{"class":257},[142,10566,531],{"class":152},[142,10568,828],{"class":201},[142,10570,531],{"class":152},[142,10572,10059],{"class":257},[142,10574,4958],{"class":152},[142,10576,10577],{"class":144,"line":8062},[142,10578,4979],{"class":152},[142,10580,10581,10583,10585,10587,10590,10592,10595,10597],{"class":144,"line":8074},[142,10582,2013],{"class":148},[142,10584,7360],{"class":152},[142,10586,4231],{"class":148},[142,10588,10589],{"class":152},"(s1)",[142,10591,4237],{"class":148},[142,10593,10594],{"class":152},"(s1[",[142,10596,344],{"class":201},[142,10598,3884],{"class":152},[142,10600,10601,10604,10606,10609,10611,10614,10617,10619],{"class":144,"line":8086},[142,10602,10603],{"class":152},"    Sanguo ",[142,10605,608],{"class":148},[142,10607,10608],{"class":152},"s ",[142,10610,198],{"class":148},[142,10612,10613],{"class":148}," &",[142,10615,10616],{"class":152},"s1[",[142,10618,344],{"class":201},[142,10620,4718],{"class":152},[142,10622,10623],{"class":144,"line":9745},[142,10624,10625],{"class":211},"    \u002F\u002F排序前：\n",[142,10627,10628,10630,10632,10635,10637],{"class":144,"line":9770},[142,10629,6558],{"class":152},[142,10631,1197],{"class":148},[142,10633,10634],{"class":257}," \"排序前：\"",[142,10636,1473],{"class":148},[142,10638,8869],{"class":152},[142,10640,10641,10643],{"class":144,"line":9793},[142,10642,9944],{"class":1991},[142,10644,10645],{"class":152},"(s,len);\n",[142,10647,10648],{"class":144,"line":9817},[142,10649,10650],{"class":211},"    \u002F\u002F调用排序函数\n",[142,10652,10653,10655],{"class":144,"line":9822},[142,10654,7627],{"class":1991},[142,10656,10645],{"class":152},[142,10658,10659],{"class":144,"line":9827},[142,10660,10661],{"class":211},"    \u002F\u002F排序后\n",[142,10663,10664,10666,10668,10671,10673],{"class":144,"line":9832},[142,10665,6558],{"class":152},[142,10667,1197],{"class":148},[142,10669,10670],{"class":257}," \"排序后：\"",[142,10672,1473],{"class":148},[142,10674,8869],{"class":152},[142,10676,10677,10679],{"class":144,"line":9841},[142,10678,9944],{"class":1991},[142,10680,10645],{"class":152},[142,10682,10683],{"class":144,"line":9846},[142,10684,1593],{"class":152},[14,10686,10687,10688,10690],{},"注意：使用指针时直接用传首地址**&s",[142,10689,344],{},"**",[5155,10692,10693],{},"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":31,"searchDepth":64,"depth":64,"links":10695},[10696,10697,10698,10699,10700,10701,10702],{"id":7732,"depth":64,"text":7733},{"id":8094,"depth":64,"text":8095},{"id":8363,"depth":64,"text":8364},{"id":8528,"depth":64,"text":8529},{"id":8744,"depth":64,"text":8745},{"id":9065,"depth":64,"text":9066},{"id":9293,"depth":64,"text":9294},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7721,"description":7729},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10709,"title":10710,"body":10711,"description":31,"extension":67,"meta":12054,"navigation":69,"path":12055,"seo":12056,"stem":12057,"__hash__":12058},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10712,"toc":12048},[10713,10716,10720,10726,10740,10745,10748,10752,10759,10765,10768,10775,10781,10786,10789,10792,10795,11359,11362,11376,11380,11385,11401,11541,11544,11550,11553,11558,11566,11674,11677,11682,11685,11690,11693,11699,11702,12045],[10,10714,10710],{"id":10715},"_5程序内存模型",[84,10717,10719],{"id":10718},"_51内存分区模型","5.1内存分区模型",[14,10721,10722,10723],{},"C++程序在执行时，将内存大方向划分为",[302,10724,10725],{},"4个区域",[1160,10727,10728,10731,10734,10737],{},[99,10729,10730],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[99,10732,10733],{},"全局区：存放全局变量和静态变量以及常量",[99,10735,10736],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[99,10738,10739],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10741,10742],{},[302,10743,10744],{},"内存四区意义：",[14,10746,10747],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[113,10749,10751],{"id":10750},"_511程序运行前","5.1.1程序运行前",[14,10753,10754,10755,10758],{},"​\t在程序编译后，生成了exe可执行程序，",[302,10756,10757],{},"未执行该程序前","分为两个区域",[14,10760,10761,10762],{},"​\t",[302,10763,10764],{},"代码区：",[14,10766,10767],{},"​\t\t存放 CPU 执行的机器指令",[14,10769,10770,10771,10774],{},"​\t\t代码区是",[302,10772,10773],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10776,10770,10777,10780],{},[302,10778,10779],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10782,10761,10783],{},[302,10784,10785],{},"全局区：",[14,10787,10788],{},"​\t\t全局变量和静态变量存放在此.",[14,10790,10791],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10793,10794],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[133,10796,10798],{"className":135,"code":10797,"language":137,"meta":31,"style":31},"\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",[139,10799,10800,10805,10818,10831,10835,10840,10855,10870,10874,10883,10887,10892,10905,10918,10922,10927,10953,10979,10983,11010,11036,11040,11045,11061,11076,11080,11106,11132,11136,11161,11186,11190,11216,11242,11246,11262,11277,11303,11329,11333,11343,11347,11355],{"__ignoreMap":31},[142,10801,10802],{"class":144,"line":145},[142,10803,10804],{"class":211},"\u002F\u002F全局变量\n",[142,10806,10807,10809,10812,10814,10816],{"class":144,"line":64},[142,10808,156],{"class":148},[142,10810,10811],{"class":152}," g_a ",[142,10813,198],{"class":148},[142,10815,2066],{"class":201},[142,10817,1319],{"class":152},[142,10819,10820,10822,10825,10827,10829],{"class":144,"line":1208},[142,10821,156],{"class":148},[142,10823,10824],{"class":152}," g_b ",[142,10826,198],{"class":148},[142,10828,2066],{"class":201},[142,10830,1319],{"class":152},[142,10832,10833],{"class":144,"line":1223},[142,10834,2428],{"emptyLinePlaceholder":69},[142,10836,10837],{"class":144,"line":1229},[142,10838,10839],{"class":211},"\u002F\u002F全局常量\n",[142,10841,10842,10844,10846,10849,10851,10853],{"class":144,"line":1243},[142,10843,6821],{"class":148},[142,10845,2410],{"class":148},[142,10847,10848],{"class":152}," c_g_a ",[142,10850,198],{"class":148},[142,10852,2066],{"class":201},[142,10854,1319],{"class":152},[142,10856,10857,10859,10861,10864,10866,10868],{"class":144,"line":1249},[142,10858,6821],{"class":148},[142,10860,2410],{"class":148},[142,10862,10863],{"class":152}," c_g_b ",[142,10865,198],{"class":148},[142,10867,2066],{"class":201},[142,10869,1319],{"class":152},[142,10871,10872],{"class":144,"line":1340},[142,10873,2428],{"emptyLinePlaceholder":69},[142,10875,10876,10878,10880],{"class":144,"line":1346},[142,10877,156],{"class":148},[142,10879,2001],{"class":1991},[142,10881,10882],{"class":152},"() {\n",[142,10884,10885],{"class":144,"line":1358},[142,10886,2428],{"emptyLinePlaceholder":69},[142,10888,10889],{"class":144,"line":1640},[142,10890,10891],{"class":211},"    \u002F\u002F局部变量\n",[142,10893,10894,10896,10899,10901,10903],{"class":144,"line":1645},[142,10895,2013],{"class":148},[142,10897,10898],{"class":152}," a ",[142,10900,198],{"class":148},[142,10902,2066],{"class":201},[142,10904,1319],{"class":152},[142,10906,10907,10909,10912,10914,10916],{"class":144,"line":1651},[142,10908,2013],{"class":148},[142,10910,10911],{"class":152}," b ",[142,10913,198],{"class":148},[142,10915,2066],{"class":201},[142,10917,1319],{"class":152},[142,10919,10920],{"class":144,"line":1656},[142,10921,2428],{"emptyLinePlaceholder":69},[142,10923,10924],{"class":144,"line":1670},[142,10925,10926],{"class":211},"    \u002F\u002F打印地址\n",[142,10928,10929,10931,10933,10936,10938,10940,10942,10944,10946,10949,10951],{"class":144,"line":1675},[142,10930,6558],{"class":152},[142,10932,1197],{"class":148},[142,10934,10935],{"class":257}," \"局部变量a地址为： \"",[142,10937,1473],{"class":148},[142,10939,1686],{"class":152},[142,10941,156],{"class":148},[142,10943,582],{"class":152},[142,10945,506],{"class":148},[142,10947,10948],{"class":152},"a ",[142,10950,1197],{"class":148},[142,10952,8869],{"class":152},[142,10954,10955,10957,10959,10962,10964,10966,10968,10970,10972,10975,10977],{"class":144,"line":1681},[142,10956,6558],{"class":152},[142,10958,1197],{"class":148},[142,10960,10961],{"class":257}," \"局部变量b地址为： \"",[142,10963,1473],{"class":148},[142,10965,1686],{"class":152},[142,10967,156],{"class":148},[142,10969,582],{"class":152},[142,10971,506],{"class":148},[142,10973,10974],{"class":152},"b ",[142,10976,1197],{"class":148},[142,10978,8869],{"class":152},[142,10980,10981],{"class":144,"line":1702},[142,10982,2428],{"emptyLinePlaceholder":69},[142,10984,10985,10987,10989,10992,10994,10997,10999,11001,11003,11006,11008],{"class":144,"line":1707},[142,10986,6558],{"class":152},[142,10988,1197],{"class":148},[142,10990,10991],{"class":257}," \"全局变量g_a地址为： \"",[142,10993,1473],{"class":148},[142,10995,10996],{"class":152},"  (",[142,10998,156],{"class":148},[142,11000,582],{"class":152},[142,11002,506],{"class":148},[142,11004,11005],{"class":152},"g_a ",[142,11007,1197],{"class":148},[142,11009,8869],{"class":152},[142,11011,11012,11014,11016,11019,11021,11023,11025,11027,11029,11032,11034],{"class":144,"line":1721},[142,11013,6558],{"class":152},[142,11015,1197],{"class":148},[142,11017,11018],{"class":257}," \"全局变量g_b地址为： \"",[142,11020,1473],{"class":148},[142,11022,10996],{"class":152},[142,11024,156],{"class":148},[142,11026,582],{"class":152},[142,11028,506],{"class":148},[142,11030,11031],{"class":152},"g_b ",[142,11033,1197],{"class":148},[142,11035,8869],{"class":152},[142,11037,11038],{"class":144,"line":1726},[142,11039,2428],{"emptyLinePlaceholder":69},[142,11041,11042],{"class":144,"line":1755},[142,11043,11044],{"class":211},"    \u002F\u002F静态变量\n",[142,11046,11047,11050,11052,11055,11057,11059],{"class":144,"line":1760},[142,11048,11049],{"class":148},"    static",[142,11051,2410],{"class":148},[142,11053,11054],{"class":152}," s_a ",[142,11056,198],{"class":148},[142,11058,2066],{"class":201},[142,11060,1319],{"class":152},[142,11062,11063,11065,11067,11070,11072,11074],{"class":144,"line":1777},[142,11064,11049],{"class":148},[142,11066,2410],{"class":148},[142,11068,11069],{"class":152}," s_b ",[142,11071,198],{"class":148},[142,11073,2066],{"class":201},[142,11075,1319],{"class":152},[142,11077,11078],{"class":144,"line":1782},[142,11079,2428],{"emptyLinePlaceholder":69},[142,11081,11082,11084,11086,11089,11091,11093,11095,11097,11099,11102,11104],{"class":144,"line":1787},[142,11083,6558],{"class":152},[142,11085,1197],{"class":148},[142,11087,11088],{"class":257}," \"静态变量s_a地址为： \"",[142,11090,1473],{"class":148},[142,11092,1686],{"class":152},[142,11094,156],{"class":148},[142,11096,582],{"class":152},[142,11098,506],{"class":148},[142,11100,11101],{"class":152},"s_a ",[142,11103,1197],{"class":148},[142,11105,8869],{"class":152},[142,11107,11108,11110,11112,11115,11117,11119,11121,11123,11125,11128,11130],{"class":144,"line":1792},[142,11109,6558],{"class":152},[142,11111,1197],{"class":148},[142,11113,11114],{"class":257}," \"静态变量s_b地址为： \"",[142,11116,1473],{"class":148},[142,11118,1686],{"class":152},[142,11120,156],{"class":148},[142,11122,582],{"class":152},[142,11124,506],{"class":148},[142,11126,11127],{"class":152},"s_b ",[142,11129,1197],{"class":148},[142,11131,8869],{"class":152},[142,11133,11134],{"class":144,"line":1806},[142,11135,2428],{"emptyLinePlaceholder":69},[142,11137,11138,11140,11142,11145,11147,11149,11151,11153,11155,11157,11159],{"class":144,"line":1811},[142,11139,6558],{"class":152},[142,11141,1197],{"class":148},[142,11143,11144],{"class":257}," \"字符串常量地址为： \"",[142,11146,1473],{"class":148},[142,11148,1686],{"class":152},[142,11150,156],{"class":148},[142,11152,582],{"class":152},[142,11154,506],{"class":148},[142,11156,1215],{"class":257},[142,11158,1473],{"class":148},[142,11160,8869],{"class":152},[142,11162,11163,11165,11167,11169,11171,11173,11175,11177,11179,11182,11184],{"class":144,"line":2605},[142,11164,6558],{"class":152},[142,11166,1197],{"class":148},[142,11168,11144],{"class":257},[142,11170,1473],{"class":148},[142,11172,1686],{"class":152},[142,11174,156],{"class":148},[142,11176,582],{"class":152},[142,11178,506],{"class":148},[142,11180,11181],{"class":257},"\"hello world1\"",[142,11183,1473],{"class":148},[142,11185,8869],{"class":152},[142,11187,11188],{"class":144,"line":2619},[142,11189,2428],{"emptyLinePlaceholder":69},[142,11191,11192,11194,11196,11199,11201,11203,11205,11207,11209,11212,11214],{"class":144,"line":2627},[142,11193,6558],{"class":152},[142,11195,1197],{"class":148},[142,11197,11198],{"class":257}," \"全局常量c_g_a地址为： \"",[142,11200,1473],{"class":148},[142,11202,1686],{"class":152},[142,11204,156],{"class":148},[142,11206,582],{"class":152},[142,11208,506],{"class":148},[142,11210,11211],{"class":152},"c_g_a ",[142,11213,1197],{"class":148},[142,11215,8869],{"class":152},[142,11217,11218,11220,11222,11225,11227,11229,11231,11233,11235,11238,11240],{"class":144,"line":2632},[142,11219,6558],{"class":152},[142,11221,1197],{"class":148},[142,11223,11224],{"class":257}," \"全局常量c_g_b地址为： \"",[142,11226,1473],{"class":148},[142,11228,1686],{"class":152},[142,11230,156],{"class":148},[142,11232,582],{"class":152},[142,11234,506],{"class":148},[142,11236,11237],{"class":152},"c_g_b ",[142,11239,1197],{"class":148},[142,11241,8869],{"class":152},[142,11243,11244],{"class":144,"line":2638},[142,11245,2428],{"emptyLinePlaceholder":69},[142,11247,11248,11251,11253,11256,11258,11260],{"class":144,"line":2644},[142,11249,11250],{"class":148},"    const",[142,11252,2410],{"class":148},[142,11254,11255],{"class":152}," c_l_a ",[142,11257,198],{"class":148},[142,11259,2066],{"class":201},[142,11261,1319],{"class":152},[142,11263,11264,11266,11268,11271,11273,11275],{"class":144,"line":2649},[142,11265,11250],{"class":148},[142,11267,2410],{"class":148},[142,11269,11270],{"class":152}," c_l_b ",[142,11272,198],{"class":148},[142,11274,2066],{"class":201},[142,11276,1319],{"class":152},[142,11278,11279,11281,11283,11286,11288,11290,11292,11294,11296,11299,11301],{"class":144,"line":7977},[142,11280,6558],{"class":152},[142,11282,1197],{"class":148},[142,11284,11285],{"class":257}," \"局部常量c_l_a地址为： \"",[142,11287,1473],{"class":148},[142,11289,1686],{"class":152},[142,11291,156],{"class":148},[142,11293,582],{"class":152},[142,11295,506],{"class":148},[142,11297,11298],{"class":152},"c_l_a ",[142,11300,1197],{"class":148},[142,11302,8869],{"class":152},[142,11304,11305,11307,11309,11312,11314,11316,11318,11320,11322,11325,11327],{"class":144,"line":8001},[142,11306,6558],{"class":152},[142,11308,1197],{"class":148},[142,11310,11311],{"class":257}," \"局部常量c_l_b地址为： \"",[142,11313,1473],{"class":148},[142,11315,1686],{"class":152},[142,11317,156],{"class":148},[142,11319,582],{"class":152},[142,11321,506],{"class":148},[142,11323,11324],{"class":152},"c_l_b ",[142,11326,1197],{"class":148},[142,11328,8869],{"class":152},[142,11330,11331],{"class":144,"line":8006},[142,11332,2428],{"emptyLinePlaceholder":69},[142,11334,11335,11337,11339,11341],{"class":144,"line":8012},[142,11336,2331],{"class":1991},[142,11338,153],{"class":152},[142,11340,2336],{"class":257},[142,11342,2747],{"class":152},[142,11344,11345],{"class":144,"line":8039},[142,11346,2428],{"emptyLinePlaceholder":69},[142,11348,11349,11351,11353],{"class":144,"line":8044},[142,11350,4118],{"class":148},[142,11352,4121],{"class":201},[142,11354,1319],{"class":152},[142,11356,11357],{"class":144,"line":8050},[142,11358,1593],{"class":152},[14,11360,11361],{},"总结：",[1160,11363,11364,11367,11370,11373],{},[99,11365,11366],{},"c++中程序运行前分为全局区和代码区",[99,11368,11369],{},"代码区特点是共享和只读",[99,11371,11372],{},"全局区中存放全局变量、静态变量、常量",[99,11374,11375],{},"常量区中存放const修饰的全局常量和字符串常量",[113,11377,11379],{"id":11378},"_512程序运行后","5.1.2程序运行后",[96,11381,11382],{},[99,11383,11384],{},"栈区：",[1160,11386,11387,11394],{},[99,11388,11389,11390,11393],{},"由编译器自动分配释放, 存放",[302,11391,11392],{},"函数的参数值,局部变量","等",[99,11395,11396,11397,11400],{},"注意事项：",[302,11398,11399],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[133,11402,11404],{"className":135,"code":11403,"language":137,"meta":31,"style":31},"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",[139,11405,11406,11417,11421,11436,11448,11452,11456,11464,11469,11484,11502,11519,11529,11537],{"__ignoreMap":31},[142,11407,11408,11410,11412,11415],{"class":144,"line":145},[142,11409,156],{"class":148},[142,11411,6547],{"class":148},[142,11413,11414],{"class":1991}," func",[142,11416,2004],{"class":152},[142,11418,11419],{"class":144,"line":64},[142,11420,1574],{"class":152},[142,11422,11423,11425,11427,11429,11431,11433],{"class":144,"line":1208},[142,11424,2013],{"class":148},[142,11426,10898],{"class":152},[142,11428,198],{"class":148},[142,11430,2066],{"class":201},[142,11432,208],{"class":152},[142,11434,11435],{"class":211}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[142,11437,11438,11440,11442,11445],{"class":144,"line":1223},[142,11439,4118],{"class":148},[142,11441,10613],{"class":148},[142,11443,11444],{"class":152},"a;",[142,11446,11447],{"class":211}," \u002F\u002F放回局部变量的地址\n",[142,11449,11450],{"class":144,"line":1229},[142,11451,1593],{"class":152},[142,11453,11454],{"class":144,"line":1243},[142,11455,2428],{"emptyLinePlaceholder":69},[142,11457,11458,11460,11462],{"class":144,"line":1249},[142,11459,156],{"class":148},[142,11461,2001],{"class":1991},[142,11463,10882],{"class":152},[142,11465,11466],{"class":144,"line":1340},[142,11467,11468],{"class":211},"    \u002F\u002F接受func的返回值\n",[142,11470,11471,11473,11475,11478,11480,11482],{"class":144,"line":1346},[142,11472,2013],{"class":148},[142,11474,6547],{"class":148},[142,11476,11477],{"class":152},"p ",[142,11479,198],{"class":148},[142,11481,11414],{"class":1991},[142,11483,5665],{"class":152},[142,11485,11486,11488,11490,11492,11494,11496,11499],{"class":144,"line":1358},[142,11487,6558],{"class":152},[142,11489,1197],{"class":148},[142,11491,6547],{"class":148},[142,11493,11477],{"class":152},[142,11495,1197],{"class":148},[142,11497,11498],{"class":152}," endl;",[142,11500,11501],{"class":211}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[142,11503,11504,11506,11508,11510,11512,11514,11516],{"class":144,"line":1640},[142,11505,6558],{"class":152},[142,11507,1197],{"class":148},[142,11509,6547],{"class":148},[142,11511,11477],{"class":152},[142,11513,1197],{"class":148},[142,11515,11498],{"class":152},[142,11517,11518],{"class":211}," \u002F\u002F第二次这个数据不再保留\n",[142,11520,11521,11523,11525,11527],{"class":144,"line":1645},[142,11522,2331],{"class":1991},[142,11524,153],{"class":152},[142,11526,2336],{"class":257},[142,11528,2747],{"class":152},[142,11530,11531,11533,11535],{"class":144,"line":1651},[142,11532,4118],{"class":148},[142,11534,4121],{"class":201},[142,11536,1319],{"class":152},[142,11538,11539],{"class":144,"line":1656},[142,11540,1593],{"class":152},[14,11542,11543],{},"输出结果：",[14,11545,11546],{},[29,11547],{"alt":11548,"src":11549},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11551,11552],{},"总结：不要返回局部变量的地址",[96,11554,11555],{"start":64},[99,11556,11557],{},"堆区",[1160,11559,11560,11563],{},[99,11561,11562],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[99,11564,11565],{},"在c++中主要利用new在堆区开辟内存",[133,11567,11569],{"className":135,"code":11568,"language":137,"meta":31,"style":31},"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",[139,11570,11571,11586,11590,11595,11616,11623,11627,11635,11639,11644,11658,11670],{"__ignoreMap":31},[142,11572,11573,11575,11578,11581,11583],{"class":144,"line":145},[142,11574,156],{"class":148},[142,11576,11577],{"class":148},"  *",[142,11579,11580],{"class":1991},"func",[142,11582,2455],{"class":152},[142,11584,11585],{"class":211},"  \u002F\u002F函数返回指针\n",[142,11587,11588],{"class":144,"line":64},[142,11589,1574],{"class":152},[142,11591,11592],{"class":144,"line":1208},[142,11593,11594],{"class":211},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[142,11596,11597,11599,11601,11603,11605,11608,11610,11612,11614],{"class":144,"line":1223},[142,11598,4175],{"class":148},[142,11600,6547],{"class":148},[142,11602,14],{"class":152},[142,11604,198],{"class":148},[142,11606,11607],{"class":148}," new",[142,11609,2410],{"class":148},[142,11611,153],{"class":152},[142,11613,599],{"class":201},[142,11615,2747],{"class":152},[142,11617,11618,11620],{"class":144,"line":1229},[142,11619,4409],{"class":148},[142,11621,11622],{"class":152}," p;\n",[142,11624,11625],{"class":144,"line":1243},[142,11626,1593],{"class":152},[142,11628,11629,11631,11633],{"class":144,"line":1249},[142,11630,156],{"class":148},[142,11632,2001],{"class":1991},[142,11634,2004],{"class":152},[142,11636,11637],{"class":144,"line":1340},[142,11638,1574],{"class":152},[142,11640,11641],{"class":144,"line":1346},[142,11642,11643],{"class":211},"    \u002F\u002F在堆区开辟数据\n",[142,11645,11646,11648,11650,11652,11654,11656],{"class":144,"line":1358},[142,11647,2013],{"class":148},[142,11649,6547],{"class":148},[142,11651,14],{"class":152},[142,11653,198],{"class":148},[142,11655,11580],{"class":1991},[142,11657,5665],{"class":152},[142,11659,11660,11662,11664,11666,11668],{"class":144,"line":1640},[142,11661,1579],{"class":152},[142,11663,6448],{"class":148},[142,11665,14],{"class":152},[142,11667,1197],{"class":148},[142,11669,1220],{"class":152},[142,11671,11672],{"class":144,"line":1645},[142,11673,1593],{"class":152},[14,11675,11676],{},"图片展示：",[14,11678,11679],{},[29,11680],{"alt":11548,"src":11681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11683,11684],{},"堆区内存由程序员管生死！！！",[96,11686,11687],{"start":1208},[99,11688,11689],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11691,11692],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11694,11695,11696],{},"​语法：",[139,11697,11698],{}," new 数据类型",[14,11700,11701],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[133,11703,11705],{"className":135,"code":11704,"language":137,"meta":31,"style":31},"\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",[139,11706,11707,11712,11722,11726,11731,11736,11758,11762,11770,11774,11788,11800,11812,11824,11829,11834,11845,11849,11854,11862,11866,11871,11893,11919,11923,11941,11945,11971,11975,11987,11991,11996,12001,12009,12013,12017,12025,12029,12035,12041],{"__ignoreMap":31},[142,11708,11709],{"class":144,"line":145},[142,11710,11711],{"class":211},"\u002F\u002F1.new的基本语法\n",[142,11713,11714,11716,11718,11720],{"class":144,"line":64},[142,11715,156],{"class":148},[142,11717,6547],{"class":148},[142,11719,11580],{"class":1991},[142,11721,2004],{"class":152},[142,11723,11724],{"class":144,"line":1208},[142,11725,1574],{"class":152},[142,11727,11728],{"class":144,"line":1223},[142,11729,11730],{"class":211},"    \u002F\u002F在堆区创建整型数据\n",[142,11732,11733],{"class":144,"line":1229},[142,11734,11735],{"class":211},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[142,11737,11738,11740,11742,11744,11747,11749,11751,11753,11755],{"class":144,"line":1243},[142,11739,2013],{"class":148},[142,11741,6547],{"class":148},[142,11743,14],{"class":152},[142,11745,11746],{"class":148},"=new",[142,11748,2410],{"class":148},[142,11750,153],{"class":152},[142,11752,599],{"class":201},[142,11754,5995],{"class":152},[142,11756,11757],{"class":211},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[142,11759,11760],{"class":144,"line":1249},[142,11761,1593],{"class":152},[142,11763,11764,11766,11768],{"class":144,"line":1340},[142,11765,5393],{"class":148},[142,11767,5617],{"class":1991},[142,11769,2004],{"class":152},[142,11771,11772],{"class":144,"line":1346},[142,11773,1574],{"class":152},[142,11775,11776,11778,11780,11782,11784,11786],{"class":144,"line":1358},[142,11777,2013],{"class":148},[142,11779,6547],{"class":148},[142,11781,14],{"class":152},[142,11783,198],{"class":148},[142,11785,11580],{"class":1991},[142,11787,5665],{"class":152},[142,11789,11790,11792,11794,11796,11798],{"class":144,"line":1640},[142,11791,1579],{"class":152},[142,11793,6448],{"class":148},[142,11795,14],{"class":152},[142,11797,1197],{"class":148},[142,11799,1220],{"class":152},[142,11801,11802,11804,11806,11808,11810],{"class":144,"line":1645},[142,11803,1579],{"class":152},[142,11805,6448],{"class":148},[142,11807,14],{"class":152},[142,11809,1197],{"class":148},[142,11811,1220],{"class":152},[142,11813,11814,11816,11818,11820,11822],{"class":144,"line":1651},[142,11815,1579],{"class":152},[142,11817,6448],{"class":148},[142,11819,14],{"class":152},[142,11821,1197],{"class":148},[142,11823,1220],{"class":152},[142,11825,11826],{"class":144,"line":1656},[142,11827,11828],{"class":211},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[142,11830,11831],{"class":144,"line":1670},[142,11832,11833],{"class":211},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[142,11835,11836,11839,11842],{"class":144,"line":1675},[142,11837,11838],{"class":148},"    delete",[142,11840,11841],{"class":152}," p;",[142,11843,11844],{"class":211},"\u002F\u002F删除这块地址\n",[142,11846,11847],{"class":144,"line":1681},[142,11848,1593],{"class":152},[142,11850,11851],{"class":144,"line":1702},[142,11852,11853],{"class":211},"\u002F\u002F2.在堆区利用new开辟数组\n",[142,11855,11856,11858,11860],{"class":144,"line":1707},[142,11857,5393],{"class":148},[142,11859,5686],{"class":1991},[142,11861,2004],{"class":152},[142,11863,11864],{"class":144,"line":1721},[142,11865,1574],{"class":152},[142,11867,11868],{"class":144,"line":1726},[142,11869,11870],{"class":211},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[142,11872,11873,11875,11877,11879,11881,11883,11885,11887,11890],{"class":144,"line":1755},[142,11874,2013],{"class":148},[142,11876,6547],{"class":148},[142,11878,3908],{"class":152},[142,11880,11746],{"class":148},[142,11882,2410],{"class":148},[142,11884,1043],{"class":152},[142,11886,599],{"class":201},[142,11888,11889],{"class":152},"];",[142,11891,11892],{"class":211},"\u002F\u002F10代表数组有10个元素\n",[142,11894,11895,11897,11899,11901,11903,11905,11907,11909,11911,11913,11915,11917],{"class":144,"line":1760},[142,11896,3229],{"class":148},[142,11898,1686],{"class":152},[142,11900,156],{"class":148},[142,11902,3060],{"class":152},[142,11904,198],{"class":148},[142,11906,344],{"class":201},[142,11908,3067],{"class":152},[142,11910,1063],{"class":148},[142,11912,599],{"class":201},[142,11914,3067],{"class":152},[142,11916,2320],{"class":148},[142,11918,159],{"class":152},[142,11920,11921],{"class":144,"line":1777},[142,11922,2058],{"class":152},[142,11924,11925,11928,11930,11932,11934,11936,11938],{"class":144,"line":1782},[142,11926,11927],{"class":152},"        arr[i]",[142,11929,198],{"class":148},[142,11931,594],{"class":152},[142,11933,634],{"class":148},[142,11935,464],{"class":201},[142,11937,208],{"class":152},[142,11939,11940],{"class":211},"\u002F\u002F给10个元素赋值100～109\n",[142,11942,11943],{"class":144,"line":1787},[142,11944,2215],{"class":152},[142,11946,11947,11949,11951,11953,11955,11957,11959,11961,11963,11965,11967,11969],{"class":144,"line":1792},[142,11948,3229],{"class":148},[142,11950,1686],{"class":152},[142,11952,156],{"class":148},[142,11954,3060],{"class":152},[142,11956,198],{"class":148},[142,11958,344],{"class":201},[142,11960,3067],{"class":152},[142,11962,1063],{"class":148},[142,11964,599],{"class":201},[142,11966,3067],{"class":152},[142,11968,2320],{"class":148},[142,11970,159],{"class":152},[142,11972,11973],{"class":144,"line":1806},[142,11974,2058],{"class":152},[142,11976,11977,11979,11981,11983,11985],{"class":144,"line":1811},[142,11978,3479],{"class":152},[142,11980,1197],{"class":148},[142,11982,4382],{"class":152},[142,11984,1197],{"class":148},[142,11986,1220],{"class":152},[142,11988,11989],{"class":144,"line":2605},[142,11990,2215],{"class":152},[142,11992,11993],{"class":144,"line":2619},[142,11994,11995],{"class":211},"    \u002F\u002F释放堆区数组\n",[142,11997,11998],{"class":144,"line":2627},[142,11999,12000],{"class":211},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[142,12002,12003,12006],{"class":144,"line":2632},[142,12004,12005],{"class":148},"    delete[]",[142,12007,12008],{"class":152}," arr;\n",[142,12010,12011],{"class":144,"line":2638},[142,12012,1593],{"class":152},[142,12014,12015],{"class":144,"line":2644},[142,12016,2428],{"emptyLinePlaceholder":69},[142,12018,12019,12021,12023],{"class":144,"line":2649},[142,12020,156],{"class":148},[142,12022,2001],{"class":1991},[142,12024,2004],{"class":152},[142,12026,12027],{"class":144,"line":7977},[142,12028,1574],{"class":152},[142,12030,12031,12033],{"class":144,"line":8001},[142,12032,5662],{"class":1991},[142,12034,5665],{"class":152},[142,12036,12037,12039],{"class":144,"line":8006},[142,12038,5731],{"class":1991},[142,12040,5665],{"class":152},[142,12042,12043],{"class":144,"line":8012},[142,12044,1593],{"class":152},[5155,12046,12047],{},"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":31,"searchDepth":64,"depth":64,"links":12049},[12050],{"id":10718,"depth":64,"text":10719,"children":12051},[12052,12053],{"id":10750,"depth":1208,"text":10751},{"id":11378,"depth":1208,"text":11379},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10710,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12060,"title":12061,"body":12062,"description":31,"extension":67,"meta":13543,"navigation":69,"path":13544,"seo":13545,"stem":13546,"__hash__":13547},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12063,"toc":13535},[12064,12067,12071,12074,12077,12246,12250,12255,12272,12277,12429,12433,12436,12439,12833,12837,12840,12845,12848,13160,13164,13170,13330,13332,13340,13344,13347,13354,13532],[10,12065,12061],{"id":12066},"_6引用",[84,12068,12070],{"id":12069},"_61引用基本用法","6.1引用基本用法",[14,12072,12073],{},"引用的本质：给变量起别名",[14,12075,12076],{},"语法：数据类型 &别名=原名",[133,12078,12080],{"className":135,"code":12079,"language":137,"meta":31,"style":31},"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",[139,12081,12082,12090,12094,12106,12118,12122,12141,12160,12164,12175,12179,12198,12216,12220,12230,12234,12242],{"__ignoreMap":31},[142,12083,12084,12086,12088],{"class":144,"line":145},[142,12085,156],{"class":148},[142,12087,2001],{"class":1991},[142,12089,10882],{"class":152},[142,12091,12092],{"class":144,"line":64},[142,12093,2428],{"emptyLinePlaceholder":69},[142,12095,12096,12098,12100,12102,12104],{"class":144,"line":1208},[142,12097,2013],{"class":148},[142,12099,10898],{"class":152},[142,12101,198],{"class":148},[142,12103,2066],{"class":201},[142,12105,1319],{"class":152},[142,12107,12108,12110,12112,12114,12116],{"class":144,"line":1223},[142,12109,2013],{"class":148},[142,12111,10613],{"class":148},[142,12113,10974],{"class":152},[142,12115,198],{"class":148},[142,12117,1461],{"class":152},[142,12119,12120],{"class":144,"line":1229},[142,12121,2428],{"emptyLinePlaceholder":69},[142,12123,12124,12126,12128,12131,12133,12135,12137,12139],{"class":144,"line":1243},[142,12125,6558],{"class":152},[142,12127,1197],{"class":148},[142,12129,12130],{"class":257}," \"a = \"",[142,12132,1473],{"class":148},[142,12134,10898],{"class":152},[142,12136,1197],{"class":148},[142,12138,11498],{"class":152},[142,12140,7297],{"class":211},[142,12142,12143,12145,12147,12150,12152,12154,12156,12158],{"class":144,"line":1249},[142,12144,6558],{"class":152},[142,12146,1197],{"class":148},[142,12148,12149],{"class":257}," \"b = \"",[142,12151,1473],{"class":148},[142,12153,10911],{"class":152},[142,12155,1197],{"class":148},[142,12157,11498],{"class":152},[142,12159,7297],{"class":211},[142,12161,12162],{"class":144,"line":1340},[142,12163,2428],{"emptyLinePlaceholder":69},[142,12165,12166,12169,12171,12173],{"class":144,"line":1346},[142,12167,12168],{"class":152},"    b ",[142,12170,198],{"class":148},[142,12172,5783],{"class":201},[142,12174,1319],{"class":152},[142,12176,12177],{"class":144,"line":1358},[142,12178,2428],{"emptyLinePlaceholder":69},[142,12180,12181,12183,12185,12187,12189,12191,12193,12195],{"class":144,"line":1640},[142,12182,6558],{"class":152},[142,12184,1197],{"class":148},[142,12186,12130],{"class":257},[142,12188,1473],{"class":148},[142,12190,10898],{"class":152},[142,12192,1197],{"class":148},[142,12194,11498],{"class":152},[142,12196,12197],{"class":211},"\u002F\u002F100\n",[142,12199,12200,12202,12204,12206,12208,12210,12212,12214],{"class":144,"line":1645},[142,12201,6558],{"class":152},[142,12203,1197],{"class":148},[142,12205,12149],{"class":257},[142,12207,1473],{"class":148},[142,12209,10911],{"class":152},[142,12211,1197],{"class":148},[142,12213,11498],{"class":152},[142,12215,12197],{"class":211},[142,12217,12218],{"class":144,"line":1651},[142,12219,2428],{"emptyLinePlaceholder":69},[142,12221,12222,12224,12226,12228],{"class":144,"line":1656},[142,12223,2331],{"class":1991},[142,12225,153],{"class":152},[142,12227,2336],{"class":257},[142,12229,2747],{"class":152},[142,12231,12232],{"class":144,"line":1670},[142,12233,2428],{"emptyLinePlaceholder":69},[142,12235,12236,12238,12240],{"class":144,"line":1675},[142,12237,4118],{"class":148},[142,12239,4121],{"class":201},[142,12241,1319],{"class":152},[142,12243,12244],{"class":144,"line":1681},[142,12245,1593],{"class":152},[84,12247,12249],{"id":12248},"_62引用的注意事项","6.2引用的注意事项",[96,12251,12252],{},[99,12253,12254],{},"引用必须要初始化",[133,12256,12258],{"className":135,"code":12257,"language":137,"meta":31,"style":31},"int &b;\u002F\u002F非常错误！\n",[139,12259,12260],{"__ignoreMap":31},[142,12261,12262,12264,12266,12269],{"class":144,"line":145},[142,12263,156],{"class":148},[142,12265,10613],{"class":148},[142,12267,12268],{"class":152},"b;",[142,12270,12271],{"class":211},"\u002F\u002F非常错误！\n",[96,12273,12274],{"start":64},[99,12275,12276],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[133,12278,12280],{"className":135,"code":12279,"language":137,"meta":31,"style":31},"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",[139,12281,12282,12290,12302,12314,12322,12338,12351,12369,12387,12407,12417,12425],{"__ignoreMap":31},[142,12283,12284,12286,12288],{"class":144,"line":145},[142,12285,156],{"class":148},[142,12287,2001],{"class":1991},[142,12289,10882],{"class":152},[142,12291,12292,12294,12296,12298,12300],{"class":144,"line":64},[142,12293,2013],{"class":148},[142,12295,10898],{"class":152},[142,12297,198],{"class":148},[142,12299,2066],{"class":201},[142,12301,1319],{"class":152},[142,12303,12304,12306,12308,12310,12312],{"class":144,"line":1208},[142,12305,2013],{"class":148},[142,12307,10911],{"class":152},[142,12309,198],{"class":148},[142,12311,8979],{"class":201},[142,12313,1319],{"class":152},[142,12315,12316,12319],{"class":144,"line":1223},[142,12317,12318],{"class":211},"    \u002F\u002Fint &c;",[142,12320,12321],{"class":211}," \u002F\u002F错误，引用必须初始化\n",[142,12323,12324,12326,12328,12330,12332,12335],{"class":144,"line":1229},[142,12325,2013],{"class":148},[142,12327,10613],{"class":148},[142,12329,2974],{"class":152},[142,12331,198],{"class":148},[142,12333,12334],{"class":152}," a;",[142,12336,12337],{"class":211}," \u002F\u002F一旦初始化后，就不可以更改\n",[142,12339,12340,12343,12345,12348],{"class":144,"line":1243},[142,12341,12342],{"class":152},"    c ",[142,12344,198],{"class":148},[142,12346,12347],{"class":152}," b;",[142,12349,12350],{"class":211}," \u002F\u002F这是赋值操作，不是更改引用\n",[142,12352,12353,12355,12357,12359,12361,12363,12365,12367],{"class":144,"line":1249},[142,12354,6558],{"class":152},[142,12356,1197],{"class":148},[142,12358,12130],{"class":257},[142,12360,1473],{"class":148},[142,12362,10898],{"class":152},[142,12364,1197],{"class":148},[142,12366,11498],{"class":152},[142,12368,7282],{"class":211},[142,12370,12371,12373,12375,12377,12379,12381,12383,12385],{"class":144,"line":1340},[142,12372,6558],{"class":152},[142,12374,1197],{"class":148},[142,12376,12149],{"class":257},[142,12378,1473],{"class":148},[142,12380,10911],{"class":152},[142,12382,1197],{"class":148},[142,12384,11498],{"class":152},[142,12386,7282],{"class":211},[142,12388,12389,12391,12393,12396,12398,12401,12403,12405],{"class":144,"line":1346},[142,12390,6558],{"class":152},[142,12392,1197],{"class":148},[142,12394,12395],{"class":257}," \"c = \"",[142,12397,1473],{"class":148},[142,12399,12400],{"class":152}," c ",[142,12402,1197],{"class":148},[142,12404,11498],{"class":152},[142,12406,7282],{"class":211},[142,12408,12409,12411,12413,12415],{"class":144,"line":1358},[142,12410,2331],{"class":1991},[142,12412,153],{"class":152},[142,12414,2336],{"class":257},[142,12416,2747],{"class":152},[142,12418,12419,12421,12423],{"class":144,"line":1640},[142,12420,4118],{"class":148},[142,12422,4121],{"class":201},[142,12424,1319],{"class":152},[142,12426,12427],{"class":144,"line":1645},[142,12428,1593],{"class":152},[84,12430,12432],{"id":12431},"_63引用做函数参数","6.3引用做函数参数",[14,12434,12435],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12437,12438],{},"优点：可以简化指针修改实参",[133,12440,12442],{"className":135,"code":12441,"language":137,"meta":31,"style":31},"\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",[139,12443,12444,12449,12472,12483,12493,12502,12506,12510,12515,12537,12549,12561,12571,12575,12579,12584,12606,12616,12624,12632,12636,12640,12648,12652,12664,12676,12680,12691,12717,12721,12741,12765,12769,12779,12803,12807,12817,12821,12829],{"__ignoreMap":31},[142,12445,12446],{"class":144,"line":145},[142,12447,12448],{"class":211},"\u002F\u002F1. 值传递\n",[142,12450,12451,12453,12456,12458,12460,12462,12465,12467,12469],{"class":144,"line":64},[142,12452,5393],{"class":148},[142,12454,12455],{"class":1991}," mySwap01",[142,12457,153],{"class":152},[142,12459,156],{"class":148},[142,12461,1427],{"class":5245},[142,12463,12464],{"class":152},", ",[142,12466,156],{"class":148},[142,12468,2861],{"class":5245},[142,12470,12471],{"class":152},") {\n",[142,12473,12474,12476,12479,12481],{"class":144,"line":1208},[142,12475,2013],{"class":148},[142,12477,12478],{"class":152}," temp ",[142,12480,198],{"class":148},[142,12482,1461],{"class":152},[142,12484,12485,12488,12490],{"class":144,"line":1223},[142,12486,12487],{"class":152},"    a ",[142,12489,198],{"class":148},[142,12491,12492],{"class":152}," b;\n",[142,12494,12495,12497,12499],{"class":144,"line":1229},[142,12496,12168],{"class":152},[142,12498,198],{"class":148},[142,12500,12501],{"class":152}," temp;\n",[142,12503,12504],{"class":144,"line":1243},[142,12505,1593],{"class":152},[142,12507,12508],{"class":144,"line":1249},[142,12509,2428],{"emptyLinePlaceholder":69},[142,12511,12512],{"class":144,"line":1340},[142,12513,12514],{"class":211},"\u002F\u002F2. 地址传递\n",[142,12516,12517,12519,12522,12524,12527,12529,12531,12533,12535],{"class":144,"line":1346},[142,12518,5393],{"class":148},[142,12520,12521],{"class":1991}," mySwap02",[142,12523,153],{"class":152},[142,12525,12526],{"class":148},"int*",[142,12528,1427],{"class":5245},[142,12530,12464],{"class":152},[142,12532,12526],{"class":148},[142,12534,2861],{"class":5245},[142,12536,12471],{"class":152},[142,12538,12539,12541,12543,12545,12547],{"class":144,"line":1358},[142,12540,2013],{"class":148},[142,12542,12478],{"class":152},[142,12544,198],{"class":148},[142,12546,6547],{"class":148},[142,12548,6226],{"class":152},[142,12550,12551,12553,12555,12557,12559],{"class":144,"line":1640},[142,12552,6432],{"class":148},[142,12554,10948],{"class":152},[142,12556,198],{"class":148},[142,12558,6547],{"class":148},[142,12560,6098],{"class":152},[142,12562,12563,12565,12567,12569],{"class":144,"line":1645},[142,12564,6432],{"class":148},[142,12566,10974],{"class":152},[142,12568,198],{"class":148},[142,12570,12501],{"class":152},[142,12572,12573],{"class":144,"line":1651},[142,12574,1593],{"class":152},[142,12576,12577],{"class":144,"line":1656},[142,12578,2428],{"emptyLinePlaceholder":69},[142,12580,12581],{"class":144,"line":1670},[142,12582,12583],{"class":211},"\u002F\u002F3. 引用传递\n",[142,12585,12586,12588,12591,12593,12596,12598,12600,12602,12604],{"class":144,"line":1675},[142,12587,5393],{"class":148},[142,12589,12590],{"class":1991}," mySwap03",[142,12592,153],{"class":152},[142,12594,12595],{"class":148},"int&",[142,12597,1427],{"class":5245},[142,12599,12464],{"class":152},[142,12601,12595],{"class":148},[142,12603,2861],{"class":5245},[142,12605,12471],{"class":152},[142,12607,12608,12610,12612,12614],{"class":144,"line":1681},[142,12609,2013],{"class":148},[142,12611,12478],{"class":152},[142,12613,198],{"class":148},[142,12615,1461],{"class":152},[142,12617,12618,12620,12622],{"class":144,"line":1702},[142,12619,12487],{"class":152},[142,12621,198],{"class":148},[142,12623,12492],{"class":152},[142,12625,12626,12628,12630],{"class":144,"line":1707},[142,12627,12168],{"class":152},[142,12629,198],{"class":148},[142,12631,12501],{"class":152},[142,12633,12634],{"class":144,"line":1721},[142,12635,1593],{"class":152},[142,12637,12638],{"class":144,"line":1726},[142,12639,2428],{"emptyLinePlaceholder":69},[142,12641,12642,12644,12646],{"class":144,"line":1755},[142,12643,156],{"class":148},[142,12645,2001],{"class":1991},[142,12647,10882],{"class":152},[142,12649,12650],{"class":144,"line":1760},[142,12651,2428],{"emptyLinePlaceholder":69},[142,12653,12654,12656,12658,12660,12662],{"class":144,"line":1777},[142,12655,2013],{"class":148},[142,12657,10898],{"class":152},[142,12659,198],{"class":148},[142,12661,2066],{"class":201},[142,12663,1319],{"class":152},[142,12665,12666,12668,12670,12672,12674],{"class":144,"line":1782},[142,12667,2013],{"class":148},[142,12669,10911],{"class":152},[142,12671,198],{"class":148},[142,12673,8979],{"class":201},[142,12675,1319],{"class":152},[142,12677,12678],{"class":144,"line":1787},[142,12679,2428],{"emptyLinePlaceholder":69},[142,12681,12682,12685,12688],{"class":144,"line":1792},[142,12683,12684],{"class":1991},"    mySwap01",[142,12686,12687],{"class":152},"(a, b);",[142,12689,12690],{"class":211},"\u002F\u002F值传递，形参不会修饰实参\n",[142,12692,12693,12695,12697,12700,12702,12704,12706,12709,12711,12713,12715],{"class":144,"line":1806},[142,12694,6558],{"class":152},[142,12696,1197],{"class":148},[142,12698,12699],{"class":257}," \"a:\"",[142,12701,1473],{"class":148},[142,12703,10898],{"class":152},[142,12705,1197],{"class":148},[142,12707,12708],{"class":257}," \" b:\"",[142,12710,1473],{"class":148},[142,12712,10911],{"class":152},[142,12714,1197],{"class":148},[142,12716,8869],{"class":152},[142,12718,12719],{"class":144,"line":1811},[142,12720,2428],{"emptyLinePlaceholder":69},[142,12722,12723,12726,12728,12730,12733,12735,12738],{"class":144,"line":2605},[142,12724,12725],{"class":1991},"    mySwap02",[142,12727,153],{"class":152},[142,12729,506],{"class":148},[142,12731,12732],{"class":152},"a, ",[142,12734,506],{"class":148},[142,12736,12737],{"class":152},"b);",[142,12739,12740],{"class":211},"\u002F\u002F地址传递，形参会修饰实参\n",[142,12742,12743,12745,12747,12749,12751,12753,12755,12757,12759,12761,12763],{"class":144,"line":2619},[142,12744,6558],{"class":152},[142,12746,1197],{"class":148},[142,12748,12699],{"class":257},[142,12750,1473],{"class":148},[142,12752,10898],{"class":152},[142,12754,1197],{"class":148},[142,12756,12708],{"class":257},[142,12758,1473],{"class":148},[142,12760,10911],{"class":152},[142,12762,1197],{"class":148},[142,12764,8869],{"class":152},[142,12766,12767],{"class":144,"line":2627},[142,12768,2428],{"emptyLinePlaceholder":69},[142,12770,12771,12774,12776],{"class":144,"line":2632},[142,12772,12773],{"class":1991},"    mySwap03",[142,12775,12687],{"class":152},[142,12777,12778],{"class":211},"\u002F\u002F引用传递，形参会修饰实参\n",[142,12780,12781,12783,12785,12787,12789,12791,12793,12795,12797,12799,12801],{"class":144,"line":2638},[142,12782,6558],{"class":152},[142,12784,1197],{"class":148},[142,12786,12699],{"class":257},[142,12788,1473],{"class":148},[142,12790,10898],{"class":152},[142,12792,1197],{"class":148},[142,12794,12708],{"class":257},[142,12796,1473],{"class":148},[142,12798,10911],{"class":152},[142,12800,1197],{"class":148},[142,12802,8869],{"class":152},[142,12804,12805],{"class":144,"line":2644},[142,12806,2428],{"emptyLinePlaceholder":69},[142,12808,12809,12811,12813,12815],{"class":144,"line":2649},[142,12810,2331],{"class":1991},[142,12812,153],{"class":152},[142,12814,2336],{"class":257},[142,12816,2747],{"class":152},[142,12818,12819],{"class":144,"line":7977},[142,12820,2428],{"emptyLinePlaceholder":69},[142,12822,12823,12825,12827],{"class":144,"line":8001},[142,12824,4118],{"class":148},[142,12826,4121],{"class":201},[142,12828,1319],{"class":152},[142,12830,12831],{"class":144,"line":8006},[142,12832,1593],{"class":152},[84,12834,12836],{"id":12835},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12838,12839],{},"作用：引用是可以作为函数的返回值存在的",[14,12841,9054,12842],{},[302,12843,12844],{},"不要返回局部变量引用",[14,12846,12847],{},"用法：函数调用作为左值",[133,12849,12851],{"className":9970,"code":12850,"language":9972,"meta":31,"style":31},"\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",[139,12852,12853,12858,12866,12881,12887,12891,12895,12900,12908,12925,12931,12935,12939,12947,12951,12956,12970,12990,13009,13013,13018,13031,13051,13069,13073,13089,13093,13112,13130,13134,13144,13148,13156],{"__ignoreMap":31},[142,12854,12855],{"class":144,"line":145},[142,12856,12857],{"class":211},"\u002F\u002F返回局部变量引用\n",[142,12859,12860,12862,12864],{"class":144,"line":64},[142,12861,12595],{"class":148},[142,12863,5617],{"class":1991},[142,12865,10882],{"class":152},[142,12867,12868,12870,12872,12874,12876,12878],{"class":144,"line":1208},[142,12869,2013],{"class":148},[142,12871,10898],{"class":152},[142,12873,198],{"class":148},[142,12875,2066],{"class":201},[142,12877,208],{"class":152},[142,12879,12880],{"class":211}," \u002F\u002F局部变量\n",[142,12882,12883,12885],{"class":144,"line":1223},[142,12884,4118],{"class":148},[142,12886,1461],{"class":152},[142,12888,12889],{"class":144,"line":1229},[142,12890,1593],{"class":152},[142,12892,12893],{"class":144,"line":1243},[142,12894,2428],{"emptyLinePlaceholder":69},[142,12896,12897],{"class":144,"line":1249},[142,12898,12899],{"class":211},"\u002F\u002F返回静态变量引用\n",[142,12901,12902,12904,12906],{"class":144,"line":1340},[142,12903,12595],{"class":148},[142,12905,5686],{"class":1991},[142,12907,10882],{"class":152},[142,12909,12910,12912,12914,12916,12918,12920,12922],{"class":144,"line":1346},[142,12911,11049],{"class":148},[142,12913,2410],{"class":148},[142,12915,10898],{"class":152},[142,12917,198],{"class":148},[142,12919,8979],{"class":201},[142,12921,208],{"class":152},[142,12923,12924],{"class":211},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[142,12926,12927,12929],{"class":144,"line":1358},[142,12928,4118],{"class":148},[142,12930,1461],{"class":152},[142,12932,12933],{"class":144,"line":1640},[142,12934,1593],{"class":152},[142,12936,12937],{"class":144,"line":1645},[142,12938,2428],{"emptyLinePlaceholder":69},[142,12940,12941,12943,12945],{"class":144,"line":1651},[142,12942,156],{"class":148},[142,12944,2001],{"class":1991},[142,12946,10882],{"class":152},[142,12948,12949],{"class":144,"line":1656},[142,12950,2428],{"emptyLinePlaceholder":69},[142,12952,12953],{"class":144,"line":1670},[142,12954,12955],{"class":211},"    \u002F\u002F不能返回局部变量的引用\n",[142,12957,12958,12961,12964,12966,12968],{"class":144,"line":1675},[142,12959,12960],{"class":148},"    int&",[142,12962,12963],{"class":152}," ref ",[142,12965,198],{"class":148},[142,12967,5617],{"class":1991},[142,12969,5665],{"class":152},[142,12971,12972,12974,12976,12979,12981,12983,12985,12987],{"class":144,"line":1681},[142,12973,6558],{"class":152},[142,12975,1197],{"class":148},[142,12977,12978],{"class":257}," \"ref = \"",[142,12980,1473],{"class":148},[142,12982,12963],{"class":152},[142,12984,1197],{"class":148},[142,12986,11498],{"class":152},[142,12988,12989],{"class":211},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[142,12991,12992,12994,12996,12998,13000,13002,13004,13006],{"class":144,"line":1702},[142,12993,6558],{"class":152},[142,12995,1197],{"class":148},[142,12997,12978],{"class":257},[142,12999,1473],{"class":148},[142,13001,12963],{"class":152},[142,13003,1197],{"class":148},[142,13005,11498],{"class":152},[142,13007,13008],{"class":211},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[142,13010,13011],{"class":144,"line":1707},[142,13012,2428],{"emptyLinePlaceholder":69},[142,13014,13015],{"class":144,"line":1721},[142,13016,13017],{"class":211},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[142,13019,13020,13022,13025,13027,13029],{"class":144,"line":1726},[142,13021,12960],{"class":148},[142,13023,13024],{"class":152}," ref2 ",[142,13026,198],{"class":148},[142,13028,5686],{"class":1991},[142,13030,5665],{"class":152},[142,13032,13033,13035,13037,13040,13042,13044,13046,13048],{"class":144,"line":1755},[142,13034,6558],{"class":152},[142,13036,1197],{"class":148},[142,13038,13039],{"class":257}," \"ref2 = \"",[142,13041,1473],{"class":148},[142,13043,13024],{"class":152},[142,13045,1197],{"class":148},[142,13047,11498],{"class":152},[142,13049,13050],{"class":211}," \u002F\u002F20\n",[142,13052,13053,13055,13057,13059,13061,13063,13065,13067],{"class":144,"line":1760},[142,13054,6558],{"class":152},[142,13056,1197],{"class":148},[142,13058,13039],{"class":257},[142,13060,1473],{"class":148},[142,13062,13024],{"class":152},[142,13064,1197],{"class":148},[142,13066,11498],{"class":152},[142,13068,13050],{"class":211},[142,13070,13071],{"class":144,"line":1777},[142,13072,2428],{"emptyLinePlaceholder":69},[142,13074,13075,13077,13080,13082,13084,13086],{"class":144,"line":1782},[142,13076,5731],{"class":1991},[142,13078,13079],{"class":152},"() ",[142,13081,198],{"class":148},[142,13083,3027],{"class":201},[142,13085,208],{"class":152},[142,13087,13088],{"class":211},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[142,13090,13091],{"class":144,"line":1787},[142,13092,2428],{"emptyLinePlaceholder":69},[142,13094,13095,13097,13099,13101,13103,13105,13107,13109],{"class":144,"line":1792},[142,13096,6558],{"class":152},[142,13098,1197],{"class":148},[142,13100,13039],{"class":257},[142,13102,1473],{"class":148},[142,13104,13024],{"class":152},[142,13106,1197],{"class":148},[142,13108,11498],{"class":152},[142,13110,13111],{"class":211}," \u002F\u002F1000\n",[142,13113,13114,13116,13118,13120,13122,13124,13126,13128],{"class":144,"line":1806},[142,13115,6558],{"class":152},[142,13117,1197],{"class":148},[142,13119,13039],{"class":257},[142,13121,1473],{"class":148},[142,13123,13024],{"class":152},[142,13125,1197],{"class":148},[142,13127,11498],{"class":152},[142,13129,13111],{"class":211},[142,13131,13132],{"class":144,"line":1811},[142,13133,2428],{"emptyLinePlaceholder":69},[142,13135,13136,13138,13140,13142],{"class":144,"line":2605},[142,13137,2331],{"class":1991},[142,13139,153],{"class":152},[142,13141,2336],{"class":257},[142,13143,2747],{"class":152},[142,13145,13146],{"class":144,"line":2619},[142,13147,2428],{"emptyLinePlaceholder":69},[142,13149,13150,13152,13154],{"class":144,"line":2627},[142,13151,4118],{"class":148},[142,13153,4121],{"class":201},[142,13155,1319],{"class":152},[142,13157,13158],{"class":144,"line":2632},[142,13159,1593],{"class":152},[84,13161,13163],{"id":13162},"_65引用的本质","6.5引用的本质",[14,13165,13166,13167],{},"本质：",[302,13168,13169],{},"引用的本质在c++内部实现是一个指针常量.",[133,13171,13173],{"className":135,"code":13172,"language":137,"meta":31,"style":31},"\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",[139,13174,13175,13180,13196,13210,13214,13223,13235,13240,13245,13256,13269,13273,13289,13306,13310,13318,13326],{"__ignoreMap":31},[142,13176,13177],{"class":144,"line":145},[142,13178,13179],{"class":211},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[142,13181,13182,13184,13186,13188,13190,13193],{"class":144,"line":64},[142,13183,5393],{"class":148},[142,13185,11414],{"class":1991},[142,13187,153],{"class":152},[142,13189,12595],{"class":148},[142,13191,13192],{"class":5245}," ref",[142,13194,13195],{"class":152},"){\n",[142,13197,13198,13201,13203,13205,13207],{"class":144,"line":1208},[142,13199,13200],{"class":152},"    ref ",[142,13202,198],{"class":148},[142,13204,5783],{"class":201},[142,13206,208],{"class":152},[142,13208,13209],{"class":211}," \u002F\u002F ref是引用，转换为*ref = 100\n",[142,13211,13212],{"class":144,"line":1223},[142,13213,1593],{"class":152},[142,13215,13216,13218,13220],{"class":144,"line":1229},[142,13217,156],{"class":148},[142,13219,2001],{"class":1991},[142,13221,13222],{"class":152},"(){\n",[142,13224,13225,13227,13229,13231,13233],{"class":144,"line":1243},[142,13226,2013],{"class":148},[142,13228,10898],{"class":152},[142,13230,198],{"class":148},[142,13232,2066],{"class":201},[142,13234,1319],{"class":152},[142,13236,13237],{"class":144,"line":1249},[142,13238,13239],{"class":152},"    \n",[142,13241,13242],{"class":144,"line":1340},[142,13243,13244],{"class":211},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[142,13246,13247,13249,13251,13253],{"class":144,"line":1346},[142,13248,12960],{"class":148},[142,13250,12963],{"class":152},[142,13252,198],{"class":148},[142,13254,13255],{"class":152}," a; \n",[142,13257,13258,13260,13262,13264,13266],{"class":144,"line":1358},[142,13259,13200],{"class":152},[142,13261,198],{"class":148},[142,13263,8979],{"class":201},[142,13265,208],{"class":152},[142,13267,13268],{"class":211}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[142,13270,13271],{"class":144,"line":1640},[142,13272,13239],{"class":152},[142,13274,13275,13277,13279,13281,13283,13285,13287],{"class":144,"line":1645},[142,13276,6558],{"class":152},[142,13278,1197],{"class":148},[142,13280,12699],{"class":257},[142,13282,1473],{"class":148},[142,13284,10898],{"class":152},[142,13286,1197],{"class":148},[142,13288,8869],{"class":152},[142,13290,13291,13293,13295,13298,13300,13302,13304],{"class":144,"line":1651},[142,13292,6558],{"class":152},[142,13294,1197],{"class":148},[142,13296,13297],{"class":257}," \"ref:\"",[142,13299,1473],{"class":148},[142,13301,12963],{"class":152},[142,13303,1197],{"class":148},[142,13305,8869],{"class":152},[142,13307,13308],{"class":144,"line":1656},[142,13309,13239],{"class":152},[142,13311,13312,13315],{"class":144,"line":1670},[142,13313,13314],{"class":1991},"    func",[142,13316,13317],{"class":152},"(a);\n",[142,13319,13320,13322,13324],{"class":144,"line":1675},[142,13321,4118],{"class":148},[142,13323,4121],{"class":201},[142,13325,1319],{"class":152},[142,13327,13328],{"class":144,"line":1681},[142,13329,1593],{"class":152},[14,13331,11361],{},[96,13333,13334,13337],{},[99,13335,13336],{},"引用的本质，就是一个指针常量",[99,13338,13339],{},"引用一旦初始化，就不可以发生改变",[84,13341,13343],{"id":13342},"_66常量引用","6.6常量引用",[14,13345,13346],{},"作用：常量引用主要用来修饰形参",[14,13348,13349,13350,13353],{},"在函数形参列表中，可以加",[302,13351,13352],{},"const修饰形参","，防止形参改变实参",[133,13355,13357],{"className":135,"code":13356,"language":137,"meta":31,"style":31},"\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",[139,13358,13359,13364,13369,13388,13393,13406,13410,13414,13422,13426,13431,13436,13450,13454,13462,13474,13478,13483,13495,13502,13506,13516,13520,13528],{"__ignoreMap":31},[142,13360,13361],{"class":144,"line":145},[142,13362,13363],{"class":211},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[142,13365,13366],{"class":144,"line":64},[142,13367,13368],{"class":211},"\u002F\u002F加上const就不能修改实参的\n",[142,13370,13371,13373,13376,13378,13380,13383,13386],{"class":144,"line":1208},[142,13372,5393],{"class":148},[142,13374,13375],{"class":1991}," showValue",[142,13377,153],{"class":152},[142,13379,6821],{"class":148},[142,13381,13382],{"class":148}," int&",[142,13384,13385],{"class":5245}," v",[142,13387,12471],{"class":152},[142,13389,13390],{"class":144,"line":1223},[142,13391,13392],{"class":211},"    \u002F\u002Fv += 100;\n",[142,13394,13395,13397,13399,13402,13404],{"class":144,"line":1229},[142,13396,6558],{"class":152},[142,13398,1197],{"class":148},[142,13400,13401],{"class":152}," v ",[142,13403,1197],{"class":148},[142,13405,8869],{"class":152},[142,13407,13408],{"class":144,"line":1243},[142,13409,1593],{"class":152},[142,13411,13412],{"class":144,"line":1249},[142,13413,2428],{"emptyLinePlaceholder":69},[142,13415,13416,13418,13420],{"class":144,"line":1340},[142,13417,156],{"class":148},[142,13419,2001],{"class":1991},[142,13421,10882],{"class":152},[142,13423,13424],{"class":144,"line":1346},[142,13425,2428],{"emptyLinePlaceholder":69},[142,13427,13428],{"class":144,"line":1358},[142,13429,13430],{"class":211},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[142,13432,13433],{"class":144,"line":1640},[142,13434,13435],{"class":211},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[142,13437,13438,13440,13442,13444,13446,13448],{"class":144,"line":1645},[142,13439,11250],{"class":148},[142,13441,13382],{"class":148},[142,13443,12963],{"class":152},[142,13445,198],{"class":148},[142,13447,2066],{"class":201},[142,13449,1319],{"class":152},[142,13451,13452],{"class":144,"line":1651},[142,13453,2428],{"emptyLinePlaceholder":69},[142,13455,13456,13459],{"class":144,"line":1656},[142,13457,13458],{"class":211},"    \u002F\u002Fref = 100;",[142,13460,13461],{"class":211},"  \u002F\u002F加入const后不可以修改变量\n",[142,13463,13464,13466,13468,13470,13472],{"class":144,"line":1670},[142,13465,6558],{"class":152},[142,13467,1197],{"class":148},[142,13469,12963],{"class":152},[142,13471,1197],{"class":148},[142,13473,8869],{"class":152},[142,13475,13476],{"class":144,"line":1675},[142,13477,2428],{"emptyLinePlaceholder":69},[142,13479,13480],{"class":144,"line":1681},[142,13481,13482],{"class":211},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[142,13484,13485,13487,13489,13491,13493],{"class":144,"line":1702},[142,13486,2013],{"class":148},[142,13488,10898],{"class":152},[142,13490,198],{"class":148},[142,13492,2066],{"class":201},[142,13494,1319],{"class":152},[142,13496,13497,13500],{"class":144,"line":1707},[142,13498,13499],{"class":1991},"    showValue",[142,13501,13317],{"class":152},[142,13503,13504],{"class":144,"line":1721},[142,13505,2428],{"emptyLinePlaceholder":69},[142,13507,13508,13510,13512,13514],{"class":144,"line":1726},[142,13509,2331],{"class":1991},[142,13511,153],{"class":152},[142,13513,2336],{"class":257},[142,13515,2747],{"class":152},[142,13517,13518],{"class":144,"line":1755},[142,13519,2428],{"emptyLinePlaceholder":69},[142,13521,13522,13524,13526],{"class":144,"line":1760},[142,13523,4118],{"class":148},[142,13525,4121],{"class":201},[142,13527,1319],{"class":152},[142,13529,13530],{"class":144,"line":1777},[142,13531,1593],{"class":152},[5155,13533,13534],{},"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":31,"searchDepth":64,"depth":64,"links":13536},[13537,13538,13539,13540,13541,13542],{"id":12069,"depth":64,"text":12070},{"id":12248,"depth":64,"text":12249},{"id":12431,"depth":64,"text":12432},{"id":12835,"depth":64,"text":12836},{"id":13162,"depth":64,"text":13163},{"id":13342,"depth":64,"text":13343},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12061,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13549,"title":13550,"body":13551,"description":31,"extension":67,"meta":14632,"navigation":69,"path":14633,"seo":14634,"stem":14635,"__hash__":14636},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13552,"toc":14624},[13553,13556,13560,13563,13568,13800,13802,13813,13817,13820,13828,13932,13935,13939,13942,13946,13949,13954,13976,13982,14309,14312,14316,14324,14621],[10,13554,13550],{"id":13555},"_7函数高级部分",[84,13557,13559],{"id":13558},"_71函数默认参数","7.1函数默认参数",[14,13561,13562],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13564,5210,13565],{},[139,13566,13567],{}," 返回值类型  函数名 （参数= 默认值）{}",[133,13569,13571],{"className":135,"code":13570,"language":137,"meta":31,"style":31},"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",[139,13572,13573,13608,13623,13627,13631,13636,13641,13670,13690,13700,13704,13708,13716,13720,13748,13770,13774,13784,13788,13796],{"__ignoreMap":31},[142,13574,13575,13577,13579,13581,13583,13585,13587,13589,13591,13594,13596,13598,13600,13602,13604,13606],{"class":144,"line":145},[142,13576,156],{"class":148},[142,13578,11414],{"class":1991},[142,13580,153],{"class":152},[142,13582,156],{"class":148},[142,13584,1427],{"class":5245},[142,13586,12464],{"class":152},[142,13588,156],{"class":148},[142,13590,2861],{"class":5245},[142,13592,13593],{"class":148}," =",[142,13595,2066],{"class":201},[142,13597,12464],{"class":152},[142,13599,156],{"class":148},[142,13601,2877],{"class":5245},[142,13603,13593],{"class":148},[142,13605,2066],{"class":201},[142,13607,12471],{"class":152},[142,13609,13610,13612,13614,13616,13618,13620],{"class":144,"line":64},[142,13611,4118],{"class":148},[142,13613,10898],{"class":152},[142,13615,634],{"class":148},[142,13617,10911],{"class":152},[142,13619,634],{"class":148},[142,13621,13622],{"class":152}," c;\n",[142,13624,13625],{"class":144,"line":1208},[142,13626,1593],{"class":152},[142,13628,13629],{"class":144,"line":1223},[142,13630,2428],{"emptyLinePlaceholder":69},[142,13632,13633],{"class":144,"line":1229},[142,13634,13635],{"class":211},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[142,13637,13638],{"class":144,"line":1243},[142,13639,13640],{"class":211},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[142,13642,13643,13645,13648,13650,13652,13654,13656,13658,13660,13662,13664,13666,13668],{"class":144,"line":1249},[142,13644,156],{"class":148},[142,13646,13647],{"class":1991}," func2",[142,13649,153],{"class":152},[142,13651,156],{"class":148},[142,13653,1427],{"class":5245},[142,13655,13593],{"class":148},[142,13657,2066],{"class":201},[142,13659,12464],{"class":152},[142,13661,156],{"class":148},[142,13663,2861],{"class":5245},[142,13665,13593],{"class":148},[142,13667,2066],{"class":201},[142,13669,2747],{"class":152},[142,13671,13672,13674,13676,13678,13680,13682,13684,13686,13688],{"class":144,"line":1340},[142,13673,156],{"class":148},[142,13675,13647],{"class":1991},[142,13677,153],{"class":152},[142,13679,156],{"class":148},[142,13681,1427],{"class":5245},[142,13683,12464],{"class":152},[142,13685,156],{"class":148},[142,13687,2861],{"class":5245},[142,13689,12471],{"class":152},[142,13691,13692,13694,13696,13698],{"class":144,"line":1346},[142,13693,4118],{"class":148},[142,13695,10898],{"class":152},[142,13697,634],{"class":148},[142,13699,12492],{"class":152},[142,13701,13702],{"class":144,"line":1358},[142,13703,1593],{"class":152},[142,13705,13706],{"class":144,"line":1640},[142,13707,2428],{"emptyLinePlaceholder":69},[142,13709,13710,13712,13714],{"class":144,"line":1645},[142,13711,156],{"class":148},[142,13713,2001],{"class":1991},[142,13715,10882],{"class":152},[142,13717,13718],{"class":144,"line":1651},[142,13719,2428],{"emptyLinePlaceholder":69},[142,13721,13722,13724,13726,13729,13731,13733,13735,13737,13739,13741,13744,13746],{"class":144,"line":1656},[142,13723,6558],{"class":152},[142,13725,1197],{"class":148},[142,13727,13728],{"class":257}," \"ret = \"",[142,13730,1473],{"class":148},[142,13732,11414],{"class":1991},[142,13734,153],{"class":152},[142,13736,853],{"class":201},[142,13738,12464],{"class":152},[142,13740,853],{"class":201},[142,13742,13743],{"class":152},") ",[142,13745,1197],{"class":148},[142,13747,8869],{"class":152},[142,13749,13750,13752,13754,13756,13758,13760,13762,13764,13766,13768],{"class":144,"line":1670},[142,13751,6558],{"class":152},[142,13753,1197],{"class":148},[142,13755,13728],{"class":257},[142,13757,1473],{"class":148},[142,13759,11414],{"class":1991},[142,13761,153],{"class":152},[142,13763,464],{"class":201},[142,13765,13743],{"class":152},[142,13767,1197],{"class":148},[142,13769,8869],{"class":152},[142,13771,13772],{"class":144,"line":1675},[142,13773,2428],{"emptyLinePlaceholder":69},[142,13775,13776,13778,13780,13782],{"class":144,"line":1681},[142,13777,2331],{"class":1991},[142,13779,153],{"class":152},[142,13781,2336],{"class":257},[142,13783,2747],{"class":152},[142,13785,13786],{"class":144,"line":1702},[142,13787,2428],{"emptyLinePlaceholder":69},[142,13789,13790,13792,13794],{"class":144,"line":1707},[142,13791,4118],{"class":148},[142,13793,4121],{"class":201},[142,13795,1319],{"class":152},[142,13797,13798],{"class":144,"line":1721},[142,13799,1593],{"class":152},[14,13801,11361],{},[96,13803,13804,13807,13810],{},[99,13805,13806],{},"我传就用我；没传就用你",[99,13808,13809],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[99,13811,13812],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[84,13814,13816],{"id":13815},"_72函数的占位参数","7.2函数的占位参数",[14,13818,13819],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13821,13822,13824,13825],{},[302,13823,5210],{}," ",[139,13826,13827],{},"返回值类型 函数名 (数据类型){}",[133,13829,13831],{"className":135,"code":13830,"language":137,"meta":31,"style":31},"\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",[139,13832,13833,13838,13856,13869,13873,13881,13885,13902,13906,13916,13920,13928],{"__ignoreMap":31},[142,13834,13835],{"class":144,"line":145},[142,13836,13837],{"class":211},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[142,13839,13840,13842,13844,13846,13848,13850,13852,13854],{"class":144,"line":64},[142,13841,5393],{"class":148},[142,13843,11414],{"class":1991},[142,13845,153],{"class":152},[142,13847,156],{"class":148},[142,13849,1427],{"class":5245},[142,13851,12464],{"class":152},[142,13853,156],{"class":148},[142,13855,12471],{"class":152},[142,13857,13858,13860,13862,13865,13867],{"class":144,"line":1208},[142,13859,6558],{"class":152},[142,13861,1197],{"class":148},[142,13863,13864],{"class":257}," \"this is func\"",[142,13866,1473],{"class":148},[142,13868,8869],{"class":152},[142,13870,13871],{"class":144,"line":1223},[142,13872,1593],{"class":152},[142,13874,13875,13877,13879],{"class":144,"line":1229},[142,13876,156],{"class":148},[142,13878,2001],{"class":1991},[142,13880,10882],{"class":152},[142,13882,13883],{"class":144,"line":1243},[142,13884,2428],{"emptyLinePlaceholder":69},[142,13886,13887,13889,13891,13893,13895,13897,13899],{"class":144,"line":1249},[142,13888,13314],{"class":1991},[142,13890,153],{"class":152},[142,13892,599],{"class":201},[142,13894,531],{"class":152},[142,13896,599],{"class":201},[142,13898,5995],{"class":152},[142,13900,13901],{"class":211}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[142,13903,13904],{"class":144,"line":1340},[142,13905,2428],{"emptyLinePlaceholder":69},[142,13907,13908,13910,13912,13914],{"class":144,"line":1346},[142,13909,2331],{"class":1991},[142,13911,153],{"class":152},[142,13913,2336],{"class":257},[142,13915,2747],{"class":152},[142,13917,13918],{"class":144,"line":1358},[142,13919,2428],{"emptyLinePlaceholder":69},[142,13921,13922,13924,13926],{"class":144,"line":1640},[142,13923,4118],{"class":148},[142,13925,4121],{"class":201},[142,13927,1319],{"class":152},[142,13929,13930],{"class":144,"line":1645},[142,13931,1593],{"class":152},[14,13933,13934],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[84,13936,13938],{"id":13937},"_73函数重载","7.3函数重载",[14,13940,13941],{},"意思是函数名是可以相同的",[113,13943,13945],{"id":13944},"_731基本语法","7.3.1基本语法",[14,13947,13948],{},"作用：函数名可以相同，提高复用性",[14,13950,13951],{},[302,13952,13953],{},"函数重载满足条件：",[1160,13955,13956,13959,13962],{},[99,13957,13958],{},"同一个作用域下",[99,13960,13961],{},"函数名称相同",[99,13963,13964,13965,13968,13969,13972,13973],{},"函数参数",[302,13966,13967],{},"类型不同","  或者 ",[302,13970,13971],{},"个数不同"," 或者 ",[302,13974,13975],{},"顺序不同",[14,13977,13978,13981],{},[302,13979,13980],{},"注意:","  函数的返回值不可以作为函数重载的条件",[133,13983,13985],{"className":9970,"code":13984,"language":9972,"meta":31,"style":31},"\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",[139,13986,13987,13992,14000,14004,14017,14021,14035,14039,14052,14056,14071,14075,14088,14092,14113,14117,14130,14134,14154,14158,14171,14175,14179,14184,14189,14194,14199,14204,14208,14212,14220,14224,14230,14240,14250,14264,14279,14283,14293,14297,14305],{"__ignoreMap":31},[142,13988,13989],{"class":144,"line":145},[142,13990,13991],{"class":211},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[142,13993,13994,13996,13998],{"class":144,"line":64},[142,13995,5393],{"class":148},[142,13997,11414],{"class":1991},[142,13999,2004],{"class":152},[142,14001,14002],{"class":144,"line":1208},[142,14003,1574],{"class":152},[142,14005,14006,14008,14010,14013,14015],{"class":144,"line":1223},[142,14007,6558],{"class":152},[142,14009,1197],{"class":148},[142,14011,14012],{"class":257}," \"func 的调用！\"",[142,14014,1473],{"class":148},[142,14016,8869],{"class":152},[142,14018,14019],{"class":144,"line":1229},[142,14020,1593],{"class":152},[142,14022,14023,14025,14027,14029,14031,14033],{"class":144,"line":1243},[142,14024,5393],{"class":148},[142,14026,11414],{"class":1991},[142,14028,153],{"class":152},[142,14030,156],{"class":148},[142,14032,1427],{"class":5245},[142,14034,159],{"class":152},[142,14036,14037],{"class":144,"line":1249},[142,14038,1574],{"class":152},[142,14040,14041,14043,14045,14048,14050],{"class":144,"line":1340},[142,14042,6558],{"class":152},[142,14044,1197],{"class":148},[142,14046,14047],{"class":257}," \"func (int a) 的调用！\"",[142,14049,1473],{"class":148},[142,14051,8869],{"class":152},[142,14053,14054],{"class":144,"line":1346},[142,14055,1593],{"class":152},[142,14057,14058,14060,14062,14064,14067,14069],{"class":144,"line":1358},[142,14059,5393],{"class":148},[142,14061,11414],{"class":1991},[142,14063,153],{"class":152},[142,14065,14066],{"class":148},"double",[142,14068,1427],{"class":5245},[142,14070,159],{"class":152},[142,14072,14073],{"class":144,"line":1640},[142,14074,1574],{"class":152},[142,14076,14077,14079,14081,14084,14086],{"class":144,"line":1645},[142,14078,6558],{"class":152},[142,14080,1197],{"class":148},[142,14082,14083],{"class":257}," \"func (double a)的调用！\"",[142,14085,1473],{"class":148},[142,14087,8869],{"class":152},[142,14089,14090],{"class":144,"line":1651},[142,14091,1593],{"class":152},[142,14093,14094,14096,14098,14100,14102,14104,14107,14109,14111],{"class":144,"line":1656},[142,14095,5393],{"class":148},[142,14097,11414],{"class":1991},[142,14099,153],{"class":152},[142,14101,156],{"class":148},[142,14103,1427],{"class":5245},[142,14105,14106],{"class":152}," ,",[142,14108,14066],{"class":148},[142,14110,2861],{"class":5245},[142,14112,159],{"class":152},[142,14114,14115],{"class":144,"line":1670},[142,14116,1574],{"class":152},[142,14118,14119,14121,14123,14126,14128],{"class":144,"line":1675},[142,14120,6558],{"class":152},[142,14122,1197],{"class":148},[142,14124,14125],{"class":257}," \"func (int a ,double b) 的调用！\"",[142,14127,1473],{"class":148},[142,14129,8869],{"class":152},[142,14131,14132],{"class":144,"line":1681},[142,14133,1593],{"class":152},[142,14135,14136,14138,14140,14142,14144,14146,14148,14150,14152],{"class":144,"line":1702},[142,14137,5393],{"class":148},[142,14139,11414],{"class":1991},[142,14141,153],{"class":152},[142,14143,14066],{"class":148},[142,14145,1427],{"class":5245},[142,14147,14106],{"class":152},[142,14149,156],{"class":148},[142,14151,2861],{"class":5245},[142,14153,159],{"class":152},[142,14155,14156],{"class":144,"line":1707},[142,14157,1574],{"class":152},[142,14159,14160,14162,14164,14167,14169],{"class":144,"line":1721},[142,14161,6558],{"class":152},[142,14163,1197],{"class":148},[142,14165,14166],{"class":257}," \"func (double a ,int b)的调用！\"",[142,14168,1473],{"class":148},[142,14170,8869],{"class":152},[142,14172,14173],{"class":144,"line":1726},[142,14174,1593],{"class":152},[142,14176,14177],{"class":144,"line":1755},[142,14178,2428],{"emptyLinePlaceholder":69},[142,14180,14181],{"class":144,"line":1760},[142,14182,14183],{"class":211},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[142,14185,14186],{"class":144,"line":1777},[142,14187,14188],{"class":211},"\u002F\u002Fint func(double a, int b)\n",[142,14190,14191],{"class":144,"line":1782},[142,14192,14193],{"class":211},"\u002F\u002F{\n",[142,14195,14196],{"class":144,"line":1787},[142,14197,14198],{"class":211},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[142,14200,14201],{"class":144,"line":1792},[142,14202,14203],{"class":211},"\u002F\u002F}\n",[142,14205,14206],{"class":144,"line":1806},[142,14207,2428],{"emptyLinePlaceholder":69},[142,14209,14210],{"class":144,"line":1811},[142,14211,2428],{"emptyLinePlaceholder":69},[142,14213,14214,14216,14218],{"class":144,"line":2605},[142,14215,156],{"class":148},[142,14217,2001],{"class":1991},[142,14219,10882],{"class":152},[142,14221,14222],{"class":144,"line":2619},[142,14223,2428],{"emptyLinePlaceholder":69},[142,14225,14226,14228],{"class":144,"line":2627},[142,14227,13314],{"class":1991},[142,14229,5665],{"class":152},[142,14231,14232,14234,14236,14238],{"class":144,"line":2632},[142,14233,13314],{"class":1991},[142,14235,153],{"class":152},[142,14237,599],{"class":201},[142,14239,2747],{"class":152},[142,14241,14242,14244,14246,14248],{"class":144,"line":2638},[142,14243,13314],{"class":1991},[142,14245,153],{"class":152},[142,14247,202],{"class":201},[142,14249,2747],{"class":152},[142,14251,14252,14254,14256,14258,14260,14262],{"class":144,"line":2644},[142,14253,13314],{"class":1991},[142,14255,153],{"class":152},[142,14257,599],{"class":201},[142,14259,531],{"class":152},[142,14261,202],{"class":201},[142,14263,2747],{"class":152},[142,14265,14266,14268,14270,14272,14275,14277],{"class":144,"line":2649},[142,14267,13314],{"class":1991},[142,14269,153],{"class":152},[142,14271,202],{"class":201},[142,14273,14274],{"class":152}," , ",[142,14276,599],{"class":201},[142,14278,2747],{"class":152},[142,14280,14281],{"class":144,"line":7977},[142,14282,13239],{"class":152},[142,14284,14285,14287,14289,14291],{"class":144,"line":8001},[142,14286,2331],{"class":1991},[142,14288,153],{"class":152},[142,14290,2336],{"class":257},[142,14292,2747],{"class":152},[142,14294,14295],{"class":144,"line":8006},[142,14296,2428],{"emptyLinePlaceholder":69},[142,14298,14299,14301,14303],{"class":144,"line":8012},[142,14300,4118],{"class":148},[142,14302,4121],{"class":201},[142,14304,1319],{"class":152},[142,14306,14307],{"class":144,"line":8039},[142,14308,1593],{"class":152},[14,14310,14311],{},"重点：函数返回值不可以作为函数重载条件！",[113,14313,14315],{"id":14314},"_732注意事项","7.3.2注意事项",[1160,14317,14318,14321],{},[99,14319,14320],{},"引用作为重载条件!!!",[99,14322,14323],{},"函数重载碰到函数默认参数",[133,14325,14327],{"className":135,"code":14326,"language":137,"meta":31,"style":31},"\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",[139,14328,14329,14334,14339,14343,14359,14363,14376,14380,14384,14402,14406,14419,14423,14427,14431,14436,14440,14464,14468,14481,14485,14489,14503,14507,14520,14524,14528,14536,14540,14552,14562,14575,14579,14583,14591,14595,14605,14609,14617],{"__ignoreMap":31},[142,14330,14331],{"class":144,"line":145},[142,14332,14333],{"class":211},"\u002F\u002F函数重载注意事项\n",[142,14335,14336],{"class":144,"line":64},[142,14337,14338],{"class":211},"\u002F\u002F1、引用作为重载条件\n",[142,14340,14341],{"class":144,"line":1208},[142,14342,2428],{"emptyLinePlaceholder":69},[142,14344,14345,14347,14349,14351,14353,14355,14357],{"class":144,"line":1223},[142,14346,5393],{"class":148},[142,14348,11414],{"class":1991},[142,14350,153],{"class":152},[142,14352,156],{"class":148},[142,14354,10613],{"class":148},[142,14356,391],{"class":5245},[142,14358,159],{"class":152},[142,14360,14361],{"class":144,"line":1229},[142,14362,1574],{"class":152},[142,14364,14365,14367,14369,14372,14374],{"class":144,"line":1243},[142,14366,6558],{"class":152},[142,14368,1197],{"class":148},[142,14370,14371],{"class":257}," \"func (int &a) 调用 \"",[142,14373,1473],{"class":148},[142,14375,8869],{"class":152},[142,14377,14378],{"class":144,"line":1249},[142,14379,1593],{"class":152},[142,14381,14382],{"class":144,"line":1340},[142,14383,2428],{"emptyLinePlaceholder":69},[142,14385,14386,14388,14390,14392,14394,14396,14398,14400],{"class":144,"line":1346},[142,14387,5393],{"class":148},[142,14389,11414],{"class":1991},[142,14391,153],{"class":152},[142,14393,6821],{"class":148},[142,14395,2410],{"class":148},[142,14397,10613],{"class":148},[142,14399,391],{"class":5245},[142,14401,159],{"class":152},[142,14403,14404],{"class":144,"line":1358},[142,14405,1574],{"class":152},[142,14407,14408,14410,14412,14415,14417],{"class":144,"line":1640},[142,14409,6558],{"class":152},[142,14411,1197],{"class":148},[142,14413,14414],{"class":257}," \"func (const int &a) 调用 \"",[142,14416,1473],{"class":148},[142,14418,8869],{"class":152},[142,14420,14421],{"class":144,"line":1645},[142,14422,1593],{"class":152},[142,14424,14425],{"class":144,"line":1651},[142,14426,2428],{"emptyLinePlaceholder":69},[142,14428,14429],{"class":144,"line":1656},[142,14430,2428],{"emptyLinePlaceholder":69},[142,14432,14433],{"class":144,"line":1670},[142,14434,14435],{"class":211},"\u002F\u002F2、函数重载碰到函数默认参数\n",[142,14437,14438],{"class":144,"line":1675},[142,14439,2428],{"emptyLinePlaceholder":69},[142,14441,14442,14444,14446,14448,14450,14452,14454,14456,14458,14460,14462],{"class":144,"line":1681},[142,14443,5393],{"class":148},[142,14445,13647],{"class":1991},[142,14447,153],{"class":152},[142,14449,156],{"class":148},[142,14451,1427],{"class":5245},[142,14453,12464],{"class":152},[142,14455,156],{"class":148},[142,14457,2861],{"class":5245},[142,14459,13593],{"class":148},[142,14461,2066],{"class":201},[142,14463,159],{"class":152},[142,14465,14466],{"class":144,"line":1702},[142,14467,1574],{"class":152},[142,14469,14470,14472,14474,14477,14479],{"class":144,"line":1707},[142,14471,6558],{"class":152},[142,14473,1197],{"class":148},[142,14475,14476],{"class":257}," \"func2(int a, int b = 10) 调用\"",[142,14478,1473],{"class":148},[142,14480,8869],{"class":152},[142,14482,14483],{"class":144,"line":1721},[142,14484,1593],{"class":152},[142,14486,14487],{"class":144,"line":1726},[142,14488,2428],{"emptyLinePlaceholder":69},[142,14490,14491,14493,14495,14497,14499,14501],{"class":144,"line":1755},[142,14492,5393],{"class":148},[142,14494,13647],{"class":1991},[142,14496,153],{"class":152},[142,14498,156],{"class":148},[142,14500,1427],{"class":5245},[142,14502,159],{"class":152},[142,14504,14505],{"class":144,"line":1760},[142,14506,1574],{"class":152},[142,14508,14509,14511,14513,14516,14518],{"class":144,"line":1777},[142,14510,6558],{"class":152},[142,14512,1197],{"class":148},[142,14514,14515],{"class":257}," \"func2(int a) 调用\"",[142,14517,1473],{"class":148},[142,14519,8869],{"class":152},[142,14521,14522],{"class":144,"line":1782},[142,14523,1593],{"class":152},[142,14525,14526],{"class":144,"line":1787},[142,14527,2428],{"emptyLinePlaceholder":69},[142,14529,14530,14532,14534],{"class":144,"line":1792},[142,14531,156],{"class":148},[142,14533,2001],{"class":1991},[142,14535,10882],{"class":152},[142,14537,14538],{"class":144,"line":1806},[142,14539,13239],{"class":152},[142,14541,14542,14544,14546,14548,14550],{"class":144,"line":1811},[142,14543,2013],{"class":148},[142,14545,10898],{"class":152},[142,14547,198],{"class":148},[142,14549,2066],{"class":201},[142,14551,1319],{"class":152},[142,14553,14554,14556,14559],{"class":144,"line":2605},[142,14555,13314],{"class":1991},[142,14557,14558],{"class":152},"(a);",[142,14560,14561],{"class":211}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[142,14563,14564,14566,14568,14570,14572],{"class":144,"line":2619},[142,14565,13314],{"class":1991},[142,14567,153],{"class":152},[142,14569,599],{"class":201},[142,14571,5995],{"class":152},[142,14573,14574],{"class":211},"\u002F\u002F调用有const   10是个常量\n",[142,14576,14577],{"class":144,"line":2627},[142,14578,2428],{"emptyLinePlaceholder":69},[142,14580,14581],{"class":144,"line":2632},[142,14582,2428],{"emptyLinePlaceholder":69},[142,14584,14585,14588],{"class":144,"line":2638},[142,14586,14587],{"class":211},"    \u002F\u002Ffunc2(10);",[142,14589,14590],{"class":211}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[142,14592,14593],{"class":144,"line":2644},[142,14594,2428],{"emptyLinePlaceholder":69},[142,14596,14597,14599,14601,14603],{"class":144,"line":2649},[142,14598,2331],{"class":1991},[142,14600,153],{"class":152},[142,14602,2336],{"class":257},[142,14604,2747],{"class":152},[142,14606,14607],{"class":144,"line":7977},[142,14608,2428],{"emptyLinePlaceholder":69},[142,14610,14611,14613,14615],{"class":144,"line":8001},[142,14612,4118],{"class":148},[142,14614,4121],{"class":201},[142,14616,1319],{"class":152},[142,14618,14619],{"class":144,"line":8006},[142,14620,1593],{"class":152},[5155,14622,14623],{},"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":31,"searchDepth":64,"depth":64,"links":14625},[14626,14627,14628],{"id":13558,"depth":64,"text":13559},{"id":13815,"depth":64,"text":13816},{"id":13937,"depth":64,"text":13938,"children":14629},[14630,14631],{"id":13944,"depth":1208,"text":13945},{"id":14314,"depth":1208,"text":14315},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13550,"description":31},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14638,"title":14639,"body":14640,"description":23394,"extension":67,"meta":23395,"navigation":69,"path":23396,"seo":23397,"stem":23398,"__hash__":23399},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14641,"toc":23375},[14642,14645,14651,14658,14663,14666,14669,14672,14676,14680,14683,14686,14694,14699,14702,14709,14714,14873,14876,15129,15132,15135,15138,15143,15146,15149,15160,15165,15401,15405,15415,15418,15426,15573,15577,15580,15583,15587,16032,16036,16044,16052,16964,16971,16976,17604,17607,17610,17613,17732,17735,17822,17825,17951,17954,18048,18051,18404,18408,18416,18420,18427,18430,18433,18444,18450,18455,18467,18475,18495,18503,18520,18706,18709,18713,18716,18719,18722,18725,18728,18731,18734,19194,19200,19204,19207,19218,19805,19808,20297,20301,20304,20307,20310,20313,20316,20324,20720,20724,20727,20730,21177,21180,21183,21188,21191,21196,21199,21203,21206,21208,21214,21217,21523,21533,21574,21578,21581,21583,21616,21619,21926,21928,21943,21946,21969,21978,21984,21987,21991,21994,21997,22002,22013,22018,22026,22031,22161,22164,22167,22342,22347,22559,22563,22566,22680,22685,22924,22928,22932,22935,22938,22943,23048,23051,23054,23057,23061,23172,23175,23178,23183,23235,23238,23241,23246,23292,23295,23300,23368,23370,23373],[10,14643,14639],{"id":14644},"_8类和对象",[14,14646,14647,14648],{},"C++面向对象的三大特性为",[302,14649,14650],{},"封装、继承、多态",[14,14652,14653,14654,14657],{},"C++认为",[302,14655,14656],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14659,14660],{},[302,14661,14662],{},"例如：",[14,14664,14665],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14667,14668],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14670,14671],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[84,14673,14675],{"id":14674},"_81封装","8.1封装",[113,14677,14679],{"id":14678},"_811封装的意义","8.1.1封装的意义",[14,14681,14682],{},"封装是C++面向对象三大特性之一",[14,14684,14685],{},"封装的意义：",[1160,14687,14688,14691],{},[99,14689,14690],{},"将属性和行为作为一个整体，表现生活中的事物",[99,14692,14693],{},"将属性和行为加以权限控制",[14,14695,14696],{},[302,14697,14698],{},"封装意义一：",[14,14700,14701],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14703,14704,13824,14706],{},[302,14705,5210],{},[139,14707,14708],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[96,14710,14711],{},[99,14712,14713],{},"**示例1：**设计一个圆类，求圆的周长",[133,14715,14717],{"className":135,"code":14716,"language":137,"meta":31,"style":31},"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",[139,14718,14719,14727,14731,14736,14741,14746,14751,14758,14763,14773,14777,14795,14799,14803,14811,14815,14820,14825,14830,14835,14846,14869],{"__ignoreMap":31},[142,14720,14721,14724],{"class":144,"line":145},[142,14722,14723],{"class":148},"class",[142,14725,14726],{"class":1991}," Circle\n",[142,14728,14729],{"class":144,"line":64},[142,14730,1574],{"class":152},[142,14732,14733],{"class":144,"line":1208},[142,14734,14735],{"class":211},"    \u002F\u002F访问权限\n",[142,14737,14738],{"class":144,"line":1223},[142,14739,14740],{"class":211},"    \u002F\u002F公共权限\n",[142,14742,14743],{"class":144,"line":1229},[142,14744,14745],{"class":148},"public:\n",[142,14747,14748],{"class":144,"line":1243},[142,14749,14750],{"class":211},"    \u002F\u002F属性\n",[142,14752,14753,14755],{"class":144,"line":1249},[142,14754,2013],{"class":148},[142,14756,14757],{"class":152}," m_r;\n",[142,14759,14760],{"class":144,"line":1340},[142,14761,14762],{"class":211},"    \u002F\u002F行为\n",[142,14764,14765,14768,14771],{"class":144,"line":1346},[142,14766,14767],{"class":148},"    double",[142,14769,14770],{"class":1991}," calculateZC",[142,14772,2004],{"class":152},[142,14774,14775],{"class":144,"line":1358},[142,14776,2058],{"class":152},[142,14778,14779,14782,14785,14787,14790,14792],{"class":144,"line":1640},[142,14780,14781],{"class":148},"        return",[142,14783,14784],{"class":201}," 2",[142,14786,608],{"class":148},[142,14788,14789],{"class":152},"PI",[142,14791,608],{"class":148},[142,14793,14794],{"class":152},"m_r;\n",[142,14796,14797],{"class":144,"line":1645},[142,14798,2215],{"class":152},[142,14800,14801],{"class":144,"line":1651},[142,14802,4023],{"class":152},[142,14804,14805,14807,14809],{"class":144,"line":1656},[142,14806,156],{"class":148},[142,14808,2001],{"class":1991},[142,14810,2004],{"class":152},[142,14812,14813],{"class":144,"line":1670},[142,14814,1574],{"class":152},[142,14816,14817],{"class":144,"line":1675},[142,14818,14819],{"class":211},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[142,14821,14822],{"class":144,"line":1681},[142,14823,14824],{"class":211},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[142,14826,14827],{"class":144,"line":1702},[142,14828,14829],{"class":152},"    Circle c1;\n",[142,14831,14832],{"class":144,"line":1707},[142,14833,14834],{"class":211},"    \u002F\u002F给圆对象 的属性进行赋值\n",[142,14836,14837,14840,14842,14844],{"class":144,"line":1721},[142,14838,14839],{"class":152},"    c1.m_r",[142,14841,198],{"class":148},[142,14843,599],{"class":201},[142,14845,1319],{"class":152},[142,14847,14848,14850,14852,14855,14857,14860,14863,14865,14867],{"class":144,"line":1726},[142,14849,1579],{"class":152},[142,14851,1197],{"class":148},[142,14853,14854],{"class":257},"\"圆的周长\"",[142,14856,1197],{"class":148},[142,14858,14859],{"class":152},"c1.",[142,14861,14862],{"class":1991},"calculateZC",[142,14864,2455],{"class":152},[142,14866,1197],{"class":148},[142,14868,1220],{"class":152},[142,14870,14871],{"class":144,"line":1755},[142,14872,1593],{"class":152},[14,14874,14875],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[133,14877,14879],{"className":135,"code":14878,"language":137,"meta":31,"style":31},"#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",[139,14880,14881,14887,14897,14903,14909,14913,14917,14922,14929,14934,14952,14956,14966,14970,14975,14991,14995,15005,15009,15014,15022,15026,15058,15062,15066,15074,15078,15083,15088,15102,15116,15125],{"__ignoreMap":31},[142,14882,14883,14885],{"class":144,"line":145},[142,14884,1977],{"class":148},[142,14886,1980],{"class":257},[142,14888,14889,14891,14893,14895],{"class":144,"line":64},[142,14890,1985],{"class":148},[142,14892,1988],{"class":148},[142,14894,1992],{"class":1991},[142,14896,1319],{"class":152},[142,14898,14899,14901],{"class":144,"line":1208},[142,14900,1977],{"class":148},[142,14902,7778],{"class":257},[142,14904,14905,14907],{"class":144,"line":1223},[142,14906,14723],{"class":148},[142,14908,7791],{"class":1991},[142,14910,14911],{"class":144,"line":1229},[142,14912,1574],{"class":152},[142,14914,14915],{"class":144,"line":1243},[142,14916,14745],{"class":148},[142,14918,14919],{"class":144,"line":1249},[142,14920,14921],{"class":152},"    string m_name;\n",[142,14923,14924,14926],{"class":144,"line":1340},[142,14925,2013],{"class":148},[142,14927,14928],{"class":152}," m_id;\n",[142,14930,14931],{"class":144,"line":1346},[142,14932,14933],{"class":211},"    \u002F\u002F赋值姓名\n",[142,14935,14936,14939,14942,14944,14947,14950],{"class":144,"line":1358},[142,14937,14938],{"class":148},"    void",[142,14940,14941],{"class":1991}," setName",[142,14943,153],{"class":152},[142,14945,14946],{"class":1991},"string",[142,14948,14949],{"class":5245}," name",[142,14951,159],{"class":152},[142,14953,14954],{"class":144,"line":1640},[142,14955,2058],{"class":152},[142,14957,14958,14961,14963],{"class":144,"line":1645},[142,14959,14960],{"class":152},"        m_name",[142,14962,198],{"class":148},[142,14964,14965],{"class":152},"name;\n",[142,14967,14968],{"class":144,"line":1651},[142,14969,2215],{"class":152},[142,14971,14972],{"class":144,"line":1656},[142,14973,14974],{"class":211},"    \u002F\u002F赋值学号\n",[142,14976,14977,14979,14982,14984,14986,14989],{"class":144,"line":1670},[142,14978,14938],{"class":148},[142,14980,14981],{"class":1991}," setId",[142,14983,153],{"class":152},[142,14985,156],{"class":148},[142,14987,14988],{"class":5245}," id",[142,14990,159],{"class":152},[142,14992,14993],{"class":144,"line":1675},[142,14994,2058],{"class":152},[142,14996,14997,15000,15002],{"class":144,"line":1681},[142,14998,14999],{"class":152},"        m_id",[142,15001,198],{"class":148},[142,15003,15004],{"class":152},"id;\n",[142,15006,15007],{"class":144,"line":1702},[142,15008,2215],{"class":152},[142,15010,15011],{"class":144,"line":1707},[142,15012,15013],{"class":211},"    \u002F\u002F打印学生信息\n",[142,15015,15016,15018,15020],{"class":144,"line":1721},[142,15017,14938],{"class":148},[142,15019,9644],{"class":1991},[142,15021,2004],{"class":152},[142,15023,15024],{"class":144,"line":1726},[142,15025,2058],{"class":152},[142,15027,15028,15030,15032,15035,15037,15040,15042,15044,15046,15049,15051,15054,15056],{"class":144,"line":1755},[142,15029,3479],{"class":152},[142,15031,1197],{"class":148},[142,15033,15034],{"class":257},"\"姓名：\"",[142,15036,1197],{"class":148},[142,15038,15039],{"class":152},"m_name",[142,15041,1197],{"class":148},[142,15043,4387],{"class":257},[142,15045,1197],{"class":148},[142,15047,15048],{"class":257},"\"学号：\"",[142,15050,1197],{"class":148},[142,15052,15053],{"class":152},"m_id",[142,15055,1197],{"class":148},[142,15057,1220],{"class":152},[142,15059,15060],{"class":144,"line":1760},[142,15061,2215],{"class":152},[142,15063,15064],{"class":144,"line":1777},[142,15065,4023],{"class":152},[142,15067,15068,15070,15072],{"class":144,"line":1782},[142,15069,156],{"class":148},[142,15071,2001],{"class":1991},[142,15073,2004],{"class":152},[142,15075,15076],{"class":144,"line":1787},[142,15077,1574],{"class":152},[142,15079,15080],{"class":144,"line":1792},[142,15081,15082],{"class":211},"    \u002F\u002F实例化\n",[142,15084,15085],{"class":144,"line":1806},[142,15086,15087],{"class":152},"    Student s1;\n",[142,15089,15090,15093,15096,15098,15100],{"class":144,"line":1811},[142,15091,15092],{"class":152},"    s1.",[142,15094,15095],{"class":1991},"setName",[142,15097,153],{"class":152},[142,15099,7945],{"class":257},[142,15101,2747],{"class":152},[142,15103,15104,15106,15109,15111,15114],{"class":144,"line":2605},[142,15105,15092],{"class":152},[142,15107,15108],{"class":1991},"setId",[142,15110,153],{"class":152},[142,15112,15113],{"class":201},"123456",[142,15115,2747],{"class":152},[142,15117,15118,15120,15123],{"class":144,"line":2619},[142,15119,15092],{"class":152},[142,15121,15122],{"class":1991},"printInfo",[142,15124,5665],{"class":152},[142,15126,15127],{"class":144,"line":2627},[142,15128,1593],{"class":152},[14,15130,15131],{},"类中的属性和行为统称为成员",[14,15133,15134],{},"属性：成员属性(成员变量)",[14,15136,15137],{},"方法：成员函数(成员方法)",[14,15139,15140],{},[302,15141,15142],{},"封装意义二：",[14,15144,15145],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15147,15148],{},"访问权限有三种：",[96,15150,15151,15154,15157],{},[99,15152,15153],{},"public        公共权限",[99,15155,15156],{},"protected 保护权限",[99,15158,15159],{},"private      私有权限",[14,15161,15162],{},[302,15163,15164],{},"示例：",[133,15166,15168],{"className":9970,"code":15167,"language":9972,"meta":31,"style":31},"\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",[139,15169,15170,15175,15180,15185,15190,15194,15201,15205,15210,15214,15219,15223,15228,15233,15238,15242,15247,15252,15259,15263,15267,15275,15279,15290,15302,15314,15318,15322,15326,15334,15338,15343,15355,15363,15371,15375,15385,15389,15397],{"__ignoreMap":31},[142,15171,15172],{"class":144,"line":145},[142,15173,15174],{"class":211},"\u002F\u002F三种权限\n",[142,15176,15177],{"class":144,"line":64},[142,15178,15179],{"class":211},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[142,15181,15182],{"class":144,"line":1208},[142,15183,15184],{"class":211},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[142,15186,15187],{"class":144,"line":1223},[142,15188,15189],{"class":211},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[142,15191,15192],{"class":144,"line":1229},[142,15193,2428],{"emptyLinePlaceholder":69},[142,15195,15196,15198],{"class":144,"line":1243},[142,15197,14723],{"class":148},[142,15199,15200],{"class":1991}," Person\n",[142,15202,15203],{"class":144,"line":1249},[142,15204,1574],{"class":152},[142,15206,15207],{"class":144,"line":1340},[142,15208,15209],{"class":211},"    \u002F\u002F姓名  公共权限\n",[142,15211,15212],{"class":144,"line":1346},[142,15213,14745],{"class":148},[142,15215,15216],{"class":144,"line":1358},[142,15217,15218],{"class":152},"    string m_Name;\n",[142,15220,15221],{"class":144,"line":1640},[142,15222,2428],{"emptyLinePlaceholder":69},[142,15224,15225],{"class":144,"line":1645},[142,15226,15227],{"class":211},"    \u002F\u002F汽车  保护权限\n",[142,15229,15230],{"class":144,"line":1651},[142,15231,15232],{"class":148},"protected:\n",[142,15234,15235],{"class":144,"line":1656},[142,15236,15237],{"class":152},"    string m_Car;\n",[142,15239,15240],{"class":144,"line":1670},[142,15241,2428],{"emptyLinePlaceholder":69},[142,15243,15244],{"class":144,"line":1675},[142,15245,15246],{"class":211},"    \u002F\u002F银行卡密码  私有权限\n",[142,15248,15249],{"class":144,"line":1681},[142,15250,15251],{"class":148},"private:\n",[142,15253,15254,15256],{"class":144,"line":1702},[142,15255,2013],{"class":148},[142,15257,15258],{"class":152}," m_Password;\n",[142,15260,15261],{"class":144,"line":1707},[142,15262,2428],{"emptyLinePlaceholder":69},[142,15264,15265],{"class":144,"line":1721},[142,15266,14745],{"class":148},[142,15268,15269,15271,15273],{"class":144,"line":1726},[142,15270,14938],{"class":148},[142,15272,11414],{"class":1991},[142,15274,2004],{"class":152},[142,15276,15277],{"class":144,"line":1755},[142,15278,2058],{"class":152},[142,15280,15281,15284,15286,15288],{"class":144,"line":1760},[142,15282,15283],{"class":152},"        m_Name ",[142,15285,198],{"class":148},[142,15287,8967],{"class":257},[142,15289,1319],{"class":152},[142,15291,15292,15295,15297,15300],{"class":144,"line":1777},[142,15293,15294],{"class":152},"        m_Car ",[142,15296,198],{"class":148},[142,15298,15299],{"class":257}," \"拖拉机\"",[142,15301,1319],{"class":152},[142,15303,15304,15307,15309,15312],{"class":144,"line":1782},[142,15305,15306],{"class":152},"        m_Password ",[142,15308,198],{"class":148},[142,15310,15311],{"class":201}," 123456",[142,15313,1319],{"class":152},[142,15315,15316],{"class":144,"line":1787},[142,15317,2215],{"class":152},[142,15319,15320],{"class":144,"line":1792},[142,15321,4023],{"class":152},[142,15323,15324],{"class":144,"line":1806},[142,15325,2428],{"emptyLinePlaceholder":69},[142,15327,15328,15330,15332],{"class":144,"line":1811},[142,15329,156],{"class":148},[142,15331,2001],{"class":1991},[142,15333,10882],{"class":152},[142,15335,15336],{"class":144,"line":2605},[142,15337,2428],{"emptyLinePlaceholder":69},[142,15339,15340],{"class":144,"line":2619},[142,15341,15342],{"class":152},"    Person p;\n",[142,15344,15345,15348,15350,15353],{"class":144,"line":2627},[142,15346,15347],{"class":152},"    p.m_Name ",[142,15349,198],{"class":148},[142,15351,15352],{"class":257}," \"李四\"",[142,15354,1319],{"class":152},[142,15356,15357,15360],{"class":144,"line":2632},[142,15358,15359],{"class":211},"    \u002F\u002Fp.m_Car = \"奔驰\";",[142,15361,15362],{"class":211},"  \u002F\u002F保护权限类外访问不到\n",[142,15364,15365,15368],{"class":144,"line":2638},[142,15366,15367],{"class":211},"    \u002F\u002Fp.m_Password = 123;",[142,15369,15370],{"class":211}," \u002F\u002F私有权限类外访问不到\n",[142,15372,15373],{"class":144,"line":2644},[142,15374,2428],{"emptyLinePlaceholder":69},[142,15376,15377,15379,15381,15383],{"class":144,"line":2649},[142,15378,2331],{"class":1991},[142,15380,153],{"class":152},[142,15382,2336],{"class":257},[142,15384,2747],{"class":152},[142,15386,15387],{"class":144,"line":7977},[142,15388,2428],{"emptyLinePlaceholder":69},[142,15390,15391,15393,15395],{"class":144,"line":8001},[142,15392,4118],{"class":148},[142,15394,4121],{"class":201},[142,15396,1319],{"class":152},[142,15398,15399],{"class":144,"line":8006},[142,15400,1593],{"class":152},[113,15402,15404],{"id":15403},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15406,15407,15408,15411,15412],{},"在C++中 struct和class唯一的",[302,15409,15410],{},"区别","就在于 ",[302,15413,15414],{},"默认的访问权限不同",[14,15416,15417],{},"区别：",[1160,15419,15420,15423],{},[99,15421,15422],{},"struct 默认权限为公共",[99,15424,15425],{},"class   默认权限为私有",[133,15427,15429],{"className":9970,"code":15428,"language":9972,"meta":31,"style":31},"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",[139,15430,15431,15438,15442,15452,15456,15460,15467,15471,15481,15485,15489,15497,15501,15506,15520,15524,15529,15543,15547,15557,15561,15569],{"__ignoreMap":31},[142,15432,15433,15435],{"class":144,"line":145},[142,15434,14723],{"class":148},[142,15436,15437],{"class":1991}," C1\n",[142,15439,15440],{"class":144,"line":64},[142,15441,1574],{"class":152},[142,15443,15444,15446,15449],{"class":144,"line":1208},[142,15445,2013],{"class":148},[142,15447,15448],{"class":152},"  m_A;",[142,15450,15451],{"class":211}," \u002F\u002F默认是私有权限\n",[142,15453,15454],{"class":144,"line":1223},[142,15455,4023],{"class":152},[142,15457,15458],{"class":144,"line":1229},[142,15459,2428],{"emptyLinePlaceholder":69},[142,15461,15462,15464],{"class":144,"line":1243},[142,15463,7788],{"class":148},[142,15465,15466],{"class":1991}," C2\n",[142,15468,15469],{"class":144,"line":1249},[142,15470,1574],{"class":152},[142,15472,15473,15475,15478],{"class":144,"line":1340},[142,15474,2013],{"class":148},[142,15476,15477],{"class":152}," m_A;",[142,15479,15480],{"class":211},"  \u002F\u002F默认是公共权限\n",[142,15482,15483],{"class":144,"line":1346},[142,15484,4023],{"class":152},[142,15486,15487],{"class":144,"line":1358},[142,15488,2428],{"emptyLinePlaceholder":69},[142,15490,15491,15493,15495],{"class":144,"line":1640},[142,15492,156],{"class":148},[142,15494,2001],{"class":1991},[142,15496,10882],{"class":152},[142,15498,15499],{"class":144,"line":1645},[142,15500,2428],{"emptyLinePlaceholder":69},[142,15502,15503],{"class":144,"line":1651},[142,15504,15505],{"class":152},"    C1 c1;\n",[142,15507,15508,15511,15513,15515,15517],{"class":144,"line":1656},[142,15509,15510],{"class":152},"    c1.m_A ",[142,15512,198],{"class":148},[142,15514,2066],{"class":201},[142,15516,208],{"class":152},[142,15518,15519],{"class":211}," \u002F\u002F错误，访问权限是私有\n",[142,15521,15522],{"class":144,"line":1670},[142,15523,2428],{"emptyLinePlaceholder":69},[142,15525,15526],{"class":144,"line":1675},[142,15527,15528],{"class":152},"    C2 c2;\n",[142,15530,15531,15534,15536,15538,15540],{"class":144,"line":1681},[142,15532,15533],{"class":152},"    c2.m_A ",[142,15535,198],{"class":148},[142,15537,2066],{"class":201},[142,15539,208],{"class":152},[142,15541,15542],{"class":211}," \u002F\u002F正确，访问权限是公共\n",[142,15544,15545],{"class":144,"line":1702},[142,15546,2428],{"emptyLinePlaceholder":69},[142,15548,15549,15551,15553,15555],{"class":144,"line":1707},[142,15550,2331],{"class":1991},[142,15552,153],{"class":152},[142,15554,2336],{"class":257},[142,15556,2747],{"class":152},[142,15558,15559],{"class":144,"line":1721},[142,15560,2428],{"emptyLinePlaceholder":69},[142,15562,15563,15565,15567],{"class":144,"line":1726},[142,15564,4118],{"class":148},[142,15566,4121],{"class":201},[142,15568,1319],{"class":152},[142,15570,15571],{"class":144,"line":1755},[142,15572,1593],{"class":152},[113,15574,15576],{"id":15575},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15578,15579],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15581,15582],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15584,15585],{},[302,15586,15164],{},[133,15588,15590],{"className":9970,"code":15589,"language":9972,"meta":31,"style":31},"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",[139,15591,15592,15602,15606,15610,15615,15629,15638,15642,15652,15656,15663,15667,15671,15675,15680,15689,15696,15700,15705,15721,15744,15757,15764,15768,15777,15781,15785,15790,15806,15816,15820,15824,15828,15836,15840,15850,15854,15862,15866,15870,15878,15882,15886,15891,15904,15927,15931,15936,15949,15971,15975,15980,15994,16002,16006,16016,16020,16028],{"__ignoreMap":31},[142,15593,15594,15596,15599],{"class":144,"line":145},[142,15595,14723],{"class":148},[142,15597,15598],{"class":1991}," Person",[142,15600,15601],{"class":152}," {\n",[142,15603,15604],{"class":144,"line":64},[142,15605,14745],{"class":148},[142,15607,15608],{"class":144,"line":1208},[142,15609,2428],{"emptyLinePlaceholder":69},[142,15611,15612],{"class":144,"line":1223},[142,15613,15614],{"class":211},"    \u002F\u002F姓名设置可读可写\n",[142,15616,15617,15619,15621,15623,15625,15627],{"class":144,"line":1229},[142,15618,14938],{"class":148},[142,15620,14941],{"class":1991},[142,15622,153],{"class":152},[142,15624,14946],{"class":1991},[142,15626,14949],{"class":5245},[142,15628,12471],{"class":152},[142,15630,15631,15633,15635],{"class":144,"line":1243},[142,15632,15283],{"class":152},[142,15634,198],{"class":148},[142,15636,15637],{"class":152}," name;\n",[142,15639,15640],{"class":144,"line":1249},[142,15641,2215],{"class":152},[142,15643,15644,15647,15650],{"class":144,"line":1340},[142,15645,15646],{"class":1991},"    string",[142,15648,15649],{"class":1991}," getName",[142,15651,2004],{"class":152},[142,15653,15654],{"class":144,"line":1346},[142,15655,2058],{"class":152},[142,15657,15658,15660],{"class":144,"line":1358},[142,15659,14781],{"class":148},[142,15661,15662],{"class":152}," m_Name;\n",[142,15664,15665],{"class":144,"line":1640},[142,15666,2215],{"class":152},[142,15668,15669],{"class":144,"line":1645},[142,15670,2428],{"emptyLinePlaceholder":69},[142,15672,15673],{"class":144,"line":1651},[142,15674,2428],{"emptyLinePlaceholder":69},[142,15676,15677],{"class":144,"line":1656},[142,15678,15679],{"class":211},"    \u002F\u002F获取年龄 \n",[142,15681,15682,15684,15687],{"class":144,"line":1670},[142,15683,2013],{"class":148},[142,15685,15686],{"class":1991}," getAge",[142,15688,10882],{"class":152},[142,15690,15691,15693],{"class":144,"line":1675},[142,15692,14781],{"class":148},[142,15694,15695],{"class":152}," m_Age;\n",[142,15697,15698],{"class":144,"line":1681},[142,15699,2215],{"class":152},[142,15701,15702],{"class":144,"line":1702},[142,15703,15704],{"class":211},"    \u002F\u002F设置年龄\n",[142,15706,15707,15709,15712,15714,15716,15719],{"class":144,"line":1707},[142,15708,14938],{"class":148},[142,15710,15711],{"class":1991}," setAge",[142,15713,153],{"class":152},[142,15715,156],{"class":148},[142,15717,15718],{"class":5245}," age",[142,15720,12471],{"class":152},[142,15722,15723,15725,15728,15730,15732,15734,15737,15739,15742],{"class":144,"line":1721},[142,15724,2525],{"class":148},[142,15726,15727],{"class":152}," (age ",[142,15729,1063],{"class":148},[142,15731,4121],{"class":201},[142,15733,3283],{"class":148},[142,15735,15736],{"class":152}," age ",[142,15738,1113],{"class":148},[142,15740,15741],{"class":201}," 150",[142,15743,12471],{"class":152},[142,15745,15746,15748,15750,15753,15755],{"class":144,"line":1726},[142,15747,9748],{"class":152},[142,15749,1197],{"class":148},[142,15751,15752],{"class":257}," \"你个老妖精!\"",[142,15754,1473],{"class":148},[142,15756,8869],{"class":152},[142,15758,15759,15762],{"class":144,"line":1755},[142,15760,15761],{"class":148},"            return",[142,15763,1319],{"class":152},[142,15765,15766],{"class":144,"line":1760},[142,15767,2557],{"class":152},[142,15769,15770,15773,15775],{"class":144,"line":1777},[142,15771,15772],{"class":152},"        m_Age ",[142,15774,198],{"class":148},[142,15776,7826],{"class":152},[142,15778,15779],{"class":144,"line":1782},[142,15780,2215],{"class":152},[142,15782,15783],{"class":144,"line":1787},[142,15784,2428],{"emptyLinePlaceholder":69},[142,15786,15787],{"class":144,"line":1792},[142,15788,15789],{"class":211},"    \u002F\u002F情人设置为只写\n",[142,15791,15792,15794,15797,15799,15801,15804],{"class":144,"line":1806},[142,15793,14938],{"class":148},[142,15795,15796],{"class":1991}," setLover",[142,15798,153],{"class":152},[142,15800,14946],{"class":1991},[142,15802,15803],{"class":5245}," lover",[142,15805,12471],{"class":152},[142,15807,15808,15811,15813],{"class":144,"line":1811},[142,15809,15810],{"class":152},"        m_Lover ",[142,15812,198],{"class":148},[142,15814,15815],{"class":152}," lover;\n",[142,15817,15818],{"class":144,"line":2605},[142,15819,2215],{"class":152},[142,15821,15822],{"class":144,"line":2619},[142,15823,2428],{"emptyLinePlaceholder":69},[142,15825,15826],{"class":144,"line":2627},[142,15827,15251],{"class":148},[142,15829,15830,15833],{"class":144,"line":2632},[142,15831,15832],{"class":152},"    string m_Name;",[142,15834,15835],{"class":211}," \u002F\u002F可读可写  姓名\n",[142,15837,15838],{"class":144,"line":2638},[142,15839,13239],{"class":152},[142,15841,15842,15844,15847],{"class":144,"line":2644},[142,15843,2013],{"class":148},[142,15845,15846],{"class":152}," m_Age;",[142,15848,15849],{"class":211}," \u002F\u002F只读  年龄\n",[142,15851,15852],{"class":144,"line":2649},[142,15853,2428],{"emptyLinePlaceholder":69},[142,15855,15856,15859],{"class":144,"line":7977},[142,15857,15858],{"class":152},"    string m_Lover;",[142,15860,15861],{"class":211}," \u002F\u002F只写  情人\n",[142,15863,15864],{"class":144,"line":8001},[142,15865,4023],{"class":152},[142,15867,15868],{"class":144,"line":8006},[142,15869,2428],{"emptyLinePlaceholder":69},[142,15871,15872,15874,15876],{"class":144,"line":8012},[142,15873,156],{"class":148},[142,15875,2001],{"class":1991},[142,15877,10882],{"class":152},[142,15879,15880],{"class":144,"line":8039},[142,15881,2428],{"emptyLinePlaceholder":69},[142,15883,15884],{"class":144,"line":8044},[142,15885,15342],{"class":152},[142,15887,15888],{"class":144,"line":8050},[142,15889,15890],{"class":211},"    \u002F\u002F姓名设置\n",[142,15892,15893,15896,15898,15900,15902],{"class":144,"line":8062},[142,15894,15895],{"class":152},"    p.",[142,15897,15095],{"class":1991},[142,15899,153],{"class":152},[142,15901,7945],{"class":257},[142,15903,2747],{"class":152},[142,15905,15906,15908,15910,15913,15915,15918,15921,15923,15925],{"class":144,"line":8074},[142,15907,6558],{"class":152},[142,15909,1197],{"class":148},[142,15911,15912],{"class":257}," \"姓名： \"",[142,15914,1473],{"class":148},[142,15916,15917],{"class":152}," p.",[142,15919,15920],{"class":1991},"getName",[142,15922,13079],{"class":152},[142,15924,1197],{"class":148},[142,15926,8869],{"class":152},[142,15928,15929],{"class":144,"line":8086},[142,15930,2428],{"emptyLinePlaceholder":69},[142,15932,15933],{"class":144,"line":9745},[142,15934,15935],{"class":211},"    \u002F\u002F年龄设置\n",[142,15937,15938,15940,15943,15945,15947],{"class":144,"line":9770},[142,15939,15895],{"class":152},[142,15941,15942],{"class":1991},"setAge",[142,15944,153],{"class":152},[142,15946,809],{"class":201},[142,15948,2747],{"class":152},[142,15950,15951,15953,15955,15958,15960,15962,15965,15967,15969],{"class":144,"line":9793},[142,15952,6558],{"class":152},[142,15954,1197],{"class":148},[142,15956,15957],{"class":257}," \"年龄： \"",[142,15959,1473],{"class":148},[142,15961,15917],{"class":152},[142,15963,15964],{"class":1991},"getAge",[142,15966,13079],{"class":152},[142,15968,1197],{"class":148},[142,15970,8869],{"class":152},[142,15972,15973],{"class":144,"line":9817},[142,15974,2428],{"emptyLinePlaceholder":69},[142,15976,15977],{"class":144,"line":9822},[142,15978,15979],{"class":211},"    \u002F\u002F情人设置\n",[142,15981,15982,15984,15987,15989,15992],{"class":144,"line":9827},[142,15983,15895],{"class":152},[142,15985,15986],{"class":1991},"setLover",[142,15988,153],{"class":152},[142,15990,15991],{"class":257},"\"苍井\"",[142,15993,2747],{"class":152},[142,15995,15996,15999],{"class":144,"line":9832},[142,15997,15998],{"class":211},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[142,16000,16001],{"class":211},"  \u002F\u002F只写属性，不可以读取\n",[142,16003,16004],{"class":144,"line":9841},[142,16005,2428],{"emptyLinePlaceholder":69},[142,16007,16008,16010,16012,16014],{"class":144,"line":9846},[142,16009,2331],{"class":1991},[142,16011,153],{"class":152},[142,16013,2336],{"class":257},[142,16015,2747],{"class":152},[142,16017,16018],{"class":144,"line":9852},[142,16019,2428],{"emptyLinePlaceholder":69},[142,16021,16022,16024,16026],{"class":144,"line":9873},[142,16023,4118],{"class":148},[142,16025,4121],{"class":201},[142,16027,1319],{"class":152},[142,16029,16030],{"class":144,"line":9879},[142,16031,1593],{"class":152},[113,16033,16035],{"id":16034},"_814封装案例","8.1.4封装案例",[96,16037,16038],{},[99,16039,16040,16043],{},[302,16041,16042],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1160,16045,16046,16049],{},[99,16047,16048],{},"求出立方体的面积和体积",[99,16050,16051],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[133,16053,16055],{"className":135,"code":16054,"language":137,"meta":31,"style":31},"#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",[139,16056,16057,16063,16073,16080,16084,16088,16093,16123,16127,16137,16147,16157,16161,16170,16174,16210,16214,16223,16227,16243,16247,16252,16261,16265,16272,16276,16285,16289,16296,16300,16309,16313,16320,16324,16329,16346,16350,16396,16400,16409,16413,16417,16421,16430,16434,16438,16443,16447,16453,16459,16465,16469,16473,16478,16500,16504,16558,16562,16570,16574,16579,16584,16597,16604,16620,16631,16637,16660,16666,16689,16703,16723,16729,16740,16763,16785,16790,16796,16810,16823,16828,16842,16847,16853,16858,16872,16877,16882,16896,16908,16913,16926,16931,16936,16941,16954,16959],{"__ignoreMap":31},[142,16058,16059,16061],{"class":144,"line":145},[142,16060,1977],{"class":148},[142,16062,1980],{"class":257},[142,16064,16065,16067,16069,16071],{"class":144,"line":64},[142,16066,1985],{"class":148},[142,16068,1988],{"class":148},[142,16070,1992],{"class":1991},[142,16072,1319],{"class":152},[142,16074,16075,16077],{"class":144,"line":1208},[142,16076,14723],{"class":148},[142,16078,16079],{"class":1991}," Cube\n",[142,16081,16082],{"class":144,"line":1223},[142,16083,1574],{"class":152},[142,16085,16086],{"class":144,"line":1229},[142,16087,14745],{"class":148},[142,16089,16090],{"class":144,"line":1243},[142,16091,16092],{"class":211},"    \u002F\u002F输入长宽高\n",[142,16094,16095,16097,16100,16102,16104,16107,16109,16111,16114,16116,16118,16121],{"class":144,"line":1249},[142,16096,14938],{"class":148},[142,16098,16099],{"class":1991}," setLwh",[142,16101,153],{"class":152},[142,16103,156],{"class":148},[142,16105,16106],{"class":5245}," l",[142,16108,531],{"class":152},[142,16110,156],{"class":148},[142,16112,16113],{"class":5245}," w",[142,16115,531],{"class":152},[142,16117,156],{"class":148},[142,16119,16120],{"class":5245}," h",[142,16122,159],{"class":152},[142,16124,16125],{"class":144,"line":1340},[142,16126,2058],{"class":152},[142,16128,16129,16132,16134],{"class":144,"line":1346},[142,16130,16131],{"class":152},"        m_L",[142,16133,198],{"class":148},[142,16135,16136],{"class":152},"l;\n",[142,16138,16139,16142,16144],{"class":144,"line":1358},[142,16140,16141],{"class":152},"        m_W",[142,16143,198],{"class":148},[142,16145,16146],{"class":152},"w;\n",[142,16148,16149,16152,16154],{"class":144,"line":1640},[142,16150,16151],{"class":152},"        m_H",[142,16153,198],{"class":148},[142,16155,16156],{"class":152},"h;\n",[142,16158,16159],{"class":144,"line":1645},[142,16160,2215],{"class":152},[142,16162,16163,16165,16168],{"class":144,"line":1651},[142,16164,2013],{"class":148},[142,16166,16167],{"class":1991}," mianji",[142,16169,2004],{"class":152},[142,16171,16172],{"class":144,"line":1656},[142,16173,2058],{"class":152},[142,16175,16176,16178,16180,16182,16185,16187,16190,16192,16195,16197,16200,16202,16205,16207],{"class":144,"line":1670},[142,16177,14781],{"class":148},[142,16179,14784],{"class":201},[142,16181,608],{"class":148},[142,16183,16184],{"class":152},"(m_L",[142,16186,608],{"class":148},[142,16188,16189],{"class":152},"m_W ",[142,16191,634],{"class":148},[142,16193,16194],{"class":152}," m_L",[142,16196,608],{"class":148},[142,16198,16199],{"class":152},"m_H ",[142,16201,634],{"class":148},[142,16203,16204],{"class":152}," m_W",[142,16206,608],{"class":148},[142,16208,16209],{"class":152},"m_H);\n",[142,16211,16212],{"class":144,"line":1675},[142,16213,2215],{"class":152},[142,16215,16216,16218,16221],{"class":144,"line":1681},[142,16217,2013],{"class":148},[142,16219,16220],{"class":1991}," tiji",[142,16222,2004],{"class":152},[142,16224,16225],{"class":144,"line":1702},[142,16226,2058],{"class":152},[142,16228,16229,16231,16233,16235,16238,16240],{"class":144,"line":1707},[142,16230,14781],{"class":148},[142,16232,16194],{"class":152},[142,16234,608],{"class":148},[142,16236,16237],{"class":152},"m_W",[142,16239,608],{"class":148},[142,16241,16242],{"class":152},"m_H;\n",[142,16244,16245],{"class":144,"line":1721},[142,16246,2215],{"class":152},[142,16248,16249],{"class":144,"line":1726},[142,16250,16251],{"class":211},"    \u002F\u002F获取长宽高\n",[142,16253,16254,16256,16259],{"class":144,"line":1755},[142,16255,2013],{"class":148},[142,16257,16258],{"class":1991}," getLength",[142,16260,2004],{"class":152},[142,16262,16263],{"class":144,"line":1760},[142,16264,2058],{"class":152},[142,16266,16267,16269],{"class":144,"line":1777},[142,16268,14781],{"class":148},[142,16270,16271],{"class":152}," m_L;\n",[142,16273,16274],{"class":144,"line":1782},[142,16275,2215],{"class":152},[142,16277,16278,16280,16283],{"class":144,"line":1787},[142,16279,2013],{"class":148},[142,16281,16282],{"class":1991}," getWidth",[142,16284,2004],{"class":152},[142,16286,16287],{"class":144,"line":1792},[142,16288,2058],{"class":152},[142,16290,16291,16293],{"class":144,"line":1806},[142,16292,14781],{"class":148},[142,16294,16295],{"class":152}," m_W;\n",[142,16297,16298],{"class":144,"line":1811},[142,16299,2215],{"class":152},[142,16301,16302,16304,16307],{"class":144,"line":2605},[142,16303,2013],{"class":148},[142,16305,16306],{"class":1991}," getHeight",[142,16308,2004],{"class":152},[142,16310,16311],{"class":144,"line":2619},[142,16312,2058],{"class":152},[142,16314,16315,16317],{"class":144,"line":2627},[142,16316,14781],{"class":148},[142,16318,16319],{"class":152}," m_H;\n",[142,16321,16322],{"class":144,"line":2632},[142,16323,2215],{"class":152},[142,16325,16326],{"class":144,"line":2638},[142,16327,16328],{"class":211},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[142,16330,16331,16334,16337,16339,16342,16344],{"class":144,"line":2644},[142,16332,16333],{"class":148},"    bool",[142,16335,16336],{"class":1991}," isEqual",[142,16338,153],{"class":152},[142,16340,16341],{"class":1991},"Cube",[142,16343,2877],{"class":5245},[142,16345,159],{"class":152},[142,16347,16348],{"class":144,"line":2649},[142,16349,2058],{"class":152},[142,16351,16352,16354,16357,16360,16362,16364,16367,16369,16372,16375,16377,16379,16382,16384,16386,16389,16391,16393],{"class":144,"line":7977},[142,16353,2525],{"class":148},[142,16355,16356],{"class":152}," (c.",[142,16358,16359],{"class":1991},"getLength",[142,16361,13079],{"class":152},[142,16363,2977],{"class":148},[142,16365,16366],{"class":152}," m_L ",[142,16368,1743],{"class":148},[142,16370,16371],{"class":152}," c.",[142,16373,16374],{"class":1991},"getWidth",[142,16376,13079],{"class":152},[142,16378,2977],{"class":148},[142,16380,16381],{"class":152}," m_W ",[142,16383,1743],{"class":148},[142,16385,16371],{"class":152},[142,16387,16388],{"class":1991},"getHeight",[142,16390,13079],{"class":152},[142,16392,2977],{"class":148},[142,16394,16395],{"class":152}," m_H)\n",[142,16397,16398],{"class":144,"line":8001},[142,16399,2538],{"class":152},[142,16401,16402,16404,16407],{"class":144,"line":8006},[142,16403,15761],{"class":148},[142,16405,16406],{"class":201}," true",[142,16408,1319],{"class":152},[142,16410,16411],{"class":144,"line":8012},[142,16412,2557],{"class":152},[142,16414,16415],{"class":144,"line":8039},[142,16416,2598],{"class":148},[142,16418,16419],{"class":144,"line":8044},[142,16420,2538],{"class":152},[142,16422,16423,16425,16428],{"class":144,"line":8050},[142,16424,15761],{"class":148},[142,16426,16427],{"class":201}," false",[142,16429,1319],{"class":152},[142,16431,16432],{"class":144,"line":8062},[142,16433,2557],{"class":152},[142,16435,16436],{"class":144,"line":8074},[142,16437,2215],{"class":152},[142,16439,16440],{"class":144,"line":8086},[142,16441,16442],{"class":211},"    \u002F\u002F私有属性\n",[142,16444,16445],{"class":144,"line":9745},[142,16446,15251],{"class":148},[142,16448,16449,16451],{"class":144,"line":9770},[142,16450,2013],{"class":148},[142,16452,16271],{"class":152},[142,16454,16455,16457],{"class":144,"line":9793},[142,16456,2013],{"class":148},[142,16458,16295],{"class":152},[142,16460,16461,16463],{"class":144,"line":9817},[142,16462,2013],{"class":148},[142,16464,16319],{"class":152},[142,16466,16467],{"class":144,"line":9822},[142,16468,2428],{"emptyLinePlaceholder":69},[142,16470,16471],{"class":144,"line":9827},[142,16472,4023],{"class":152},[142,16474,16475],{"class":144,"line":9832},[142,16476,16477],{"class":211},"\u002F\u002F全局函数判断两个立方体是否相等\n",[142,16479,16480,16482,16484,16486,16488,16491,16493,16495,16498],{"class":144,"line":9841},[142,16481,1383],{"class":148},[142,16483,16336],{"class":1991},[142,16485,153],{"class":152},[142,16487,16341],{"class":1991},[142,16489,16490],{"class":5245}," c1",[142,16492,531],{"class":152},[142,16494,16341],{"class":1991},[142,16496,16497],{"class":5245}," c2",[142,16499,159],{"class":152},[142,16501,16502],{"class":144,"line":9846},[142,16503,1574],{"class":152},[142,16505,16506,16508,16511,16513,16515,16517,16520,16522,16525,16527,16529,16531,16533,16535,16537,16539,16541,16543,16545,16547,16549,16551,16553,16555],{"class":144,"line":9852},[142,16507,4118],{"class":148},[142,16509,16510],{"class":152}," (c1.",[142,16512,16359],{"class":1991},[142,16514,13079],{"class":152},[142,16516,2977],{"class":148},[142,16518,16519],{"class":152}," c2.",[142,16521,16359],{"class":1991},[142,16523,16524],{"class":152},"()) ",[142,16526,1743],{"class":148},[142,16528,16510],{"class":152},[142,16530,16374],{"class":1991},[142,16532,13079],{"class":152},[142,16534,2977],{"class":148},[142,16536,16519],{"class":152},[142,16538,16374],{"class":1991},[142,16540,16524],{"class":152},[142,16542,1743],{"class":148},[142,16544,16510],{"class":152},[142,16546,16388],{"class":1991},[142,16548,13079],{"class":152},[142,16550,2977],{"class":148},[142,16552,16519],{"class":152},[142,16554,16388],{"class":1991},[142,16556,16557],{"class":152},"());\n",[142,16559,16560],{"class":144,"line":9873},[142,16561,1593],{"class":152},[142,16563,16564,16566,16568],{"class":144,"line":9879},[142,16565,156],{"class":148},[142,16567,2001],{"class":1991},[142,16569,2004],{"class":152},[142,16571,16572],{"class":144,"line":9893},[142,16573,1574],{"class":152},[142,16575,16576],{"class":144,"line":9899},[142,16577,16578],{"class":152},"    Cube c1;\n",[142,16580,16581],{"class":144,"line":9926},[142,16582,16583],{"class":211},"    \u002F\u002F输入立方体的长宽高\n",[142,16585,16586,16588,16590,16593,16595],{"class":144,"line":9935},[142,16587,1579],{"class":152},[142,16589,1197],{"class":148},[142,16591,16592],{"class":257},"\"请输入第一个立方体的长、宽、高：\"",[142,16594,1197],{"class":148},[142,16596,1220],{"class":152},[142,16598,16599,16601],{"class":144,"line":9941},[142,16600,2013],{"class":148},[142,16602,16603],{"class":152}," l,w,h,l1,w1,h1;\n",[142,16605,16606,16608,16610,16612,16614,16616,16618],{"class":144,"line":9949},[142,16607,2040],{"class":152},[142,16609,1458],{"class":148},[142,16611,671],{"class":152},[142,16613,1458],{"class":148},[142,16615,948],{"class":152},[142,16617,1458],{"class":148},[142,16619,16156],{"class":152},[142,16621,16622,16625,16628],{"class":144,"line":9954},[142,16623,16624],{"class":152},"    c1.",[142,16626,16627],{"class":1991},"setLwh",[142,16629,16630],{"class":152},"(l,w,h);\n",[142,16632,16634],{"class":144,"line":16633},66,[142,16635,16636],{"class":211},"    \u002F\u002F面积\n",[142,16638,16640,16642,16644,16647,16649,16651,16654,16656,16658],{"class":144,"line":16639},67,[142,16641,1579],{"class":152},[142,16643,1197],{"class":148},[142,16645,16646],{"class":257},"\"立方体的表面积为：\"",[142,16648,1197],{"class":148},[142,16650,14859],{"class":152},[142,16652,16653],{"class":1991},"mianji",[142,16655,2455],{"class":152},[142,16657,1197],{"class":148},[142,16659,1220],{"class":152},[142,16661,16663],{"class":144,"line":16662},68,[142,16664,16665],{"class":211},"    \u002F\u002F体积\n",[142,16667,16669,16671,16673,16676,16678,16680,16683,16685,16687],{"class":144,"line":16668},69,[142,16670,1579],{"class":152},[142,16672,1197],{"class":148},[142,16674,16675],{"class":257},"\"立方体的体积为：\"",[142,16677,1197],{"class":148},[142,16679,14859],{"class":152},[142,16681,16682],{"class":1991},"tiji",[142,16684,2455],{"class":152},[142,16686,1197],{"class":148},[142,16688,1220],{"class":152},[142,16690,16692,16694,16696,16699,16701],{"class":144,"line":16691},70,[142,16693,1579],{"class":152},[142,16695,1197],{"class":148},[142,16697,16698],{"class":257},"\"请输入第二个立方体的长、宽、高：\"",[142,16700,1197],{"class":148},[142,16702,1220],{"class":152},[142,16704,16706,16708,16710,16713,16715,16718,16720],{"class":144,"line":16705},71,[142,16707,2040],{"class":152},[142,16709,1458],{"class":148},[142,16711,16712],{"class":152},"l1",[142,16714,1458],{"class":148},[142,16716,16717],{"class":152},"w1",[142,16719,1458],{"class":148},[142,16721,16722],{"class":152},"h1;\n",[142,16724,16726],{"class":144,"line":16725},72,[142,16727,16728],{"class":152},"    Cube c2;\n",[142,16730,16732,16735,16737],{"class":144,"line":16731},73,[142,16733,16734],{"class":152},"    c2.",[142,16736,16627],{"class":1991},[142,16738,16739],{"class":152},"(l1,w1,h1);\n",[142,16741,16743,16745,16747,16750,16752,16755,16757,16759,16761],{"class":144,"line":16742},74,[142,16744,1579],{"class":152},[142,16746,1197],{"class":148},[142,16748,16749],{"class":257},"\"第二个立方体的表面积为：\"",[142,16751,1197],{"class":148},[142,16753,16754],{"class":152},"c2.",[142,16756,16653],{"class":1991},[142,16758,2455],{"class":152},[142,16760,1197],{"class":148},[142,16762,1220],{"class":152},[142,16764,16766,16768,16770,16773,16775,16777,16779,16781,16783],{"class":144,"line":16765},75,[142,16767,1579],{"class":152},[142,16769,1197],{"class":148},[142,16771,16772],{"class":257},"\"第二个立方体的体积为：\"",[142,16774,1197],{"class":148},[142,16776,16754],{"class":152},[142,16778,16682],{"class":1991},[142,16780,2455],{"class":152},[142,16782,1197],{"class":148},[142,16784,1220],{"class":152},[142,16786,16788],{"class":144,"line":16787},76,[142,16789,2428],{"emptyLinePlaceholder":69},[142,16791,16793],{"class":144,"line":16792},77,[142,16794,16795],{"class":211},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[142,16797,16799,16801,16803,16806,16808],{"class":144,"line":16798},78,[142,16800,1579],{"class":152},[142,16802,1197],{"class":148},[142,16804,16805],{"class":257},"\"内部函数判断结果：\"",[142,16807,1197],{"class":148},[142,16809,1220],{"class":152},[142,16811,16813,16815,16817,16820],{"class":144,"line":16812},79,[142,16814,3129],{"class":148},[142,16816,16510],{"class":152},[142,16818,16819],{"class":1991},"isEqual",[142,16821,16822],{"class":152},"(c2))\n",[142,16824,16826],{"class":144,"line":16825},80,[142,16827,2058],{"class":152},[142,16829,16831,16833,16835,16838,16840],{"class":144,"line":16830},81,[142,16832,3479],{"class":152},[142,16834,1197],{"class":148},[142,16836,16837],{"class":257},"\"两个立方体相等\"",[142,16839,1197],{"class":148},[142,16841,1220],{"class":152},[142,16843,16845],{"class":144,"line":16844},82,[142,16846,2215],{"class":152},[142,16848,16850],{"class":144,"line":16849},83,[142,16851,16852],{"class":148},"    else\n",[142,16854,16856],{"class":144,"line":16855},84,[142,16857,2058],{"class":152},[142,16859,16861,16863,16865,16868,16870],{"class":144,"line":16860},85,[142,16862,3479],{"class":152},[142,16864,1197],{"class":148},[142,16866,16867],{"class":257},"\"两个立方体不相等\"",[142,16869,1197],{"class":148},[142,16871,1220],{"class":152},[142,16873,16875],{"class":144,"line":16874},86,[142,16876,2215],{"class":152},[142,16878,16880],{"class":144,"line":16879},87,[142,16881,2428],{"emptyLinePlaceholder":69},[142,16883,16885,16887,16889,16892,16894],{"class":144,"line":16884},88,[142,16886,1579],{"class":152},[142,16888,1197],{"class":148},[142,16890,16891],{"class":257},"\"全局函数判断结果：\"",[142,16893,1197],{"class":148},[142,16895,1220],{"class":152},[142,16897,16899,16901,16903,16905],{"class":144,"line":16898},89,[142,16900,3129],{"class":148},[142,16902,1686],{"class":152},[142,16904,16819],{"class":1991},[142,16906,16907],{"class":152},"(c1, c2))\n",[142,16909,16911],{"class":144,"line":16910},90,[142,16912,2058],{"class":152},[142,16914,16916,16918,16920,16922,16924],{"class":144,"line":16915},91,[142,16917,3479],{"class":152},[142,16919,1197],{"class":148},[142,16921,16837],{"class":257},[142,16923,1197],{"class":148},[142,16925,1220],{"class":152},[142,16927,16929],{"class":144,"line":16928},92,[142,16930,2215],{"class":152},[142,16932,16934],{"class":144,"line":16933},93,[142,16935,16852],{"class":148},[142,16937,16939],{"class":144,"line":16938},94,[142,16940,2058],{"class":152},[142,16942,16944,16946,16948,16950,16952],{"class":144,"line":16943},95,[142,16945,3479],{"class":152},[142,16947,1197],{"class":148},[142,16949,16867],{"class":257},[142,16951,1197],{"class":148},[142,16953,1220],{"class":152},[142,16955,16957],{"class":144,"line":16956},96,[142,16958,2215],{"class":152},[142,16960,16962],{"class":144,"line":16961},97,[142,16963,1593],{"class":152},[96,16965,16966],{"start":64},[99,16967,16968],{},[302,16969,16970],{},"练习案例2：点和圆的关系",[1160,16972,16973],{},[99,16974,16975],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[133,16977,16979],{"className":135,"code":16978,"language":137,"meta":31,"style":31},"#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",[139,16980,16981,16987,16997,17004,17011,17015,17019,17024,17058,17063,17079,17093,17097,17101,17108,17115,17119,17125,17129,17133,17137,17159,17182,17187,17201,17216,17220,17224,17230,17235,17240,17244,17270,17274,17304,17332,17360,17377,17381,17394,17398,17402,17406,17419,17423,17427,17435,17439,17443,17447,17452,17456,17467,17474,17483,17493,17504,17511,17524,17535,17545,17556,17563,17577,17582,17592,17600],{"__ignoreMap":31},[142,16982,16983,16985],{"class":144,"line":145},[142,16984,1977],{"class":148},[142,16986,1980],{"class":257},[142,16988,16989,16991,16993,16995],{"class":144,"line":64},[142,16990,1985],{"class":148},[142,16992,1988],{"class":148},[142,16994,1992],{"class":1991},[142,16996,1319],{"class":152},[142,16998,16999,17001],{"class":144,"line":1208},[142,17000,1977],{"class":148},[142,17002,17003],{"class":257},"\u003Ccmath>\n",[142,17005,17006,17008],{"class":144,"line":1223},[142,17007,14723],{"class":148},[142,17009,17010],{"class":1991}," Point\n",[142,17012,17013],{"class":144,"line":1229},[142,17014,1574],{"class":152},[142,17016,17017],{"class":144,"line":1243},[142,17018,14745],{"class":148},[142,17020,17021],{"class":144,"line":1249},[142,17022,17023],{"class":211},"    \u002F\u002F赋值\n",[142,17025,17026,17028,17031,17033,17035,17038,17040,17042,17045,17048,17050,17053,17055],{"class":144,"line":1340},[142,17027,14938],{"class":148},[142,17029,17030],{"class":1991}," setPoint",[142,17032,153],{"class":152},[142,17034,14066],{"class":148},[142,17036,17037],{"class":5245}," x",[142,17039,12464],{"class":152},[142,17041,14066],{"class":148},[142,17043,17044],{"class":5245}," y",[142,17046,17047],{"class":152},") { m_x ",[142,17049,198],{"class":148},[142,17051,17052],{"class":152}," x; m_y ",[142,17054,198],{"class":148},[142,17056,17057],{"class":152}," y; }\n",[142,17059,17060],{"class":144,"line":1346},[142,17061,17062],{"class":211},"    \u002F\u002F获取坐标\n",[142,17064,17065,17067,17070,17073,17076],{"class":144,"line":1358},[142,17066,14767],{"class":148},[142,17068,17069],{"class":1991}," getX",[142,17071,17072],{"class":152},"() { ",[142,17074,17075],{"class":148},"return",[142,17077,17078],{"class":152}," m_x; }\n",[142,17080,17081,17083,17086,17088,17090],{"class":144,"line":1640},[142,17082,14767],{"class":148},[142,17084,17085],{"class":1991}," getY",[142,17087,17072],{"class":152},[142,17089,17075],{"class":148},[142,17091,17092],{"class":152}," m_y; }\n",[142,17094,17095],{"class":144,"line":1645},[142,17096,2428],{"emptyLinePlaceholder":69},[142,17098,17099],{"class":144,"line":1651},[142,17100,15251],{"class":148},[142,17102,17103,17105],{"class":144,"line":1656},[142,17104,14767],{"class":148},[142,17106,17107],{"class":152}," m_x;\n",[142,17109,17110,17112],{"class":144,"line":1670},[142,17111,14767],{"class":148},[142,17113,17114],{"class":152}," m_y;\n",[142,17116,17117],{"class":144,"line":1675},[142,17118,4023],{"class":152},[142,17120,17121,17123],{"class":144,"line":1681},[142,17122,14723],{"class":148},[142,17124,14726],{"class":1991},[142,17126,17127],{"class":144,"line":1702},[142,17128,1574],{"class":152},[142,17130,17131],{"class":144,"line":1707},[142,17132,14745],{"class":148},[142,17134,17135],{"class":144,"line":1721},[142,17136,17023],{"class":211},[142,17138,17139,17141,17144,17146,17148,17151,17154,17156],{"class":144,"line":1726},[142,17140,14938],{"class":148},[142,17142,17143],{"class":1991}," setRadius",[142,17145,153],{"class":152},[142,17147,14066],{"class":148},[142,17149,17150],{"class":5245}," r",[142,17152,17153],{"class":152},") { m_r ",[142,17155,198],{"class":148},[142,17157,17158],{"class":152}," r; }\n",[142,17160,17161,17163,17166,17168,17171,17174,17177,17179],{"class":144,"line":1755},[142,17162,14938],{"class":148},[142,17164,17165],{"class":1991}," setCenter",[142,17167,153],{"class":152},[142,17169,17170],{"class":1991},"Point",[142,17172,17173],{"class":5245}," center",[142,17175,17176],{"class":152},") { m_center ",[142,17178,198],{"class":148},[142,17180,17181],{"class":152}," center; }\n",[142,17183,17184],{"class":144,"line":1760},[142,17185,17186],{"class":211},"    \u002F\u002F获取属性\n",[142,17188,17189,17191,17194,17196,17198],{"class":144,"line":1777},[142,17190,14767],{"class":148},[142,17192,17193],{"class":1991}," getRadius",[142,17195,17072],{"class":152},[142,17197,17075],{"class":148},[142,17199,17200],{"class":152}," m_r; }\n",[142,17202,17203,17206,17209,17211,17213],{"class":144,"line":1782},[142,17204,17205],{"class":1991},"    Point",[142,17207,17208],{"class":1991}," getCenter",[142,17210,17072],{"class":152},[142,17212,17075],{"class":148},[142,17214,17215],{"class":152}," m_center; }\n",[142,17217,17218],{"class":144,"line":1787},[142,17219,2428],{"emptyLinePlaceholder":69},[142,17221,17222],{"class":144,"line":1792},[142,17223,15251],{"class":148},[142,17225,17226,17228],{"class":144,"line":1806},[142,17227,14767],{"class":148},[142,17229,14757],{"class":152},[142,17231,17232],{"class":144,"line":1811},[142,17233,17234],{"class":211},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[142,17236,17237],{"class":144,"line":2605},[142,17238,17239],{"class":152},"    Point m_center;\n",[142,17241,17242],{"class":144,"line":2619},[142,17243,4023],{"class":152},[142,17245,17246,17248,17251,17253,17256,17258,17260,17262,17264,17266,17268],{"class":144,"line":2627},[142,17247,5393],{"class":148},[142,17249,17250],{"class":1991}," isInCircle",[142,17252,153],{"class":152},[142,17254,17255],{"class":1991},"Circle",[142,17257,10613],{"class":148},[142,17259,441],{"class":5245},[142,17261,531],{"class":152},[142,17263,17170],{"class":1991},[142,17265,10613],{"class":148},[142,17267,14],{"class":5245},[142,17269,159],{"class":152},[142,17271,17272],{"class":144,"line":2632},[142,17273,1574],{"class":152},[142,17275,17276,17278,17281,17283,17285,17288,17291,17294,17296,17298,17300,17302],{"class":144,"line":2638},[142,17277,14767],{"class":148},[142,17279,17280],{"class":152}," dx ",[142,17282,198],{"class":148},[142,17284,16371],{"class":152},[142,17286,17287],{"class":1991},"getCenter",[142,17289,17290],{"class":152},"().",[142,17292,17293],{"class":1991},"getX",[142,17295,13079],{"class":152},[142,17297,685],{"class":148},[142,17299,15917],{"class":152},[142,17301,17293],{"class":1991},[142,17303,5665],{"class":152},[142,17305,17306,17308,17311,17313,17315,17317,17319,17322,17324,17326,17328,17330],{"class":144,"line":2644},[142,17307,14767],{"class":148},[142,17309,17310],{"class":152}," dy ",[142,17312,198],{"class":148},[142,17314,16371],{"class":152},[142,17316,17287],{"class":1991},[142,17318,17290],{"class":152},[142,17320,17321],{"class":1991},"getY",[142,17323,13079],{"class":152},[142,17325,685],{"class":148},[142,17327,15917],{"class":152},[142,17329,17321],{"class":1991},[142,17331,5665],{"class":152},[142,17333,17334,17336,17339,17341,17344,17347,17349,17351,17353,17355,17357],{"class":144,"line":2649},[142,17335,14767],{"class":148},[142,17337,17338],{"class":152}," distance ",[142,17340,198],{"class":148},[142,17342,17343],{"class":1991}," sqrt",[142,17345,17346],{"class":152},"(dx ",[142,17348,608],{"class":148},[142,17350,17280],{"class":152},[142,17352,634],{"class":148},[142,17354,17310],{"class":152},[142,17356,608],{"class":148},[142,17358,17359],{"class":152}," dy);\n",[142,17361,17362,17364,17367,17369,17371,17374],{"class":144,"line":7977},[142,17363,3129],{"class":148},[142,17365,17366],{"class":152}," (distance ",[142,17368,1063],{"class":148},[142,17370,16371],{"class":152},[142,17372,17373],{"class":1991},"getRadius",[142,17375,17376],{"class":152},"())\n",[142,17378,17379],{"class":144,"line":8001},[142,17380,2058],{"class":152},[142,17382,17383,17385,17387,17390,17392],{"class":144,"line":8006},[142,17384,9698],{"class":152},[142,17386,1197],{"class":148},[142,17388,17389],{"class":257}," \"点在圆内\"",[142,17391,1473],{"class":148},[142,17393,8869],{"class":152},[142,17395,17396],{"class":144,"line":8012},[142,17397,2215],{"class":152},[142,17399,17400],{"class":144,"line":8039},[142,17401,16852],{"class":148},[142,17403,17404],{"class":144,"line":8044},[142,17405,2058],{"class":152},[142,17407,17408,17410,17412,17415,17417],{"class":144,"line":8050},[142,17409,9698],{"class":152},[142,17411,1197],{"class":148},[142,17413,17414],{"class":257}," \"点在圆外\"",[142,17416,1473],{"class":148},[142,17418,8869],{"class":152},[142,17420,17421],{"class":144,"line":8062},[142,17422,2215],{"class":152},[142,17424,17425],{"class":144,"line":8074},[142,17426,1593],{"class":152},[142,17428,17429,17431,17433],{"class":144,"line":8086},[142,17430,156],{"class":148},[142,17432,2001],{"class":1991},[142,17434,2004],{"class":152},[142,17436,17437],{"class":144,"line":9745},[142,17438,1574],{"class":152},[142,17440,17441],{"class":144,"line":9770},[142,17442,15082],{"class":211},[142,17444,17445],{"class":144,"line":9793},[142,17446,14829],{"class":152},[142,17448,17449],{"class":144,"line":9817},[142,17450,17451],{"class":152},"    Point p1;\n",[142,17453,17454],{"class":144,"line":9822},[142,17455,17023],{"class":211},[142,17457,17458,17460,17462,17465],{"class":144,"line":9827},[142,17459,1579],{"class":152},[142,17461,1197],{"class":148},[142,17463,17464],{"class":257},"\"请输入圆的半径：\"",[142,17466,1319],{"class":152},[142,17468,17469,17471],{"class":144,"line":9832},[142,17470,14767],{"class":148},[142,17472,17473],{"class":152}," r;\n",[142,17475,17476,17478,17480],{"class":144,"line":9841},[142,17477,2040],{"class":152},[142,17479,1458],{"class":148},[142,17481,17482],{"class":152},"r;\n",[142,17484,17485,17487,17490],{"class":144,"line":9846},[142,17486,16624],{"class":152},[142,17488,17489],{"class":1991},"setRadius",[142,17491,17492],{"class":152},"(r);\n",[142,17494,17495,17497,17499,17502],{"class":144,"line":9852},[142,17496,1579],{"class":152},[142,17498,1197],{"class":148},[142,17500,17501],{"class":257},"\"请输入圆心坐标：\"",[142,17503,1319],{"class":152},[142,17505,17506,17508],{"class":144,"line":9873},[142,17507,14767],{"class":148},[142,17509,17510],{"class":152}," x, y;\n",[142,17512,17513,17515,17517,17519,17521],{"class":144,"line":9879},[142,17514,2040],{"class":152},[142,17516,1458],{"class":148},[142,17518,973],{"class":152},[142,17520,1458],{"class":148},[142,17522,17523],{"class":152},"y;\n",[142,17525,17526,17529,17532],{"class":144,"line":9893},[142,17527,17528],{"class":152},"    p1.",[142,17530,17531],{"class":1991},"setPoint",[142,17533,17534],{"class":152},"(x, y);\n",[142,17536,17537,17539,17542],{"class":144,"line":9899},[142,17538,16624],{"class":152},[142,17540,17541],{"class":1991},"setCenter",[142,17543,17544],{"class":152},"(p1);\n",[142,17546,17547,17549,17551,17554],{"class":144,"line":9926},[142,17548,1579],{"class":152},[142,17550,1197],{"class":148},[142,17552,17553],{"class":257},"\"请输入测试点坐标：\"",[142,17555,1319],{"class":152},[142,17557,17558,17560],{"class":144,"line":9935},[142,17559,14767],{"class":148},[142,17561,17562],{"class":152}," x1, y1;\n",[142,17564,17565,17567,17569,17572,17574],{"class":144,"line":9941},[142,17566,2040],{"class":152},[142,17568,1458],{"class":148},[142,17570,17571],{"class":152},"x1",[142,17573,1458],{"class":148},[142,17575,17576],{"class":152},"y1;\n",[142,17578,17579],{"class":144,"line":9949},[142,17580,17581],{"class":152},"    Point p2;\n",[142,17583,17584,17587,17589],{"class":144,"line":9954},[142,17585,17586],{"class":152},"    p2.",[142,17588,17531],{"class":1991},[142,17590,17591],{"class":152},"(x1, y1);\n",[142,17593,17594,17597],{"class":144,"line":16633},[142,17595,17596],{"class":1991},"    isInCircle",[142,17598,17599],{"class":152},"(c1, p2);\n",[142,17601,17602],{"class":144,"line":16639},[142,17603,1593],{"class":152},[14,17605,17606],{},"在类中可以让另一个类作为本来的成员",[14,17608,17609],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17611,17612],{},"创建point.h",[133,17614,17616],{"className":135,"code":17615,"language":137,"meta":31,"style":31},"#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",[139,17617,17618,17629,17635,17645,17651,17655,17660,17664,17668,17688,17692,17700,17708,17712,17716,17722,17728],{"__ignoreMap":31},[142,17619,17620,17623,17626],{"class":144,"line":145},[142,17621,17622],{"class":148},"#pragma",[142,17624,17625],{"class":1991}," once",[142,17627,17628],{"class":211}," \u002F\u002F防止头文件重复包含\n",[142,17630,17631,17633],{"class":144,"line":64},[142,17632,1977],{"class":148},[142,17634,1980],{"class":257},[142,17636,17637,17639,17641,17643],{"class":144,"line":1208},[142,17638,1985],{"class":148},[142,17640,1988],{"class":148},[142,17642,1992],{"class":1991},[142,17644,1319],{"class":152},[142,17646,17647,17649],{"class":144,"line":1223},[142,17648,14723],{"class":148},[142,17650,17010],{"class":1991},[142,17652,17653],{"class":144,"line":1229},[142,17654,1574],{"class":152},[142,17656,17657],{"class":144,"line":1243},[142,17658,17659],{"class":211},"\u002F\u002F做好声明与变量定义就可以\n",[142,17661,17662],{"class":144,"line":1249},[142,17663,14745],{"class":148},[142,17665,17666],{"class":144,"line":1340},[142,17667,17023],{"class":211},[142,17669,17670,17672,17674,17676,17678,17680,17682,17684,17686],{"class":144,"line":1346},[142,17671,14938],{"class":148},[142,17673,17030],{"class":1991},[142,17675,153],{"class":152},[142,17677,14066],{"class":148},[142,17679,17037],{"class":5245},[142,17681,12464],{"class":152},[142,17683,14066],{"class":148},[142,17685,17044],{"class":5245},[142,17687,2747],{"class":152},[142,17689,17690],{"class":144,"line":1358},[142,17691,17062],{"class":211},[142,17693,17694,17696,17698],{"class":144,"line":1640},[142,17695,14767],{"class":148},[142,17697,17069],{"class":1991},[142,17699,5665],{"class":152},[142,17701,17702,17704,17706],{"class":144,"line":1645},[142,17703,14767],{"class":148},[142,17705,17085],{"class":1991},[142,17707,5665],{"class":152},[142,17709,17710],{"class":144,"line":1651},[142,17711,2428],{"emptyLinePlaceholder":69},[142,17713,17714],{"class":144,"line":1656},[142,17715,15251],{"class":148},[142,17717,17718,17720],{"class":144,"line":1670},[142,17719,14767],{"class":148},[142,17721,17107],{"class":152},[142,17723,17724,17726],{"class":144,"line":1675},[142,17725,14767],{"class":148},[142,17727,17114],{"class":152},[142,17729,17730],{"class":144,"line":1681},[142,17731,4023],{"class":152},[14,17733,17734],{},"创建point.cpp",[133,17736,17738],{"className":135,"code":17737,"language":137,"meta":31,"style":31},"#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",[139,17739,17740,17747,17752,17786,17790,17806],{"__ignoreMap":31},[142,17741,17742,17744],{"class":144,"line":145},[142,17743,1977],{"class":148},[142,17745,17746],{"class":257},"\u003Cpoint.h>\n",[142,17748,17749],{"class":144,"line":64},[142,17750,17751],{"class":211},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[142,17753,17754,17756,17759,17762,17764,17766,17768,17770,17772,17774,17776,17778,17780,17782,17784],{"class":144,"line":1208},[142,17755,14938],{"class":148},[142,17757,17758],{"class":1991}," Point",[142,17760,17761],{"class":152},"::",[142,17763,17531],{"class":1991},[142,17765,153],{"class":152},[142,17767,14066],{"class":148},[142,17769,17037],{"class":5245},[142,17771,12464],{"class":152},[142,17773,14066],{"class":148},[142,17775,17044],{"class":5245},[142,17777,17047],{"class":152},[142,17779,198],{"class":148},[142,17781,17052],{"class":152},[142,17783,198],{"class":148},[142,17785,17057],{"class":152},[142,17787,17788],{"class":144,"line":1223},[142,17789,17062],{"class":211},[142,17791,17792,17794,17796,17798,17800,17802,17804],{"class":144,"line":1229},[142,17793,14767],{"class":148},[142,17795,17758],{"class":1991},[142,17797,17761],{"class":152},[142,17799,17293],{"class":1991},[142,17801,17072],{"class":152},[142,17803,17075],{"class":148},[142,17805,17078],{"class":152},[142,17807,17808,17810,17812,17814,17816,17818,17820],{"class":144,"line":1243},[142,17809,14767],{"class":148},[142,17811,17758],{"class":1991},[142,17813,17761],{"class":152},[142,17815,17321],{"class":1991},[142,17817,17072],{"class":152},[142,17819,17075],{"class":148},[142,17821,17092],{"class":152},[14,17823,17824],{},"创建circle.h",[133,17826,17828],{"className":135,"code":17827,"language":137,"meta":31,"style":31},"#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",[139,17829,17830,17837,17843,17853,17859,17865,17869,17873,17877,17891,17905,17909,17917,17925,17929,17933,17939,17943,17947],{"__ignoreMap":31},[142,17831,17832,17834],{"class":144,"line":145},[142,17833,17622],{"class":148},[142,17835,17836],{"class":1991}," once\n",[142,17838,17839,17841],{"class":144,"line":64},[142,17840,1977],{"class":148},[142,17842,1980],{"class":257},[142,17844,17845,17847,17849,17851],{"class":144,"line":1208},[142,17846,1985],{"class":148},[142,17848,1988],{"class":148},[142,17850,1992],{"class":1991},[142,17852,1319],{"class":152},[142,17854,17855,17857],{"class":144,"line":1223},[142,17856,1977],{"class":148},[142,17858,17746],{"class":257},[142,17860,17861,17863],{"class":144,"line":1229},[142,17862,14723],{"class":148},[142,17864,14726],{"class":1991},[142,17866,17867],{"class":144,"line":1243},[142,17868,1574],{"class":152},[142,17870,17871],{"class":144,"line":1249},[142,17872,14745],{"class":148},[142,17874,17875],{"class":144,"line":1340},[142,17876,17023],{"class":211},[142,17878,17879,17881,17883,17885,17887,17889],{"class":144,"line":1346},[142,17880,14938],{"class":148},[142,17882,17143],{"class":1991},[142,17884,153],{"class":152},[142,17886,14066],{"class":148},[142,17888,17150],{"class":5245},[142,17890,2747],{"class":152},[142,17892,17893,17895,17897,17899,17901,17903],{"class":144,"line":1358},[142,17894,14938],{"class":148},[142,17896,17165],{"class":1991},[142,17898,153],{"class":152},[142,17900,17170],{"class":1991},[142,17902,17173],{"class":5245},[142,17904,2747],{"class":152},[142,17906,17907],{"class":144,"line":1640},[142,17908,17186],{"class":211},[142,17910,17911,17913,17915],{"class":144,"line":1645},[142,17912,14767],{"class":148},[142,17914,17193],{"class":1991},[142,17916,5665],{"class":152},[142,17918,17919,17921,17923],{"class":144,"line":1651},[142,17920,17205],{"class":1991},[142,17922,17208],{"class":1991},[142,17924,5665],{"class":152},[142,17926,17927],{"class":144,"line":1656},[142,17928,2428],{"emptyLinePlaceholder":69},[142,17930,17931],{"class":144,"line":1670},[142,17932,15251],{"class":148},[142,17934,17935,17937],{"class":144,"line":1675},[142,17936,14767],{"class":148},[142,17938,14757],{"class":152},[142,17940,17941],{"class":144,"line":1681},[142,17942,17234],{"class":211},[142,17944,17945],{"class":144,"line":1702},[142,17946,17239],{"class":152},[142,17948,17949],{"class":144,"line":1707},[142,17950,4023],{"class":152},[14,17952,17953],{},"创建circle.cpp",[133,17955,17957],{"className":135,"code":17956,"language":137,"meta":31,"style":31},"#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",[139,17958,17959,17966,17989,18011,18016,18032],{"__ignoreMap":31},[142,17960,17961,17963],{"class":144,"line":145},[142,17962,1977],{"class":148},[142,17964,17965],{"class":257},"\u003Ccircle.h>\n",[142,17967,17968,17970,17973,17975,17977,17979,17981,17983,17985,17987],{"class":144,"line":64},[142,17969,5393],{"class":148},[142,17971,17972],{"class":1991}," Circle",[142,17974,17761],{"class":152},[142,17976,17489],{"class":1991},[142,17978,153],{"class":152},[142,17980,14066],{"class":148},[142,17982,17150],{"class":5245},[142,17984,17153],{"class":152},[142,17986,198],{"class":148},[142,17988,17158],{"class":152},[142,17990,17991,17993,17995,17997,17999,18001,18003,18005,18007,18009],{"class":144,"line":1208},[142,17992,5393],{"class":148},[142,17994,17972],{"class":1991},[142,17996,17761],{"class":152},[142,17998,17541],{"class":1991},[142,18000,153],{"class":152},[142,18002,17170],{"class":1991},[142,18004,17173],{"class":5245},[142,18006,17176],{"class":152},[142,18008,198],{"class":148},[142,18010,17181],{"class":152},[142,18012,18013],{"class":144,"line":1223},[142,18014,18015],{"class":211},"\u002F\u002F获取属性\n",[142,18017,18018,18020,18022,18024,18026,18028,18030],{"class":144,"line":1229},[142,18019,14066],{"class":148},[142,18021,17972],{"class":1991},[142,18023,17761],{"class":152},[142,18025,17373],{"class":1991},[142,18027,17072],{"class":152},[142,18029,17075],{"class":148},[142,18031,17200],{"class":152},[142,18033,18034,18036,18038,18040,18042,18044,18046],{"class":144,"line":1243},[142,18035,17170],{"class":1991},[142,18037,17972],{"class":1991},[142,18039,17761],{"class":152},[142,18041,17287],{"class":1991},[142,18043,17072],{"class":152},[142,18045,17075],{"class":148},[142,18047,17215],{"class":152},[14,18049,18050],{},"使用封装的类",[133,18052,18054],{"className":135,"code":18053,"language":137,"meta":31,"style":31},"#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",[139,18055,18056,18062,18072,18078,18084,18108,18112,18138,18164,18188,18202,18206,18218,18222,18226,18230,18242,18246,18250,18258,18262,18266,18270,18274,18278,18288,18294,18302,18310,18320,18326,18338,18346,18354,18364,18370,18382,18386,18394,18400],{"__ignoreMap":31},[142,18057,18058,18060],{"class":144,"line":145},[142,18059,1977],{"class":148},[142,18061,1980],{"class":257},[142,18063,18064,18066,18068,18070],{"class":144,"line":64},[142,18065,1985],{"class":148},[142,18067,1988],{"class":148},[142,18069,1992],{"class":1991},[142,18071,1319],{"class":152},[142,18073,18074,18076],{"class":144,"line":1208},[142,18075,1977],{"class":148},[142,18077,17965],{"class":257},[142,18079,18080,18082],{"class":144,"line":1223},[142,18081,1977],{"class":148},[142,18083,17746],{"class":257},[142,18085,18086,18088,18090,18092,18094,18096,18098,18100,18102,18104,18106],{"class":144,"line":1229},[142,18087,5393],{"class":148},[142,18089,17250],{"class":1991},[142,18091,153],{"class":152},[142,18093,17255],{"class":1991},[142,18095,10613],{"class":148},[142,18097,441],{"class":5245},[142,18099,531],{"class":152},[142,18101,17170],{"class":1991},[142,18103,10613],{"class":148},[142,18105,14],{"class":5245},[142,18107,159],{"class":152},[142,18109,18110],{"class":144,"line":1243},[142,18111,1574],{"class":152},[142,18113,18114,18116,18118,18120,18122,18124,18126,18128,18130,18132,18134,18136],{"class":144,"line":1249},[142,18115,14767],{"class":148},[142,18117,17280],{"class":152},[142,18119,198],{"class":148},[142,18121,16371],{"class":152},[142,18123,17287],{"class":1991},[142,18125,17290],{"class":152},[142,18127,17293],{"class":1991},[142,18129,13079],{"class":152},[142,18131,685],{"class":148},[142,18133,15917],{"class":152},[142,18135,17293],{"class":1991},[142,18137,5665],{"class":152},[142,18139,18140,18142,18144,18146,18148,18150,18152,18154,18156,18158,18160,18162],{"class":144,"line":1340},[142,18141,14767],{"class":148},[142,18143,17310],{"class":152},[142,18145,198],{"class":148},[142,18147,16371],{"class":152},[142,18149,17287],{"class":1991},[142,18151,17290],{"class":152},[142,18153,17321],{"class":1991},[142,18155,13079],{"class":152},[142,18157,685],{"class":148},[142,18159,15917],{"class":152},[142,18161,17321],{"class":1991},[142,18163,5665],{"class":152},[142,18165,18166,18168,18170,18172,18174,18176,18178,18180,18182,18184,18186],{"class":144,"line":1346},[142,18167,14767],{"class":148},[142,18169,17338],{"class":152},[142,18171,198],{"class":148},[142,18173,17343],{"class":1991},[142,18175,17346],{"class":152},[142,18177,608],{"class":148},[142,18179,17280],{"class":152},[142,18181,634],{"class":148},[142,18183,17310],{"class":152},[142,18185,608],{"class":148},[142,18187,17359],{"class":152},[142,18189,18190,18192,18194,18196,18198,18200],{"class":144,"line":1358},[142,18191,3129],{"class":148},[142,18193,17366],{"class":152},[142,18195,1063],{"class":148},[142,18197,16371],{"class":152},[142,18199,17373],{"class":1991},[142,18201,17376],{"class":152},[142,18203,18204],{"class":144,"line":1640},[142,18205,2058],{"class":152},[142,18207,18208,18210,18212,18214,18216],{"class":144,"line":1645},[142,18209,9698],{"class":152},[142,18211,1197],{"class":148},[142,18213,17389],{"class":257},[142,18215,1473],{"class":148},[142,18217,8869],{"class":152},[142,18219,18220],{"class":144,"line":1651},[142,18221,2215],{"class":152},[142,18223,18224],{"class":144,"line":1656},[142,18225,16852],{"class":148},[142,18227,18228],{"class":144,"line":1670},[142,18229,2058],{"class":152},[142,18231,18232,18234,18236,18238,18240],{"class":144,"line":1675},[142,18233,9698],{"class":152},[142,18235,1197],{"class":148},[142,18237,17414],{"class":257},[142,18239,1473],{"class":148},[142,18241,8869],{"class":152},[142,18243,18244],{"class":144,"line":1681},[142,18245,2215],{"class":152},[142,18247,18248],{"class":144,"line":1702},[142,18249,1593],{"class":152},[142,18251,18252,18254,18256],{"class":144,"line":1707},[142,18253,156],{"class":148},[142,18255,2001],{"class":1991},[142,18257,2004],{"class":152},[142,18259,18260],{"class":144,"line":1721},[142,18261,1574],{"class":152},[142,18263,18264],{"class":144,"line":1726},[142,18265,15082],{"class":211},[142,18267,18268],{"class":144,"line":1755},[142,18269,14829],{"class":152},[142,18271,18272],{"class":144,"line":1760},[142,18273,17451],{"class":152},[142,18275,18276],{"class":144,"line":1777},[142,18277,17023],{"class":211},[142,18279,18280,18282,18284,18286],{"class":144,"line":1782},[142,18281,1579],{"class":152},[142,18283,1197],{"class":148},[142,18285,17464],{"class":257},[142,18287,1319],{"class":152},[142,18289,18290,18292],{"class":144,"line":1787},[142,18291,14767],{"class":148},[142,18293,17473],{"class":152},[142,18295,18296,18298,18300],{"class":144,"line":1792},[142,18297,2040],{"class":152},[142,18299,1458],{"class":148},[142,18301,17482],{"class":152},[142,18303,18304,18306,18308],{"class":144,"line":1806},[142,18305,16624],{"class":152},[142,18307,17489],{"class":1991},[142,18309,17492],{"class":152},[142,18311,18312,18314,18316,18318],{"class":144,"line":1811},[142,18313,1579],{"class":152},[142,18315,1197],{"class":148},[142,18317,17501],{"class":257},[142,18319,1319],{"class":152},[142,18321,18322,18324],{"class":144,"line":2605},[142,18323,14767],{"class":148},[142,18325,17510],{"class":152},[142,18327,18328,18330,18332,18334,18336],{"class":144,"line":2619},[142,18329,2040],{"class":152},[142,18331,1458],{"class":148},[142,18333,973],{"class":152},[142,18335,1458],{"class":148},[142,18337,17523],{"class":152},[142,18339,18340,18342,18344],{"class":144,"line":2627},[142,18341,17528],{"class":152},[142,18343,17531],{"class":1991},[142,18345,17534],{"class":152},[142,18347,18348,18350,18352],{"class":144,"line":2632},[142,18349,16624],{"class":152},[142,18351,17541],{"class":1991},[142,18353,17544],{"class":152},[142,18355,18356,18358,18360,18362],{"class":144,"line":2638},[142,18357,1579],{"class":152},[142,18359,1197],{"class":148},[142,18361,17553],{"class":257},[142,18363,1319],{"class":152},[142,18365,18366,18368],{"class":144,"line":2644},[142,18367,14767],{"class":148},[142,18369,17562],{"class":152},[142,18371,18372,18374,18376,18378,18380],{"class":144,"line":2649},[142,18373,2040],{"class":152},[142,18375,1458],{"class":148},[142,18377,17571],{"class":152},[142,18379,1458],{"class":148},[142,18381,17576],{"class":152},[142,18383,18384],{"class":144,"line":7977},[142,18385,17581],{"class":152},[142,18387,18388,18390,18392],{"class":144,"line":8001},[142,18389,17586],{"class":152},[142,18391,17531],{"class":1991},[142,18393,17591],{"class":152},[142,18395,18396,18398],{"class":144,"line":8006},[142,18397,17596],{"class":1991},[142,18399,17599],{"class":152},[142,18401,18402],{"class":144,"line":8012},[142,18403,1593],{"class":152},[84,18405,18407],{"id":18406},"_82对象的初始化清理","8.2对象的初始化清理",[1160,18409,18410,18413],{},[99,18411,18412],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[99,18414,18415],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[113,18417,18419],{"id":18418},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18421,18422,18423,18426],{},"对象的",[302,18424,18425],{},"初始化和清理","也是两个非常重要的安全问题",[14,18428,18429],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18431,18432],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18434,18435,18436,18439,18440,18443],{},"c++利用了",[302,18437,18438],{},"构造函数","和",[302,18441,18442],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18445,18446,18447],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[302,18448,18449],{},"我们不提供构造和析构，编译器会提供",[14,18451,18452],{},[302,18453,18454],{},"编译器提供的构造函数和析构函数是空实现。",[1160,18456,18457,18460],{},[99,18458,18459],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[99,18461,18462,18463,18466],{},"析构函数：主要作用在于对象",[302,18464,18465],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18468,18469,18472],{},[302,18470,18471],{},"构造函数语法：",[139,18473,18474],{},"类名(){}",[96,18476,18477,18480,18483,18486,18489],{},[99,18478,18479],{},"构造函数，没有返回值也不写void",[99,18481,18482],{},"函数名称与类名相同",[99,18484,18485],{},"构造函数可以有参数，因此可以发生重载",[99,18487,18488],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[99,18490,18491,18492,582],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[139,18493,18494],{},"Person(){}",[14,18496,18497,13824,18500],{},[302,18498,18499],{},"析构函数语法：",[139,18501,18502],{},"~类名(){}",[96,18504,18505,18508,18511,18517],{},[99,18506,18507],{},"析构函数，没有返回值也不写void",[99,18509,18510],{},"函数名称与类名相同,在名称前加上符号  ~",[99,18512,18513,18514],{},"析构函数不可以有参数，因此",[302,18515,18516],{},"不可以发生重载",[99,18518,18519],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[133,18521,18523],{"className":135,"code":18522,"language":137,"meta":31,"style":31},"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",[139,18524,18525,18531,18535,18539,18544,18551,18555,18568,18572,18577,18584,18588,18601,18605,18609,18613,18617,18625,18629,18637,18641,18645,18653,18657,18662,18666,18673,18677,18690,18694,18702],{"__ignoreMap":31},[142,18526,18527,18529],{"class":144,"line":145},[142,18528,14723],{"class":148},[142,18530,15200],{"class":1991},[142,18532,18533],{"class":144,"line":64},[142,18534,1574],{"class":152},[142,18536,18537],{"class":144,"line":1208},[142,18538,14745],{"class":148},[142,18540,18541],{"class":144,"line":1223},[142,18542,18543],{"class":211},"    \u002F\u002F构造函数\n",[142,18545,18546,18549],{"class":144,"line":1229},[142,18547,18548],{"class":1991},"    Person",[142,18550,2004],{"class":152},[142,18552,18553],{"class":144,"line":1243},[142,18554,2058],{"class":152},[142,18556,18557,18559,18561,18564,18566],{"class":144,"line":1249},[142,18558,9698],{"class":152},[142,18560,1197],{"class":148},[142,18562,18563],{"class":257}," \"Person的构造函数调用\"",[142,18565,1473],{"class":148},[142,18567,8869],{"class":152},[142,18569,18570],{"class":144,"line":1340},[142,18571,2215],{"class":152},[142,18573,18574],{"class":144,"line":1346},[142,18575,18576],{"class":211},"    \u002F\u002F析构函数\n",[142,18578,18579,18582],{"class":144,"line":1358},[142,18580,18581],{"class":1991},"    ~Person",[142,18583,2004],{"class":152},[142,18585,18586],{"class":144,"line":1640},[142,18587,2058],{"class":152},[142,18589,18590,18592,18594,18597,18599],{"class":144,"line":1645},[142,18591,9698],{"class":152},[142,18593,1197],{"class":148},[142,18595,18596],{"class":257}," \"Person的析构函数调用\"",[142,18598,1473],{"class":148},[142,18600,8869],{"class":152},[142,18602,18603],{"class":144,"line":1651},[142,18604,2215],{"class":152},[142,18606,18607],{"class":144,"line":1656},[142,18608,2428],{"emptyLinePlaceholder":69},[142,18610,18611],{"class":144,"line":1670},[142,18612,4023],{"class":152},[142,18614,18615],{"class":144,"line":1675},[142,18616,2428],{"emptyLinePlaceholder":69},[142,18618,18619,18621,18623],{"class":144,"line":1681},[142,18620,5393],{"class":148},[142,18622,5617],{"class":1991},[142,18624,2004],{"class":152},[142,18626,18627],{"class":144,"line":1702},[142,18628,1574],{"class":152},[142,18630,18631,18634],{"class":144,"line":1707},[142,18632,18633],{"class":152},"    Person p;",[142,18635,18636],{"class":211},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[142,18638,18639],{"class":144,"line":1721},[142,18640,1593],{"class":152},[142,18642,18643],{"class":144,"line":1726},[142,18644,2428],{"emptyLinePlaceholder":69},[142,18646,18647,18649,18651],{"class":144,"line":1755},[142,18648,156],{"class":148},[142,18650,2001],{"class":1991},[142,18652,10882],{"class":152},[142,18654,18655],{"class":144,"line":1760},[142,18656,13239],{"class":152},[142,18658,18659],{"class":144,"line":1777},[142,18660,18661],{"class":211},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[142,18663,18664],{"class":144,"line":1782},[142,18665,2428],{"emptyLinePlaceholder":69},[142,18667,18668,18670],{"class":144,"line":1787},[142,18669,18633],{"class":152},[142,18671,18672],{"class":211},"\u002F\u002F只有构造函数\n",[142,18674,18675],{"class":144,"line":1792},[142,18676,2428],{"emptyLinePlaceholder":69},[142,18678,18679,18681,18683,18685,18687],{"class":144,"line":1806},[142,18680,2331],{"class":1991},[142,18682,153],{"class":152},[142,18684,2336],{"class":257},[142,18686,5995],{"class":152},[142,18688,18689],{"class":211},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[142,18691,18692],{"class":144,"line":1811},[142,18693,2428],{"emptyLinePlaceholder":69},[142,18695,18696,18698,18700],{"class":144,"line":2605},[142,18697,4118],{"class":148},[142,18699,4121],{"class":201},[142,18701,1319],{"class":152},[142,18703,18704],{"class":144,"line":2619},[142,18705,1593],{"class":152},[14,18707,18708],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[113,18710,18712],{"id":18711},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18714,18715],{},"两种分类方式：",[14,18717,18718],{},"​\t按参数分为： 有参构造和无参构造",[14,18720,18721],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18723,18724],{},"三种调用方式：",[14,18726,18727],{},"​\t括号法",[14,18729,18730],{},"​\t显示法",[14,18732,18733],{},"​\t隐式转换法",[133,18735,18737],{"className":135,"code":18736,"language":137,"meta":31,"style":31},"#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",[139,18738,18739,18745,18755,18760,18765,18770,18775,18779,18787,18791,18795,18799,18805,18809,18822,18826,18838,18842,18851,18864,18868,18872,18878,18882,18895,18899,18904,18920,18924,18929,18938,18951,18955,18961,18965,18970,18978,18982,18987,18991,18999,19003,19008,19013,19018,19023,19028,19032,19037,19042,19047,19052,19056,19061,19066,19082,19094,19099,19103,19108,19113,19118,19122,19127,19141,19154,19158,19166,19170,19176,19182,19190],{"__ignoreMap":31},[142,18740,18741,18743],{"class":144,"line":145},[142,18742,1977],{"class":148},[142,18744,1980],{"class":257},[142,18746,18747,18749,18751,18753],{"class":144,"line":64},[142,18748,1985],{"class":148},[142,18750,1988],{"class":148},[142,18752,1992],{"class":1991},[142,18754,1319],{"class":152},[142,18756,18757],{"class":144,"line":1208},[142,18758,18759],{"class":211},"\u002F\u002F1.构造函数的分类及调用\n",[142,18761,18762],{"class":144,"line":1223},[142,18763,18764],{"class":211},"\u002F\u002F分类\n",[142,18766,18767],{"class":144,"line":1229},[142,18768,18769],{"class":211},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[142,18771,18772],{"class":144,"line":1243},[142,18773,18774],{"class":211},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[142,18776,18777],{"class":144,"line":1249},[142,18778,2428],{"emptyLinePlaceholder":69},[142,18780,18781,18783,18785],{"class":144,"line":1340},[142,18782,14723],{"class":148},[142,18784,15598],{"class":1991},[142,18786,2702],{"class":152},[142,18788,18789],{"class":144,"line":1346},[142,18790,1574],{"class":152},[142,18792,18793],{"class":144,"line":1358},[142,18794,14745],{"class":148},[142,18796,18797],{"class":144,"line":1640},[142,18798,18543],{"class":211},[142,18800,18801,18803],{"class":144,"line":1645},[142,18802,18548],{"class":1991},[142,18804,2004],{"class":152},[142,18806,18807],{"class":144,"line":1651},[142,18808,2058],{"class":152},[142,18810,18811,18813,18815,18818,18820],{"class":144,"line":1656},[142,18812,3479],{"class":152},[142,18814,1197],{"class":148},[142,18816,18817],{"class":257},"\"Person构造函数无参构造\"",[142,18819,1197],{"class":148},[142,18821,1220],{"class":152},[142,18823,18824],{"class":144,"line":1670},[142,18825,2215],{"class":152},[142,18827,18828,18830,18832,18834,18836],{"class":144,"line":1675},[142,18829,18548],{"class":1991},[142,18831,153],{"class":152},[142,18833,156],{"class":148},[142,18835,1427],{"class":5245},[142,18837,159],{"class":152},[142,18839,18840],{"class":144,"line":1681},[142,18841,2058],{"class":152},[142,18843,18844,18847,18849],{"class":144,"line":1702},[142,18845,18846],{"class":152},"        age",[142,18848,198],{"class":148},[142,18850,6226],{"class":152},[142,18852,18853,18855,18857,18860,18862],{"class":144,"line":1707},[142,18854,3479],{"class":152},[142,18856,1197],{"class":148},[142,18858,18859],{"class":257},"\"Person构造函数有参构造\"",[142,18861,1197],{"class":148},[142,18863,1220],{"class":152},[142,18865,18866],{"class":144,"line":1721},[142,18867,2215],{"class":152},[142,18869,18870],{"class":144,"line":1726},[142,18871,18576],{"class":211},[142,18873,18874,18876],{"class":144,"line":1755},[142,18875,18581],{"class":1991},[142,18877,2004],{"class":152},[142,18879,18880],{"class":144,"line":1760},[142,18881,2058],{"class":152},[142,18883,18884,18886,18888,18891,18893],{"class":144,"line":1777},[142,18885,3479],{"class":152},[142,18887,1197],{"class":148},[142,18889,18890],{"class":257},"\"Person析构函数被调用\"",[142,18892,1197],{"class":148},[142,18894,1220],{"class":152},[142,18896,18897],{"class":144,"line":1782},[142,18898,2215],{"class":152},[142,18900,18901],{"class":144,"line":1787},[142,18902,18903],{"class":211},"    \u002F\u002F拷贝构造函数\n",[142,18905,18906,18908,18910,18912,18914,18916,18918],{"class":144,"line":1792},[142,18907,18548],{"class":1991},[142,18909,153],{"class":152},[142,18911,6821],{"class":148},[142,18913,15598],{"class":1991},[142,18915,10613],{"class":148},[142,18917,14],{"class":5245},[142,18919,159],{"class":152},[142,18921,18922],{"class":144,"line":1806},[142,18923,2058],{"class":152},[142,18925,18926],{"class":144,"line":1811},[142,18927,18928],{"class":211},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[142,18930,18931,18933,18935],{"class":144,"line":2605},[142,18932,18846],{"class":152},[142,18934,198],{"class":148},[142,18936,18937],{"class":152},"p.age;\n",[142,18939,18940,18942,18944,18947,18949],{"class":144,"line":2619},[142,18941,3479],{"class":152},[142,18943,1197],{"class":148},[142,18945,18946],{"class":257},"\"Person拷贝构造函数被调用\"",[142,18948,1197],{"class":148},[142,18950,1220],{"class":152},[142,18952,18953],{"class":144,"line":2627},[142,18954,2215],{"class":152},[142,18956,18957,18959],{"class":144,"line":2632},[142,18958,2013],{"class":148},[142,18960,7826],{"class":152},[142,18962,18963],{"class":144,"line":2638},[142,18964,4023],{"class":152},[142,18966,18967],{"class":144,"line":2644},[142,18968,18969],{"class":211},"\u002F\u002F调用\n",[142,18971,18972,18974,18976],{"class":144,"line":2649},[142,18973,5393],{"class":148},[142,18975,5617],{"class":1991},[142,18977,2004],{"class":152},[142,18979,18980],{"class":144,"line":7977},[142,18981,1574],{"class":152},[142,18983,18984],{"class":144,"line":8001},[142,18985,18986],{"class":211},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[142,18988,18989],{"class":144,"line":8006},[142,18990,1593],{"class":152},[142,18992,18993,18995,18997],{"class":144,"line":8012},[142,18994,5393],{"class":148},[142,18996,5686],{"class":1991},[142,18998,2004],{"class":152},[142,19000,19001],{"class":144,"line":8039},[142,19002,1574],{"class":152},[142,19004,19005],{"class":144,"line":8044},[142,19006,19007],{"class":211},"    \u002F\u002F1.括号法\n",[142,19009,19010],{"class":144,"line":8050},[142,19011,19012],{"class":211},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[142,19014,19015],{"class":144,"line":8062},[142,19016,19017],{"class":211},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[142,19019,19020],{"class":144,"line":8074},[142,19021,19022],{"class":211},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[142,19024,19025],{"class":144,"line":8086},[142,19026,19027],{"class":211},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[142,19029,19030],{"class":144,"line":9745},[142,19031,2428],{"emptyLinePlaceholder":69},[142,19033,19034],{"class":144,"line":9770},[142,19035,19036],{"class":211},"    \u002F\u002F注意事项\n",[142,19038,19039],{"class":144,"line":9793},[142,19040,19041],{"class":211},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[142,19043,19044],{"class":144,"line":9817},[142,19045,19046],{"class":211},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[142,19048,19049],{"class":144,"line":9822},[142,19050,19051],{"class":211},"    \u002F\u002F Person p4();\n",[142,19053,19054],{"class":144,"line":9827},[142,19055,2428],{"emptyLinePlaceholder":69},[142,19057,19058],{"class":144,"line":9832},[142,19059,19060],{"class":211},"    \u002F\u002F2.显示法\n",[142,19062,19063],{"class":144,"line":9841},[142,19064,19065],{"class":152},"    Person p1;\n",[142,19067,19068,19071,19073,19076,19078,19080],{"class":144,"line":9846},[142,19069,19070],{"class":152},"    Person p2",[142,19072,198],{"class":148},[142,19074,19075],{"class":1991},"Person",[142,19077,153],{"class":152},[142,19079,599],{"class":201},[142,19081,2747],{"class":152},[142,19083,19084,19087,19089,19091],{"class":144,"line":9852},[142,19085,19086],{"class":152},"    Person p3",[142,19088,198],{"class":148},[142,19090,19075],{"class":1991},[142,19092,19093],{"class":152},"(p2);\n",[142,19095,19096],{"class":144,"line":9873},[142,19097,19098],{"class":211},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[142,19100,19101],{"class":144,"line":9879},[142,19102,2428],{"emptyLinePlaceholder":69},[142,19104,19105],{"class":144,"line":9893},[142,19106,19107],{"class":211},"    \u002F\u002F 注意事项2\n",[142,19109,19110],{"class":144,"line":9899},[142,19111,19112],{"class":211},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[142,19114,19115],{"class":144,"line":9926},[142,19116,19117],{"class":211},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[142,19119,19120],{"class":144,"line":9935},[142,19121,2428],{"emptyLinePlaceholder":69},[142,19123,19124],{"class":144,"line":9941},[142,19125,19126],{"class":211},"    \u002F\u002F3.隐士转换法\n",[142,19128,19129,19132,19134,19136,19138],{"class":144,"line":9949},[142,19130,19131],{"class":152},"    Person p4",[142,19133,198],{"class":148},[142,19135,599],{"class":201},[142,19137,208],{"class":152},[142,19139,19140],{"class":211},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[142,19142,19143,19146,19148,19151],{"class":144,"line":9954},[142,19144,19145],{"class":152},"    Person p5",[142,19147,198],{"class":148},[142,19149,19150],{"class":152},"p4;",[142,19152,19153],{"class":211}," \u002F\u002F 这里会调用拷贝构造函数\n",[142,19155,19156],{"class":144,"line":16633},[142,19157,1593],{"class":152},[142,19159,19160,19162,19164],{"class":144,"line":16639},[142,19161,156],{"class":148},[142,19163,2001],{"class":1991},[142,19165,2004],{"class":152},[142,19167,19168],{"class":144,"line":16662},[142,19169,1574],{"class":152},[142,19171,19172,19174],{"class":144,"line":16668},[142,19173,5662],{"class":1991},[142,19175,5665],{"class":152},[142,19177,19178,19180],{"class":144,"line":16691},[142,19179,5731],{"class":1991},[142,19181,5665],{"class":152},[142,19183,19184,19186,19188],{"class":144,"line":16705},[142,19185,4118],{"class":148},[142,19187,4121],{"class":201},[142,19189,1319],{"class":152},[142,19191,19192],{"class":144,"line":16725},[142,19193,1593],{"class":152},[14,19195,19196,19199],{},[302,19197,19198],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[113,19201,19203],{"id":19202},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19205,19206],{},"C++中拷贝构造函数调用时机通常有三种情况",[1160,19208,19209,19212,19215],{},[99,19210,19211],{},"使用一个已经创建完毕的对象来初始化一个新对象",[99,19213,19214],{},"值传递的方式给函数参数传值",[99,19216,19217],{},"以值方式返回局部对象",[133,19219,19221],{"className":135,"code":19220,"language":137,"meta":31,"style":31},"#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",[139,19222,19223,19229,19239,19243,19248,19252,19257,19262,19267,19273,19277,19281,19287,19291,19304,19308,19313,19325,19329,19337,19350,19354,19358,19374,19378,19387,19400,19404,19410,19414,19426,19430,19436,19440,19444,19452,19456,19469,19477,19495,19499,19504,19509,19524,19528,19541,19545,19553,19557,19561,19569,19573,19578,19587,19591,19595,19620,19630,19634,19642,19646,19657,19682,19686,19690,19694,19702,19706,19711,19716,19723,19728,19733,19738,19743,19747,19752,19756,19761,19765,19770,19775,19779,19783,19788,19793,19801],{"__ignoreMap":31},[142,19224,19225,19227],{"class":144,"line":145},[142,19226,1977],{"class":148},[142,19228,1980],{"class":257},[142,19230,19231,19233,19235,19237],{"class":144,"line":64},[142,19232,1985],{"class":148},[142,19234,1988],{"class":148},[142,19236,1992],{"class":1991},[142,19238,1319],{"class":152},[142,19240,19241],{"class":144,"line":1208},[142,19242,2428],{"emptyLinePlaceholder":69},[142,19244,19245],{"class":144,"line":1223},[142,19246,19247],{"class":211},"\u002F\u002F拷贝构造函数调用时机\n",[142,19249,19250],{"class":144,"line":1229},[142,19251,2428],{"emptyLinePlaceholder":69},[142,19253,19254],{"class":144,"line":1243},[142,19255,19256],{"class":211},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[142,19258,19259],{"class":144,"line":1249},[142,19260,19261],{"class":211},"\u002F\u002F2.值传递的方式给函数参数传值\n",[142,19263,19264],{"class":144,"line":1340},[142,19265,19266],{"class":211},"\u002F\u002F3.以值方式返回局部对象\n",[142,19268,19269,19271],{"class":144,"line":1346},[142,19270,14723],{"class":148},[142,19272,15200],{"class":1991},[142,19274,19275],{"class":144,"line":1358},[142,19276,1574],{"class":152},[142,19278,19279],{"class":144,"line":1640},[142,19280,14745],{"class":148},[142,19282,19283,19285],{"class":144,"line":1645},[142,19284,18548],{"class":1991},[142,19286,2004],{"class":152},[142,19288,19289],{"class":144,"line":1651},[142,19290,2058],{"class":152},[142,19292,19293,19295,19297,19300,19302],{"class":144,"line":1656},[142,19294,9698],{"class":152},[142,19296,1197],{"class":148},[142,19298,19299],{"class":257}," \"Person的默认构造函数调用\"",[142,19301,1473],{"class":148},[142,19303,8869],{"class":152},[142,19305,19306],{"class":144,"line":1670},[142,19307,2215],{"class":152},[142,19309,19310],{"class":144,"line":1675},[142,19311,19312],{"class":211},"    \u002F\u002F有参构造\n",[142,19314,19315,19317,19319,19321,19323],{"class":144,"line":1681},[142,19316,18548],{"class":1991},[142,19318,153],{"class":152},[142,19320,156],{"class":148},[142,19322,15718],{"class":5245},[142,19324,159],{"class":152},[142,19326,19327],{"class":144,"line":1702},[142,19328,2058],{"class":152},[142,19330,19331,19333,19335],{"class":144,"line":1707},[142,19332,15772],{"class":152},[142,19334,198],{"class":148},[142,19336,7826],{"class":152},[142,19338,19339,19341,19343,19346,19348],{"class":144,"line":1721},[142,19340,9698],{"class":152},[142,19342,1197],{"class":148},[142,19344,19345],{"class":257}," \"Person的有参构造函数调用\"",[142,19347,1473],{"class":148},[142,19349,8869],{"class":152},[142,19351,19352],{"class":144,"line":1726},[142,19353,2215],{"class":152},[142,19355,19356],{"class":144,"line":1755},[142,19357,18903],{"class":211},[142,19359,19360,19362,19364,19366,19368,19370,19372],{"class":144,"line":1760},[142,19361,18548],{"class":1991},[142,19363,153],{"class":152},[142,19365,6821],{"class":148},[142,19367,15598],{"class":1991},[142,19369,10613],{"class":148},[142,19371,14],{"class":5245},[142,19373,159],{"class":152},[142,19375,19376],{"class":144,"line":1777},[142,19377,2058],{"class":152},[142,19379,19380,19382,19384],{"class":144,"line":1782},[142,19381,15772],{"class":152},[142,19383,198],{"class":148},[142,19385,19386],{"class":152}," p.m_Age;\n",[142,19388,19389,19391,19393,19396,19398],{"class":144,"line":1787},[142,19390,9698],{"class":152},[142,19392,1197],{"class":148},[142,19394,19395],{"class":257}," \"Person的拷贝构造函数调用\"",[142,19397,1473],{"class":148},[142,19399,8869],{"class":152},[142,19401,19402],{"class":144,"line":1792},[142,19403,2215],{"class":152},[142,19405,19406,19408],{"class":144,"line":1806},[142,19407,18581],{"class":1991},[142,19409,2004],{"class":152},[142,19411,19412],{"class":144,"line":1811},[142,19413,2058],{"class":152},[142,19415,19416,19418,19420,19422,19424],{"class":144,"line":2605},[142,19417,9698],{"class":152},[142,19419,1197],{"class":148},[142,19421,18596],{"class":257},[142,19423,1473],{"class":148},[142,19425,8869],{"class":152},[142,19427,19428],{"class":144,"line":2619},[142,19429,2215],{"class":152},[142,19431,19432,19434],{"class":144,"line":2627},[142,19433,2013],{"class":148},[142,19435,15695],{"class":152},[142,19437,19438],{"class":144,"line":2632},[142,19439,4023],{"class":152},[142,19441,19442],{"class":144,"line":2638},[142,19443,19256],{"class":211},[142,19445,19446,19448,19450],{"class":144,"line":2644},[142,19447,5393],{"class":148},[142,19449,5617],{"class":1991},[142,19451,2004],{"class":152},[142,19453,19454],{"class":144,"line":2649},[142,19455,1574],{"class":152},[142,19457,19458,19461,19463,19465,19467],{"class":144,"line":7977},[142,19459,19460],{"class":152},"    Person ",[142,19462,7159],{"class":1991},[142,19464,153],{"class":152},[142,19466,853],{"class":201},[142,19468,2747],{"class":152},[142,19470,19471,19473,19475],{"class":144,"line":8001},[142,19472,19460],{"class":152},[142,19474,7062],{"class":1991},[142,19476,17544],{"class":152},[142,19478,19479,19481,19483,19486,19488,19491,19493],{"class":144,"line":8006},[142,19480,1579],{"class":152},[142,19482,1197],{"class":148},[142,19484,19485],{"class":257},"\"P2的年龄为：\"",[142,19487,1197],{"class":148},[142,19489,19490],{"class":152},"p2.m_Age",[142,19492,1197],{"class":148},[142,19494,1220],{"class":152},[142,19496,19497],{"class":144,"line":8012},[142,19498,1593],{"class":152},[142,19500,19501],{"class":144,"line":8039},[142,19502,19503],{"class":211},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[142,19505,19506],{"class":144,"line":8044},[142,19507,19508],{"class":211},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[142,19510,19511,19513,19516,19518,19520,19522],{"class":144,"line":8050},[142,19512,5393],{"class":148},[142,19514,19515],{"class":1991}," doWork",[142,19517,153],{"class":152},[142,19519,19075],{"class":1991},[142,19521,6854],{"class":5245},[142,19523,159],{"class":152},[142,19525,19526],{"class":144,"line":8062},[142,19527,1574],{"class":152},[142,19529,19530,19532,19534,19537,19539],{"class":144,"line":8074},[142,19531,6558],{"class":152},[142,19533,1197],{"class":148},[142,19535,19536],{"class":257}," \"doWork函数调用\"",[142,19538,1473],{"class":148},[142,19540,8869],{"class":152},[142,19542,19543],{"class":144,"line":8086},[142,19544,1593],{"class":152},[142,19546,19547,19549,19551],{"class":144,"line":9745},[142,19548,5393],{"class":148},[142,19550,5686],{"class":1991},[142,19552,2004],{"class":152},[142,19554,19555],{"class":144,"line":9770},[142,19556,1574],{"class":152},[142,19558,19559],{"class":144,"line":9793},[142,19560,15342],{"class":152},[142,19562,19563,19566],{"class":144,"line":9817},[142,19564,19565],{"class":1991},"    doWork",[142,19567,19568],{"class":152},"(p);\n",[142,19570,19571],{"class":144,"line":9822},[142,19572,1593],{"class":152},[142,19574,19575],{"class":144,"line":9827},[142,19576,19577],{"class":211},"\u002F\u002F 3.以值方式返回局部对象\n",[142,19579,19580,19582,19585],{"class":144,"line":9832},[142,19581,19075],{"class":1991},[142,19583,19584],{"class":1991}," doWork2",[142,19586,2004],{"class":152},[142,19588,19589],{"class":144,"line":9841},[142,19590,1574],{"class":152},[142,19592,19593],{"class":144,"line":9846},[142,19594,19065],{"class":152},[142,19596,19597,19599,19601,19603,19605,19607,19609,19611,19613,19615,19617],{"class":144,"line":9852},[142,19598,1579],{"class":152},[142,19600,1197],{"class":148},[142,19602,153],{"class":152},[142,19604,156],{"class":148},[142,19606,6547],{"class":148},[142,19608,582],{"class":152},[142,19610,506],{"class":148},[142,19612,7159],{"class":152},[142,19614,1197],{"class":148},[142,19616,1267],{"class":152},[142,19618,19619],{"class":211},"\u002F\u002F打印p1的地址\n",[142,19621,19622,19624,19627],{"class":144,"line":9873},[142,19623,4118],{"class":148},[142,19625,19626],{"class":152}," p1;",[142,19628,19629],{"class":211},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[142,19631,19632],{"class":144,"line":9879},[142,19633,1593],{"class":152},[142,19635,19636,19638,19640],{"class":144,"line":9893},[142,19637,5393],{"class":148},[142,19639,5758],{"class":1991},[142,19641,2004],{"class":152},[142,19643,19644],{"class":144,"line":9899},[142,19645,1574],{"class":152},[142,19647,19648,19651,19653,19655],{"class":144,"line":9926},[142,19649,19650],{"class":152},"    Person p ",[142,19652,198],{"class":148},[142,19654,19584],{"class":1991},[142,19656,5665],{"class":152},[142,19658,19659,19661,19663,19665,19667,19669,19671,19673,19675,19677,19679],{"class":144,"line":9935},[142,19660,1579],{"class":152},[142,19662,1197],{"class":148},[142,19664,153],{"class":152},[142,19666,156],{"class":148},[142,19668,6547],{"class":148},[142,19670,582],{"class":152},[142,19672,506],{"class":148},[142,19674,14],{"class":152},[142,19676,1197],{"class":148},[142,19678,1267],{"class":152},[142,19680,19681],{"class":211},"\u002F\u002F打印p的地址\n",[142,19683,19684],{"class":144,"line":9941},[142,19685,1593],{"class":152},[142,19687,19688],{"class":144,"line":9949},[142,19689,2428],{"emptyLinePlaceholder":69},[142,19691,19692],{"class":144,"line":9954},[142,19693,2428],{"emptyLinePlaceholder":69},[142,19695,19696,19698,19700],{"class":144,"line":16633},[142,19697,156],{"class":148},[142,19699,2001],{"class":1991},[142,19701,2004],{"class":152},[142,19703,19704],{"class":144,"line":16639},[142,19705,1574],{"class":152},[142,19707,19708],{"class":144,"line":16662},[142,19709,19710],{"class":211},"    \u002F\u002F test01();\n",[142,19712,19713],{"class":144,"line":16668},[142,19714,19715],{"class":211},"    \u002F\u002F test02();\n",[142,19717,19718,19721],{"class":144,"line":16691},[142,19719,19720],{"class":1991},"    test03",[142,19722,5665],{"class":152},[142,19724,19725],{"class":144,"line":16705},[142,19726,19727],{"class":211},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[142,19729,19730],{"class":144,"line":16725},[142,19731,19732],{"class":211},"\u002F\u002F 输出结果如下：\n",[142,19734,19735],{"class":144,"line":16731},[142,19736,19737],{"class":211},"\u002F\u002F Person的默认构造函数调用\n",[142,19739,19740],{"class":144,"line":16742},[142,19741,19742],{"class":211},"\u002F\u002F 0x7fffffffceec\n",[142,19744,19745],{"class":144,"line":16765},[142,19746,19742],{"class":211},[142,19748,19749],{"class":144,"line":16787},[142,19750,19751],{"class":211},"\u002F\u002F Person的析构函数调用\n",[142,19753,19754],{"class":144,"line":16792},[142,19755,2428],{"emptyLinePlaceholder":69},[142,19757,19758],{"class":144,"line":16798},[142,19759,19760],{"class":211},"\u002F\u002F 之前的输出结果如下：\n",[142,19762,19763],{"class":144,"line":16812},[142,19764,19737],{"class":211},[142,19766,19767],{"class":144,"line":16825},[142,19768,19769],{"class":211},"\u002F\u002F 地址\n",[142,19771,19772],{"class":144,"line":16830},[142,19773,19774],{"class":211},"\u002F\u002F Person的拷贝构造函数调用\n",[142,19776,19777],{"class":144,"line":16844},[142,19778,19751],{"class":211},[142,19780,19781],{"class":144,"line":16849},[142,19782,19769],{"class":211},[142,19784,19785],{"class":144,"line":16855},[142,19786,19787],{"class":211},"\u002F\u002F (这两次输出的地址也是不同的) \n",[142,19789,19790],{"class":144,"line":16860},[142,19791,19792],{"class":211},"\u002F\u002F Person的析构函数调用     \n",[142,19794,19795,19797,19799],{"class":144,"line":16874},[142,19796,4118],{"class":148},[142,19798,4121],{"class":201},[142,19800,1319],{"class":152},[142,19802,19803],{"class":144,"line":16879},[142,19804,1593],{"class":152},[14,19806,19807],{},"简化版理解",[133,19809,19811],{"className":135,"code":19810,"language":137,"meta":31,"style":31},"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",[139,19812,19813,19821,19825,19831,19844,19855,19859,19871,19884,19892,19896,19912,19925,19934,19938,19943,19949,19962,19966,19970,19977,19981,19985,19990,19998,20002,20018,20031,20044,20048,20053,20061,20065,20069,20074,20079,20095,20103,20110,20116,20120,20124,20129,20137,20141,20145,20168,20175,20179,20183,20191,20195,20205,20227,20231,20235,20239,20247,20251,20256,20261,20267,20271,20281,20285,20293],{"__ignoreMap":31},[142,19814,19815,19817,19819],{"class":144,"line":145},[142,19816,14723],{"class":148},[142,19818,15598],{"class":1991},[142,19820,15601],{"class":152},[142,19822,19823],{"class":144,"line":64},[142,19824,14745],{"class":148},[142,19826,19827,19829],{"class":144,"line":1208},[142,19828,18548],{"class":1991},[142,19830,10882],{"class":152},[142,19832,19833,19835,19837,19840,19842],{"class":144,"line":1223},[142,19834,9698],{"class":152},[142,19836,1197],{"class":148},[142,19838,19839],{"class":257}," \"无参构造函数!\"",[142,19841,1473],{"class":148},[142,19843,8869],{"class":152},[142,19845,19846,19849,19851,19853],{"class":144,"line":1229},[142,19847,19848],{"class":152},"        mAge ",[142,19850,198],{"class":148},[142,19852,4121],{"class":201},[142,19854,1319],{"class":152},[142,19856,19857],{"class":144,"line":1243},[142,19858,2215],{"class":152},[142,19860,19861,19863,19865,19867,19869],{"class":144,"line":1249},[142,19862,18548],{"class":1991},[142,19864,153],{"class":152},[142,19866,156],{"class":148},[142,19868,15718],{"class":5245},[142,19870,12471],{"class":152},[142,19872,19873,19875,19877,19880,19882],{"class":144,"line":1340},[142,19874,9698],{"class":152},[142,19876,1197],{"class":148},[142,19878,19879],{"class":257}," \"有参构造函数!\"",[142,19881,1473],{"class":148},[142,19883,8869],{"class":152},[142,19885,19886,19888,19890],{"class":144,"line":1346},[142,19887,19848],{"class":152},[142,19889,198],{"class":148},[142,19891,7826],{"class":152},[142,19893,19894],{"class":144,"line":1358},[142,19895,2215],{"class":152},[142,19897,19898,19900,19902,19904,19906,19908,19910],{"class":144,"line":1640},[142,19899,18548],{"class":1991},[142,19901,153],{"class":152},[142,19903,6821],{"class":148},[142,19905,15598],{"class":1991},[142,19907,506],{"class":148},[142,19909,6854],{"class":5245},[142,19911,12471],{"class":152},[142,19913,19914,19916,19918,19921,19923],{"class":144,"line":1645},[142,19915,9698],{"class":152},[142,19917,1197],{"class":148},[142,19919,19920],{"class":257}," \"拷贝构造函数!\"",[142,19922,1473],{"class":148},[142,19924,8869],{"class":152},[142,19926,19927,19929,19931],{"class":144,"line":1651},[142,19928,19848],{"class":152},[142,19930,198],{"class":148},[142,19932,19933],{"class":152}," p.mAge;\n",[142,19935,19936],{"class":144,"line":1656},[142,19937,2215],{"class":152},[142,19939,19940],{"class":144,"line":1670},[142,19941,19942],{"class":211},"    \u002F\u002F析构函数在释放内存之前调用\n",[142,19944,19945,19947],{"class":144,"line":1675},[142,19946,18581],{"class":1991},[142,19948,10882],{"class":152},[142,19950,19951,19953,19955,19958,19960],{"class":144,"line":1681},[142,19952,9698],{"class":152},[142,19954,1197],{"class":148},[142,19956,19957],{"class":257}," \"析构函数!\"",[142,19959,1473],{"class":148},[142,19961,8869],{"class":152},[142,19963,19964],{"class":144,"line":1702},[142,19965,2215],{"class":152},[142,19967,19968],{"class":144,"line":1707},[142,19969,14745],{"class":148},[142,19971,19972,19974],{"class":144,"line":1721},[142,19973,2013],{"class":148},[142,19975,19976],{"class":152}," mAge;\n",[142,19978,19979],{"class":144,"line":1726},[142,19980,4023],{"class":152},[142,19982,19983],{"class":144,"line":1755},[142,19984,2428],{"emptyLinePlaceholder":69},[142,19986,19987],{"class":144,"line":1760},[142,19988,19989],{"class":211},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[142,19991,19992,19994,19996],{"class":144,"line":1777},[142,19993,5393],{"class":148},[142,19995,5617],{"class":1991},[142,19997,10882],{"class":152},[142,19999,20000],{"class":144,"line":1782},[142,20001,2428],{"emptyLinePlaceholder":69},[142,20003,20004,20006,20009,20011,20013,20015],{"class":144,"line":1787},[142,20005,19460],{"class":152},[142,20007,20008],{"class":1991},"man",[142,20010,153],{"class":152},[142,20012,464],{"class":201},[142,20014,5995],{"class":152},[142,20016,20017],{"class":211}," \u002F\u002Fp对象已经创建完毕\n",[142,20019,20020,20022,20025,20028],{"class":144,"line":1792},[142,20021,19460],{"class":152},[142,20023,20024],{"class":1991},"newman",[142,20026,20027],{"class":152},"(man);",[142,20029,20030],{"class":211}," \u002F\u002F调用拷贝构造函数\n",[142,20032,20033,20036,20038,20041],{"class":144,"line":1806},[142,20034,20035],{"class":152},"    Person newman2 ",[142,20037,198],{"class":148},[142,20039,20040],{"class":152}," man;",[142,20042,20043],{"class":211}," \u002F\u002F拷贝构造\n",[142,20045,20046],{"class":144,"line":1811},[142,20047,2428],{"emptyLinePlaceholder":69},[142,20049,20050],{"class":144,"line":2605},[142,20051,20052],{"class":211},"    \u002F\u002FPerson newman3;\n",[142,20054,20055,20058],{"class":144,"line":2619},[142,20056,20057],{"class":211},"    \u002F\u002Fnewman3 = man;",[142,20059,20060],{"class":211}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[142,20062,20063],{"class":144,"line":2627},[142,20064,1593],{"class":152},[142,20066,20067],{"class":144,"line":2632},[142,20068,2428],{"emptyLinePlaceholder":69},[142,20070,20071],{"class":144,"line":2638},[142,20072,20073],{"class":211},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[142,20075,20076],{"class":144,"line":2644},[142,20077,20078],{"class":211},"\u002F\u002F相当于Person p1 = p;\n",[142,20080,20081,20083,20085,20087,20089,20092],{"class":144,"line":2649},[142,20082,5393],{"class":148},[142,20084,19515],{"class":1991},[142,20086,153],{"class":152},[142,20088,19075],{"class":1991},[142,20090,20091],{"class":5245}," p1",[142,20093,20094],{"class":152},") {}\n",[142,20096,20097,20099,20101],{"class":144,"line":7977},[142,20098,5393],{"class":148},[142,20100,5686],{"class":1991},[142,20102,10882],{"class":152},[142,20104,20105,20107],{"class":144,"line":8001},[142,20106,18633],{"class":152},[142,20108,20109],{"class":211}," \u002F\u002F无参构造函数\n",[142,20111,20112,20114],{"class":144,"line":8006},[142,20113,19565],{"class":1991},[142,20115,19568],{"class":152},[142,20117,20118],{"class":144,"line":8012},[142,20119,1593],{"class":152},[142,20121,20122],{"class":144,"line":8039},[142,20123,2428],{"emptyLinePlaceholder":69},[142,20125,20126],{"class":144,"line":8044},[142,20127,20128],{"class":211},"\u002F\u002F3. 以值方式返回局部对象\n",[142,20130,20131,20133,20135],{"class":144,"line":8050},[142,20132,19075],{"class":1991},[142,20134,19584],{"class":1991},[142,20136,2004],{"class":152},[142,20138,20139],{"class":144,"line":8062},[142,20140,1574],{"class":152},[142,20142,20143],{"class":144,"line":8074},[142,20144,19065],{"class":152},[142,20146,20147,20149,20151,20153,20155,20157,20159,20161,20164,20166],{"class":144,"line":8086},[142,20148,6558],{"class":152},[142,20150,1197],{"class":148},[142,20152,1686],{"class":152},[142,20154,156],{"class":148},[142,20156,6547],{"class":148},[142,20158,582],{"class":152},[142,20160,506],{"class":148},[142,20162,20163],{"class":152},"p1 ",[142,20165,1197],{"class":148},[142,20167,8869],{"class":152},[142,20169,20170,20172],{"class":144,"line":9745},[142,20171,4118],{"class":148},[142,20173,20174],{"class":152}," p1;\n",[142,20176,20177],{"class":144,"line":9770},[142,20178,1593],{"class":152},[142,20180,20181],{"class":144,"line":9793},[142,20182,2428],{"emptyLinePlaceholder":69},[142,20184,20185,20187,20189],{"class":144,"line":9817},[142,20186,5393],{"class":148},[142,20188,5758],{"class":1991},[142,20190,2004],{"class":152},[142,20192,20193],{"class":144,"line":9822},[142,20194,1574],{"class":152},[142,20196,20197,20199,20201,20203],{"class":144,"line":9827},[142,20198,19650],{"class":152},[142,20200,198],{"class":148},[142,20202,19584],{"class":1991},[142,20204,5665],{"class":152},[142,20206,20207,20209,20211,20213,20215,20217,20219,20221,20223,20225],{"class":144,"line":9832},[142,20208,6558],{"class":152},[142,20210,1197],{"class":148},[142,20212,1686],{"class":152},[142,20214,156],{"class":148},[142,20216,6547],{"class":148},[142,20218,582],{"class":152},[142,20220,506],{"class":148},[142,20222,11477],{"class":152},[142,20224,1197],{"class":148},[142,20226,8869],{"class":152},[142,20228,20229],{"class":144,"line":9841},[142,20230,1593],{"class":152},[142,20232,20233],{"class":144,"line":9846},[142,20234,2428],{"emptyLinePlaceholder":69},[142,20236,20237],{"class":144,"line":9852},[142,20238,2428],{"emptyLinePlaceholder":69},[142,20240,20241,20243,20245],{"class":144,"line":9873},[142,20242,156],{"class":148},[142,20244,2001],{"class":1991},[142,20246,10882],{"class":152},[142,20248,20249],{"class":144,"line":9879},[142,20250,2428],{"emptyLinePlaceholder":69},[142,20252,20253],{"class":144,"line":9893},[142,20254,20255],{"class":211},"    \u002F\u002Ftest01();\n",[142,20257,20258],{"class":144,"line":9899},[142,20259,20260],{"class":211},"    \u002F\u002Ftest02();\n",[142,20262,20263,20265],{"class":144,"line":9926},[142,20264,19720],{"class":1991},[142,20266,5665],{"class":152},[142,20268,20269],{"class":144,"line":9935},[142,20270,2428],{"emptyLinePlaceholder":69},[142,20272,20273,20275,20277,20279],{"class":144,"line":9941},[142,20274,2331],{"class":1991},[142,20276,153],{"class":152},[142,20278,2336],{"class":257},[142,20280,2747],{"class":152},[142,20282,20283],{"class":144,"line":9949},[142,20284,2428],{"emptyLinePlaceholder":69},[142,20286,20287,20289,20291],{"class":144,"line":9954},[142,20288,4118],{"class":148},[142,20290,4121],{"class":201},[142,20292,1319],{"class":152},[142,20294,20295],{"class":144,"line":16633},[142,20296,1593],{"class":152},[113,20298,20300],{"id":20299},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20302,20303],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20305,20306],{},"1．默认构造函数(无参，函数体为空)",[14,20308,20309],{},"2．默认析构函数(无参，函数体为空)",[14,20311,20312],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20314,20315],{},"构造函数调用规则如下：",[1160,20317,20318,20321],{},[99,20319,20320],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[99,20322,20323],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[133,20325,20327],{"className":135,"code":20326,"language":137,"meta":31,"style":31},"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",[139,20328,20329,20337,20341,20346,20352,20364,20368,20373,20385,20394,20406,20410,20414,20430,20439,20451,20455,20459,20465,20477,20481,20485,20491,20495,20499,20507,20511,20523,20528,20536,20540,20558,20562,20566,20574,20578,20583,20591,20606,20619,20623,20628,20635,20651,20664,20668,20672,20680,20684,20690,20694,20704,20708,20716],{"__ignoreMap":31},[142,20330,20331,20333,20335],{"class":144,"line":145},[142,20332,14723],{"class":148},[142,20334,15598],{"class":1991},[142,20336,15601],{"class":152},[142,20338,20339],{"class":144,"line":64},[142,20340,14745],{"class":148},[142,20342,20343],{"class":144,"line":1208},[142,20344,20345],{"class":211},"    \u002F\u002F无参（默认）构造函数\n",[142,20347,20348,20350],{"class":144,"line":1223},[142,20349,18548],{"class":1991},[142,20351,10882],{"class":152},[142,20353,20354,20356,20358,20360,20362],{"class":144,"line":1229},[142,20355,9698],{"class":152},[142,20357,1197],{"class":148},[142,20359,19839],{"class":257},[142,20361,1473],{"class":148},[142,20363,8869],{"class":152},[142,20365,20366],{"class":144,"line":1243},[142,20367,2215],{"class":152},[142,20369,20370],{"class":144,"line":1249},[142,20371,20372],{"class":211},"    \u002F\u002F有参构造函数\n",[142,20374,20375,20377,20379,20381,20383],{"class":144,"line":1340},[142,20376,18548],{"class":1991},[142,20378,153],{"class":152},[142,20380,156],{"class":148},[142,20382,1427],{"class":5245},[142,20384,12471],{"class":152},[142,20386,20387,20390,20392],{"class":144,"line":1346},[142,20388,20389],{"class":152},"        age ",[142,20391,198],{"class":148},[142,20393,1461],{"class":152},[142,20395,20396,20398,20400,20402,20404],{"class":144,"line":1358},[142,20397,9698],{"class":152},[142,20399,1197],{"class":148},[142,20401,19879],{"class":257},[142,20403,1473],{"class":148},[142,20405,8869],{"class":152},[142,20407,20408],{"class":144,"line":1640},[142,20409,2215],{"class":152},[142,20411,20412],{"class":144,"line":1645},[142,20413,18903],{"class":211},[142,20415,20416,20418,20420,20422,20424,20426,20428],{"class":144,"line":1651},[142,20417,18548],{"class":1991},[142,20419,153],{"class":152},[142,20421,6821],{"class":148},[142,20423,15598],{"class":1991},[142,20425,506],{"class":148},[142,20427,6854],{"class":5245},[142,20429,12471],{"class":152},[142,20431,20432,20434,20436],{"class":144,"line":1656},[142,20433,20389],{"class":152},[142,20435,198],{"class":148},[142,20437,20438],{"class":152}," p.age;\n",[142,20440,20441,20443,20445,20447,20449],{"class":144,"line":1670},[142,20442,9698],{"class":152},[142,20444,1197],{"class":148},[142,20446,19920],{"class":257},[142,20448,1473],{"class":148},[142,20450,8869],{"class":152},[142,20452,20453],{"class":144,"line":1675},[142,20454,2215],{"class":152},[142,20456,20457],{"class":144,"line":1681},[142,20458,18576],{"class":211},[142,20460,20461,20463],{"class":144,"line":1702},[142,20462,18581],{"class":1991},[142,20464,10882],{"class":152},[142,20466,20467,20469,20471,20473,20475],{"class":144,"line":1707},[142,20468,9698],{"class":152},[142,20470,1197],{"class":148},[142,20472,19957],{"class":257},[142,20474,1473],{"class":148},[142,20476,8869],{"class":152},[142,20478,20479],{"class":144,"line":1721},[142,20480,2215],{"class":152},[142,20482,20483],{"class":144,"line":1726},[142,20484,14745],{"class":148},[142,20486,20487,20489],{"class":144,"line":1755},[142,20488,2013],{"class":148},[142,20490,7826],{"class":152},[142,20492,20493],{"class":144,"line":1760},[142,20494,4023],{"class":152},[142,20496,20497],{"class":144,"line":1777},[142,20498,2428],{"emptyLinePlaceholder":69},[142,20500,20501,20503,20505],{"class":144,"line":1782},[142,20502,5393],{"class":148},[142,20504,5617],{"class":1991},[142,20506,2004],{"class":152},[142,20508,20509],{"class":144,"line":1787},[142,20510,1574],{"class":152},[142,20512,20513,20515,20517,20519,20521],{"class":144,"line":1792},[142,20514,19460],{"class":152},[142,20516,7159],{"class":1991},[142,20518,153],{"class":152},[142,20520,803],{"class":201},[142,20522,2747],{"class":152},[142,20524,20525],{"class":144,"line":1806},[142,20526,20527],{"class":211},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[142,20529,20530,20532,20534],{"class":144,"line":1811},[142,20531,19460],{"class":152},[142,20533,7062],{"class":1991},[142,20535,17544],{"class":152},[142,20537,20538],{"class":144,"line":2605},[142,20539,2428],{"emptyLinePlaceholder":69},[142,20541,20542,20544,20546,20549,20551,20554,20556],{"class":144,"line":2619},[142,20543,6558],{"class":152},[142,20545,1197],{"class":148},[142,20547,20548],{"class":257}," \"p2的年龄为： \"",[142,20550,1473],{"class":148},[142,20552,20553],{"class":152}," p2.age ",[142,20555,1197],{"class":148},[142,20557,8869],{"class":152},[142,20559,20560],{"class":144,"line":2627},[142,20561,1593],{"class":152},[142,20563,20564],{"class":144,"line":2632},[142,20565,2428],{"emptyLinePlaceholder":69},[142,20567,20568,20570,20572],{"class":144,"line":2638},[142,20569,5393],{"class":148},[142,20571,5686],{"class":1991},[142,20573,2004],{"class":152},[142,20575,20576],{"class":144,"line":2644},[142,20577,1574],{"class":152},[142,20579,20580],{"class":144,"line":2649},[142,20581,20582],{"class":211},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[142,20584,20585,20588],{"class":144,"line":7977},[142,20586,20587],{"class":152},"    Person p1;",[142,20589,20590],{"class":211}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[142,20592,20593,20595,20597,20599,20601,20603],{"class":144,"line":8001},[142,20594,19460],{"class":152},[142,20596,7062],{"class":1991},[142,20598,153],{"class":152},[142,20600,599],{"class":201},[142,20602,5995],{"class":152},[142,20604,20605],{"class":211}," \u002F\u002F用户提供的有参\n",[142,20607,20608,20610,20613,20616],{"class":144,"line":8006},[142,20609,19460],{"class":152},[142,20611,20612],{"class":1991},"p3",[142,20614,20615],{"class":152},"(p2);",[142,20617,20618],{"class":211}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[142,20620,20621],{"class":144,"line":8012},[142,20622,2428],{"emptyLinePlaceholder":69},[142,20624,20625],{"class":144,"line":8039},[142,20626,20627],{"class":211},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[142,20629,20630,20633],{"class":144,"line":8044},[142,20631,20632],{"class":152},"    Person p4;",[142,20634,20590],{"class":211},[142,20636,20637,20639,20642,20644,20646,20648],{"class":144,"line":8050},[142,20638,19460],{"class":152},[142,20640,20641],{"class":1991},"p5",[142,20643,153],{"class":152},[142,20645,599],{"class":201},[142,20647,5995],{"class":152},[142,20649,20650],{"class":211}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[142,20652,20653,20655,20658,20661],{"class":144,"line":8062},[142,20654,19460],{"class":152},[142,20656,20657],{"class":1991},"p6",[142,20659,20660],{"class":152},"(p5);",[142,20662,20663],{"class":211}," \u002F\u002F用户自己提供拷贝构造\n",[142,20665,20666],{"class":144,"line":8074},[142,20667,1593],{"class":152},[142,20669,20670],{"class":144,"line":8086},[142,20671,2428],{"emptyLinePlaceholder":69},[142,20673,20674,20676,20678],{"class":144,"line":9745},[142,20675,156],{"class":148},[142,20677,2001],{"class":1991},[142,20679,10882],{"class":152},[142,20681,20682],{"class":144,"line":9770},[142,20683,2428],{"emptyLinePlaceholder":69},[142,20685,20686,20688],{"class":144,"line":9793},[142,20687,5662],{"class":1991},[142,20689,5665],{"class":152},[142,20691,20692],{"class":144,"line":9817},[142,20693,2428],{"emptyLinePlaceholder":69},[142,20695,20696,20698,20700,20702],{"class":144,"line":9822},[142,20697,2331],{"class":1991},[142,20699,153],{"class":152},[142,20701,2336],{"class":257},[142,20703,2747],{"class":152},[142,20705,20706],{"class":144,"line":9827},[142,20707,2428],{"emptyLinePlaceholder":69},[142,20709,20710,20712,20714],{"class":144,"line":9832},[142,20711,4118],{"class":148},[142,20713,4121],{"class":201},[142,20715,1319],{"class":152},[142,20717,20718],{"class":144,"line":9841},[142,20719,1593],{"class":152},[113,20721,20723],{"id":20722},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20725,20726],{},"浅拷贝：简单的赋值拷贝操作",[14,20728,20729],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[133,20731,20733],{"className":135,"code":20732,"language":137,"meta":31,"style":31},"#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",[139,20734,20735,20741,20751,20757,20761,20765,20770,20776,20780,20793,20797,20801,20808,20812,20822,20837,20850,20854,20859,20864,20880,20884,20897,20902,20907,20912,20921,20926,20941,20945,20949,20953,20959,20963,20968,20983,20987,20998,21012,21016,21025,21029,21035,21047,21051,21059,21063,21080,21111,21119,21147,21151,21155,21163,21167,21173],{"__ignoreMap":31},[142,20736,20737,20739],{"class":144,"line":145},[142,20738,1977],{"class":148},[142,20740,1980],{"class":257},[142,20742,20743,20745,20747,20749],{"class":144,"line":64},[142,20744,1985],{"class":148},[142,20746,1988],{"class":148},[142,20748,1992],{"class":1991},[142,20750,1319],{"class":152},[142,20752,20753,20755],{"class":144,"line":1208},[142,20754,14723],{"class":148},[142,20756,15200],{"class":1991},[142,20758,20759],{"class":144,"line":1223},[142,20760,1574],{"class":152},[142,20762,20763],{"class":144,"line":1229},[142,20764,14745],{"class":148},[142,20766,20767],{"class":144,"line":1243},[142,20768,20769],{"class":211},"    \u002F\u002F默认构造函数\n",[142,20771,20772,20774],{"class":144,"line":1249},[142,20773,18548],{"class":1991},[142,20775,2004],{"class":152},[142,20777,20778],{"class":144,"line":1340},[142,20779,2058],{"class":152},[142,20781,20782,20784,20786,20789,20791],{"class":144,"line":1346},[142,20783,3479],{"class":152},[142,20785,1197],{"class":148},[142,20787,20788],{"class":257},"\"默认构造函数\"",[142,20790,1197],{"class":148},[142,20792,1220],{"class":152},[142,20794,20795],{"class":144,"line":1358},[142,20796,2215],{"class":152},[142,20798,20799],{"class":144,"line":1640},[142,20800,20372],{"class":211},[142,20802,20803,20805],{"class":144,"line":1645},[142,20804,18581],{"class":1991},[142,20806,20807],{"class":152},"(int age,int height)\n",[142,20809,20810],{"class":144,"line":1651},[142,20811,2058],{"class":152},[142,20813,20814,20817,20819],{"class":144,"line":1656},[142,20815,20816],{"class":152},"        m_Age",[142,20818,198],{"class":148},[142,20820,20821],{"class":152},"age;\n",[142,20823,20824,20827,20829,20831,20834],{"class":144,"line":1670},[142,20825,20826],{"class":152},"        m_Height",[142,20828,11746],{"class":148},[142,20830,2410],{"class":148},[142,20832,20833],{"class":152},"(height);",[142,20835,20836],{"class":211},"\u002F\u002F放到堆区\n",[142,20838,20839,20841,20843,20846,20848],{"class":144,"line":1675},[142,20840,3479],{"class":152},[142,20842,1197],{"class":148},[142,20844,20845],{"class":257},"\"有参构造函数\"",[142,20847,1197],{"class":148},[142,20849,1220],{"class":152},[142,20851,20852],{"class":144,"line":1681},[142,20853,2215],{"class":152},[142,20855,20856],{"class":144,"line":1702},[142,20857,20858],{"class":211},"    \u002F\u002F深拷贝解决上述问题\n",[142,20860,20861],{"class":144,"line":1707},[142,20862,20863],{"class":211},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[142,20865,20866,20868,20870,20872,20874,20876,20878],{"class":144,"line":1721},[142,20867,18548],{"class":1991},[142,20869,153],{"class":152},[142,20871,6821],{"class":148},[142,20873,15598],{"class":1991},[142,20875,10613],{"class":148},[142,20877,14],{"class":5245},[142,20879,159],{"class":152},[142,20881,20882],{"class":144,"line":1726},[142,20883,2058],{"class":152},[142,20885,20886,20888,20890,20893,20895],{"class":144,"line":1755},[142,20887,3479],{"class":152},[142,20889,1197],{"class":148},[142,20891,20892],{"class":257},"\"拷贝构造函数\"",[142,20894,1197],{"class":148},[142,20896,1220],{"class":152},[142,20898,20899],{"class":144,"line":1760},[142,20900,20901],{"class":211},"        \u002F\u002F编译器默认的写如下注释部分\n",[142,20903,20904],{"class":144,"line":1777},[142,20905,20906],{"class":211},"        \u002F\u002Fm_Age=p.m_Age;\n",[142,20908,20909],{"class":144,"line":1782},[142,20910,20911],{"class":211},"        \u002F\u002Fm_Height=p.m_Height;\n",[142,20913,20914,20916,20918],{"class":144,"line":1787},[142,20915,20816],{"class":152},[142,20917,198],{"class":148},[142,20919,20920],{"class":152},"p.m_Age;\n",[142,20922,20923],{"class":144,"line":1792},[142,20924,20925],{"class":211},"        \u002F\u002F深拷贝操作\n",[142,20927,20928,20930,20932,20934,20936,20938],{"class":144,"line":1806},[142,20929,20826],{"class":152},[142,20931,11746],{"class":148},[142,20933,2410],{"class":148},[142,20935,153],{"class":152},[142,20937,608],{"class":148},[142,20939,20940],{"class":152},"p.m_Height);\n",[142,20942,20943],{"class":144,"line":1811},[142,20944,2215],{"class":152},[142,20946,20947],{"class":144,"line":2605},[142,20948,2428],{"emptyLinePlaceholder":69},[142,20950,20951],{"class":144,"line":2619},[142,20952,18576],{"class":211},[142,20954,20955,20957],{"class":144,"line":2627},[142,20956,18581],{"class":1991},[142,20958,2004],{"class":152},[142,20960,20961],{"class":144,"line":2632},[142,20962,2058],{"class":152},[142,20964,20965],{"class":144,"line":2638},[142,20966,20967],{"class":211},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[142,20969,20970,20972,20975,20978,20981],{"class":144,"line":2644},[142,20971,2525],{"class":148},[142,20973,20974],{"class":152},"(m_Height ",[142,20976,20977],{"class":148},"!=",[142,20979,20980],{"class":201}," NULL",[142,20982,159],{"class":152},[142,20984,20985],{"class":144,"line":2649},[142,20986,2538],{"class":152},[142,20988,20989,20992,20995],{"class":144,"line":7977},[142,20990,20991],{"class":148},"            delete",[142,20993,20994],{"class":152}," m_Height;",[142,20996,20997],{"class":211}," \u002F\u002F释放堆区内存\n",[142,20999,21000,21003,21005,21007,21009],{"class":144,"line":8001},[142,21001,21002],{"class":152},"            m_Height",[142,21004,198],{"class":148},[142,21006,2420],{"class":201},[142,21008,208],{"class":152},[142,21010,21011],{"class":211}," \u002F\u002F防止野指针\n",[142,21013,21014],{"class":144,"line":8006},[142,21015,2557],{"class":152},[142,21017,21018,21020,21022],{"class":144,"line":8012},[142,21019,3479],{"class":152},[142,21021,1197],{"class":148},[142,21023,21024],{"class":257},"\"Person的析构函数调用\"\n",[142,21026,21027],{"class":144,"line":8039},[142,21028,2215],{"class":152},[142,21030,21031,21033],{"class":144,"line":8044},[142,21032,2013],{"class":148},[142,21034,15695],{"class":152},[142,21036,21037,21039,21041,21044],{"class":144,"line":8050},[142,21038,2013],{"class":148},[142,21040,6547],{"class":148},[142,21042,21043],{"class":152},"m_Height;",[142,21045,21046],{"class":211}," \u002F\u002F定义一个指针，指向身高\n",[142,21048,21049],{"class":144,"line":8062},[142,21050,4023],{"class":152},[142,21052,21053,21055,21057],{"class":144,"line":8074},[142,21054,5393],{"class":148},[142,21056,5617],{"class":1991},[142,21058,2004],{"class":152},[142,21060,21061],{"class":144,"line":8086},[142,21062,1574],{"class":152},[142,21064,21065,21067,21069,21071,21073,21075,21078],{"class":144,"line":9745},[142,21066,19460],{"class":152},[142,21068,7159],{"class":1991},[142,21070,153],{"class":152},[142,21072,803],{"class":201},[142,21074,531],{"class":152},[142,21076,21077],{"class":201},"160",[142,21079,2747],{"class":152},[142,21081,21082,21084,21086,21089,21091,21094,21096,21099,21101,21104,21106,21108],{"class":144,"line":9770},[142,21083,1579],{"class":152},[142,21085,1197],{"class":148},[142,21087,21088],{"class":257},"\"p1的年龄为:\"",[142,21090,1197],{"class":148},[142,21092,21093],{"class":152},"p1.m_Age",[142,21095,1197],{"class":148},[142,21097,21098],{"class":257},"\"身高为：\"",[142,21100,6448],{"class":148},[142,21102,21103],{"class":152},"p1.m_Height",[142,21105,1197],{"class":148},[142,21107,1267],{"class":152},[142,21109,21110],{"class":211},"  \u002F\u002F18\n",[142,21112,21113,21115,21117],{"class":144,"line":9793},[142,21114,19460],{"class":152},[142,21116,7062],{"class":1991},[142,21118,17544],{"class":152},[142,21120,21121,21123,21125,21128,21130,21132,21134,21136,21138,21141,21143,21145],{"class":144,"line":9817},[142,21122,1579],{"class":152},[142,21124,1197],{"class":148},[142,21126,21127],{"class":257},"\"p2的年龄为：\"",[142,21129,1197],{"class":148},[142,21131,19490],{"class":152},[142,21133,1197],{"class":148},[142,21135,21098],{"class":257},[142,21137,6448],{"class":148},[142,21139,21140],{"class":152},"p2.m_Height",[142,21142,1197],{"class":148},[142,21144,1267],{"class":152},[142,21146,21110],{"class":211},[142,21148,21149],{"class":144,"line":9822},[142,21150,13239],{"class":152},[142,21152,21153],{"class":144,"line":9827},[142,21154,1593],{"class":152},[142,21156,21157,21159,21161],{"class":144,"line":9832},[142,21158,156],{"class":148},[142,21160,2001],{"class":1991},[142,21162,2004],{"class":152},[142,21164,21165],{"class":144,"line":9841},[142,21166,1574],{"class":152},[142,21168,21169,21171],{"class":144,"line":9846},[142,21170,5662],{"class":1991},[142,21172,5665],{"class":152},[142,21174,21175],{"class":144,"line":9852},[142,21176,1593],{"class":152},[14,21178,21179],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21181,21182],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21184,21185],{},[29,21186],{"alt":31,"src":21187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21189,21190],{},"浅拷贝问题要使用深拷贝来解决",[14,21192,21193],{},[29,21194],{"alt":31,"src":21195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21197,21198],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[113,21200,21202],{"id":21201},"_826初始化列表","8.2.6初始化列表",[14,21204,21205],{},"作用：初始化属性",[14,21207,5210],{},[133,21209,21212],{"className":21210,"code":21211,"language":5216},[5214],"构造函数():属性1(值1),属性2(值2).....{}\n",[139,21213,21211],{"__ignoreMap":31},[14,21215,21216],{},"例子",[133,21218,21220],{"className":135,"code":21219,"language":137,"meta":31,"style":31},"#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",[139,21221,21222,21228,21238,21244,21248,21253,21257,21262,21267,21272,21277,21282,21287,21291,21296,21301,21344,21353,21371,21389,21407,21411,21415,21422,21429,21436,21440,21444,21452,21456,21460,21480,21489,21493,21497,21507,21511,21519],{"__ignoreMap":31},[142,21223,21224,21226],{"class":144,"line":145},[142,21225,1977],{"class":148},[142,21227,1980],{"class":257},[142,21229,21230,21232,21234,21236],{"class":144,"line":64},[142,21231,1985],{"class":148},[142,21233,1988],{"class":148},[142,21235,1992],{"class":1991},[142,21237,1319],{"class":152},[142,21239,21240,21242],{"class":144,"line":1208},[142,21241,14723],{"class":148},[142,21243,15200],{"class":1991},[142,21245,21246],{"class":144,"line":1223},[142,21247,1574],{"class":152},[142,21249,21250],{"class":144,"line":1229},[142,21251,21252],{"class":148},"    public:\n",[142,21254,21255],{"class":144,"line":1243},[142,21256,2428],{"emptyLinePlaceholder":69},[142,21258,21259],{"class":144,"line":1249},[142,21260,21261],{"class":211},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[142,21263,21264],{"class":144,"line":1340},[142,21265,21266],{"class":211},"    \u002F\u002FPerson(int a, int b, int c) {\n",[142,21268,21269],{"class":144,"line":1346},[142,21270,21271],{"class":211},"    \u002F\u002F  m_A = a;\n",[142,21273,21274],{"class":144,"line":1358},[142,21275,21276],{"class":211},"    \u002F\u002F  m_B = b;\n",[142,21278,21279],{"class":144,"line":1640},[142,21280,21281],{"class":211},"    \u002F\u002F  m_C = c;\n",[142,21283,21284],{"class":144,"line":1645},[142,21285,21286],{"class":211},"    \u002F\u002F}\n",[142,21288,21289],{"class":144,"line":1651},[142,21290,2428],{"emptyLinePlaceholder":69},[142,21292,21293],{"class":144,"line":1656},[142,21294,21295],{"class":211},"    \u002F\u002F初始化列表方式初始化\n",[142,21297,21298],{"class":144,"line":1670},[142,21299,21300],{"class":211},"    \u002F\u002F使用有参构造函数\n",[142,21302,21303,21305,21307,21309,21311,21313,21315,21317,21319,21321,21323,21326,21329,21332,21335,21338,21341],{"class":144,"line":1675},[142,21304,18548],{"class":1991},[142,21306,153],{"class":152},[142,21308,156],{"class":148},[142,21310,1427],{"class":5245},[142,21312,12464],{"class":152},[142,21314,156],{"class":148},[142,21316,2861],{"class":5245},[142,21318,12464],{"class":152},[142,21320,156],{"class":148},[142,21322,2877],{"class":5245},[142,21324,21325],{"class":152},") :",[142,21327,21328],{"class":1991},"m_A",[142,21330,21331],{"class":152},"(a), ",[142,21333,21334],{"class":1991},"m_B",[142,21336,21337],{"class":152},"(b), ",[142,21339,21340],{"class":1991},"m_C",[142,21342,21343],{"class":152},"(c) {}\n",[142,21345,21346,21348,21351],{"class":144,"line":1681},[142,21347,14938],{"class":148},[142,21349,21350],{"class":1991}," PrintPerson",[142,21352,10882],{"class":152},[142,21354,21355,21357,21359,21362,21364,21367,21369],{"class":144,"line":1702},[142,21356,9698],{"class":152},[142,21358,1197],{"class":148},[142,21360,21361],{"class":257}," \"mA:\"",[142,21363,1473],{"class":148},[142,21365,21366],{"class":152}," m_A ",[142,21368,1197],{"class":148},[142,21370,8869],{"class":152},[142,21372,21373,21375,21377,21380,21382,21385,21387],{"class":144,"line":1707},[142,21374,9698],{"class":152},[142,21376,1197],{"class":148},[142,21378,21379],{"class":257}," \"mB:\"",[142,21381,1473],{"class":148},[142,21383,21384],{"class":152}," m_B ",[142,21386,1197],{"class":148},[142,21388,8869],{"class":152},[142,21390,21391,21393,21395,21398,21400,21403,21405],{"class":144,"line":1721},[142,21392,9698],{"class":152},[142,21394,1197],{"class":148},[142,21396,21397],{"class":257}," \"mC:\"",[142,21399,1473],{"class":148},[142,21401,21402],{"class":152}," m_C ",[142,21404,1197],{"class":148},[142,21406,8869],{"class":152},[142,21408,21409],{"class":144,"line":1726},[142,21410,2215],{"class":152},[142,21412,21413],{"class":144,"line":1755},[142,21414,15251],{"class":148},[142,21416,21417,21419],{"class":144,"line":1760},[142,21418,2013],{"class":148},[142,21420,21421],{"class":152}," m_A;\n",[142,21423,21424,21426],{"class":144,"line":1777},[142,21425,2013],{"class":148},[142,21427,21428],{"class":152}," m_B;\n",[142,21430,21431,21433],{"class":144,"line":1782},[142,21432,2013],{"class":148},[142,21434,21435],{"class":152}," m_C;\n",[142,21437,21438],{"class":144,"line":1787},[142,21439,4023],{"class":152},[142,21441,21442],{"class":144,"line":1792},[142,21443,2428],{"emptyLinePlaceholder":69},[142,21445,21446,21448,21450],{"class":144,"line":1806},[142,21447,156],{"class":148},[142,21449,2001],{"class":1991},[142,21451,6007],{"class":152},[142,21453,21454],{"class":144,"line":1811},[142,21455,1574],{"class":152},[142,21457,21458],{"class":144,"line":2605},[142,21459,2428],{"emptyLinePlaceholder":69},[142,21461,21462,21464,21466,21468,21470,21472,21474,21476,21478],{"class":144,"line":2619},[142,21463,19460],{"class":152},[142,21465,14],{"class":1991},[142,21467,153],{"class":152},[142,21469,370],{"class":201},[142,21471,12464],{"class":152},[142,21473,230],{"class":201},[142,21475,12464],{"class":152},[142,21477,224],{"class":201},[142,21479,2747],{"class":152},[142,21481,21482,21484,21487],{"class":144,"line":2627},[142,21483,15895],{"class":152},[142,21485,21486],{"class":1991},"PrintPerson",[142,21488,5665],{"class":152},[142,21490,21491],{"class":144,"line":2632},[142,21492,2428],{"emptyLinePlaceholder":69},[142,21494,21495],{"class":144,"line":2638},[142,21496,2428],{"emptyLinePlaceholder":69},[142,21498,21499,21501,21503,21505],{"class":144,"line":2644},[142,21500,2331],{"class":1991},[142,21502,153],{"class":152},[142,21504,2336],{"class":257},[142,21506,2747],{"class":152},[142,21508,21509],{"class":144,"line":2649},[142,21510,2428],{"emptyLinePlaceholder":69},[142,21512,21513,21515,21517],{"class":144,"line":7977},[142,21514,4118],{"class":148},[142,21516,4121],{"class":201},[142,21518,1319],{"class":152},[142,21520,21521],{"class":144,"line":8001},[142,21522,1593],{"class":152},[14,21524,21525,21526,21529,21530],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[302,21527,21528],{},"参数名就是定义的对象属性","，",[302,21531,21532],{},"属性后面的值为有参构造函数的形参",[133,21534,21536],{"className":135,"code":21535,"language":137,"meta":31,"style":31},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[139,21537,21538],{"__ignoreMap":31},[142,21539,21540,21542,21544,21546,21549,21551,21554,21556,21559,21561,21564,21566,21569,21571],{"class":144,"line":145},[142,21541,19075],{"class":1991},[142,21543,153],{"class":152},[142,21545,156],{"class":148},[142,21547,21548],{"class":152}," a.",[142,21550,156],{"class":148},[142,21552,21553],{"class":152}," b,",[142,21555,156],{"class":148},[142,21557,21558],{"class":152}," b):",[142,21560,21328],{"class":1991},[142,21562,21563],{"class":152},"(a),",[142,21565,21334],{"class":1991},[142,21567,21568],{"class":152},"(c),",[142,21570,21340],{"class":1991},[142,21572,21573],{"class":152},"(b) {}\n",[113,21575,21577],{"id":21576},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21579,21580],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21582,14662],{},[133,21584,21586],{"className":135,"code":21585,"language":137,"meta":31,"style":31},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[139,21587,21588,21593,21598,21602,21607,21611],{"__ignoreMap":31},[142,21589,21590],{"class":144,"line":145},[142,21591,21592],{"class":152},"A{};\n",[142,21594,21595],{"class":144,"line":64},[142,21596,21597],{"class":152},"B\n",[142,21599,21600],{"class":144,"line":1208},[142,21601,1574],{"class":152},[142,21603,21604],{"class":144,"line":1223},[142,21605,21606],{"class":152},"    A a;\n",[142,21608,21609],{"class":144,"line":1229},[142,21610,1593],{"class":152},[142,21612,21613],{"class":144,"line":1243},[142,21614,21615],{"class":211},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21617,21618],{},"案例",[133,21620,21622],{"className":135,"code":21621,"language":137,"meta":31,"style":31},"\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",[139,21623,21624,21629,21636,21640,21645,21650,21664,21668,21678,21689,21693,21700,21704,21717,21721,21726,21731,21735,21741,21745,21749,21753,21784,21788,21799,21803,21809,21813,21826,21830,21834,21838,21843,21848,21852,21860,21864,21881,21900,21904,21912,21916,21922],{"__ignoreMap":31},[142,21625,21626],{"class":144,"line":145},[142,21627,21628],{"class":211},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[142,21630,21631,21633],{"class":144,"line":64},[142,21632,14723],{"class":148},[142,21634,21635],{"class":1991}," Phone\n",[142,21637,21638],{"class":144,"line":1208},[142,21639,1574],{"class":152},[142,21641,21642],{"class":144,"line":1223},[142,21643,21644],{"class":152},"public：\n",[142,21646,21647],{"class":144,"line":1229},[142,21648,21649],{"class":211},"    \u002F\u002F 赋值(构造函数)\n",[142,21651,21652,21655,21657,21659,21662],{"class":144,"line":1243},[142,21653,21654],{"class":1991},"    Phone",[142,21656,153],{"class":152},[142,21658,14946],{"class":1991},[142,21660,21661],{"class":5245}," pName",[142,21663,159],{"class":152},[142,21665,21666],{"class":144,"line":1249},[142,21667,2058],{"class":152},[142,21669,21670,21673,21675],{"class":144,"line":1340},[142,21671,21672],{"class":152},"        m_pName",[142,21674,198],{"class":148},[142,21676,21677],{"class":152},"pName;\n",[142,21679,21680,21682,21684,21687],{"class":144,"line":1346},[142,21681,3479],{"class":152},[142,21683,1197],{"class":148},[142,21685,21686],{"class":257},"\"Phone的构造函数调用\"",[142,21688,1319],{"class":152},[142,21690,21691],{"class":144,"line":1358},[142,21692,2215],{"class":152},[142,21694,21695,21698],{"class":144,"line":1640},[142,21696,21697],{"class":1991},"    ~Phone",[142,21699,2004],{"class":152},[142,21701,21702],{"class":144,"line":1645},[142,21703,2058],{"class":152},[142,21705,21706,21708,21710,21713,21715],{"class":144,"line":1651},[142,21707,3479],{"class":152},[142,21709,1197],{"class":148},[142,21711,21712],{"class":257},"\"Phone析构函数调用\"",[142,21714,1197],{"class":148},[142,21716,1220],{"class":152},[142,21718,21719],{"class":144,"line":1656},[142,21720,2215],{"class":152},[142,21722,21723],{"class":144,"line":1670},[142,21724,21725],{"class":211},"    \u002F\u002F\n",[142,21727,21728],{"class":144,"line":1675},[142,21729,21730],{"class":152},"    string m_PName;\n",[142,21732,21733],{"class":144,"line":1681},[142,21734,4023],{"class":152},[142,21736,21737,21739],{"class":144,"line":1702},[142,21738,14723],{"class":148},[142,21740,15200],{"class":1991},[142,21742,21743],{"class":144,"line":1707},[142,21744,1574],{"class":152},[142,21746,21747],{"class":144,"line":1721},[142,21748,14745],{"class":148},[142,21750,21751],{"class":144,"line":1726},[142,21752,17023],{"class":211},[142,21754,21755,21757,21759,21761,21763,21765,21767,21770,21773,21775,21778,21781],{"class":144,"line":1755},[142,21756,18548],{"class":1991},[142,21758,153],{"class":152},[142,21760,14946],{"class":1991},[142,21762,14949],{"class":5245},[142,21764,531],{"class":152},[142,21766,14946],{"class":1991},[142,21768,21769],{"class":5245}," pname",[142,21771,21772],{"class":152},"):",[142,21774,15039],{"class":1991},[142,21776,21777],{"class":152},"(name),m_phone.",[142,21779,21780],{"class":1991},"m_PName",[142,21782,21783],{"class":152},"(pname) \n",[142,21785,21786],{"class":144,"line":1760},[142,21787,2058],{"class":152},[142,21789,21790,21792,21794,21797],{"class":144,"line":1777},[142,21791,3479],{"class":152},[142,21793,1197],{"class":148},[142,21795,21796],{"class":257},"\"Person的构造函数调用\"",[142,21798,1319],{"class":152},[142,21800,21801],{"class":144,"line":1782},[142,21802,2215],{"class":152},[142,21804,21805,21807],{"class":144,"line":1787},[142,21806,18581],{"class":1991},[142,21808,2004],{"class":152},[142,21810,21811],{"class":144,"line":1792},[142,21812,2058],{"class":152},[142,21814,21815,21817,21819,21822,21824],{"class":144,"line":1806},[142,21816,3479],{"class":152},[142,21818,1197],{"class":148},[142,21820,21821],{"class":257},"\"Person析构函数调用\"",[142,21823,1197],{"class":148},[142,21825,1220],{"class":152},[142,21827,21828],{"class":144,"line":1811},[142,21829,2215],{"class":152},[142,21831,21832],{"class":144,"line":2605},[142,21833,7809],{"class":211},[142,21835,21836],{"class":144,"line":2619},[142,21837,14921],{"class":152},[142,21839,21840],{"class":144,"line":2627},[142,21841,21842],{"class":211},"    \u002F\u002F手机\n",[142,21844,21845],{"class":144,"line":2632},[142,21846,21847],{"class":152},"    Phone m_Phone;\n",[142,21849,21850],{"class":144,"line":2638},[142,21851,4023],{"class":152},[142,21853,21854,21856,21858],{"class":144,"line":2644},[142,21855,5393],{"class":148},[142,21857,5617],{"class":1991},[142,21859,2004],{"class":152},[142,21861,21862],{"class":144,"line":2649},[142,21863,1574],{"class":152},[142,21865,21866,21868,21870,21872,21874,21876,21879],{"class":144,"line":7977},[142,21867,19460],{"class":152},[142,21869,14],{"class":1991},[142,21871,153],{"class":152},[142,21873,7945],{"class":257},[142,21875,531],{"class":152},[142,21877,21878],{"class":257},"\"安卓\"",[142,21880,2747],{"class":152},[142,21882,21883,21885,21887,21890,21892,21895,21897],{"class":144,"line":8001},[142,21884,1579],{"class":152},[142,21886,1197],{"class":148},[142,21888,21889],{"class":152},"p.Name",[142,21891,1197],{"class":148},[142,21893,21894],{"class":257},"\"拿着：\"",[142,21896,1197],{"class":148},[142,21898,21899],{"class":152},"p.m_phone.m_PName;\n",[142,21901,21902],{"class":144,"line":8006},[142,21903,1593],{"class":152},[142,21905,21906,21908,21910],{"class":144,"line":8012},[142,21907,156],{"class":148},[142,21909,2001],{"class":1991},[142,21911,2004],{"class":152},[142,21913,21914],{"class":144,"line":8039},[142,21915,1574],{"class":152},[142,21917,21918,21920],{"class":144,"line":8044},[142,21919,5662],{"class":1991},[142,21921,5665],{"class":152},[142,21923,21924],{"class":144,"line":8050},[142,21925,1593],{"class":152},[14,21927,9054],{},[133,21929,21931],{"className":135,"code":21930,"language":137,"meta":31,"style":31},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[139,21932,21933,21938],{"__ignoreMap":31},[142,21934,21935],{"class":144,"line":145},[142,21936,21937],{"class":211},"    \u002F\u002F不需要写这个：\n",[142,21939,21940],{"class":144,"line":64},[142,21941,21942],{"class":211},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21944,21945],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[133,21947,21949],{"className":135,"code":21948,"language":137,"meta":31,"style":31},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[139,21950,21951],{"__ignoreMap":31},[142,21952,21953,21955,21958,21960,21963,21966],{"class":144,"line":145},[142,21954,19075],{"class":1991},[142,21956,21957],{"class":152},"(string name.string pname):",[142,21959,15039],{"class":1991},[142,21961,21962],{"class":152},"(name),",[142,21964,21965],{"class":1991},"m_phone",[142,21967,21968],{"class":152},"(pname) {}\n",[14,21970,21971,21972,198,21975],{},"采用的是隐式转换法，实际为如下：\n",[139,21973,21974],{},"m_phone(pname)",[139,21976,21977],{},"Phone m_phone=pname",[14,21979,21980,21983],{},[302,21981,21982],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,21985,21986],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[113,21988,21990],{"id":21989},"_828静态对象","8.2.8静态对象",[14,21992,21993],{},"静态对象在成员对象前static，称为静态对象",[14,21995,21996],{},"静态对象分为两类：",[96,21998,21999],{},[99,22000,22001],{},"静态成员变量",[1160,22003,22004,22007,22010],{},[99,22005,22006],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[99,22008,22009],{},"②在编译阶段分配内存",[99,22011,22012],{},"③类内声明，类外初始化",[96,22014,22015],{"start":64},[99,22016,22017],{},"静态成员函数",[1160,22019,22020,22023],{},[99,22021,22022],{},"①所有对象共享同一个函数",[99,22024,22025],{},"②静态成员函数只能访问静态成员变量",[22027,22028,22030],"h4",{"id":22029},"_8281静态成员变量","8.2.8.1静态成员变量",[133,22032,22034],{"className":135,"code":22033,"language":137,"meta":31,"style":31},"#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",[139,22035,22036,22042,22052,22058,22062,22066,22071,22076,22081,22089,22093,22097,22101,22109,22113,22117,22122,22135,22139,22147,22151,22157],{"__ignoreMap":31},[142,22037,22038,22040],{"class":144,"line":145},[142,22039,1977],{"class":148},[142,22041,1980],{"class":257},[142,22043,22044,22046,22048,22050],{"class":144,"line":64},[142,22045,1985],{"class":148},[142,22047,1988],{"class":148},[142,22049,1992],{"class":1991},[142,22051,1319],{"class":152},[142,22053,22054,22056],{"class":144,"line":1208},[142,22055,14723],{"class":148},[142,22057,15200],{"class":1991},[142,22059,22060],{"class":144,"line":1223},[142,22061,1574],{"class":152},[142,22063,22064],{"class":144,"line":1229},[142,22065,14745],{"class":148},[142,22067,22068],{"class":144,"line":1243},[142,22069,22070],{"class":211},"    \u002F\u002F非静态成员变量\n",[142,22072,22073],{"class":144,"line":1249},[142,22074,22075],{"class":211},"    \u002F\u002F int m_A;\n",[142,22077,22078],{"class":144,"line":1340},[142,22079,22080],{"class":211},"    \u002F\u002F定义静态成员变量\n",[142,22082,22083,22085,22087],{"class":144,"line":1346},[142,22084,11049],{"class":148},[142,22086,2410],{"class":148},[142,22088,21421],{"class":152},[142,22090,22091],{"class":144,"line":1358},[142,22092,2428],{"emptyLinePlaceholder":69},[142,22094,22095],{"class":144,"line":1640},[142,22096,2428],{"emptyLinePlaceholder":69},[142,22098,22099],{"class":144,"line":1645},[142,22100,4023],{"class":152},[142,22102,22103,22105,22107],{"class":144,"line":1651},[142,22104,5393],{"class":148},[142,22106,5617],{"class":1991},[142,22108,2004],{"class":152},[142,22110,22111],{"class":144,"line":1656},[142,22112,1574],{"class":152},[142,22114,22115],{"class":144,"line":1670},[142,22116,15342],{"class":152},[142,22118,22119],{"class":144,"line":1675},[142,22120,22121],{"class":211},"    \u002F\u002F输出类成员变量这块内存\n",[142,22123,22124,22126,22128,22131,22133],{"class":144,"line":1681},[142,22125,1579],{"class":152},[142,22127,1197],{"class":148},[142,22129,22130],{"class":152},"p.m_A",[142,22132,1197],{"class":148},[142,22134,1220],{"class":152},[142,22136,22137],{"class":144,"line":1702},[142,22138,1593],{"class":152},[142,22140,22141,22143,22145],{"class":144,"line":1707},[142,22142,156],{"class":148},[142,22144,2001],{"class":1991},[142,22146,2004],{"class":152},[142,22148,22149],{"class":144,"line":1721},[142,22150,1574],{"class":152},[142,22152,22153,22155],{"class":144,"line":1726},[142,22154,5662],{"class":1991},[142,22156,2004],{"class":152},[142,22158,22159],{"class":144,"line":1755},[142,22160,1593],{"class":152},[14,22162,22163],{},"此时输出是报错的：无法解析外部命令",[14,22165,22166],{},"解决这一问题：必须用到类内声明，类外初始化操作",[133,22168,22170],{"className":135,"code":22169,"language":137,"meta":31,"style":31},"#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",[139,22171,22172,22178,22188,22194,22198,22202,22207,22215,22219,22224,22239,22247,22251,22255,22260,22265,22277,22282,22293,22298,22303,22316,22320,22328,22332,22338],{"__ignoreMap":31},[142,22173,22174,22176],{"class":144,"line":145},[142,22175,1977],{"class":148},[142,22177,1980],{"class":257},[142,22179,22180,22182,22184,22186],{"class":144,"line":64},[142,22181,1985],{"class":148},[142,22183,1988],{"class":148},[142,22185,1992],{"class":1991},[142,22187,1319],{"class":152},[142,22189,22190,22192],{"class":144,"line":1208},[142,22191,14723],{"class":148},[142,22193,15200],{"class":1991},[142,22195,22196],{"class":144,"line":1223},[142,22197,1574],{"class":152},[142,22199,22200],{"class":144,"line":1229},[142,22201,14745],{"class":148},[142,22203,22204],{"class":144,"line":1243},[142,22205,22206],{"class":211},"    \u002F\u002F类内声明\n",[142,22208,22209,22211,22213],{"class":144,"line":1249},[142,22210,11049],{"class":148},[142,22212,2410],{"class":148},[142,22214,21421],{"class":152},[142,22216,22217],{"class":144,"line":1340},[142,22218,4023],{"class":152},[142,22220,22221],{"class":144,"line":1346},[142,22222,22223],{"class":211},"\u002F\u002F类外初始化\n",[142,22225,22226,22228,22230,22233,22235,22237],{"class":144,"line":1358},[142,22227,156],{"class":148},[142,22229,15598],{"class":1991},[142,22231,22232],{"class":152},"::m_A",[142,22234,198],{"class":148},[142,22236,599],{"class":201},[142,22238,1319],{"class":152},[142,22240,22241,22243,22245],{"class":144,"line":1640},[142,22242,5393],{"class":148},[142,22244,5617],{"class":1991},[142,22246,2004],{"class":152},[142,22248,22249],{"class":144,"line":1645},[142,22250,1574],{"class":152},[142,22252,22253],{"class":144,"line":1651},[142,22254,15342],{"class":152},[142,22256,22257],{"class":144,"line":1656},[142,22258,22259],{"class":211},"    \u002F\u002F访问变量的原内存空间\n",[142,22261,22262],{"class":144,"line":1670},[142,22263,22264],{"class":211},"    \u002F\u002F100\n",[142,22266,22267,22269,22271,22273,22275],{"class":144,"line":1675},[142,22268,1579],{"class":152},[142,22270,1197],{"class":148},[142,22272,22130],{"class":152},[142,22274,1197],{"class":148},[142,22276,1220],{"class":152},[142,22278,22279],{"class":144,"line":1681},[142,22280,22281],{"class":152},"    Person p2;\n",[142,22283,22284,22287,22289,22291],{"class":144,"line":1702},[142,22285,22286],{"class":152},"    p2.m_A",[142,22288,198],{"class":148},[142,22290,1750],{"class":201},[142,22292,1319],{"class":152},[142,22294,22295],{"class":144,"line":1707},[142,22296,22297],{"class":211},"    \u002F\u002F继续访问这片空间\n",[142,22299,22300],{"class":144,"line":1721},[142,22301,22302],{"class":211},"    \u002F\u002F200\n",[142,22304,22305,22307,22309,22312,22314],{"class":144,"line":1726},[142,22306,1579],{"class":152},[142,22308,1197],{"class":148},[142,22310,22311],{"class":152},"p2.m_A",[142,22313,1197],{"class":148},[142,22315,1220],{"class":152},[142,22317,22318],{"class":144,"line":1755},[142,22319,1593],{"class":152},[142,22321,22322,22324,22326],{"class":144,"line":1760},[142,22323,156],{"class":148},[142,22325,2001],{"class":1991},[142,22327,2004],{"class":152},[142,22329,22330],{"class":144,"line":1777},[142,22331,1574],{"class":152},[142,22333,22334,22336],{"class":144,"line":1782},[142,22335,5662],{"class":1991},[142,22337,5665],{"class":152},[142,22339,22340],{"class":144,"line":1787},[142,22341,1593],{"class":152},[14,22343,22344],{},[302,22345,22346],{},"静态变量的访问",[133,22348,22350],{"className":135,"code":22349,"language":137,"meta":31,"style":31},"#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",[139,22351,22352,22358,22368,22374,22378,22382,22386,22394,22398,22403,22411,22415,22419,22433,22448,22456,22460,22465,22470,22475,22480,22492,22497,22502,22516,22533,22537,22545,22549,22555],{"__ignoreMap":31},[142,22353,22354,22356],{"class":144,"line":145},[142,22355,1977],{"class":148},[142,22357,1980],{"class":257},[142,22359,22360,22362,22364,22366],{"class":144,"line":64},[142,22361,1985],{"class":148},[142,22363,1988],{"class":148},[142,22365,1992],{"class":1991},[142,22367,1319],{"class":152},[142,22369,22370,22372],{"class":144,"line":1208},[142,22371,14723],{"class":148},[142,22373,15200],{"class":1991},[142,22375,22376],{"class":144,"line":1223},[142,22377,1574],{"class":152},[142,22379,22380],{"class":144,"line":1229},[142,22381,14745],{"class":148},[142,22383,22384],{"class":144,"line":1243},[142,22385,22206],{"class":211},[142,22387,22388,22390,22392],{"class":144,"line":1249},[142,22389,11049],{"class":148},[142,22391,2410],{"class":148},[142,22393,21421],{"class":152},[142,22395,22396],{"class":144,"line":1340},[142,22397,15251],{"class":148},[142,22399,22400],{"class":144,"line":1346},[142,22401,22402],{"class":211},"    \u002F\u002F静态成员变量也是有访问权限的\n",[142,22404,22405,22407,22409],{"class":144,"line":1358},[142,22406,11049],{"class":148},[142,22408,2410],{"class":148},[142,22410,21428],{"class":152},[142,22412,22413],{"class":144,"line":1640},[142,22414,4023],{"class":152},[142,22416,22417],{"class":144,"line":1645},[142,22418,22223],{"class":211},[142,22420,22421,22423,22425,22427,22429,22431],{"class":144,"line":1651},[142,22422,156],{"class":148},[142,22424,15598],{"class":1991},[142,22426,22232],{"class":152},[142,22428,198],{"class":148},[142,22430,599],{"class":201},[142,22432,1319],{"class":152},[142,22434,22435,22437,22439,22442,22444,22446],{"class":144,"line":1656},[142,22436,156],{"class":148},[142,22438,15598],{"class":1991},[142,22440,22441],{"class":152},"::m_B",[142,22443,198],{"class":148},[142,22445,853],{"class":201},[142,22447,1319],{"class":152},[142,22449,22450,22452,22454],{"class":144,"line":1670},[142,22451,5393],{"class":148},[142,22453,5686],{"class":1991},[142,22455,2004],{"class":152},[142,22457,22458],{"class":144,"line":1675},[142,22459,1574],{"class":152},[142,22461,22462],{"class":144,"line":1681},[142,22463,22464],{"class":211},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[142,22466,22467],{"class":144,"line":1702},[142,22468,22469],{"class":211},"    \u002F\u002F静态成员变量有两种访问方式：\n",[142,22471,22472],{"class":144,"line":1707},[142,22473,22474],{"class":211},"    \u002F\u002F1.通过对象进行访问\n",[142,22476,22477],{"class":144,"line":1721},[142,22478,22479],{"class":152},"    Person p;  \n",[142,22481,22482,22484,22486,22488,22490],{"class":144,"line":1726},[142,22483,1579],{"class":152},[142,22485,1197],{"class":148},[142,22487,22130],{"class":152},[142,22489,1197],{"class":148},[142,22491,1220],{"class":152},[142,22493,22494],{"class":144,"line":1755},[142,22495,22496],{"class":211},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[142,22498,22499],{"class":144,"line":1760},[142,22500,22501],{"class":211},"    \u002F\u002F2.通过类名进行访问\n",[142,22503,22504,22506,22508,22510,22512,22514],{"class":144,"line":1777},[142,22505,1579],{"class":152},[142,22507,1197],{"class":148},[142,22509,19075],{"class":1991},[142,22511,22232],{"class":152},[142,22513,1197],{"class":148},[142,22515,1220],{"class":152},[142,22517,22518,22520,22522,22524,22526,22528,22530],{"class":144,"line":1782},[142,22519,1579],{"class":152},[142,22521,1197],{"class":148},[142,22523,19075],{"class":1991},[142,22525,22441],{"class":152},[142,22527,1197],{"class":148},[142,22529,1267],{"class":152},[142,22531,22532],{"class":211}," \u002F\u002F没有访问权限，报错\n",[142,22534,22535],{"class":144,"line":1787},[142,22536,1593],{"class":152},[142,22538,22539,22541,22543],{"class":144,"line":1792},[142,22540,156],{"class":148},[142,22542,2001],{"class":1991},[142,22544,2004],{"class":152},[142,22546,22547],{"class":144,"line":1806},[142,22548,1574],{"class":152},[142,22550,22551,22553],{"class":144,"line":1811},[142,22552,5731],{"class":1991},[142,22554,5665],{"class":152},[142,22556,22557],{"class":144,"line":2605},[142,22558,1593],{"class":152},[22027,22560,22562],{"id":22561},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22564,22565],{},"1.静态成员函数定义与访问",[133,22567,22569],{"className":135,"code":22568,"language":137,"meta":31,"style":31},"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",[139,22570,22571,22577,22581,22585,22590,22601,22605,22619,22623,22627,22635,22639,22644,22649,22653,22661,22666,22676],{"__ignoreMap":31},[142,22572,22573,22575],{"class":144,"line":145},[142,22574,14723],{"class":148},[142,22576,15200],{"class":1991},[142,22578,22579],{"class":144,"line":64},[142,22580,1574],{"class":152},[142,22582,22583],{"class":144,"line":1208},[142,22584,14745],{"class":148},[142,22586,22587],{"class":144,"line":1223},[142,22588,22589],{"class":211},"    \u002F\u002F在公共权限下定义静态成员函数\n",[142,22591,22592,22594,22597,22599],{"class":144,"line":1229},[142,22593,11049],{"class":148},[142,22595,22596],{"class":148}," void",[142,22598,11414],{"class":1991},[142,22600,2004],{"class":152},[142,22602,22603],{"class":144,"line":1243},[142,22604,2058],{"class":152},[142,22606,22607,22610,22612,22615,22617],{"class":144,"line":1249},[142,22608,22609],{"class":152},"        coout",[142,22611,1197],{"class":148},[142,22613,22614],{"class":257},"\"静态成员函数的调用\"",[142,22616,1197],{"class":148},[142,22618,1220],{"class":152},[142,22620,22621],{"class":144,"line":1340},[142,22622,2215],{"class":152},[142,22624,22625],{"class":144,"line":1346},[142,22626,4023],{"class":152},[142,22628,22629,22631,22633],{"class":144,"line":1358},[142,22630,5393],{"class":148},[142,22632,5617],{"class":1991},[142,22634,2004],{"class":152},[142,22636,22637],{"class":144,"line":1640},[142,22638,1574],{"class":152},[142,22640,22641],{"class":144,"line":1645},[142,22642,22643],{"class":211},"    \u002F\u002F静态成员函数的调用方式:\n",[142,22645,22646],{"class":144,"line":1651},[142,22647,22648],{"class":211},"    \u002F\u002F1.通过对象访问\n",[142,22650,22651],{"class":144,"line":1656},[142,22652,15342],{"class":152},[142,22654,22655,22657,22659],{"class":144,"line":1670},[142,22656,15895],{"class":152},[142,22658,11580],{"class":1991},[142,22660,5665],{"class":152},[142,22662,22663],{"class":144,"line":1675},[142,22664,22665],{"class":211},"    \u002F\u002F2.通过类名访问\n",[142,22667,22668,22670,22672,22674],{"class":144,"line":1681},[142,22669,18548],{"class":1991},[142,22671,17761],{"class":152},[142,22673,11580],{"class":1991},[142,22675,5665],{"class":152},[142,22677,22678],{"class":144,"line":1702},[142,22679,1593],{"class":152},[96,22681,22682],{"start":64},[99,22683,22684],{},"静态成员函数只能访问静态成员变量",[133,22686,22688],{"className":135,"code":22687,"language":137,"meta":31,"style":31},"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",[139,22689,22690,22696,22700,22704,22708,22718,22722,22736,22741,22753,22757,22768,22778,22782,22786,22790,22800,22804,22817,22821,22825,22829,22833,22847,22855,22859,22863,22867,22871,22879,22883,22893,22898,22902,22910,22914,22920],{"__ignoreMap":31},[142,22691,22692,22694],{"class":144,"line":145},[142,22693,14723],{"class":148},[142,22695,15200],{"class":1991},[142,22697,22698],{"class":144,"line":64},[142,22699,1574],{"class":152},[142,22701,22702],{"class":144,"line":1208},[142,22703,14745],{"class":148},[142,22705,22706],{"class":144,"line":1223},[142,22707,22589],{"class":211},[142,22709,22710,22712,22714,22716],{"class":144,"line":1229},[142,22711,11049],{"class":148},[142,22713,22596],{"class":148},[142,22715,11414],{"class":1991},[142,22717,2004],{"class":152},[142,22719,22720],{"class":144,"line":1243},[142,22721,2058],{"class":152},[142,22723,22724,22727,22729,22731,22733],{"class":144,"line":1249},[142,22725,22726],{"class":152},"        m_A",[142,22728,198],{"class":148},[142,22730,464],{"class":201},[142,22732,208],{"class":152},[142,22734,22735],{"class":211}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[142,22737,22738],{"class":144,"line":1340},[142,22739,22740],{"class":211},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[142,22742,22743,22745,22747,22749,22751],{"class":144,"line":1346},[142,22744,22609],{"class":152},[142,22746,1197],{"class":148},[142,22748,22614],{"class":257},[142,22750,1197],{"class":148},[142,22752,1220],{"class":152},[142,22754,22755],{"class":144,"line":1358},[142,22756,2215],{"class":152},[142,22758,22759,22761,22763,22765],{"class":144,"line":1640},[142,22760,11049],{"class":148},[142,22762,2410],{"class":148},[142,22764,15477],{"class":152},[142,22766,22767],{"class":211}," \u002F\u002F静态成员变量\n",[142,22769,22770,22772,22775],{"class":144,"line":1645},[142,22771,2013],{"class":148},[142,22773,22774],{"class":152}," m_B;",[142,22776,22777],{"class":211}," \u002F\u002F非静态成员变量\n",[142,22779,22780],{"class":144,"line":1651},[142,22781,2428],{"emptyLinePlaceholder":69},[142,22783,22784],{"class":144,"line":1656},[142,22785,15251],{"class":148},[142,22787,22788],{"class":144,"line":1670},[142,22789,22402],{"class":211},[142,22791,22792,22794,22796,22798],{"class":144,"line":1675},[142,22793,11049],{"class":148},[142,22795,22596],{"class":148},[142,22797,13647],{"class":1991},[142,22799,2004],{"class":152},[142,22801,22802],{"class":144,"line":1681},[142,22803,2058],{"class":152},[142,22805,22806,22808,22810,22813,22815],{"class":144,"line":1702},[142,22807,3479],{"class":152},[142,22809,1197],{"class":148},[142,22811,22812],{"class":257},"\"这是私有权限下的静态函数调用\"",[142,22814,1197],{"class":148},[142,22816,1220],{"class":152},[142,22818,22819],{"class":144,"line":1707},[142,22820,2215],{"class":152},[142,22822,22823],{"class":144,"line":1721},[142,22824,2428],{"emptyLinePlaceholder":69},[142,22826,22827],{"class":144,"line":1726},[142,22828,2428],{"emptyLinePlaceholder":69},[142,22830,22831],{"class":144,"line":1755},[142,22832,4023],{"class":152},[142,22834,22835,22837,22839,22841,22843,22845],{"class":144,"line":1760},[142,22836,156],{"class":148},[142,22838,15598],{"class":1991},[142,22840,22232],{"class":152},[142,22842,198],{"class":148},[142,22844,344],{"class":201},[142,22846,1319],{"class":152},[142,22848,22849,22851,22853],{"class":144,"line":1777},[142,22850,5393],{"class":148},[142,22852,5617],{"class":1991},[142,22854,2004],{"class":152},[142,22856,22857],{"class":144,"line":1782},[142,22858,1574],{"class":152},[142,22860,22861],{"class":144,"line":1787},[142,22862,22643],{"class":211},[142,22864,22865],{"class":144,"line":1792},[142,22866,22648],{"class":211},[142,22868,22869],{"class":144,"line":1806},[142,22870,15342],{"class":152},[142,22872,22873,22875,22877],{"class":144,"line":1811},[142,22874,15895],{"class":152},[142,22876,11580],{"class":1991},[142,22878,5665],{"class":152},[142,22880,22881],{"class":144,"line":2605},[142,22882,22665],{"class":211},[142,22884,22885,22887,22889,22891],{"class":144,"line":2619},[142,22886,18548],{"class":1991},[142,22888,17761],{"class":152},[142,22890,11580],{"class":1991},[142,22892,5665],{"class":152},[142,22894,22895],{"class":144,"line":2627},[142,22896,22897],{"class":211},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[142,22899,22900],{"class":144,"line":2632},[142,22901,1593],{"class":152},[142,22903,22904,22906,22908],{"class":144,"line":2638},[142,22905,156],{"class":148},[142,22907,2001],{"class":1991},[142,22909,2004],{"class":152},[142,22911,22912],{"class":144,"line":2644},[142,22913,1574],{"class":152},[142,22915,22916,22918],{"class":144,"line":2649},[142,22917,5662],{"class":1991},[142,22919,5665],{"class":152},[142,22921,22922],{"class":144,"line":7977},[142,22923,1593],{"class":152},[113,22925,22927],{"id":22926},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22027,22929,22931],{"id":22930},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22933,22934],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22936,22937],{},"只有非静态成员变量才属于类的对象上",[22939,22940,22942],"h5",{"id":22941},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[133,22944,22946],{"className":135,"code":22945,"language":137,"meta":31,"style":31},"#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",[139,22947,22948,22955,22965,22971,22975,22979,22983,22991,22995,22999,23022,23026,23034,23038,23044],{"__ignoreMap":31},[142,22949,22950,22952],{"class":144,"line":145},[142,22951,1977],{"class":148},[142,22953,22954],{"class":257},"\u003Ciostraem>\n",[142,22956,22957,22959,22961,22963],{"class":144,"line":64},[142,22958,1985],{"class":148},[142,22960,1988],{"class":148},[142,22962,1992],{"class":1991},[142,22964,1319],{"class":152},[142,22966,22967,22969],{"class":144,"line":1208},[142,22968,14723],{"class":148},[142,22970,15200],{"class":1991},[142,22972,22973],{"class":144,"line":1223},[142,22974,1574],{"class":152},[142,22976,22977],{"class":144,"line":1229},[142,22978,2428],{"emptyLinePlaceholder":69},[142,22980,22981],{"class":144,"line":1243},[142,22982,4023],{"class":152},[142,22984,22985,22987,22989],{"class":144,"line":1249},[142,22986,5393],{"class":148},[142,22988,5617],{"class":1991},[142,22990,2004],{"class":152},[142,22992,22993],{"class":144,"line":1340},[142,22994,1574],{"class":152},[142,22996,22997],{"class":144,"line":1346},[142,22998,15342],{"class":152},[142,23000,23001,23003,23005,23008,23010,23013,23015,23017,23019],{"class":144,"line":1358},[142,23002,1579],{"class":152},[142,23004,1197],{"class":148},[142,23006,23007],{"class":257},"\"size of p=\"",[142,23009,1197],{"class":148},[142,23011,23012],{"class":1991},"sizeoif",[142,23014,6568],{"class":152},[142,23016,1197],{"class":148},[142,23018,1267],{"class":152},[142,23020,23021],{"class":211}," \u002F\u002F查看这个空类的占用的内存空间\n",[142,23023,23024],{"class":144,"line":1640},[142,23025,1593],{"class":152},[142,23027,23028,23030,23032],{"class":144,"line":1645},[142,23029,156],{"class":148},[142,23031,2001],{"class":1991},[142,23033,2004],{"class":152},[142,23035,23036],{"class":144,"line":1651},[142,23037,1574],{"class":152},[142,23039,23040,23042],{"class":144,"line":1656},[142,23041,5662],{"class":1991},[142,23043,5665],{"class":152},[142,23045,23046],{"class":144,"line":1670},[142,23047,1593],{"class":152},[14,23049,23050],{},"输出结果为：size of p=1",[14,23052,23053],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23055,23056],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22939,23058,23060],{"id":23059},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[133,23062,23064],{"className":135,"code":23063,"language":137,"meta":31,"style":31},"#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",[139,23065,23066,23072,23082,23090,23094,23103,23107,23115,23119,23123,23142,23146,23150,23158,23162,23168],{"__ignoreMap":31},[142,23067,23068,23070],{"class":144,"line":145},[142,23069,1977],{"class":148},[142,23071,1980],{"class":257},[142,23073,23074,23076,23078,23080],{"class":144,"line":64},[142,23075,1985],{"class":148},[142,23077,1988],{"class":148},[142,23079,1992],{"class":1991},[142,23081,1319],{"class":152},[142,23083,23084,23086,23088],{"class":144,"line":1208},[142,23085,14723],{"class":148},[142,23087,15598],{"class":1991},[142,23089,2702],{"class":152},[142,23091,23092],{"class":144,"line":1223},[142,23093,1574],{"class":152},[142,23095,23096,23098,23100],{"class":144,"line":1229},[142,23097,2013],{"class":148},[142,23099,15477],{"class":152},[142,23101,23102],{"class":211},"\u002F\u002F非静态成员变量\n",[142,23104,23105],{"class":144,"line":1243},[142,23106,4023],{"class":152},[142,23108,23109,23111,23113],{"class":144,"line":1249},[142,23110,5393],{"class":148},[142,23112,5617],{"class":1991},[142,23114,2004],{"class":152},[142,23116,23117],{"class":144,"line":1340},[142,23118,1574],{"class":152},[142,23120,23121],{"class":144,"line":1346},[142,23122,15342],{"class":152},[142,23124,23125,23127,23129,23131,23133,23135,23137,23139],{"class":144,"line":1358},[142,23126,1579],{"class":152},[142,23128,1197],{"class":148},[142,23130,23007],{"class":257},[142,23132,1401],{"class":148},[142,23134,6568],{"class":152},[142,23136,1197],{"class":148},[142,23138,1267],{"class":152},[142,23140,23141],{"class":211}," \u002F\u002F查看不是空对象时占用多少内存\n",[142,23143,23144],{"class":144,"line":1640},[142,23145,2428],{"emptyLinePlaceholder":69},[142,23147,23148],{"class":144,"line":1645},[142,23149,1593],{"class":152},[142,23151,23152,23154,23156],{"class":144,"line":1651},[142,23153,156],{"class":148},[142,23155,2001],{"class":1991},[142,23157,2004],{"class":152},[142,23159,23160],{"class":144,"line":1656},[142,23161,1574],{"class":152},[142,23163,23164,23166],{"class":144,"line":1670},[142,23165,5662],{"class":1991},[142,23167,5665],{"class":152},[142,23169,23170],{"class":144,"line":1675},[142,23171,1593],{"class":152},[14,23173,23174],{},"输出结果：size of p=4",[14,23176,23177],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[96,23179,23180],{},[99,23181,23182],{},"如果加上非静态成员变量，Person类修改如下",[133,23184,23186],{"className":135,"code":23185,"language":137,"meta":31,"style":31},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[139,23187,23188,23194,23198,23204,23212,23216,23221],{"__ignoreMap":31},[142,23189,23190,23192],{"class":144,"line":145},[142,23191,14723],{"class":148},[142,23193,15200],{"class":1991},[142,23195,23196],{"class":144,"line":64},[142,23197,1574],{"class":152},[142,23199,23200,23202],{"class":144,"line":1208},[142,23201,2013],{"class":148},[142,23203,21421],{"class":152},[142,23205,23206,23208,23210],{"class":144,"line":1223},[142,23207,11049],{"class":148},[142,23209,2410],{"class":148},[142,23211,21428],{"class":152},[142,23213,23214],{"class":144,"line":1229},[142,23215,4023],{"class":152},[142,23217,23218],{"class":144,"line":1243},[142,23219,23220],{"class":211},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[142,23222,23223,23225,23227,23229,23231,23233],{"class":144,"line":1249},[142,23224,156],{"class":148},[142,23226,15598],{"class":1991},[142,23228,22441],{"class":152},[142,23230,198],{"class":148},[142,23232,344],{"class":201},[142,23234,1319],{"class":152},[14,23236,23237],{},"输出结果：4",[14,23239,23240],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[96,23242,23243],{"start":64},[99,23244,23245],{},"加上非静态成员函数",[133,23247,23249],{"className":135,"code":23248,"language":137,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[139,23250,23251,23258,23262,23268,23276,23280,23284,23288],{"__ignoreMap":31},[142,23252,23253,23255],{"class":144,"line":145},[142,23254,14723],{"class":148},[142,23256,23257],{"class":1991},"  Person\n",[142,23259,23260],{"class":144,"line":64},[142,23261,1574],{"class":152},[142,23263,23264,23266],{"class":144,"line":1208},[142,23265,2013],{"class":148},[142,23267,21421],{"class":152},[142,23269,23270,23272,23274],{"class":144,"line":1223},[142,23271,14938],{"class":148},[142,23273,11414],{"class":1991},[142,23275,2004],{"class":152},[142,23277,23278],{"class":144,"line":1229},[142,23279,2058],{"class":152},[142,23281,23282],{"class":144,"line":1243},[142,23283,2428],{"emptyLinePlaceholder":69},[142,23285,23286],{"class":144,"line":1249},[142,23287,2215],{"class":152},[142,23289,23290],{"class":144,"line":1340},[142,23291,4023],{"class":152},[14,23293,23294],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[96,23296,23297],{"start":1208},[99,23298,23299],{},"加上静态成员函数",[133,23301,23303],{"className":135,"code":23302,"language":137,"meta":31,"style":31},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[139,23304,23305,23311,23315,23321,23329,23333,23337,23341,23352,23356,23360,23364],{"__ignoreMap":31},[142,23306,23307,23309],{"class":144,"line":145},[142,23308,14723],{"class":148},[142,23310,23257],{"class":1991},[142,23312,23313],{"class":144,"line":64},[142,23314,1574],{"class":152},[142,23316,23317,23319],{"class":144,"line":1208},[142,23318,2013],{"class":148},[142,23320,21421],{"class":152},[142,23322,23323,23325,23327],{"class":144,"line":1223},[142,23324,14938],{"class":148},[142,23326,11414],{"class":1991},[142,23328,2004],{"class":152},[142,23330,23331],{"class":144,"line":1229},[142,23332,2058],{"class":152},[142,23334,23335],{"class":144,"line":1243},[142,23336,2428],{"emptyLinePlaceholder":69},[142,23338,23339],{"class":144,"line":1249},[142,23340,2215],{"class":152},[142,23342,23343,23345,23347,23350],{"class":144,"line":1340},[142,23344,11049],{"class":148},[142,23346,22596],{"class":148},[142,23348,23349],{"class":1991}," func1",[142,23351,2004],{"class":152},[142,23353,23354],{"class":144,"line":1346},[142,23355,2058],{"class":152},[142,23357,23358],{"class":144,"line":1358},[142,23359,2428],{"emptyLinePlaceholder":69},[142,23361,23362],{"class":144,"line":1640},[142,23363,2215],{"class":152},[142,23365,23366],{"class":144,"line":1645},[142,23367,4023],{"class":152},[14,23369,23237],{},[14,23371,23372],{},"解释：静态成员函数也不属于类上",[5155,23374,7703],{},{"title":31,"searchDepth":64,"depth":64,"links":23376},[23377,23383],{"id":14674,"depth":64,"text":14675,"children":23378},[23379,23380,23381,23382],{"id":14678,"depth":1208,"text":14679},{"id":15403,"depth":1208,"text":15404},{"id":15575,"depth":1208,"text":15576},{"id":16034,"depth":1208,"text":16035},{"id":18406,"depth":64,"text":18407,"children":23384},[23385,23386,23387,23388,23389,23390,23391,23392,23393],{"id":18418,"depth":1208,"text":18419},{"id":18711,"depth":1208,"text":18712},{"id":19202,"depth":1208,"text":19203},{"id":20299,"depth":1208,"text":20300},{"id":20722,"depth":1208,"text":20723},{"id":21201,"depth":1208,"text":21202},{"id":21576,"depth":1208,"text":21577},{"id":21989,"depth":1208,"text":21990},{"id":22926,"depth":1208,"text":22927},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14639,"description":23394},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23401,"title":137,"body":23402,"description":66,"extension":67,"meta":23406,"navigation":69,"path":23408,"seo":23409,"stem":23410,"__hash__":23411},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23403,"toc":23404},[],{"title":31,"searchDepth":64,"depth":64,"links":23405},[],{"category":23407},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":137,"description":66},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23413,"title":23414,"body":23415,"description":31,"extension":67,"meta":24006,"navigation":69,"path":24007,"seo":24008,"stem":24009,"__hash__":24010},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23416,"toc":23988},[23417,23420,23424,23427,23430,23433,23451,23456,23459,23462,23465,23468,23473,23476,23481,23484,23487,23491,23494,23497,23503,23506,23524,23528,23532,23535,23540,23543,23547,23550,23563,23566,23570,23573,23576,23579,23604,23607,23616,23627,23642,23674,23678,23685,23693,23697,23700,23703,23708,23712,23715,23718,23723,23726,23730,23733,23736,23741,23744,23748,23753,23757,23824,23828,23831,23834,23837,23840,23843,23849,23870,23873,23887,23896,23900,23903,23906,23911,23914,23919,23924,23927,23930,23935,23940,23943,23948,23953,23956,23961,23966,23969,23972,23977,23980,23985],[10,23418,23414],{"id":23419},"_1强化学习基本认识",[84,23421,23423],{"id":23422},"_11什么是强化学习","1.1.什么是强化学习",[14,23425,23426],{},"强化学习有两部分组成：智能体和环境；",[14,23428,23429],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23431,23432],{},"强化学习与监督学习的区别:",[96,23434,23435,23438,23441,23444],{},[99,23436,23437],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[99,23439,23440],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[99,23442,23443],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[99,23445,23446,23447,23450],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[302,23448,23449],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23452,23453],{},[29,23454],{"alt":31,"src":23455},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23457,23458],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23460,23461],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23463,23464],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23466,23467],{},"获取奖励",[14,23469,23470],{},[29,23471],{"alt":31,"src":23472},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23474,23475],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23477,23478],{},[29,23479],{"alt":31,"src":23480},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23482,23483],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23485,23486],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[84,23488,23490],{"id":23489},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23492,23493],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23495,23496],{},"具身智能中的应用",[14,23498,23499,23502],{},[302,23500,23501],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23504,23505],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23507,23508,23509,23512,23513,23516,23517,23520,23521],{},"机器人是",[302,23510,23511],{},"躯体","，深度学习是",[302,23514,23515],{},"神经元****网络","，VLA是",[302,23518,23519],{},"通用的行为逻辑","，而强化学习是",[302,23522,23523],{},"教练",[84,23525,23527],{"id":23526},"_13序列决策","1.3.序列决策",[113,23529,23531],{"id":23530},"_131智能体与环境","1.3.1.智能体与环境",[14,23533,23534],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23536,23537],{},[29,23538],{"alt":31,"src":23539},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23541,23542],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[113,23544,23546],{"id":23545},"_132奖励","1.3.2.奖励",[14,23548,23549],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23551,23552,23553,23562],{},"取某个策略的表现如何。强化学习的目的就是",[302,23554,23555,23556,23561],{},"最大化",[302,23557,23558],{},[302,23559,23560],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23564,23565],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[113,23567,23569],{"id":23568},"_133序列决策","1.3.3.序列决策",[14,23571,23572],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23574,23575],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23577,23578],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23580,23581,23585,23586,23588,23589,23591,23592,23594,23595,13824,23598,13824,23601],{},[23582,23583,23584],"em",{},"Ht"," = ",[23582,23587,749],{},"1*, a",[23582,23590,370],{},", r",[23582,23593,370],{},", . . . ,* ",[23582,23596,23597],{},"ot",[23582,23599,23600],{},", at ,",[23582,23602,23603],{},"rt",[14,23605,23606],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23608,23609,23585,23612,1686,23614,582],{},[23582,23610,23611],{},"st",[23582,23613,205],{},[23582,23615,23584],{},[14,23617,23618,23619,23622,23623,23626],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[302,23620,23621],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[302,23624,23625],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23628,23629,23630,23633,23634,23637,23638,23641],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[302,23631,23632],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[302,23635,23636],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23582,23639,23640],{},"S, A, T, R, Ω, O, γ",")。",[14,23643,23644,23645,23647,23648,23650,23651,153,23653,23656,23657,23659,23660,153,23663,23666,23667,23669,23670,23673],{},"其中 ",[23582,23646,842],{}," 表示状态空间，为隐变量，",[23582,23649,385],{}," 为动作空间，",[23582,23652,867],{},[23582,23654,23655],{},"s ′ |s, a",") 为状态转移概率，",[23582,23658,817],{}," 为奖励函数，",[23582,23661,23662],{},"Ω",[23582,23664,23665],{},"o|s, a",") 为观测概率，",[23582,23668,743],{}," 为观测空间，",[23582,23671,23672],{},"γ"," 为折扣因子。",[84,23675,23677],{"id":23676},"_14动作空间","1.4.动作空间",[14,23679,23680,23681,23684],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[302,23682,23683],{},"动作空间"," ，动作空间分为:",[96,23686,23687,23690],{},[99,23688,23689],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[99,23691,23692],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[84,23694,23696],{"id":23695},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23698,23699],{},"由策略、价值函数、模型三部分组成",[14,23701,23702],{},"这三者组成马尔可夫决策过程",[14,23704,23705],{},[29,23706],{"alt":31,"src":23707},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[113,23709,23711],{"id":23710},"_151策略","1.5.1.策略",[14,23713,23714],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23716,23717],{},"策略可分为两种：",[14,23719,23720],{},[29,23721],{"alt":31,"src":23722},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23724,23725],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[113,23727,23729],{"id":23728},"_152价值函数","1.5.2.价值函数",[14,23731,23732],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23734,23735],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23737,23738],{},[29,23739],{"alt":31,"src":23740},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23742,23743],{},"进入某个状态采取的最优动作可以通过Q函数得到",[113,23745,23747],{"id":23746},"_153模型","1.5.3.模型",[14,23749,23750],{},[29,23751],{"alt":31,"src":23752},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[84,23754,23756],{"id":23755},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[290,23758,23759,23770],{},[293,23760,23761],{},[296,23762,23763,23767],{},[299,23764,23766],{"align":23765},"left","类型",[299,23768,23769],{"align":23765},"特点",[337,23771,23772,23782,23792,23802,23814],{},[296,23773,23774,23779],{},[342,23775,23776],{"align":23765},[302,23777,23778],{},"基于价值的智能体",[342,23780,23781],{"align":23765},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[296,23783,23784,23789],{},[342,23785,23786],{"align":23765},[302,23787,23788],{},"基于策略的智能体",[342,23790,23791],{"align":23765},"直接学习策略，没有学习价值函数",[296,23793,23794,23799],{},[342,23795,23796],{"align":23765},[302,23797,23798],{},"演员-评论员智能体",[342,23800,23801],{"align":23765},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[296,23803,23804,23809],{},[342,23805,23806],{"align":23765},[302,23807,23808],{},"有模型强化学习智能体",[342,23810,23811],{"align":23765},[29,23812],{"alt":31,"src":23813},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[296,23815,23816,23821],{},[342,23817,23818],{"align":23765},[302,23819,23820],{},"免模型强化学习智能体",[342,23822,23823],{"align":23765},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[84,23825,23827],{"id":23826},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23829,23830],{},"学习和规划是序列决策的两个基本问题",[14,23832,23833],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23835,23836],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23838,23839],{},"强化学习用到的库：Gym",[14,23841,23842],{},"Gym可以检验强化学习算法的优劣",[14,23844,23845,23848],{},[302,23846,23847],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[133,23850,23854],{"className":23851,"code":23852,"language":23853,"meta":31,"style":31},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[139,23855,23856],{"__ignoreMap":31},[142,23857,23858,23861,23864,23867],{"class":144,"line":145},[142,23859,23860],{"class":1991},"pip",[142,23862,23863],{"class":257}," install",[142,23865,23866],{"class":257}," gym==",[142,23868,23869],{"class":201},"0.25.2\n",[14,23871,23872],{},"显示图形界面需要",[133,23874,23876],{"className":23851,"code":23875,"language":23853,"meta":31,"style":31},"pip install pygame\n",[139,23877,23878],{"__ignoreMap":31},[142,23879,23880,23882,23884],{"class":144,"line":145},[142,23881,23860],{"class":1991},[142,23883,23863],{"class":257},[142,23885,23886],{"class":257}," pygame\n",[14,23888,23889,23890],{},"有关Gym库的相关文档介绍：",[391,23891,23895],{"href":23892,"rel":23893},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23894],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[84,23897,23899],{"id":23898},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23901,23902],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23904,23905],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23907,23908],{},[29,23909],{"alt":31,"src":23910},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23912,23913],{},"折扣率需要自己来设定",[14,23915,23916],{},[29,23917],{"alt":31,"src":23918},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[96,23920,23921],{},[99,23922,23923],{},"状态转移函数：",[14,23925,23926],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23928,23929],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23931,23932],{},[29,23933],{"alt":31,"src":23934},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[96,23936,23937],{"start":64},[99,23938,23939],{},"动作价值函数：",[14,23941,23942],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23944,23945],{},[29,23946],{"alt":31,"src":23947},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[96,23949,23950],{"start":1208},[99,23951,23952],{},"最优动作价值函数：",[14,23954,23955],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,23957,23958],{},[29,23959],{"alt":31,"src":23960},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[96,23962,23963],{"start":1223},[99,23964,23965],{},"状态价值函数:",[14,23967,23968],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,23970,23971],{},"它衡量的是“一个具体动作”的长期价值",[14,23973,23974],{},[29,23975],{"alt":31,"src":23976},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,23978,23979],{},"几个价值函数之间的比较：",[14,23981,23982],{},[29,23983],{"alt":31,"src":23984},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5155,23986,23987],{},"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":31,"searchDepth":64,"depth":64,"links":23989},[23990,23991,23992,23997,23998,24003,24004,24005],{"id":23422,"depth":64,"text":23423},{"id":23489,"depth":64,"text":23490},{"id":23526,"depth":64,"text":23527,"children":23993},[23994,23995,23996],{"id":23530,"depth":1208,"text":23531},{"id":23545,"depth":1208,"text":23546},{"id":23568,"depth":1208,"text":23569},{"id":23676,"depth":64,"text":23677},{"id":23695,"depth":64,"text":23696,"children":23999},[24000,24001,24002],{"id":23710,"depth":1208,"text":23711},{"id":23728,"depth":1208,"text":23729},{"id":23746,"depth":1208,"text":23747},{"id":23755,"depth":64,"text":23756},{"id":23826,"depth":64,"text":23827},{"id":23898,"depth":64,"text":23899},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23414,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24012,"title":24013,"body":24014,"description":24021,"extension":67,"meta":24032,"navigation":69,"path":24033,"seo":24034,"stem":24035,"__hash__":24036},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24015,"toc":24030},[24016,24019,24022,24027],[10,24017,24013],{"id":24018},"_2马尔可夫决策过程",[14,24020,24021],{},"这是强化学习的基本框架",[14,24023,24024],{},[29,24025],{"alt":31,"src":24026},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24028,24029],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":31,"searchDepth":64,"depth":64,"links":24031},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24013,"description":24021},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24038,"title":24039,"body":24040,"description":31,"extension":67,"meta":24156,"navigation":69,"path":24157,"seo":24158,"stem":24159,"__hash__":24160},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24041,"toc":24151},[24042,24045,24049,24052,24057,24062,24065,24070,24073,24078,24081,24085,24090,24093,24098,24103,24108,24111,24115,24120,24123,24128,24133,24138,24143,24146],[10,24043,24039],{"id":24044},"_3动作价值函数",[84,24046,24048],{"id":24047},"_31dqn","3.1.DQN",[14,24050,24051],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24053,24054],{},[29,24055],{"alt":31,"src":24056},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24058,24059],{},[29,24060],{"alt":31,"src":24061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24063,24064],{},"DQN算法的描述：",[14,24066,24067],{},[29,24068],{"alt":31,"src":24069},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24071,24072],{},"这里的Dense指的是全连接层",[14,24074,24075],{},[29,24076],{"alt":31,"src":24077},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24079,24080],{},"当前观测的状态为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算法",[84,24082,24084],{"id":24083},"_32dqn的举例","3.2.DQN的举例",[14,24086,24087],{},[29,24088],{"alt":31,"src":24089},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24091,24092],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24094,24095],{},[29,24096],{"alt":31,"src":24097},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24099,24100],{},[29,24101],{"alt":31,"src":24102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24104,24105],{},[29,24106],{"alt":31,"src":24107},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24109,24110],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[84,24112,24114],{"id":24113},"_33td算法","3.3.TD算法",[14,24116,24117],{},[29,24118],{"alt":31,"src":24119},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24121,24122],{},"强化学习TD算法公式的粗略解释：",[14,24124,24125],{},[29,24126],{"alt":31,"src":24127},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24129,24130],{},[29,24131],{"alt":31,"src":24132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24134,24135],{},[29,24136],{"alt":31,"src":24137},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24139,24140],{},[29,24141],{"alt":31,"src":24142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24144,24145],{},"TD算法总结：",[14,24147,24148],{},[29,24149],{"alt":31,"src":24150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":31,"searchDepth":64,"depth":64,"links":24152},[24153,24154,24155],{"id":24047,"depth":64,"text":24048},{"id":24083,"depth":64,"text":24084},{"id":24113,"depth":64,"text":24114},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24039,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24162,"title":24163,"body":24164,"description":31,"extension":67,"meta":24397,"navigation":69,"path":24398,"seo":24399,"stem":24400,"__hash__":24401},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24165,"toc":24393},[24166,24169,24173,24176,24179,24184,24189,24192,24197,24202,24205,24210,24213,24218,24221,24226,24229,24234,24237,24242,24247,24250,24255,24258,24261,24266,24269,24274,24279,24283,24286,24289,24294,24299,24302,24307,24312,24315,24320,24323,24326,24331,24334,24339,24342,24347,24352,24355,24360,24365,24368,24373,24376,24381,24384],[10,24167,24163],{"id":24168},"_4策略学习",[84,24170,24172],{"id":24171},"_41概念描述","4.1.概念描述",[14,24174,24175],{},"用神经网络（策略网络）近似策略函数",[14,24177,24178],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24180,24181],{},[29,24182],{"alt":31,"src":24183},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24185,24186],{},[29,24187],{"alt":31,"src":24188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24190,24191],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24193,24194],{},[29,24195],{"alt":31,"src":24196},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24198,24199],{},[29,24200],{"alt":31,"src":24201},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24203,24204],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24206,24207],{},[29,24208],{"alt":31,"src":24209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24211,24212],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24214,24215],{},[29,24216],{"alt":31,"src":24217},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24219,24220],{},"改进theta要用到策略梯度算法",[14,24222,24223],{},[29,24224],{"alt":31,"src":24225},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24227,24228],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24230,24231],{},[29,24232],{"alt":31,"src":24233},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24235,24236],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24238,24239],{},[29,24240],{"alt":31,"src":24241},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24243,24244],{},[29,24245],{"alt":31,"src":24246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24248,24249],{},"梯度公式总结：",[14,24251,24252],{},[29,24253],{"alt":31,"src":24254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24256,24257],{},"两个公式的分别应用场景：",[14,24259,24260],{},"对于离散的动作：",[14,24262,24263],{},[29,24264],{"alt":31,"src":24265},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24267,24268],{},"对于连续的动作：",[14,24270,24271],{},[29,24272],{"alt":31,"src":24273},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24275,24276],{},[29,24277],{"alt":31,"src":24278},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[84,24280,24282],{"id":24281},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24284,24285],{},"使用蒙特卡洛来近似计算策略梯度",[14,24287,24288],{},"蒙特卡洛法的解释如下：",[14,24290,24291],{},[29,24292],{"alt":31,"src":24293},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24295,24296],{},[29,24297],{"alt":31,"src":24298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24300,24301],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[96,24303,24304],{},[99,24305,24306],{},"方法一：reinforce算法",[14,24308,24309],{},[29,24310],{"alt":31,"src":24311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24313,24314],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[96,24316,24317],{"start":64},[99,24318,24319],{},"方法二：actor-critic算法",[14,24321,24322],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24324,24325],{},"两个网络的构建：",[14,24327,24328],{},[29,24329],{"alt":31,"src":24330},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24332,24333],{},"actor网路：",[14,24335,24336],{},[29,24337],{"alt":31,"src":24338},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24340,24341],{},"critic网络",[14,24343,24344],{},[29,24345],{"alt":31,"src":24346},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[96,24348,24349],{"start":1208},[99,24350,24351],{},"网络的训练",[14,24353,24354],{},"网络描述",[14,24356,24357],{},[29,24358],{"alt":31,"src":24359},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24361,24362],{},[29,24363],{"alt":31,"src":24364},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24366,24367],{},"TD算法更新梯度：",[14,24369,24370],{},[29,24371],{"alt":31,"src":24372},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24374,24375],{},"策略网络更新梯度：",[14,24377,24378],{},[29,24379],{"alt":31,"src":24380},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24382,24383],{},"训练整个流程的具体描述：",[14,24385,24386,24389,24390],{},[29,24387],{"alt":31,"src":24388},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[29,24391],{"alt":31,"src":24392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":31,"searchDepth":64,"depth":64,"links":24394},[24395,24396],{"id":24171,"depth":64,"text":24172},{"id":24281,"depth":64,"text":24282},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24163,"description":31},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24403,"title":24404,"body":24405,"description":24412,"extension":67,"meta":24462,"navigation":69,"path":24463,"seo":24464,"stem":24465,"__hash__":24466},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24406,"toc":24458},[24407,24410,24413,24417,24420,24425,24429,24432,24437,24440,24445,24450,24453],[10,24408,24404],{"id":24409},"_5alphago算法",[14,24411,24412],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[84,24414,24416],{"id":24415},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24418,24419],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24421,24422],{},[29,24423],{"alt":31,"src":24424},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[84,24426,24428],{"id":24427},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24430,24431],{},"采用强化学习的方式训练策略网络",[14,24433,24434],{},[29,24435],{"alt":31,"src":24436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24438,24439],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24441,24442],{},[29,24443],{"alt":31,"src":24444},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24446,24447],{},[29,24448],{"alt":31,"src":24449},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24451,24452],{},"强化学习训练策略网络的总结：",[14,24454,24455],{},[29,24456],{"alt":31,"src":24457},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":31,"searchDepth":64,"depth":64,"links":24459},[24460,24461],{"id":24415,"depth":64,"text":24416},{"id":24427,"depth":64,"text":24428},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24404,"description":24412},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24468,"title":24469,"body":24470,"description":24477,"extension":67,"meta":24480,"navigation":69,"path":24481,"seo":24482,"stem":24483,"__hash__":24484},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24471,"toc":24478},[24472,24475],[10,24473,24469],{"id":24474},"_6价值网络",[14,24476,24477],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":31,"searchDepth":64,"depth":64,"links":24479},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24469,"description":24477},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24486,"title":24487,"body":24488,"description":24492,"extension":67,"meta":24493,"navigation":69,"path":24494,"seo":24495,"stem":24496,"__hash__":24497},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24489,"toc":24490},[],{"title":31,"searchDepth":64,"depth":64,"links":24491},[],"记录自己的强化学习笔记。",{"category":23407},"\u002Fwiki\u002F2025-12-04",{"title":24487,"description":24492},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24499,"title":24500,"body":24501,"description":66,"extension":67,"meta":24540,"navigation":69,"path":24541,"seo":24542,"stem":24543,"__hash__":24544},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24502,"toc":24538},[24503,24506,24509,24515,24518,24524,24527,24532,24535],[10,24504,24500],{"id":24505},"_1-项目概览与官方资源",[14,24507,24508],{},"官方文档：",[14,24510,24511],{},[391,24512,24513],{"href":24513,"rel":24514},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23894],[14,24516,24517],{},"官方代码仓库：",[14,24519,24520],{},[391,24521,24522],{"href":24522,"rel":24523},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23894],[14,24525,24526],{},"复现大体流程：",[14,24528,24529],{},[29,24530],{"alt":31,"src":24531},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24533,24534],{},"本教程的目标是打通这条链路：",[14,24536,24537],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":31,"searchDepth":64,"depth":64,"links":24539},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24500,"description":66},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24546,"title":24547,"body":24548,"description":66,"extension":67,"meta":24663,"navigation":69,"path":24664,"seo":24665,"stem":24666,"__hash__":24667},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24549,"toc":24658},[24550,24553,24557,24560,24567,24571,24574,24583,24593,24597,24627,24629,24655],[10,24551,24547],{"id":24552},"_2-环境准备与设备连接",[84,24554,24556],{"id":24555},"_21-系统与环境","2.1 系统与环境",[14,24558,24559],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24561,24562,24563,24566],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[139,24564,24565],{},"lerobot"," 依赖。",[84,24568,24570],{"id":24569},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24572,24573],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[133,24575,24577],{"className":23851,"code":24576,"language":23853,"meta":31,"style":31},"lerobot-find-out\n",[139,24578,24579],{"__ignoreMap":31},[142,24580,24581],{"class":144,"line":145},[142,24582,24576],{"class":1991},[14,24584,24585,24586,365,24589,24592],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[139,24587,24588],{},"\u002Fdev\u002FttyACM0",[139,24590,24591],{},"\u002Fdev\u002FttyACM1","）。",[84,24594,24596],{"id":24595},"_23-串口授权","2.3 串口授权",[133,24598,24600],{"className":23851,"code":24599,"language":23853,"meta":31,"style":31},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[139,24601,24602,24616],{"__ignoreMap":31},[142,24603,24604,24607,24610,24613],{"class":144,"line":145},[142,24605,24606],{"class":1991},"sudo",[142,24608,24609],{"class":257}," chmod",[142,24611,24612],{"class":201}," 666",[142,24614,24615],{"class":257}," \u002Fdev\u002FttyACM0\n",[142,24617,24618,24620,24622,24624],{"class":144,"line":64},[142,24619,24606],{"class":1991},[142,24621,24609],{"class":257},[142,24623,24612],{"class":201},[142,24625,24626],{"class":257}," \u002Fdev\u002FttyACM1\n",[14,24628,19],{},[1160,24630,24631,24636,24642,24652],{},[99,24632,24633,24635],{},[139,24634,24606],{},"：以 root 权限执行命令。",[99,24637,24638,24641],{},[139,24639,24640],{},"chmod","：修改设备节点权限。",[99,24643,24644,24647,24648,24651],{},[139,24645,24646],{},"666","：",[139,24649,24650],{},"rw-rw-rw-","，所有用户可读写。",[99,24653,24654],{},"串口号必须替换为你机器上的真实端口。",[5155,24656,24657],{},"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":31,"searchDepth":64,"depth":64,"links":24659},[24660,24661,24662],{"id":24555,"depth":64,"text":24556},{"id":24569,"depth":64,"text":24570},{"id":24595,"depth":64,"text":24596},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24547,"description":66},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24669,"title":24670,"body":24671,"description":66,"extension":67,"meta":24832,"navigation":69,"path":24833,"seo":24834,"stem":24835,"__hash__":24836},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24672,"toc":24828},[24673,24677,24681,24687,24690,24747,24750,24754,24757,24825],[10,24674,24676],{"id":24675},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[84,24678,24680],{"id":24679},"_31-配置电机-id","3.1 配置电机 ID",[14,24682,24683,24684,24686],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[139,24685,370],{},"，需要改成机械臂链路里不冲突的编号。",[14,24688,24689],{},"方式一：用 LeRobot 命令逐步写入。",[133,24691,24693],{"className":23851,"code":24692,"language":23853,"meta":31,"style":31},"# 主臂舵机配置 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",[139,24694,24695,24700,24708,24715,24720,24724,24729,24735,24742],{"__ignoreMap":31},[142,24696,24697],{"class":144,"line":145},[142,24698,24699],{"class":211},"# 主臂舵机配置 ID\n",[142,24701,24702,24705],{"class":144,"line":64},[142,24703,24704],{"class":1991},"lerobot-setup-motors",[142,24706,24707],{"class":201}," \\\n",[142,24709,24710,24713],{"class":144,"line":1208},[142,24711,24712],{"class":201},"  --teleop.type=so101_leader",[142,24714,24707],{"class":201},[142,24716,24717],{"class":144,"line":1223},[142,24718,24719],{"class":201},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[142,24721,24722],{"class":144,"line":1229},[142,24723,2428],{"emptyLinePlaceholder":69},[142,24725,24726],{"class":144,"line":1243},[142,24727,24728],{"class":211},"# 从臂舵机配置 ID\n",[142,24730,24731,24733],{"class":144,"line":1249},[142,24732,24704],{"class":1991},[142,24734,24707],{"class":201},[142,24736,24737,24740],{"class":144,"line":1340},[142,24738,24739],{"class":201},"  --robot.type=so101_follower",[142,24741,24707],{"class":201},[142,24743,24744],{"class":144,"line":1346},[142,24745,24746],{"class":201},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24748,24749],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[84,24751,24753],{"id":24752},"_32-机械臂校准","3.2 机械臂校准",[14,24755,24756],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[133,24758,24760],{"className":23851,"code":24759,"language":23853,"meta":31,"style":31},"# 主臂校准\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",[139,24761,24762,24767,24774,24780,24787,24792,24796,24801,24807,24813,24820],{"__ignoreMap":31},[142,24763,24764],{"class":144,"line":145},[142,24765,24766],{"class":211},"# 主臂校准\n",[142,24768,24769,24772],{"class":144,"line":64},[142,24770,24771],{"class":1991},"lerobot-calibrate",[142,24773,24707],{"class":201},[142,24775,24776,24778],{"class":144,"line":1208},[142,24777,24712],{"class":201},[142,24779,24707],{"class":201},[142,24781,24782,24785],{"class":144,"line":1223},[142,24783,24784],{"class":201},"  --teleop.port=\u002Fdev\u002FttyACM0",[142,24786,24707],{"class":201},[142,24788,24789],{"class":144,"line":1229},[142,24790,24791],{"class":201},"  --teleop.id=my_awesome_leader_arm\n",[142,24793,24794],{"class":144,"line":1243},[142,24795,2428],{"emptyLinePlaceholder":69},[142,24797,24798],{"class":144,"line":1249},[142,24799,24800],{"class":211},"# 从臂校准\n",[142,24802,24803,24805],{"class":144,"line":1340},[142,24804,24771],{"class":1991},[142,24806,24707],{"class":201},[142,24808,24809,24811],{"class":144,"line":1346},[142,24810,24739],{"class":201},[142,24812,24707],{"class":201},[142,24814,24815,24818],{"class":144,"line":1358},[142,24816,24817],{"class":201},"  --robot.port=\u002Fdev\u002FttyACM1",[142,24819,24707],{"class":201},[142,24821,24822],{"class":144,"line":1640},[142,24823,24824],{"class":201},"  --robot.id=my_awesome_follower_arm\n",[5155,24826,24827],{},"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":31,"searchDepth":64,"depth":64,"links":24829},[24830,24831],{"id":24679,"depth":64,"text":24680},{"id":24752,"depth":64,"text":24753},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24670,"description":66},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24838,"title":24839,"body":24840,"description":66,"extension":67,"meta":25031,"navigation":69,"path":25032,"seo":25033,"stem":25034,"__hash__":25035},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24841,"toc":25027},[24842,24845,24849,24896,24900,24913,24976,24979,25024],[10,24843,24839],{"id":24844},"_4-遥操与相机接入",[84,24846,24848],{"id":24847},"_41-不带相机遥操","4.1 不带相机遥操",[133,24850,24852],{"className":23851,"code":24851,"language":23853,"meta":31,"style":31},"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",[139,24853,24854,24861,24867,24873,24880,24886,24892],{"__ignoreMap":31},[142,24855,24856,24859],{"class":144,"line":145},[142,24857,24858],{"class":1991},"lerobot-teleoperate",[142,24860,24707],{"class":201},[142,24862,24863,24865],{"class":144,"line":64},[142,24864,24739],{"class":201},[142,24866,24707],{"class":201},[142,24868,24869,24871],{"class":144,"line":1208},[142,24870,24817],{"class":201},[142,24872,24707],{"class":201},[142,24874,24875,24878],{"class":144,"line":1223},[142,24876,24877],{"class":201},"  --robot.id=my_awesome_follower_arm",[142,24879,24707],{"class":201},[142,24881,24882,24884],{"class":144,"line":1229},[142,24883,24712],{"class":201},[142,24885,24707],{"class":201},[142,24887,24888,24890],{"class":144,"line":1243},[142,24889,24784],{"class":201},[142,24891,24707],{"class":201},[142,24893,24894],{"class":144,"line":1249},[142,24895,24791],{"class":201},[84,24897,24899],{"id":24898},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[133,24901,24903],{"className":23851,"code":24902,"language":23853,"meta":31,"style":31},"lerobot-find-cameras opencv\n",[139,24904,24905],{"__ignoreMap":31},[142,24906,24907,24910],{"class":144,"line":145},[142,24908,24909],{"class":1991},"lerobot-find-cameras",[142,24911,24912],{"class":257}," opencv\n",[133,24914,24916],{"className":23851,"code":24915,"language":23853,"meta":31,"style":31},"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",[139,24917,24918,24924,24930,24936,24942,24952,24958,24964,24971],{"__ignoreMap":31},[142,24919,24920,24922],{"class":144,"line":145},[142,24921,24858],{"class":1991},[142,24923,24707],{"class":201},[142,24925,24926,24928],{"class":144,"line":64},[142,24927,24739],{"class":201},[142,24929,24707],{"class":201},[142,24931,24932,24934],{"class":144,"line":1208},[142,24933,24817],{"class":201},[142,24935,24707],{"class":201},[142,24937,24938,24940],{"class":144,"line":1223},[142,24939,24877],{"class":201},[142,24941,24707],{"class":201},[142,24943,24944,24947,24950],{"class":144,"line":1229},[142,24945,24946],{"class":201},"  --robot.cameras=",[142,24948,24949],{"class":257},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[142,24951,24707],{"class":201},[142,24953,24954,24956],{"class":144,"line":1243},[142,24955,24712],{"class":201},[142,24957,24707],{"class":201},[142,24959,24960,24962],{"class":144,"line":1249},[142,24961,24784],{"class":201},[142,24963,24707],{"class":201},[142,24965,24966,24969],{"class":144,"line":1340},[142,24967,24968],{"class":201},"  --teleop.id=my_awesome_leader_arm",[142,24970,24707],{"class":201},[142,24972,24973],{"class":144,"line":1346},[142,24974,24975],{"class":201},"  --display_data=true\n",[14,24977,24978],{},"相机参数说明：",[1160,24980,24981,24987,24993,25002,25012,25018],{},[99,24982,24983,24986],{},[139,24984,24985],{},"front","：相机名称。",[99,24988,24989,24992],{},[139,24990,24991],{},"type: opencv","：相机驱动类型。",[99,24994,24995,24998,24999,24592],{},[139,24996,24997],{},"index_or_path","：设备编号或设备路径（如 ",[139,25000,25001],{},"\u002Fdev\u002Fvideo4",[99,25003,25004,25007,25008,25011],{},[139,25005,25006],{},"width"," \u002F ",[139,25009,25010],{},"height","：图像分辨率。",[99,25013,25014,25017],{},[139,25015,25016],{},"fps","：采样帧率。",[99,25019,25020,25023],{},[139,25021,25022],{},"--display_data=true","：启用实时可视化。",[5155,25025,25026],{},"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":31,"searchDepth":64,"depth":64,"links":25028},[25029,25030],{"id":24847,"depth":64,"text":24848},{"id":24898,"depth":64,"text":24899},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24839,"description":66},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25037,"title":25038,"body":25039,"description":66,"extension":67,"meta":25211,"navigation":69,"path":25212,"seo":25213,"stem":25214,"__hash__":25215},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25040,"toc":25206},[25041,25045,25049,25054,25059,25062,25104,25110,25114,25163,25168,25172,25175,25183,25188,25193,25198,25203],[10,25042,25044],{"id":25043},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[84,25046,25048],{"id":25047},"_51-生成访问令牌","5.1 生成访问令牌",[14,25050,25051],{},[29,25052],{"alt":31,"src":25053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25055,25056],{},[29,25057],{"alt":31,"src":25058},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25060,25061],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[133,25063,25065],{"className":23851,"code":25064,"language":23853,"meta":31,"style":31},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[139,25066,25067,25080],{"__ignoreMap":31},[142,25068,25069,25072,25075,25077],{"class":144,"line":145},[142,25070,25071],{"class":148},"export",[142,25073,25074],{"class":152}," HF_TOKEN",[142,25076,198],{"class":148},[142,25078,25079],{"class":257},"\"your_huggingface_token\"\n",[142,25081,25082,25085,25088,25091,25094,25096,25099,25101],{"class":144,"line":64},[142,25083,25084],{"class":1991},"hf",[142,25086,25087],{"class":257}," auth",[142,25089,25090],{"class":257}," login",[142,25092,25093],{"class":201}," --token",[142,25095,9753],{"class":257},[142,25097,25098],{"class":152},"$HF_TOKEN",[142,25100,404],{"class":257},[142,25102,25103],{"class":201}," --add-to-git-credential\n",[14,25105,25106,25109],{},[139,25107,25108],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[84,25111,25113],{"id":25112},"_52-验证登录","5.2 验证登录",[133,25115,25117],{"className":23851,"code":25116,"language":23853,"meta":31,"style":31},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[139,25118,25119,25150],{"__ignoreMap":31},[142,25120,25121,25124,25126,25129,25131,25133,25136,25139,25142,25145,25148],{"class":144,"line":145},[142,25122,25123],{"class":152},"HF_USER",[142,25125,198],{"class":148},[142,25127,25128],{"class":152},"$(",[142,25130,25084],{"class":1991},[142,25132,25087],{"class":257},[142,25134,25135],{"class":257}," whoami",[142,25137,25138],{"class":148}," |",[142,25140,25141],{"class":1991}," head",[142,25143,25144],{"class":201}," -n",[142,25146,25147],{"class":201}," 1",[142,25149,159],{"class":152},[142,25151,25152,25155,25157,25160],{"class":144,"line":64},[142,25153,25154],{"class":201},"echo",[142,25156,9753],{"class":257},[142,25158,25159],{"class":152},"$HF_USER",[142,25161,25162],{"class":257},"\"\n",[14,25164,25165],{},[29,25166],{"alt":31,"src":25167},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[84,25169,25171],{"id":25170},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25173,25174],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1160,25176,25177,25180],{},[99,25178,25179],{},"Dataset Repo（用于上传演示数据）",[99,25181,25182],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25184,25185],{},[29,25186],{"alt":31,"src":25187},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25189,25190],{},[29,25191],{"alt":31,"src":25192},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25194,25195],{},[29,25196],{"alt":31,"src":25197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25199,25200],{},[29,25201],{"alt":31,"src":25202},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5155,25204,25205],{},"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":31,"searchDepth":64,"depth":64,"links":25207},[25208,25209,25210],{"id":25047,"depth":64,"text":25048},{"id":25112,"depth":64,"text":25113},{"id":25170,"depth":64,"text":25171},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25038,"description":66},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25217,"title":25218,"body":25219,"description":66,"extension":67,"meta":25416,"navigation":69,"path":25417,"seo":25418,"stem":25419,"__hash__":25420},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25220,"toc":25411},[25221,25225,25229,25325,25333,25338,25342,25358,25361,25365,25408],[10,25222,25224],{"id":25223},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[84,25226,25228],{"id":25227},"_61-录制示教数据","6.1 录制示教数据",[133,25230,25232],{"className":23851,"code":25231,"language":23853,"meta":31,"style":31},"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",[139,25233,25234,25241,25247,25253,25259,25268,25274,25280,25286,25293,25303,25310,25320],{"__ignoreMap":31},[142,25235,25236,25239],{"class":144,"line":145},[142,25237,25238],{"class":1991},"lerobot-record",[142,25240,24707],{"class":201},[142,25242,25243,25245],{"class":144,"line":64},[142,25244,24739],{"class":201},[142,25246,24707],{"class":201},[142,25248,25249,25251],{"class":144,"line":1208},[142,25250,24817],{"class":201},[142,25252,24707],{"class":201},[142,25254,25255,25257],{"class":144,"line":1223},[142,25256,24877],{"class":201},[142,25258,24707],{"class":201},[142,25260,25261,25263,25266],{"class":144,"line":1229},[142,25262,24946],{"class":201},[142,25264,25265],{"class":257},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[142,25267,24707],{"class":201},[142,25269,25270,25272],{"class":144,"line":1243},[142,25271,24712],{"class":201},[142,25273,24707],{"class":201},[142,25275,25276,25278],{"class":144,"line":1249},[142,25277,24784],{"class":201},[142,25279,24707],{"class":201},[142,25281,25282,25284],{"class":144,"line":1340},[142,25283,24968],{"class":201},[142,25285,24707],{"class":201},[142,25287,25288,25291],{"class":144,"line":1346},[142,25289,25290],{"class":201},"  --display_data=true",[142,25292,24707],{"class":201},[142,25294,25295,25298,25301],{"class":144,"line":1358},[142,25296,25297],{"class":201},"  --dataset.repo_id=",[142,25299,25300],{"class":257},"\"Embodied-AI-6\u002Fso101_test\"",[142,25302,24707],{"class":201},[142,25304,25305,25308],{"class":144,"line":1640},[142,25306,25307],{"class":201},"  --dataset.num_episodes=10",[142,25309,24707],{"class":201},[142,25311,25312,25315,25318],{"class":144,"line":1645},[142,25313,25314],{"class":201},"  --dataset.single_task=",[142,25316,25317],{"class":257},"\"Grab the green cube\"",[142,25319,24707],{"class":201},[142,25321,25322],{"class":144,"line":1651},[142,25323,25324],{"class":201},"  --resume=true\n",[1160,25326,25327],{},[99,25328,25329,25332],{},[139,25330,25331],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25334,25335],{},[29,25336],{"alt":31,"src":25337},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[84,25339,25341],{"id":25340},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[133,25343,25345],{"className":23851,"code":25344,"language":23853,"meta":31,"style":31},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[139,25346,25347],{"__ignoreMap":31},[142,25348,25349,25352,25355],{"class":144,"line":145},[142,25350,25351],{"class":1991},"rm",[142,25353,25354],{"class":201}," -rf",[142,25356,25357],{"class":257}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25359,25360],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[84,25362,25364],{"id":25363},"_63-回放指定-episode","6.3 回放指定 episode",[133,25366,25368],{"className":23851,"code":25367,"language":23853,"meta":31,"style":31},"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",[139,25369,25370,25377,25383,25389,25395,25403],{"__ignoreMap":31},[142,25371,25372,25375],{"class":144,"line":145},[142,25373,25374],{"class":1991},"lerobot-replay",[142,25376,24707],{"class":201},[142,25378,25379,25381],{"class":144,"line":64},[142,25380,24739],{"class":201},[142,25382,24707],{"class":201},[142,25384,25385,25387],{"class":144,"line":1208},[142,25386,24817],{"class":201},[142,25388,24707],{"class":201},[142,25390,25391,25393],{"class":144,"line":1223},[142,25392,24877],{"class":201},[142,25394,24707],{"class":201},[142,25396,25397,25399,25401],{"class":144,"line":1229},[142,25398,25297],{"class":201},[142,25400,25300],{"class":257},[142,25402,24707],{"class":201},[142,25404,25405],{"class":144,"line":1243},[142,25406,25407],{"class":201},"  --dataset.episode=0\n",[5155,25409,25410],{},"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":31,"searchDepth":64,"depth":64,"links":25412},[25413,25414,25415],{"id":25227,"depth":64,"text":25228},{"id":25340,"depth":64,"text":25341},{"id":25363,"depth":64,"text":25364},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25218,"description":66},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25422,"title":25423,"body":25424,"description":66,"extension":67,"meta":25552,"navigation":69,"path":25553,"seo":25554,"stem":25555,"__hash__":25556},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25425,"toc":25550},[25426,25430,25493,25496,25543,25548],[10,25427,25429],{"id":25428},"_7-act-模型训练","7. ACT 模型训练",[133,25431,25433],{"className":23851,"code":25432,"language":23853,"meta":31,"style":31},"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",[139,25434,25435,25442,25450,25457,25464,25471,25478,25485],{"__ignoreMap":31},[142,25436,25437,25440],{"class":144,"line":145},[142,25438,25439],{"class":1991},"lerobot-train",[142,25441,24707],{"class":201},[142,25443,25444,25446,25448],{"class":144,"line":64},[142,25445,25297],{"class":201},[142,25447,25300],{"class":257},[142,25449,24707],{"class":201},[142,25451,25452,25455],{"class":144,"line":1208},[142,25453,25454],{"class":201},"  --policy.type=act",[142,25456,24707],{"class":201},[142,25458,25459,25462],{"class":144,"line":1223},[142,25460,25461],{"class":201},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[142,25463,24707],{"class":201},[142,25465,25466,25469],{"class":144,"line":1229},[142,25467,25468],{"class":201},"  --job_name=act_so101_test",[142,25470,24707],{"class":201},[142,25472,25473,25476],{"class":144,"line":1243},[142,25474,25475],{"class":201},"  --policy.device=cuda",[142,25477,24707],{"class":201},[142,25479,25480,25483],{"class":144,"line":1249},[142,25481,25482],{"class":201},"  --wandb.enable=false",[142,25484,24707],{"class":201},[142,25486,25487,25490],{"class":144,"line":1340},[142,25488,25489],{"class":201},"  --policy.repo_id=",[142,25491,25492],{"class":257},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25494,25495],{},"参数说明：",[1160,25497,25498,25504,25510,25516,25522,25531,25537],{},[99,25499,25500,25503],{},[139,25501,25502],{},"--dataset.repo_id","：训练数据集仓库。",[99,25505,25506,25509],{},[139,25507,25508],{},"--policy.type=act","：策略模型类型为 ACT。",[99,25511,25512,25515],{},[139,25513,25514],{},"--output_dir","：本地训练输出目录。",[99,25517,25518,25521],{},[139,25519,25520],{},"--job_name","：训练任务名称。",[99,25523,25524,25527,25528,24592],{},[139,25525,25526],{},"--policy.device","：训练设备（如 ",[139,25529,25530],{},"cuda",[99,25532,25533,25536],{},[139,25534,25535],{},"--wandb.enable","：是否启用 WandB 可视化。",[99,25538,25539,25542],{},[139,25540,25541],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25544,25545],{},[29,25546],{"alt":31,"src":25547},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5155,25549,25410],{},{"title":31,"searchDepth":64,"depth":64,"links":25551},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25423,"description":66},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25558,"title":25559,"body":25560,"description":66,"extension":67,"meta":25647,"navigation":69,"path":25648,"seo":25649,"stem":25650,"__hash__":25651},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25561,"toc":25645},[25562,25565,25568,25635,25643],[10,25563,25559],{"id":25564},"_8-策略部署与自动采集",[14,25566,25567],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[133,25569,25571],{"className":23851,"code":25570,"language":23853,"meta":31,"style":31},"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",[139,25572,25573,25579,25585,25591,25599,25605,25612,25620,25628],{"__ignoreMap":31},[142,25574,25575,25577],{"class":144,"line":145},[142,25576,25238],{"class":1991},[142,25578,24707],{"class":201},[142,25580,25581,25583],{"class":144,"line":64},[142,25582,24739],{"class":201},[142,25584,24707],{"class":201},[142,25586,25587,25589],{"class":144,"line":1208},[142,25588,24817],{"class":201},[142,25590,24707],{"class":201},[142,25592,25593,25595,25597],{"class":144,"line":1223},[142,25594,24946],{"class":201},[142,25596,25265],{"class":257},[142,25598,24707],{"class":201},[142,25600,25601,25603],{"class":144,"line":1229},[142,25602,24877],{"class":201},[142,25604,24707],{"class":201},[142,25606,25607,25610],{"class":144,"line":1243},[142,25608,25609],{"class":201},"  --display_data=false",[142,25611,24707],{"class":201},[142,25613,25614,25616,25618],{"class":144,"line":1249},[142,25615,25297],{"class":201},[142,25617,25300],{"class":257},[142,25619,24707],{"class":201},[142,25621,25622,25624,25626],{"class":144,"line":1340},[142,25623,25314],{"class":201},[142,25625,25317],{"class":257},[142,25627,24707],{"class":201},[142,25629,25630,25633],{"class":144,"line":1346},[142,25631,25632],{"class":201},"  --policy.path=",[142,25634,25492],{"class":257},[1160,25636,25637],{},[99,25638,25639,25642],{},[139,25640,25641],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5155,25644,25410],{},{"title":31,"searchDepth":64,"depth":64,"links":25646},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25559,"description":66},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25653,"title":25654,"body":25655,"description":66,"extension":67,"meta":25684,"navigation":69,"path":25685,"seo":25686,"stem":25687,"__hash__":25688},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25656,"toc":25682},[25657,25661,25664,25670,25673,25679],[10,25658,25660],{"id":25659},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25662,25663],{},"项目地址：",[14,25665,25666],{},[391,25667,25668],{"href":25668,"rel":25669},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23894],[14,25671,25672],{},"参考教程：",[14,25674,25675],{},[391,25676,25677],{"href":25677,"rel":25678},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23894],[14,25680,25681],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":31,"searchDepth":64,"depth":64,"links":25683},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25654,"description":66},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25690,"title":25691,"body":25692,"description":25696,"extension":67,"meta":25697,"navigation":69,"path":25698,"seo":25699,"stem":25700,"__hash__":25701},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25693,"toc":25694},[],{"title":31,"searchDepth":64,"depth":64,"links":25695},[],"act复现",{"category":23407},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25691,"description":25696},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25703,"title":25704,"body":25705,"description":31,"extension":67,"meta":26007,"navigation":69,"path":26008,"seo":26009,"stem":26010,"__hash__":26011},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25706,"toc":25999},[25707,25710,25714,25724,25731,25738,25741,25748,25751,25754,25758,25770,25774,25820,25823,25826,25829,25832,25835,25839,25877,25883,25887,25941,25946,25949,25952,25957,25960,25965,25968,25971,25975,25978,25981,25985],[10,25708,25704],{"id":25709},"_1简介",[113,25711,25713],{"id":25712},"_11什么是-docker","1.1什么是 Docker？",[14,25715,25716,25717,25720,25721],{},"Docker 是一个开源的 ",[302,25718,25719],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[302,25722,25723],{},"一次构建，到处运行。",[14,25725,25726,25727,25730],{},"“ ",[302,25728,25729],{},"一次构建，到处运行"," ”也就是说：",[96,25732,25733],{},[99,25734,25735],{},[302,25736,25737],{},"之前：",[14,25739,25740],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[96,25742,25743],{},[99,25744,25745],{},[302,25746,25747],{},"使用docker后：",[14,25749,25750],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25752,25753],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[113,25755,25757],{"id":25756},"_12它是怎么工作的","1.2.它是怎么工作的？",[1160,25759,25760,25763],{},[99,25761,25762],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[99,25764,25765,25766,25769],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[302,25767,25768],{},"无论在哪运行都一样稳定"," 。",[113,25771,25773],{"id":25772},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[290,25775,25776,25786],{},[293,25777,25778],{},[296,25779,25780,25783],{},[299,25781,25782],{"align":23765},"概念",[299,25784,25785],{"align":23765},"解释",[337,25787,25788,25796,25804,25812],{},[296,25789,25790,25793],{},[342,25791,25792],{"align":23765},"镜像",[342,25794,25795],{"align":23765},"Image，运行容器的模板，像是一个应用快照",[296,25797,25798,25801],{},[342,25799,25800],{"align":23765},"容器",[342,25802,25803],{"align":23765},"Container，运行中的镜像实例，有自己的文件系统、网络等",[296,25805,25806,25809],{},[342,25807,25808],{"align":23765},"Dockerfile",[342,25810,25811],{"align":23765},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[296,25813,25814,25817],{},[342,25815,25816],{"align":23765},"仓库",[342,25818,25819],{"align":23765},"Registry，存放镜像的地方，比如 Docker Hub",[14,25821,25822],{},"抽象化理解:",[14,25824,25825],{},"Docker镜像≈C++类",[14,25827,25828],{},"Docker容器≈C++类实例(即对象)",[14,25830,25831],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25833,25834],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[113,25836,25838],{"id":25837},"_14类比理解","1.4.类比理解",[290,25840,25841,25851],{},[293,25842,25843],{},[296,25844,25845,25848],{},[299,25846,25847],{"align":23765},"传统部署",[299,25849,25850],{"align":23765},"Docker部署",[337,25852,25853,25861,25869],{},[296,25854,25855,25858],{},[342,25856,25857],{"align":23765},"手动安装依赖、调试版本不一致问题",[342,25859,25860],{"align":23765},"一次打包环境和代码",[296,25862,25863,25866],{},[342,25864,25865],{"align":23765},"程序“裸奔”跑在系统上",[342,25867,25868],{"align":23765},"程序“穿着容器”隔离运行",[296,25870,25871,25874],{},[342,25872,25873],{"align":23765},"容易“在我电脑上能跑”",[342,25875,25876],{"align":23765},"保证“无论在哪都能跑”",[14,25878,25879,25880],{},"就像快递包裹： ",[302,25881,25882],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[113,25884,25886],{"id":25885},"_15docker-的核心优势","1.5.Docker 的核心优势",[290,25888,25889,25899],{},[293,25890,25891],{},[296,25892,25893,25896],{},[299,25894,25895],{"align":23765},"优势",[299,25897,25898],{"align":23765},"说明",[337,25900,25901,25909,25917,25925,25933],{},[296,25902,25903,25906],{},[342,25904,25905],{"align":23765},"轻量级",[342,25907,25908],{"align":23765},"基于系统内核共享，启动速度快，占资源少",[296,25910,25911,25914],{},[342,25912,25913],{"align":23765},"跨平台",[342,25915,25916],{"align":23765},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[296,25918,25919,25922],{},[342,25920,25921],{"align":23765},"易于迁移部署",[342,25923,25924],{"align":23765},"应用和环境一起封装，不怕依赖不一致",[296,25926,25927,25930],{},[342,25928,25929],{"align":23765},"易于版本控制",[342,25931,25932],{"align":23765},"镜像版本可控，支持回滚",[296,25934,25935,25938],{},[342,25936,25937],{"align":23765},"生态丰富",[342,25939,25940],{"align":23765},"Docker Hub 上有成千上万的现成镜像可用",[96,25942,25943],{},[99,25944,25945],{},"在Linux上可以几乎实现无性能损失。",[14,25947,25948],{},"docker里的发行版和本机共用Linux内核。",[14,25950,25951],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[96,25953,25954],{},[99,25955,25956],{},"可以快速部署在绝大多数Linux发行版",[14,25958,25959],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[96,25961,25962],{},[99,25963,25964],{},"配置环境简单",[14,25966,25967],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25969,25970],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[96,25972,25973],{},[99,25974,25937],{},[14,25976,25977],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,25979,25980],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[113,25982,25984],{"id":25983},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1160,25986,25987,25990,25993,25996],{},[99,25988,25989],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[99,25991,25992],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[99,25994,25995],{},"微服务架构：每个服务一个容器，灵活组合",[99,25997,25998],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":31,"searchDepth":64,"depth":64,"links":26000},[26001,26002,26003,26004,26005,26006],{"id":25712,"depth":1208,"text":25713},{"id":25756,"depth":1208,"text":25757},{"id":25772,"depth":1208,"text":25773},{"id":25837,"depth":1208,"text":25838},{"id":25885,"depth":1208,"text":25886},{"id":25983,"depth":1208,"text":25984},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25704,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26013,"title":26014,"body":26015,"description":31,"extension":67,"meta":26748,"navigation":69,"path":26749,"seo":26750,"stem":26751,"__hash__":26752},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26016,"toc":26743},[26017,26020,26024,26027,26030,26036,26042,26046,26055,26058,26115,26118,26169,26172,26255,26258,26295,26299,26310,26323,26330,26333,26413,26416,26466,26469,26492,26496,26503,26506,26522,26528,26531,26547,26553,26556,26572,26586,26592,26612,26618,26621,26633,26639,26642,26656,26662,26665,26685,26690,26693,26696,26700,26703,26706,26709,26716,26719,26722,26725,26730,26735,26740],[10,26018,26014],{"id":26019},"_2安装docker",[113,26021,26023],{"id":26022},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26025,26026],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26028,26029],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26031,26032],{},[391,26033,26034],{"href":26034,"rel":26035},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23894],[14,26037,26038],{},[391,26039,26040],{"href":26040,"rel":26041},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23894],[22027,26043,26045],{"id":26044},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26047,26048,26049,26054],{},"以下内容根据 ",[391,26050,26053],{"href":26051,"rel":26052},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23894],"官方文档"," 修改而来。",[14,26056,26057],{},"如果你过去安装过 docker，先删掉：",[133,26059,26061],{"className":23851,"code":26060,"language":23853,"meta":31,"style":31},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[139,26062,26063],{"__ignoreMap":31},[142,26064,26065,26067,26070,26073,26076,26079,26082,26085,26088,26091,26094,26097,26100,26103,26106,26109,26112],{"class":144,"line":145},[142,26066,3053],{"class":148},[142,26068,26069],{"class":152}," pkg ",[142,26071,26072],{"class":148},"in",[142,26074,26075],{"class":257}," docker.io",[142,26077,26078],{"class":257}," docker-doc",[142,26080,26081],{"class":257}," docker-compose",[142,26083,26084],{"class":257}," docker-compose-v2",[142,26086,26087],{"class":257}," podman-docker",[142,26089,26090],{"class":257}," containerd",[142,26092,26093],{"class":257}," runc",[142,26095,26096],{"class":152},"; ",[142,26098,26099],{"class":148},"do",[142,26101,26102],{"class":1991}," sudo",[142,26104,26105],{"class":257}," apt-get",[142,26107,26108],{"class":257}," remove",[142,26110,26111],{"class":152}," $pkg; ",[142,26113,26114],{"class":148},"done\n",[14,26116,26117],{},"首先安装依赖和GPG：",[133,26119,26123],{"className":26120,"code":26121,"language":26122,"meta":31,"style":31},"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",[139,26124,26125,26130,26135,26140,26145,26150,26155,26159,26164],{"__ignoreMap":31},[142,26126,26127],{"class":144,"line":145},[142,26128,26129],{},"# Add Docker's official GPG key:\n",[142,26131,26132],{"class":144,"line":64},[142,26133,26134],{},"sudo apt-get update\n",[142,26136,26137],{"class":144,"line":1208},[142,26138,26139],{},"sudo apt-get install ca-certificates curl\n",[142,26141,26142],{"class":144,"line":1223},[142,26143,26144],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[142,26146,26147],{"class":144,"line":1229},[142,26148,26149],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[142,26151,26152],{"class":144,"line":1243},[142,26153,26154],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[142,26156,26157],{"class":144,"line":1249},[142,26158,2428],{"emptyLinePlaceholder":69},[142,26160,26161],{"class":144,"line":1340},[142,26162,26163],{},"# 如果上面这行报错就弄下面这行\n",[142,26165,26166],{"class":144,"line":1346},[142,26167,26168],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26170,26171],{},"信任 Docker 的 GPG 公钥并添加仓库：",[133,26173,26175],{"className":23851,"code":26174,"language":23853,"meta":31,"style":31},"# 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",[139,26176,26177,26182,26188,26205,26238],{"__ignoreMap":31},[142,26178,26179],{"class":144,"line":145},[142,26180,26181],{"class":211},"# Add the repository to Apt sources:\n",[142,26183,26184,26186],{"class":144,"line":64},[142,26185,25154],{"class":201},[142,26187,24707],{"class":201},[142,26189,26190,26193,26196,26199,26202],{"class":144,"line":1208},[142,26191,26192],{"class":257},"  \"deb [arch=$(",[142,26194,26195],{"class":1991},"dpkg",[142,26197,26198],{"class":201}," --print-architecture",[142,26200,26201],{"class":257},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[142,26203,26204],{"class":201},"\\\n",[142,26206,26207,26210,26212,26214,26217,26220,26222,26224,26227,26229,26231,26234,26236],{"class":144,"line":1223},[142,26208,26209],{"class":257},"  \"",[142,26211,25128],{"class":152},[142,26213,711],{"class":201},[142,26215,26216],{"class":257}," \u002Fetc\u002Fos-release",[142,26218,26219],{"class":152}," && ",[142,26221,25154],{"class":201},[142,26223,9753],{"class":257},[142,26225,26226],{"class":152},"$VERSION_CODENAME",[142,26228,404],{"class":257},[142,26230,582],{"class":152},[142,26232,26233],{"class":257},"\" stable\"",[142,26235,25138],{"class":148},[142,26237,24707],{"class":201},[142,26239,26240,26243,26246,26249,26252],{"class":144,"line":1229},[142,26241,26242],{"class":1991},"  sudo",[142,26244,26245],{"class":257}," tee",[142,26247,26248],{"class":257}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[142,26250,26251],{"class":148}," >",[142,26253,26254],{"class":257}," \u002Fdev\u002Fnull\n",[14,26256,26257],{},"最后安装",[133,26259,26261],{"className":23851,"code":26260,"language":23853,"meta":31,"style":31},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[139,26262,26263,26272],{"__ignoreMap":31},[142,26264,26265,26267,26269],{"class":144,"line":145},[142,26266,24606],{"class":1991},[142,26268,26105],{"class":257},[142,26270,26271],{"class":257}," update\n",[142,26273,26274,26276,26278,26280,26283,26286,26289,26292],{"class":144,"line":64},[142,26275,24606],{"class":1991},[142,26277,26105],{"class":257},[142,26279,23863],{"class":257},[142,26281,26282],{"class":257}," docker-ce",[142,26284,26285],{"class":257}," docker-ce-cli",[142,26287,26288],{"class":257}," containerd.io",[142,26290,26291],{"class":257}," docker-buildx-plugin",[142,26293,26294],{"class":257}," docker-compose-plugin\n",[22027,26296,26298],{"id":26297},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26300,26301,26302,26305,26306,26309],{},"查看自己自己包管理工具版本（dnf是 ",[302,26303,26304],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[302,26307,26308],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[133,26311,26313],{"className":23851,"code":26312,"language":23853,"meta":31,"style":31},"dnf --version\n",[139,26314,26315],{"__ignoreMap":31},[142,26316,26317,26320],{"class":144,"line":145},[142,26318,26319],{"class":1991},"dnf",[142,26321,26322],{"class":201}," --version\n",[14,26324,26048,26325,26329],{},[391,26326,26053],{"href":26327,"rel":26328},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23894]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26331,26332],{},"如果你之前安装过 docker，请先删掉",[133,26334,26336],{"className":23851,"code":26335,"language":23853,"meta":31,"style":31},"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",[139,26337,26338,26352,26359,26366,26373,26380,26387,26394,26401,26408],{"__ignoreMap":31},[142,26339,26340,26342,26345,26347,26350],{"class":144,"line":145},[142,26341,24606],{"class":1991},[142,26343,26344],{"class":257}," dnf",[142,26346,26108],{"class":257},[142,26348,26349],{"class":257}," docker",[142,26351,24707],{"class":201},[142,26353,26354,26357],{"class":144,"line":64},[142,26355,26356],{"class":257},"                  docker-client",[142,26358,24707],{"class":201},[142,26360,26361,26364],{"class":144,"line":1208},[142,26362,26363],{"class":257},"                  docker-client-latest",[142,26365,24707],{"class":201},[142,26367,26368,26371],{"class":144,"line":1223},[142,26369,26370],{"class":257},"                  docker-common",[142,26372,24707],{"class":201},[142,26374,26375,26378],{"class":144,"line":1229},[142,26376,26377],{"class":257},"                  docker-latest",[142,26379,24707],{"class":201},[142,26381,26382,26385],{"class":144,"line":1243},[142,26383,26384],{"class":257},"                  docker-latest-logrotate",[142,26386,24707],{"class":201},[142,26388,26389,26392],{"class":144,"line":1249},[142,26390,26391],{"class":257},"                  docker-logrotate",[142,26393,24707],{"class":201},[142,26395,26396,26399],{"class":144,"line":1340},[142,26397,26398],{"class":257},"                  docker-selinux",[142,26400,24707],{"class":201},[142,26402,26403,26406],{"class":144,"line":1346},[142,26404,26405],{"class":257},"                  docker-engine-selinux",[142,26407,24707],{"class":201},[142,26409,26410],{"class":144,"line":1358},[142,26411,26412],{"class":257},"                  docker-engine\n",[14,26414,26415],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[133,26417,26419],{"className":23851,"code":26418,"language":23853,"meta":31,"style":31},"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",[139,26420,26421,26435,26450],{"__ignoreMap":31},[142,26422,26423,26425,26427,26430,26432],{"class":144,"line":145},[142,26424,24606],{"class":1991},[142,26426,26344],{"class":257},[142,26428,26429],{"class":201}," -y",[142,26431,23863],{"class":257},[142,26433,26434],{"class":257}," dnf-plugins-core\n",[142,26436,26437,26439,26441,26444,26447],{"class":144,"line":64},[142,26438,24606],{"class":1991},[142,26440,26344],{"class":257},[142,26442,26443],{"class":257}," config-manager",[142,26445,26446],{"class":257}," addrepo",[142,26448,26449],{"class":201}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[142,26451,26452,26454,26457,26460,26463],{"class":144,"line":1208},[142,26453,24606],{"class":1991},[142,26455,26456],{"class":257}," sed",[142,26458,26459],{"class":201}," -i",[142,26461,26462],{"class":257}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[142,26464,26465],{"class":257}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26467,26468],{},"最后安装：",[133,26470,26472],{"className":23851,"code":26471,"language":23853,"meta":31,"style":31},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[139,26473,26474],{"__ignoreMap":31},[142,26475,26476,26478,26480,26482,26484,26486,26488,26490],{"class":144,"line":145},[142,26477,24606],{"class":1991},[142,26479,26344],{"class":257},[142,26481,23863],{"class":257},[142,26483,26282],{"class":257},[142,26485,26285],{"class":257},[142,26487,26288],{"class":257},[142,26489,26291],{"class":257},[142,26491,26294],{"class":257},[113,26493,26495],{"id":26494},"_22配置环境","2.2.配置环境",[22027,26497,26499,26502],{"id":26498},"_221检查-docker-服务状态",[302,26500,26501],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26504,26505],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[133,26507,26509],{"className":23851,"code":26508,"language":23853,"meta":31,"style":31},"systemctl status docker\n",[139,26510,26511],{"__ignoreMap":31},[142,26512,26513,26516,26519],{"class":144,"line":145},[142,26514,26515],{"class":1991},"systemctl",[142,26517,26518],{"class":257}," status",[142,26520,26521],{"class":257}," docker\n",[22027,26523,26525,26502],{"id":26524},"_222启动-docker-服务",[302,26526,26527],{},"2.2.2.启动 Docker 服务",[14,26529,26530],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[133,26532,26534],{"className":23851,"code":26533,"language":23853,"meta":31,"style":31},"sudo systemctl start docker\n",[139,26535,26536],{"__ignoreMap":31},[142,26537,26538,26540,26543,26545],{"class":144,"line":145},[142,26539,24606],{"class":1991},[142,26541,26542],{"class":257}," systemctl",[142,26544,4212],{"class":257},[142,26546,26521],{"class":257},[22027,26548,26550,26502],{"id":26549},"_223设置-docker-开机自启",[302,26551,26552],{},"2.2.3.设置 Docker 开机自启",[14,26554,26555],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[133,26557,26559],{"className":23851,"code":26558,"language":23853,"meta":31,"style":31},"sudo systemctl enable docker\n",[139,26560,26561],{"__ignoreMap":31},[142,26562,26563,26565,26567,26570],{"class":144,"line":145},[142,26564,24606],{"class":1991},[142,26566,26542],{"class":257},[142,26568,26569],{"class":257}," enable",[142,26571,26521],{"class":257},[22027,26573,26575,13824,26578,13824,26583,26502],{"id":26574},"_224将用户添加到-docker-组",[302,26576,26577],{},"2.2.4.将用户添加到",[302,26579,26580],{},[139,26581,26582],{},"docker",[302,26584,26585],{},"组",[14,26587,26588,26589,26591],{},"使用以下命令将当前用户添加到 ",[139,26590,26582],{}," 组：",[133,26593,26595],{"className":23851,"code":26594,"language":23853,"meta":31,"style":31},"sudo usermod -aG docker $USER\n",[139,26596,26597],{"__ignoreMap":31},[142,26598,26599,26601,26604,26607,26609],{"class":144,"line":145},[142,26600,24606],{"class":1991},[142,26602,26603],{"class":257}," usermod",[142,26605,26606],{"class":201}," -aG",[142,26608,26349],{"class":257},[142,26610,26611],{"class":152}," $USER\n",[22027,26613,26615,26502],{"id":26614},"_225退出并重新登录",[302,26616,26617],{},"2.2.5.退出并重新登录",[14,26619,26620],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[133,26622,26624],{"className":23851,"code":26623,"language":23853,"meta":31,"style":31},"newgrp docker\n",[139,26625,26626],{"__ignoreMap":31},[142,26627,26628,26631],{"class":144,"line":145},[142,26629,26630],{"class":1991},"newgrp",[142,26632,26521],{"class":257},[22027,26634,26636,26502],{"id":26635},"_226重新启动-docker-服务如果需要",[302,26637,26638],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26640,26641],{},"确保 Docker 服务正在运行，可以使用以下命令：",[133,26643,26644],{"className":23851,"code":26533,"language":23853,"meta":31,"style":31},[139,26645,26646],{"__ignoreMap":31},[142,26647,26648,26650,26652,26654],{"class":144,"line":145},[142,26649,24606],{"class":1991},[142,26651,26542],{"class":257},[142,26653,4212],{"class":257},[142,26655,26521],{"class":257},[22027,26657,26659,26502],{"id":26658},"_227重启电脑后检查-docker-服务状态",[302,26660,26661],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26663,26664],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[133,26666,26668],{"className":23851,"code":26667,"language":23853,"meta":31,"style":31},"sudo reboot\nsystemctl status docker\n",[139,26669,26670,26677],{"__ignoreMap":31},[142,26671,26672,26674],{"class":144,"line":145},[142,26673,24606],{"class":1991},[142,26675,26676],{"class":257}," reboot\n",[142,26678,26679,26681,26683],{"class":144,"line":64},[142,26680,26515],{"class":1991},[142,26682,26518],{"class":257},[142,26684,26521],{"class":257},[14,26686,26687],{},[29,26688],{"alt":31,"src":26689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26691,26692],{},"第三行显示enabled说明开机自启动成功",[14,26694,26695],{},"按q退出",[113,26697,26699],{"id":26698},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26701,26702],{},"优先使用linux来使用docker是比较好的",[14,26704,26705],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26707,26708],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26710,26711,26712],{},"官方下载安装:",[391,26713,26714],{"href":26714,"rel":26715},"https:\u002F\u002Fwww.docker.com\u002F",[23894],[14,26717,26718],{},"Windows的Docker显卡直通与USB直通:",[14,26720,26721],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26723,26724],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26726,26727],{},[29,26728],{"alt":31,"src":26729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26731,26732],{},[29,26733],{"alt":31,"src":26734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26736,26737],{},[29,26738],{"alt":31,"src":26739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5155,26741,26742],{},"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":31,"searchDepth":64,"depth":64,"links":26744},[26745,26746,26747],{"id":26022,"depth":1208,"text":26023},{"id":26494,"depth":1208,"text":26495},{"id":26698,"depth":1208,"text":26699},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26014,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26754,"title":26755,"body":26756,"description":26763,"extension":67,"meta":27456,"navigation":69,"path":27457,"seo":27458,"stem":27459,"__hash__":27460},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26757,"toc":27450},[26758,26761,26764,26768,26773,26778,26781,26809,26814,26823,26826,26831,26835,26842,26847,26853,26857,26860,26864,26869,26961,26966,26984,26989,27010,27015,27031,27035,27040,27069,27074,27120,27125,27169,27177,27194,27199,27215,27220,27234,27237,27240,27243,27246,27275,27278,27283,27287,27290,27293,27299,27302,27305,27308,27370,27377,27382,27385,27403,27407,27410,27427,27430,27433,27447],[10,26759,26755],{"id":26760},"_3docker直通",[14,26762,26763],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[113,26765,26767],{"id":26766},"_31usb直通","3.1.USB直通",[14,26769,26770],{},[29,26771],{"alt":31,"src":26772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[96,26774,26775],{},[99,26776,26777],{},"方法一(不是很推荐新手)：",[14,26779,26780],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[133,26782,26784],{"className":23851,"code":26783,"language":23853,"meta":31,"style":31},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[139,26785,26786,26794,26799],{"__ignoreMap":31},[142,26787,26788,26791],{"class":144,"line":145},[142,26789,26790],{"class":1991},"ls",[142,26792,26793],{"class":257}," \u002Fdev\n",[142,26795,26796],{"class":144,"line":64},[142,26797,26798],{"class":211},"#例如\n",[142,26800,26801,26804,26806],{"class":144,"line":1208},[142,26802,26803],{"class":152},"--device",[142,26805,198],{"class":148},[142,26807,26808],{"class":257},"\u002Fdev\u002Ftty_USB0\n",[96,26810,26811],{"start":64},[99,26812,26813],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[133,26815,26817],{"className":23851,"code":26816,"language":23853,"meta":31,"style":31},"--privileged\n",[139,26818,26819],{"__ignoreMap":31},[142,26820,26821],{"class":144,"line":145},[142,26822,26816],{"class":1991},[14,26824,26825],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26827,26828],{},[29,26829],{"alt":31,"src":26830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[113,26832,26834],{"id":26833},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26836,26837,26838,26841],{},"NVIDIA Container Toolkit使用户 ",[302,26839,26840],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26843,26844],{},[29,26845],{"alt":31,"src":26846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26848,26849],{},[391,26850,26851],{"href":26851,"rel":26852},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23894],[22027,26854,26856],{"id":26855},"_321安装","3.2.1.安装",[14,26858,26859],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22939,26861,26863],{"id":26862},"_3211ubuntu","3.2.1.1.Ubuntu",[96,26865,26866],{},[99,26867,26868],{},"配置存储库 并更新",[133,26870,26872],{"className":23851,"code":26871,"language":23853,"meta":31,"style":31},"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",[139,26873,26874,26903,26923,26935,26947,26953],{"__ignoreMap":31},[142,26875,26876,26879,26882,26885,26887,26889,26892,26895,26898,26901],{"class":144,"line":145},[142,26877,26878],{"class":1991},"curl",[142,26880,26881],{"class":201}," -fsSL",[142,26883,26884],{"class":257}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[142,26886,25138],{"class":148},[142,26888,26102],{"class":1991},[142,26890,26891],{"class":257}," gpg",[142,26893,26894],{"class":201}," --dearmor",[142,26896,26897],{"class":201}," -o",[142,26899,26900],{"class":257}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[142,26902,24707],{"class":201},[142,26904,26905,26908,26910,26913,26916,26919,26921],{"class":144,"line":64},[142,26906,26907],{"class":152},"  && ",[142,26909,26878],{"class":1991},[142,26911,26912],{"class":201}," -s",[142,26914,26915],{"class":201}," -L",[142,26917,26918],{"class":257}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[142,26920,25138],{"class":148},[142,26922,24707],{"class":201},[142,26924,26925,26928,26931,26933],{"class":144,"line":1208},[142,26926,26927],{"class":1991},"    sed",[142,26929,26930],{"class":257}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[142,26932,25138],{"class":148},[142,26934,24707],{"class":201},[142,26936,26937,26940,26942,26945],{"class":144,"line":1223},[142,26938,26939],{"class":1991},"    sudo",[142,26941,26245],{"class":257},[142,26943,26944],{"class":257}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[142,26946,24707],{"class":201},[142,26948,26949,26951],{"class":144,"line":1229},[142,26950,26907],{"class":152},[142,26952,26204],{"class":201},[142,26954,26955,26957,26959],{"class":144,"line":1243},[142,26956,26939],{"class":1991},[142,26958,26105],{"class":257},[142,26960,26271],{"class":257},[96,26962,26963],{"start":64},[99,26964,26965],{},"安装nvidia-docker2",[133,26967,26969],{"className":23851,"code":26968,"language":23853,"meta":31,"style":31},"sudo apt-get install -y nvidia-docker2\n",[139,26970,26971],{"__ignoreMap":31},[142,26972,26973,26975,26977,26979,26981],{"class":144,"line":145},[142,26974,24606],{"class":1991},[142,26976,26105],{"class":257},[142,26978,23863],{"class":257},[142,26980,26429],{"class":201},[142,26982,26983],{"class":257}," nvidia-docker2\n",[96,26985,26986],{"start":1208},[99,26987,26988],{},"使用nvidia-ctk命令配置container runtime",[133,26990,26992],{"className":23851,"code":26991,"language":23853,"meta":31,"style":31},"sudo nvidia-ctk runtime configure --runtime=docker\n",[139,26993,26994],{"__ignoreMap":31},[142,26995,26996,26998,27001,27004,27007],{"class":144,"line":145},[142,26997,24606],{"class":1991},[142,26999,27000],{"class":257}," nvidia-ctk",[142,27002,27003],{"class":257}," runtime",[142,27005,27006],{"class":257}," configure",[142,27008,27009],{"class":201}," --runtime=docker\n",[96,27011,27012],{"start":1223},[99,27013,27014],{},"重启docker服务:",[133,27016,27018],{"className":23851,"code":27017,"language":23853,"meta":31,"style":31},"sudo systemctl restart docker\n",[139,27019,27020],{"__ignoreMap":31},[142,27021,27022,27024,27026,27029],{"class":144,"line":145},[142,27023,24606],{"class":1991},[142,27025,26542],{"class":257},[142,27027,27028],{"class":257}," restart",[142,27030,26521],{"class":257},[22939,27032,27034],{"id":27033},"_3212fedora","3.2.1.2.Fedora",[96,27036,27037],{},[99,27038,27039],{},"配置存储库",[133,27041,27043],{"className":23851,"code":27042,"language":23853,"meta":31,"style":31},"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",[139,27044,27045,27060],{"__ignoreMap":31},[142,27046,27047,27049,27051,27053,27056,27058],{"class":144,"line":145},[142,27048,26878],{"class":1991},[142,27050,26912],{"class":201},[142,27052,26915],{"class":201},[142,27054,27055],{"class":257}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[142,27057,25138],{"class":148},[142,27059,24707],{"class":201},[142,27061,27062,27064,27066],{"class":144,"line":64},[142,27063,24606],{"class":1991},[142,27065,26245],{"class":257},[142,27067,27068],{"class":257}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[96,27070,27071],{"start":64},[99,27072,27073],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[133,27075,27077],{"className":23851,"code":27076,"language":23853,"meta":31,"style":31},"# 如果是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",[139,27078,27079,27084,27098,27102,27107],{"__ignoreMap":31},[142,27080,27081],{"class":144,"line":145},[142,27082,27083],{"class":211},"# 如果是RHEL或者Rocky（DNF4）\n",[142,27085,27086,27088,27090,27092,27095],{"class":144,"line":64},[142,27087,24606],{"class":1991},[142,27089,26344],{"class":257},[142,27091,26443],{"class":257},[142,27093,27094],{"class":201}," --add-repo",[142,27096,27097],{"class":257}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[142,27099,27100],{"class":144,"line":1208},[142,27101,2428],{"emptyLinePlaceholder":69},[142,27103,27104],{"class":144,"line":1223},[142,27105,27106],{"class":211},"# 如果是Feodra41+（DNF5）\n",[142,27108,27109,27111,27113,27115,27117],{"class":144,"line":1229},[142,27110,24606],{"class":1991},[142,27112,26344],{"class":257},[142,27114,26443],{"class":257},[142,27116,26446],{"class":257},[142,27118,27119],{"class":201}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[96,27121,27122],{"start":1208},[99,27123,27124],{},"安装NVIDIA Container Toolki包",[133,27126,27128],{"className":23851,"code":27127,"language":23853,"meta":31,"style":31},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[139,27129,27130,27135,27148,27152,27157],{"__ignoreMap":31},[142,27131,27132],{"class":144,"line":145},[142,27133,27134],{"class":211},"# 如果是RHEL或者Rocky\n",[142,27136,27137,27139,27141,27143,27145],{"class":144,"line":64},[142,27138,24606],{"class":1991},[142,27140,26344],{"class":257},[142,27142,23863],{"class":257},[142,27144,26429],{"class":201},[142,27146,27147],{"class":257}," nvidia-container-toolkit\n",[142,27149,27150],{"class":144,"line":1208},[142,27151,2428],{"emptyLinePlaceholder":69},[142,27153,27154],{"class":144,"line":1223},[142,27155,27156],{"class":211},"# 如果是Fedora\n",[142,27158,27159,27161,27163,27165,27167],{"class":144,"line":1229},[142,27160,24606],{"class":1991},[142,27162,26344],{"class":257},[142,27164,23863],{"class":257},[142,27166,26429],{"class":201},[142,27168,27147],{"class":257},[96,27170,27171],{"start":1223},[99,27172,27173,27174,27176],{},"安装nvidia-docker2 ： 在Fedora上使用",[139,27175,26319],{},"进行安装",[133,27178,27180],{"className":23851,"code":27179,"language":23853,"meta":31,"style":31},"sudo dnf install -y nvidia-docker2\n",[139,27181,27182],{"__ignoreMap":31},[142,27183,27184,27186,27188,27190,27192],{"class":144,"line":145},[142,27185,24606],{"class":1991},[142,27187,26344],{"class":257},[142,27189,23863],{"class":257},[142,27191,26429],{"class":201},[142,27193,26983],{"class":257},[96,27195,27196],{"start":1229},[99,27197,27198],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[133,27200,27201],{"className":23851,"code":26991,"language":23853,"meta":31,"style":31},[139,27202,27203],{"__ignoreMap":31},[142,27204,27205,27207,27209,27211,27213],{"class":144,"line":145},[142,27206,24606],{"class":1991},[142,27208,27000],{"class":257},[142,27210,27003],{"class":257},[142,27212,27006],{"class":257},[142,27214,27009],{"class":201},[96,27216,27217],{"start":1243},[99,27218,27219],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[133,27221,27222],{"className":23851,"code":27017,"language":23853,"meta":31,"style":31},[139,27223,27224],{"__ignoreMap":31},[142,27225,27226,27228,27230,27232],{"class":144,"line":145},[142,27227,24606],{"class":1991},[142,27229,26542],{"class":257},[142,27231,27028],{"class":257},[142,27233,26521],{"class":257},[14,27235,27236],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27238,27239],{},"方法：",[14,27241,27242],{},"1️⃣nvidia-smi",[14,27244,27245],{},"2️⃣运行nvidia cuda 容器进行测试",[133,27247,27249],{"className":23851,"code":27248,"language":23853,"meta":31,"style":31},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[139,27250,27251],{"__ignoreMap":31},[142,27252,27253,27255,27257,27260,27263,27266,27269,27272],{"class":144,"line":145},[142,27254,24606],{"class":1991},[142,27256,26349],{"class":257},[142,27258,27259],{"class":257}," run",[142,27261,27262],{"class":201}," --rm",[142,27264,27265],{"class":201}," --gpus",[142,27267,27268],{"class":257}," all",[142,27270,27271],{"class":257}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[142,27273,27274],{"class":257}," nvidia-smi\n",[14,27276,27277],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27279,27280],{},[29,27281],{"alt":31,"src":27282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[113,27284,27286],{"id":27285},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27288,27289],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27291,27292],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27294,27295],{},[391,27296,27297],{"href":27297,"rel":27298},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23894],[14,27300,27301],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27303,27304],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27306,27307],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[290,27309,27310,27326],{},[293,27311,27312],{},[296,27313,27314,27317,27320,27323],{},[299,27315,27316],{"align":23765},"镜像类型",[299,27318,27319],{"align":23765},"适用场景",[299,27321,27322],{"align":23765},"示例标签",[299,27324,27325],{"align":23765},"大小",[337,27327,27328,27342,27356],{},[296,27329,27330,27333,27336,27339],{},[342,27331,27332],{"align":23765},"base",[342,27334,27335],{"align":23765},"仅需 CUDA 运行时库",[342,27337,27338],{"align":23765},"12.4.0-base-ubuntu22.04",[342,27340,27341],{"align":23765},"~240MB",[296,27343,27344,27347,27350,27353],{},[342,27345,27346],{"align":23765},"runtime",[342,27348,27349],{"align":23765},"部署编译后的应用（含数学库）",[342,27351,27352],{"align":23765},"12.4.0-runtime-ubuntu22.04",[342,27354,27355],{"align":23765},"~2GB",[296,27357,27358,27361,27364,27367],{},[342,27359,27360],{"align":23765},"devel",[342,27362,27363],{"align":23765},"开发环境（含编译工具）",[342,27365,27366],{"align":23765},"12.4.0-devel-ubuntu22.04",[342,27368,27369],{"align":23765},"~3GB",[14,27371,27372,27373,27376],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[139,27374,27375],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27378,27379],{},[29,27380],{"alt":31,"src":27381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27383,27384],{},"在dockerfile里就可以开头这么写：",[133,27386,27388],{"className":23851,"code":27387,"language":23853,"meta":31,"style":31},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[139,27389,27390,27395],{"__ignoreMap":31},[142,27391,27392],{"class":144,"line":145},[142,27393,27394],{"class":211},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[142,27396,27397,27400],{"class":144,"line":64},[142,27398,27399],{"class":1991},"FROM",[142,27401,27402],{"class":257}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[113,27404,27406],{"id":27405},"_34配置以太网","3.4.配置以太网",[14,27408,27409],{},"指定网络模式",[133,27411,27413],{"className":23851,"code":27412,"language":23853,"meta":31,"style":31},"--net=host \\\n",[139,27414,27415],{"__ignoreMap":31},[142,27416,27417,27420,27422,27425],{"class":144,"line":145},[142,27418,27419],{"class":152},"--net",[142,27421,198],{"class":148},[142,27423,27424],{"class":257},"host",[142,27426,24707],{"class":1991},[14,27428,27429],{},"启动参数里加上这行即可。具体在下方",[14,27431,27432],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1160,27434,27435,27438,27441,27444],{},[99,27436,27437],{},"--net=bridge:默认选项，表示连接到默认的网桥",[99,27439,27440],{},"--net=host:容器使用宿主机的网络",[99,27442,27443],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[99,27445,27446],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5155,27448,27449],{},"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":31,"searchDepth":64,"depth":64,"links":27451},[27452,27453,27454,27455],{"id":26766,"depth":1208,"text":26767},{"id":26833,"depth":1208,"text":26834},{"id":27285,"depth":1208,"text":27286},{"id":27405,"depth":1208,"text":27406},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26755,"description":26763},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27462,"title":27463,"body":27464,"description":27471,"extension":67,"meta":27477,"navigation":69,"path":27478,"seo":27479,"stem":27480,"__hash__":27481},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27465,"toc":27475},[27466,27469,27472],[10,27467,27463],{"id":27468},"_4dockerhub换源",[14,27470,27471],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27473,27474],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":31,"searchDepth":64,"depth":64,"links":27476},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27463,"description":27471},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27483,"title":27484,"body":27485,"description":31,"extension":67,"meta":28497,"navigation":69,"path":28498,"seo":28499,"stem":28500,"__hash__":28501},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27486,"toc":28492},[27487,27490,27494,27500,27504,27507,27847,27850,27853,27856,27861,27866,27869,27872,27875,27878,27897,27900,27911,27917,28099,28109,28125,28388,28390,28415,28430,28439,28489],[10,27488,27484],{"id":27489},"_5docker命令学习",[113,27491,27493],{"id":27492},"_51参考文档","5.1.参考文档",[14,27495,27496],{},[391,27497,27498],{"href":27498,"rel":27499},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23894],[113,27501,27503],{"id":27502},"_52常用命令","5.2.常用命令",[14,27505,27506],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[290,27508,27509,27522],{},[293,27510,27511],{},[296,27512,27513,27516,27519],{},[299,27514,27515],{"align":23765},"命令",[299,27517,27518],{"align":23765},"描述",[299,27520,27521],{"align":23765},"示例",[337,27523,27524,27535,27546,27557,27568,27579,27590,27601,27611,27622,27633,27644,27654,27665,27676,27687,27697,27707,27717,27727,27738,27749,27760,27771,27782,27793,27803,27814,27825,27836],{},[296,27525,27526,27529,27532],{},[342,27527,27528],{"align":23765},"docker run",[342,27530,27531],{"align":23765},"创建并启动一个新的容器。",[342,27533,27534],{"align":23765},"docker run -it ubuntu bash",[296,27536,27537,27540,27543],{},[342,27538,27539],{"align":23765},"docker build",[342,27541,27542],{"align":23765},"通过指定的 Dockerfile 创建一个新的镜像。",[342,27544,27545],{"align":23765},"docker build -t myimage .",[296,27547,27548,27551,27554],{},[342,27549,27550],{"align":23765},"docker pull",[342,27552,27553],{"align":23765},"从 Docker 仓库拉取镜像。",[342,27555,27556],{"align":23765},"docker pull ubuntu",[296,27558,27559,27562,27565],{},[342,27560,27561],{"align":23765},"docker push",[342,27563,27564],{"align":23765},"将本地镜像推送到 Docker 仓库。",[342,27566,27567],{"align":23765},"docker push myimage",[296,27569,27570,27573,27576],{},[342,27571,27572],{"align":23765},"docker stop",[342,27574,27575],{"align":23765},"停止一个正在运行的容器。",[342,27577,27578],{"align":23765},"docker stop container_id",[296,27580,27581,27584,27587],{},[342,27582,27583],{"align":23765},"docker start",[342,27585,27586],{"align":23765},"启动一个已经存在的容器。",[342,27588,27589],{"align":23765},"docker start container_id",[296,27591,27592,27595,27598],{},[342,27593,27594],{"align":23765},"docker restart",[342,27596,27597],{"align":23765},"重新启动容器。",[342,27599,27600],{"align":23765},"docker restart container_id",[296,27602,27603,27606,27609],{},[342,27604,27605],{"align":23765},"docker ps",[342,27607,27608],{"align":23765},"列出当前正在运行的容器。",[342,27610,27605],{"align":23765},[296,27612,27613,27616,27619],{},[342,27614,27615],{"align":23765},"docker rm",[342,27617,27618],{"align":23765},"删除一个或多个停止的容器。",[342,27620,27621],{"align":23765},"docker rm container_id",[296,27623,27624,27627,27630],{},[342,27625,27626],{"align":23765},"docker exec",[342,27628,27629],{"align":23765},"在一个正在运行的容器中执行命令。",[342,27631,27632],{"align":23765},"docker exec -it container_id bash",[296,27634,27635,27638,27641],{},[342,27636,27637],{"align":23765},"docker logs",[342,27639,27640],{"align":23765},"查看容器的日志输出。",[342,27642,27643],{"align":23765},"docker logs container_id",[296,27645,27646,27649,27652],{},[342,27647,27648],{"align":23765},"docker images",[342,27650,27651],{"align":23765},"列出本地所有镜像。",[342,27653,27648],{"align":23765},[296,27655,27656,27659,27662],{},[342,27657,27658],{"align":23765},"docker rmi",[342,27660,27661],{"align":23765},"删除一个或多个镜像。",[342,27663,27664],{"align":23765},"docker rmi myimage",[296,27666,27667,27670,27673],{},[342,27668,27669],{"align":23765},"docker network",[342,27671,27672],{"align":23765},"管理 Docker 网络。",[342,27674,27675],{"align":23765},"docker network ls",[296,27677,27678,27681,27684],{},[342,27679,27680],{"align":23765},"docker volume",[342,27682,27683],{"align":23765},"管理 Docker 数据卷。",[342,27685,27686],{"align":23765},"docker volume ls",[296,27688,27689,27692,27695],{},[342,27690,27691],{"align":23765},"docker-compose up",[342,27693,27694],{"align":23765},"启动 docker-compose.yml 中定义的所有服务。",[342,27696,27691],{"align":23765},[296,27698,27699,27702,27705],{},[342,27700,27701],{"align":23765},"docker-compose down",[342,27703,27704],{"align":23765},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[342,27706,27701],{"align":23765},[296,27708,27709,27712,27715],{},[342,27710,27711],{"align":23765},"docker info",[342,27713,27714],{"align":23765},"显示 Docker 系统的详细信息。",[342,27716,27711],{"align":23765},[296,27718,27719,27722,27725],{},[342,27720,27721],{"align":23765},"docker stats",[342,27723,27724],{"align":23765},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[342,27726,27721],{"align":23765},[296,27728,27729,27732,27735],{},[342,27730,27731],{"align":23765},"docker inspect",[342,27733,27734],{"align":23765},"查看容器或镜像的详细信息（JSON 格式）。",[342,27736,27737],{"align":23765},"docker inspect container_id",[296,27739,27740,27743,27746],{},[342,27741,27742],{"align":23765},"docker save",[342,27744,27745],{"align":23765},"将一个镜像保存为 tar 文件。",[342,27747,27748],{"align":23765},"docker save -o myimage.tar myimage",[296,27750,27751,27754,27757],{},[342,27752,27753],{"align":23765},"docker load",[342,27755,27756],{"align":23765},"从 tar 文件中加载镜像。",[342,27758,27759],{"align":23765},"docker load -i myimage.tar",[296,27761,27762,27765,27768],{},[342,27763,27764],{"align":23765},"docker tag",[342,27766,27767],{"align":23765},"为镜像添加标签（tag）。",[342,27769,27770],{"align":23765},"docker tag myimage myimage:v1",[296,27772,27773,27776,27779],{},[342,27774,27775],{"align":23765},"docker buildx build",[342,27777,27778],{"align":23765},"使用 Buildx 构建多架构镜像。",[342,27780,27781],{"align":23765},"docker buildx build -t myimage .",[296,27783,27784,27787,27790],{},[342,27785,27786],{"align":23765},"docker buildx create",[342,27788,27789],{"align":23765},"创建一个新的 Buildx 构建实例。",[342,27791,27792],{"align":23765},"docker buildx create –use",[296,27794,27795,27798,27801],{},[342,27796,27797],{"align":23765},"docker buildx ls",[342,27799,27800],{"align":23765},"列出所有可用的 Buildx 构建实例。",[342,27802,27797],{"align":23765},[296,27804,27805,27808,27811],{},[342,27806,27807],{"align":23765},"docker buildx use",[342,27809,27810],{"align":23765},"设置当前的 Buildx 构建实例。",[342,27812,27813],{"align":23765},"docker buildx use mybuilder",[296,27815,27816,27819,27822],{},[342,27817,27818],{"align":23765},"docker buildx bake",[342,27820,27821],{"align":23765},"使用 Bake 文件批量构建镜像。",[342,27823,27824],{"align":23765},"docker buildx bake -f bake.hcl",[296,27826,27827,27830,27833],{},[342,27828,27829],{"align":23765},"docker buildx build –push",[342,27831,27832],{"align":23765},"构建镜像并推送到镜像仓库。",[342,27834,27835],{"align":23765},"docker buildx build –push -t myimage .",[296,27837,27838,27841,27844],{},[342,27839,27840],{"align":23765},"docker buildx build –platform",[342,27842,27843],{"align":23765},"构建镜像并为多个平台生成支持。",[342,27845,27846],{"align":23765},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27848,27849],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27851,27852],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27854,27855],{},"docker images 可以查看已经下载的镜像",[14,27857,27858],{},[29,27859],{"alt":31,"src":27860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27862,27863],{},[302,27864,27865],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27867,27868],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27870,27871],{},"docker container logs 查看容器日志",[14,27873,27874],{},"docker top 查看容器里的进程",[14,27876,27877],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[133,27879,27881],{"className":23851,"code":27880,"language":23853,"meta":31,"style":31},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[139,27882,27883],{"__ignoreMap":31},[142,27884,27885,27888,27891,27894],{"class":144,"line":145},[142,27886,27887],{"class":1991},"如：docker",[142,27889,27890],{"class":257}," cp",[142,27892,27893],{"class":257}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[142,27895,27896],{"class":257}," \u002Fmydata\u002Fnginx\n",[14,27898,27899],{},"docker run时在启动容器的时候会有几个常用的选项：",[1160,27901,27902,27905,27908],{},[99,27903,27904],{},"-d选项：表示后台运行",[99,27906,27907],{},"-P选项：随机端口映射",[99,27909,27910],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[113,27912,27914],{"id":27913},"_53run命令的参数非常重要",[302,27915,27916],{},"5.3.run命令的参数（非常重要）",[290,27918,27919,27932],{},[293,27920,27921],{},[296,27922,27923,27926,27929],{},[299,27924,27925],{"align":23765},"参数\u002F配置",[299,27927,27928],{"align":23765},"功能说明",[299,27930,27931],{"align":23765},"重要性与参考依据",[337,27933,27934,27945,27956,27967,27978,27989,28000,28011,28022,28033,28044,28055,28066,28077,28088],{},[296,27935,27936,27939,27942],{},[342,27937,27938],{"align":23765},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[342,27940,27941],{"align":23765},"指定容器名称，便于后续管理",[342,27943,27944],{"align":23765},"替代随机生成的容器名。",[296,27946,27947,27950,27953],{},[342,27948,27949],{"align":23765},"–gpus all",[342,27951,27952],{"align":23765},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[342,27954,27955],{"align":23765},"用于CUDA加速等GPU依赖任务。",[296,27957,27958,27961,27964],{},[342,27959,27960],{"align":23765},"-e NVIDIA_DRIVER_CAPABILITIES=all",[342,27962,27963],{"align":23765},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[342,27965,27966],{"align":23765},"确保容器内GPU功能完整67。",[296,27968,27969,27972,27975],{},[342,27970,27971],{"align":23765},"-dit",[342,27973,27974],{"align":23765},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[342,27976,27977],{"align":23765},"允许容器在后台运行并支持交互操作。",[296,27979,27980,27983,27986],{},[342,27981,27982],{"align":23765},"–privileged",[342,27984,27985],{"align":23765},"赋予容器完全主机权限（可访问设备、内核模块等）",[342,27987,27988],{"align":23765},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[296,27990,27991,27994,27997],{},[342,27992,27993],{"align":23765},"–net=host",[342,27995,27996],{"align":23765},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[342,27998,27999],{"align":23765},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[296,28001,28002,28005,28008],{},[342,28003,28004],{"align":23765},"–group-add audio–group-add video–group-add dialout",[342,28006,28007],{"align":23765},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[342,28009,28010],{"align":23765},"避免权限问题（如避免无法调用摄像头、麦克风）。",[296,28012,28013,28016,28019],{},[342,28014,28015],{"align":23765},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[342,28017,28018],{"align":23765},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[342,28020,28021],{"align":23765},"支持容器内运行图形界面应用（如OpenCV可视化）。",[296,28023,28024,28027,28030],{},[342,28025,28026],{"align":23765},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[342,28028,28029],{"align":23765},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[342,28031,28032],{"align":23765},"实现容器内图形显示。",[296,28034,28035,28038,28041],{},[342,28036,28037],{"align":23765},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[342,28039,28040],{"align":23765},"挂载X11认证文件（只读）",[342,28042,28043],{"align":23765},"确保容器有权连接宿主机显示服务。",[296,28045,28046,28049,28052],{},[342,28047,28048],{"align":23765},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[342,28050,28051],{"align":23765},"挂载Wayland显示协议相关目录",[342,28053,28054],{"align":23765},"支持Wayland协议的图形显示。",[296,28056,28057,28060,28063],{},[342,28058,28059],{"align":23765},"–ulimit nofile=1024:524288",[342,28061,28062],{"align":23765},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[342,28064,28065],{"align":23765},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[296,28067,28068,28071,28074],{},[342,28069,28070],{"align":23765},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[342,28072,28073],{"align":23765},"挂载宿主机用户目录到容器内同名路径",[342,28075,28076],{"align":23765},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[296,28078,28079,28082,28085],{},[342,28080,28081],{"align":23765},"-w \u002Fhome\u002Ftungchiahui",[342,28083,28084],{"align":23765},"设置容器启动后的默认工作目录",[342,28086,28087],{"align":23765},"直接进入项目路径，方便执行命令2324。",[296,28089,28090,28093,28096],{},[342,28091,28092],{"align":23765},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[342,28094,28095],{"align":23765},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[342,28097,28098],{"align":23765},"提供预配置的深度学习与机器人开发环境。",[14,28100,28101,28102,28104,28105,28108],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[139,28103,24606],{},"加不加",[139,28106,28107],{},"sudo -E","都无所谓。",[14,28110,28111,28112,28114,28115,28117,28118,28121,28122,28124],{},"用户已经被加到docker组了，不用",[139,28113,24606],{},"也行跑，其次，",[139,28116,24606],{},"运行的话，你的",[139,28119,28120],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[139,28123,28120],{},"更不可能变了。",[133,28126,28128],{"className":23851,"code":28127,"language":23853,"meta":31,"style":31},"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",[139,28129,28130,28143,28153,28163,28175,28182,28189,28196,28206,28215,28224,28238,28250,28262,28271,28281,28290,28305,28338,28365,28376,28383],{"__ignoreMap":31},[142,28131,28132,28134,28136,28138,28141],{"class":144,"line":145},[142,28133,24606],{"class":1991},[142,28135,26349],{"class":257},[142,28137,27259],{"class":257},[142,28139,28140],{"class":201}," --name=ros_opencv_cuda",[142,28142,24707],{"class":201},[142,28144,28145,28148,28151],{"class":144,"line":64},[142,28146,28147],{"class":152},"--gpus ",[142,28149,28150],{"class":257},"all",[142,28152,24707],{"class":201},[142,28154,28155,28158,28161],{"class":144,"line":1208},[142,28156,28157],{"class":152},"-e ",[142,28159,28160],{"class":257},"NVIDIA_DRIVER_CAPABILITIES=all",[142,28162,24707],{"class":201},[142,28164,28165,28167,28170,28173],{"class":144,"line":1223},[142,28166,28157],{"class":152},[142,28168,28169],{"class":257},"DISPLAY=",[142,28171,28172],{"class":152},"$DISPLAY ",[142,28174,26204],{"class":201},[142,28176,28177,28180],{"class":144,"line":1229},[142,28178,28179],{"class":152},"-dit ",[142,28181,26204],{"class":201},[142,28183,28184,28187],{"class":144,"line":1243},[142,28185,28186],{"class":152},"--privileged ",[142,28188,26204],{"class":201},[142,28190,28191,28194],{"class":144,"line":1249},[142,28192,28193],{"class":152},"--net=host ",[142,28195,26204],{"class":201},[142,28197,28198,28201,28204],{"class":144,"line":1340},[142,28199,28200],{"class":152},"--group-add ",[142,28202,28203],{"class":257},"audio",[142,28205,24707],{"class":201},[142,28207,28208,28210,28213],{"class":144,"line":1346},[142,28209,28200],{"class":152},[142,28211,28212],{"class":257},"video",[142,28214,24707],{"class":201},[142,28216,28217,28219,28222],{"class":144,"line":1358},[142,28218,28200],{"class":152},[142,28220,28221],{"class":257},"dialout",[142,28223,24707],{"class":201},[142,28225,28226,28228,28231,28233,28236],{"class":144,"line":1640},[142,28227,28157],{"class":152},[142,28229,28230],{"class":257},"XAUTHORITY=",[142,28232,28120],{"class":152},[142,28234,28235],{"class":257},"\u002F.Xauthority",[142,28237,24707],{"class":201},[142,28239,28240,28242,28245,28248],{"class":144,"line":1645},[142,28241,28157],{"class":152},[142,28243,28244],{"class":257},"WAYLAND_DISPLAY=",[142,28246,28247],{"class":152},"$WAYLAND_DISPLAY ",[142,28249,26204],{"class":201},[142,28251,28252,28254,28257,28260],{"class":144,"line":1651},[142,28253,28157],{"class":152},[142,28255,28256],{"class":257},"XDG_RUNTIME_DIR=",[142,28258,28259],{"class":152},"$XDG_RUNTIME_DIR ",[142,28261,26204],{"class":201},[142,28263,28264,28266,28269],{"class":144,"line":1656},[142,28265,28157],{"class":152},[142,28267,28268],{"class":257},"QT_QPA_PLATFORM=xcb",[142,28270,24707],{"class":201},[142,28272,28273,28276,28279],{"class":144,"line":1670},[142,28274,28275],{"class":152},"-v ",[142,28277,28278],{"class":257},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[142,28280,24707],{"class":201},[142,28282,28283,28285,28288],{"class":144,"line":1675},[142,28284,28275],{"class":152},[142,28286,28287],{"class":257},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[142,28289,24707],{"class":201},[142,28291,28292,28295,28298,28300,28303],{"class":144,"line":1681},[142,28293,28294],{"class":152},"-v $HOME",[142,28296,28297],{"class":257},"\u002F.Xauthority:",[142,28299,28120],{"class":152},[142,28301,28302],{"class":257},"\u002F.Xauthority:ro",[142,28304,24707],{"class":201},[142,28306,28307,28309,28312,28314,28317,28320,28322,28325,28327,28329,28331,28333,28336],{"class":144,"line":1702},[142,28308,28275],{"class":152},[142,28310,28311],{"class":257},"\u002Frun\u002Fuser\u002F",[142,28313,25128],{"class":152},[142,28315,28316],{"class":1991},"id",[142,28318,28319],{"class":201}," -u",[142,28321,582],{"class":152},[142,28323,28324],{"class":257},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[142,28326,25128],{"class":152},[142,28328,28316],{"class":1991},[142,28330,28319],{"class":201},[142,28332,582],{"class":152},[142,28334,28335],{"class":257},"\u002Fwayland-0",[142,28337,24707],{"class":201},[142,28339,28340,28342,28344,28346,28348,28350,28352,28355,28357,28359,28361,28363],{"class":144,"line":1707},[142,28341,28275],{"class":152},[142,28343,28311],{"class":257},[142,28345,25128],{"class":152},[142,28347,28316],{"class":1991},[142,28349,28319],{"class":201},[142,28351,582],{"class":152},[142,28353,28354],{"class":257},":\u002Frun\u002Fuser\u002F",[142,28356,25128],{"class":152},[142,28358,28316],{"class":1991},[142,28360,28319],{"class":201},[142,28362,13743],{"class":152},[142,28364,26204],{"class":201},[142,28366,28367,28369,28371,28374],{"class":144,"line":1721},[142,28368,28294],{"class":152},[142,28370,1012],{"class":257},[142,28372,28373],{"class":152},"$HOME ",[142,28375,26204],{"class":201},[142,28377,28378,28381],{"class":144,"line":1726},[142,28379,28380],{"class":152},"-w $HOME ",[142,28382,26204],{"class":201},[142,28384,28385],{"class":144,"line":1755},[142,28386,28387],{"class":152},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28389,9054],{},[96,28391,28392,28400,28403,28406],{},[99,28393,28394,13824,28396,28399],{},[139,28395,28160],{},[139,28397,28398],{},"--gpus all","没有英伟达显卡请注释。",[99,28401,28402],{},"--name后面请自己为容器起名。",[99,28404,28405],{},"最后一行仓库名称请你自己找对应的镜像填上。",[99,28407,28408,28409,28414],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23582,28410,28411],{},[302,28412,28413],{},"请不要加","。",[133,28416,28418],{"className":23851,"code":28417,"language":23853,"meta":31,"style":31},"--ulimit nofile=1024:524288 \\\n",[139,28419,28420],{"__ignoreMap":31},[142,28421,28422,28425,28428],{"class":144,"line":145},[142,28423,28424],{"class":1991},"--ulimit",[142,28426,28427],{"class":257}," nofile=1024:524288",[142,28429,24707],{"class":201},[14,28431,28432,28433,28438],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23582,28434,28435],{},[302,28436,28437],{},"不建议","**.**",[133,28440,28442],{"className":23851,"code":28441,"language":23853,"meta":31,"style":31},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[139,28443,28444,28471,28480],{"__ignoreMap":31},[142,28445,28446,28449,28452,28454,28456,28458,28460,28462,28464,28467,28469],{"class":144,"line":145},[142,28447,28448],{"class":1991},"--user",[142,28450,28451],{"class":152}," $(",[142,28453,28316],{"class":1991},[142,28455,28319],{"class":201},[142,28457,582],{"class":152},[142,28459,1012],{"class":257},[142,28461,25128],{"class":152},[142,28463,28316],{"class":1991},[142,28465,28466],{"class":201}," -g",[142,28468,13743],{"class":152},[142,28470,26204],{"class":201},[142,28472,28473,28475,28478],{"class":144,"line":64},[142,28474,28275],{"class":152},[142,28476,28477],{"class":257},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[142,28479,24707],{"class":201},[142,28481,28482,28484,28487],{"class":144,"line":1208},[142,28483,28275],{"class":152},[142,28485,28486],{"class":257},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[142,28488,24707],{"class":201},[5155,28490,28491],{},"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":31,"searchDepth":64,"depth":64,"links":28493},[28494,28495,28496],{"id":27492,"depth":1208,"text":27493},{"id":27502,"depth":1208,"text":27503},{"id":27913,"depth":1208,"text":27916},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27484,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28503,"title":28504,"body":28505,"description":31,"extension":67,"meta":30128,"navigation":69,"path":30129,"seo":30130,"stem":30131,"__hash__":30132},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28506,"toc":30123},[28507,28510,28514,28517,28739,28743,28747,28750,28856,28861,28864,28869,28872,28877,28880,28885,28888,28900,28903,28908,28915,28943,28950,29026,29031,29034,29057,29059,29134,29139,29142,29146,29154,29159,29164,29168,29179,29185,29188,29191,29215,29218,29221,29249,29252,29255,29720,29723,29728,29733,29737,29760,29765,29769,29773,29776,29779,29782,29809,29812,29815,29833,29836,29839,29861,29869,29874,29879,29883,29886,29889,29892,29895,29940,29943,29961,29964,29969,29972,29993,29996,30052,30055,30060,30064,30067,30074,30077,30080,30085,30088,30104,30107,30120],[10,28508,28504],{"id":28509},"_6手动创建docker镜像",[113,28511,28513],{"id":28512},"_61dockerfile","6.1.DockerFile",[14,28515,28516],{},"常用命令：",[290,28518,28519,28530],{},[293,28520,28521],{},[296,28522,28523,28526,28528],{},[299,28524,28525],{"align":23765},"指令",[299,28527,25898],{"align":23765},[299,28529,27521],{"align":23765},[337,28531,28532,28542,28558,28569,28580,28591,28602,28613,28624,28638,28652,28663,28677,28688,28699,28713,28728],{},[296,28533,28534,28536,28539],{},[342,28535,27399],{"align":23765},[342,28537,28538],{"align":23765},"指定基础镜像，是 Dockerfile 的起点",[342,28540,28541],{"align":23765},"FROM ubuntu:22.04",[296,28543,28544,28547,28550],{},[342,28545,28546],{"align":23765},"LABEL",[342,28548,28549],{"align":23765},"添加元数据（如作者、版本等）",[342,28551,28552,28553,28557],{"align":23765},"LABEL maintainer=”",[391,28554,28556],{"href":28555},"mailto:you@example.com","you@example.com","”",[296,28559,28560,28563,28566],{},[342,28561,28562],{"align":23765},"ENV",[342,28564,28565],{"align":23765},"设置环境变量",[342,28567,28568],{"align":23765},"ENV PORT=8080",[296,28570,28571,28574,28577],{},[342,28572,28573],{"align":23765},"ARG",[342,28575,28576],{"align":23765},"构建参数，只在构建期间可用",[342,28578,28579],{"align":23765},"ARG VERSION=1.0",[296,28581,28582,28585,28588],{},[342,28583,28584],{"align":23765},"RUN",[342,28586,28587],{"align":23765},"构建镜像时运行命令",[342,28589,28590],{"align":23765},"RUN apt-get update && apt-get install -y curl",[296,28592,28593,28596,28599],{},[342,28594,28595],{"align":23765},"COPY",[342,28597,28598],{"align":23765},"复制文件到镜像中",[342,28600,28601],{"align":23765},"COPY . \u002Fapp",[296,28603,28604,28607,28610],{},[342,28605,28606],{"align":23765},"ADD",[342,28608,28609],{"align":23765},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[342,28611,28612],{"align":23765},"ADD archive.tar.gz \u002Fdata\u002F",[296,28614,28615,28618,28621],{},[342,28616,28617],{"align":23765},"WORKDIR",[342,28619,28620],{"align":23765},"设置工作目录",[342,28622,28623],{"align":23765},"WORKDIR \u002Fopt",[296,28625,28626,28629,28632],{},[342,28627,28628],{"align":23765},"CMD",[342,28630,28631],{"align":23765},"设置容器启动时默认命令（可被 docker run 覆盖）",[342,28633,28634,28635],{"align":23765},"CMD ",[142,28636,28637],{},"“node”, “index.js”",[296,28639,28640,28643,28646],{},[342,28641,28642],{"align":23765},"ENTRYPOINT",[342,28644,28645],{"align":23765},"设置容器启动时固定命令（通常用于 CLI 工具等）",[342,28647,28648,28649],{"align":23765},"ENTRYPOINT ",[142,28650,28651],{},"“python3”",[296,28653,28654,28657,28660],{},[342,28655,28656],{"align":23765},"EXPOSE",[342,28658,28659],{"align":23765},"声明镜像内服务监听的端口（不会自动映射）",[342,28661,28662],{"align":23765},"EXPOSE 80",[296,28664,28665,28668,28671],{},[342,28666,28667],{"align":23765},"VOLUME",[342,28669,28670],{"align":23765},"声明数据卷挂载点",[342,28672,28673,28674],{"align":23765},"VOLUME ",[142,28675,28676],{},"“\u002Fdata”",[296,28678,28679,28682,28685],{},[342,28680,28681],{"align":23765},"USER",[342,28683,28684],{"align":23765},"设置后续命令执行的用户",[342,28686,28687],{"align":23765},"USER appuser",[296,28689,28690,28693,28696],{},[342,28691,28692],{"align":23765},"ONBUILD",[342,28694,28695],{"align":23765},"当镜像作为其他镜像基础镜像时触发的构建指令",[342,28697,28698],{"align":23765},"ONBUILD COPY . \u002Fsrc",[296,28700,28701,28704,28707],{},[342,28702,28703],{"align":23765},"SHELL",[342,28705,28706],{"align":23765},"更改默认 shell，比如将 sh -c 改为 bash -c",[342,28708,28709,28710],{"align":23765},"SHELL ",[142,28711,28712],{},"“\u002Fbin\u002Fbash”, “-c”",[296,28714,28715,28718,28721],{},[342,28716,28717],{"align":23765},"HEALTHCHECK",[342,28719,28720],{"align":23765},"定义容器运行时的健康检查命令",[342,28722,28723,28724],{"align":23765},"`HEALTHCHECK CMD curl –fail ",[391,28725,28726],{"href":28726,"rel":28727},"http:\u002F\u002Flocalhost:8080",[23894],[296,28729,28730,28733,28736],{},[342,28731,28732],{"align":23765},"STOPSIGNAL",[342,28734,28735],{"align":23765},"容器停止时发送的信号",[342,28737,28738],{"align":23765},"STOPSIGNAL SIGKILL",[113,28740,28742],{"id":28741},"_62自己创建容器","6.2.自己创建容器",[22027,28744,28746],{"id":28745},"_621手动创建","6.2.1.手动创建",[14,28748,28749],{},"在x86电脑上编译x86的：",[133,28751,28753],{"className":23851,"code":28752,"language":23853,"meta":31,"style":31},"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",[139,28754,28755,28771,28775,28788,28792,28805,28809,28822,28826,28839,28843],{"__ignoreMap":31},[142,28756,28757,28759,28762,28765,28768],{"class":144,"line":145},[142,28758,26582],{"class":1991},[142,28760,28761],{"class":257}," build",[142,28763,28764],{"class":201}," -t",[142,28766,28767],{"class":257}," ros-melodic-cuda118-cudnn8-bionic:latest",[142,28769,28770],{"class":257}," .\n",[142,28772,28773],{"class":144,"line":64},[142,28774,2428],{"emptyLinePlaceholder":69},[142,28776,28777,28779,28781,28783,28786],{"class":144,"line":1208},[142,28778,26582],{"class":1991},[142,28780,28761],{"class":257},[142,28782,28764],{"class":201},[142,28784,28785],{"class":257}," ros-noetic-focal:latest",[142,28787,28770],{"class":257},[142,28789,28790],{"class":144,"line":1223},[142,28791,2428],{"emptyLinePlaceholder":69},[142,28793,28794,28796,28798,28800,28803],{"class":144,"line":1229},[142,28795,26582],{"class":1991},[142,28797,28761],{"class":257},[142,28799,28764],{"class":201},[142,28801,28802],{"class":257}," ros-humble-jammy:latest",[142,28804,28770],{"class":257},[142,28806,28807],{"class":144,"line":1243},[142,28808,2428],{"emptyLinePlaceholder":69},[142,28810,28811,28813,28815,28817,28820],{"class":144,"line":1249},[142,28812,26582],{"class":1991},[142,28814,28761],{"class":257},[142,28816,28764],{"class":201},[142,28818,28819],{"class":257}," ros-jazzy-noble:latest",[142,28821,28770],{"class":257},[142,28823,28824],{"class":144,"line":1340},[142,28825,2428],{"emptyLinePlaceholder":69},[142,28827,28828,28830,28832,28834,28837],{"class":144,"line":1346},[142,28829,26582],{"class":1991},[142,28831,28761],{"class":257},[142,28833,28764],{"class":201},[142,28835,28836],{"class":257}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[142,28838,28770],{"class":257},[142,28840,28841],{"class":144,"line":1358},[142,28842,2428],{"emptyLinePlaceholder":69},[142,28844,28845,28847,28849,28851,28854],{"class":144,"line":1640},[142,28846,26582],{"class":1991},[142,28848,28761],{"class":257},[142,28850,28764],{"class":201},[142,28852,28853],{"class":257}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[142,28855,28770],{"class":257},[14,28857,28858],{},[29,28859],{"alt":31,"src":28860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28862,28863],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28865,28866],{},[29,28867],{"alt":31,"src":28868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28870,28871],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[96,28873,28874],{},[99,28875,28876],{},"创建 Docker Hub 账户",[14,28878,28879],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[96,28881,28882],{"start":64},[99,28883,28884],{},"登录 Docker Hub",[14,28886,28887],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[133,28889,28891],{"className":23851,"code":28890,"language":23853,"meta":31,"style":31},"docker login\n",[139,28892,28893],{"__ignoreMap":31},[142,28894,28895,28897],{"class":144,"line":145},[142,28896,26582],{"class":1991},[142,28898,28899],{"class":257}," login\n",[14,28901,28902],{},"输入你的 Docker Hub 用户名和密码进行验证。",[96,28904,28905],{},[99,28906,28907],{},"为你的镜像打标签",[14,28909,28910,28911,28914],{},"Docker Hub 使用 ",[139,28912,28913],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[133,28916,28918],{"className":23851,"code":28917,"language":23853,"meta":31,"style":31},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[139,28919,28920],{"__ignoreMap":31},[142,28921,28922,28924,28927,28929,28932,28935,28938,28940],{"class":144,"line":145},[142,28923,26582],{"class":1991},[142,28925,28926],{"class":257}," tag",[142,28928,28819],{"class":257},[142,28930,28931],{"class":148}," \u003C",[142,28933,28934],{"class":257},"你的用户",[142,28936,28937],{"class":152},"名",[142,28939,1113],{"class":148},[142,28941,28942],{"class":257},"\u002Fros-jazzy-noble:latest\n",[14,28944,28945,28946,28949],{},"例如，如果你的 Docker Hub 用户名是 ",[139,28947,28948],{},"tungchiahui","，你应该执行：",[133,28951,28953],{"className":23851,"code":28952,"language":23853,"meta":31,"style":31},"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",[139,28954,28955,28966,28970,28981,28985,28996,29000,29011,29015],{"__ignoreMap":31},[142,28956,28957,28959,28961,28963],{"class":144,"line":145},[142,28958,26582],{"class":1991},[142,28960,28926],{"class":257},[142,28962,28785],{"class":257},[142,28964,28965],{"class":257}," tungchiahui\u002Fros-noetic-focal:latest\n",[142,28967,28968],{"class":144,"line":64},[142,28969,2428],{"emptyLinePlaceholder":69},[142,28971,28972,28974,28976,28978],{"class":144,"line":1208},[142,28973,26582],{"class":1991},[142,28975,28926],{"class":257},[142,28977,28802],{"class":257},[142,28979,28980],{"class":257}," tungchiahui\u002Fros-humble-jammy:latest\n",[142,28982,28983],{"class":144,"line":1223},[142,28984,2428],{"emptyLinePlaceholder":69},[142,28986,28987,28989,28991,28993],{"class":144,"line":1229},[142,28988,26582],{"class":1991},[142,28990,28926],{"class":257},[142,28992,28819],{"class":257},[142,28994,28995],{"class":257}," tungchiahui\u002Fros-jazzy-noble:latest\n",[142,28997,28998],{"class":144,"line":1243},[142,28999,2428],{"emptyLinePlaceholder":69},[142,29001,29002,29004,29006,29008],{"class":144,"line":1249},[142,29003,26582],{"class":1991},[142,29005,28926],{"class":257},[142,29007,28836],{"class":257},[142,29009,29010],{"class":257}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[142,29012,29013],{"class":144,"line":1340},[142,29014,2428],{"emptyLinePlaceholder":69},[142,29016,29017,29019,29021,29023],{"class":144,"line":1346},[142,29018,26582],{"class":1991},[142,29020,28926],{"class":257},[142,29022,28853],{"class":257},[142,29024,29025],{"class":257}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[96,29027,29028],{"start":64},[99,29029,29030],{},"推送镜像到 Docker Hub",[14,29032,29033],{},"使用以下命令将镜像推送到 Docker Hub：",[133,29035,29037],{"className":23851,"code":29036,"language":23853,"meta":31,"style":31},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[139,29038,29039],{"__ignoreMap":31},[142,29040,29041,29043,29046,29048,29050,29052,29054],{"class":144,"line":145},[142,29042,26582],{"class":1991},[142,29044,29045],{"class":257}," push",[142,29047,28931],{"class":148},[142,29049,28934],{"class":257},[142,29051,28937],{"class":152},[142,29053,1113],{"class":148},[142,29055,29056],{"class":257},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29058,14662],{},[133,29060,29062],{"className":23851,"code":29061,"language":23853,"meta":31,"style":31},"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",[139,29063,29064,29072,29076,29084,29088,29096,29100,29109,29113,29121,29125],{"__ignoreMap":31},[142,29065,29066,29068,29070],{"class":144,"line":145},[142,29067,26582],{"class":1991},[142,29069,29045],{"class":257},[142,29071,28965],{"class":257},[142,29073,29074],{"class":144,"line":64},[142,29075,2428],{"emptyLinePlaceholder":69},[142,29077,29078,29080,29082],{"class":144,"line":1208},[142,29079,26582],{"class":1991},[142,29081,29045],{"class":257},[142,29083,28980],{"class":257},[142,29085,29086],{"class":144,"line":1223},[142,29087,2428],{"emptyLinePlaceholder":69},[142,29089,29090,29092,29094],{"class":144,"line":1229},[142,29091,26582],{"class":1991},[142,29093,29045],{"class":257},[142,29095,28995],{"class":257},[142,29097,29098],{"class":144,"line":1243},[142,29099,2428],{"emptyLinePlaceholder":69},[142,29101,29102,29104,29106],{"class":144,"line":1249},[142,29103,26582],{"class":1991},[142,29105,29045],{"class":257},[142,29107,29108],{"class":257}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[142,29110,29111],{"class":144,"line":1340},[142,29112,2428],{"emptyLinePlaceholder":69},[142,29114,29115,29117,29119],{"class":144,"line":1346},[142,29116,26582],{"class":1991},[142,29118,29045],{"class":257},[142,29120,29025],{"class":257},[142,29122,29123],{"class":144,"line":1358},[142,29124,2428],{"emptyLinePlaceholder":69},[142,29126,29127,29129,29131],{"class":144,"line":1640},[142,29128,26582],{"class":1991},[142,29130,29045],{"class":257},[142,29132,29133],{"class":257}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[96,29135,29136],{"start":1208},[99,29137,29138],{},"验证推送成功",[14,29140,29141],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29143,29144],{},[302,29145,3812],{},[1160,29147,29148,29151],{},[99,29149,29150],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[99,29152,29153],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29155,29156],{},[29,29157],{"alt":31,"src":29158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29160,29161],{},[29,29162],{"alt":31,"src":29163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22027,29165,29167],{"id":29166},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29169,29170,29171,29174,29175,29178],{},"如果您想在 ",[302,29172,29173],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[302,29176,29177],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29180,29181,29182],{},"1. ",[302,29183,29184],{},"启用 Docker 跨平台构建",[14,29186,29187],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29189,29190],{},"第一步：启用 buildx（只需执行一次）",[133,29192,29194],{"className":23851,"code":29193,"language":23853,"meta":31,"style":31},"docker buildx create --name multiarch_builder --use\n",[139,29195,29196],{"__ignoreMap":31},[142,29197,29198,29200,29203,29206,29209,29212],{"class":144,"line":145},[142,29199,26582],{"class":1991},[142,29201,29202],{"class":257}," buildx",[142,29204,29205],{"class":257}," create",[142,29207,29208],{"class":201}," --name",[142,29210,29211],{"class":257}," multiarch_builder",[142,29213,29214],{"class":201}," --use\n",[14,29216,29217],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29219,29220],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[133,29222,29224],{"className":23851,"code":29223,"language":23853,"meta":31,"style":31},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[139,29225,29226],{"__ignoreMap":31},[142,29227,29228,29230,29232,29234,29237,29240,29243,29246],{"class":144,"line":145},[142,29229,26582],{"class":1991},[142,29231,27259],{"class":257},[142,29233,27262],{"class":201},[142,29235,29236],{"class":201}," --privileged",[142,29238,29239],{"class":257}," multiarch\u002Fqemu-user-static",[142,29241,29242],{"class":201}," --reset",[142,29244,29245],{"class":201}," -p",[142,29247,29248],{"class":257}," yes\n",[14,29250,29251],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29253,29254],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[133,29256,29258],{"className":23851,"code":29257,"language":23853,"meta":31,"style":31},"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",[139,29259,29260,29302,29306,29311,29321,29331,29340,29346,29350,29354,29364,29372,29381,29387,29391,29395,29405,29413,29422,29428,29432,29436,29446,29454,29463,29469,29473,29477,29487,29495,29504,29510,29514,29518,29528,29536,29545,29551,29555,29559,29569,29577,29586,29592,29596,29600,29610,29618,29627,29633,29637,29641,29651,29659,29668,29674,29678,29682,29693,29701,29710,29716],{"__ignoreMap":31},[142,29261,29262,29264,29266,29268,29271,29274,29276,29278,29281,29283,29285,29287,29289,29292,29295,29297,29300],{"class":144,"line":145},[142,29263,26582],{"class":1991},[142,29265,29202],{"class":257},[142,29267,28761],{"class":257},[142,29269,29270],{"class":201}," --platform",[142,29272,29273],{"class":257}," linux\u002Famd64,linux\u002Farm64",[142,29275,28764],{"class":201},[142,29277,28931],{"class":148},[142,29279,29280],{"class":257},"你的镜像",[142,29282,28937],{"class":152},[142,29284,1113],{"class":148},[142,29286,1012],{"class":257},[142,29288,1063],{"class":148},[142,29290,29291],{"class":257},"标",[142,29293,29294],{"class":152},"签",[142,29296,1113],{"class":148},[142,29298,29299],{"class":201}," --push",[142,29301,28770],{"class":257},[142,29303,29304],{"class":144,"line":64},[142,29305,2428],{"emptyLinePlaceholder":69},[142,29307,29308],{"class":144,"line":1208},[142,29309,29310],{"class":211},"# 例子：\n",[142,29312,29313,29315,29317,29319],{"class":144,"line":1223},[142,29314,26582],{"class":1991},[142,29316,29202],{"class":257},[142,29318,28761],{"class":257},[142,29320,24707],{"class":201},[142,29322,29323,29326,29329],{"class":144,"line":1229},[142,29324,29325],{"class":152},"--platform ",[142,29327,29328],{"class":257},"linux\u002Famd64,linux\u002Farm64",[142,29330,24707],{"class":201},[142,29332,29333,29335,29338],{"class":144,"line":1243},[142,29334,28764],{"class":201},[142,29336,29337],{"class":257}," tungchiahui\u002Fros:noetic-focal",[142,29339,24707],{"class":201},[142,29341,29342,29344],{"class":144,"line":1249},[142,29343,29299],{"class":201},[142,29345,24707],{"class":201},[142,29347,29348],{"class":144,"line":1340},[142,29349,28770],{"class":257},[142,29351,29352],{"class":144,"line":1346},[142,29353,2428],{"emptyLinePlaceholder":69},[142,29355,29356,29358,29360,29362],{"class":144,"line":1358},[142,29357,26582],{"class":1991},[142,29359,29202],{"class":257},[142,29361,28761],{"class":257},[142,29363,24707],{"class":201},[142,29365,29366,29368,29370],{"class":144,"line":1640},[142,29367,29325],{"class":152},[142,29369,29328],{"class":257},[142,29371,24707],{"class":201},[142,29373,29374,29376,29379],{"class":144,"line":1645},[142,29375,28764],{"class":201},[142,29377,29378],{"class":257}," tungchiahui\u002Fros:humble-jammy",[142,29380,24707],{"class":201},[142,29382,29383,29385],{"class":144,"line":1651},[142,29384,29299],{"class":201},[142,29386,24707],{"class":201},[142,29388,29389],{"class":144,"line":1656},[142,29390,28770],{"class":257},[142,29392,29393],{"class":144,"line":1670},[142,29394,2428],{"emptyLinePlaceholder":69},[142,29396,29397,29399,29401,29403],{"class":144,"line":1675},[142,29398,26582],{"class":1991},[142,29400,29202],{"class":257},[142,29402,28761],{"class":257},[142,29404,24707],{"class":201},[142,29406,29407,29409,29411],{"class":144,"line":1681},[142,29408,29325],{"class":152},[142,29410,29328],{"class":257},[142,29412,24707],{"class":201},[142,29414,29415,29417,29420],{"class":144,"line":1702},[142,29416,28764],{"class":201},[142,29418,29419],{"class":257}," tungchiahui\u002Fros:jazzy-noble",[142,29421,24707],{"class":201},[142,29423,29424,29426],{"class":144,"line":1707},[142,29425,29299],{"class":201},[142,29427,24707],{"class":201},[142,29429,29430],{"class":144,"line":1721},[142,29431,28770],{"class":257},[142,29433,29434],{"class":144,"line":1726},[142,29435,2428],{"emptyLinePlaceholder":69},[142,29437,29438,29440,29442,29444],{"class":144,"line":1755},[142,29439,26349],{"class":1991},[142,29441,29202],{"class":257},[142,29443,28761],{"class":257},[142,29445,24707],{"class":201},[142,29447,29448,29450,29452],{"class":144,"line":1760},[142,29449,29325],{"class":152},[142,29451,29328],{"class":257},[142,29453,24707],{"class":201},[142,29455,29456,29458,29461],{"class":144,"line":1777},[142,29457,28764],{"class":201},[142,29459,29460],{"class":257}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[142,29462,24707],{"class":201},[142,29464,29465,29467],{"class":144,"line":1782},[142,29466,29299],{"class":201},[142,29468,24707],{"class":201},[142,29470,29471],{"class":144,"line":1787},[142,29472,28770],{"class":257},[142,29474,29475],{"class":144,"line":1792},[142,29476,2428],{"emptyLinePlaceholder":69},[142,29478,29479,29481,29483,29485],{"class":144,"line":1806},[142,29480,26582],{"class":1991},[142,29482,29202],{"class":257},[142,29484,28761],{"class":257},[142,29486,24707],{"class":201},[142,29488,29489,29491,29493],{"class":144,"line":1811},[142,29490,29325],{"class":152},[142,29492,29328],{"class":257},[142,29494,24707],{"class":201},[142,29496,29497,29499,29502],{"class":144,"line":2605},[142,29498,28764],{"class":201},[142,29500,29501],{"class":257}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[142,29503,24707],{"class":201},[142,29505,29506,29508],{"class":144,"line":2619},[142,29507,29299],{"class":201},[142,29509,24707],{"class":201},[142,29511,29512],{"class":144,"line":2627},[142,29513,28770],{"class":257},[142,29515,29516],{"class":144,"line":2632},[142,29517,2428],{"emptyLinePlaceholder":69},[142,29519,29520,29522,29524,29526],{"class":144,"line":2638},[142,29521,26349],{"class":1991},[142,29523,29202],{"class":257},[142,29525,28761],{"class":257},[142,29527,24707],{"class":201},[142,29529,29530,29532,29534],{"class":144,"line":2644},[142,29531,29325],{"class":152},[142,29533,29328],{"class":257},[142,29535,24707],{"class":201},[142,29537,29538,29540,29543],{"class":144,"line":2649},[142,29539,28764],{"class":201},[142,29541,29542],{"class":257}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[142,29544,24707],{"class":201},[142,29546,29547,29549],{"class":144,"line":7977},[142,29548,29299],{"class":201},[142,29550,24707],{"class":201},[142,29552,29553],{"class":144,"line":8001},[142,29554,28770],{"class":257},[142,29556,29557],{"class":144,"line":8006},[142,29558,2428],{"emptyLinePlaceholder":69},[142,29560,29561,29563,29565,29567],{"class":144,"line":8012},[142,29562,26582],{"class":1991},[142,29564,29202],{"class":257},[142,29566,28761],{"class":257},[142,29568,24707],{"class":201},[142,29570,29571,29573,29575],{"class":144,"line":8039},[142,29572,29325],{"class":152},[142,29574,29328],{"class":257},[142,29576,24707],{"class":201},[142,29578,29579,29581,29584],{"class":144,"line":8044},[142,29580,28764],{"class":201},[142,29582,29583],{"class":257}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[142,29585,24707],{"class":201},[142,29587,29588,29590],{"class":144,"line":8050},[142,29589,29299],{"class":201},[142,29591,24707],{"class":201},[142,29593,29594],{"class":144,"line":8062},[142,29595,28770],{"class":257},[142,29597,29598],{"class":144,"line":8074},[142,29599,2428],{"emptyLinePlaceholder":69},[142,29601,29602,29604,29606,29608],{"class":144,"line":8086},[142,29603,26582],{"class":1991},[142,29605,29202],{"class":257},[142,29607,28761],{"class":257},[142,29609,24707],{"class":201},[142,29611,29612,29614,29616],{"class":144,"line":9745},[142,29613,29325],{"class":152},[142,29615,29328],{"class":257},[142,29617,24707],{"class":201},[142,29619,29620,29622,29625],{"class":144,"line":9770},[142,29621,28764],{"class":201},[142,29623,29624],{"class":257}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[142,29626,24707],{"class":201},[142,29628,29629,29631],{"class":144,"line":9793},[142,29630,29299],{"class":201},[142,29632,24707],{"class":201},[142,29634,29635],{"class":144,"line":9817},[142,29636,28770],{"class":257},[142,29638,29639],{"class":144,"line":9822},[142,29640,2428],{"emptyLinePlaceholder":69},[142,29642,29643,29645,29647,29649],{"class":144,"line":9827},[142,29644,26349],{"class":1991},[142,29646,29202],{"class":257},[142,29648,28761],{"class":257},[142,29650,24707],{"class":201},[142,29652,29653,29655,29657],{"class":144,"line":9832},[142,29654,29325],{"class":152},[142,29656,29328],{"class":257},[142,29658,24707],{"class":201},[142,29660,29661,29663,29666],{"class":144,"line":9841},[142,29662,28764],{"class":201},[142,29664,29665],{"class":257}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[142,29667,24707],{"class":201},[142,29669,29670,29672],{"class":144,"line":9846},[142,29671,29299],{"class":201},[142,29673,24707],{"class":201},[142,29675,29676],{"class":144,"line":9852},[142,29677,28770],{"class":257},[142,29679,29680],{"class":144,"line":9873},[142,29681,2428],{"emptyLinePlaceholder":69},[142,29683,29684,29687,29689,29691],{"class":144,"line":9879},[142,29685,29686],{"class":1991},"  docker",[142,29688,29202],{"class":257},[142,29690,28761],{"class":257},[142,29692,24707],{"class":201},[142,29694,29695,29697,29699],{"class":144,"line":9893},[142,29696,29325],{"class":152},[142,29698,29328],{"class":257},[142,29700,24707],{"class":201},[142,29702,29703,29705,29708],{"class":144,"line":9899},[142,29704,28764],{"class":201},[142,29706,29707],{"class":257}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[142,29709,24707],{"class":201},[142,29711,29712,29714],{"class":144,"line":9926},[142,29713,29299],{"class":201},[142,29715,24707],{"class":201},[142,29717,29718],{"class":144,"line":9935},[142,29719,28770],{"class":257},[14,29721,29722],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29724,29725],{},[29,29726],{"alt":31,"src":29727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29729,29730],{},[29,29731],{"alt":31,"src":29732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22027,29734,29736],{"id":29735},"_623清除构建缓存","6.2.3.清除构建缓存",[133,29738,29740],{"className":23851,"code":29739,"language":23853,"meta":31,"style":31},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[139,29741,29742,29747],{"__ignoreMap":31},[142,29743,29744],{"class":144,"line":145},[142,29745,29746],{"class":211},"# 清理BuildKit构建缓存\n",[142,29748,29749,29751,29754,29757],{"class":144,"line":64},[142,29750,26582],{"class":1991},[142,29752,29753],{"class":257}," builder",[142,29755,29756],{"class":257}," prune",[142,29758,29759],{"class":201}," -f\n",[14,29761,29762],{},[29,29763],{"alt":31,"src":29764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[113,29766,29768],{"id":29767},"_63补充","6.3.补充",[22027,29770,29772],{"id":29771},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29774,29775],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29777,29778],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29780,29781],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[133,29783,29785],{"className":23851,"code":29784,"language":23853,"meta":31,"style":31},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[139,29786,29787,29794],{"__ignoreMap":31},[142,29788,29789,29791],{"class":144,"line":145},[142,29790,27399],{"class":1991},[142,29792,29793],{"class":257}," nginx\n",[142,29795,29796,29798,29801,29804,29806],{"class":144,"line":64},[142,29797,28584],{"class":1991},[142,29799,29800],{"class":257}," echo",[142,29802,29803],{"class":257}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[142,29805,26251],{"class":148},[142,29807,29808],{"class":257}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29810,29811],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29813,29814],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[133,29816,29818],{"className":23851,"code":29817,"language":23853,"meta":31,"style":31},"docker build -t nginx:tuling .\n",[139,29819,29820],{"__ignoreMap":31},[142,29821,29822,29824,29826,29828,29831],{"class":144,"line":145},[142,29823,26582],{"class":1991},[142,29825,28761],{"class":257},[142,29827,28764],{"class":201},[142,29829,29830],{"class":257}," nginx:tuling",[142,29832,28770],{"class":257},[14,29834,29835],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29837,29838],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[133,29840,29842],{"className":23851,"code":29841,"language":23853,"meta":31,"style":31},"docker run -d -p 92:80 nginx:tuling\n",[139,29843,29844],{"__ignoreMap":31},[142,29845,29846,29848,29850,29853,29855,29858],{"class":144,"line":145},[142,29847,26582],{"class":1991},[142,29849,27259],{"class":257},[142,29851,29852],{"class":201}," -d",[142,29854,29245],{"class":201},[142,29856,29857],{"class":257}," 92:80",[142,29859,29860],{"class":257}," nginx:tuling\n",[14,29862,29863,29864],{},"4、访问 ",[391,29865,29868],{"href":29866,"rel":29867},"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",[23894],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29870,29871],{},[29,29872],{"alt":31,"src":29873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29875,29876],{},[29,29877],{"alt":31,"src":29878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22027,29880,29882],{"id":29881},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29884,29885],{},"只需要知道大体流程即可",[14,29887,29888],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29890,29891],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29893,29894],{},"2、在Dockerfile中添加以下内容",[133,29896,29898],{"className":26120,"code":29897,"language":26122,"meta":31,"style":31},"# 基于哪个镜像\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",[139,29899,29900,29905,29910,29915,29920,29925,29930,29935],{"__ignoreMap":31},[142,29901,29902],{"class":144,"line":145},[142,29903,29904],{},"# 基于哪个镜像\n",[142,29906,29907],{"class":144,"line":64},[142,29908,29909],{},"From java:8\n",[142,29911,29912],{"class":144,"line":1208},[142,29913,29914],{},"# 复制文件到容器\n",[142,29916,29917],{"class":144,"line":1223},[142,29918,29919],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[142,29921,29922],{"class":144,"line":1229},[142,29923,29924],{},"# 声明需要暴露的端口\n",[142,29926,29927],{"class":144,"line":1243},[142,29928,29929],{},"EXPOSE 8877\n",[142,29931,29932],{"class":144,"line":1249},[142,29933,29934],{},"# 配置容器启动后执行的命令\n",[142,29936,29937],{"class":144,"line":1340},[142,29938,29939],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29941,29942],{},"3、使用docker build命令构建镜像",[133,29944,29946],{"className":23851,"code":29945,"language":23853,"meta":31,"style":31},"docker build -t tulingmall-member:0.0.5 .\n",[139,29947,29948],{"__ignoreMap":31},[142,29949,29950,29952,29954,29956,29959],{"class":144,"line":145},[142,29951,26582],{"class":1991},[142,29953,28761],{"class":257},[142,29955,28764],{"class":201},[142,29957,29958],{"class":257}," tulingmall-member:0.0.5",[142,29960,28770],{"class":257},[14,29962,29963],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29965,29966],{},[29,29967],{"alt":31,"src":29968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29970,29971],{},"4、启动镜像，加-d可在后台启动",[133,29973,29975],{"className":23851,"code":29974,"language":23853,"meta":31,"style":31},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[139,29976,29977],{"__ignoreMap":31},[142,29978,29979,29981,29983,29985,29987,29990],{"class":144,"line":145},[142,29980,26582],{"class":1991},[142,29982,27259],{"class":257},[142,29984,29852],{"class":201},[142,29986,29245],{"class":201},[142,29988,29989],{"class":257}," 8877:8877",[142,29991,29992],{"class":257}," tulingmall-member:0.0.5\n",[14,29994,29995],{},"加上JVM参数：",[133,29997,29999],{"className":23851,"code":29998,"language":23853,"meta":31,"style":31},"# --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",[139,30000,30001,30006,30021,30031,30040,30047],{"__ignoreMap":31},[142,30002,30003],{"class":144,"line":145},[142,30004,30005],{"class":211},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[142,30007,30008,30010,30012,30015,30017,30019],{"class":144,"line":64},[142,30009,26582],{"class":1991},[142,30011,27259],{"class":257},[142,30013,30014],{"class":201},"  -d",[142,30016,29245],{"class":201},[142,30018,29989],{"class":257},[142,30020,24707],{"class":201},[142,30022,30023,30025,30028],{"class":144,"line":1208},[142,30024,28157],{"class":152},[142,30026,30027],{"class":257},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[142,30029,30030],{"class":201},"  \\\n",[142,30032,30033,30035,30038],{"class":144,"line":1223},[142,30034,28157],{"class":152},[142,30036,30037],{"class":257},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[142,30039,30030],{"class":201},[142,30041,30042,30045],{"class":144,"line":1229},[142,30043,30044],{"class":152},"--cap-add=SYS_PTRACE  ",[142,30046,26204],{"class":201},[142,30048,30049],{"class":144,"line":1243},[142,30050,30051],{"class":152},"tulingmall-member:0.0.5\n",[14,30053,30054],{},"5、访问会员服务接口",[14,30056,30057],{},[29,30058],{"alt":31,"src":30059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22027,30061,30063],{"id":30062},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30065,30066],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30068,30069,30070],{},"阿里云docker镜像仓库：",[391,30071,30072],{"href":30072,"rel":30073},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23894],[14,30075,30076],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30078,30079],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30081,30082],{},[29,30083],{"alt":31,"src":30084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30086,30087],{},"要把镜像推送到镜像仓库",[133,30089,30091],{"className":23851,"code":30090,"language":23853,"meta":31,"style":31},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[139,30092,30093],{"__ignoreMap":31},[142,30094,30095,30097,30099,30101],{"class":144,"line":145},[142,30096,26582],{"class":1991},[142,30098,28926],{"class":257},[142,30100,29958],{"class":257},[142,30102,30103],{"class":257}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30105,30106],{},"最后将镜像推送到远程仓库",[133,30108,30110],{"className":23851,"code":30109,"language":23853,"meta":31,"style":31},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[139,30111,30112],{"__ignoreMap":31},[142,30113,30114,30116,30118],{"class":144,"line":145},[142,30115,26582],{"class":1991},[142,30117,29045],{"class":257},[142,30119,30103],{"class":257},[5155,30121,30122],{},"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":31,"searchDepth":64,"depth":64,"links":30124},[30125,30126,30127],{"id":28512,"depth":1208,"text":28513},{"id":28741,"depth":1208,"text":28742},{"id":29767,"depth":1208,"text":29768},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28504,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30134,"title":30135,"body":30136,"description":31,"extension":67,"meta":30279,"navigation":69,"path":30280,"seo":30281,"stem":30282,"__hash__":30283},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30137,"toc":30277},[30138,30141,30146,30151,30154,30159,30164,30167,30172,30177,30180,30185,30188,30191,30194,30197,30200,30203,30223,30245,30248,30251,30271,30274],[10,30139,30135],{"id":30140},"_7vscode远程开发",[96,30142,30143],{},[99,30144,30145],{},"插件1：微软Docker工具",[14,30147,30148],{},[29,30149],{"alt":31,"src":30150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30152,30153],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30155,30156],{},[29,30157],{"alt":31,"src":30158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[96,30160,30161],{"start":64},[99,30162,30163],{},"插件2：微软Docker远程开发工具",[14,30165,30166],{},"下面这是远程开发的插件。",[14,30168,30169],{},[29,30170],{"alt":31,"src":30171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30173,30174],{},[29,30175],{"alt":31,"src":30176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30178,30179],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30181,30182],{},[29,30183],{"alt":31,"src":30184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30186,30187],{},"安装完拓展之后，vscode进行链接：",[14,30189,30190],{},"1.按ctrl+shift+p",[14,30192,30193],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30195,30196],{},"3.选择目前运行的容器",[14,30198,30199],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30201,30202],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[133,30204,30206],{"className":23851,"code":30205,"language":23853,"meta":31,"style":31},"docker run -v 主机目录:容器目录 image-name\n",[139,30207,30208],{"__ignoreMap":31},[142,30209,30210,30212,30214,30217,30220],{"class":144,"line":145},[142,30211,26582],{"class":1991},[142,30213,27259],{"class":257},[142,30215,30216],{"class":201}," -v",[142,30218,30219],{"class":257}," 主机目录:容器目录",[142,30221,30222],{"class":257}," image-name\n",[133,30224,30226],{"className":23851,"code":30225,"language":23853,"meta":31,"style":31},"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",[139,30227,30228],{"__ignoreMap":31},[142,30229,30230,30232,30234,30237,30239,30242],{"class":144,"line":145},[142,30231,26582],{"class":1991},[142,30233,27259],{"class":257},[142,30235,30236],{"class":201}," -it",[142,30238,30216],{"class":201},[142,30240,30241],{"class":257}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[142,30243,30244],{"class":257}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30246,30247],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30249,30250],{},"查看挂载情况：",[133,30252,30254],{"className":23851,"code":30253,"language":23853,"meta":31,"style":31},"mount | grep -i project\n",[139,30255,30256],{"__ignoreMap":31},[142,30257,30258,30261,30263,30266,30268],{"class":144,"line":145},[142,30259,30260],{"class":1991},"mount",[142,30262,25138],{"class":148},[142,30264,30265],{"class":1991}," grep",[142,30267,26459],{"class":201},[142,30269,30270],{"class":257}," project\n",[14,30272,30273],{},"也可以通过ls来进行查看",[5155,30275,30276],{},"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":31,"searchDepth":64,"depth":64,"links":30278},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30135,"description":31},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30285,"title":30286,"body":30287,"description":66,"extension":67,"meta":30291,"navigation":69,"path":30293,"seo":30294,"stem":30295,"__hash__":30296},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30288,"toc":30289},[],{"title":31,"searchDepth":64,"depth":64,"links":30290},[],{"category":30292},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30286,"description":66},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30298,"title":30299,"body":30300,"description":66,"extension":67,"meta":30304,"navigation":69,"path":30305,"seo":30306,"stem":30307,"__hash__":30308},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30301,"toc":30302},[],{"title":31,"searchDepth":64,"depth":64,"links":30303},[],{"category":30292},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30299,"description":66},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30310,"title":30311,"body":30312,"description":66,"extension":67,"meta":30605,"navigation":69,"path":30606,"seo":30607,"stem":30608,"__hash__":30609},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30313,"toc":30603},[30314,30317,30325,30340,30345,30396,30399,30405,30592,30597,30600],[10,30315,30311],{"id":30316},"_1验证深度学习环境",[14,30318,30319,30320],{},"关于环境的安装，看",[391,30321,30324],{"href":30322,"rel":30323},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23894],"Pytorch-->深度学习",[14,30326,30327,30328,30331,30332,30335,30336,30339],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[139,30329,30330],{},"pytorch-cuda=12.4"," 是一个“ ",[302,30333,30334],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[302,30337,30338],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30341,30342],{},[29,30343],{"alt":31,"src":30344},"\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",[133,30346,30348],{"className":23851,"code":30347,"language":23853,"meta":31,"style":31},"# 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",[139,30349,30350,30355],{"__ignoreMap":31},[142,30351,30352],{"class":144,"line":145},[142,30353,30354],{"class":211},"# CUDA 12.4\n",[142,30356,30357,30360,30362,30365,30368,30371,30374,30377,30379,30382,30385,30388,30391,30393],{"class":144,"line":64},[142,30358,30359],{"class":1991},"conda",[142,30361,23863],{"class":257},[142,30363,30364],{"class":257}," pytorch==",[142,30366,30367],{"class":201},"2.5.1",[142,30369,30370],{"class":257}," torchvision==",[142,30372,30373],{"class":201},"0.20.1",[142,30375,30376],{"class":257}," torchaudio==",[142,30378,30367],{"class":201},[142,30380,30381],{"class":257}," pytorch-cuda=",[142,30383,30384],{"class":201},"12.4",[142,30386,30387],{"class":201}," -c",[142,30389,30390],{"class":257}," pytorch",[142,30392,30387],{"class":201},[142,30394,30395],{"class":257}," nvidia\n",[14,30397,30398],{},"）：",[14,30400,30401],{},[391,30402,30403],{"href":30403,"rel":30404},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23894],[133,30406,30410],{"className":30407,"code":30408,"language":30409,"meta":31,"style":31},"language-python shiki shiki-themes github-light github-dark","# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n","python",[139,30411,30412,30417,30425,30430,30440,30456,30461,30471,30508,30515,30527,30543,30548,30558,30570,30580],{"__ignoreMap":31},[142,30413,30414],{"class":144,"line":145},[142,30415,30416],{"class":211},"# 对深度学习环境进行测试\n",[142,30418,30419,30422],{"class":144,"line":64},[142,30420,30421],{"class":148},"import",[142,30423,30424],{"class":152}," torch\n",[142,30426,30427],{"class":144,"line":1208},[142,30428,30429],{"class":211},"# 查看cuda是否被激活\n",[142,30431,30432,30435,30437],{"class":144,"line":1223},[142,30433,30434],{"class":152},"flag",[142,30436,198],{"class":148},[142,30438,30439],{"class":152},"torch.cuda.is_available()\n",[142,30441,30442,30445,30447,30450,30453],{"class":144,"line":1229},[142,30443,30444],{"class":201},"print",[142,30446,153],{"class":152},[142,30448,30449],{"class":257},"\"cuda:\"",[142,30451,30452],{"class":152},", flag)   ",[142,30454,30455],{"class":211},"#返回true的话说明被激活\n",[142,30457,30458],{"class":144,"line":1243},[142,30459,30460],{"class":211},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[142,30462,30463,30466,30468],{"class":144,"line":1249},[142,30464,30465],{"class":152},"ngpu",[142,30467,198],{"class":148},[142,30469,30470],{"class":201},"1\n",[142,30472,30473,30476,30478,30481,30484,30486,30489,30492,30495,30497,30499,30501,30503,30506],{"class":144,"line":1340},[142,30474,30475],{"class":152},"device",[142,30477,198],{"class":148},[142,30479,30480],{"class":152},"torch.device(",[142,30482,30483],{"class":257},"\"cuda:0\"",[142,30485,1732],{"class":148},[142,30487,30488],{"class":152},"(torch.cuda.is_available() ",[142,30490,30491],{"class":148},"and",[142,30493,30494],{"class":152}," ngpu",[142,30496,1113],{"class":148},[142,30498,344],{"class":201},[142,30500,13743],{"class":152},[142,30502,1729],{"class":148},[142,30504,30505],{"class":257}," \"cpu\"",[142,30507,159],{"class":152},[142,30509,30510,30512],{"class":144,"line":1346},[142,30511,30444],{"class":201},[142,30513,30514],{"class":152},"(device)\n",[142,30516,30517,30519,30522,30524],{"class":144,"line":1358},[142,30518,30444],{"class":201},[142,30520,30521],{"class":152},"(torch.cuda.get_device_name(",[142,30523,344],{"class":201},[142,30525,30526],{"class":152},"))\n",[142,30528,30529,30531,30534,30536,30538,30540],{"class":144,"line":1640},[142,30530,30444],{"class":201},[142,30532,30533],{"class":152},"(torch.rand(",[142,30535,224],{"class":201},[142,30537,531],{"class":152},[142,30539,224],{"class":201},[142,30541,30542],{"class":152},").cuda())\n",[142,30544,30545],{"class":144,"line":1645},[142,30546,30547],{"class":211},"# 查看cuda和cudnn的版本\n",[142,30549,30550,30553,30555],{"class":144,"line":1651},[142,30551,30552],{"class":152},"cuda_version",[142,30554,198],{"class":148},[142,30556,30557],{"class":152},"torch.version.cuda\n",[142,30559,30560,30562,30564,30567],{"class":144,"line":1656},[142,30561,30444],{"class":201},[142,30563,153],{"class":152},[142,30565,30566],{"class":257},"\"cuda version\"",[142,30568,30569],{"class":152},",cuda_version)\n",[142,30571,30572,30575,30577],{"class":144,"line":1670},[142,30573,30574],{"class":152},"cudnn_version",[142,30576,198],{"class":148},[142,30578,30579],{"class":152},"torch.backends.cudnn.version()\n",[142,30581,30582,30584,30586,30589],{"class":144,"line":1675},[142,30583,30444],{"class":201},[142,30585,153],{"class":152},[142,30587,30588],{"class":257},"\"cudnn version\"",[142,30590,30591],{"class":152},",cudnn_version)\n",[14,30593,30594],{},[29,30595],{"alt":31,"src":30596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[14,30598,30599],{},"cuda:0 指的是一块显卡",[5155,30601,30602],{},"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":31,"searchDepth":64,"depth":64,"links":30604},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30311,"description":66},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30611,"title":30612,"body":30613,"description":66,"extension":67,"meta":50417,"navigation":69,"path":50418,"seo":50419,"stem":50420,"__hash__":50421},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30614,"toc":50411},[30615,30618,30622,30626,30629,30634,30639,30642,30647,30652,30657,30660,30664,30669,30673,30678,30681,30686,30689,30692,30695,30698,30703,30706,30711,30716,30721,30726,30729,30733,30736,30741,31345,31350,31353,31358,31361,31364,31828,31831,31834,31837,31840,33891,33894,33899,33904,34699,34702,34707,35485,35489,37148,37152,37866,37870,37874,37879,37884,37889,37892,37897,37902,37907,37912,37917,37921,37926,39208,39213,39216,39219,39222,39377,39380,39383,40599,40604,41299,41303,41307,41312,41317,41320,41325,41330,41335,41340,41345,41350,41355,41360,41365,41370,41375,41380,41385,41390,41395,41400,41405,41410,41415,41420,41425,41430,41435,41440,41445,41450,41455,41460,41465,41470,41474,41478,41481,42959,42963,44610,44614,45308,45312,45315,45318,45862,45865,45869,45872,47269,47273,47276,47854,49641,49645,49648,50408],[10,30616,30612],{"id":30617},"_2经典神经网络",[113,30619,30621],{"id":30620},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22027,30623,30625],{"id":30624},"_211原理介绍","2.1.1.原理介绍",[14,30627,30628],{},"LeNet-5",[96,30630,30631],{},[99,30632,30633],{},"原理",[14,30635,30636],{},[29,30637],{"alt":31,"src":30638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,30640,30641],{},"B是batch批次；C是channel通道",[96,30643,30644],{"start":64},[99,30645,30646],{},"网络参数详细",[14,30648,30649],{},[29,30650],{"alt":31,"src":30651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[14,30653,30654],{},[29,30655],{"alt":31,"src":30656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30658,30659],{},"AlexNet",[96,30661,30662],{},[99,30663,30633],{},[14,30665,30666],{},[29,30667],{"alt":31,"src":30668},"\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",[96,30670,30671],{"start":64},[99,30672,30646],{},[14,30674,30675],{},[29,30676],{"alt":31,"src":30677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[14,30679,30680],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30682,30683],{},[29,30684],{"alt":31,"src":30685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,30687,30688],{},"数据处理中的图像增强操作:",[14,30690,30691],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30693,30694],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30696,30697],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30699,30700],{},[29,30701],{"alt":31,"src":30702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[14,30704,30705],{},"提升网络精确度的方法：LRN正则化",[14,30707,30708],{},[29,30709],{"alt":31,"src":30710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[14,30712,30713],{},[29,30714],{"alt":31,"src":30715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[96,30717,30718],{"start":1208},[99,30719,30720],{},"AlexNet的总结",[14,30722,30723],{},[29,30724],{"alt":31,"src":30725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[14,30727,30728],{},"比LeNet模型要深一丢丢",[22027,30730,30732],{"id":30731},"_212代码实现","2.1.2.代码实现",[14,30734,30735],{},"（1）LeNet",[96,30737,30738],{},[99,30739,30740],{},"模型搭建",[133,30742,30744],{"className":30407,"code":30743,"language":30409,"meta":31,"style":31},"# 导入库\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",[139,30745,30746,30751,30757,30762,30775,30780,30792,30796,30816,30821,30826,30837,30842,30861,30865,30870,30919,30931,30936,30965,31000,31027,31032,31044,31049,31069,31088,31107,31111,31116,31126,31143,31154,31169,31180,31191,31206,31221,31232,31239,31243,31257,31262,31285,31290,31295,31300,31304,31309,31314,31324],{"__ignoreMap":31},[142,30747,30748],{"class":144,"line":145},[142,30749,30750],{"class":211},"# 导入库\n",[142,30752,30753,30755],{"class":144,"line":64},[142,30754,30421],{"class":148},[142,30756,30424],{"class":152},[142,30758,30759],{"class":144,"line":1208},[142,30760,30761],{"class":211},"# 导入神经网络层\n",[142,30763,30764,30767,30770,30772],{"class":144,"line":1223},[142,30765,30766],{"class":148},"from",[142,30768,30769],{"class":152}," torch ",[142,30771,30421],{"class":148},[142,30773,30774],{"class":152}," nn\n",[142,30776,30777],{"class":144,"line":1229},[142,30778,30779],{"class":211},"# 导入展示神经网络参数的包\n",[142,30781,30782,30784,30787,30789],{"class":144,"line":1243},[142,30783,30766],{"class":148},[142,30785,30786],{"class":152}," torchsummary ",[142,30788,30421],{"class":148},[142,30790,30791],{"class":152}," summary\n",[142,30793,30794],{"class":144,"line":1249},[142,30795,2428],{"emptyLinePlaceholder":69},[142,30797,30798,30800,30803,30805,30808,30810,30813],{"class":144,"line":1340},[142,30799,14723],{"class":148},[142,30801,30802],{"class":1991}," LeNet",[142,30804,153],{"class":152},[142,30806,30807],{"class":1991},"nn",[142,30809,711],{"class":152},[142,30811,30812],{"class":1991},"Module",[142,30814,30815],{"class":152},"):\n",[142,30817,30818],{"class":144,"line":1346},[142,30819,30820],{"class":211},"    # 模型初始化:\n",[142,30822,30823],{"class":144,"line":1358},[142,30824,30825],{"class":211},"    # 定义一些网络层和激活函数\n",[142,30827,30828,30831,30834],{"class":144,"line":1640},[142,30829,30830],{"class":148},"    def",[142,30832,30833],{"class":201}," __init__",[142,30835,30836],{"class":152},"(self):\n",[142,30838,30839],{"class":144,"line":1645},[142,30840,30841],{"class":211},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[142,30843,30844,30847,30850,30853,30856,30859],{"class":144,"line":1651},[142,30845,30846],{"class":201},"        super",[142,30848,30849],{"class":152},"(LeNet,",[142,30851,30852],{"class":201},"self",[142,30854,30855],{"class":152},").",[142,30857,30858],{"class":201},"__init__",[142,30860,2004],{"class":152},[142,30862,30863],{"class":144,"line":1656},[142,30864,2428],{"emptyLinePlaceholder":69},[142,30866,30867],{"class":144,"line":1670},[142,30868,30869],{"class":211},"        # 定义网络层\n",[142,30871,30872,30875,30878,30880,30883,30886,30888,30890,30892,30895,30897,30899,30901,30904,30906,30908,30910,30913,30915,30917],{"class":144,"line":1675},[142,30873,30874],{"class":201},"        self",[142,30876,30877],{"class":152},".c1",[142,30879,198],{"class":148},[142,30881,30882],{"class":152},"nn.Conv2d(",[142,30884,30885],{"class":5245},"in_channels",[142,30887,198],{"class":148},[142,30889,370],{"class":201},[142,30891,531],{"class":152},[142,30893,30894],{"class":5245},"out_channels",[142,30896,198],{"class":148},[142,30898,497],{"class":201},[142,30900,531],{"class":152},[142,30902,30903],{"class":5245},"kernel_size",[142,30905,198],{"class":148},[142,30907,472],{"class":201},[142,30909,531],{"class":152},[142,30911,30912],{"class":5245},"padding",[142,30914,198],{"class":148},[142,30916,230],{"class":201},[142,30918,159],{"class":152},[142,30920,30921,30923,30926,30928],{"class":144,"line":1681},[142,30922,30874],{"class":201},[142,30924,30925],{"class":152},".sig",[142,30927,198],{"class":148},[142,30929,30930],{"class":152},"nn.Sigmoid()\n",[142,30932,30933],{"class":144,"line":1702},[142,30934,30935],{"class":211},"        # 定义池化\n",[142,30937,30938,30940,30943,30945,30948,30950,30952,30954,30956,30959,30961,30963],{"class":144,"line":1707},[142,30939,30874],{"class":201},[142,30941,30942],{"class":152},".s2",[142,30944,198],{"class":148},[142,30946,30947],{"class":152},"nn.AvgPool2d(",[142,30949,30903],{"class":5245},[142,30951,198],{"class":148},[142,30953,230],{"class":201},[142,30955,531],{"class":152},[142,30957,30958],{"class":5245},"stride",[142,30960,198],{"class":148},[142,30962,230],{"class":201},[142,30964,159],{"class":152},[142,30966,30967,30969,30972,30974,30976,30978,30980,30982,30984,30986,30988,30990,30992,30994,30996,30998],{"class":144,"line":1721},[142,30968,30874],{"class":201},[142,30970,30971],{"class":152},".c3",[142,30973,198],{"class":148},[142,30975,30882],{"class":152},[142,30977,30885],{"class":5245},[142,30979,198],{"class":148},[142,30981,497],{"class":201},[142,30983,531],{"class":152},[142,30985,30894],{"class":5245},[142,30987,198],{"class":148},[142,30989,754],{"class":201},[142,30991,531],{"class":152},[142,30993,30903],{"class":5245},[142,30995,198],{"class":148},[142,30997,472],{"class":201},[142,30999,159],{"class":152},[142,31001,31002,31004,31007,31009,31011,31013,31015,31017,31019,31021,31023,31025],{"class":144,"line":1726},[142,31003,30874],{"class":201},[142,31005,31006],{"class":152},".s4",[142,31008,198],{"class":148},[142,31010,30947],{"class":152},[142,31012,30903],{"class":5245},[142,31014,198],{"class":148},[142,31016,230],{"class":201},[142,31018,531],{"class":152},[142,31020,30958],{"class":5245},[142,31022,198],{"class":148},[142,31024,230],{"class":201},[142,31026,159],{"class":152},[142,31028,31029],{"class":144,"line":1755},[142,31030,31031],{"class":211},"        # 定义平展层\n",[142,31033,31034,31036,31039,31041],{"class":144,"line":1760},[142,31035,30874],{"class":201},[142,31037,31038],{"class":152},".flatten",[142,31040,198],{"class":148},[142,31042,31043],{"class":152},"nn.Flatten()\n",[142,31045,31046],{"class":144,"line":1777},[142,31047,31048],{"class":211},"        # 定义全连接层\n",[142,31050,31051,31053,31056,31058,31061,31063,31065,31067],{"class":144,"line":1782},[142,31052,30874],{"class":201},[142,31054,31055],{"class":152},".f5",[142,31057,198],{"class":148},[142,31059,31060],{"class":152},"nn.Linear(",[142,31062,4015],{"class":201},[142,31064,531],{"class":152},[142,31066,970],{"class":201},[142,31068,159],{"class":152},[142,31070,31071,31073,31076,31078,31080,31082,31084,31086],{"class":144,"line":1787},[142,31072,30874],{"class":201},[142,31074,31075],{"class":152},".f6",[142,31077,198],{"class":148},[142,31079,31060],{"class":152},[142,31081,970],{"class":201},[142,31083,531],{"class":152},[142,31085,864],{"class":201},[142,31087,159],{"class":152},[142,31089,31090,31092,31095,31097,31099,31101,31103,31105],{"class":144,"line":1792},[142,31091,30874],{"class":201},[142,31093,31094],{"class":152},".f7",[142,31096,198],{"class":148},[142,31098,31060],{"class":152},[142,31100,864],{"class":201},[142,31102,531],{"class":152},[142,31104,599],{"class":201},[142,31106,159],{"class":152},[142,31108,31109],{"class":144,"line":1806},[142,31110,2428],{"emptyLinePlaceholder":69},[142,31112,31113],{"class":144,"line":1811},[142,31114,31115],{"class":211},"    # 写工具->写前向传播\n",[142,31117,31118,31120,31123],{"class":144,"line":2605},[142,31119,30830],{"class":148},[142,31121,31122],{"class":1991}," forward",[142,31124,31125],{"class":152},"(self,x):\n",[142,31127,31128,31131,31133,31135,31138,31140],{"class":144,"line":2619},[142,31129,31130],{"class":152},"        x",[142,31132,198],{"class":148},[142,31134,30852],{"class":201},[142,31136,31137],{"class":152},".sig(",[142,31139,30852],{"class":201},[142,31141,31142],{"class":152},".c1(x))\n",[142,31144,31145,31147,31149,31151],{"class":144,"line":2627},[142,31146,31130],{"class":152},[142,31148,198],{"class":148},[142,31150,30852],{"class":201},[142,31152,31153],{"class":152},".s2(x)\n",[142,31155,31156,31158,31160,31162,31164,31166],{"class":144,"line":2632},[142,31157,31130],{"class":152},[142,31159,198],{"class":148},[142,31161,30852],{"class":201},[142,31163,31137],{"class":152},[142,31165,30852],{"class":201},[142,31167,31168],{"class":152},".c3(x))\n",[142,31170,31171,31173,31175,31177],{"class":144,"line":2638},[142,31172,31130],{"class":152},[142,31174,198],{"class":148},[142,31176,30852],{"class":201},[142,31178,31179],{"class":152},".s4(x)\n",[142,31181,31182,31184,31186,31188],{"class":144,"line":2644},[142,31183,31130],{"class":152},[142,31185,198],{"class":148},[142,31187,30852],{"class":201},[142,31189,31190],{"class":152},".flatten(x)\n",[142,31192,31193,31195,31197,31199,31201,31203],{"class":144,"line":2649},[142,31194,31130],{"class":152},[142,31196,198],{"class":148},[142,31198,30852],{"class":201},[142,31200,31137],{"class":152},[142,31202,30852],{"class":201},[142,31204,31205],{"class":152},".f5(x))\n",[142,31207,31208,31210,31212,31214,31216,31218],{"class":144,"line":7977},[142,31209,31130],{"class":152},[142,31211,198],{"class":148},[142,31213,30852],{"class":201},[142,31215,31137],{"class":152},[142,31217,30852],{"class":201},[142,31219,31220],{"class":152},".f6(x))\n",[142,31222,31223,31225,31227,31229],{"class":144,"line":8001},[142,31224,31130],{"class":152},[142,31226,198],{"class":148},[142,31228,30852],{"class":201},[142,31230,31231],{"class":152},".f7(x)\n",[142,31233,31234,31236],{"class":144,"line":8006},[142,31235,14781],{"class":148},[142,31237,31238],{"class":152}," x\n",[142,31240,31241],{"class":144,"line":8012},[142,31242,2428],{"emptyLinePlaceholder":69},[142,31244,31245,31247,31250,31252,31255],{"class":144,"line":8039},[142,31246,1559],{"class":148},[142,31248,31249],{"class":201}," __name__",[142,31251,2977],{"class":148},[142,31253,31254],{"class":257},"\"__main__\"",[142,31256,3767],{"class":152},[142,31258,31259],{"class":144,"line":8044},[142,31260,31261],{"class":211},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[142,31263,31264,31267,31269,31271,31274,31276,31279,31281,31283],{"class":144,"line":8050},[142,31265,31266],{"class":152},"    device",[142,31268,198],{"class":148},[142,31270,30480],{"class":152},[142,31272,31273],{"class":257},"\"cuda\"",[142,31275,1732],{"class":148},[142,31277,31278],{"class":152}," torch.cuda.is_available() ",[142,31280,1729],{"class":148},[142,31282,30505],{"class":257},[142,31284,159],{"class":152},[142,31286,31287],{"class":144,"line":8062},[142,31288,31289],{"class":211},"    # 如果就是想指定用cpu用下方代码:\n",[142,31291,31292],{"class":144,"line":8074},[142,31293,31294],{"class":211},"    # device=\"cpu\"\n",[142,31296,31297],{"class":144,"line":8086},[142,31298,31299],{"class":211},"    # print(device)\n",[142,31301,31302],{"class":144,"line":9745},[142,31303,2428],{"emptyLinePlaceholder":69},[142,31305,31306],{"class":144,"line":9770},[142,31307,31308],{"class":211},"    # 实例化模型\n",[142,31310,31311],{"class":144,"line":9793},[142,31312,31313],{"class":211},"    # 将模型放到设备中去运行\n",[142,31315,31316,31319,31321],{"class":144,"line":9817},[142,31317,31318],{"class":152},"    model",[142,31320,198],{"class":148},[142,31322,31323],{"class":152},"LeNet().to(device)\n",[142,31325,31326,31329,31332,31334,31336,31338,31340,31342],{"class":144,"line":9822},[142,31327,31328],{"class":201},"    print",[142,31330,31331],{"class":152},"(summary(model,(",[142,31333,370],{"class":201},[142,31335,531],{"class":152},[142,31337,1054],{"class":201},[142,31339,531],{"class":152},[142,31341,1054],{"class":201},[142,31343,31344],{"class":152},")))\n",[14,31346,31347],{},[29,31348],{"alt":31,"src":31349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[14,31351,31352],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[96,31354,31355],{"start":64},[99,31356,31357],{},"训练",[14,31359,31360],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31362,31363],{},"在训练之前可以将数据展示看一下",[133,31365,31367],{"className":30407,"code":31366,"language":30409,"meta":31,"style":31},"# 建立画图的函数，用于展示数据\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",[139,31368,31369,31374,31379,31391,31403,31416,31421,31433,31438,31450,31455,31467,31471,31475,31496,31508,31513,31534,31545,31549,31554,31572,31583,31588,31599,31604,31615,31619,31624,31639,31652,31657,31662,31675,31688,31701,31706,31710,31715,31735,31752,31772,31785,31798,31808,31823],{"__ignoreMap":31},[142,31370,31371],{"class":144,"line":145},[142,31372,31373],{"class":211},"# 建立画图的函数，用于展示数据\n",[142,31375,31376],{"class":144,"line":64},[142,31377,31378],{"class":211},"# torchvision中包含很多内置的数据集\n",[142,31380,31381,31383,31386,31388],{"class":144,"line":1208},[142,31382,30766],{"class":148},[142,31384,31385],{"class":152}," sklearn.externals.array_api_compat.torch ",[142,31387,30421],{"class":148},[142,31389,31390],{"class":152}," squeeze\n",[142,31392,31393,31395,31398,31400],{"class":144,"line":1223},[142,31394,30766],{"class":148},[142,31396,31397],{"class":152}," torchvision.datasets ",[142,31399,30421],{"class":148},[142,31401,31402],{"class":152}," FashionMNIST\n",[142,31404,31405,31407,31410,31413],{"class":144,"line":1229},[142,31406,30421],{"class":148},[142,31408,31409],{"class":152}," numpy ",[142,31411,31412],{"class":148},"as",[142,31414,31415],{"class":152}," np\n",[142,31417,31418],{"class":144,"line":1243},[142,31419,31420],{"class":211},"# 引入处理数据集的包\n",[142,31422,31423,31425,31428,31430],{"class":144,"line":1249},[142,31424,30766],{"class":148},[142,31426,31427],{"class":152}," torchvision ",[142,31429,30421],{"class":148},[142,31431,31432],{"class":152}," transforms\n",[142,31434,31435],{"class":144,"line":1340},[142,31436,31437],{"class":211},"# 从torch库中引入数据处理的包\n",[142,31439,31440,31442,31445,31447],{"class":144,"line":1346},[142,31441,30421],{"class":148},[142,31443,31444],{"class":152}," torch.utils.data ",[142,31446,31412],{"class":148},[142,31448,31449],{"class":152}," Data\n",[142,31451,31452],{"class":144,"line":1358},[142,31453,31454],{"class":211},"# 导入画图的库\n",[142,31456,31457,31459,31462,31464],{"class":144,"line":1640},[142,31458,30421],{"class":148},[142,31460,31461],{"class":152}," matplotlib.pyplot ",[142,31463,31412],{"class":148},[142,31465,31466],{"class":152}," plt\n",[142,31468,31469],{"class":144,"line":1645},[142,31470,2428],{"emptyLinePlaceholder":69},[142,31472,31473],{"class":144,"line":1651},[142,31474,2428],{"emptyLinePlaceholder":69},[142,31476,31477,31480,31482,31485,31488,31490,31493],{"class":144,"line":1656},[142,31478,31479],{"class":152},"train_data",[142,31481,198],{"class":148},[142,31483,31484],{"class":152},"FashionMNIST(",[142,31486,31487],{"class":5245},"root",[142,31489,198],{"class":148},[142,31491,31492],{"class":257},"'.\u002Fdata'",[142,31494,31495],{"class":152},",\n",[142,31497,31498,31501,31503,31506],{"class":144,"line":1670},[142,31499,31500],{"class":5245},"                        train",[142,31502,198],{"class":148},[142,31504,31505],{"class":201},"True",[142,31507,31495],{"class":152},[142,31509,31510],{"class":144,"line":1675},[142,31511,31512],{"class":211},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[142,31514,31515,31518,31520,31523,31526,31528,31531],{"class":144,"line":1681},[142,31516,31517],{"class":5245},"                        transform",[142,31519,198],{"class":148},[142,31521,31522],{"class":152},"transforms.Compose([transforms.Resize(",[142,31524,31525],{"class":5245},"size",[142,31527,198],{"class":148},[142,31529,31530],{"class":201},"224",[142,31532,31533],{"class":152},"),transforms.ToTensor()]),\n",[142,31535,31536,31539,31541,31543],{"class":144,"line":1702},[142,31537,31538],{"class":5245},"                        download",[142,31540,198],{"class":148},[142,31542,31505],{"class":201},[142,31544,159],{"class":152},[142,31546,31547],{"class":144,"line":1707},[142,31548,2428],{"emptyLinePlaceholder":69},[142,31550,31551],{"class":144,"line":1721},[142,31552,31553],{"class":211},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[142,31555,31556,31559,31561,31564,31567,31569],{"class":144,"line":1726},[142,31557,31558],{"class":152},"train_loader",[142,31560,198],{"class":148},[142,31562,31563],{"class":152},"Data.DataLoader(",[142,31565,31566],{"class":5245},"dataset",[142,31568,198],{"class":148},[142,31570,31571],{"class":152},"train_data,\n",[142,31573,31574,31577,31579,31581],{"class":144,"line":1755},[142,31575,31576],{"class":5245},"                             batch_size",[142,31578,198],{"class":148},[142,31580,356],{"class":201},[142,31582,31495],{"class":152},[142,31584,31585],{"class":144,"line":1760},[142,31586,31587],{"class":211},"                             # 数据是否打乱\n",[142,31589,31590,31593,31595,31597],{"class":144,"line":1777},[142,31591,31592],{"class":5245},"                             shuffle",[142,31594,198],{"class":148},[142,31596,31505],{"class":201},[142,31598,31495],{"class":152},[142,31600,31601],{"class":144,"line":1782},[142,31602,31603],{"class":211},"                             # 规定加载数据的进程\n",[142,31605,31606,31609,31611,31613],{"class":144,"line":1787},[142,31607,31608],{"class":5245},"                             num_workers",[142,31610,198],{"class":148},[142,31612,344],{"class":201},[142,31614,159],{"class":152},[142,31616,31617],{"class":144,"line":1792},[142,31618,2428],{"emptyLinePlaceholder":69},[142,31620,31621],{"class":144,"line":1806},[142,31622,31623],{"class":211},"# 获得一个batch的数据\n",[142,31625,31626,31628,31631,31633,31636],{"class":144,"line":1811},[142,31627,3053],{"class":148},[142,31629,31630],{"class":152}," step,(b_x,b_y) ",[142,31632,26072],{"class":148},[142,31634,31635],{"class":201}," enumerate",[142,31637,31638],{"class":152},"(train_loader):\n",[142,31640,31641,31643,31646,31648,31650],{"class":144,"line":2605},[142,31642,3129],{"class":148},[142,31644,31645],{"class":152}," step ",[142,31647,1113],{"class":148},[142,31649,4121],{"class":201},[142,31651,3767],{"class":152},[142,31653,31654],{"class":144,"line":2619},[142,31655,31656],{"class":148},"        break\n",[142,31658,31659],{"class":144,"line":2627},[142,31660,31661],{"class":211},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[142,31663,31664,31667,31669,31672],{"class":144,"line":2632},[142,31665,31666],{"class":152},"batch_x",[142,31668,198],{"class":148},[142,31670,31671],{"class":152},"b_x.squeeze().numpy()  ",[142,31673,31674],{"class":211},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[142,31676,31677,31680,31682,31685],{"class":144,"line":2638},[142,31678,31679],{"class":152},"batch_y",[142,31681,198],{"class":148},[142,31683,31684],{"class":152},"b_y.numpy()   ",[142,31686,31687],{"class":211},"#将张量转换成功numpy数组\n",[142,31689,31690,31693,31695,31698],{"class":144,"line":2644},[142,31691,31692],{"class":152},"class_label",[142,31694,198],{"class":148},[142,31696,31697],{"class":152},"train_data.classes  ",[142,31699,31700],{"class":211},"#训练集标签\n",[142,31702,31703],{"class":144,"line":2649},[142,31704,31705],{"class":211},"# print(class_label)\n",[142,31707,31708],{"class":144,"line":7977},[142,31709,2428],{"emptyLinePlaceholder":69},[142,31711,31712],{"class":144,"line":8001},[142,31713,31714],{"class":211},"# 可视化一个batch的图像\n",[142,31716,31717,31720,31723,31725,31727,31729,31731,31733],{"class":144,"line":8006},[142,31718,31719],{"class":152},"plt.figure(",[142,31721,31722],{"class":5245},"figsize",[142,31724,198],{"class":148},[142,31726,153],{"class":152},[142,31728,651],{"class":201},[142,31730,531],{"class":152},[142,31732,472],{"class":201},[142,31734,30526],{"class":152},[142,31736,31737,31739,31742,31744,31747,31749],{"class":144,"line":8012},[142,31738,3053],{"class":148},[142,31740,31741],{"class":152}," ii ",[142,31743,26072],{"class":148},[142,31745,31746],{"class":152}," np.arange(",[142,31748,7387],{"class":201},[142,31750,31751],{"class":152},"(batch_y)):\n",[142,31753,31754,31757,31759,31761,31763,31766,31768,31770],{"class":144,"line":8039},[142,31755,31756],{"class":152},"    plt.subplot(",[142,31758,446],{"class":201},[142,31760,531],{"class":152},[142,31762,754],{"class":201},[142,31764,31765],{"class":152},",ii ",[142,31767,634],{"class":148},[142,31769,25147],{"class":201},[142,31771,159],{"class":152},[142,31773,31774,31777,31780,31782],{"class":144,"line":8044},[142,31775,31776],{"class":152},"    plt.imshow(batch_x[ii,:,:],",[142,31778,31779],{"class":5245},"cmap",[142,31781,198],{"class":148},[142,31783,31784],{"class":152},"plt.cm.gray)\n",[142,31786,31787,31790,31792,31794,31796],{"class":144,"line":8050},[142,31788,31789],{"class":152},"    plt.title(class_label[batch_y[ii]],",[142,31791,31525],{"class":5245},[142,31793,198],{"class":148},[142,31795,599],{"class":201},[142,31797,159],{"class":152},[142,31799,31800,31803,31806],{"class":144,"line":8062},[142,31801,31802],{"class":152},"    plt.axis(",[142,31804,31805],{"class":257},"\"off\"",[142,31807,159],{"class":152},[142,31809,31810,31813,31816,31818,31821],{"class":144,"line":8074},[142,31811,31812],{"class":152},"    plt.subplots_adjust(",[142,31814,31815],{"class":5245},"wspace",[142,31817,198],{"class":148},[142,31819,31820],{"class":201},"0.05",[142,31822,159],{"class":152},[142,31824,31825],{"class":144,"line":8086},[142,31826,31827],{"class":152},"plt.show()\n",[14,31829,31830],{},"用matplotlib进行展示的过程可以后续再补",[14,31832,31833],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31835,31836],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31838,31839],{},"模型训练：",[133,31841,31843],{"className":30407,"code":31842,"language":30409,"meta":31,"style":31},"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",[139,31844,31845,31852,31859,31863,31875,31881,31892,31902,31912,31922,31932,31937,31949,31959,31963,31967,31972,31983,31996,32007,32024,32035,32074,32090,32102,32113,32118,32129,32145,32156,32167,32178,32185,32189,32194,32199,32203,32208,32218,32239,32243,32247,32252,32257,32262,32282,32286,32291,32301,32305,32310,32319,32324,32329,32334,32344,32348,32352,32357,32362,32372,32377,32387,32392,32401,32406,32415,32420,32429,32433,32438,32448,32452,32456,32461,32476,32504,32519,32523,32528,32533,32542,32547,32556,32561,32570,32575,32584,32589,32598,32603,32612,32617,32630,32635,32645,32650,32660,32666,32672,32678,32684,32695,32701,32721,32727,32738,32744,32750,32756,32762,32768,32774,32780,32800,32806,32822,32828,32842,32848,32863,32869,32878,32884,32893,32899,32905,32914,32920,32931,32937,32956,32962,32973,32979,32999,33015,33021,33035,33041,33047,33058,33064,33070,33080,33086,33097,33103,33113,33118,33124,33173,33220,33225,33231,33250,33256,33276,33282,33288,33298,33303,33309,33325,33370,33376,33382,33388,33399,33405,33411,33417,33435,33449,33458,33467,33476,33485,33491,33497,33505,33510,33516,33527,33533,33553,33559,33565,33571,33588,33594,33600,33606,33612,33618,33645,33669,33675,33681,33687,33698,33709,33715,33732,33755,33778,33784,33789,33798,33808,33814,33819,33825,33838,33844,33855,33866,33885],{"__ignoreMap":31},[142,31846,31847,31849],{"class":144,"line":145},[142,31848,30421],{"class":148},[142,31850,31851],{"class":152}," copy\n",[142,31853,31854,31856],{"class":144,"line":64},[142,31855,30421],{"class":148},[142,31857,31858],{"class":152}," time\n",[142,31860,31861],{"class":144,"line":1208},[142,31862,2428],{"emptyLinePlaceholder":69},[142,31864,31865,31867,31870,31872],{"class":144,"line":1223},[142,31866,30421],{"class":148},[142,31868,31869],{"class":152}," pandas ",[142,31871,31412],{"class":148},[142,31873,31874],{"class":152}," pd\n",[142,31876,31877,31879],{"class":144,"line":1229},[142,31878,30421],{"class":148},[142,31880,30424],{"class":152},[142,31882,31883,31885,31887,31889],{"class":144,"line":1243},[142,31884,30766],{"class":148},[142,31886,31444],{"class":152},[142,31888,30421],{"class":148},[142,31890,31891],{"class":152}," Dataset\n",[142,31893,31894,31896,31898,31900],{"class":144,"line":1249},[142,31895,30766],{"class":148},[142,31897,31397],{"class":152},[142,31899,30421],{"class":148},[142,31901,31402],{"class":152},[142,31903,31904,31906,31908,31910],{"class":144,"line":1340},[142,31905,30766],{"class":148},[142,31907,31427],{"class":152},[142,31909,30421],{"class":148},[142,31911,31432],{"class":152},[142,31913,31914,31916,31918,31920],{"class":144,"line":1346},[142,31915,30421],{"class":148},[142,31917,31444],{"class":152},[142,31919,31412],{"class":148},[142,31921,31449],{"class":152},[142,31923,31924,31926,31928,31930],{"class":144,"line":1358},[142,31925,30421],{"class":148},[142,31927,31461],{"class":152},[142,31929,31412],{"class":148},[142,31931,31466],{"class":152},[142,31933,31934],{"class":144,"line":1640},[142,31935,31936],{"class":211},"# 导入模型\n",[142,31938,31939,31941,31944,31946],{"class":144,"line":1645},[142,31940,30766],{"class":148},[142,31942,31943],{"class":152}," model ",[142,31945,30421],{"class":148},[142,31947,31948],{"class":152}," LeNet\n",[142,31950,31951,31953,31955,31957],{"class":144,"line":1651},[142,31952,30766],{"class":148},[142,31954,30769],{"class":152},[142,31956,30421],{"class":148},[142,31958,30774],{"class":152},[142,31960,31961],{"class":144,"line":1656},[142,31962,2428],{"emptyLinePlaceholder":69},[142,31964,31965],{"class":144,"line":1670},[142,31966,2428],{"emptyLinePlaceholder":69},[142,31968,31969],{"class":144,"line":1675},[142,31970,31971],{"class":211},"# 处理训练集与验证集函数--->划分数据集\n",[142,31973,31974,31977,31980],{"class":144,"line":1681},[142,31975,31976],{"class":148},"def",[142,31978,31979],{"class":1991}," train_val_data_process",[142,31981,31982],{"class":152},"():\n",[142,31984,31985,31988,31990,31992,31994],{"class":144,"line":1702},[142,31986,31987],{"class":152},"    train_data",[142,31989,198],{"class":148},[142,31991,31484],{"class":152},[142,31993,31492],{"class":257},[142,31995,31495],{"class":152},[142,31997,31998,32001,32003,32005],{"class":144,"line":1707},[142,31999,32000],{"class":5245},"                            train",[142,32002,198],{"class":148},[142,32004,31505],{"class":201},[142,32006,31495],{"class":152},[142,32008,32009,32012,32014,32016,32018,32020,32022],{"class":144,"line":1721},[142,32010,32011],{"class":5245},"                            transform",[142,32013,198],{"class":148},[142,32015,31522],{"class":152},[142,32017,31525],{"class":5245},[142,32019,198],{"class":148},[142,32021,1054],{"class":201},[142,32023,31533],{"class":152},[142,32025,32026,32029,32031,32033],{"class":144,"line":1726},[142,32027,32028],{"class":5245},"                            download",[142,32030,198],{"class":148},[142,32032,31505],{"class":201},[142,32034,159],{"class":152},[142,32036,32037,32040,32042,32045,32048,32050,32053,32055,32057,32060,32062,32064,32067,32069,32071],{"class":144,"line":1755},[142,32038,32039],{"class":152},"    train_data,val_data",[142,32041,198],{"class":148},[142,32043,32044],{"class":152},"Data.random_split(train_data,[",[142,32046,32047],{"class":201},"round",[142,32049,153],{"class":152},[142,32051,32052],{"class":201},"0.8",[142,32054,608],{"class":148},[142,32056,7387],{"class":201},[142,32058,32059],{"class":152},"(train_data)),",[142,32061,32047],{"class":201},[142,32063,153],{"class":152},[142,32065,32066],{"class":201},"0.2",[142,32068,608],{"class":148},[142,32070,7387],{"class":201},[142,32072,32073],{"class":152},"(train_data))])\n",[142,32075,32076,32079,32081,32084,32086,32088],{"class":144,"line":1760},[142,32077,32078],{"class":152},"    train_dataloader ",[142,32080,198],{"class":148},[142,32082,32083],{"class":152}," Data.DataLoader(",[142,32085,31566],{"class":5245},[142,32087,198],{"class":148},[142,32089,31571],{"class":152},[142,32091,32092,32095,32097,32100],{"class":144,"line":1777},[142,32093,32094],{"class":5245},"                                       batch_size",[142,32096,198],{"class":148},[142,32098,32099],{"class":201},"128",[142,32101,31495],{"class":152},[142,32103,32104,32107,32109,32111],{"class":144,"line":1782},[142,32105,32106],{"class":5245},"                                       shuffle",[142,32108,198],{"class":148},[142,32110,31505],{"class":201},[142,32112,31495],{"class":152},[142,32114,32115],{"class":144,"line":1787},[142,32116,32117],{"class":211},"                                       # 规定8个进程\n",[142,32119,32120,32123,32125,32127],{"class":144,"line":1792},[142,32121,32122],{"class":5245},"                                       num_workers",[142,32124,198],{"class":148},[142,32126,548],{"class":201},[142,32128,159],{"class":152},[142,32130,32131,32134,32136,32138,32140,32142],{"class":144,"line":1806},[142,32132,32133],{"class":152},"    val_dataloader",[142,32135,198],{"class":148},[142,32137,31563],{"class":152},[142,32139,31566],{"class":5245},[142,32141,198],{"class":148},[142,32143,32144],{"class":152},"val_data,\n",[142,32146,32147,32150,32152,32154],{"class":144,"line":1811},[142,32148,32149],{"class":5245},"                                   batch_size",[142,32151,198],{"class":148},[142,32153,32099],{"class":201},[142,32155,31495],{"class":152},[142,32157,32158,32161,32163,32165],{"class":144,"line":2605},[142,32159,32160],{"class":5245},"                                   shuffle",[142,32162,198],{"class":148},[142,32164,31505],{"class":201},[142,32166,31495],{"class":152},[142,32168,32169,32172,32174,32176],{"class":144,"line":2619},[142,32170,32171],{"class":5245},"                                   num_workers",[142,32173,198],{"class":148},[142,32175,548],{"class":201},[142,32177,159],{"class":152},[142,32179,32180,32182],{"class":144,"line":2627},[142,32181,4118],{"class":148},[142,32183,32184],{"class":152}," train_dataloader,val_dataloader\n",[142,32186,32187],{"class":144,"line":2632},[142,32188,2428],{"emptyLinePlaceholder":69},[142,32190,32191],{"class":144,"line":2638},[142,32192,32193],{"class":211},"# 验证是否出错\n",[142,32195,32196],{"class":144,"line":2644},[142,32197,32198],{"class":211},"# train_val_data_process()\n",[142,32200,32201],{"class":144,"line":2649},[142,32202,2428],{"emptyLinePlaceholder":69},[142,32204,32205],{"class":144,"line":7977},[142,32206,32207],{"class":211},"# 定义模型训练函数\n",[142,32209,32210,32212,32215],{"class":144,"line":8001},[142,32211,31976],{"class":148},[142,32213,32214],{"class":1991}," train_model_process",[142,32216,32217],{"class":152},"(model,train_dataloader,val_dataloader,num_epochs):\n",[142,32219,32220,32222,32224,32226,32228,32230,32232,32234,32237],{"class":144,"line":8006},[142,32221,31266],{"class":152},[142,32223,198],{"class":148},[142,32225,30480],{"class":152},[142,32227,31273],{"class":257},[142,32229,1732],{"class":148},[142,32231,31278],{"class":152},[142,32233,1729],{"class":148},[142,32235,32236],{"class":257}," 'cpu'",[142,32238,159],{"class":152},[142,32240,32241],{"class":144,"line":8012},[142,32242,2428],{"emptyLinePlaceholder":69},[142,32244,32245],{"class":144,"line":8039},[142,32246,2428],{"emptyLinePlaceholder":69},[142,32248,32249],{"class":144,"line":8044},[142,32250,32251],{"class":211},"    # 定义优化器\n",[142,32253,32254],{"class":144,"line":8050},[142,32255,32256],{"class":211},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[142,32258,32259],{"class":144,"line":8062},[142,32260,32261],{"class":211},"    # lr为学习率\n",[142,32263,32264,32267,32269,32272,32275,32277,32280],{"class":144,"line":8074},[142,32265,32266],{"class":152},"    optimizer",[142,32268,198],{"class":148},[142,32270,32271],{"class":152},"torch.optim.Adam(model.parameters(),",[142,32273,32274],{"class":5245},"lr",[142,32276,198],{"class":148},[142,32278,32279],{"class":201},"0.001",[142,32281,159],{"class":152},[142,32283,32284],{"class":144,"line":8086},[142,32285,2428],{"emptyLinePlaceholder":69},[142,32287,32288],{"class":144,"line":9745},[142,32289,32290],{"class":211},"    # 定义损失函数使用交叉熵损失函数\n",[142,32292,32293,32296,32298],{"class":144,"line":9770},[142,32294,32295],{"class":152},"    criterion",[142,32297,198],{"class":148},[142,32299,32300],{"class":152},"nn.CrossEntropyLoss()\n",[142,32302,32303],{"class":144,"line":9793},[142,32304,2428],{"emptyLinePlaceholder":69},[142,32306,32307],{"class":144,"line":9817},[142,32308,32309],{"class":211},"    # 将模型放到GPU中进行训练\n",[142,32311,32312,32314,32316],{"class":144,"line":9822},[142,32313,31318],{"class":152},[142,32315,198],{"class":148},[142,32317,32318],{"class":152},"model.to(device)\n",[142,32320,32321],{"class":144,"line":9827},[142,32322,32323],{"class":211},"    # 复制当前模型的参数\n",[142,32325,32326],{"class":144,"line":9832},[142,32327,32328],{"class":211},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[142,32330,32331],{"class":144,"line":9841},[142,32332,32333],{"class":211},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[142,32335,32336,32339,32341],{"class":144,"line":9846},[142,32337,32338],{"class":152},"    best_model_wts",[142,32340,198],{"class":148},[142,32342,32343],{"class":152},"copy.deepcopy(model.state_dict())\n",[142,32345,32346],{"class":144,"line":9852},[142,32347,2428],{"emptyLinePlaceholder":69},[142,32349,32350],{"class":144,"line":9873},[142,32351,2428],{"emptyLinePlaceholder":69},[142,32353,32354],{"class":144,"line":9879},[142,32355,32356],{"class":211},"    # 初始化参数\n",[142,32358,32359],{"class":144,"line":9893},[142,32360,32361],{"class":211},"    # 最高准确度\n",[142,32363,32364,32367,32369],{"class":144,"line":9899},[142,32365,32366],{"class":152},"    best_acc",[142,32368,198],{"class":148},[142,32370,32371],{"class":201},"0.0\n",[142,32373,32374],{"class":144,"line":9926},[142,32375,32376],{"class":211},"    # 训练集损失列表\n",[142,32378,32379,32382,32384],{"class":144,"line":9935},[142,32380,32381],{"class":152},"    train_loss_all",[142,32383,198],{"class":148},[142,32385,32386],{"class":152},"[]\n",[142,32388,32389],{"class":144,"line":9941},[142,32390,32391],{"class":211},"    # 验证集函数列表\n",[142,32393,32394,32397,32399],{"class":144,"line":9949},[142,32395,32396],{"class":152},"    val_loss_all",[142,32398,198],{"class":148},[142,32400,32386],{"class":152},[142,32402,32403],{"class":144,"line":9954},[142,32404,32405],{"class":211},"    # 训练集准确度列表\n",[142,32407,32408,32411,32413],{"class":144,"line":16633},[142,32409,32410],{"class":152},"    train_acc_all",[142,32412,198],{"class":148},[142,32414,32386],{"class":152},[142,32416,32417],{"class":144,"line":16639},[142,32418,32419],{"class":211},"    # 验证集准确度列表\n",[142,32421,32422,32425,32427],{"class":144,"line":16662},[142,32423,32424],{"class":152},"    val_acc_all",[142,32426,198],{"class":148},[142,32428,32386],{"class":152},[142,32430,32431],{"class":144,"line":16668},[142,32432,2428],{"emptyLinePlaceholder":69},[142,32434,32435],{"class":144,"line":16691},[142,32436,32437],{"class":211},"    # 保存当前时间--->方便看每轮训练的时间\n",[142,32439,32440,32443,32445],{"class":144,"line":16705},[142,32441,32442],{"class":152},"    since",[142,32444,198],{"class":148},[142,32446,32447],{"class":152},"time.time()\n",[142,32449,32450],{"class":144,"line":16725},[142,32451,2428],{"emptyLinePlaceholder":69},[142,32453,32454],{"class":144,"line":16731},[142,32455,2428],{"emptyLinePlaceholder":69},[142,32457,32458],{"class":144,"line":16742},[142,32459,32460],{"class":211},"    # 准备工作完成--->开始训练模型\n",[142,32462,32463,32465,32468,32470,32473],{"class":144,"line":16765},[142,32464,3229],{"class":148},[142,32466,32467],{"class":152}," epoch ",[142,32469,26072],{"class":148},[142,32471,32472],{"class":201}," range",[142,32474,32475],{"class":152},"(num_epochs):\n",[142,32477,32478,32481,32483,32486,32489,32491,32493,32495,32498,32500,32502],{"class":144,"line":16787},[142,32479,32480],{"class":201},"        print",[142,32482,153],{"class":152},[142,32484,32485],{"class":257},"\"Epoch ",[142,32487,32488],{"class":201},"{}",[142,32490,737],{"class":257},[142,32492,32488],{"class":201},[142,32494,404],{"class":257},[142,32496,32497],{"class":152},".format(epoch,num_epochs",[142,32499,685],{"class":148},[142,32501,370],{"class":201},[142,32503,30526],{"class":152},[142,32505,32506,32508,32510,32513,32515,32517],{"class":144,"line":16792},[142,32507,32480],{"class":201},[142,32509,153],{"class":152},[142,32511,32512],{"class":257},"\"-\"",[142,32514,608],{"class":148},[142,32516,599],{"class":201},[142,32518,159],{"class":152},[142,32520,32521],{"class":144,"line":16798},[142,32522,2428],{"emptyLinePlaceholder":69},[142,32524,32525],{"class":144,"line":16812},[142,32526,32527],{"class":211},"        # 初始化参数\n",[142,32529,32530],{"class":144,"line":16825},[142,32531,32532],{"class":211},"        # 训练集损失函数\n",[142,32534,32535,32538,32540],{"class":144,"line":16830},[142,32536,32537],{"class":152},"        train_loss",[142,32539,198],{"class":148},[142,32541,32371],{"class":201},[142,32543,32544],{"class":144,"line":16844},[142,32545,32546],{"class":211},"        # 训练集准确度\n",[142,32548,32549,32552,32554],{"class":144,"line":16849},[142,32550,32551],{"class":152},"        train_corrects",[142,32553,198],{"class":148},[142,32555,3113],{"class":201},[142,32557,32558],{"class":144,"line":16855},[142,32559,32560],{"class":211},"        # 验证集损失函数\n",[142,32562,32563,32566,32568],{"class":144,"line":16860},[142,32564,32565],{"class":152},"        val_loss",[142,32567,198],{"class":148},[142,32569,32371],{"class":201},[142,32571,32572],{"class":144,"line":16874},[142,32573,32574],{"class":211},"        # 验证集准确度\n",[142,32576,32577,32580,32582],{"class":144,"line":16879},[142,32578,32579],{"class":152},"        val_corrects",[142,32581,198],{"class":148},[142,32583,3113],{"class":201},[142,32585,32586],{"class":144,"line":16884},[142,32587,32588],{"class":211},"        # 训练集样本数量\n",[142,32590,32591,32594,32596],{"class":144,"line":16898},[142,32592,32593],{"class":152},"        train_num",[142,32595,198],{"class":148},[142,32597,3113],{"class":201},[142,32599,32600],{"class":144,"line":16910},[142,32601,32602],{"class":211},"        # 验证集样本数量\n",[142,32604,32605,32608,32610],{"class":144,"line":16915},[142,32606,32607],{"class":152},"        val_num",[142,32609,198],{"class":148},[142,32611,3113],{"class":201},[142,32613,32614],{"class":144,"line":16928},[142,32615,32616],{"class":211},"        # 将数据放到设备,并开始训练\n",[142,32618,32619,32621,32623,32625,32627],{"class":144,"line":16933},[142,32620,3431],{"class":148},[142,32622,31630],{"class":152},[142,32624,26072],{"class":148},[142,32626,31635],{"class":201},[142,32628,32629],{"class":152},"(train_dataloader):\n",[142,32631,32632],{"class":144,"line":16938},[142,32633,32634],{"class":211},"            # 将特征放入到训练设备\n",[142,32636,32637,32640,32642],{"class":144,"line":16943},[142,32638,32639],{"class":152},"            b_x",[142,32641,198],{"class":148},[142,32643,32644],{"class":152},"b_x.to(device)\n",[142,32646,32647],{"class":144,"line":16956},[142,32648,32649],{"class":211},"            # 将标签放入到训练设备当中\n",[142,32651,32652,32655,32657],{"class":144,"line":16961},[142,32653,32654],{"class":152},"            b_y",[142,32656,198],{"class":148},[142,32658,32659],{"class":152},"b_y.to(device)\n",[142,32661,32663],{"class":144,"line":32662},98,[142,32664,32665],{"class":211},"            # 设置模型为训练模式\n",[142,32667,32669],{"class":144,"line":32668},99,[142,32670,32671],{"class":152},"            model.train()\n",[142,32673,32675],{"class":144,"line":32674},100,[142,32676,32677],{"class":211},"            # 将数据放到模型当中,开始前向传播\n",[142,32679,32681],{"class":144,"line":32680},101,[142,32682,32683],{"class":211},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[142,32685,32687,32690,32692],{"class":144,"line":32686},102,[142,32688,32689],{"class":152},"            output",[142,32691,198],{"class":148},[142,32693,32694],{"class":152},"model(b_x)\n",[142,32696,32698],{"class":144,"line":32697},103,[142,32699,32700],{"class":211},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[142,32702,32704,32707,32709,32712,32715,32717,32719],{"class":144,"line":32703},104,[142,32705,32706],{"class":152},"            pre_lab",[142,32708,198],{"class":148},[142,32710,32711],{"class":152},"torch.argmax(output,",[142,32713,32714],{"class":5245},"dim",[142,32716,198],{"class":148},[142,32718,370],{"class":201},[142,32720,159],{"class":152},[142,32722,32724],{"class":144,"line":32723},105,[142,32725,32726],{"class":211},"            # 计算每一个batch的损失函数\n",[142,32728,32730,32733,32735],{"class":144,"line":32729},106,[142,32731,32732],{"class":152},"            loss",[142,32734,198],{"class":148},[142,32736,32737],{"class":152},"criterion(output,b_y)\n",[142,32739,32741],{"class":144,"line":32740},107,[142,32742,32743],{"class":211},"            # 将梯度初始化为0\n",[142,32745,32747],{"class":144,"line":32746},108,[142,32748,32749],{"class":152},"            optimizer.zero_grad()\n",[142,32751,32753],{"class":144,"line":32752},109,[142,32754,32755],{"class":211},"            # 梯度置为0后再进行反向传播\n",[142,32757,32759],{"class":144,"line":32758},110,[142,32760,32761],{"class":152},"            loss.backward()\n",[142,32763,32765],{"class":144,"line":32764},111,[142,32766,32767],{"class":211},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[142,32769,32771],{"class":144,"line":32770},112,[142,32772,32773],{"class":152},"            optimizer.step()\n",[142,32775,32777],{"class":144,"line":32776},113,[142,32778,32779],{"class":211},"            # loss.item()指的是batch的平均损失\n",[142,32781,32783,32786,32788,32791,32793,32796,32798],{"class":144,"line":32782},114,[142,32784,32785],{"class":152},"            train_loss",[142,32787,9506],{"class":148},[142,32789,32790],{"class":152},"loss.item()",[142,32792,608],{"class":148},[142,32794,32795],{"class":152},"b_x.size(",[142,32797,344],{"class":201},[142,32799,159],{"class":152},[142,32801,32803],{"class":144,"line":32802},115,[142,32804,32805],{"class":211},"            # 计算每个批次中正确预测的数量\n",[142,32807,32809,32812,32814,32817,32819],{"class":144,"line":32808},116,[142,32810,32811],{"class":152},"            train_corrects",[142,32813,9506],{"class":148},[142,32815,32816],{"class":152},"torch.sum(pre_lab",[142,32818,2977],{"class":148},[142,32820,32821],{"class":152},"b_y.data)\n",[142,32823,32825],{"class":144,"line":32824},117,[142,32826,32827],{"class":211},"            # 计算目前为止一共处理了多少样本\n",[142,32829,32831,32834,32836,32838,32840],{"class":144,"line":32830},118,[142,32832,32833],{"class":152},"            train_num",[142,32835,9506],{"class":148},[142,32837,32795],{"class":152},[142,32839,344],{"class":201},[142,32841,159],{"class":152},[142,32843,32845],{"class":144,"line":32844},119,[142,32846,32847],{"class":211},"        # 验证数据\n",[142,32849,32851,32853,32856,32858,32860],{"class":144,"line":32850},120,[142,32852,3431],{"class":148},[142,32854,32855],{"class":152}," step ,(b_x,b_y) ",[142,32857,26072],{"class":148},[142,32859,31635],{"class":201},[142,32861,32862],{"class":152},"(val_dataloader):\n",[142,32864,32866],{"class":144,"line":32865},121,[142,32867,32868],{"class":211},"            # 将特征放到验证设备当中\n",[142,32870,32872,32874,32876],{"class":144,"line":32871},122,[142,32873,32639],{"class":152},[142,32875,198],{"class":148},[142,32877,32644],{"class":152},[142,32879,32881],{"class":144,"line":32880},123,[142,32882,32883],{"class":211},"            # 将标签放到放到训练设备当中\n",[142,32885,32887,32889,32891],{"class":144,"line":32886},124,[142,32888,32654],{"class":152},[142,32890,198],{"class":148},[142,32892,32659],{"class":152},[142,32894,32896],{"class":144,"line":32895},125,[142,32897,32898],{"class":211},"            # 开启验证模式，设置模型为评估模式\n",[142,32900,32902],{"class":144,"line":32901},126,[142,32903,32904],{"class":152},"            model.eval()\n",[142,32906,32908,32911],{"class":144,"line":32907},127,[142,32909,32910],{"class":148},"            with",[142,32912,32913],{"class":152}," torch.no_grad():\n",[142,32915,32917],{"class":144,"line":32916},128,[142,32918,32919],{"class":211},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[142,32921,32923,32926,32928],{"class":144,"line":32922},129,[142,32924,32925],{"class":152},"                output ",[142,32927,198],{"class":148},[142,32929,32930],{"class":152}," model(b_x)\n",[142,32932,32934],{"class":144,"line":32933},130,[142,32935,32936],{"class":211},"                # 查找每一行中最大值对应的下标\n",[142,32938,32940,32943,32945,32948,32950,32952,32954],{"class":144,"line":32939},131,[142,32941,32942],{"class":152},"                pre_lab ",[142,32944,198],{"class":148},[142,32946,32947],{"class":152}," torch.argmax(output, ",[142,32949,32714],{"class":5245},[142,32951,198],{"class":148},[142,32953,370],{"class":201},[142,32955,159],{"class":152},[142,32957,32959],{"class":144,"line":32958},132,[142,32960,32961],{"class":211},"                # 计算验证集上的当前 batch 损失\n",[142,32963,32965,32968,32970],{"class":144,"line":32964},133,[142,32966,32967],{"class":152},"                val_batch_loss ",[142,32969,198],{"class":148},[142,32971,32972],{"class":152}," criterion(output, b_y)\n",[142,32974,32976],{"class":144,"line":32975},134,[142,32977,32978],{"class":211},"                # 对损失函数进行累加（按样本数加权）\n",[142,32980,32982,32985,32987,32990,32992,32995,32997],{"class":144,"line":32981},135,[142,32983,32984],{"class":152},"                val_loss ",[142,32986,9506],{"class":148},[142,32988,32989],{"class":152}," val_batch_loss.item() ",[142,32991,608],{"class":148},[142,32993,32994],{"class":152}," b_x.size(",[142,32996,344],{"class":201},[142,32998,159],{"class":152},[142,33000,33002,33005,33007,33010,33012],{"class":144,"line":33001},136,[142,33003,33004],{"class":152},"                val_corrects ",[142,33006,9506],{"class":148},[142,33008,33009],{"class":152}," torch.sum(pre_lab ",[142,33011,2977],{"class":148},[142,33013,33014],{"class":152}," b_y.data)\n",[142,33016,33018],{"class":144,"line":33017},137,[142,33019,33020],{"class":211},"                # 当前用于验证的样本数量\n",[142,33022,33024,33027,33029,33031,33033],{"class":144,"line":33023},138,[142,33025,33026],{"class":152},"            val_num ",[142,33028,9506],{"class":148},[142,33030,32994],{"class":152},[142,33032,344],{"class":201},[142,33034,159],{"class":152},[142,33036,33038],{"class":144,"line":33037},139,[142,33039,33040],{"class":211},"        # 计算并保存每一次迭代的loss值和准确率\n",[142,33042,33044],{"class":144,"line":33043},140,[142,33045,33046],{"class":211},"        # 计算并保存训练集的loss值\n",[142,33048,33050,33053,33055],{"class":144,"line":33049},141,[142,33051,33052],{"class":152},"        train_loss_all.append(train_loss",[142,33054,737],{"class":148},[142,33056,33057],{"class":152},"train_num)\n",[142,33059,33061],{"class":144,"line":33060},142,[142,33062,33063],{"class":211},"        # 取双精度\n",[142,33065,33067],{"class":144,"line":33066},143,[142,33068,33069],{"class":211},"        # 计算并保存训练集的准确率\n",[142,33071,33073,33076,33078],{"class":144,"line":33072},144,[142,33074,33075],{"class":152},"        train_acc_all.append(train_corrects.double().item()",[142,33077,737],{"class":148},[142,33079,33057],{"class":152},[142,33081,33083],{"class":144,"line":33082},145,[142,33084,33085],{"class":211},"        # 计算并保存验证集的loss值\n",[142,33087,33089,33092,33094],{"class":144,"line":33088},146,[142,33090,33091],{"class":152},"        val_loss_all.append(val_loss",[142,33093,737],{"class":148},[142,33095,33096],{"class":152},"val_num)\n",[142,33098,33100],{"class":144,"line":33099},147,[142,33101,33102],{"class":211},"        # 计算并保存验证集的准确率\n",[142,33104,33106,33109,33111],{"class":144,"line":33105},148,[142,33107,33108],{"class":152},"        val_acc_all.append(val_corrects.double().item()",[142,33110,737],{"class":148},[142,33112,33096],{"class":152},[142,33114,33116],{"class":144,"line":33115},149,[142,33117,2428],{"emptyLinePlaceholder":69},[142,33119,33121],{"class":144,"line":33120},150,[142,33122,33123],{"class":211},"        # 打印训练一轮的loss值和准确率\n",[142,33125,33127,33129,33131,33133,33135,33138,33140,33143,33145,33148,33150,33152,33154,33156,33159,33161,33163,33166,33168,33170],{"class":144,"line":33126},151,[142,33128,32480],{"class":201},[142,33130,153],{"class":152},[142,33132,3620],{"class":257},[142,33134,32488],{"class":201},[142,33136,33137],{"class":257},"train loss:",[142,33139,1049],{"class":201},[142,33141,33142],{"class":148},":.4f",[142,33144,1099],{"class":201},[142,33146,33147],{"class":257}," train acc:",[142,33149,1049],{"class":201},[142,33151,33142],{"class":148},[142,33153,1099],{"class":201},[142,33155,3620],{"class":257},[142,33157,33158],{"class":152},".format(epoch,train_loss_all[",[142,33160,685],{"class":148},[142,33162,370],{"class":201},[142,33164,33165],{"class":152},"],train_acc_all[",[142,33167,685],{"class":148},[142,33169,370],{"class":201},[142,33171,33172],{"class":152},"]))\n",[142,33174,33176,33178,33180,33182,33184,33187,33189,33191,33193,33196,33198,33200,33202,33204,33207,33209,33211,33214,33216,33218],{"class":144,"line":33175},152,[142,33177,32480],{"class":201},[142,33179,153],{"class":152},[142,33181,3620],{"class":257},[142,33183,32488],{"class":201},[142,33185,33186],{"class":257},"val loss:",[142,33188,1049],{"class":201},[142,33190,33142],{"class":148},[142,33192,1099],{"class":201},[142,33194,33195],{"class":257}," val acc:",[142,33197,1049],{"class":201},[142,33199,33142],{"class":148},[142,33201,1099],{"class":201},[142,33203,3620],{"class":257},[142,33205,33206],{"class":152},".format(epoch,val_loss_all[",[142,33208,685],{"class":148},[142,33210,370],{"class":201},[142,33212,33213],{"class":152},"],val_acc_all[",[142,33215,685],{"class":148},[142,33217,370],{"class":201},[142,33219,33172],{"class":152},[142,33221,33223],{"class":144,"line":33222},153,[142,33224,2428],{"emptyLinePlaceholder":69},[142,33226,33228],{"class":144,"line":33227},154,[142,33229,33230],{"class":211},"        # 判断准确度--->保存最优模型\n",[142,33232,33234,33236,33239,33241,33243,33245,33247],{"class":144,"line":33233},155,[142,33235,2525],{"class":148},[142,33237,33238],{"class":152}," val_acc_all[",[142,33240,685],{"class":148},[142,33242,370],{"class":201},[142,33244,1093],{"class":152},[142,33246,1113],{"class":148},[142,33248,33249],{"class":152},"best_acc:\n",[142,33251,33253],{"class":144,"line":33252},156,[142,33254,33255],{"class":211},"            # 保存当前模型准确度\n",[142,33257,33259,33262,33264,33266,33269,33271,33273],{"class":144,"line":33258},157,[142,33260,33261],{"class":152},"            best_acc:",[142,33263,192],{"class":201},[142,33265,198],{"class":148},[142,33267,33268],{"class":152},"val_acc_all[",[142,33270,685],{"class":148},[142,33272,370],{"class":201},[142,33274,33275],{"class":152},"]\n",[142,33277,33279],{"class":144,"line":33278},158,[142,33280,33281],{"class":211},"            # 保存当前的准确度\n",[142,33283,33285],{"class":144,"line":33284},159,[142,33286,33287],{"class":211},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[142,33289,33291,33294,33296],{"class":144,"line":33290},160,[142,33292,33293],{"class":152},"            best_model_wts",[142,33295,198],{"class":148},[142,33297,32343],{"class":152},[142,33299,33301],{"class":144,"line":33300},161,[142,33302,2428],{"emptyLinePlaceholder":69},[142,33304,33306],{"class":144,"line":33305},162,[142,33307,33308],{"class":211},"        # 计算耗时\n",[142,33310,33312,33315,33317,33320,33322],{"class":144,"line":33311},163,[142,33313,33314],{"class":152},"        time_use",[142,33316,198],{"class":148},[142,33318,33319],{"class":152},"time.time()",[142,33321,685],{"class":148},[142,33323,33324],{"class":152},"since\n",[142,33326,33328,33330,33332,33335,33337,33340,33342,33344,33346,33348,33350,33353,33356,33359,33361,33364,33366,33368],{"class":144,"line":33327},164,[142,33329,32480],{"class":201},[142,33331,153],{"class":152},[142,33333,33334],{"class":257},"'训练和验证耗费的时间",[142,33336,1049],{"class":201},[142,33338,33339],{"class":148},":.0f",[142,33341,1099],{"class":201},[142,33343,697],{"class":257},[142,33345,1049],{"class":201},[142,33347,33339],{"class":148},[142,33349,1099],{"class":201},[142,33351,33352],{"class":257},"s'",[142,33354,33355],{"class":152},".format(time_use",[142,33357,33358],{"class":148},"\u002F\u002F",[142,33360,1060],{"class":201},[142,33362,33363],{"class":152},",time_use",[142,33365,481],{"class":148},[142,33367,1060],{"class":201},[142,33369,30526],{"class":152},[142,33371,33373],{"class":144,"line":33372},165,[142,33374,33375],{"class":211},"    # 选择最优参数\n",[142,33377,33379],{"class":144,"line":33378},166,[142,33380,33381],{"class":211},"    # 加载最高准确率下的模型参数\n",[142,33383,33385],{"class":144,"line":33384},167,[142,33386,33387],{"class":211},"    # model.load_state_dict(best_model_wts)\n",[142,33389,33391,33394,33397],{"class":144,"line":33390},168,[142,33392,33393],{"class":152},"    torch.save(model.state_dict(best_model_wts), ",[142,33395,33396],{"class":257},"'.\u002Fbest_model.pth'",[142,33398,159],{"class":152},[142,33400,33402],{"class":144,"line":33401},169,[142,33403,33404],{"class":211},"    # 或者写成\n",[142,33406,33408],{"class":144,"line":33407},170,[142,33409,33410],{"class":211},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[142,33412,33414],{"class":144,"line":33413},171,[142,33415,33416],{"class":211},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[142,33418,33420,33423,33425,33428,33431,33433],{"class":144,"line":33419},172,[142,33421,33422],{"class":152},"    train_process",[142,33424,198],{"class":148},[142,33426,33427],{"class":152},"pd.DataFrame(",[142,33429,33430],{"class":5245},"data",[142,33432,198],{"class":148},[142,33434,1574],{"class":152},[142,33436,33438,33441,33443,33446],{"class":144,"line":33437},173,[142,33439,33440],{"class":257},"        \"epoch\"",[142,33442,1012],{"class":152},[142,33444,33445],{"class":201},"range",[142,33447,33448],{"class":152},"(num_epochs),\n",[142,33450,33452,33455],{"class":144,"line":33451},174,[142,33453,33454],{"class":257},"        \"train_loss_all\"",[142,33456,33457],{"class":152},":train_loss_all,\n",[142,33459,33461,33464],{"class":144,"line":33460},175,[142,33462,33463],{"class":257},"        \"val_loss_all\"",[142,33465,33466],{"class":152},":val_loss_all,\n",[142,33468,33470,33473],{"class":144,"line":33469},176,[142,33471,33472],{"class":257},"        \"train_acc_all\"",[142,33474,33475],{"class":152},":train_acc_all,\n",[142,33477,33479,33482],{"class":144,"line":33478},177,[142,33480,33481],{"class":257},"        \"val_acc_all\"",[142,33483,33484],{"class":152},":val_acc_all\n",[142,33486,33488],{"class":144,"line":33487},178,[142,33489,33490],{"class":152},"    })\n",[142,33492,33494],{"class":144,"line":33493},179,[142,33495,33496],{"class":211},"    # 返回训练保存的过程\n",[142,33498,33500,33502],{"class":144,"line":33499},180,[142,33501,4118],{"class":148},[142,33503,33504],{"class":152}," train_process\n",[142,33506,33508],{"class":144,"line":33507},181,[142,33509,2428],{"emptyLinePlaceholder":69},[142,33511,33513],{"class":144,"line":33512},182,[142,33514,33515],{"class":211},"# 将loss值和精度按照图片的形式展示出来\n",[142,33517,33519,33521,33524],{"class":144,"line":33518},183,[142,33520,31976],{"class":148},[142,33522,33523],{"class":1991}," matplot_acc_loss",[142,33525,33526],{"class":152},"(train_process):\n",[142,33528,33530],{"class":144,"line":33529},184,[142,33531,33532],{"class":211},"    # 设置图的大小\n",[142,33534,33536,33539,33541,33543,33545,33547,33549,33551],{"class":144,"line":33535},185,[142,33537,33538],{"class":152},"    plt.figure(",[142,33540,31722],{"class":5245},[142,33542,198],{"class":148},[142,33544,153],{"class":152},[142,33546,651],{"class":201},[142,33548,531],{"class":152},[142,33550,446],{"class":201},[142,33552,30526],{"class":152},[142,33554,33556],{"class":144,"line":33555},186,[142,33557,33558],{"class":211},"    # 设置图中有几张图\n",[142,33560,33562],{"class":144,"line":33561},187,[142,33563,33564],{"class":211},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[142,33566,33568],{"class":144,"line":33567},188,[142,33569,33570],{"class":211},"    # ①loss图\n",[142,33572,33574,33576,33578,33580,33582,33584,33586],{"class":144,"line":33573},189,[142,33575,31756],{"class":152},[142,33577,370],{"class":201},[142,33579,531],{"class":152},[142,33581,230],{"class":201},[142,33583,531],{"class":152},[142,33585,370],{"class":201},[142,33587,159],{"class":152},[142,33589,33591],{"class":144,"line":33590},190,[142,33592,33593],{"class":211},"    # 补充:\n",[142,33595,33597],{"class":144,"line":33596},191,[142,33598,33599],{"class":211},"    # plt.subplot(nrows, ncols, index)\n",[142,33601,33603],{"class":144,"line":33602},192,[142,33604,33605],{"class":211},"    # nrows：行数\n",[142,33607,33609],{"class":144,"line":33608},193,[142,33610,33611],{"class":211},"    # ncols：列数\n",[142,33613,33615],{"class":144,"line":33614},194,[142,33616,33617],{"class":211},"    # index：目前选中第几个子图（从1开始）\n",[142,33619,33621,33624,33627,33630,33633,33635,33638,33640,33643],{"class":144,"line":33620},195,[142,33622,33623],{"class":152},"    plt.plot(train_process[",[142,33625,33626],{"class":257},"\"epoch\"",[142,33628,33629],{"class":152},"],train_process.train_loss_all,",[142,33631,33632],{"class":257},"'ro-'",[142,33634,531],{"class":152},[142,33636,33637],{"class":5245},"label",[142,33639,198],{"class":148},[142,33641,33642],{"class":257},"'train loss'",[142,33644,159],{"class":152},[142,33646,33648,33650,33652,33655,33658,33660,33662,33664,33667],{"class":144,"line":33647},196,[142,33649,33623],{"class":152},[142,33651,33626],{"class":257},[142,33653,33654],{"class":152},"],train_process.val_loss_all,",[142,33656,33657],{"class":257},"'bs--'",[142,33659,531],{"class":152},[142,33661,33637],{"class":5245},[142,33663,198],{"class":148},[142,33665,33666],{"class":257},"'val loss'",[142,33668,159],{"class":152},[142,33670,33672],{"class":144,"line":33671},197,[142,33673,33674],{"class":211},"    # 添加一个图例\n",[142,33676,33678],{"class":144,"line":33677},198,[142,33679,33680],{"class":152},"    plt.legend()\n",[142,33682,33684],{"class":144,"line":33683},199,[142,33685,33686],{"class":211},"    # 给轴添加标签\n",[142,33688,33690,33693,33696],{"class":144,"line":33689},200,[142,33691,33692],{"class":152},"    plt.xlabel(",[142,33694,33695],{"class":257},"'epoch'",[142,33697,159],{"class":152},[142,33699,33701,33704,33707],{"class":144,"line":33700},201,[142,33702,33703],{"class":152},"    plt.ylabel(",[142,33705,33706],{"class":257},"'loss'",[142,33708,159],{"class":152},[142,33710,33712],{"class":144,"line":33711},202,[142,33713,33714],{"class":211},"    # ②准确度图\n",[142,33716,33718,33720,33722,33724,33726,33728,33730],{"class":144,"line":33717},203,[142,33719,31756],{"class":152},[142,33721,370],{"class":201},[142,33723,531],{"class":152},[142,33725,230],{"class":201},[142,33727,531],{"class":152},[142,33729,230],{"class":201},[142,33731,159],{"class":152},[142,33733,33735,33737,33739,33742,33744,33746,33748,33750,33753],{"class":144,"line":33734},204,[142,33736,33623],{"class":152},[142,33738,33626],{"class":257},[142,33740,33741],{"class":152},"],train_process.train_acc_all,",[142,33743,33632],{"class":257},[142,33745,531],{"class":152},[142,33747,33637],{"class":5245},[142,33749,198],{"class":148},[142,33751,33752],{"class":257},"'train acc'",[142,33754,159],{"class":152},[142,33756,33758,33760,33762,33765,33767,33769,33771,33773,33776],{"class":144,"line":33757},205,[142,33759,33623],{"class":152},[142,33761,33626],{"class":257},[142,33763,33764],{"class":152},"],train_process.val_acc_all,",[142,33766,33657],{"class":257},[142,33768,531],{"class":152},[142,33770,33637],{"class":5245},[142,33772,198],{"class":148},[142,33774,33775],{"class":257},"'val acc'",[142,33777,159],{"class":152},[142,33779,33781],{"class":144,"line":33780},206,[142,33782,33783],{"class":211},"    # 添加图例\n",[142,33785,33787],{"class":144,"line":33786},207,[142,33788,33680],{"class":152},[142,33790,33792,33794,33796],{"class":144,"line":33791},208,[142,33793,33692],{"class":152},[142,33795,33626],{"class":257},[142,33797,159],{"class":152},[142,33799,33801,33803,33806],{"class":144,"line":33800},209,[142,33802,33703],{"class":152},[142,33804,33805],{"class":257},"\"acc\"",[142,33807,159],{"class":152},[142,33809,33811],{"class":144,"line":33810},210,[142,33812,33813],{"class":152},"    plt.show()\n",[142,33815,33817],{"class":144,"line":33816},211,[142,33818,2428],{"emptyLinePlaceholder":69},[142,33820,33822],{"class":144,"line":33821},212,[142,33823,33824],{"class":211},"# 正式开始训练:\n",[142,33826,33828,33830,33832,33834,33836],{"class":144,"line":33827},213,[142,33829,1559],{"class":148},[142,33831,31249],{"class":201},[142,33833,2977],{"class":148},[142,33835,31254],{"class":257},[142,33837,3767],{"class":152},[142,33839,33841],{"class":144,"line":33840},214,[142,33842,33843],{"class":211},"    # 将模型实例化\n",[142,33845,33847,33850,33852],{"class":144,"line":33846},215,[142,33848,33849],{"class":152},"    LeNet",[142,33851,198],{"class":148},[142,33853,33854],{"class":152},"LeNet()\n",[142,33856,33858,33861,33863],{"class":144,"line":33857},216,[142,33859,33860],{"class":152},"    train_dataloader,val_dataloader",[142,33862,198],{"class":148},[142,33864,33865],{"class":152},"train_val_data_process()\n",[142,33867,33869,33871,33873,33876,33879,33881,33883],{"class":144,"line":33868},217,[142,33870,33422],{"class":152},[142,33872,198],{"class":148},[142,33874,33875],{"class":152},"train_model_process(LeNet,train_dataloader,val_dataloader,",[142,33877,33878],{"class":5245},"num_epochs",[142,33880,198],{"class":148},[142,33882,853],{"class":201},[142,33884,159],{"class":152},[142,33886,33888],{"class":144,"line":33887},218,[142,33889,33890],{"class":152},"    matplot_acc_loss(train_process)\n",[14,33892,33893],{},"画图的补充点学习：",[14,33895,33896],{},[29,33897],{"alt":31,"src":33898},"\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",[96,33900,33901],{"start":1208},[99,33902,33903],{},"测试",[133,33905,33907],{"className":30407,"code":33906,"language":30409,"meta":31,"style":31},"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",[139,33908,33909,33915,33925,33937,33947,33952,33962,33972,33976,33981,33990,34007,34019,34036,34047,34063,34068,34079,34090,34101,34108,34112,34117,34127,34132,34149,34157,34161,34166,34175,34184,34188,34193,34198,34203,34210,34215,34227,34237,34247,34252,34256,34261,34270,34275,34291,34296,34301,34306,34320,34325,34339,34343,34348,34363,34368,34380,34384,34389,34401,34406,34414,34419,34424,34434,34439,34448,34453,34458,34462,34467,34472,34488,34496,34501,34506,34565,34571,34576,34587,34595,34603,34607,34612,34616,34621,34629,34634,34650,34655,34665,34675],{"__ignoreMap":31},[142,33910,33911,33913],{"class":144,"line":145},[142,33912,30421],{"class":148},[142,33914,30424],{"class":152},[142,33916,33917,33919,33921,33923],{"class":144,"line":64},[142,33918,30421],{"class":148},[142,33920,31444],{"class":152},[142,33922,31412],{"class":148},[142,33924,31449],{"class":152},[142,33926,33927,33929,33932,33934],{"class":144,"line":1208},[142,33928,30766],{"class":148},[142,33930,33931],{"class":152}," jupyter_client.consoleapp ",[142,33933,30421],{"class":148},[142,33935,33936],{"class":152}," classes\n",[142,33938,33939,33941,33943,33945],{"class":144,"line":1223},[142,33940,30766],{"class":148},[142,33942,31427],{"class":152},[142,33944,30421],{"class":148},[142,33946,31432],{"class":152},[142,33948,33949],{"class":144,"line":1229},[142,33950,33951],{"class":211},"# 导入数据集\n",[142,33953,33954,33956,33958,33960],{"class":144,"line":1243},[142,33955,30766],{"class":148},[142,33957,31397],{"class":152},[142,33959,30421],{"class":148},[142,33961,31402],{"class":152},[142,33963,33964,33966,33968,33970],{"class":144,"line":1249},[142,33965,30766],{"class":148},[142,33967,31943],{"class":152},[142,33969,30421],{"class":148},[142,33971,31948],{"class":152},[142,33973,33974],{"class":144,"line":1340},[142,33975,2428],{"emptyLinePlaceholder":69},[142,33977,33978],{"class":144,"line":1346},[142,33979,33980],{"class":211},"# 测试数据处理\n",[142,33982,33983,33985,33988],{"class":144,"line":1358},[142,33984,31976],{"class":148},[142,33986,33987],{"class":1991}," test_data_process",[142,33989,31982],{"class":152},[142,33991,33992,33995,33997,33999,34001,34003,34005],{"class":144,"line":1640},[142,33993,33994],{"class":152},"    test_data",[142,33996,198],{"class":148},[142,33998,31484],{"class":152},[142,34000,31487],{"class":5245},[142,34002,198],{"class":148},[142,34004,31492],{"class":257},[142,34006,31495],{"class":152},[142,34008,34009,34012,34014,34017],{"class":144,"line":1645},[142,34010,34011],{"class":5245},"                           train",[142,34013,198],{"class":148},[142,34015,34016],{"class":201},"False",[142,34018,31495],{"class":152},[142,34020,34021,34024,34026,34028,34030,34032,34034],{"class":144,"line":1651},[142,34022,34023],{"class":5245},"                           transform",[142,34025,198],{"class":148},[142,34027,31522],{"class":152},[142,34029,31525],{"class":5245},[142,34031,198],{"class":148},[142,34033,1054],{"class":201},[142,34035,31533],{"class":152},[142,34037,34038,34041,34043,34045],{"class":144,"line":1656},[142,34039,34040],{"class":5245},"                           download",[142,34042,198],{"class":148},[142,34044,31505],{"class":201},[142,34046,159],{"class":152},[142,34048,34049,34052,34054,34056,34058,34060],{"class":144,"line":1670},[142,34050,34051],{"class":152},"    test_dataloader",[142,34053,198],{"class":148},[142,34055,31563],{"class":152},[142,34057,31566],{"class":5245},[142,34059,198],{"class":148},[142,34061,34062],{"class":152},"test_data,\n",[142,34064,34065],{"class":144,"line":1675},[142,34066,34067],{"class":211},"                                    # 这里是一张一张进行测试\n",[142,34069,34070,34073,34075,34077],{"class":144,"line":1681},[142,34071,34072],{"class":5245},"                                    batch_size",[142,34074,198],{"class":148},[142,34076,370],{"class":201},[142,34078,31495],{"class":152},[142,34080,34081,34084,34086,34088],{"class":144,"line":1702},[142,34082,34083],{"class":5245},"                                    shuffle",[142,34085,198],{"class":148},[142,34087,31505],{"class":201},[142,34089,31495],{"class":152},[142,34091,34092,34095,34097,34099],{"class":144,"line":1707},[142,34093,34094],{"class":5245},"                                    num_workers",[142,34096,198],{"class":148},[142,34098,344],{"class":201},[142,34100,159],{"class":152},[142,34102,34103,34105],{"class":144,"line":1721},[142,34104,4118],{"class":148},[142,34106,34107],{"class":152}," test_dataloader\n",[142,34109,34110],{"class":144,"line":1726},[142,34111,2428],{"emptyLinePlaceholder":69},[142,34113,34114],{"class":144,"line":1755},[142,34115,34116],{"class":211},"# 定义模型测试函数\n",[142,34118,34119,34121,34124],{"class":144,"line":1760},[142,34120,31976],{"class":148},[142,34122,34123],{"class":1991}," test_model_process",[142,34125,34126],{"class":152},"(model,test_dataloader):\n",[142,34128,34129],{"class":144,"line":1777},[142,34130,34131],{"class":211},"    # 将模型放到设备当中，先进行判断\n",[142,34133,34134,34136,34138,34140,34142,34144,34146],{"class":144,"line":1782},[142,34135,31266],{"class":152},[142,34137,198],{"class":148},[142,34139,31273],{"class":257},[142,34141,1732],{"class":148},[142,34143,31278],{"class":152},[142,34145,1729],{"class":148},[142,34147,34148],{"class":257}," \"cpu\"\n",[142,34150,34151,34153,34155],{"class":144,"line":1787},[142,34152,31318],{"class":152},[142,34154,198],{"class":148},[142,34156,32318],{"class":152},[142,34158,34159],{"class":144,"line":1792},[142,34160,2428],{"emptyLinePlaceholder":69},[142,34162,34163],{"class":144,"line":1806},[142,34164,34165],{"class":211},"    # 设置初始化参数\n",[142,34167,34168,34171,34173],{"class":144,"line":1811},[142,34169,34170],{"class":152},"    test_corrects",[142,34172,198],{"class":148},[142,34174,32371],{"class":201},[142,34176,34177,34180,34182],{"class":144,"line":2605},[142,34178,34179],{"class":152},"    test_num",[142,34181,198],{"class":148},[142,34183,3113],{"class":201},[142,34185,34186],{"class":144,"line":2619},[142,34187,2428],{"emptyLinePlaceholder":69},[142,34189,34190],{"class":144,"line":2627},[142,34191,34192],{"class":211},"    # 进行模型测试\n",[142,34194,34195],{"class":144,"line":2632},[142,34196,34197],{"class":211},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[142,34199,34200],{"class":144,"line":2638},[142,34201,34202],{"class":211},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[142,34204,34205,34208],{"class":144,"line":2644},[142,34206,34207],{"class":148},"    with",[142,34209,32913],{"class":152},[142,34211,34212],{"class":144,"line":2649},[142,34213,34214],{"class":211},"        # 从数据中进行\n",[142,34216,34217,34219,34222,34224],{"class":144,"line":7977},[142,34218,3431],{"class":148},[142,34220,34221],{"class":152}," test_data_x,test_data_y ",[142,34223,26072],{"class":148},[142,34225,34226],{"class":152}," test_dataloader:\n",[142,34228,34229,34232,34234],{"class":144,"line":8001},[142,34230,34231],{"class":152},"            test_data_x",[142,34233,198],{"class":148},[142,34235,34236],{"class":152},"test_data_x.to(device)\n",[142,34238,34239,34242,34244],{"class":144,"line":8006},[142,34240,34241],{"class":152},"            test_data_y",[142,34243,198],{"class":148},[142,34245,34246],{"class":152},"test_data_y.to(device)\n",[142,34248,34249],{"class":144,"line":8012},[142,34250,34251],{"class":211},"            # 设置为验证模式\n",[142,34253,34254],{"class":144,"line":8039},[142,34255,32904],{"class":152},[142,34257,34258],{"class":144,"line":8044},[142,34259,34260],{"class":211},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[142,34262,34263,34265,34267],{"class":144,"line":8050},[142,34264,32689],{"class":152},[142,34266,198],{"class":148},[142,34268,34269],{"class":152},"model(test_data_x)\n",[142,34271,34272],{"class":144,"line":8062},[142,34273,34274],{"class":211},"            # 查找每一行中最大值对应的下标\n",[142,34276,34277,34279,34281,34283,34285,34287,34289],{"class":144,"line":8074},[142,34278,32706],{"class":152},[142,34280,198],{"class":148},[142,34282,32711],{"class":152},[142,34284,32714],{"class":5245},[142,34286,198],{"class":148},[142,34288,370],{"class":201},[142,34290,159],{"class":152},[142,34292,34293],{"class":144,"line":8086},[142,34294,34295],{"class":211},"            # 计算正确率\n",[142,34297,34298],{"class":144,"line":9745},[142,34299,34300],{"class":211},"            # .data表示是一个不带梯度信息的tensor\n",[142,34302,34303],{"class":144,"line":9770},[142,34304,34305],{"class":211},"            # 如果预测正确，则准确度test_corrects加1\n",[142,34307,34308,34311,34313,34315,34317],{"class":144,"line":9793},[142,34309,34310],{"class":152},"            test_corrects",[142,34312,9506],{"class":148},[142,34314,32816],{"class":152},[142,34316,2977],{"class":148},[142,34318,34319],{"class":152},"test_data_y.data)\n",[142,34321,34322],{"class":144,"line":9817},[142,34323,34324],{"class":211},"            # 将所有的测试样本进行累计\n",[142,34326,34327,34330,34332,34335,34337],{"class":144,"line":9822},[142,34328,34329],{"class":152},"            test_num",[142,34331,9506],{"class":148},[142,34333,34334],{"class":152},"test_data_x.size(",[142,34336,344],{"class":201},[142,34338,159],{"class":152},[142,34340,34341],{"class":144,"line":9827},[142,34342,2428],{"emptyLinePlaceholder":69},[142,34344,34345],{"class":144,"line":9832},[142,34346,34347],{"class":211},"        # 计算准确度\n",[142,34349,34350,34353,34355,34358,34360],{"class":144,"line":9841},[142,34351,34352],{"class":152},"        test_acc",[142,34354,198],{"class":148},[142,34356,34357],{"class":152},"test_corrects.double().item()",[142,34359,737],{"class":148},[142,34361,34362],{"class":152},"test_num\n",[142,34364,34365],{"class":144,"line":9846},[142,34366,34367],{"class":211},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[142,34369,34370,34372,34374,34377],{"class":144,"line":9852},[142,34371,32480],{"class":201},[142,34373,153],{"class":152},[142,34375,34376],{"class":257},"\"测试的准确率：\"",[142,34378,34379],{"class":152},",test_acc)\n",[142,34381,34382],{"class":144,"line":9873},[142,34383,2428],{"emptyLinePlaceholder":69},[142,34385,34386],{"class":144,"line":9879},[142,34387,34388],{"class":211},"# 实现模型的测试功能\n",[142,34390,34391,34393,34395,34397,34399],{"class":144,"line":9893},[142,34392,1559],{"class":148},[142,34394,31249],{"class":201},[142,34396,2977],{"class":148},[142,34398,31254],{"class":257},[142,34400,3767],{"class":152},[142,34402,34403],{"class":144,"line":9899},[142,34404,34405],{"class":211},"    # 加载模型\n",[142,34407,34408,34410,34412],{"class":144,"line":9926},[142,34409,31318],{"class":152},[142,34411,198],{"class":148},[142,34413,33854],{"class":152},[142,34415,34416],{"class":144,"line":9935},[142,34417,34418],{"class":211},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[142,34420,34421],{"class":144,"line":9941},[142,34422,34423],{"class":211},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[142,34425,34426,34429,34432],{"class":144,"line":9949},[142,34427,34428],{"class":152},"    model.load_state_dict(torch.load(",[142,34430,34431],{"class":257},"'best_model.pth'",[142,34433,30526],{"class":152},[142,34435,34436],{"class":144,"line":9954},[142,34437,34438],{"class":211},"    # 数据加载\n",[142,34440,34441,34443,34445],{"class":144,"line":16633},[142,34442,34051],{"class":152},[142,34444,198],{"class":148},[142,34446,34447],{"class":152},"test_data_process()\n",[142,34449,34450],{"class":144,"line":16639},[142,34451,34452],{"class":211},"    # 加载模型测试的函数\n",[142,34454,34455],{"class":144,"line":16662},[142,34456,34457],{"class":152},"    test_model_process(model,test_dataloader)\n",[142,34459,34460],{"class":144,"line":16668},[142,34461,2428],{"emptyLinePlaceholder":69},[142,34463,34464],{"class":144,"line":16691},[142,34465,34466],{"class":211},"    # 验证集推理实现：\n",[142,34468,34469],{"class":144,"line":16705},[142,34470,34471],{"class":211},"    # 加载数据加载的更详细一些\n",[142,34473,34474,34476,34478,34480,34482,34484,34486],{"class":144,"line":16725},[142,34475,31266],{"class":152},[142,34477,198],{"class":148},[142,34479,31273],{"class":257},[142,34481,1732],{"class":148},[142,34483,31278],{"class":152},[142,34485,1729],{"class":148},[142,34487,34148],{"class":257},[142,34489,34490,34492,34494],{"class":144,"line":16731},[142,34491,31318],{"class":152},[142,34493,198],{"class":148},[142,34495,32318],{"class":152},[142,34497,34498],{"class":144,"line":16742},[142,34499,34500],{"class":211},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[142,34502,34503],{"class":144,"line":16765},[142,34504,34505],{"class":211},"    # 顺序不可改变\n",[142,34507,34508,34511,34513,34515,34518,34520,34523,34525,34528,34530,34533,34535,34538,34540,34543,34545,34548,34550,34553,34555,34558,34560,34563],{"class":144,"line":16787},[142,34509,34510],{"class":152},"    classes",[142,34512,198],{"class":148},[142,34514,1043],{"class":152},[142,34516,34517],{"class":257},"'T-shirt\u002Ftop'",[142,34519,531],{"class":152},[142,34521,34522],{"class":257},"'Trouser'",[142,34524,531],{"class":152},[142,34526,34527],{"class":257},"'Pullover'",[142,34529,531],{"class":152},[142,34531,34532],{"class":257},"'Dress'",[142,34534,531],{"class":152},[142,34536,34537],{"class":257},"'Coat'",[142,34539,531],{"class":152},[142,34541,34542],{"class":257},"'Sandal'",[142,34544,531],{"class":152},[142,34546,34547],{"class":257},"'Shirt'",[142,34549,531],{"class":152},[142,34551,34552],{"class":257},"'Sneaker'",[142,34554,531],{"class":152},[142,34556,34557],{"class":257},"'Bag'",[142,34559,531],{"class":152},[142,34561,34562],{"class":257},"'Ankle boot'",[142,34564,33275],{"class":152},[142,34566,34567,34569],{"class":144,"line":16792},[142,34568,34207],{"class":148},[142,34570,32913],{"class":152},[142,34572,34573],{"class":144,"line":16798},[142,34574,34575],{"class":211},"        # 将数据和标签都放到设备当中\n",[142,34577,34578,34580,34583,34585],{"class":144,"line":16812},[142,34579,3431],{"class":148},[142,34581,34582],{"class":152}," b_x,b_y ",[142,34584,26072],{"class":148},[142,34586,34226],{"class":152},[142,34588,34589,34591,34593],{"class":144,"line":16825},[142,34590,32639],{"class":152},[142,34592,198],{"class":148},[142,34594,32644],{"class":152},[142,34596,34597,34599,34601],{"class":144,"line":16830},[142,34598,32654],{"class":152},[142,34600,198],{"class":148},[142,34602,32659],{"class":152},[142,34604,34605],{"class":144,"line":16844},[142,34606,2428],{"emptyLinePlaceholder":69},[142,34608,34609],{"class":144,"line":16849},[142,34610,34611],{"class":211},"            # 设置模型为验证模式\n",[142,34613,34614],{"class":144,"line":16855},[142,34615,32904],{"class":152},[142,34617,34618],{"class":144,"line":16860},[142,34619,34620],{"class":211},"            # 模型推理结果\n",[142,34622,34623,34625,34627],{"class":144,"line":16874},[142,34624,32689],{"class":152},[142,34626,198],{"class":148},[142,34628,32694],{"class":152},[142,34630,34631],{"class":144,"line":16879},[142,34632,34633],{"class":211},"            # 获取最大下标，最大下标就是类别号\n",[142,34635,34636,34638,34640,34642,34644,34646,34648],{"class":144,"line":16884},[142,34637,32706],{"class":152},[142,34639,198],{"class":148},[142,34641,32711],{"class":152},[142,34643,32714],{"class":5245},[142,34645,198],{"class":148},[142,34647,370],{"class":201},[142,34649,159],{"class":152},[142,34651,34652],{"class":144,"line":16898},[142,34653,34654],{"class":211},"            # 取出张量中的数值\n",[142,34656,34657,34660,34662],{"class":144,"line":16910},[142,34658,34659],{"class":152},"            result",[142,34661,198],{"class":148},[142,34663,34664],{"class":152},"pre_lab.item()\n",[142,34666,34667,34670,34672],{"class":144,"line":16915},[142,34668,34669],{"class":152},"            label",[142,34671,198],{"class":148},[142,34673,34674],{"class":152},"b_y.item()\n",[142,34676,34677,34680,34682,34685,34688,34691,34693,34696],{"class":144,"line":16928},[142,34678,34679],{"class":201},"            print",[142,34681,153],{"class":152},[142,34683,34684],{"class":257},"\"预测值：\"",[142,34686,34687],{"class":152},",classes[result],",[142,34689,34690],{"class":257},"\"------\"",[142,34692,531],{"class":152},[142,34694,34695],{"class":257},"\"真实值：\"",[142,34697,34698],{"class":152},",classes[label])\n",[14,34700,34701],{},"（2）AlexNet",[96,34703,34704],{},[99,34705,34706],{},"神经网络构建",[133,34708,34710],{"className":30407,"code":34709,"language":30409,"meta":31,"style":31},"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",[139,34711,34712,34718,34728,34738,34750,34754,34771,34779,34794,34806,34848,34875,34918,34944,34988,35031,35074,35101,35105,35115,35120,35148,35167,35186,35190,35195,35203,35218,35228,35242,35252,35267,35282,35297,35308,35312,35317,35327,35342,35347,35361,35376,35388,35393,35404,35409,35415,35420,35432,35452,35457,35466],{"__ignoreMap":31},[142,34713,34714,34716],{"class":144,"line":145},[142,34715,30421],{"class":148},[142,34717,30424],{"class":152},[142,34719,34720,34722,34724,34726],{"class":144,"line":64},[142,34721,30766],{"class":148},[142,34723,30769],{"class":152},[142,34725,30421],{"class":148},[142,34727,30774],{"class":152},[142,34729,34730,34732,34734,34736],{"class":144,"line":1208},[142,34731,30766],{"class":148},[142,34733,30786],{"class":152},[142,34735,30421],{"class":148},[142,34737,30791],{"class":152},[142,34739,34740,34742,34745,34747],{"class":144,"line":1223},[142,34741,30421],{"class":148},[142,34743,34744],{"class":152}," torch.nn.functional ",[142,34746,31412],{"class":148},[142,34748,34749],{"class":152}," F\n",[142,34751,34752],{"class":144,"line":1229},[142,34753,2428],{"emptyLinePlaceholder":69},[142,34755,34756,34758,34761,34763,34765,34767,34769],{"class":144,"line":1243},[142,34757,14723],{"class":148},[142,34759,34760],{"class":1991}," AlexNet",[142,34762,153],{"class":152},[142,34764,30807],{"class":1991},[142,34766,711],{"class":152},[142,34768,30812],{"class":1991},[142,34770,30815],{"class":152},[142,34772,34773,34775,34777],{"class":144,"line":1249},[142,34774,30830],{"class":148},[142,34776,30833],{"class":201},[142,34778,30836],{"class":152},[142,34780,34781,34783,34786,34788,34790,34792],{"class":144,"line":1340},[142,34782,30846],{"class":201},[142,34784,34785],{"class":152},"(AlexNet,",[142,34787,30852],{"class":201},[142,34789,30855],{"class":152},[142,34791,30858],{"class":201},[142,34793,2004],{"class":152},[142,34795,34796,34798,34801,34803],{"class":144,"line":1346},[142,34797,30874],{"class":201},[142,34799,34800],{"class":152},".ReLu",[142,34802,198],{"class":148},[142,34804,34805],{"class":152},"nn.ReLU()\n",[142,34807,34808,34810,34812,34814,34816,34818,34820,34822,34824,34826,34828,34830,34832,34834,34836,34838,34840,34842,34844,34846],{"class":144,"line":1358},[142,34809,30874],{"class":201},[142,34811,30877],{"class":152},[142,34813,198],{"class":148},[142,34815,30882],{"class":152},[142,34817,30885],{"class":5245},[142,34819,198],{"class":148},[142,34821,370],{"class":201},[142,34823,531],{"class":152},[142,34825,30894],{"class":5245},[142,34827,198],{"class":148},[142,34829,362],{"class":201},[142,34831,531],{"class":152},[142,34833,30903],{"class":5245},[142,34835,198],{"class":148},[142,34837,625],{"class":201},[142,34839,531],{"class":152},[142,34841,30958],{"class":5245},[142,34843,198],{"class":148},[142,34845,446],{"class":201},[142,34847,159],{"class":152},[142,34849,34850,34852,34854,34856,34859,34861,34863,34865,34867,34869,34871,34873],{"class":144,"line":1640},[142,34851,30874],{"class":201},[142,34853,30942],{"class":152},[142,34855,198],{"class":148},[142,34857,34858],{"class":152},"nn.MaxPool2d(",[142,34860,30903],{"class":5245},[142,34862,198],{"class":148},[142,34864,224],{"class":201},[142,34866,531],{"class":152},[142,34868,30958],{"class":5245},[142,34870,198],{"class":148},[142,34872,230],{"class":201},[142,34874,159],{"class":152},[142,34876,34877,34879,34881,34883,34885,34887,34889,34891,34893,34895,34897,34900,34902,34904,34906,34908,34910,34912,34914,34916],{"class":144,"line":1645},[142,34878,30874],{"class":201},[142,34880,30971],{"class":152},[142,34882,198],{"class":148},[142,34884,30882],{"class":152},[142,34886,30885],{"class":5245},[142,34888,198],{"class":148},[142,34890,362],{"class":201},[142,34892,531],{"class":152},[142,34894,30894],{"class":5245},[142,34896,198],{"class":148},[142,34898,34899],{"class":201},"256",[142,34901,531],{"class":152},[142,34903,30903],{"class":5245},[142,34905,198],{"class":148},[142,34907,472],{"class":201},[142,34909,531],{"class":152},[142,34911,30912],{"class":5245},[142,34913,198],{"class":148},[142,34915,230],{"class":201},[142,34917,159],{"class":152},[142,34919,34920,34922,34924,34926,34928,34930,34932,34934,34936,34938,34940,34942],{"class":144,"line":1651},[142,34921,30874],{"class":201},[142,34923,31006],{"class":152},[142,34925,198],{"class":148},[142,34927,34858],{"class":152},[142,34929,30903],{"class":5245},[142,34931,198],{"class":148},[142,34933,224],{"class":201},[142,34935,531],{"class":152},[142,34937,30958],{"class":5245},[142,34939,198],{"class":148},[142,34941,230],{"class":201},[142,34943,159],{"class":152},[142,34945,34946,34948,34951,34953,34955,34957,34959,34961,34963,34965,34967,34970,34972,34974,34976,34978,34980,34982,34984,34986],{"class":144,"line":1656},[142,34947,30874],{"class":201},[142,34949,34950],{"class":152},".c5",[142,34952,198],{"class":148},[142,34954,30882],{"class":152},[142,34956,30885],{"class":5245},[142,34958,198],{"class":148},[142,34960,34899],{"class":201},[142,34962,531],{"class":152},[142,34964,30894],{"class":5245},[142,34966,198],{"class":148},[142,34968,34969],{"class":201},"384",[142,34971,531],{"class":152},[142,34973,30903],{"class":5245},[142,34975,198],{"class":148},[142,34977,224],{"class":201},[142,34979,531],{"class":152},[142,34981,30912],{"class":5245},[142,34983,198],{"class":148},[142,34985,370],{"class":201},[142,34987,159],{"class":152},[142,34989,34990,34992,34995,34997,34999,35001,35003,35005,35007,35009,35011,35013,35015,35017,35019,35021,35023,35025,35027,35029],{"class":144,"line":1670},[142,34991,30874],{"class":201},[142,34993,34994],{"class":152},".c6",[142,34996,198],{"class":148},[142,34998,30882],{"class":152},[142,35000,30885],{"class":5245},[142,35002,198],{"class":148},[142,35004,34969],{"class":201},[142,35006,531],{"class":152},[142,35008,30894],{"class":5245},[142,35010,198],{"class":148},[142,35012,34969],{"class":201},[142,35014,531],{"class":152},[142,35016,30903],{"class":5245},[142,35018,198],{"class":148},[142,35020,224],{"class":201},[142,35022,531],{"class":152},[142,35024,30912],{"class":5245},[142,35026,198],{"class":148},[142,35028,370],{"class":201},[142,35030,159],{"class":152},[142,35032,35033,35035,35038,35040,35042,35044,35046,35048,35050,35052,35054,35056,35058,35060,35062,35064,35066,35068,35070,35072],{"class":144,"line":1675},[142,35034,30874],{"class":201},[142,35036,35037],{"class":152},".c7",[142,35039,198],{"class":148},[142,35041,30882],{"class":152},[142,35043,30885],{"class":5245},[142,35045,198],{"class":148},[142,35047,34969],{"class":201},[142,35049,531],{"class":152},[142,35051,30894],{"class":5245},[142,35053,198],{"class":148},[142,35055,34899],{"class":201},[142,35057,531],{"class":152},[142,35059,30903],{"class":5245},[142,35061,198],{"class":148},[142,35063,224],{"class":201},[142,35065,531],{"class":152},[142,35067,30912],{"class":5245},[142,35069,198],{"class":148},[142,35071,370],{"class":201},[142,35073,159],{"class":152},[142,35075,35076,35078,35081,35083,35085,35087,35089,35091,35093,35095,35097,35099],{"class":144,"line":1681},[142,35077,30874],{"class":201},[142,35079,35080],{"class":152},".s8",[142,35082,198],{"class":148},[142,35084,34858],{"class":152},[142,35086,30903],{"class":5245},[142,35088,198],{"class":148},[142,35090,224],{"class":201},[142,35092,531],{"class":152},[142,35094,30958],{"class":5245},[142,35096,198],{"class":148},[142,35098,230],{"class":201},[142,35100,159],{"class":152},[142,35102,35103],{"class":144,"line":1702},[142,35104,31031],{"class":211},[142,35106,35107,35109,35111,35113],{"class":144,"line":1707},[142,35108,30874],{"class":201},[142,35110,31038],{"class":152},[142,35112,198],{"class":148},[142,35114,31043],{"class":152},[142,35116,35117],{"class":144,"line":1721},[142,35118,35119],{"class":211},"       # 定义全连接层\n",[142,35121,35122,35124,35127,35129,35131,35133,35135,35137,35139,35141,35143,35146],{"class":144,"line":1726},[142,35123,30874],{"class":201},[142,35125,35126],{"class":152},".f1",[142,35128,198],{"class":148},[142,35130,31060],{"class":152},[142,35132,497],{"class":201},[142,35134,608],{"class":148},[142,35136,497],{"class":201},[142,35138,608],{"class":148},[142,35140,34899],{"class":201},[142,35142,531],{"class":152},[142,35144,35145],{"class":201},"4096",[142,35147,159],{"class":152},[142,35149,35150,35152,35155,35157,35159,35161,35163,35165],{"class":144,"line":1755},[142,35151,30874],{"class":201},[142,35153,35154],{"class":152},".f2",[142,35156,198],{"class":148},[142,35158,31060],{"class":152},[142,35160,35145],{"class":201},[142,35162,531],{"class":152},[142,35164,35145],{"class":201},[142,35166,159],{"class":152},[142,35168,35169,35171,35174,35176,35178,35180,35182,35184],{"class":144,"line":1760},[142,35170,30874],{"class":201},[142,35172,35173],{"class":152},".f3",[142,35175,198],{"class":148},[142,35177,31060],{"class":152},[142,35179,35145],{"class":201},[142,35181,531],{"class":152},[142,35183,599],{"class":201},[142,35185,159],{"class":152},[142,35187,35188],{"class":144,"line":1777},[142,35189,2428],{"emptyLinePlaceholder":69},[142,35191,35192],{"class":144,"line":1782},[142,35193,35194],{"class":211},"    # 定义前向传播\n",[142,35196,35197,35199,35201],{"class":144,"line":1787},[142,35198,30830],{"class":148},[142,35200,31122],{"class":1991},[142,35202,31125],{"class":152},[142,35204,35205,35207,35209,35211,35214,35216],{"class":144,"line":1792},[142,35206,31130],{"class":152},[142,35208,198],{"class":148},[142,35210,30852],{"class":201},[142,35212,35213],{"class":152},".ReLu(",[142,35215,30852],{"class":201},[142,35217,31142],{"class":152},[142,35219,35220,35222,35224,35226],{"class":144,"line":1806},[142,35221,31130],{"class":152},[142,35223,198],{"class":148},[142,35225,30852],{"class":201},[142,35227,31153],{"class":152},[142,35229,35230,35232,35234,35236,35238,35240],{"class":144,"line":1811},[142,35231,31130],{"class":152},[142,35233,198],{"class":148},[142,35235,30852],{"class":201},[142,35237,35213],{"class":152},[142,35239,30852],{"class":201},[142,35241,31168],{"class":152},[142,35243,35244,35246,35248,35250],{"class":144,"line":2605},[142,35245,31130],{"class":152},[142,35247,198],{"class":148},[142,35249,30852],{"class":201},[142,35251,31179],{"class":152},[142,35253,35254,35256,35258,35260,35262,35264],{"class":144,"line":2619},[142,35255,31130],{"class":152},[142,35257,198],{"class":148},[142,35259,30852],{"class":201},[142,35261,35213],{"class":152},[142,35263,30852],{"class":201},[142,35265,35266],{"class":152},".c5(x))\n",[142,35268,35269,35271,35273,35275,35277,35279],{"class":144,"line":2627},[142,35270,31130],{"class":152},[142,35272,198],{"class":148},[142,35274,30852],{"class":201},[142,35276,35213],{"class":152},[142,35278,30852],{"class":201},[142,35280,35281],{"class":152},".c6(x))\n",[142,35283,35284,35286,35288,35290,35292,35294],{"class":144,"line":2632},[142,35285,31130],{"class":152},[142,35287,198],{"class":148},[142,35289,30852],{"class":201},[142,35291,35213],{"class":152},[142,35293,30852],{"class":201},[142,35295,35296],{"class":152},".c7(x))\n",[142,35298,35299,35301,35303,35305],{"class":144,"line":2638},[142,35300,31130],{"class":152},[142,35302,198],{"class":148},[142,35304,30852],{"class":201},[142,35306,35307],{"class":152},".s8(x)\n",[142,35309,35310],{"class":144,"line":2644},[142,35311,2428],{"emptyLinePlaceholder":69},[142,35313,35314],{"class":144,"line":2649},[142,35315,35316],{"class":211},"        # 展平加线性全连接层\n",[142,35318,35319,35321,35323,35325],{"class":144,"line":7977},[142,35320,31130],{"class":152},[142,35322,198],{"class":148},[142,35324,30852],{"class":201},[142,35326,31190],{"class":152},[142,35328,35329,35331,35333,35335,35337,35339],{"class":144,"line":8001},[142,35330,31130],{"class":152},[142,35332,198],{"class":148},[142,35334,30852],{"class":201},[142,35336,35213],{"class":152},[142,35338,30852],{"class":201},[142,35340,35341],{"class":152},".f1(x))\n",[142,35343,35344],{"class":144,"line":8006},[142,35345,35346],{"class":211},"        # 还需要dropout对神经元随机进行失活\n",[142,35348,35349,35351,35353,35356,35359],{"class":144,"line":8012},[142,35350,31130],{"class":152},[142,35352,198],{"class":148},[142,35354,35355],{"class":152},"F.dropout(x,",[142,35357,35358],{"class":201},"0.5",[142,35360,159],{"class":152},[142,35362,35363,35365,35367,35369,35371,35373],{"class":144,"line":8039},[142,35364,31130],{"class":152},[142,35366,198],{"class":148},[142,35368,30852],{"class":201},[142,35370,35213],{"class":152},[142,35372,30852],{"class":201},[142,35374,35375],{"class":152},".f2(x))\n",[142,35377,35378,35380,35382,35384,35386],{"class":144,"line":8044},[142,35379,31130],{"class":152},[142,35381,198],{"class":148},[142,35383,35355],{"class":152},[142,35385,35358],{"class":201},[142,35387,159],{"class":152},[142,35389,35390],{"class":144,"line":8050},[142,35391,35392],{"class":211},"        # 直接输出\n",[142,35394,35395,35397,35399,35401],{"class":144,"line":8062},[142,35396,31130],{"class":152},[142,35398,198],{"class":148},[142,35400,30852],{"class":201},[142,35402,35403],{"class":152},".f3(x)\n",[142,35405,35406],{"class":144,"line":8074},[142,35407,35408],{"class":211},"        # 前向传播输出\n",[142,35410,35411,35413],{"class":144,"line":8086},[142,35412,14781],{"class":148},[142,35414,31238],{"class":152},[142,35416,35417],{"class":144,"line":9745},[142,35418,35419],{"class":211},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[142,35421,35422,35424,35426,35428,35430],{"class":144,"line":9770},[142,35423,1559],{"class":148},[142,35425,31249],{"class":201},[142,35427,2977],{"class":148},[142,35429,31254],{"class":257},[142,35431,3767],{"class":152},[142,35433,35434,35436,35438,35440,35442,35444,35446,35448,35450],{"class":144,"line":9793},[142,35435,31266],{"class":152},[142,35437,198],{"class":148},[142,35439,30480],{"class":152},[142,35441,31273],{"class":257},[142,35443,1732],{"class":148},[142,35445,31278],{"class":152},[142,35447,1729],{"class":148},[142,35449,30505],{"class":257},[142,35451,159],{"class":152},[142,35453,35454],{"class":144,"line":9817},[142,35455,35456],{"class":211},"    # 模型实例化，然后将实例化的模型放到设备中\n",[142,35458,35459,35461,35463],{"class":144,"line":9822},[142,35460,31318],{"class":152},[142,35462,198],{"class":148},[142,35464,35465],{"class":152},"AlexNet().to(device)\n",[142,35467,35468,35470,35472,35474,35476,35479,35481,35483],{"class":144,"line":9827},[142,35469,31328],{"class":201},[142,35471,31331],{"class":152},[142,35473,370],{"class":201},[142,35475,531],{"class":152},[142,35477,35478],{"class":201},"227",[142,35480,531],{"class":152},[142,35482,35478],{"class":201},[142,35484,31344],{"class":152},[96,35486,35487],{"start":64},[99,35488,31357],{},[133,35490,35492],{"className":30407,"code":35491,"language":30409,"meta":31,"style":31},"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",[139,35493,35494,35500,35506,35516,35522,35532,35542,35552,35562,35572,35576,35587,35597,35601,35605,35609,35617,35629,35639,35655,35665,35697,35711,35721,35731,35735,35745,35759,35769,35779,35789,35795,35799,35803,35807,35811,35815,35823,35843,35847,35851,35855,35859,35863,35879,35883,35887,35895,35899,35903,35911,35915,35919,35923,35931,35935,35939,35943,35947,35955,35959,35967,35971,35979,35983,35991,35995,36003,36007,36011,36019,36023,36027,36031,36043,36067,36081,36085,36089,36093,36101,36105,36113,36117,36125,36129,36137,36141,36149,36153,36161,36165,36177,36181,36189,36193,36201,36205,36209,36213,36217,36225,36229,36245,36249,36257,36261,36265,36269,36273,36277,36281,36285,36301,36305,36317,36321,36333,36337,36349,36353,36361,36365,36373,36377,36381,36386,36392,36396,36405,36409,36426,36430,36439,36443,36461,36474,36479,36492,36496,36500,36508,36512,36516,36524,36528,36536,36540,36548,36552,36556,36598,36640,36644,36648,36664,36668,36684,36688,36692,36700,36704,36708,36720,36758,36763,36768,36777,36781,36795,36805,36811,36817,36823,36829,36833,36837,36843,36847,36851,36859,36863,36881,36885,36889,36893,36909,36913,36917,36921,36925,36929,36949,36969,36973,36977,36981,36989,36997,37001,37017,37037,37057,37061,37065,37073,37081,37085,37089,37093,37105,37109,37119,37127,37144],{"__ignoreMap":31},[142,35495,35496,35498],{"class":144,"line":145},[142,35497,30421],{"class":148},[142,35499,31851],{"class":152},[142,35501,35502,35504],{"class":144,"line":64},[142,35503,30421],{"class":148},[142,35505,31858],{"class":152},[142,35507,35508,35510,35512,35514],{"class":144,"line":1208},[142,35509,30421],{"class":148},[142,35511,31869],{"class":152},[142,35513,31412],{"class":148},[142,35515,31874],{"class":152},[142,35517,35518,35520],{"class":144,"line":1223},[142,35519,30421],{"class":148},[142,35521,30424],{"class":152},[142,35523,35524,35526,35528,35530],{"class":144,"line":1229},[142,35525,30766],{"class":148},[142,35527,31444],{"class":152},[142,35529,30421],{"class":148},[142,35531,31891],{"class":152},[142,35533,35534,35536,35538,35540],{"class":144,"line":1243},[142,35535,30766],{"class":148},[142,35537,31397],{"class":152},[142,35539,30421],{"class":148},[142,35541,31402],{"class":152},[142,35543,35544,35546,35548,35550],{"class":144,"line":1249},[142,35545,30766],{"class":148},[142,35547,31427],{"class":152},[142,35549,30421],{"class":148},[142,35551,31432],{"class":152},[142,35553,35554,35556,35558,35560],{"class":144,"line":1340},[142,35555,30421],{"class":148},[142,35557,31444],{"class":152},[142,35559,31412],{"class":148},[142,35561,31449],{"class":152},[142,35563,35564,35566,35568,35570],{"class":144,"line":1346},[142,35565,30421],{"class":148},[142,35567,31461],{"class":152},[142,35569,31412],{"class":148},[142,35571,31466],{"class":152},[142,35573,35574],{"class":144,"line":1358},[142,35575,31936],{"class":211},[142,35577,35578,35580,35582,35584],{"class":144,"line":1640},[142,35579,30766],{"class":148},[142,35581,31943],{"class":152},[142,35583,30421],{"class":148},[142,35585,35586],{"class":152}," AlexNet\n",[142,35588,35589,35591,35593,35595],{"class":144,"line":1645},[142,35590,30766],{"class":148},[142,35592,30769],{"class":152},[142,35594,30421],{"class":148},[142,35596,30774],{"class":152},[142,35598,35599],{"class":144,"line":1651},[142,35600,2428],{"emptyLinePlaceholder":69},[142,35602,35603],{"class":144,"line":1656},[142,35604,2428],{"emptyLinePlaceholder":69},[142,35606,35607],{"class":144,"line":1670},[142,35608,31971],{"class":211},[142,35610,35611,35613,35615],{"class":144,"line":1675},[142,35612,31976],{"class":148},[142,35614,31979],{"class":1991},[142,35616,31982],{"class":152},[142,35618,35619,35621,35623,35625,35627],{"class":144,"line":1681},[142,35620,31987],{"class":152},[142,35622,198],{"class":148},[142,35624,31484],{"class":152},[142,35626,31492],{"class":257},[142,35628,31495],{"class":152},[142,35630,35631,35633,35635,35637],{"class":144,"line":1702},[142,35632,32000],{"class":5245},[142,35634,198],{"class":148},[142,35636,31505],{"class":201},[142,35638,31495],{"class":152},[142,35640,35641,35643,35645,35647,35649,35651,35653],{"class":144,"line":1707},[142,35642,32011],{"class":5245},[142,35644,198],{"class":148},[142,35646,31522],{"class":152},[142,35648,31525],{"class":5245},[142,35650,198],{"class":148},[142,35652,35478],{"class":201},[142,35654,31533],{"class":152},[142,35656,35657,35659,35661,35663],{"class":144,"line":1721},[142,35658,32028],{"class":5245},[142,35660,198],{"class":148},[142,35662,31505],{"class":201},[142,35664,159],{"class":152},[142,35666,35667,35669,35671,35673,35675,35677,35679,35681,35683,35685,35687,35689,35691,35693,35695],{"class":144,"line":1726},[142,35668,32039],{"class":152},[142,35670,198],{"class":148},[142,35672,32044],{"class":152},[142,35674,32047],{"class":201},[142,35676,153],{"class":152},[142,35678,32052],{"class":201},[142,35680,608],{"class":148},[142,35682,7387],{"class":201},[142,35684,32059],{"class":152},[142,35686,32047],{"class":201},[142,35688,153],{"class":152},[142,35690,32066],{"class":201},[142,35692,608],{"class":148},[142,35694,7387],{"class":201},[142,35696,32073],{"class":152},[142,35698,35699,35701,35703,35705,35707,35709],{"class":144,"line":1755},[142,35700,32078],{"class":152},[142,35702,198],{"class":148},[142,35704,32083],{"class":152},[142,35706,31566],{"class":5245},[142,35708,198],{"class":148},[142,35710,31571],{"class":152},[142,35712,35713,35715,35717,35719],{"class":144,"line":1760},[142,35714,32094],{"class":5245},[142,35716,198],{"class":148},[142,35718,32099],{"class":201},[142,35720,31495],{"class":152},[142,35722,35723,35725,35727,35729],{"class":144,"line":1777},[142,35724,32106],{"class":5245},[142,35726,198],{"class":148},[142,35728,31505],{"class":201},[142,35730,31495],{"class":152},[142,35732,35733],{"class":144,"line":1782},[142,35734,32117],{"class":211},[142,35736,35737,35739,35741,35743],{"class":144,"line":1787},[142,35738,32122],{"class":5245},[142,35740,198],{"class":148},[142,35742,548],{"class":201},[142,35744,159],{"class":152},[142,35746,35747,35749,35751,35753,35755,35757],{"class":144,"line":1792},[142,35748,32133],{"class":152},[142,35750,198],{"class":148},[142,35752,31563],{"class":152},[142,35754,31566],{"class":5245},[142,35756,198],{"class":148},[142,35758,32144],{"class":152},[142,35760,35761,35763,35765,35767],{"class":144,"line":1806},[142,35762,32149],{"class":5245},[142,35764,198],{"class":148},[142,35766,32099],{"class":201},[142,35768,31495],{"class":152},[142,35770,35771,35773,35775,35777],{"class":144,"line":1811},[142,35772,32160],{"class":5245},[142,35774,198],{"class":148},[142,35776,31505],{"class":201},[142,35778,31495],{"class":152},[142,35780,35781,35783,35785,35787],{"class":144,"line":2605},[142,35782,32171],{"class":5245},[142,35784,198],{"class":148},[142,35786,548],{"class":201},[142,35788,159],{"class":152},[142,35790,35791,35793],{"class":144,"line":2619},[142,35792,4118],{"class":148},[142,35794,32184],{"class":152},[142,35796,35797],{"class":144,"line":2627},[142,35798,2428],{"emptyLinePlaceholder":69},[142,35800,35801],{"class":144,"line":2632},[142,35802,32193],{"class":211},[142,35804,35805],{"class":144,"line":2638},[142,35806,32198],{"class":211},[142,35808,35809],{"class":144,"line":2644},[142,35810,2428],{"emptyLinePlaceholder":69},[142,35812,35813],{"class":144,"line":2649},[142,35814,32207],{"class":211},[142,35816,35817,35819,35821],{"class":144,"line":7977},[142,35818,31976],{"class":148},[142,35820,32214],{"class":1991},[142,35822,32217],{"class":152},[142,35824,35825,35827,35829,35831,35833,35835,35837,35839,35841],{"class":144,"line":8001},[142,35826,31266],{"class":152},[142,35828,198],{"class":148},[142,35830,30480],{"class":152},[142,35832,31273],{"class":257},[142,35834,1732],{"class":148},[142,35836,31278],{"class":152},[142,35838,1729],{"class":148},[142,35840,32236],{"class":257},[142,35842,159],{"class":152},[142,35844,35845],{"class":144,"line":8006},[142,35846,2428],{"emptyLinePlaceholder":69},[142,35848,35849],{"class":144,"line":8012},[142,35850,2428],{"emptyLinePlaceholder":69},[142,35852,35853],{"class":144,"line":8039},[142,35854,32251],{"class":211},[142,35856,35857],{"class":144,"line":8044},[142,35858,32256],{"class":211},[142,35860,35861],{"class":144,"line":8050},[142,35862,32261],{"class":211},[142,35864,35865,35867,35869,35871,35873,35875,35877],{"class":144,"line":8062},[142,35866,32266],{"class":152},[142,35868,198],{"class":148},[142,35870,32271],{"class":152},[142,35872,32274],{"class":5245},[142,35874,198],{"class":148},[142,35876,32279],{"class":201},[142,35878,159],{"class":152},[142,35880,35881],{"class":144,"line":8074},[142,35882,2428],{"emptyLinePlaceholder":69},[142,35884,35885],{"class":144,"line":8086},[142,35886,32290],{"class":211},[142,35888,35889,35891,35893],{"class":144,"line":9745},[142,35890,32295],{"class":152},[142,35892,198],{"class":148},[142,35894,32300],{"class":152},[142,35896,35897],{"class":144,"line":9770},[142,35898,2428],{"emptyLinePlaceholder":69},[142,35900,35901],{"class":144,"line":9793},[142,35902,32309],{"class":211},[142,35904,35905,35907,35909],{"class":144,"line":9817},[142,35906,31318],{"class":152},[142,35908,198],{"class":148},[142,35910,32318],{"class":152},[142,35912,35913],{"class":144,"line":9822},[142,35914,32323],{"class":211},[142,35916,35917],{"class":144,"line":9827},[142,35918,32328],{"class":211},[142,35920,35921],{"class":144,"line":9832},[142,35922,32333],{"class":211},[142,35924,35925,35927,35929],{"class":144,"line":9841},[142,35926,32338],{"class":152},[142,35928,198],{"class":148},[142,35930,32343],{"class":152},[142,35932,35933],{"class":144,"line":9846},[142,35934,2428],{"emptyLinePlaceholder":69},[142,35936,35937],{"class":144,"line":9852},[142,35938,2428],{"emptyLinePlaceholder":69},[142,35940,35941],{"class":144,"line":9873},[142,35942,32356],{"class":211},[142,35944,35945],{"class":144,"line":9879},[142,35946,32361],{"class":211},[142,35948,35949,35951,35953],{"class":144,"line":9893},[142,35950,32366],{"class":152},[142,35952,198],{"class":148},[142,35954,32371],{"class":201},[142,35956,35957],{"class":144,"line":9899},[142,35958,32376],{"class":211},[142,35960,35961,35963,35965],{"class":144,"line":9926},[142,35962,32381],{"class":152},[142,35964,198],{"class":148},[142,35966,32386],{"class":152},[142,35968,35969],{"class":144,"line":9935},[142,35970,32391],{"class":211},[142,35972,35973,35975,35977],{"class":144,"line":9941},[142,35974,32396],{"class":152},[142,35976,198],{"class":148},[142,35978,32386],{"class":152},[142,35980,35981],{"class":144,"line":9949},[142,35982,32405],{"class":211},[142,35984,35985,35987,35989],{"class":144,"line":9954},[142,35986,32410],{"class":152},[142,35988,198],{"class":148},[142,35990,32386],{"class":152},[142,35992,35993],{"class":144,"line":16633},[142,35994,32419],{"class":211},[142,35996,35997,35999,36001],{"class":144,"line":16639},[142,35998,32424],{"class":152},[142,36000,198],{"class":148},[142,36002,32386],{"class":152},[142,36004,36005],{"class":144,"line":16662},[142,36006,2428],{"emptyLinePlaceholder":69},[142,36008,36009],{"class":144,"line":16668},[142,36010,32437],{"class":211},[142,36012,36013,36015,36017],{"class":144,"line":16691},[142,36014,32442],{"class":152},[142,36016,198],{"class":148},[142,36018,32447],{"class":152},[142,36020,36021],{"class":144,"line":16705},[142,36022,2428],{"emptyLinePlaceholder":69},[142,36024,36025],{"class":144,"line":16725},[142,36026,2428],{"emptyLinePlaceholder":69},[142,36028,36029],{"class":144,"line":16731},[142,36030,32460],{"class":211},[142,36032,36033,36035,36037,36039,36041],{"class":144,"line":16742},[142,36034,3229],{"class":148},[142,36036,32467],{"class":152},[142,36038,26072],{"class":148},[142,36040,32472],{"class":201},[142,36042,32475],{"class":152},[142,36044,36045,36047,36049,36051,36053,36055,36057,36059,36061,36063,36065],{"class":144,"line":16765},[142,36046,32480],{"class":201},[142,36048,153],{"class":152},[142,36050,32485],{"class":257},[142,36052,32488],{"class":201},[142,36054,737],{"class":257},[142,36056,32488],{"class":201},[142,36058,404],{"class":257},[142,36060,32497],{"class":152},[142,36062,685],{"class":148},[142,36064,370],{"class":201},[142,36066,30526],{"class":152},[142,36068,36069,36071,36073,36075,36077,36079],{"class":144,"line":16787},[142,36070,32480],{"class":201},[142,36072,153],{"class":152},[142,36074,32512],{"class":257},[142,36076,608],{"class":148},[142,36078,599],{"class":201},[142,36080,159],{"class":152},[142,36082,36083],{"class":144,"line":16792},[142,36084,2428],{"emptyLinePlaceholder":69},[142,36086,36087],{"class":144,"line":16798},[142,36088,32527],{"class":211},[142,36090,36091],{"class":144,"line":16812},[142,36092,32532],{"class":211},[142,36094,36095,36097,36099],{"class":144,"line":16825},[142,36096,32537],{"class":152},[142,36098,198],{"class":148},[142,36100,32371],{"class":201},[142,36102,36103],{"class":144,"line":16830},[142,36104,32546],{"class":211},[142,36106,36107,36109,36111],{"class":144,"line":16844},[142,36108,32551],{"class":152},[142,36110,198],{"class":148},[142,36112,3113],{"class":201},[142,36114,36115],{"class":144,"line":16849},[142,36116,32560],{"class":211},[142,36118,36119,36121,36123],{"class":144,"line":16855},[142,36120,32565],{"class":152},[142,36122,198],{"class":148},[142,36124,32371],{"class":201},[142,36126,36127],{"class":144,"line":16860},[142,36128,32574],{"class":211},[142,36130,36131,36133,36135],{"class":144,"line":16874},[142,36132,32579],{"class":152},[142,36134,198],{"class":148},[142,36136,3113],{"class":201},[142,36138,36139],{"class":144,"line":16879},[142,36140,32588],{"class":211},[142,36142,36143,36145,36147],{"class":144,"line":16884},[142,36144,32593],{"class":152},[142,36146,198],{"class":148},[142,36148,3113],{"class":201},[142,36150,36151],{"class":144,"line":16898},[142,36152,32602],{"class":211},[142,36154,36155,36157,36159],{"class":144,"line":16910},[142,36156,32607],{"class":152},[142,36158,198],{"class":148},[142,36160,3113],{"class":201},[142,36162,36163],{"class":144,"line":16915},[142,36164,32616],{"class":211},[142,36166,36167,36169,36171,36173,36175],{"class":144,"line":16928},[142,36168,3431],{"class":148},[142,36170,31630],{"class":152},[142,36172,26072],{"class":148},[142,36174,31635],{"class":201},[142,36176,32629],{"class":152},[142,36178,36179],{"class":144,"line":16933},[142,36180,32634],{"class":211},[142,36182,36183,36185,36187],{"class":144,"line":16938},[142,36184,32639],{"class":152},[142,36186,198],{"class":148},[142,36188,32644],{"class":152},[142,36190,36191],{"class":144,"line":16943},[142,36192,32649],{"class":211},[142,36194,36195,36197,36199],{"class":144,"line":16956},[142,36196,32654],{"class":152},[142,36198,198],{"class":148},[142,36200,32659],{"class":152},[142,36202,36203],{"class":144,"line":16961},[142,36204,32665],{"class":211},[142,36206,36207],{"class":144,"line":32662},[142,36208,32671],{"class":152},[142,36210,36211],{"class":144,"line":32668},[142,36212,32677],{"class":211},[142,36214,36215],{"class":144,"line":32674},[142,36216,32683],{"class":211},[142,36218,36219,36221,36223],{"class":144,"line":32680},[142,36220,32689],{"class":152},[142,36222,198],{"class":148},[142,36224,32694],{"class":152},[142,36226,36227],{"class":144,"line":32686},[142,36228,32700],{"class":211},[142,36230,36231,36233,36235,36237,36239,36241,36243],{"class":144,"line":32697},[142,36232,32706],{"class":152},[142,36234,198],{"class":148},[142,36236,32711],{"class":152},[142,36238,32714],{"class":5245},[142,36240,198],{"class":148},[142,36242,370],{"class":201},[142,36244,159],{"class":152},[142,36246,36247],{"class":144,"line":32703},[142,36248,32726],{"class":211},[142,36250,36251,36253,36255],{"class":144,"line":32723},[142,36252,32732],{"class":152},[142,36254,198],{"class":148},[142,36256,32737],{"class":152},[142,36258,36259],{"class":144,"line":32729},[142,36260,32743],{"class":211},[142,36262,36263],{"class":144,"line":32740},[142,36264,32749],{"class":152},[142,36266,36267],{"class":144,"line":32746},[142,36268,32755],{"class":211},[142,36270,36271],{"class":144,"line":32752},[142,36272,32761],{"class":152},[142,36274,36275],{"class":144,"line":32758},[142,36276,32767],{"class":211},[142,36278,36279],{"class":144,"line":32764},[142,36280,32773],{"class":152},[142,36282,36283],{"class":144,"line":32770},[142,36284,32779],{"class":211},[142,36286,36287,36289,36291,36293,36295,36297,36299],{"class":144,"line":32776},[142,36288,32785],{"class":152},[142,36290,9506],{"class":148},[142,36292,32790],{"class":152},[142,36294,608],{"class":148},[142,36296,32795],{"class":152},[142,36298,344],{"class":201},[142,36300,159],{"class":152},[142,36302,36303],{"class":144,"line":32782},[142,36304,32805],{"class":211},[142,36306,36307,36309,36311,36313,36315],{"class":144,"line":32802},[142,36308,32811],{"class":152},[142,36310,9506],{"class":148},[142,36312,32816],{"class":152},[142,36314,2977],{"class":148},[142,36316,32821],{"class":152},[142,36318,36319],{"class":144,"line":32808},[142,36320,32827],{"class":211},[142,36322,36323,36325,36327,36329,36331],{"class":144,"line":32824},[142,36324,32833],{"class":152},[142,36326,9506],{"class":148},[142,36328,32795],{"class":152},[142,36330,344],{"class":201},[142,36332,159],{"class":152},[142,36334,36335],{"class":144,"line":32830},[142,36336,32847],{"class":211},[142,36338,36339,36341,36343,36345,36347],{"class":144,"line":32844},[142,36340,3431],{"class":148},[142,36342,32855],{"class":152},[142,36344,26072],{"class":148},[142,36346,31635],{"class":201},[142,36348,32862],{"class":152},[142,36350,36351],{"class":144,"line":32850},[142,36352,32868],{"class":211},[142,36354,36355,36357,36359],{"class":144,"line":32865},[142,36356,32639],{"class":152},[142,36358,198],{"class":148},[142,36360,32644],{"class":152},[142,36362,36363],{"class":144,"line":32871},[142,36364,32883],{"class":211},[142,36366,36367,36369,36371],{"class":144,"line":32880},[142,36368,32654],{"class":152},[142,36370,198],{"class":148},[142,36372,32659],{"class":152},[142,36374,36375],{"class":144,"line":32886},[142,36376,32898],{"class":211},[142,36378,36379],{"class":144,"line":32895},[142,36380,32904],{"class":152},[142,36382,36383],{"class":144,"line":32901},[142,36384,36385],{"class":211},"            # 验证时不计算梯度以节省内存\u002F计算\n",[142,36387,36388,36390],{"class":144,"line":32907},[142,36389,32910],{"class":148},[142,36391,32913],{"class":152},[142,36393,36394],{"class":144,"line":32916},[142,36395,32919],{"class":211},[142,36397,36398,36401,36403],{"class":144,"line":32922},[142,36399,36400],{"class":152},"                output",[142,36402,198],{"class":148},[142,36404,32694],{"class":152},[142,36406,36407],{"class":144,"line":32933},[142,36408,32936],{"class":211},[142,36410,36411,36414,36416,36418,36420,36422,36424],{"class":144,"line":32939},[142,36412,36413],{"class":152},"                pre_lab",[142,36415,198],{"class":148},[142,36417,32711],{"class":152},[142,36419,32714],{"class":5245},[142,36421,198],{"class":148},[142,36423,370],{"class":201},[142,36425,159],{"class":152},[142,36427,36428],{"class":144,"line":32958},[142,36429,32961],{"class":211},[142,36431,36432,36435,36437],{"class":144,"line":32964},[142,36433,36434],{"class":152},"                val_batch_loss",[142,36436,198],{"class":148},[142,36438,32737],{"class":152},[142,36440,36441],{"class":144,"line":32975},[142,36442,32978],{"class":211},[142,36444,36445,36448,36450,36453,36455,36457,36459],{"class":144,"line":32981},[142,36446,36447],{"class":152},"                val_loss",[142,36449,9506],{"class":148},[142,36451,36452],{"class":152},"val_batch_loss.item()",[142,36454,608],{"class":148},[142,36456,32795],{"class":152},[142,36458,344],{"class":201},[142,36460,159],{"class":152},[142,36462,36463,36466,36468,36470,36472],{"class":144,"line":33001},[142,36464,36465],{"class":152},"                val_corrects",[142,36467,9506],{"class":148},[142,36469,32816],{"class":152},[142,36471,2977],{"class":148},[142,36473,32821],{"class":152},[142,36475,36476],{"class":144,"line":33017},[142,36477,36478],{"class":211},"            # 当前用于验证的样本数量\n",[142,36480,36481,36484,36486,36488,36490],{"class":144,"line":33023},[142,36482,36483],{"class":152},"            val_num",[142,36485,9506],{"class":148},[142,36487,32795],{"class":152},[142,36489,344],{"class":201},[142,36491,159],{"class":152},[142,36493,36494],{"class":144,"line":33037},[142,36495,33040],{"class":211},[142,36497,36498],{"class":144,"line":33043},[142,36499,33046],{"class":211},[142,36501,36502,36504,36506],{"class":144,"line":33049},[142,36503,33052],{"class":152},[142,36505,737],{"class":148},[142,36507,33057],{"class":152},[142,36509,36510],{"class":144,"line":33060},[142,36511,33063],{"class":211},[142,36513,36514],{"class":144,"line":33066},[142,36515,33069],{"class":211},[142,36517,36518,36520,36522],{"class":144,"line":33072},[142,36519,33075],{"class":152},[142,36521,737],{"class":148},[142,36523,33057],{"class":152},[142,36525,36526],{"class":144,"line":33082},[142,36527,33085],{"class":211},[142,36529,36530,36532,36534],{"class":144,"line":33088},[142,36531,33091],{"class":152},[142,36533,737],{"class":148},[142,36535,33096],{"class":152},[142,36537,36538],{"class":144,"line":33099},[142,36539,33102],{"class":211},[142,36541,36542,36544,36546],{"class":144,"line":33105},[142,36543,33108],{"class":152},[142,36545,737],{"class":148},[142,36547,33096],{"class":152},[142,36549,36550],{"class":144,"line":33115},[142,36551,2428],{"emptyLinePlaceholder":69},[142,36553,36554],{"class":144,"line":33120},[142,36555,33123],{"class":211},[142,36557,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588,36590,36592,36594,36596],{"class":144,"line":33126},[142,36559,32480],{"class":201},[142,36561,153],{"class":152},[142,36563,3620],{"class":257},[142,36565,32488],{"class":201},[142,36567,33137],{"class":257},[142,36569,1049],{"class":201},[142,36571,33142],{"class":148},[142,36573,1099],{"class":201},[142,36575,33147],{"class":257},[142,36577,1049],{"class":201},[142,36579,33142],{"class":148},[142,36581,1099],{"class":201},[142,36583,3620],{"class":257},[142,36585,33158],{"class":152},[142,36587,685],{"class":148},[142,36589,370],{"class":201},[142,36591,33165],{"class":152},[142,36593,685],{"class":148},[142,36595,370],{"class":201},[142,36597,33172],{"class":152},[142,36599,36600,36602,36604,36606,36608,36610,36612,36614,36616,36618,36620,36622,36624,36626,36628,36630,36632,36634,36636,36638],{"class":144,"line":33175},[142,36601,32480],{"class":201},[142,36603,153],{"class":152},[142,36605,3620],{"class":257},[142,36607,32488],{"class":201},[142,36609,33186],{"class":257},[142,36611,1049],{"class":201},[142,36613,33142],{"class":148},[142,36615,1099],{"class":201},[142,36617,33195],{"class":257},[142,36619,1049],{"class":201},[142,36621,33142],{"class":148},[142,36623,1099],{"class":201},[142,36625,3620],{"class":257},[142,36627,33206],{"class":152},[142,36629,685],{"class":148},[142,36631,370],{"class":201},[142,36633,33213],{"class":152},[142,36635,685],{"class":148},[142,36637,370],{"class":201},[142,36639,33172],{"class":152},[142,36641,36642],{"class":144,"line":33222},[142,36643,2428],{"emptyLinePlaceholder":69},[142,36645,36646],{"class":144,"line":33227},[142,36647,33230],{"class":211},[142,36649,36650,36652,36654,36656,36658,36660,36662],{"class":144,"line":33233},[142,36651,2525],{"class":148},[142,36653,33238],{"class":152},[142,36655,685],{"class":148},[142,36657,370],{"class":201},[142,36659,1093],{"class":152},[142,36661,1113],{"class":148},[142,36663,33249],{"class":152},[142,36665,36666],{"class":144,"line":33252},[142,36667,33255],{"class":211},[142,36669,36670,36672,36674,36676,36678,36680,36682],{"class":144,"line":33258},[142,36671,33261],{"class":152},[142,36673,192],{"class":201},[142,36675,198],{"class":148},[142,36677,33268],{"class":152},[142,36679,685],{"class":148},[142,36681,370],{"class":201},[142,36683,33275],{"class":152},[142,36685,36686],{"class":144,"line":33278},[142,36687,33281],{"class":211},[142,36689,36690],{"class":144,"line":33284},[142,36691,33287],{"class":211},[142,36693,36694,36696,36698],{"class":144,"line":33290},[142,36695,33293],{"class":152},[142,36697,198],{"class":148},[142,36699,32343],{"class":152},[142,36701,36702],{"class":144,"line":33300},[142,36703,2428],{"emptyLinePlaceholder":69},[142,36705,36706],{"class":144,"line":33305},[142,36707,33308],{"class":211},[142,36709,36710,36712,36714,36716,36718],{"class":144,"line":33311},[142,36711,33314],{"class":152},[142,36713,198],{"class":148},[142,36715,33319],{"class":152},[142,36717,685],{"class":148},[142,36719,33324],{"class":152},[142,36721,36722,36724,36726,36728,36730,36732,36734,36736,36738,36740,36742,36744,36746,36748,36750,36752,36754,36756],{"class":144,"line":33327},[142,36723,32480],{"class":201},[142,36725,153],{"class":152},[142,36727,33334],{"class":257},[142,36729,1049],{"class":201},[142,36731,33339],{"class":148},[142,36733,1099],{"class":201},[142,36735,697],{"class":257},[142,36737,1049],{"class":201},[142,36739,33339],{"class":148},[142,36741,1099],{"class":201},[142,36743,33352],{"class":257},[142,36745,33355],{"class":152},[142,36747,33358],{"class":148},[142,36749,1060],{"class":201},[142,36751,33363],{"class":152},[142,36753,481],{"class":148},[142,36755,1060],{"class":201},[142,36757,30526],{"class":152},[142,36759,36760],{"class":144,"line":33372},[142,36761,36762],{"class":211},"    # 选择最优参数并保存\n",[142,36764,36765],{"class":144,"line":33378},[142,36766,36767],{"class":211},"    # 保存最佳模型权重字典\n",[142,36769,36770,36773,36775],{"class":144,"line":33384},[142,36771,36772],{"class":152},"    torch.save(best_model_wts,",[142,36774,33396],{"class":257},[142,36776,159],{"class":152},[142,36778,36779],{"class":144,"line":33390},[142,36780,33416],{"class":211},[142,36782,36783,36785,36787,36789,36791,36793],{"class":144,"line":33401},[142,36784,33422],{"class":152},[142,36786,198],{"class":148},[142,36788,33427],{"class":152},[142,36790,33430],{"class":5245},[142,36792,198],{"class":148},[142,36794,1574],{"class":152},[142,36796,36797,36799,36801,36803],{"class":144,"line":33407},[142,36798,33440],{"class":257},[142,36800,1012],{"class":152},[142,36802,33445],{"class":201},[142,36804,33448],{"class":152},[142,36806,36807,36809],{"class":144,"line":33413},[142,36808,33454],{"class":257},[142,36810,33457],{"class":152},[142,36812,36813,36815],{"class":144,"line":33419},[142,36814,33463],{"class":257},[142,36816,33466],{"class":152},[142,36818,36819,36821],{"class":144,"line":33437},[142,36820,33472],{"class":257},[142,36822,33475],{"class":152},[142,36824,36825,36827],{"class":144,"line":33451},[142,36826,33481],{"class":257},[142,36828,33484],{"class":152},[142,36830,36831],{"class":144,"line":33460},[142,36832,33490],{"class":152},[142,36834,36835],{"class":144,"line":33469},[142,36836,33496],{"class":211},[142,36838,36839,36841],{"class":144,"line":33478},[142,36840,4118],{"class":148},[142,36842,33504],{"class":152},[142,36844,36845],{"class":144,"line":33487},[142,36846,2428],{"emptyLinePlaceholder":69},[142,36848,36849],{"class":144,"line":33493},[142,36850,33515],{"class":211},[142,36852,36853,36855,36857],{"class":144,"line":33499},[142,36854,31976],{"class":148},[142,36856,33523],{"class":1991},[142,36858,33526],{"class":152},[142,36860,36861],{"class":144,"line":33507},[142,36862,33532],{"class":211},[142,36864,36865,36867,36869,36871,36873,36875,36877,36879],{"class":144,"line":33512},[142,36866,33538],{"class":152},[142,36868,31722],{"class":5245},[142,36870,198],{"class":148},[142,36872,153],{"class":152},[142,36874,651],{"class":201},[142,36876,531],{"class":152},[142,36878,446],{"class":201},[142,36880,30526],{"class":152},[142,36882,36883],{"class":144,"line":33518},[142,36884,33558],{"class":211},[142,36886,36887],{"class":144,"line":33529},[142,36888,33564],{"class":211},[142,36890,36891],{"class":144,"line":33535},[142,36892,33570],{"class":211},[142,36894,36895,36897,36899,36901,36903,36905,36907],{"class":144,"line":33555},[142,36896,31756],{"class":152},[142,36898,370],{"class":201},[142,36900,531],{"class":152},[142,36902,230],{"class":201},[142,36904,531],{"class":152},[142,36906,370],{"class":201},[142,36908,159],{"class":152},[142,36910,36911],{"class":144,"line":33561},[142,36912,33593],{"class":211},[142,36914,36915],{"class":144,"line":33567},[142,36916,33599],{"class":211},[142,36918,36919],{"class":144,"line":33573},[142,36920,33605],{"class":211},[142,36922,36923],{"class":144,"line":33590},[142,36924,33611],{"class":211},[142,36926,36927],{"class":144,"line":33596},[142,36928,33617],{"class":211},[142,36930,36931,36933,36935,36937,36939,36941,36943,36945,36947],{"class":144,"line":33602},[142,36932,33623],{"class":152},[142,36934,33626],{"class":257},[142,36936,33629],{"class":152},[142,36938,33632],{"class":257},[142,36940,531],{"class":152},[142,36942,33637],{"class":5245},[142,36944,198],{"class":148},[142,36946,33642],{"class":257},[142,36948,159],{"class":152},[142,36950,36951,36953,36955,36957,36959,36961,36963,36965,36967],{"class":144,"line":33608},[142,36952,33623],{"class":152},[142,36954,33626],{"class":257},[142,36956,33654],{"class":152},[142,36958,33657],{"class":257},[142,36960,531],{"class":152},[142,36962,33637],{"class":5245},[142,36964,198],{"class":148},[142,36966,33666],{"class":257},[142,36968,159],{"class":152},[142,36970,36971],{"class":144,"line":33614},[142,36972,33674],{"class":211},[142,36974,36975],{"class":144,"line":33620},[142,36976,33680],{"class":152},[142,36978,36979],{"class":144,"line":33647},[142,36980,33686],{"class":211},[142,36982,36983,36985,36987],{"class":144,"line":33671},[142,36984,33692],{"class":152},[142,36986,33695],{"class":257},[142,36988,159],{"class":152},[142,36990,36991,36993,36995],{"class":144,"line":33677},[142,36992,33703],{"class":152},[142,36994,33706],{"class":257},[142,36996,159],{"class":152},[142,36998,36999],{"class":144,"line":33683},[142,37000,33714],{"class":211},[142,37002,37003,37005,37007,37009,37011,37013,37015],{"class":144,"line":33689},[142,37004,31756],{"class":152},[142,37006,370],{"class":201},[142,37008,531],{"class":152},[142,37010,230],{"class":201},[142,37012,531],{"class":152},[142,37014,230],{"class":201},[142,37016,159],{"class":152},[142,37018,37019,37021,37023,37025,37027,37029,37031,37033,37035],{"class":144,"line":33700},[142,37020,33623],{"class":152},[142,37022,33626],{"class":257},[142,37024,33741],{"class":152},[142,37026,33632],{"class":257},[142,37028,531],{"class":152},[142,37030,33637],{"class":5245},[142,37032,198],{"class":148},[142,37034,33752],{"class":257},[142,37036,159],{"class":152},[142,37038,37039,37041,37043,37045,37047,37049,37051,37053,37055],{"class":144,"line":33711},[142,37040,33623],{"class":152},[142,37042,33626],{"class":257},[142,37044,33764],{"class":152},[142,37046,33657],{"class":257},[142,37048,531],{"class":152},[142,37050,33637],{"class":5245},[142,37052,198],{"class":148},[142,37054,33775],{"class":257},[142,37056,159],{"class":152},[142,37058,37059],{"class":144,"line":33717},[142,37060,33783],{"class":211},[142,37062,37063],{"class":144,"line":33734},[142,37064,33680],{"class":152},[142,37066,37067,37069,37071],{"class":144,"line":33757},[142,37068,33692],{"class":152},[142,37070,33626],{"class":257},[142,37072,159],{"class":152},[142,37074,37075,37077,37079],{"class":144,"line":33780},[142,37076,33703],{"class":152},[142,37078,33805],{"class":257},[142,37080,159],{"class":152},[142,37082,37083],{"class":144,"line":33786},[142,37084,33813],{"class":152},[142,37086,37087],{"class":144,"line":33791},[142,37088,2428],{"emptyLinePlaceholder":69},[142,37090,37091],{"class":144,"line":33800},[142,37092,33824],{"class":211},[142,37094,37095,37097,37099,37101,37103],{"class":144,"line":33810},[142,37096,1559],{"class":148},[142,37098,31249],{"class":201},[142,37100,2977],{"class":148},[142,37102,31254],{"class":257},[142,37104,3767],{"class":152},[142,37106,37107],{"class":144,"line":33816},[142,37108,33843],{"class":211},[142,37110,37111,37114,37116],{"class":144,"line":33821},[142,37112,37113],{"class":152},"    AlexNet",[142,37115,198],{"class":148},[142,37117,37118],{"class":152},"AlexNet()\n",[142,37120,37121,37123,37125],{"class":144,"line":33827},[142,37122,33860],{"class":152},[142,37124,198],{"class":148},[142,37126,33865],{"class":152},[142,37128,37129,37131,37133,37136,37138,37140,37142],{"class":144,"line":33840},[142,37130,33422],{"class":152},[142,37132,198],{"class":148},[142,37134,37135],{"class":152},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[142,37137,33878],{"class":5245},[142,37139,198],{"class":148},[142,37141,853],{"class":201},[142,37143,159],{"class":152},[142,37145,37146],{"class":144,"line":33846},[142,37147,33890],{"class":152},[96,37149,37150],{"start":1208},[99,37151,33903],{},[133,37153,37155],{"className":30407,"code":37154,"language":30409,"meta":31,"style":31},"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",[139,37156,37157,37163,37173,37183,37193,37197,37207,37217,37228,37232,37236,37240,37248,37264,37274,37290,37300,37314,37318,37328,37338,37348,37354,37358,37362,37370,37374,37390,37398,37402,37406,37414,37422,37426,37430,37434,37438,37444,37448,37458,37466,37474,37478,37482,37486,37494,37498,37514,37518,37522,37526,37538,37542,37554,37558,37562,37574,37578,37588,37592,37596,37608,37612,37620,37624,37628,37636,37640,37648,37652,37656,37660,37664,37668,37684,37692,37696,37700,37748,37754,37758,37768,37776,37784,37788,37792,37796,37800,37808,37812,37828,37832,37840,37848],{"__ignoreMap":31},[142,37158,37159,37161],{"class":144,"line":145},[142,37160,30421],{"class":148},[142,37162,30424],{"class":152},[142,37164,37165,37167,37169,37171],{"class":144,"line":64},[142,37166,30421],{"class":148},[142,37168,31444],{"class":152},[142,37170,31412],{"class":148},[142,37172,31449],{"class":152},[142,37174,37175,37177,37179,37181],{"class":144,"line":1208},[142,37176,30766],{"class":148},[142,37178,33931],{"class":152},[142,37180,30421],{"class":148},[142,37182,33936],{"class":152},[142,37184,37185,37187,37189,37191],{"class":144,"line":1223},[142,37186,30766],{"class":148},[142,37188,31427],{"class":152},[142,37190,30421],{"class":148},[142,37192,31432],{"class":152},[142,37194,37195],{"class":144,"line":1229},[142,37196,33951],{"class":211},[142,37198,37199,37201,37203,37205],{"class":144,"line":1243},[142,37200,30766],{"class":148},[142,37202,31397],{"class":152},[142,37204,30421],{"class":148},[142,37206,31402],{"class":152},[142,37208,37209,37211,37213,37215],{"class":144,"line":1249},[142,37210,30766],{"class":148},[142,37212,31943],{"class":152},[142,37214,30421],{"class":148},[142,37216,35586],{"class":152},[142,37218,37219,37221,37224,37226],{"class":144,"line":1340},[142,37220,30766],{"class":148},[142,37222,37223],{"class":152}," 练习.AlexNet.model ",[142,37225,30421],{"class":148},[142,37227,35586],{"class":152},[142,37229,37230],{"class":144,"line":1346},[142,37231,2428],{"emptyLinePlaceholder":69},[142,37233,37234],{"class":144,"line":1358},[142,37235,2428],{"emptyLinePlaceholder":69},[142,37237,37238],{"class":144,"line":1640},[142,37239,33980],{"class":211},[142,37241,37242,37244,37246],{"class":144,"line":1645},[142,37243,31976],{"class":148},[142,37245,33987],{"class":1991},[142,37247,31982],{"class":152},[142,37249,37250,37252,37254,37256,37258,37260,37262],{"class":144,"line":1651},[142,37251,33994],{"class":152},[142,37253,198],{"class":148},[142,37255,31484],{"class":152},[142,37257,31487],{"class":5245},[142,37259,198],{"class":148},[142,37261,31492],{"class":257},[142,37263,31495],{"class":152},[142,37265,37266,37268,37270,37272],{"class":144,"line":1656},[142,37267,34011],{"class":5245},[142,37269,198],{"class":148},[142,37271,34016],{"class":201},[142,37273,31495],{"class":152},[142,37275,37276,37278,37280,37282,37284,37286,37288],{"class":144,"line":1670},[142,37277,34023],{"class":5245},[142,37279,198],{"class":148},[142,37281,31522],{"class":152},[142,37283,31525],{"class":5245},[142,37285,198],{"class":148},[142,37287,35478],{"class":201},[142,37289,31533],{"class":152},[142,37291,37292,37294,37296,37298],{"class":144,"line":1675},[142,37293,34040],{"class":5245},[142,37295,198],{"class":148},[142,37297,31505],{"class":201},[142,37299,159],{"class":152},[142,37301,37302,37304,37306,37308,37310,37312],{"class":144,"line":1681},[142,37303,34051],{"class":152},[142,37305,198],{"class":148},[142,37307,31563],{"class":152},[142,37309,31566],{"class":5245},[142,37311,198],{"class":148},[142,37313,34062],{"class":152},[142,37315,37316],{"class":144,"line":1702},[142,37317,34067],{"class":211},[142,37319,37320,37322,37324,37326],{"class":144,"line":1707},[142,37321,34072],{"class":5245},[142,37323,198],{"class":148},[142,37325,370],{"class":201},[142,37327,31495],{"class":152},[142,37329,37330,37332,37334,37336],{"class":144,"line":1721},[142,37331,34083],{"class":5245},[142,37333,198],{"class":148},[142,37335,31505],{"class":201},[142,37337,31495],{"class":152},[142,37339,37340,37342,37344,37346],{"class":144,"line":1726},[142,37341,34094],{"class":5245},[142,37343,198],{"class":148},[142,37345,344],{"class":201},[142,37347,159],{"class":152},[142,37349,37350,37352],{"class":144,"line":1755},[142,37351,4118],{"class":148},[142,37353,34107],{"class":152},[142,37355,37356],{"class":144,"line":1760},[142,37357,2428],{"emptyLinePlaceholder":69},[142,37359,37360],{"class":144,"line":1777},[142,37361,34116],{"class":211},[142,37363,37364,37366,37368],{"class":144,"line":1782},[142,37365,31976],{"class":148},[142,37367,34123],{"class":1991},[142,37369,34126],{"class":152},[142,37371,37372],{"class":144,"line":1787},[142,37373,34131],{"class":211},[142,37375,37376,37378,37380,37382,37384,37386,37388],{"class":144,"line":1792},[142,37377,31266],{"class":152},[142,37379,198],{"class":148},[142,37381,31273],{"class":257},[142,37383,1732],{"class":148},[142,37385,31278],{"class":152},[142,37387,1729],{"class":148},[142,37389,34148],{"class":257},[142,37391,37392,37394,37396],{"class":144,"line":1806},[142,37393,31318],{"class":152},[142,37395,198],{"class":148},[142,37397,32318],{"class":152},[142,37399,37400],{"class":144,"line":1811},[142,37401,2428],{"emptyLinePlaceholder":69},[142,37403,37404],{"class":144,"line":2605},[142,37405,34165],{"class":211},[142,37407,37408,37410,37412],{"class":144,"line":2619},[142,37409,34170],{"class":152},[142,37411,198],{"class":148},[142,37413,32371],{"class":201},[142,37415,37416,37418,37420],{"class":144,"line":2627},[142,37417,34179],{"class":152},[142,37419,198],{"class":148},[142,37421,3113],{"class":201},[142,37423,37424],{"class":144,"line":2632},[142,37425,2428],{"emptyLinePlaceholder":69},[142,37427,37428],{"class":144,"line":2638},[142,37429,34192],{"class":211},[142,37431,37432],{"class":144,"line":2644},[142,37433,34197],{"class":211},[142,37435,37436],{"class":144,"line":2649},[142,37437,34202],{"class":211},[142,37439,37440,37442],{"class":144,"line":7977},[142,37441,34207],{"class":148},[142,37443,32913],{"class":152},[142,37445,37446],{"class":144,"line":8001},[142,37447,34214],{"class":211},[142,37449,37450,37452,37454,37456],{"class":144,"line":8006},[142,37451,3431],{"class":148},[142,37453,34221],{"class":152},[142,37455,26072],{"class":148},[142,37457,34226],{"class":152},[142,37459,37460,37462,37464],{"class":144,"line":8012},[142,37461,34231],{"class":152},[142,37463,198],{"class":148},[142,37465,34236],{"class":152},[142,37467,37468,37470,37472],{"class":144,"line":8039},[142,37469,34241],{"class":152},[142,37471,198],{"class":148},[142,37473,34246],{"class":152},[142,37475,37476],{"class":144,"line":8044},[142,37477,34251],{"class":211},[142,37479,37480],{"class":144,"line":8050},[142,37481,32904],{"class":152},[142,37483,37484],{"class":144,"line":8062},[142,37485,34260],{"class":211},[142,37487,37488,37490,37492],{"class":144,"line":8074},[142,37489,32689],{"class":152},[142,37491,198],{"class":148},[142,37493,34269],{"class":152},[142,37495,37496],{"class":144,"line":8086},[142,37497,34274],{"class":211},[142,37499,37500,37502,37504,37506,37508,37510,37512],{"class":144,"line":9745},[142,37501,32706],{"class":152},[142,37503,198],{"class":148},[142,37505,32711],{"class":152},[142,37507,32714],{"class":5245},[142,37509,198],{"class":148},[142,37511,370],{"class":201},[142,37513,159],{"class":152},[142,37515,37516],{"class":144,"line":9770},[142,37517,34295],{"class":211},[142,37519,37520],{"class":144,"line":9793},[142,37521,34300],{"class":211},[142,37523,37524],{"class":144,"line":9817},[142,37525,34305],{"class":211},[142,37527,37528,37530,37532,37534,37536],{"class":144,"line":9822},[142,37529,34310],{"class":152},[142,37531,9506],{"class":148},[142,37533,32816],{"class":152},[142,37535,2977],{"class":148},[142,37537,34319],{"class":152},[142,37539,37540],{"class":144,"line":9827},[142,37541,34324],{"class":211},[142,37543,37544,37546,37548,37550,37552],{"class":144,"line":9832},[142,37545,34329],{"class":152},[142,37547,9506],{"class":148},[142,37549,34334],{"class":152},[142,37551,344],{"class":201},[142,37553,159],{"class":152},[142,37555,37556],{"class":144,"line":9841},[142,37557,2428],{"emptyLinePlaceholder":69},[142,37559,37560],{"class":144,"line":9846},[142,37561,34347],{"class":211},[142,37563,37564,37566,37568,37570,37572],{"class":144,"line":9852},[142,37565,34352],{"class":152},[142,37567,198],{"class":148},[142,37569,34357],{"class":152},[142,37571,737],{"class":148},[142,37573,34362],{"class":152},[142,37575,37576],{"class":144,"line":9873},[142,37577,34367],{"class":211},[142,37579,37580,37582,37584,37586],{"class":144,"line":9879},[142,37581,32480],{"class":201},[142,37583,153],{"class":152},[142,37585,34376],{"class":257},[142,37587,34379],{"class":152},[142,37589,37590],{"class":144,"line":9893},[142,37591,2428],{"emptyLinePlaceholder":69},[142,37593,37594],{"class":144,"line":9899},[142,37595,34388],{"class":211},[142,37597,37598,37600,37602,37604,37606],{"class":144,"line":9926},[142,37599,1559],{"class":148},[142,37601,31249],{"class":201},[142,37603,2977],{"class":148},[142,37605,31254],{"class":257},[142,37607,3767],{"class":152},[142,37609,37610],{"class":144,"line":9935},[142,37611,34405],{"class":211},[142,37613,37614,37616,37618],{"class":144,"line":9941},[142,37615,31318],{"class":152},[142,37617,198],{"class":148},[142,37619,37118],{"class":152},[142,37621,37622],{"class":144,"line":9949},[142,37623,34418],{"class":211},[142,37625,37626],{"class":144,"line":9954},[142,37627,34423],{"class":211},[142,37629,37630,37632,37634],{"class":144,"line":16633},[142,37631,34428],{"class":152},[142,37633,34431],{"class":257},[142,37635,30526],{"class":152},[142,37637,37638],{"class":144,"line":16639},[142,37639,34438],{"class":211},[142,37641,37642,37644,37646],{"class":144,"line":16662},[142,37643,34051],{"class":152},[142,37645,198],{"class":148},[142,37647,34447],{"class":152},[142,37649,37650],{"class":144,"line":16668},[142,37651,34452],{"class":211},[142,37653,37654],{"class":144,"line":16691},[142,37655,34457],{"class":152},[142,37657,37658],{"class":144,"line":16705},[142,37659,2428],{"emptyLinePlaceholder":69},[142,37661,37662],{"class":144,"line":16725},[142,37663,34466],{"class":211},[142,37665,37666],{"class":144,"line":16731},[142,37667,34471],{"class":211},[142,37669,37670,37672,37674,37676,37678,37680,37682],{"class":144,"line":16742},[142,37671,31266],{"class":152},[142,37673,198],{"class":148},[142,37675,31273],{"class":257},[142,37677,1732],{"class":148},[142,37679,31278],{"class":152},[142,37681,1729],{"class":148},[142,37683,34148],{"class":257},[142,37685,37686,37688,37690],{"class":144,"line":16765},[142,37687,31318],{"class":152},[142,37689,198],{"class":148},[142,37691,32318],{"class":152},[142,37693,37694],{"class":144,"line":16787},[142,37695,34500],{"class":211},[142,37697,37698],{"class":144,"line":16792},[142,37699,34505],{"class":211},[142,37701,37702,37704,37706,37708,37710,37712,37714,37716,37718,37720,37722,37724,37726,37728,37730,37732,37734,37736,37738,37740,37742,37744,37746],{"class":144,"line":16798},[142,37703,34510],{"class":152},[142,37705,198],{"class":148},[142,37707,1043],{"class":152},[142,37709,34517],{"class":257},[142,37711,531],{"class":152},[142,37713,34522],{"class":257},[142,37715,531],{"class":152},[142,37717,34527],{"class":257},[142,37719,531],{"class":152},[142,37721,34532],{"class":257},[142,37723,531],{"class":152},[142,37725,34537],{"class":257},[142,37727,531],{"class":152},[142,37729,34542],{"class":257},[142,37731,531],{"class":152},[142,37733,34547],{"class":257},[142,37735,531],{"class":152},[142,37737,34552],{"class":257},[142,37739,531],{"class":152},[142,37741,34557],{"class":257},[142,37743,531],{"class":152},[142,37745,34562],{"class":257},[142,37747,33275],{"class":152},[142,37749,37750,37752],{"class":144,"line":16812},[142,37751,34207],{"class":148},[142,37753,32913],{"class":152},[142,37755,37756],{"class":144,"line":16825},[142,37757,34575],{"class":211},[142,37759,37760,37762,37764,37766],{"class":144,"line":16830},[142,37761,3431],{"class":148},[142,37763,34582],{"class":152},[142,37765,26072],{"class":148},[142,37767,34226],{"class":152},[142,37769,37770,37772,37774],{"class":144,"line":16844},[142,37771,32639],{"class":152},[142,37773,198],{"class":148},[142,37775,32644],{"class":152},[142,37777,37778,37780,37782],{"class":144,"line":16849},[142,37779,32654],{"class":152},[142,37781,198],{"class":148},[142,37783,32659],{"class":152},[142,37785,37786],{"class":144,"line":16855},[142,37787,2428],{"emptyLinePlaceholder":69},[142,37789,37790],{"class":144,"line":16860},[142,37791,34611],{"class":211},[142,37793,37794],{"class":144,"line":16874},[142,37795,32904],{"class":152},[142,37797,37798],{"class":144,"line":16879},[142,37799,34620],{"class":211},[142,37801,37802,37804,37806],{"class":144,"line":16884},[142,37803,32689],{"class":152},[142,37805,198],{"class":148},[142,37807,32694],{"class":152},[142,37809,37810],{"class":144,"line":16898},[142,37811,34633],{"class":211},[142,37813,37814,37816,37818,37820,37822,37824,37826],{"class":144,"line":16910},[142,37815,32706],{"class":152},[142,37817,198],{"class":148},[142,37819,32711],{"class":152},[142,37821,32714],{"class":5245},[142,37823,198],{"class":148},[142,37825,370],{"class":201},[142,37827,159],{"class":152},[142,37829,37830],{"class":144,"line":16915},[142,37831,34654],{"class":211},[142,37833,37834,37836,37838],{"class":144,"line":16928},[142,37835,34659],{"class":152},[142,37837,198],{"class":148},[142,37839,34664],{"class":152},[142,37841,37842,37844,37846],{"class":144,"line":16933},[142,37843,34669],{"class":152},[142,37845,198],{"class":148},[142,37847,34674],{"class":152},[142,37849,37850,37852,37854,37856,37858,37860,37862,37864],{"class":144,"line":16938},[142,37851,34679],{"class":201},[142,37853,153],{"class":152},[142,37855,34684],{"class":257},[142,37857,34687],{"class":152},[142,37859,34690],{"class":257},[142,37861,531],{"class":152},[142,37863,34695],{"class":257},[142,37865,34698],{"class":152},[113,37867,37869],{"id":37868},"_22vgg","2.2.VGG",[22027,37871,37873],{"id":37872},"_221原理","2.2.1.原理",[14,37875,37876],{},[29,37877],{"alt":31,"src":37878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,37880,37881],{},[29,37882],{"alt":31,"src":37883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,37885,37886],{},[29,37887],{"alt":31,"src":37888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,37890,37891],{},"参数详细描述：",[14,37893,37894],{},[29,37895],{"alt":31,"src":37896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,37898,37899],{},[29,37900],{"alt":31,"src":37901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,37903,37904],{},[29,37905],{"alt":31,"src":37906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,37908,37909],{},[29,37910],{"alt":31,"src":37911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[14,37913,37914],{},[29,37915],{"alt":31,"src":37916},"\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",[22027,37918,37920],{"id":37919},"_222代码实现","2.2.2.代码实现",[96,37922,37923],{},[99,37924,37925],{},"网络搭建",[133,37927,37929],{"className":30407,"code":37928,"language":30409,"meta":31,"style":31},"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",[139,37930,37931,37937,37949,37959,37969,37973,37990,37998,38017,38022,38027,38039,38077,38082,38118,38122,38151,38156,38161,38172,38208,38212,38248,38252,38280,38284,38289,38300,38336,38340,38376,38380,38416,38420,38448,38452,38457,38468,38505,38509,38545,38549,38585,38589,38617,38621,38626,38637,38673,38677,38713,38717,38753,38757,38785,38789,38794,38805,38810,38815,38820,38841,38845,38857,38861,38873,38877,38881,38886,38891,38906,38911,38921,38926,38941,38946,38965,38970,38979,38984,38994,38999,39004,39018,39023,39037,39045,39049,39053,39061,39072,39083,39094,39105,39116,39127,39133,39137,39142,39155,39175,39181,39190],{"__ignoreMap":31},[142,37932,37933,37935],{"class":144,"line":145},[142,37934,30421],{"class":148},[142,37936,30424],{"class":152},[142,37938,37939,37941,37944,37946],{"class":144,"line":64},[142,37940,30766],{"class":148},[142,37942,37943],{"class":152}," sympy.core.sympify ",[142,37945,30421],{"class":148},[142,37947,37948],{"class":152}," kernS\n",[142,37950,37951,37953,37955,37957],{"class":144,"line":1208},[142,37952,30766],{"class":148},[142,37954,30769],{"class":152},[142,37956,30421],{"class":148},[142,37958,30774],{"class":152},[142,37960,37961,37963,37965,37967],{"class":144,"line":1223},[142,37962,30766],{"class":148},[142,37964,30786],{"class":152},[142,37966,30421],{"class":148},[142,37968,30791],{"class":152},[142,37970,37971],{"class":144,"line":1229},[142,37972,2428],{"emptyLinePlaceholder":69},[142,37974,37975,37977,37980,37982,37984,37986,37988],{"class":144,"line":1243},[142,37976,14723],{"class":148},[142,37978,37979],{"class":1991}," VGG16",[142,37981,153],{"class":152},[142,37983,30807],{"class":1991},[142,37985,711],{"class":152},[142,37987,30812],{"class":1991},[142,37989,30815],{"class":152},[142,37991,37992,37994,37996],{"class":144,"line":1249},[142,37993,30830],{"class":148},[142,37995,30833],{"class":201},[142,37997,30836],{"class":152},[142,37999,38000,38002,38004,38007,38009,38011,38013,38015],{"class":144,"line":1340},[142,38001,30846],{"class":201},[142,38003,153],{"class":152},[142,38005,38006],{"class":201},"VGG16",[142,38008,12464],{"class":152},[142,38010,30852],{"class":201},[142,38012,30855],{"class":152},[142,38014,30858],{"class":201},[142,38016,2004],{"class":152},[142,38018,38019],{"class":144,"line":1346},[142,38020,38021],{"class":211},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[142,38023,38024],{"class":144,"line":1358},[142,38025,38026],{"class":211},"        # 这里用的是灰度图\n",[142,38028,38029,38031,38034,38036],{"class":144,"line":1640},[142,38030,30874],{"class":201},[142,38032,38033],{"class":152},".block1",[142,38035,198],{"class":148},[142,38037,38038],{"class":152},"nn.Sequential(\n",[142,38040,38041,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066,38068,38070,38072,38074],{"class":144,"line":1645},[142,38042,38043],{"class":152},"            nn.Conv2d(",[142,38045,30885],{"class":5245},[142,38047,198],{"class":148},[142,38049,370],{"class":201},[142,38051,531],{"class":152},[142,38053,30894],{"class":5245},[142,38055,198],{"class":148},[142,38057,356],{"class":201},[142,38059,531],{"class":152},[142,38061,30903],{"class":5245},[142,38063,198],{"class":148},[142,38065,224],{"class":201},[142,38067,531],{"class":152},[142,38069,30912],{"class":5245},[142,38071,198],{"class":148},[142,38073,370],{"class":201},[142,38075,38076],{"class":152},"),\n",[142,38078,38079],{"class":144,"line":1651},[142,38080,38081],{"class":152},"            nn.ReLU(),\n",[142,38083,38084,38086,38088,38090,38092,38094,38096,38098,38100,38102,38104,38106,38108,38110,38112,38114,38116],{"class":144,"line":1656},[142,38085,38043],{"class":152},[142,38087,30885],{"class":5245},[142,38089,198],{"class":148},[142,38091,356],{"class":201},[142,38093,531],{"class":152},[142,38095,30894],{"class":5245},[142,38097,198],{"class":148},[142,38099,356],{"class":201},[142,38101,531],{"class":152},[142,38103,30903],{"class":5245},[142,38105,198],{"class":148},[142,38107,224],{"class":201},[142,38109,531],{"class":152},[142,38111,30912],{"class":5245},[142,38113,198],{"class":148},[142,38115,370],{"class":201},[142,38117,38076],{"class":152},[142,38119,38120],{"class":144,"line":1670},[142,38121,38081],{"class":152},[142,38123,38124,38127,38129,38131,38133,38135,38137,38139,38141,38143,38145,38147,38149],{"class":144,"line":1675},[142,38125,38126],{"class":152},"            nn.MaxPool2d(",[142,38128,30903],{"class":5245},[142,38130,198],{"class":148},[142,38132,230],{"class":201},[142,38134,531],{"class":152},[142,38136,30958],{"class":5245},[142,38138,198],{"class":148},[142,38140,230],{"class":201},[142,38142,531],{"class":152},[142,38144,30912],{"class":5245},[142,38146,198],{"class":148},[142,38148,344],{"class":201},[142,38150,159],{"class":152},[142,38152,38153],{"class":144,"line":1681},[142,38154,38155],{"class":152},"        )\n",[142,38157,38158],{"class":144,"line":1702},[142,38159,38160],{"class":211},"        # 第二层\n",[142,38162,38163,38165,38168,38170],{"class":144,"line":1707},[142,38164,30874],{"class":201},[142,38166,38167],{"class":152},".block2",[142,38169,198],{"class":148},[142,38171,38038],{"class":152},[142,38173,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196,38198,38200,38202,38204,38206],{"class":144,"line":1721},[142,38175,38043],{"class":152},[142,38177,30885],{"class":5245},[142,38179,198],{"class":148},[142,38181,356],{"class":201},[142,38183,531],{"class":152},[142,38185,30894],{"class":5245},[142,38187,198],{"class":148},[142,38189,32099],{"class":201},[142,38191,531],{"class":152},[142,38193,30903],{"class":5245},[142,38195,198],{"class":148},[142,38197,224],{"class":201},[142,38199,531],{"class":152},[142,38201,30912],{"class":5245},[142,38203,198],{"class":148},[142,38205,370],{"class":201},[142,38207,38076],{"class":152},[142,38209,38210],{"class":144,"line":1726},[142,38211,38081],{"class":152},[142,38213,38214,38216,38218,38220,38222,38224,38226,38228,38230,38232,38234,38236,38238,38240,38242,38244,38246],{"class":144,"line":1755},[142,38215,38043],{"class":152},[142,38217,30885],{"class":5245},[142,38219,198],{"class":148},[142,38221,32099],{"class":201},[142,38223,531],{"class":152},[142,38225,30894],{"class":5245},[142,38227,198],{"class":148},[142,38229,32099],{"class":201},[142,38231,531],{"class":152},[142,38233,30903],{"class":5245},[142,38235,198],{"class":148},[142,38237,224],{"class":201},[142,38239,531],{"class":152},[142,38241,30912],{"class":5245},[142,38243,198],{"class":148},[142,38245,370],{"class":201},[142,38247,38076],{"class":152},[142,38249,38250],{"class":144,"line":1760},[142,38251,38081],{"class":152},[142,38253,38254,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278],{"class":144,"line":1777},[142,38255,38126],{"class":152},[142,38257,30903],{"class":5245},[142,38259,198],{"class":148},[142,38261,230],{"class":201},[142,38263,531],{"class":152},[142,38265,30958],{"class":5245},[142,38267,198],{"class":148},[142,38269,230],{"class":201},[142,38271,531],{"class":152},[142,38273,30912],{"class":5245},[142,38275,198],{"class":148},[142,38277,344],{"class":201},[142,38279,159],{"class":152},[142,38281,38282],{"class":144,"line":1782},[142,38283,38155],{"class":152},[142,38285,38286],{"class":144,"line":1787},[142,38287,38288],{"class":211},"        # 第三层\n",[142,38290,38291,38293,38296,38298],{"class":144,"line":1792},[142,38292,30874],{"class":201},[142,38294,38295],{"class":152},".block3",[142,38297,198],{"class":148},[142,38299,38038],{"class":152},[142,38301,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324,38326,38328,38330,38332,38334],{"class":144,"line":1806},[142,38303,38043],{"class":152},[142,38305,30885],{"class":5245},[142,38307,198],{"class":148},[142,38309,32099],{"class":201},[142,38311,531],{"class":152},[142,38313,30894],{"class":5245},[142,38315,198],{"class":148},[142,38317,34899],{"class":201},[142,38319,531],{"class":152},[142,38321,30903],{"class":5245},[142,38323,198],{"class":148},[142,38325,224],{"class":201},[142,38327,531],{"class":152},[142,38329,30912],{"class":5245},[142,38331,198],{"class":148},[142,38333,370],{"class":201},[142,38335,38076],{"class":152},[142,38337,38338],{"class":144,"line":1811},[142,38339,38081],{"class":152},[142,38341,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364,38366,38368,38370,38372,38374],{"class":144,"line":2605},[142,38343,38043],{"class":152},[142,38345,30885],{"class":5245},[142,38347,198],{"class":148},[142,38349,34899],{"class":201},[142,38351,531],{"class":152},[142,38353,30894],{"class":5245},[142,38355,198],{"class":148},[142,38357,34899],{"class":201},[142,38359,531],{"class":152},[142,38361,30903],{"class":5245},[142,38363,198],{"class":148},[142,38365,224],{"class":201},[142,38367,531],{"class":152},[142,38369,30912],{"class":5245},[142,38371,198],{"class":148},[142,38373,370],{"class":201},[142,38375,38076],{"class":152},[142,38377,38378],{"class":144,"line":2619},[142,38379,38081],{"class":152},[142,38381,38382,38384,38386,38388,38390,38392,38394,38396,38398,38400,38402,38404,38406,38408,38410,38412,38414],{"class":144,"line":2627},[142,38383,38043],{"class":152},[142,38385,30885],{"class":5245},[142,38387,198],{"class":148},[142,38389,34899],{"class":201},[142,38391,531],{"class":152},[142,38393,30894],{"class":5245},[142,38395,198],{"class":148},[142,38397,34899],{"class":201},[142,38399,531],{"class":152},[142,38401,30903],{"class":5245},[142,38403,198],{"class":148},[142,38405,224],{"class":201},[142,38407,531],{"class":152},[142,38409,30912],{"class":5245},[142,38411,198],{"class":148},[142,38413,370],{"class":201},[142,38415,38076],{"class":152},[142,38417,38418],{"class":144,"line":2632},[142,38419,38081],{"class":152},[142,38421,38422,38424,38426,38428,38430,38432,38434,38436,38438,38440,38442,38444,38446],{"class":144,"line":2638},[142,38423,38126],{"class":152},[142,38425,30903],{"class":5245},[142,38427,198],{"class":148},[142,38429,230],{"class":201},[142,38431,531],{"class":152},[142,38433,30958],{"class":5245},[142,38435,198],{"class":148},[142,38437,230],{"class":201},[142,38439,531],{"class":152},[142,38441,30912],{"class":5245},[142,38443,198],{"class":148},[142,38445,344],{"class":201},[142,38447,159],{"class":152},[142,38449,38450],{"class":144,"line":2644},[142,38451,38155],{"class":152},[142,38453,38454],{"class":144,"line":2649},[142,38455,38456],{"class":211},"        # 第四层\n",[142,38458,38459,38461,38464,38466],{"class":144,"line":7977},[142,38460,30874],{"class":201},[142,38462,38463],{"class":152},".block4",[142,38465,198],{"class":148},[142,38467,38038],{"class":152},[142,38469,38470,38472,38474,38476,38478,38480,38482,38484,38487,38489,38491,38493,38495,38497,38499,38501,38503],{"class":144,"line":8001},[142,38471,38043],{"class":152},[142,38473,30885],{"class":5245},[142,38475,198],{"class":148},[142,38477,34899],{"class":201},[142,38479,531],{"class":152},[142,38481,30894],{"class":5245},[142,38483,198],{"class":148},[142,38485,38486],{"class":201},"512",[142,38488,531],{"class":152},[142,38490,30903],{"class":5245},[142,38492,198],{"class":148},[142,38494,224],{"class":201},[142,38496,531],{"class":152},[142,38498,30912],{"class":5245},[142,38500,198],{"class":148},[142,38502,370],{"class":201},[142,38504,38076],{"class":152},[142,38506,38507],{"class":144,"line":8006},[142,38508,38081],{"class":152},[142,38510,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543],{"class":144,"line":8012},[142,38512,38043],{"class":152},[142,38514,30885],{"class":5245},[142,38516,198],{"class":148},[142,38518,38486],{"class":201},[142,38520,531],{"class":152},[142,38522,30894],{"class":5245},[142,38524,198],{"class":148},[142,38526,38486],{"class":201},[142,38528,531],{"class":152},[142,38530,30903],{"class":5245},[142,38532,198],{"class":148},[142,38534,224],{"class":201},[142,38536,531],{"class":152},[142,38538,30912],{"class":5245},[142,38540,198],{"class":148},[142,38542,370],{"class":201},[142,38544,38076],{"class":152},[142,38546,38547],{"class":144,"line":8039},[142,38548,38081],{"class":152},[142,38550,38551,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575,38577,38579,38581,38583],{"class":144,"line":8044},[142,38552,38043],{"class":152},[142,38554,30885],{"class":5245},[142,38556,198],{"class":148},[142,38558,38486],{"class":201},[142,38560,531],{"class":152},[142,38562,30894],{"class":5245},[142,38564,198],{"class":148},[142,38566,38486],{"class":201},[142,38568,531],{"class":152},[142,38570,30903],{"class":5245},[142,38572,198],{"class":148},[142,38574,224],{"class":201},[142,38576,531],{"class":152},[142,38578,30912],{"class":5245},[142,38580,198],{"class":148},[142,38582,370],{"class":201},[142,38584,38076],{"class":152},[142,38586,38587],{"class":144,"line":8050},[142,38588,38081],{"class":152},[142,38590,38591,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615],{"class":144,"line":8062},[142,38592,38126],{"class":152},[142,38594,30903],{"class":5245},[142,38596,198],{"class":148},[142,38598,230],{"class":201},[142,38600,531],{"class":152},[142,38602,30958],{"class":5245},[142,38604,198],{"class":148},[142,38606,230],{"class":201},[142,38608,531],{"class":152},[142,38610,30912],{"class":5245},[142,38612,198],{"class":148},[142,38614,344],{"class":201},[142,38616,159],{"class":152},[142,38618,38619],{"class":144,"line":8074},[142,38620,38155],{"class":152},[142,38622,38623],{"class":144,"line":8086},[142,38624,38625],{"class":211},"        # 第五层\n",[142,38627,38628,38630,38633,38635],{"class":144,"line":9745},[142,38629,30874],{"class":201},[142,38631,38632],{"class":152},".block5",[142,38634,198],{"class":148},[142,38636,38038],{"class":152},[142,38638,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671],{"class":144,"line":9770},[142,38640,38043],{"class":152},[142,38642,30885],{"class":5245},[142,38644,198],{"class":148},[142,38646,38486],{"class":201},[142,38648,531],{"class":152},[142,38650,30894],{"class":5245},[142,38652,198],{"class":148},[142,38654,38486],{"class":201},[142,38656,531],{"class":152},[142,38658,30903],{"class":5245},[142,38660,198],{"class":148},[142,38662,224],{"class":201},[142,38664,531],{"class":152},[142,38666,30912],{"class":5245},[142,38668,198],{"class":148},[142,38670,370],{"class":201},[142,38672,38076],{"class":152},[142,38674,38675],{"class":144,"line":9793},[142,38676,38081],{"class":152},[142,38678,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701,38703,38705,38707,38709,38711],{"class":144,"line":9817},[142,38680,38043],{"class":152},[142,38682,30885],{"class":5245},[142,38684,198],{"class":148},[142,38686,38486],{"class":201},[142,38688,531],{"class":152},[142,38690,30894],{"class":5245},[142,38692,198],{"class":148},[142,38694,38486],{"class":201},[142,38696,531],{"class":152},[142,38698,30903],{"class":5245},[142,38700,198],{"class":148},[142,38702,224],{"class":201},[142,38704,531],{"class":152},[142,38706,30912],{"class":5245},[142,38708,198],{"class":148},[142,38710,370],{"class":201},[142,38712,38076],{"class":152},[142,38714,38715],{"class":144,"line":9822},[142,38716,38081],{"class":152},[142,38718,38719,38721,38723,38725,38727,38729,38731,38733,38735,38737,38739,38741,38743,38745,38747,38749,38751],{"class":144,"line":9827},[142,38720,38043],{"class":152},[142,38722,30885],{"class":5245},[142,38724,198],{"class":148},[142,38726,38486],{"class":201},[142,38728,531],{"class":152},[142,38730,30894],{"class":5245},[142,38732,198],{"class":148},[142,38734,38486],{"class":201},[142,38736,531],{"class":152},[142,38738,30903],{"class":5245},[142,38740,198],{"class":148},[142,38742,224],{"class":201},[142,38744,531],{"class":152},[142,38746,30912],{"class":5245},[142,38748,198],{"class":148},[142,38750,370],{"class":201},[142,38752,38076],{"class":152},[142,38754,38755],{"class":144,"line":9832},[142,38756,38081],{"class":152},[142,38758,38759,38761,38763,38765,38767,38769,38771,38773,38775,38777,38779,38781,38783],{"class":144,"line":9841},[142,38760,38126],{"class":152},[142,38762,30903],{"class":5245},[142,38764,198],{"class":148},[142,38766,230],{"class":201},[142,38768,531],{"class":152},[142,38770,30958],{"class":5245},[142,38772,198],{"class":148},[142,38774,230],{"class":201},[142,38776,531],{"class":152},[142,38778,30912],{"class":5245},[142,38780,198],{"class":148},[142,38782,344],{"class":201},[142,38784,159],{"class":152},[142,38786,38787],{"class":144,"line":9846},[142,38788,38155],{"class":152},[142,38790,38791],{"class":144,"line":9852},[142,38792,38793],{"class":211},"        # 全连接层\n",[142,38795,38796,38798,38801,38803],{"class":144,"line":9873},[142,38797,30874],{"class":201},[142,38799,38800],{"class":152},".block6",[142,38802,198],{"class":148},[142,38804,38038],{"class":152},[142,38806,38807],{"class":144,"line":9879},[142,38808,38809],{"class":211},"            # 平展操作\n",[142,38811,38812],{"class":144,"line":9893},[142,38813,38814],{"class":211},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[142,38816,38817],{"class":144,"line":9899},[142,38818,38819],{"class":152},"            nn.Flatten(),\n",[142,38821,38822,38825,38827,38829,38831,38833,38835,38837,38839],{"class":144,"line":9926},[142,38823,38824],{"class":152},"            nn.Linear(",[142,38826,522],{"class":201},[142,38828,608],{"class":148},[142,38830,522],{"class":201},[142,38832,608],{"class":148},[142,38834,38486],{"class":201},[142,38836,531],{"class":152},[142,38838,34899],{"class":201},[142,38840,38076],{"class":152},[142,38842,38843],{"class":144,"line":9935},[142,38844,38081],{"class":152},[142,38846,38847,38849,38851,38853,38855],{"class":144,"line":9941},[142,38848,38824],{"class":152},[142,38850,34899],{"class":201},[142,38852,531],{"class":152},[142,38854,32099],{"class":201},[142,38856,38076],{"class":152},[142,38858,38859],{"class":144,"line":9949},[142,38860,38081],{"class":152},[142,38862,38863,38865,38867,38869,38871],{"class":144,"line":9954},[142,38864,38824],{"class":152},[142,38866,32099],{"class":201},[142,38868,531],{"class":152},[142,38870,599],{"class":201},[142,38872,159],{"class":152},[142,38874,38875],{"class":144,"line":16633},[142,38876,38155],{"class":152},[142,38878,38879],{"class":144,"line":16639},[142,38880,2428],{"emptyLinePlaceholder":69},[142,38882,38883],{"class":144,"line":16662},[142,38884,38885],{"class":211},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[142,38887,38888],{"class":144,"line":16668},[142,38889,38890],{"class":211},"        # 循环遍历模型\n",[142,38892,38893,38895,38898,38900,38903],{"class":144,"line":16691},[142,38894,3431],{"class":148},[142,38896,38897],{"class":152}," m ",[142,38899,26072],{"class":148},[142,38901,38902],{"class":201}," self",[142,38904,38905],{"class":152},".modules():\n",[142,38907,38908],{"class":144,"line":16705},[142,38909,38910],{"class":211},"            # print(m)\n",[142,38912,38913,38915,38918],{"class":144,"line":16725},[142,38914,4670],{"class":148},[142,38916,38917],{"class":201}," isinstance",[142,38919,38920],{"class":152},"(m,nn.Conv2d):\n",[142,38922,38923],{"class":144,"line":16731},[142,38924,38925],{"class":211},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[142,38927,38928,38931,38934,38936,38939],{"class":144,"line":16742},[142,38929,38930],{"class":152},"                nn.init.kaiming_normal_(m.weight,",[142,38932,38933],{"class":5245},"nonlinearity",[142,38935,198],{"class":148},[142,38937,38938],{"class":257},"'relu'",[142,38940,159],{"class":152},[142,38942,38943],{"class":144,"line":16765},[142,38944,38945],{"class":211},"                # 判断b参数是否存在\n",[142,38947,38948,38951,38954,38957,38960,38963],{"class":144,"line":16787},[142,38949,38950],{"class":148},"                if",[142,38952,38953],{"class":152}," m.bias ",[142,38955,38956],{"class":148},"is",[142,38958,38959],{"class":148}," not",[142,38961,38962],{"class":201}," None",[142,38964,3767],{"class":152},[142,38966,38967],{"class":144,"line":16792},[142,38968,38969],{"class":211},"                    # 如果参数不存在的化初始化b=0\n",[142,38971,38972,38975,38977],{"class":144,"line":16798},[142,38973,38974],{"class":152},"                    nn.init.constant_(m.bias,",[142,38976,344],{"class":201},[142,38978,159],{"class":152},[142,38980,38981],{"class":144,"line":16812},[142,38982,38983],{"class":211},"            # 全连接层初始化\n",[142,38985,38986,38989,38991],{"class":144,"line":16825},[142,38987,38988],{"class":148},"            elif",[142,38990,38917],{"class":201},[142,38992,38993],{"class":152},"(m,nn.Linear):\n",[142,38995,38996],{"class":144,"line":16830},[142,38997,38998],{"class":211},"                # 这个初始化方法是利用的是正太分布的方式\n",[142,39000,39001],{"class":144,"line":16844},[142,39002,39003],{"class":211},"                # 均值为0，方差为0.01\n",[142,39005,39006,39009,39011,39013,39016],{"class":144,"line":16849},[142,39007,39008],{"class":152},"                nn.init.normal_(m.weight,",[142,39010,344],{"class":201},[142,39012,531],{"class":152},[142,39014,39015],{"class":201},"0.01",[142,39017,159],{"class":152},[142,39019,39020],{"class":144,"line":16855},[142,39021,39022],{"class":211},"                # 初始化b参数\n",[142,39024,39025,39027,39029,39031,39033,39035],{"class":144,"line":16860},[142,39026,38950],{"class":148},[142,39028,38953],{"class":152},[142,39030,38956],{"class":148},[142,39032,38959],{"class":148},[142,39034,38962],{"class":201},[142,39036,3767],{"class":152},[142,39038,39039,39041,39043],{"class":144,"line":16874},[142,39040,38974],{"class":152},[142,39042,344],{"class":201},[142,39044,159],{"class":152},[142,39046,39047],{"class":144,"line":16879},[142,39048,2428],{"emptyLinePlaceholder":69},[142,39050,39051],{"class":144,"line":16884},[142,39052,35194],{"class":211},[142,39054,39055,39057,39059],{"class":144,"line":16898},[142,39056,30830],{"class":148},[142,39058,31122],{"class":1991},[142,39060,31125],{"class":152},[142,39062,39063,39065,39067,39069],{"class":144,"line":16910},[142,39064,31130],{"class":152},[142,39066,198],{"class":148},[142,39068,30852],{"class":201},[142,39070,39071],{"class":152},".block1(x)\n",[142,39073,39074,39076,39078,39080],{"class":144,"line":16915},[142,39075,31130],{"class":152},[142,39077,198],{"class":148},[142,39079,30852],{"class":201},[142,39081,39082],{"class":152},".block2(x)\n",[142,39084,39085,39087,39089,39091],{"class":144,"line":16928},[142,39086,31130],{"class":152},[142,39088,198],{"class":148},[142,39090,30852],{"class":201},[142,39092,39093],{"class":152},".block3(x)\n",[142,39095,39096,39098,39100,39102],{"class":144,"line":16933},[142,39097,31130],{"class":152},[142,39099,198],{"class":148},[142,39101,30852],{"class":201},[142,39103,39104],{"class":152},".block4(x)\n",[142,39106,39107,39109,39111,39113],{"class":144,"line":16938},[142,39108,31130],{"class":152},[142,39110,198],{"class":148},[142,39112,30852],{"class":201},[142,39114,39115],{"class":152},".block5(x)\n",[142,39117,39118,39120,39122,39124],{"class":144,"line":16943},[142,39119,31130],{"class":152},[142,39121,198],{"class":148},[142,39123,30852],{"class":201},[142,39125,39126],{"class":152},".block6(x)\n",[142,39128,39129,39131],{"class":144,"line":16956},[142,39130,14781],{"class":148},[142,39132,31238],{"class":152},[142,39134,39135],{"class":144,"line":16961},[142,39136,2428],{"emptyLinePlaceholder":69},[142,39138,39139],{"class":144,"line":32662},[142,39140,39141],{"class":211},"# 验证模型\n",[142,39143,39144,39146,39148,39150,39153],{"class":144,"line":32668},[142,39145,1559],{"class":148},[142,39147,31249],{"class":201},[142,39149,2977],{"class":148},[142,39151,39152],{"class":257},"'__main__'",[142,39154,3767],{"class":152},[142,39156,39157,39159,39161,39163,39165,39167,39169,39171,39173],{"class":144,"line":32674},[142,39158,31266],{"class":152},[142,39160,198],{"class":148},[142,39162,30480],{"class":152},[142,39164,31273],{"class":257},[142,39166,1732],{"class":148},[142,39168,31278],{"class":152},[142,39170,1729],{"class":148},[142,39172,30505],{"class":257},[142,39174,159],{"class":152},[142,39176,39177,39179],{"class":144,"line":32680},[142,39178,31328],{"class":201},[142,39180,30514],{"class":152},[142,39182,39183,39185,39187],{"class":144,"line":32686},[142,39184,31318],{"class":152},[142,39186,198],{"class":148},[142,39188,39189],{"class":152},"VGG16().to(device)\n",[142,39191,39192,39194,39196,39198,39200,39202,39204,39206],{"class":144,"line":32697},[142,39193,31328],{"class":201},[142,39195,31331],{"class":152},[142,39197,370],{"class":201},[142,39199,531],{"class":152},[142,39201,31530],{"class":201},[142,39203,531],{"class":152},[142,39205,31530],{"class":201},[142,39207,31344],{"class":152},[96,39209,39210],{"start":64},[99,39211,39212],{},"训练代码",[14,39214,39215],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39217,39218],{},"解决方式:",[14,39220,39221],{},"①权重初始化",[133,39223,39225],{"className":30407,"code":39224,"language":30409,"meta":31,"style":31},"# 权重初始化,保证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",[139,39226,39227,39232,39237,39249,39254,39262,39267,39280,39285,39299,39304,39313,39318,39327,39332,39337,39350,39355,39369],{"__ignoreMap":31},[142,39228,39229],{"class":144,"line":145},[142,39230,39231],{"class":211},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[142,39233,39234],{"class":144,"line":64},[142,39235,39236],{"class":211},"# 循环遍历模型\n",[142,39238,39239,39241,39243,39245,39247],{"class":144,"line":1208},[142,39240,3053],{"class":148},[142,39242,38897],{"class":152},[142,39244,26072],{"class":148},[142,39246,38902],{"class":201},[142,39248,38905],{"class":152},[142,39250,39251],{"class":144,"line":1223},[142,39252,39253],{"class":211},"    # print(m)\n",[142,39255,39256,39258,39260],{"class":144,"line":1229},[142,39257,3129],{"class":148},[142,39259,38917],{"class":201},[142,39261,38920],{"class":152},[142,39263,39264],{"class":144,"line":1243},[142,39265,39266],{"class":211},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[142,39268,39269,39272,39274,39276,39278],{"class":144,"line":1249},[142,39270,39271],{"class":152},"        nn.init.kaiming_normal_(m.weight,",[142,39273,38933],{"class":5245},[142,39275,198],{"class":148},[142,39277,38938],{"class":257},[142,39279,159],{"class":152},[142,39281,39282],{"class":144,"line":1340},[142,39283,39284],{"class":211},"        # 判断b参数是否存在\n",[142,39286,39287,39289,39291,39293,39295,39297],{"class":144,"line":1346},[142,39288,2525],{"class":148},[142,39290,38953],{"class":152},[142,39292,38956],{"class":148},[142,39294,38959],{"class":148},[142,39296,38962],{"class":201},[142,39298,3767],{"class":152},[142,39300,39301],{"class":144,"line":1358},[142,39302,39303],{"class":211},"            # 如果参数不存在的化初始化b=0\n",[142,39305,39306,39309,39311],{"class":144,"line":1640},[142,39307,39308],{"class":152},"            nn.init.constant_(m.bias,",[142,39310,344],{"class":201},[142,39312,159],{"class":152},[142,39314,39315],{"class":144,"line":1645},[142,39316,39317],{"class":211},"    # 全连接层初始化\n",[142,39319,39320,39323,39325],{"class":144,"line":1651},[142,39321,39322],{"class":148},"    elif",[142,39324,38917],{"class":201},[142,39326,38993],{"class":152},[142,39328,39329],{"class":144,"line":1656},[142,39330,39331],{"class":211},"        # 这个初始化方法是利用的是正太分布的方式\n",[142,39333,39334],{"class":144,"line":1670},[142,39335,39336],{"class":211},"        # 均值为0，方差为0.01\n",[142,39338,39339,39342,39344,39346,39348],{"class":144,"line":1675},[142,39340,39341],{"class":152},"        nn.init.normal_(m.weight,",[142,39343,344],{"class":201},[142,39345,531],{"class":152},[142,39347,39015],{"class":201},[142,39349,159],{"class":152},[142,39351,39352],{"class":144,"line":1681},[142,39353,39354],{"class":211},"        # 初始化b参数\n",[142,39356,39357,39359,39361,39363,39365,39367],{"class":144,"line":1702},[142,39358,2525],{"class":148},[142,39360,38953],{"class":152},[142,39362,38956],{"class":148},[142,39364,38959],{"class":148},[142,39366,38962],{"class":201},[142,39368,3767],{"class":152},[142,39370,39371,39373,39375],{"class":144,"line":1707},[142,39372,39308],{"class":152},[142,39374,344],{"class":201},[142,39376,159],{"class":152},[14,39378,39379],{},"②尽可能地增加批次",[14,39381,39382],{},"训练完整代码：",[133,39384,39385],{"className":30407,"code":37928,"language":30409,"meta":31,"style":31},[139,39386,39387,39393,39403,39413,39423,39427,39443,39451,39469,39473,39477,39487,39523,39527,39563,39567,39595,39599,39603,39613,39649,39653,39689,39693,39721,39725,39729,39739,39775,39779,39815,39819,39855,39859,39887,39891,39895,39905,39941,39945,39981,39985,40021,40025,40053,40057,40061,40071,40107,40111,40147,40151,40187,40191,40219,40223,40227,40237,40241,40245,40249,40269,40273,40285,40289,40301,40305,40309,40313,40317,40329,40333,40341,40345,40357,40361,40375,40379,40387,40391,40399,40403,40407,40419,40423,40437,40445,40449,40453,40461,40471,40481,40491,40501,40511,40521,40527,40531,40535,40547,40567,40573,40581],{"__ignoreMap":31},[142,39388,39389,39391],{"class":144,"line":145},[142,39390,30421],{"class":148},[142,39392,30424],{"class":152},[142,39394,39395,39397,39399,39401],{"class":144,"line":64},[142,39396,30766],{"class":148},[142,39398,37943],{"class":152},[142,39400,30421],{"class":148},[142,39402,37948],{"class":152},[142,39404,39405,39407,39409,39411],{"class":144,"line":1208},[142,39406,30766],{"class":148},[142,39408,30769],{"class":152},[142,39410,30421],{"class":148},[142,39412,30774],{"class":152},[142,39414,39415,39417,39419,39421],{"class":144,"line":1223},[142,39416,30766],{"class":148},[142,39418,30786],{"class":152},[142,39420,30421],{"class":148},[142,39422,30791],{"class":152},[142,39424,39425],{"class":144,"line":1229},[142,39426,2428],{"emptyLinePlaceholder":69},[142,39428,39429,39431,39433,39435,39437,39439,39441],{"class":144,"line":1243},[142,39430,14723],{"class":148},[142,39432,37979],{"class":1991},[142,39434,153],{"class":152},[142,39436,30807],{"class":1991},[142,39438,711],{"class":152},[142,39440,30812],{"class":1991},[142,39442,30815],{"class":152},[142,39444,39445,39447,39449],{"class":144,"line":1249},[142,39446,30830],{"class":148},[142,39448,30833],{"class":201},[142,39450,30836],{"class":152},[142,39452,39453,39455,39457,39459,39461,39463,39465,39467],{"class":144,"line":1340},[142,39454,30846],{"class":201},[142,39456,153],{"class":152},[142,39458,38006],{"class":201},[142,39460,12464],{"class":152},[142,39462,30852],{"class":201},[142,39464,30855],{"class":152},[142,39466,30858],{"class":201},[142,39468,2004],{"class":152},[142,39470,39471],{"class":144,"line":1346},[142,39472,38021],{"class":211},[142,39474,39475],{"class":144,"line":1358},[142,39476,38026],{"class":211},[142,39478,39479,39481,39483,39485],{"class":144,"line":1640},[142,39480,30874],{"class":201},[142,39482,38033],{"class":152},[142,39484,198],{"class":148},[142,39486,38038],{"class":152},[142,39488,39489,39491,39493,39495,39497,39499,39501,39503,39505,39507,39509,39511,39513,39515,39517,39519,39521],{"class":144,"line":1645},[142,39490,38043],{"class":152},[142,39492,30885],{"class":5245},[142,39494,198],{"class":148},[142,39496,370],{"class":201},[142,39498,531],{"class":152},[142,39500,30894],{"class":5245},[142,39502,198],{"class":148},[142,39504,356],{"class":201},[142,39506,531],{"class":152},[142,39508,30903],{"class":5245},[142,39510,198],{"class":148},[142,39512,224],{"class":201},[142,39514,531],{"class":152},[142,39516,30912],{"class":5245},[142,39518,198],{"class":148},[142,39520,370],{"class":201},[142,39522,38076],{"class":152},[142,39524,39525],{"class":144,"line":1651},[142,39526,38081],{"class":152},[142,39528,39529,39531,39533,39535,39537,39539,39541,39543,39545,39547,39549,39551,39553,39555,39557,39559,39561],{"class":144,"line":1656},[142,39530,38043],{"class":152},[142,39532,30885],{"class":5245},[142,39534,198],{"class":148},[142,39536,356],{"class":201},[142,39538,531],{"class":152},[142,39540,30894],{"class":5245},[142,39542,198],{"class":148},[142,39544,356],{"class":201},[142,39546,531],{"class":152},[142,39548,30903],{"class":5245},[142,39550,198],{"class":148},[142,39552,224],{"class":201},[142,39554,531],{"class":152},[142,39556,30912],{"class":5245},[142,39558,198],{"class":148},[142,39560,370],{"class":201},[142,39562,38076],{"class":152},[142,39564,39565],{"class":144,"line":1670},[142,39566,38081],{"class":152},[142,39568,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593],{"class":144,"line":1675},[142,39570,38126],{"class":152},[142,39572,30903],{"class":5245},[142,39574,198],{"class":148},[142,39576,230],{"class":201},[142,39578,531],{"class":152},[142,39580,30958],{"class":5245},[142,39582,198],{"class":148},[142,39584,230],{"class":201},[142,39586,531],{"class":152},[142,39588,30912],{"class":5245},[142,39590,198],{"class":148},[142,39592,344],{"class":201},[142,39594,159],{"class":152},[142,39596,39597],{"class":144,"line":1681},[142,39598,38155],{"class":152},[142,39600,39601],{"class":144,"line":1702},[142,39602,38160],{"class":211},[142,39604,39605,39607,39609,39611],{"class":144,"line":1707},[142,39606,30874],{"class":201},[142,39608,38167],{"class":152},[142,39610,198],{"class":148},[142,39612,38038],{"class":152},[142,39614,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647],{"class":144,"line":1721},[142,39616,38043],{"class":152},[142,39618,30885],{"class":5245},[142,39620,198],{"class":148},[142,39622,356],{"class":201},[142,39624,531],{"class":152},[142,39626,30894],{"class":5245},[142,39628,198],{"class":148},[142,39630,32099],{"class":201},[142,39632,531],{"class":152},[142,39634,30903],{"class":5245},[142,39636,198],{"class":148},[142,39638,224],{"class":201},[142,39640,531],{"class":152},[142,39642,30912],{"class":5245},[142,39644,198],{"class":148},[142,39646,370],{"class":201},[142,39648,38076],{"class":152},[142,39650,39651],{"class":144,"line":1726},[142,39652,38081],{"class":152},[142,39654,39655,39657,39659,39661,39663,39665,39667,39669,39671,39673,39675,39677,39679,39681,39683,39685,39687],{"class":144,"line":1755},[142,39656,38043],{"class":152},[142,39658,30885],{"class":5245},[142,39660,198],{"class":148},[142,39662,32099],{"class":201},[142,39664,531],{"class":152},[142,39666,30894],{"class":5245},[142,39668,198],{"class":148},[142,39670,32099],{"class":201},[142,39672,531],{"class":152},[142,39674,30903],{"class":5245},[142,39676,198],{"class":148},[142,39678,224],{"class":201},[142,39680,531],{"class":152},[142,39682,30912],{"class":5245},[142,39684,198],{"class":148},[142,39686,370],{"class":201},[142,39688,38076],{"class":152},[142,39690,39691],{"class":144,"line":1760},[142,39692,38081],{"class":152},[142,39694,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719],{"class":144,"line":1777},[142,39696,38126],{"class":152},[142,39698,30903],{"class":5245},[142,39700,198],{"class":148},[142,39702,230],{"class":201},[142,39704,531],{"class":152},[142,39706,30958],{"class":5245},[142,39708,198],{"class":148},[142,39710,230],{"class":201},[142,39712,531],{"class":152},[142,39714,30912],{"class":5245},[142,39716,198],{"class":148},[142,39718,344],{"class":201},[142,39720,159],{"class":152},[142,39722,39723],{"class":144,"line":1782},[142,39724,38155],{"class":152},[142,39726,39727],{"class":144,"line":1787},[142,39728,38288],{"class":211},[142,39730,39731,39733,39735,39737],{"class":144,"line":1792},[142,39732,30874],{"class":201},[142,39734,38295],{"class":152},[142,39736,198],{"class":148},[142,39738,38038],{"class":152},[142,39740,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763,39765,39767,39769,39771,39773],{"class":144,"line":1806},[142,39742,38043],{"class":152},[142,39744,30885],{"class":5245},[142,39746,198],{"class":148},[142,39748,32099],{"class":201},[142,39750,531],{"class":152},[142,39752,30894],{"class":5245},[142,39754,198],{"class":148},[142,39756,34899],{"class":201},[142,39758,531],{"class":152},[142,39760,30903],{"class":5245},[142,39762,198],{"class":148},[142,39764,224],{"class":201},[142,39766,531],{"class":152},[142,39768,30912],{"class":5245},[142,39770,198],{"class":148},[142,39772,370],{"class":201},[142,39774,38076],{"class":152},[142,39776,39777],{"class":144,"line":1811},[142,39778,38081],{"class":152},[142,39780,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803,39805,39807,39809,39811,39813],{"class":144,"line":2605},[142,39782,38043],{"class":152},[142,39784,30885],{"class":5245},[142,39786,198],{"class":148},[142,39788,34899],{"class":201},[142,39790,531],{"class":152},[142,39792,30894],{"class":5245},[142,39794,198],{"class":148},[142,39796,34899],{"class":201},[142,39798,531],{"class":152},[142,39800,30903],{"class":5245},[142,39802,198],{"class":148},[142,39804,224],{"class":201},[142,39806,531],{"class":152},[142,39808,30912],{"class":5245},[142,39810,198],{"class":148},[142,39812,370],{"class":201},[142,39814,38076],{"class":152},[142,39816,39817],{"class":144,"line":2619},[142,39818,38081],{"class":152},[142,39820,39821,39823,39825,39827,39829,39831,39833,39835,39837,39839,39841,39843,39845,39847,39849,39851,39853],{"class":144,"line":2627},[142,39822,38043],{"class":152},[142,39824,30885],{"class":5245},[142,39826,198],{"class":148},[142,39828,34899],{"class":201},[142,39830,531],{"class":152},[142,39832,30894],{"class":5245},[142,39834,198],{"class":148},[142,39836,34899],{"class":201},[142,39838,531],{"class":152},[142,39840,30903],{"class":5245},[142,39842,198],{"class":148},[142,39844,224],{"class":201},[142,39846,531],{"class":152},[142,39848,30912],{"class":5245},[142,39850,198],{"class":148},[142,39852,370],{"class":201},[142,39854,38076],{"class":152},[142,39856,39857],{"class":144,"line":2632},[142,39858,38081],{"class":152},[142,39860,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885],{"class":144,"line":2638},[142,39862,38126],{"class":152},[142,39864,30903],{"class":5245},[142,39866,198],{"class":148},[142,39868,230],{"class":201},[142,39870,531],{"class":152},[142,39872,30958],{"class":5245},[142,39874,198],{"class":148},[142,39876,230],{"class":201},[142,39878,531],{"class":152},[142,39880,30912],{"class":5245},[142,39882,198],{"class":148},[142,39884,344],{"class":201},[142,39886,159],{"class":152},[142,39888,39889],{"class":144,"line":2644},[142,39890,38155],{"class":152},[142,39892,39893],{"class":144,"line":2649},[142,39894,38456],{"class":211},[142,39896,39897,39899,39901,39903],{"class":144,"line":7977},[142,39898,30874],{"class":201},[142,39900,38463],{"class":152},[142,39902,198],{"class":148},[142,39904,38038],{"class":152},[142,39906,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929,39931,39933,39935,39937,39939],{"class":144,"line":8001},[142,39908,38043],{"class":152},[142,39910,30885],{"class":5245},[142,39912,198],{"class":148},[142,39914,34899],{"class":201},[142,39916,531],{"class":152},[142,39918,30894],{"class":5245},[142,39920,198],{"class":148},[142,39922,38486],{"class":201},[142,39924,531],{"class":152},[142,39926,30903],{"class":5245},[142,39928,198],{"class":148},[142,39930,224],{"class":201},[142,39932,531],{"class":152},[142,39934,30912],{"class":5245},[142,39936,198],{"class":148},[142,39938,370],{"class":201},[142,39940,38076],{"class":152},[142,39942,39943],{"class":144,"line":8006},[142,39944,38081],{"class":152},[142,39946,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979],{"class":144,"line":8012},[142,39948,38043],{"class":152},[142,39950,30885],{"class":5245},[142,39952,198],{"class":148},[142,39954,38486],{"class":201},[142,39956,531],{"class":152},[142,39958,30894],{"class":5245},[142,39960,198],{"class":148},[142,39962,38486],{"class":201},[142,39964,531],{"class":152},[142,39966,30903],{"class":5245},[142,39968,198],{"class":148},[142,39970,224],{"class":201},[142,39972,531],{"class":152},[142,39974,30912],{"class":5245},[142,39976,198],{"class":148},[142,39978,370],{"class":201},[142,39980,38076],{"class":152},[142,39982,39983],{"class":144,"line":8039},[142,39984,38081],{"class":152},[142,39986,39987,39989,39991,39993,39995,39997,39999,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019],{"class":144,"line":8044},[142,39988,38043],{"class":152},[142,39990,30885],{"class":5245},[142,39992,198],{"class":148},[142,39994,38486],{"class":201},[142,39996,531],{"class":152},[142,39998,30894],{"class":5245},[142,40000,198],{"class":148},[142,40002,38486],{"class":201},[142,40004,531],{"class":152},[142,40006,30903],{"class":5245},[142,40008,198],{"class":148},[142,40010,224],{"class":201},[142,40012,531],{"class":152},[142,40014,30912],{"class":5245},[142,40016,198],{"class":148},[142,40018,370],{"class":201},[142,40020,38076],{"class":152},[142,40022,40023],{"class":144,"line":8050},[142,40024,38081],{"class":152},[142,40026,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051],{"class":144,"line":8062},[142,40028,38126],{"class":152},[142,40030,30903],{"class":5245},[142,40032,198],{"class":148},[142,40034,230],{"class":201},[142,40036,531],{"class":152},[142,40038,30958],{"class":5245},[142,40040,198],{"class":148},[142,40042,230],{"class":201},[142,40044,531],{"class":152},[142,40046,30912],{"class":5245},[142,40048,198],{"class":148},[142,40050,344],{"class":201},[142,40052,159],{"class":152},[142,40054,40055],{"class":144,"line":8074},[142,40056,38155],{"class":152},[142,40058,40059],{"class":144,"line":8086},[142,40060,38625],{"class":211},[142,40062,40063,40065,40067,40069],{"class":144,"line":9745},[142,40064,30874],{"class":201},[142,40066,38632],{"class":152},[142,40068,198],{"class":148},[142,40070,38038],{"class":152},[142,40072,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095,40097,40099,40101,40103,40105],{"class":144,"line":9770},[142,40074,38043],{"class":152},[142,40076,30885],{"class":5245},[142,40078,198],{"class":148},[142,40080,38486],{"class":201},[142,40082,531],{"class":152},[142,40084,30894],{"class":5245},[142,40086,198],{"class":148},[142,40088,38486],{"class":201},[142,40090,531],{"class":152},[142,40092,30903],{"class":5245},[142,40094,198],{"class":148},[142,40096,224],{"class":201},[142,40098,531],{"class":152},[142,40100,30912],{"class":5245},[142,40102,198],{"class":148},[142,40104,370],{"class":201},[142,40106,38076],{"class":152},[142,40108,40109],{"class":144,"line":9793},[142,40110,38081],{"class":152},[142,40112,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135,40137,40139,40141,40143,40145],{"class":144,"line":9817},[142,40114,38043],{"class":152},[142,40116,30885],{"class":5245},[142,40118,198],{"class":148},[142,40120,38486],{"class":201},[142,40122,531],{"class":152},[142,40124,30894],{"class":5245},[142,40126,198],{"class":148},[142,40128,38486],{"class":201},[142,40130,531],{"class":152},[142,40132,30903],{"class":5245},[142,40134,198],{"class":148},[142,40136,224],{"class":201},[142,40138,531],{"class":152},[142,40140,30912],{"class":5245},[142,40142,198],{"class":148},[142,40144,370],{"class":201},[142,40146,38076],{"class":152},[142,40148,40149],{"class":144,"line":9822},[142,40150,38081],{"class":152},[142,40152,40153,40155,40157,40159,40161,40163,40165,40167,40169,40171,40173,40175,40177,40179,40181,40183,40185],{"class":144,"line":9827},[142,40154,38043],{"class":152},[142,40156,30885],{"class":5245},[142,40158,198],{"class":148},[142,40160,38486],{"class":201},[142,40162,531],{"class":152},[142,40164,30894],{"class":5245},[142,40166,198],{"class":148},[142,40168,38486],{"class":201},[142,40170,531],{"class":152},[142,40172,30903],{"class":5245},[142,40174,198],{"class":148},[142,40176,224],{"class":201},[142,40178,531],{"class":152},[142,40180,30912],{"class":5245},[142,40182,198],{"class":148},[142,40184,370],{"class":201},[142,40186,38076],{"class":152},[142,40188,40189],{"class":144,"line":9832},[142,40190,38081],{"class":152},[142,40192,40193,40195,40197,40199,40201,40203,40205,40207,40209,40211,40213,40215,40217],{"class":144,"line":9841},[142,40194,38126],{"class":152},[142,40196,30903],{"class":5245},[142,40198,198],{"class":148},[142,40200,230],{"class":201},[142,40202,531],{"class":152},[142,40204,30958],{"class":5245},[142,40206,198],{"class":148},[142,40208,230],{"class":201},[142,40210,531],{"class":152},[142,40212,30912],{"class":5245},[142,40214,198],{"class":148},[142,40216,344],{"class":201},[142,40218,159],{"class":152},[142,40220,40221],{"class":144,"line":9846},[142,40222,38155],{"class":152},[142,40224,40225],{"class":144,"line":9852},[142,40226,38793],{"class":211},[142,40228,40229,40231,40233,40235],{"class":144,"line":9873},[142,40230,30874],{"class":201},[142,40232,38800],{"class":152},[142,40234,198],{"class":148},[142,40236,38038],{"class":152},[142,40238,40239],{"class":144,"line":9879},[142,40240,38809],{"class":211},[142,40242,40243],{"class":144,"line":9893},[142,40244,38814],{"class":211},[142,40246,40247],{"class":144,"line":9899},[142,40248,38819],{"class":152},[142,40250,40251,40253,40255,40257,40259,40261,40263,40265,40267],{"class":144,"line":9926},[142,40252,38824],{"class":152},[142,40254,522],{"class":201},[142,40256,608],{"class":148},[142,40258,522],{"class":201},[142,40260,608],{"class":148},[142,40262,38486],{"class":201},[142,40264,531],{"class":152},[142,40266,34899],{"class":201},[142,40268,38076],{"class":152},[142,40270,40271],{"class":144,"line":9935},[142,40272,38081],{"class":152},[142,40274,40275,40277,40279,40281,40283],{"class":144,"line":9941},[142,40276,38824],{"class":152},[142,40278,34899],{"class":201},[142,40280,531],{"class":152},[142,40282,32099],{"class":201},[142,40284,38076],{"class":152},[142,40286,40287],{"class":144,"line":9949},[142,40288,38081],{"class":152},[142,40290,40291,40293,40295,40297,40299],{"class":144,"line":9954},[142,40292,38824],{"class":152},[142,40294,32099],{"class":201},[142,40296,531],{"class":152},[142,40298,599],{"class":201},[142,40300,159],{"class":152},[142,40302,40303],{"class":144,"line":16633},[142,40304,38155],{"class":152},[142,40306,40307],{"class":144,"line":16639},[142,40308,2428],{"emptyLinePlaceholder":69},[142,40310,40311],{"class":144,"line":16662},[142,40312,38885],{"class":211},[142,40314,40315],{"class":144,"line":16668},[142,40316,38890],{"class":211},[142,40318,40319,40321,40323,40325,40327],{"class":144,"line":16691},[142,40320,3431],{"class":148},[142,40322,38897],{"class":152},[142,40324,26072],{"class":148},[142,40326,38902],{"class":201},[142,40328,38905],{"class":152},[142,40330,40331],{"class":144,"line":16705},[142,40332,38910],{"class":211},[142,40334,40335,40337,40339],{"class":144,"line":16725},[142,40336,4670],{"class":148},[142,40338,38917],{"class":201},[142,40340,38920],{"class":152},[142,40342,40343],{"class":144,"line":16731},[142,40344,38925],{"class":211},[142,40346,40347,40349,40351,40353,40355],{"class":144,"line":16742},[142,40348,38930],{"class":152},[142,40350,38933],{"class":5245},[142,40352,198],{"class":148},[142,40354,38938],{"class":257},[142,40356,159],{"class":152},[142,40358,40359],{"class":144,"line":16765},[142,40360,38945],{"class":211},[142,40362,40363,40365,40367,40369,40371,40373],{"class":144,"line":16787},[142,40364,38950],{"class":148},[142,40366,38953],{"class":152},[142,40368,38956],{"class":148},[142,40370,38959],{"class":148},[142,40372,38962],{"class":201},[142,40374,3767],{"class":152},[142,40376,40377],{"class":144,"line":16792},[142,40378,38969],{"class":211},[142,40380,40381,40383,40385],{"class":144,"line":16798},[142,40382,38974],{"class":152},[142,40384,344],{"class":201},[142,40386,159],{"class":152},[142,40388,40389],{"class":144,"line":16812},[142,40390,38983],{"class":211},[142,40392,40393,40395,40397],{"class":144,"line":16825},[142,40394,38988],{"class":148},[142,40396,38917],{"class":201},[142,40398,38993],{"class":152},[142,40400,40401],{"class":144,"line":16830},[142,40402,38998],{"class":211},[142,40404,40405],{"class":144,"line":16844},[142,40406,39003],{"class":211},[142,40408,40409,40411,40413,40415,40417],{"class":144,"line":16849},[142,40410,39008],{"class":152},[142,40412,344],{"class":201},[142,40414,531],{"class":152},[142,40416,39015],{"class":201},[142,40418,159],{"class":152},[142,40420,40421],{"class":144,"line":16855},[142,40422,39022],{"class":211},[142,40424,40425,40427,40429,40431,40433,40435],{"class":144,"line":16860},[142,40426,38950],{"class":148},[142,40428,38953],{"class":152},[142,40430,38956],{"class":148},[142,40432,38959],{"class":148},[142,40434,38962],{"class":201},[142,40436,3767],{"class":152},[142,40438,40439,40441,40443],{"class":144,"line":16874},[142,40440,38974],{"class":152},[142,40442,344],{"class":201},[142,40444,159],{"class":152},[142,40446,40447],{"class":144,"line":16879},[142,40448,2428],{"emptyLinePlaceholder":69},[142,40450,40451],{"class":144,"line":16884},[142,40452,35194],{"class":211},[142,40454,40455,40457,40459],{"class":144,"line":16898},[142,40456,30830],{"class":148},[142,40458,31122],{"class":1991},[142,40460,31125],{"class":152},[142,40462,40463,40465,40467,40469],{"class":144,"line":16910},[142,40464,31130],{"class":152},[142,40466,198],{"class":148},[142,40468,30852],{"class":201},[142,40470,39071],{"class":152},[142,40472,40473,40475,40477,40479],{"class":144,"line":16915},[142,40474,31130],{"class":152},[142,40476,198],{"class":148},[142,40478,30852],{"class":201},[142,40480,39082],{"class":152},[142,40482,40483,40485,40487,40489],{"class":144,"line":16928},[142,40484,31130],{"class":152},[142,40486,198],{"class":148},[142,40488,30852],{"class":201},[142,40490,39093],{"class":152},[142,40492,40493,40495,40497,40499],{"class":144,"line":16933},[142,40494,31130],{"class":152},[142,40496,198],{"class":148},[142,40498,30852],{"class":201},[142,40500,39104],{"class":152},[142,40502,40503,40505,40507,40509],{"class":144,"line":16938},[142,40504,31130],{"class":152},[142,40506,198],{"class":148},[142,40508,30852],{"class":201},[142,40510,39115],{"class":152},[142,40512,40513,40515,40517,40519],{"class":144,"line":16943},[142,40514,31130],{"class":152},[142,40516,198],{"class":148},[142,40518,30852],{"class":201},[142,40520,39126],{"class":152},[142,40522,40523,40525],{"class":144,"line":16956},[142,40524,14781],{"class":148},[142,40526,31238],{"class":152},[142,40528,40529],{"class":144,"line":16961},[142,40530,2428],{"emptyLinePlaceholder":69},[142,40532,40533],{"class":144,"line":32662},[142,40534,39141],{"class":211},[142,40536,40537,40539,40541,40543,40545],{"class":144,"line":32668},[142,40538,1559],{"class":148},[142,40540,31249],{"class":201},[142,40542,2977],{"class":148},[142,40544,39152],{"class":257},[142,40546,3767],{"class":152},[142,40548,40549,40551,40553,40555,40557,40559,40561,40563,40565],{"class":144,"line":32674},[142,40550,31266],{"class":152},[142,40552,198],{"class":148},[142,40554,30480],{"class":152},[142,40556,31273],{"class":257},[142,40558,1732],{"class":148},[142,40560,31278],{"class":152},[142,40562,1729],{"class":148},[142,40564,30505],{"class":257},[142,40566,159],{"class":152},[142,40568,40569,40571],{"class":144,"line":32680},[142,40570,31328],{"class":201},[142,40572,30514],{"class":152},[142,40574,40575,40577,40579],{"class":144,"line":32686},[142,40576,31318],{"class":152},[142,40578,198],{"class":148},[142,40580,39189],{"class":152},[142,40582,40583,40585,40587,40589,40591,40593,40595,40597],{"class":144,"line":32697},[142,40584,31328],{"class":201},[142,40586,31331],{"class":152},[142,40588,370],{"class":201},[142,40590,531],{"class":152},[142,40592,31530],{"class":201},[142,40594,531],{"class":152},[142,40596,31530],{"class":201},[142,40598,31344],{"class":152},[96,40600,40601],{"start":1208},[99,40602,40603],{},"测试代码",[133,40605,40607],{"className":30407,"code":40606,"language":30409,"meta":31,"style":31},"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",[139,40608,40609,40615,40625,40635,40639,40649,40660,40664,40668,40672,40680,40696,40706,40722,40732,40746,40750,40760,40770,40780,40786,40790,40794,40802,40806,40822,40830,40834,40838,40846,40854,40858,40862,40866,40870,40876,40880,40890,40898,40906,40910,40914,40918,40926,40930,40946,40950,40954,40958,40970,40974,40986,40990,40994,41006,41010,41020,41024,41028,41040,41044,41053,41057,41061,41069,41073,41081,41085,41089,41093,41097,41101,41117,41125,41129,41133,41181,41187,41191,41201,41209,41217,41221,41225,41229,41233,41241,41245,41261,41265,41273,41281],{"__ignoreMap":31},[142,40610,40611,40613],{"class":144,"line":145},[142,40612,30421],{"class":148},[142,40614,30424],{"class":152},[142,40616,40617,40619,40621,40623],{"class":144,"line":64},[142,40618,30421],{"class":148},[142,40620,31444],{"class":152},[142,40622,31412],{"class":148},[142,40624,31449],{"class":152},[142,40626,40627,40629,40631,40633],{"class":144,"line":1208},[142,40628,30766],{"class":148},[142,40630,31427],{"class":152},[142,40632,30421],{"class":148},[142,40634,31432],{"class":152},[142,40636,40637],{"class":144,"line":1223},[142,40638,33951],{"class":211},[142,40640,40641,40643,40645,40647],{"class":144,"line":1229},[142,40642,30766],{"class":148},[142,40644,31397],{"class":152},[142,40646,30421],{"class":148},[142,40648,31402],{"class":152},[142,40650,40651,40653,40655,40657],{"class":144,"line":1243},[142,40652,30766],{"class":148},[142,40654,31943],{"class":152},[142,40656,30421],{"class":148},[142,40658,40659],{"class":201}," VGG16\n",[142,40661,40662],{"class":144,"line":1249},[142,40663,2428],{"emptyLinePlaceholder":69},[142,40665,40666],{"class":144,"line":1340},[142,40667,2428],{"emptyLinePlaceholder":69},[142,40669,40670],{"class":144,"line":1346},[142,40671,33980],{"class":211},[142,40673,40674,40676,40678],{"class":144,"line":1358},[142,40675,31976],{"class":148},[142,40677,33987],{"class":1991},[142,40679,31982],{"class":152},[142,40681,40682,40684,40686,40688,40690,40692,40694],{"class":144,"line":1640},[142,40683,33994],{"class":152},[142,40685,198],{"class":148},[142,40687,31484],{"class":152},[142,40689,31487],{"class":5245},[142,40691,198],{"class":148},[142,40693,31492],{"class":257},[142,40695,31495],{"class":152},[142,40697,40698,40700,40702,40704],{"class":144,"line":1645},[142,40699,34011],{"class":5245},[142,40701,198],{"class":148},[142,40703,34016],{"class":201},[142,40705,31495],{"class":152},[142,40707,40708,40710,40712,40714,40716,40718,40720],{"class":144,"line":1651},[142,40709,34023],{"class":5245},[142,40711,198],{"class":148},[142,40713,31522],{"class":152},[142,40715,31525],{"class":5245},[142,40717,198],{"class":148},[142,40719,31530],{"class":201},[142,40721,31533],{"class":152},[142,40723,40724,40726,40728,40730],{"class":144,"line":1656},[142,40725,34040],{"class":5245},[142,40727,198],{"class":148},[142,40729,31505],{"class":201},[142,40731,159],{"class":152},[142,40733,40734,40736,40738,40740,40742,40744],{"class":144,"line":1670},[142,40735,34051],{"class":152},[142,40737,198],{"class":148},[142,40739,31563],{"class":152},[142,40741,31566],{"class":5245},[142,40743,198],{"class":148},[142,40745,34062],{"class":152},[142,40747,40748],{"class":144,"line":1675},[142,40749,34067],{"class":211},[142,40751,40752,40754,40756,40758],{"class":144,"line":1681},[142,40753,34072],{"class":5245},[142,40755,198],{"class":148},[142,40757,370],{"class":201},[142,40759,31495],{"class":152},[142,40761,40762,40764,40766,40768],{"class":144,"line":1702},[142,40763,34083],{"class":5245},[142,40765,198],{"class":148},[142,40767,31505],{"class":201},[142,40769,31495],{"class":152},[142,40771,40772,40774,40776,40778],{"class":144,"line":1707},[142,40773,34094],{"class":5245},[142,40775,198],{"class":148},[142,40777,344],{"class":201},[142,40779,159],{"class":152},[142,40781,40782,40784],{"class":144,"line":1721},[142,40783,4118],{"class":148},[142,40785,34107],{"class":152},[142,40787,40788],{"class":144,"line":1726},[142,40789,2428],{"emptyLinePlaceholder":69},[142,40791,40792],{"class":144,"line":1755},[142,40793,34116],{"class":211},[142,40795,40796,40798,40800],{"class":144,"line":1760},[142,40797,31976],{"class":148},[142,40799,34123],{"class":1991},[142,40801,34126],{"class":152},[142,40803,40804],{"class":144,"line":1777},[142,40805,34131],{"class":211},[142,40807,40808,40810,40812,40814,40816,40818,40820],{"class":144,"line":1782},[142,40809,31266],{"class":152},[142,40811,198],{"class":148},[142,40813,31273],{"class":257},[142,40815,1732],{"class":148},[142,40817,31278],{"class":152},[142,40819,1729],{"class":148},[142,40821,34148],{"class":257},[142,40823,40824,40826,40828],{"class":144,"line":1787},[142,40825,31318],{"class":152},[142,40827,198],{"class":148},[142,40829,32318],{"class":152},[142,40831,40832],{"class":144,"line":1792},[142,40833,2428],{"emptyLinePlaceholder":69},[142,40835,40836],{"class":144,"line":1806},[142,40837,34165],{"class":211},[142,40839,40840,40842,40844],{"class":144,"line":1811},[142,40841,34170],{"class":152},[142,40843,198],{"class":148},[142,40845,32371],{"class":201},[142,40847,40848,40850,40852],{"class":144,"line":2605},[142,40849,34179],{"class":152},[142,40851,198],{"class":148},[142,40853,3113],{"class":201},[142,40855,40856],{"class":144,"line":2619},[142,40857,2428],{"emptyLinePlaceholder":69},[142,40859,40860],{"class":144,"line":2627},[142,40861,34192],{"class":211},[142,40863,40864],{"class":144,"line":2632},[142,40865,34197],{"class":211},[142,40867,40868],{"class":144,"line":2638},[142,40869,34202],{"class":211},[142,40871,40872,40874],{"class":144,"line":2644},[142,40873,34207],{"class":148},[142,40875,32913],{"class":152},[142,40877,40878],{"class":144,"line":2649},[142,40879,34214],{"class":211},[142,40881,40882,40884,40886,40888],{"class":144,"line":7977},[142,40883,3431],{"class":148},[142,40885,34221],{"class":152},[142,40887,26072],{"class":148},[142,40889,34226],{"class":152},[142,40891,40892,40894,40896],{"class":144,"line":8001},[142,40893,34231],{"class":152},[142,40895,198],{"class":148},[142,40897,34236],{"class":152},[142,40899,40900,40902,40904],{"class":144,"line":8006},[142,40901,34241],{"class":152},[142,40903,198],{"class":148},[142,40905,34246],{"class":152},[142,40907,40908],{"class":144,"line":8012},[142,40909,34251],{"class":211},[142,40911,40912],{"class":144,"line":8039},[142,40913,32904],{"class":152},[142,40915,40916],{"class":144,"line":8044},[142,40917,34260],{"class":211},[142,40919,40920,40922,40924],{"class":144,"line":8050},[142,40921,32689],{"class":152},[142,40923,198],{"class":148},[142,40925,34269],{"class":152},[142,40927,40928],{"class":144,"line":8062},[142,40929,34274],{"class":211},[142,40931,40932,40934,40936,40938,40940,40942,40944],{"class":144,"line":8074},[142,40933,32706],{"class":152},[142,40935,198],{"class":148},[142,40937,32711],{"class":152},[142,40939,32714],{"class":5245},[142,40941,198],{"class":148},[142,40943,370],{"class":201},[142,40945,159],{"class":152},[142,40947,40948],{"class":144,"line":8086},[142,40949,34295],{"class":211},[142,40951,40952],{"class":144,"line":9745},[142,40953,34300],{"class":211},[142,40955,40956],{"class":144,"line":9770},[142,40957,34305],{"class":211},[142,40959,40960,40962,40964,40966,40968],{"class":144,"line":9793},[142,40961,34310],{"class":152},[142,40963,9506],{"class":148},[142,40965,32816],{"class":152},[142,40967,2977],{"class":148},[142,40969,34319],{"class":152},[142,40971,40972],{"class":144,"line":9817},[142,40973,34324],{"class":211},[142,40975,40976,40978,40980,40982,40984],{"class":144,"line":9822},[142,40977,34329],{"class":152},[142,40979,9506],{"class":148},[142,40981,34334],{"class":152},[142,40983,344],{"class":201},[142,40985,159],{"class":152},[142,40987,40988],{"class":144,"line":9827},[142,40989,2428],{"emptyLinePlaceholder":69},[142,40991,40992],{"class":144,"line":9832},[142,40993,34347],{"class":211},[142,40995,40996,40998,41000,41002,41004],{"class":144,"line":9841},[142,40997,34352],{"class":152},[142,40999,198],{"class":148},[142,41001,34357],{"class":152},[142,41003,737],{"class":148},[142,41005,34362],{"class":152},[142,41007,41008],{"class":144,"line":9846},[142,41009,34367],{"class":211},[142,41011,41012,41014,41016,41018],{"class":144,"line":9852},[142,41013,32480],{"class":201},[142,41015,153],{"class":152},[142,41017,34376],{"class":257},[142,41019,34379],{"class":152},[142,41021,41022],{"class":144,"line":9873},[142,41023,2428],{"emptyLinePlaceholder":69},[142,41025,41026],{"class":144,"line":9879},[142,41027,34388],{"class":211},[142,41029,41030,41032,41034,41036,41038],{"class":144,"line":9893},[142,41031,1559],{"class":148},[142,41033,31249],{"class":201},[142,41035,2977],{"class":148},[142,41037,31254],{"class":257},[142,41039,3767],{"class":152},[142,41041,41042],{"class":144,"line":9899},[142,41043,34405],{"class":211},[142,41045,41046,41048,41050],{"class":144,"line":9926},[142,41047,31318],{"class":152},[142,41049,198],{"class":148},[142,41051,41052],{"class":152},"VGG16()\n",[142,41054,41055],{"class":144,"line":9935},[142,41056,34418],{"class":211},[142,41058,41059],{"class":144,"line":9941},[142,41060,34423],{"class":211},[142,41062,41063,41065,41067],{"class":144,"line":9949},[142,41064,34428],{"class":152},[142,41066,34431],{"class":257},[142,41068,30526],{"class":152},[142,41070,41071],{"class":144,"line":9954},[142,41072,34438],{"class":211},[142,41074,41075,41077,41079],{"class":144,"line":16633},[142,41076,34051],{"class":152},[142,41078,198],{"class":148},[142,41080,34447],{"class":152},[142,41082,41083],{"class":144,"line":16639},[142,41084,34452],{"class":211},[142,41086,41087],{"class":144,"line":16662},[142,41088,34457],{"class":152},[142,41090,41091],{"class":144,"line":16668},[142,41092,2428],{"emptyLinePlaceholder":69},[142,41094,41095],{"class":144,"line":16691},[142,41096,34466],{"class":211},[142,41098,41099],{"class":144,"line":16705},[142,41100,34471],{"class":211},[142,41102,41103,41105,41107,41109,41111,41113,41115],{"class":144,"line":16725},[142,41104,31266],{"class":152},[142,41106,198],{"class":148},[142,41108,31273],{"class":257},[142,41110,1732],{"class":148},[142,41112,31278],{"class":152},[142,41114,1729],{"class":148},[142,41116,34148],{"class":257},[142,41118,41119,41121,41123],{"class":144,"line":16731},[142,41120,31318],{"class":152},[142,41122,198],{"class":148},[142,41124,32318],{"class":152},[142,41126,41127],{"class":144,"line":16742},[142,41128,34500],{"class":211},[142,41130,41131],{"class":144,"line":16765},[142,41132,34505],{"class":211},[142,41134,41135,41137,41139,41141,41143,41145,41147,41149,41151,41153,41155,41157,41159,41161,41163,41165,41167,41169,41171,41173,41175,41177,41179],{"class":144,"line":16787},[142,41136,34510],{"class":152},[142,41138,198],{"class":148},[142,41140,1043],{"class":152},[142,41142,34517],{"class":257},[142,41144,531],{"class":152},[142,41146,34522],{"class":257},[142,41148,531],{"class":152},[142,41150,34527],{"class":257},[142,41152,531],{"class":152},[142,41154,34532],{"class":257},[142,41156,531],{"class":152},[142,41158,34537],{"class":257},[142,41160,531],{"class":152},[142,41162,34542],{"class":257},[142,41164,531],{"class":152},[142,41166,34547],{"class":257},[142,41168,531],{"class":152},[142,41170,34552],{"class":257},[142,41172,531],{"class":152},[142,41174,34557],{"class":257},[142,41176,531],{"class":152},[142,41178,34562],{"class":257},[142,41180,33275],{"class":152},[142,41182,41183,41185],{"class":144,"line":16792},[142,41184,34207],{"class":148},[142,41186,32913],{"class":152},[142,41188,41189],{"class":144,"line":16798},[142,41190,34575],{"class":211},[142,41192,41193,41195,41197,41199],{"class":144,"line":16812},[142,41194,3431],{"class":148},[142,41196,34582],{"class":152},[142,41198,26072],{"class":148},[142,41200,34226],{"class":152},[142,41202,41203,41205,41207],{"class":144,"line":16825},[142,41204,32639],{"class":152},[142,41206,198],{"class":148},[142,41208,32644],{"class":152},[142,41210,41211,41213,41215],{"class":144,"line":16830},[142,41212,32654],{"class":152},[142,41214,198],{"class":148},[142,41216,32659],{"class":152},[142,41218,41219],{"class":144,"line":16844},[142,41220,2428],{"emptyLinePlaceholder":69},[142,41222,41223],{"class":144,"line":16849},[142,41224,34611],{"class":211},[142,41226,41227],{"class":144,"line":16855},[142,41228,32904],{"class":152},[142,41230,41231],{"class":144,"line":16860},[142,41232,34620],{"class":211},[142,41234,41235,41237,41239],{"class":144,"line":16874},[142,41236,32689],{"class":152},[142,41238,198],{"class":148},[142,41240,32694],{"class":152},[142,41242,41243],{"class":144,"line":16879},[142,41244,34633],{"class":211},[142,41246,41247,41249,41251,41253,41255,41257,41259],{"class":144,"line":16884},[142,41248,32706],{"class":152},[142,41250,198],{"class":148},[142,41252,32711],{"class":152},[142,41254,32714],{"class":5245},[142,41256,198],{"class":148},[142,41258,370],{"class":201},[142,41260,159],{"class":152},[142,41262,41263],{"class":144,"line":16898},[142,41264,34654],{"class":211},[142,41266,41267,41269,41271],{"class":144,"line":16910},[142,41268,34659],{"class":152},[142,41270,198],{"class":148},[142,41272,34664],{"class":152},[142,41274,41275,41277,41279],{"class":144,"line":16915},[142,41276,34669],{"class":152},[142,41278,198],{"class":148},[142,41280,34674],{"class":152},[142,41282,41283,41285,41287,41289,41291,41293,41295,41297],{"class":144,"line":16928},[142,41284,34679],{"class":201},[142,41286,153],{"class":152},[142,41288,34684],{"class":257},[142,41290,34687],{"class":152},[142,41292,34690],{"class":257},[142,41294,531],{"class":152},[142,41296,34695],{"class":257},[142,41298,34698],{"class":152},[113,41300,41302],{"id":41301},"_23googlenet","2.3.GoogLeNet",[22027,41304,41306],{"id":41305},"_231原理","2.3.1.原理",[96,41308,41309],{},[99,41310,41311],{},"网络结构",[14,41313,41314],{},[29,41315],{"alt":31,"src":41316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,41318,41319],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41321,41322],{},[29,41323],{"alt":31,"src":41324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41326,41327],{},[29,41328],{"alt":31,"src":41329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41331,41332],{},[29,41333],{"alt":31,"src":41334},"\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",[96,41336,41337],{"start":64},[99,41338,41339],{},"1x1卷积的优点",[14,41341,41342],{},[29,41343],{"alt":31,"src":41344},"\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",[96,41346,41347],{"start":1208},[99,41348,41349],{},"全局平均池化层优点",[14,41351,41352],{},[29,41353],{"alt":31,"src":41354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41356,41357],{},[29,41358],{"alt":31,"src":41359},"\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",[96,41361,41362],{"start":1223},[99,41363,41364],{},"参数详细描述",[14,41366,41367],{},[29,41368],{"alt":31,"src":41369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,41371,41372],{},[29,41373],{"alt":31,"src":41374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41376,41377],{},[29,41378],{"alt":31,"src":41379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,41381,41382],{},[29,41383],{"alt":31,"src":41384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41386,41387],{},[29,41388],{"alt":31,"src":41389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41391,41392],{},[29,41393],{"alt":31,"src":41394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,41396,41397],{},[29,41398],{"alt":31,"src":41399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,41401,41402],{},[29,41403],{"alt":31,"src":41404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,41406,41407],{},[29,41408],{"alt":31,"src":41409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,41411,41412],{},[29,41413],{"alt":31,"src":41414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,41416,41417],{},[29,41418],{"alt":31,"src":41419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41421,41422],{},[29,41423],{"alt":31,"src":41424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,41426,41427],{},[29,41428],{"alt":31,"src":41429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,41431,41432],{},[29,41433],{"alt":31,"src":41434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41436,41437],{},[29,41438],{"alt":31,"src":41439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,41441,41442],{},[29,41443],{"alt":31,"src":41444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,41446,41447],{},[29,41448],{"alt":31,"src":41449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,41451,41452],{},[29,41453],{"alt":31,"src":41454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,41456,41457],{},[29,41458],{"alt":31,"src":41459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,41461,41462],{},[29,41463],{"alt":31,"src":41464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,41466,41467],{},[29,41468],{"alt":31,"src":41469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[22027,41471,41473],{"id":41472},"_232代码实现","2.3.2.代码实现",[96,41475,41476],{},[99,41477,30740],{},[14,41479,41480],{},"根据原理一步一步搭建即可",[133,41482,41484],{"className":30407,"code":41483,"language":30409,"meta":31,"style":31},"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",[139,41485,41486,41492,41502,41512,41516,41533,41542,41557,41567,41572,41605,41610,41647,41694,41699,41735,41782,41787,41792,41827,41859,41863,41871,41887,41911,41936,41957,41962,41977,41981,41985,41990,42007,42012,42021,42036,42047,42091,42095,42123,42127,42138,42166,42170,42207,42211,42239,42243,42254,42290,42322,42350,42354,42365,42399,42431,42463,42496,42530,42558,42562,42573,42606,42638,42652,42656,42669,42673,42678,42690,42698,42720,42725,42730,42735,42740,42745,42750,42764,42772,42781,42794,42809,42818,42822,42830,42841,42852,42863,42874,42885,42891,42895,42900,42912,42932,42941],{"__ignoreMap":31},[142,41487,41488,41490],{"class":144,"line":145},[142,41489,30421],{"class":148},[142,41491,30424],{"class":152},[142,41493,41494,41496,41498,41500],{"class":144,"line":64},[142,41495,30766],{"class":148},[142,41497,30769],{"class":152},[142,41499,30421],{"class":148},[142,41501,30774],{"class":152},[142,41503,41504,41506,41508,41510],{"class":144,"line":1208},[142,41505,30766],{"class":148},[142,41507,30786],{"class":152},[142,41509,30421],{"class":148},[142,41511,30791],{"class":152},[142,41513,41514],{"class":144,"line":1223},[142,41515,2428],{"emptyLinePlaceholder":69},[142,41517,41518,41520,41523,41525,41527,41529,41531],{"class":144,"line":1229},[142,41519,14723],{"class":148},[142,41521,41522],{"class":1991}," Inception",[142,41524,153],{"class":152},[142,41526,30807],{"class":1991},[142,41528,711],{"class":152},[142,41530,30812],{"class":1991},[142,41532,30815],{"class":152},[142,41534,41535,41537,41539],{"class":144,"line":1243},[142,41536,30830],{"class":148},[142,41538,30833],{"class":201},[142,41540,41541],{"class":152},"(self,in_channels,c1,c2,c3,c4):\n",[142,41543,41544,41546,41549,41551,41553,41555],{"class":144,"line":1249},[142,41545,30846],{"class":201},[142,41547,41548],{"class":152},"(Inception,",[142,41550,30852],{"class":201},[142,41552,30855],{"class":152},[142,41554,30858],{"class":201},[142,41556,2004],{"class":152},[142,41558,41559,41561,41563,41565],{"class":144,"line":1340},[142,41560,30874],{"class":201},[142,41562,34800],{"class":152},[142,41564,198],{"class":148},[142,41566,34805],{"class":152},[142,41568,41569],{"class":144,"line":1346},[142,41570,41571],{"class":211},"        # 路线1：定义1*1卷积\n",[142,41573,41574,41576,41579,41581,41583,41585,41587,41590,41592,41594,41597,41599,41601,41603],{"class":144,"line":1358},[142,41575,30874],{"class":201},[142,41577,41578],{"class":152},".p1_1",[142,41580,198],{"class":148},[142,41582,30882],{"class":152},[142,41584,30885],{"class":5245},[142,41586,198],{"class":148},[142,41588,41589],{"class":152},"in_channels,",[142,41591,30894],{"class":5245},[142,41593,198],{"class":148},[142,41595,41596],{"class":152},"c1,",[142,41598,30903],{"class":5245},[142,41600,198],{"class":148},[142,41602,370],{"class":201},[142,41604,159],{"class":152},[142,41606,41607],{"class":144,"line":1640},[142,41608,41609],{"class":211},"        # 路线2：定义1*1卷积和3*3\n",[142,41611,41612,41614,41617,41619,41621,41623,41625,41627,41629,41631,41634,41636,41639,41641,41643,41645],{"class":144,"line":1645},[142,41613,30874],{"class":201},[142,41615,41616],{"class":152},".p2_1",[142,41618,198],{"class":148},[142,41620,30882],{"class":152},[142,41622,30885],{"class":5245},[142,41624,198],{"class":148},[142,41626,41589],{"class":152},[142,41628,30894],{"class":5245},[142,41630,198],{"class":148},[142,41632,41633],{"class":152},"c2[",[142,41635,344],{"class":201},[142,41637,41638],{"class":152},"],",[142,41640,30903],{"class":5245},[142,41642,198],{"class":148},[142,41644,370],{"class":201},[142,41646,159],{"class":152},[142,41648,41649,41651,41654,41656,41658,41660,41662,41664,41666,41668,41670,41672,41674,41676,41678,41680,41682,41684,41686,41688,41690,41692],{"class":144,"line":1651},[142,41650,30874],{"class":201},[142,41652,41653],{"class":152},".p2_2",[142,41655,198],{"class":148},[142,41657,30882],{"class":152},[142,41659,30885],{"class":5245},[142,41661,198],{"class":148},[142,41663,41633],{"class":152},[142,41665,344],{"class":201},[142,41667,41638],{"class":152},[142,41669,30894],{"class":5245},[142,41671,198],{"class":148},[142,41673,41633],{"class":152},[142,41675,370],{"class":201},[142,41677,41638],{"class":152},[142,41679,30903],{"class":5245},[142,41681,198],{"class":148},[142,41683,224],{"class":201},[142,41685,531],{"class":152},[142,41687,30912],{"class":5245},[142,41689,198],{"class":148},[142,41691,370],{"class":201},[142,41693,159],{"class":152},[142,41695,41696],{"class":144,"line":1656},[142,41697,41698],{"class":211},"        # 路线3：定义1*1卷积和5*5\n",[142,41700,41701,41703,41706,41708,41710,41712,41714,41716,41718,41720,41723,41725,41727,41729,41731,41733],{"class":144,"line":1670},[142,41702,30874],{"class":201},[142,41704,41705],{"class":152},".p3_1",[142,41707,198],{"class":148},[142,41709,30882],{"class":152},[142,41711,30885],{"class":5245},[142,41713,198],{"class":148},[142,41715,41589],{"class":152},[142,41717,30894],{"class":5245},[142,41719,198],{"class":148},[142,41721,41722],{"class":152},"c3[",[142,41724,344],{"class":201},[142,41726,41638],{"class":152},[142,41728,30903],{"class":5245},[142,41730,198],{"class":148},[142,41732,370],{"class":201},[142,41734,159],{"class":152},[142,41736,41737,41739,41742,41744,41746,41748,41750,41752,41754,41756,41758,41760,41762,41764,41766,41768,41770,41772,41774,41776,41778,41780],{"class":144,"line":1675},[142,41738,30874],{"class":201},[142,41740,41741],{"class":152},".p3_2",[142,41743,198],{"class":148},[142,41745,30882],{"class":152},[142,41747,30885],{"class":5245},[142,41749,198],{"class":148},[142,41751,41722],{"class":152},[142,41753,344],{"class":201},[142,41755,41638],{"class":152},[142,41757,30894],{"class":5245},[142,41759,198],{"class":148},[142,41761,41722],{"class":152},[142,41763,370],{"class":201},[142,41765,41638],{"class":152},[142,41767,30903],{"class":5245},[142,41769,198],{"class":148},[142,41771,472],{"class":201},[142,41773,531],{"class":152},[142,41775,30912],{"class":5245},[142,41777,198],{"class":148},[142,41779,230],{"class":201},[142,41781,159],{"class":152},[142,41783,41784],{"class":144,"line":1681},[142,41785,41786],{"class":211},"        # 路线4：定义3*3最大池化和1*1卷积\n",[142,41788,41789],{"class":144,"line":1702},[142,41790,41791],{"class":211},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[142,41793,41794,41796,41799,41801,41803,41805,41807,41809,41811,41813,41815,41817,41819,41821,41823,41825],{"class":144,"line":1707},[142,41795,30874],{"class":201},[142,41797,41798],{"class":152},".p4_1",[142,41800,198],{"class":148},[142,41802,34858],{"class":152},[142,41804,30903],{"class":5245},[142,41806,198],{"class":148},[142,41808,224],{"class":201},[142,41810,531],{"class":152},[142,41812,30958],{"class":5245},[142,41814,198],{"class":148},[142,41816,370],{"class":201},[142,41818,531],{"class":152},[142,41820,30912],{"class":5245},[142,41822,198],{"class":148},[142,41824,370],{"class":201},[142,41826,159],{"class":152},[142,41828,41829,41831,41834,41836,41838,41840,41842,41844,41846,41848,41851,41853,41855,41857],{"class":144,"line":1721},[142,41830,30874],{"class":201},[142,41832,41833],{"class":152},".p4_2",[142,41835,198],{"class":148},[142,41837,30882],{"class":152},[142,41839,30885],{"class":5245},[142,41841,198],{"class":148},[142,41843,41589],{"class":152},[142,41845,30894],{"class":5245},[142,41847,198],{"class":148},[142,41849,41850],{"class":152},"c4,",[142,41852,30903],{"class":5245},[142,41854,198],{"class":148},[142,41856,370],{"class":201},[142,41858,159],{"class":152},[142,41860,41861],{"class":144,"line":1726},[142,41862,2428],{"emptyLinePlaceholder":69},[142,41864,41865,41867,41869],{"class":144,"line":1755},[142,41866,30830],{"class":148},[142,41868,31122],{"class":1991},[142,41870,31125],{"class":152},[142,41872,41873,41876,41878,41880,41882,41884],{"class":144,"line":1760},[142,41874,41875],{"class":152},"        p1",[142,41877,198],{"class":148},[142,41879,30852],{"class":201},[142,41881,35213],{"class":152},[142,41883,30852],{"class":201},[142,41885,41886],{"class":152},".p1_1(x))\n",[142,41888,41889,41891,41893,41895,41897,41899,41902,41904,41906,41908],{"class":144,"line":1777},[142,41890,7114],{"class":152},[142,41892,198],{"class":148},[142,41894,30852],{"class":201},[142,41896,35213],{"class":152},[142,41898,30852],{"class":201},[142,41900,41901],{"class":152},".p2_2(",[142,41903,30852],{"class":201},[142,41905,35213],{"class":152},[142,41907,30852],{"class":201},[142,41909,41910],{"class":152},".p2_1(x))))\n",[142,41912,41913,41916,41918,41920,41922,41924,41927,41929,41931,41933],{"class":144,"line":1782},[142,41914,41915],{"class":152},"        p3",[142,41917,198],{"class":148},[142,41919,30852],{"class":201},[142,41921,35213],{"class":152},[142,41923,30852],{"class":201},[142,41925,41926],{"class":152},".p3_2(",[142,41928,30852],{"class":201},[142,41930,35213],{"class":152},[142,41932,30852],{"class":201},[142,41934,41935],{"class":152},".p3_1(x))))\n",[142,41937,41938,41941,41943,41945,41947,41949,41952,41954],{"class":144,"line":1787},[142,41939,41940],{"class":152},"        p4",[142,41942,198],{"class":148},[142,41944,30852],{"class":201},[142,41946,35213],{"class":152},[142,41948,30852],{"class":201},[142,41950,41951],{"class":152},".p4_2(",[142,41953,30852],{"class":201},[142,41955,41956],{"class":152},".p4_1(x)))\n",[142,41958,41959],{"class":144,"line":1792},[142,41960,41961],{"class":211},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[142,41963,41964,41966,41969,41971,41973,41975],{"class":144,"line":1806},[142,41965,14781],{"class":148},[142,41967,41968],{"class":152}," torch.cat((p1,p2,p3,p4),",[142,41970,32714],{"class":5245},[142,41972,198],{"class":148},[142,41974,370],{"class":201},[142,41976,159],{"class":152},[142,41978,41979],{"class":144,"line":1811},[142,41980,2428],{"emptyLinePlaceholder":69},[142,41982,41983],{"class":144,"line":2605},[142,41984,2428],{"emptyLinePlaceholder":69},[142,41986,41987],{"class":144,"line":2619},[142,41988,41989],{"class":211},"# 搭建GoogLeNet网络\n",[142,41991,41992,41994,41997,41999,42001,42003,42005],{"class":144,"line":2627},[142,41993,14723],{"class":148},[142,41995,41996],{"class":1991}," GoogLeNet",[142,41998,153],{"class":152},[142,42000,30807],{"class":1991},[142,42002,711],{"class":152},[142,42004,30812],{"class":1991},[142,42006,30815],{"class":152},[142,42008,42009],{"class":144,"line":2632},[142,42010,42011],{"class":211},"    # 必须把Inception导入到里边\n",[142,42013,42014,42016,42018],{"class":144,"line":2638},[142,42015,30830],{"class":148},[142,42017,30833],{"class":201},[142,42019,42020],{"class":152},"(self,Inception):\n",[142,42022,42023,42025,42028,42030,42032,42034],{"class":144,"line":2644},[142,42024,30846],{"class":201},[142,42026,42027],{"class":152},"(GoogLeNet,",[142,42029,30852],{"class":201},[142,42031,30855],{"class":152},[142,42033,30858],{"class":201},[142,42035,2004],{"class":152},[142,42037,42038,42040,42043,42045],{"class":144,"line":2649},[142,42039,30874],{"class":201},[142,42041,42042],{"class":152},".b1",[142,42044,198],{"class":148},[142,42046,38038],{"class":152},[142,42048,42049,42051,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071,42073,42075,42077,42079,42081,42083,42085,42087,42089],{"class":144,"line":7977},[142,42050,38043],{"class":152},[142,42052,30885],{"class":5245},[142,42054,198],{"class":148},[142,42056,370],{"class":201},[142,42058,531],{"class":152},[142,42060,30894],{"class":5245},[142,42062,198],{"class":148},[142,42064,356],{"class":201},[142,42066,531],{"class":152},[142,42068,30903],{"class":5245},[142,42070,198],{"class":148},[142,42072,522],{"class":201},[142,42074,531],{"class":152},[142,42076,30958],{"class":5245},[142,42078,198],{"class":148},[142,42080,230],{"class":201},[142,42082,531],{"class":152},[142,42084,30912],{"class":5245},[142,42086,198],{"class":148},[142,42088,224],{"class":201},[142,42090,38076],{"class":152},[142,42092,42093],{"class":144,"line":8001},[142,42094,38081],{"class":152},[142,42096,42097,42099,42101,42103,42105,42107,42109,42111,42113,42115,42117,42119,42121],{"class":144,"line":8006},[142,42098,38126],{"class":152},[142,42100,30903],{"class":5245},[142,42102,198],{"class":148},[142,42104,224],{"class":201},[142,42106,531],{"class":152},[142,42108,30958],{"class":5245},[142,42110,198],{"class":148},[142,42112,230],{"class":201},[142,42114,531],{"class":152},[142,42116,30912],{"class":5245},[142,42118,198],{"class":148},[142,42120,370],{"class":201},[142,42122,159],{"class":152},[142,42124,42125],{"class":144,"line":8012},[142,42126,38155],{"class":152},[142,42128,42129,42131,42134,42136],{"class":144,"line":8039},[142,42130,30874],{"class":201},[142,42132,42133],{"class":152},".b2",[142,42135,198],{"class":148},[142,42137,38038],{"class":152},[142,42139,42140,42142,42144,42146,42148,42150,42152,42154,42156,42158,42160,42162,42164],{"class":144,"line":8044},[142,42141,38043],{"class":152},[142,42143,30885],{"class":5245},[142,42145,198],{"class":148},[142,42147,356],{"class":201},[142,42149,531],{"class":152},[142,42151,30894],{"class":5245},[142,42153,198],{"class":148},[142,42155,356],{"class":201},[142,42157,531],{"class":152},[142,42159,30903],{"class":5245},[142,42161,198],{"class":148},[142,42163,370],{"class":201},[142,42165,38076],{"class":152},[142,42167,42168],{"class":144,"line":8050},[142,42169,38081],{"class":152},[142,42171,42172,42174,42176,42178,42180,42182,42184,42186,42189,42191,42193,42195,42197,42199,42201,42203,42205],{"class":144,"line":8062},[142,42173,38043],{"class":152},[142,42175,30885],{"class":5245},[142,42177,198],{"class":148},[142,42179,356],{"class":201},[142,42181,531],{"class":152},[142,42183,30894],{"class":5245},[142,42185,198],{"class":148},[142,42187,42188],{"class":201},"192",[142,42190,531],{"class":152},[142,42192,30903],{"class":5245},[142,42194,198],{"class":148},[142,42196,224],{"class":201},[142,42198,531],{"class":152},[142,42200,30912],{"class":5245},[142,42202,198],{"class":148},[142,42204,370],{"class":201},[142,42206,38076],{"class":152},[142,42208,42209],{"class":144,"line":8074},[142,42210,38081],{"class":152},[142,42212,42213,42215,42217,42219,42221,42223,42225,42227,42229,42231,42233,42235,42237],{"class":144,"line":8086},[142,42214,38126],{"class":152},[142,42216,30903],{"class":5245},[142,42218,198],{"class":148},[142,42220,224],{"class":201},[142,42222,531],{"class":152},[142,42224,30958],{"class":5245},[142,42226,198],{"class":148},[142,42228,230],{"class":201},[142,42230,531],{"class":152},[142,42232,30912],{"class":5245},[142,42234,198],{"class":148},[142,42236,370],{"class":201},[142,42238,159],{"class":152},[142,42240,42241],{"class":144,"line":9745},[142,42242,38155],{"class":152},[142,42244,42245,42247,42250,42252],{"class":144,"line":9770},[142,42246,30874],{"class":201},[142,42248,42249],{"class":152},".b3",[142,42251,198],{"class":148},[142,42253,38038],{"class":152},[142,42255,42256,42259,42261,42263,42265,42268,42270,42272,42274,42277,42279,42281,42283,42286,42288],{"class":144,"line":9793},[142,42257,42258],{"class":152},"            Inception(",[142,42260,42188],{"class":201},[142,42262,531],{"class":152},[142,42264,356],{"class":201},[142,42266,42267],{"class":152},",(",[142,42269,362],{"class":201},[142,42271,531],{"class":152},[142,42273,32099],{"class":201},[142,42275,42276],{"class":152},"),(",[142,42278,754],{"class":201},[142,42280,531],{"class":152},[142,42282,350],{"class":201},[142,42284,42285],{"class":152},"),",[142,42287,350],{"class":201},[142,42289,38076],{"class":152},[142,42291,42292,42294,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314,42316,42318,42320],{"class":144,"line":9817},[142,42293,42258],{"class":152},[142,42295,34899],{"class":201},[142,42297,531],{"class":152},[142,42299,32099],{"class":201},[142,42301,42267],{"class":152},[142,42303,32099],{"class":201},[142,42305,531],{"class":152},[142,42307,42188],{"class":201},[142,42309,42276],{"class":152},[142,42311,350],{"class":201},[142,42313,531],{"class":152},[142,42315,362],{"class":201},[142,42317,42285],{"class":152},[142,42319,356],{"class":201},[142,42321,38076],{"class":152},[142,42323,42324,42326,42328,42330,42332,42334,42336,42338,42340,42342,42344,42346,42348],{"class":144,"line":9822},[142,42325,38126],{"class":152},[142,42327,30903],{"class":5245},[142,42329,198],{"class":148},[142,42331,224],{"class":201},[142,42333,531],{"class":152},[142,42335,30958],{"class":5245},[142,42337,198],{"class":148},[142,42339,230],{"class":201},[142,42341,531],{"class":152},[142,42343,30912],{"class":5245},[142,42345,198],{"class":148},[142,42347,370],{"class":201},[142,42349,159],{"class":152},[142,42351,42352],{"class":144,"line":9827},[142,42353,38155],{"class":152},[142,42355,42356,42358,42361,42363],{"class":144,"line":9832},[142,42357,30874],{"class":201},[142,42359,42360],{"class":152},".b4",[142,42362,198],{"class":148},[142,42364,38038],{"class":152},[142,42366,42367,42369,42372,42374,42376,42378,42380,42382,42385,42387,42389,42391,42393,42395,42397],{"class":144,"line":9841},[142,42368,42258],{"class":152},[142,42370,42371],{"class":201},"480",[142,42373,531],{"class":152},[142,42375,42188],{"class":201},[142,42377,42267],{"class":152},[142,42379,362],{"class":201},[142,42381,531],{"class":152},[142,42383,42384],{"class":201},"208",[142,42386,42276],{"class":152},[142,42388,754],{"class":201},[142,42390,531],{"class":152},[142,42392,760],{"class":201},[142,42394,42285],{"class":152},[142,42396,356],{"class":201},[142,42398,38076],{"class":152},[142,42400,42401,42403,42405,42407,42409,42411,42413,42415,42417,42419,42421,42423,42425,42427,42429],{"class":144,"line":9846},[142,42402,42258],{"class":152},[142,42404,38486],{"class":201},[142,42406,531],{"class":152},[142,42408,21077],{"class":201},[142,42410,42267],{"class":152},[142,42412,771],{"class":201},[142,42414,531],{"class":152},[142,42416,31530],{"class":201},[142,42418,42276],{"class":152},[142,42420,953],{"class":201},[142,42422,531],{"class":152},[142,42424,356],{"class":201},[142,42426,42285],{"class":152},[142,42428,356],{"class":201},[142,42430,38076],{"class":152},[142,42432,42433,42435,42437,42439,42441,42443,42445,42447,42449,42451,42453,42455,42457,42459,42461],{"class":144,"line":9852},[142,42434,42258],{"class":152},[142,42436,38486],{"class":201},[142,42438,531],{"class":152},[142,42440,32099],{"class":201},[142,42442,42267],{"class":152},[142,42444,32099],{"class":201},[142,42446,531],{"class":152},[142,42448,34899],{"class":201},[142,42450,42276],{"class":152},[142,42452,953],{"class":201},[142,42454,531],{"class":152},[142,42456,356],{"class":201},[142,42458,42285],{"class":152},[142,42460,356],{"class":201},[142,42462,38076],{"class":152},[142,42464,42465,42467,42469,42471,42473,42475,42477,42479,42482,42484,42486,42488,42490,42492,42494],{"class":144,"line":9873},[142,42466,42258],{"class":152},[142,42468,38486],{"class":201},[142,42470,531],{"class":152},[142,42472,771],{"class":201},[142,42474,42267],{"class":152},[142,42476,32099],{"class":201},[142,42478,531],{"class":152},[142,42480,42481],{"class":201},"288",[142,42483,42276],{"class":152},[142,42485,350],{"class":201},[142,42487,531],{"class":152},[142,42489,356],{"class":201},[142,42491,42285],{"class":152},[142,42493,356],{"class":201},[142,42495,38076],{"class":152},[142,42497,42498,42500,42503,42505,42507,42509,42511,42513,42516,42518,42520,42522,42524,42526,42528],{"class":144,"line":9879},[142,42499,42258],{"class":152},[142,42501,42502],{"class":201},"528",[142,42504,531],{"class":152},[142,42506,34899],{"class":201},[142,42508,42267],{"class":152},[142,42510,21077],{"class":201},[142,42512,531],{"class":152},[142,42514,42515],{"class":201},"320",[142,42517,42276],{"class":152},[142,42519,350],{"class":201},[142,42521,531],{"class":152},[142,42523,32099],{"class":201},[142,42525,42285],{"class":152},[142,42527,32099],{"class":201},[142,42529,38076],{"class":152},[142,42531,42532,42534,42536,42538,42540,42542,42544,42546,42548,42550,42552,42554,42556],{"class":144,"line":9893},[142,42533,38126],{"class":152},[142,42535,30903],{"class":5245},[142,42537,198],{"class":148},[142,42539,224],{"class":201},[142,42541,531],{"class":152},[142,42543,30958],{"class":5245},[142,42545,198],{"class":148},[142,42547,230],{"class":201},[142,42549,531],{"class":152},[142,42551,30912],{"class":5245},[142,42553,198],{"class":148},[142,42555,370],{"class":201},[142,42557,159],{"class":152},[142,42559,42560],{"class":144,"line":9899},[142,42561,38155],{"class":152},[142,42563,42564,42566,42569,42571],{"class":144,"line":9926},[142,42565,30874],{"class":201},[142,42567,42568],{"class":152},".b5",[142,42570,198],{"class":148},[142,42572,38038],{"class":152},[142,42574,42575,42577,42580,42582,42584,42586,42588,42590,42592,42594,42596,42598,42600,42602,42604],{"class":144,"line":9935},[142,42576,42258],{"class":152},[142,42578,42579],{"class":201},"832",[142,42581,531],{"class":152},[142,42583,34899],{"class":201},[142,42585,42267],{"class":152},[142,42587,21077],{"class":201},[142,42589,531],{"class":152},[142,42591,42515],{"class":201},[142,42593,42276],{"class":152},[142,42595,350],{"class":201},[142,42597,531],{"class":152},[142,42599,32099],{"class":201},[142,42601,42285],{"class":152},[142,42603,32099],{"class":201},[142,42605,38076],{"class":152},[142,42607,42608,42610,42612,42614,42616,42618,42620,42622,42624,42626,42628,42630,42632,42634,42636],{"class":144,"line":9941},[142,42609,42258],{"class":152},[142,42611,42579],{"class":201},[142,42613,531],{"class":152},[142,42615,34969],{"class":201},[142,42617,42267],{"class":152},[142,42619,42188],{"class":201},[142,42621,531],{"class":152},[142,42623,34969],{"class":201},[142,42625,42276],{"class":152},[142,42627,760],{"class":201},[142,42629,531],{"class":152},[142,42631,32099],{"class":201},[142,42633,42285],{"class":152},[142,42635,32099],{"class":201},[142,42637,38076],{"class":152},[142,42639,42640,42643,42645,42647,42649],{"class":144,"line":9949},[142,42641,42642],{"class":152},"            nn.AdaptiveAvgPool2d((",[142,42644,370],{"class":201},[142,42646,531],{"class":152},[142,42648,370],{"class":201},[142,42650,42651],{"class":152},")),\n",[142,42653,42654],{"class":144,"line":9954},[142,42655,38819],{"class":152},[142,42657,42658,42660,42663,42665,42667],{"class":144,"line":16633},[142,42659,38824],{"class":152},[142,42661,42662],{"class":201},"1024",[142,42664,531],{"class":152},[142,42666,599],{"class":201},[142,42668,159],{"class":152},[142,42670,42671],{"class":144,"line":16639},[142,42672,38155],{"class":152},[142,42674,42675],{"class":144,"line":16662},[142,42676,42677],{"class":211},"        # 对模型参数初始化\n",[142,42679,42680,42682,42684,42686,42688],{"class":144,"line":16668},[142,42681,3431],{"class":148},[142,42683,38897],{"class":152},[142,42685,26072],{"class":148},[142,42687,38902],{"class":201},[142,42689,38905],{"class":152},[142,42691,42692,42694,42696],{"class":144,"line":16691},[142,42693,4670],{"class":148},[142,42695,38917],{"class":201},[142,42697,38920],{"class":152},[142,42699,42700,42702,42705,42707,42710,42712,42714,42716,42718],{"class":144,"line":16705},[142,42701,38930],{"class":152},[142,42703,42704],{"class":5245},"mode",[142,42706,198],{"class":148},[142,42708,42709],{"class":257},"'fan_out'",[142,42711,531],{"class":152},[142,42713,38933],{"class":5245},[142,42715,198],{"class":148},[142,42717,38938],{"class":257},[142,42719,159],{"class":152},[142,42721,42722],{"class":144,"line":16725},[142,42723,42724],{"class":211},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[142,42726,42727],{"class":144,"line":16731},[142,42728,42729],{"class":211},"                # ② mode = 'fan_out'决定使用的fan值：\n",[142,42731,42732],{"class":144,"line":16742},[142,42733,42734],{"class":211},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[142,42736,42737],{"class":144,"line":16765},[142,42738,42739],{"class":211},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[142,42741,42742],{"class":144,"line":16787},[142,42743,42744],{"class":211},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[142,42746,42747],{"class":144,"line":16792},[142,42748,42749],{"class":211},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[142,42751,42752,42754,42756,42758,42760,42762],{"class":144,"line":16798},[142,42753,38950],{"class":148},[142,42755,38953],{"class":152},[142,42757,38956],{"class":148},[142,42759,38959],{"class":148},[142,42761,38962],{"class":201},[142,42763,3767],{"class":152},[142,42765,42766,42768,42770],{"class":144,"line":16812},[142,42767,38974],{"class":152},[142,42769,344],{"class":201},[142,42771,159],{"class":152},[142,42773,42774,42777,42779],{"class":144,"line":16825},[142,42775,42776],{"class":148},"                elif",[142,42778,38917],{"class":201},[142,42780,38993],{"class":152},[142,42782,42783,42786,42788,42790,42792],{"class":144,"line":16830},[142,42784,42785],{"class":152},"                    nn.init.normal_(m.weight,",[142,42787,344],{"class":201},[142,42789,531],{"class":152},[142,42791,39015],{"class":201},[142,42793,159],{"class":152},[142,42795,42796,42799,42801,42803,42805,42807],{"class":144,"line":16844},[142,42797,42798],{"class":148},"                    if",[142,42800,38953],{"class":152},[142,42802,38956],{"class":148},[142,42804,38959],{"class":148},[142,42806,38962],{"class":201},[142,42808,3767],{"class":152},[142,42810,42811,42814,42816],{"class":144,"line":16849},[142,42812,42813],{"class":152},"                        nn.init.constant_(m.bias,",[142,42815,344],{"class":201},[142,42817,159],{"class":152},[142,42819,42820],{"class":144,"line":16855},[142,42821,35194],{"class":211},[142,42823,42824,42826,42828],{"class":144,"line":16860},[142,42825,30830],{"class":148},[142,42827,31122],{"class":1991},[142,42829,31125],{"class":152},[142,42831,42832,42834,42836,42838],{"class":144,"line":16874},[142,42833,31130],{"class":152},[142,42835,198],{"class":148},[142,42837,30852],{"class":201},[142,42839,42840],{"class":152},".b1(x)\n",[142,42842,42843,42845,42847,42849],{"class":144,"line":16879},[142,42844,31130],{"class":152},[142,42846,198],{"class":148},[142,42848,30852],{"class":201},[142,42850,42851],{"class":152},".b2(x)\n",[142,42853,42854,42856,42858,42860],{"class":144,"line":16884},[142,42855,31130],{"class":152},[142,42857,198],{"class":148},[142,42859,30852],{"class":201},[142,42861,42862],{"class":152},".b3(x)\n",[142,42864,42865,42867,42869,42871],{"class":144,"line":16898},[142,42866,31130],{"class":152},[142,42868,198],{"class":148},[142,42870,30852],{"class":201},[142,42872,42873],{"class":152},".b4(x)\n",[142,42875,42876,42878,42880,42882],{"class":144,"line":16910},[142,42877,31130],{"class":152},[142,42879,198],{"class":148},[142,42881,30852],{"class":201},[142,42883,42884],{"class":152},".b5(x)\n",[142,42886,42887,42889],{"class":144,"line":16915},[142,42888,14781],{"class":148},[142,42890,31238],{"class":152},[142,42892,42893],{"class":144,"line":16928},[142,42894,2428],{"emptyLinePlaceholder":69},[142,42896,42897],{"class":144,"line":16933},[142,42898,42899],{"class":211},"# 模型展示\n",[142,42901,42902,42904,42906,42908,42910],{"class":144,"line":16938},[142,42903,1559],{"class":148},[142,42905,31249],{"class":201},[142,42907,2977],{"class":148},[142,42909,31254],{"class":257},[142,42911,3767],{"class":152},[142,42913,42914,42916,42918,42920,42922,42924,42926,42928,42930],{"class":144,"line":16943},[142,42915,31266],{"class":152},[142,42917,198],{"class":148},[142,42919,30480],{"class":152},[142,42921,31273],{"class":257},[142,42923,1732],{"class":148},[142,42925,31278],{"class":152},[142,42927,1729],{"class":148},[142,42929,30505],{"class":257},[142,42931,159],{"class":152},[142,42933,42934,42936,42938],{"class":144,"line":16956},[142,42935,31318],{"class":152},[142,42937,198],{"class":148},[142,42939,42940],{"class":152},"GoogLeNet(Inception).to(device)\n",[142,42942,42943,42945,42947,42949,42951,42953,42955,42957],{"class":144,"line":16961},[142,42944,31328],{"class":201},[142,42946,31331],{"class":152},[142,42948,370],{"class":201},[142,42950,531],{"class":152},[142,42952,31530],{"class":201},[142,42954,531],{"class":152},[142,42956,31530],{"class":201},[142,42958,31344],{"class":152},[96,42960,42961],{"start":64},[99,42962,39212],{},[133,42964,42966],{"className":30407,"code":42965,"language":30409,"meta":31,"style":31},"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",[139,42967,42968,42974,42980,42990,42996,43006,43016,43026,43036,43046,43050,43061,43071,43075,43079,43083,43091,43103,43113,43129,43139,43171,43185,43195,43205,43209,43219,43233,43243,43253,43263,43269,43273,43277,43281,43285,43289,43297,43317,43321,43325,43329,43333,43337,43353,43357,43361,43369,43373,43377,43385,43389,43393,43397,43405,43409,43413,43417,43421,43429,43433,43441,43445,43453,43457,43465,43469,43477,43481,43485,43493,43497,43501,43505,43517,43541,43555,43559,43563,43567,43575,43579,43587,43591,43599,43603,43611,43615,43623,43627,43635,43639,43651,43655,43663,43667,43675,43679,43683,43687,43691,43699,43703,43719,43723,43731,43735,43739,43743,43747,43751,43755,43759,43775,43779,43791,43795,43807,43811,43823,43827,43835,43839,43847,43851,43855,43859,43865,43869,43877,43881,43897,43901,43909,43913,43929,43941,43945,43957,43961,43965,43973,43977,43981,43989,43993,44001,44005,44013,44017,44021,44063,44105,44109,44113,44129,44133,44149,44153,44157,44165,44169,44173,44185,44223,44227,44231,44239,44243,44257,44267,44273,44279,44285,44291,44295,44299,44305,44309,44313,44321,44325,44343,44347,44351,44355,44371,44375,44379,44383,44387,44391,44411,44431,44435,44439,44443,44451,44459,44463,44479,44499,44519,44523,44527,44535,44543,44547,44551,44555,44567,44571,44581,44589,44606],{"__ignoreMap":31},[142,42969,42970,42972],{"class":144,"line":145},[142,42971,30421],{"class":148},[142,42973,31851],{"class":152},[142,42975,42976,42978],{"class":144,"line":64},[142,42977,30421],{"class":148},[142,42979,31858],{"class":152},[142,42981,42982,42984,42986,42988],{"class":144,"line":1208},[142,42983,30421],{"class":148},[142,42985,31869],{"class":152},[142,42987,31412],{"class":148},[142,42989,31874],{"class":152},[142,42991,42992,42994],{"class":144,"line":1223},[142,42993,30421],{"class":148},[142,42995,30424],{"class":152},[142,42997,42998,43000,43002,43004],{"class":144,"line":1229},[142,42999,30766],{"class":148},[142,43001,31444],{"class":152},[142,43003,30421],{"class":148},[142,43005,31891],{"class":152},[142,43007,43008,43010,43012,43014],{"class":144,"line":1243},[142,43009,30766],{"class":148},[142,43011,31397],{"class":152},[142,43013,30421],{"class":148},[142,43015,31402],{"class":152},[142,43017,43018,43020,43022,43024],{"class":144,"line":1249},[142,43019,30766],{"class":148},[142,43021,31427],{"class":152},[142,43023,30421],{"class":148},[142,43025,31432],{"class":152},[142,43027,43028,43030,43032,43034],{"class":144,"line":1340},[142,43029,30421],{"class":148},[142,43031,31444],{"class":152},[142,43033,31412],{"class":148},[142,43035,31449],{"class":152},[142,43037,43038,43040,43042,43044],{"class":144,"line":1346},[142,43039,30421],{"class":148},[142,43041,31461],{"class":152},[142,43043,31412],{"class":148},[142,43045,31466],{"class":152},[142,43047,43048],{"class":144,"line":1358},[142,43049,31936],{"class":211},[142,43051,43052,43054,43056,43058],{"class":144,"line":1640},[142,43053,30766],{"class":148},[142,43055,31943],{"class":152},[142,43057,30421],{"class":148},[142,43059,43060],{"class":152}," GoogLeNet, Inception\n",[142,43062,43063,43065,43067,43069],{"class":144,"line":1645},[142,43064,30766],{"class":148},[142,43066,30769],{"class":152},[142,43068,30421],{"class":148},[142,43070,30774],{"class":152},[142,43072,43073],{"class":144,"line":1651},[142,43074,2428],{"emptyLinePlaceholder":69},[142,43076,43077],{"class":144,"line":1656},[142,43078,2428],{"emptyLinePlaceholder":69},[142,43080,43081],{"class":144,"line":1670},[142,43082,31971],{"class":211},[142,43084,43085,43087,43089],{"class":144,"line":1675},[142,43086,31976],{"class":148},[142,43088,31979],{"class":1991},[142,43090,31982],{"class":152},[142,43092,43093,43095,43097,43099,43101],{"class":144,"line":1681},[142,43094,31987],{"class":152},[142,43096,198],{"class":148},[142,43098,31484],{"class":152},[142,43100,31492],{"class":257},[142,43102,31495],{"class":152},[142,43104,43105,43107,43109,43111],{"class":144,"line":1702},[142,43106,32000],{"class":5245},[142,43108,198],{"class":148},[142,43110,31505],{"class":201},[142,43112,31495],{"class":152},[142,43114,43115,43117,43119,43121,43123,43125,43127],{"class":144,"line":1707},[142,43116,32011],{"class":5245},[142,43118,198],{"class":148},[142,43120,31522],{"class":152},[142,43122,31525],{"class":5245},[142,43124,198],{"class":148},[142,43126,35478],{"class":201},[142,43128,31533],{"class":152},[142,43130,43131,43133,43135,43137],{"class":144,"line":1721},[142,43132,32028],{"class":5245},[142,43134,198],{"class":148},[142,43136,31505],{"class":201},[142,43138,159],{"class":152},[142,43140,43141,43143,43145,43147,43149,43151,43153,43155,43157,43159,43161,43163,43165,43167,43169],{"class":144,"line":1726},[142,43142,32039],{"class":152},[142,43144,198],{"class":148},[142,43146,32044],{"class":152},[142,43148,32047],{"class":201},[142,43150,153],{"class":152},[142,43152,32052],{"class":201},[142,43154,608],{"class":148},[142,43156,7387],{"class":201},[142,43158,32059],{"class":152},[142,43160,32047],{"class":201},[142,43162,153],{"class":152},[142,43164,32066],{"class":201},[142,43166,608],{"class":148},[142,43168,7387],{"class":201},[142,43170,32073],{"class":152},[142,43172,43173,43175,43177,43179,43181,43183],{"class":144,"line":1755},[142,43174,32078],{"class":152},[142,43176,198],{"class":148},[142,43178,32083],{"class":152},[142,43180,31566],{"class":5245},[142,43182,198],{"class":148},[142,43184,31571],{"class":152},[142,43186,43187,43189,43191,43193],{"class":144,"line":1760},[142,43188,32094],{"class":5245},[142,43190,198],{"class":148},[142,43192,350],{"class":201},[142,43194,31495],{"class":152},[142,43196,43197,43199,43201,43203],{"class":144,"line":1777},[142,43198,32106],{"class":5245},[142,43200,198],{"class":148},[142,43202,31505],{"class":201},[142,43204,31495],{"class":152},[142,43206,43207],{"class":144,"line":1782},[142,43208,32117],{"class":211},[142,43210,43211,43213,43215,43217],{"class":144,"line":1787},[142,43212,32122],{"class":5245},[142,43214,198],{"class":148},[142,43216,548],{"class":201},[142,43218,159],{"class":152},[142,43220,43221,43223,43225,43227,43229,43231],{"class":144,"line":1792},[142,43222,32133],{"class":152},[142,43224,198],{"class":148},[142,43226,31563],{"class":152},[142,43228,31566],{"class":5245},[142,43230,198],{"class":148},[142,43232,32144],{"class":152},[142,43234,43235,43237,43239,43241],{"class":144,"line":1806},[142,43236,32149],{"class":5245},[142,43238,198],{"class":148},[142,43240,350],{"class":201},[142,43242,31495],{"class":152},[142,43244,43245,43247,43249,43251],{"class":144,"line":1811},[142,43246,32160],{"class":5245},[142,43248,198],{"class":148},[142,43250,31505],{"class":201},[142,43252,31495],{"class":152},[142,43254,43255,43257,43259,43261],{"class":144,"line":2605},[142,43256,32171],{"class":5245},[142,43258,198],{"class":148},[142,43260,548],{"class":201},[142,43262,159],{"class":152},[142,43264,43265,43267],{"class":144,"line":2619},[142,43266,4118],{"class":148},[142,43268,32184],{"class":152},[142,43270,43271],{"class":144,"line":2627},[142,43272,2428],{"emptyLinePlaceholder":69},[142,43274,43275],{"class":144,"line":2632},[142,43276,32193],{"class":211},[142,43278,43279],{"class":144,"line":2638},[142,43280,32198],{"class":211},[142,43282,43283],{"class":144,"line":2644},[142,43284,2428],{"emptyLinePlaceholder":69},[142,43286,43287],{"class":144,"line":2649},[142,43288,32207],{"class":211},[142,43290,43291,43293,43295],{"class":144,"line":7977},[142,43292,31976],{"class":148},[142,43294,32214],{"class":1991},[142,43296,32217],{"class":152},[142,43298,43299,43301,43303,43305,43307,43309,43311,43313,43315],{"class":144,"line":8001},[142,43300,31266],{"class":152},[142,43302,198],{"class":148},[142,43304,30480],{"class":152},[142,43306,31273],{"class":257},[142,43308,1732],{"class":148},[142,43310,31278],{"class":152},[142,43312,1729],{"class":148},[142,43314,32236],{"class":257},[142,43316,159],{"class":152},[142,43318,43319],{"class":144,"line":8006},[142,43320,2428],{"emptyLinePlaceholder":69},[142,43322,43323],{"class":144,"line":8012},[142,43324,2428],{"emptyLinePlaceholder":69},[142,43326,43327],{"class":144,"line":8039},[142,43328,32251],{"class":211},[142,43330,43331],{"class":144,"line":8044},[142,43332,32256],{"class":211},[142,43334,43335],{"class":144,"line":8050},[142,43336,32261],{"class":211},[142,43338,43339,43341,43343,43345,43347,43349,43351],{"class":144,"line":8062},[142,43340,32266],{"class":152},[142,43342,198],{"class":148},[142,43344,32271],{"class":152},[142,43346,32274],{"class":5245},[142,43348,198],{"class":148},[142,43350,32279],{"class":201},[142,43352,159],{"class":152},[142,43354,43355],{"class":144,"line":8074},[142,43356,2428],{"emptyLinePlaceholder":69},[142,43358,43359],{"class":144,"line":8086},[142,43360,32290],{"class":211},[142,43362,43363,43365,43367],{"class":144,"line":9745},[142,43364,32295],{"class":152},[142,43366,198],{"class":148},[142,43368,32300],{"class":152},[142,43370,43371],{"class":144,"line":9770},[142,43372,2428],{"emptyLinePlaceholder":69},[142,43374,43375],{"class":144,"line":9793},[142,43376,32309],{"class":211},[142,43378,43379,43381,43383],{"class":144,"line":9817},[142,43380,31318],{"class":152},[142,43382,198],{"class":148},[142,43384,32318],{"class":152},[142,43386,43387],{"class":144,"line":9822},[142,43388,32323],{"class":211},[142,43390,43391],{"class":144,"line":9827},[142,43392,32328],{"class":211},[142,43394,43395],{"class":144,"line":9832},[142,43396,32333],{"class":211},[142,43398,43399,43401,43403],{"class":144,"line":9841},[142,43400,32338],{"class":152},[142,43402,198],{"class":148},[142,43404,32343],{"class":152},[142,43406,43407],{"class":144,"line":9846},[142,43408,2428],{"emptyLinePlaceholder":69},[142,43410,43411],{"class":144,"line":9852},[142,43412,2428],{"emptyLinePlaceholder":69},[142,43414,43415],{"class":144,"line":9873},[142,43416,32356],{"class":211},[142,43418,43419],{"class":144,"line":9879},[142,43420,32361],{"class":211},[142,43422,43423,43425,43427],{"class":144,"line":9893},[142,43424,32366],{"class":152},[142,43426,198],{"class":148},[142,43428,32371],{"class":201},[142,43430,43431],{"class":144,"line":9899},[142,43432,32376],{"class":211},[142,43434,43435,43437,43439],{"class":144,"line":9926},[142,43436,32381],{"class":152},[142,43438,198],{"class":148},[142,43440,32386],{"class":152},[142,43442,43443],{"class":144,"line":9935},[142,43444,32391],{"class":211},[142,43446,43447,43449,43451],{"class":144,"line":9941},[142,43448,32396],{"class":152},[142,43450,198],{"class":148},[142,43452,32386],{"class":152},[142,43454,43455],{"class":144,"line":9949},[142,43456,32405],{"class":211},[142,43458,43459,43461,43463],{"class":144,"line":9954},[142,43460,32410],{"class":152},[142,43462,198],{"class":148},[142,43464,32386],{"class":152},[142,43466,43467],{"class":144,"line":16633},[142,43468,32419],{"class":211},[142,43470,43471,43473,43475],{"class":144,"line":16639},[142,43472,32424],{"class":152},[142,43474,198],{"class":148},[142,43476,32386],{"class":152},[142,43478,43479],{"class":144,"line":16662},[142,43480,2428],{"emptyLinePlaceholder":69},[142,43482,43483],{"class":144,"line":16668},[142,43484,32437],{"class":211},[142,43486,43487,43489,43491],{"class":144,"line":16691},[142,43488,32442],{"class":152},[142,43490,198],{"class":148},[142,43492,32447],{"class":152},[142,43494,43495],{"class":144,"line":16705},[142,43496,2428],{"emptyLinePlaceholder":69},[142,43498,43499],{"class":144,"line":16725},[142,43500,2428],{"emptyLinePlaceholder":69},[142,43502,43503],{"class":144,"line":16731},[142,43504,32460],{"class":211},[142,43506,43507,43509,43511,43513,43515],{"class":144,"line":16742},[142,43508,3229],{"class":148},[142,43510,32467],{"class":152},[142,43512,26072],{"class":148},[142,43514,32472],{"class":201},[142,43516,32475],{"class":152},[142,43518,43519,43521,43523,43525,43527,43529,43531,43533,43535,43537,43539],{"class":144,"line":16765},[142,43520,32480],{"class":201},[142,43522,153],{"class":152},[142,43524,32485],{"class":257},[142,43526,32488],{"class":201},[142,43528,737],{"class":257},[142,43530,32488],{"class":201},[142,43532,404],{"class":257},[142,43534,32497],{"class":152},[142,43536,685],{"class":148},[142,43538,370],{"class":201},[142,43540,30526],{"class":152},[142,43542,43543,43545,43547,43549,43551,43553],{"class":144,"line":16787},[142,43544,32480],{"class":201},[142,43546,153],{"class":152},[142,43548,32512],{"class":257},[142,43550,608],{"class":148},[142,43552,599],{"class":201},[142,43554,159],{"class":152},[142,43556,43557],{"class":144,"line":16792},[142,43558,2428],{"emptyLinePlaceholder":69},[142,43560,43561],{"class":144,"line":16798},[142,43562,32527],{"class":211},[142,43564,43565],{"class":144,"line":16812},[142,43566,32532],{"class":211},[142,43568,43569,43571,43573],{"class":144,"line":16825},[142,43570,32537],{"class":152},[142,43572,198],{"class":148},[142,43574,32371],{"class":201},[142,43576,43577],{"class":144,"line":16830},[142,43578,32546],{"class":211},[142,43580,43581,43583,43585],{"class":144,"line":16844},[142,43582,32551],{"class":152},[142,43584,198],{"class":148},[142,43586,3113],{"class":201},[142,43588,43589],{"class":144,"line":16849},[142,43590,32560],{"class":211},[142,43592,43593,43595,43597],{"class":144,"line":16855},[142,43594,32565],{"class":152},[142,43596,198],{"class":148},[142,43598,32371],{"class":201},[142,43600,43601],{"class":144,"line":16860},[142,43602,32574],{"class":211},[142,43604,43605,43607,43609],{"class":144,"line":16874},[142,43606,32579],{"class":152},[142,43608,198],{"class":148},[142,43610,3113],{"class":201},[142,43612,43613],{"class":144,"line":16879},[142,43614,32588],{"class":211},[142,43616,43617,43619,43621],{"class":144,"line":16884},[142,43618,32593],{"class":152},[142,43620,198],{"class":148},[142,43622,3113],{"class":201},[142,43624,43625],{"class":144,"line":16898},[142,43626,32602],{"class":211},[142,43628,43629,43631,43633],{"class":144,"line":16910},[142,43630,32607],{"class":152},[142,43632,198],{"class":148},[142,43634,3113],{"class":201},[142,43636,43637],{"class":144,"line":16915},[142,43638,32616],{"class":211},[142,43640,43641,43643,43645,43647,43649],{"class":144,"line":16928},[142,43642,3431],{"class":148},[142,43644,31630],{"class":152},[142,43646,26072],{"class":148},[142,43648,31635],{"class":201},[142,43650,32629],{"class":152},[142,43652,43653],{"class":144,"line":16933},[142,43654,32634],{"class":211},[142,43656,43657,43659,43661],{"class":144,"line":16938},[142,43658,32639],{"class":152},[142,43660,198],{"class":148},[142,43662,32644],{"class":152},[142,43664,43665],{"class":144,"line":16943},[142,43666,32649],{"class":211},[142,43668,43669,43671,43673],{"class":144,"line":16956},[142,43670,32654],{"class":152},[142,43672,198],{"class":148},[142,43674,32659],{"class":152},[142,43676,43677],{"class":144,"line":16961},[142,43678,32665],{"class":211},[142,43680,43681],{"class":144,"line":32662},[142,43682,32671],{"class":152},[142,43684,43685],{"class":144,"line":32668},[142,43686,32677],{"class":211},[142,43688,43689],{"class":144,"line":32674},[142,43690,32683],{"class":211},[142,43692,43693,43695,43697],{"class":144,"line":32680},[142,43694,32689],{"class":152},[142,43696,198],{"class":148},[142,43698,32694],{"class":152},[142,43700,43701],{"class":144,"line":32686},[142,43702,32700],{"class":211},[142,43704,43705,43707,43709,43711,43713,43715,43717],{"class":144,"line":32697},[142,43706,32706],{"class":152},[142,43708,198],{"class":148},[142,43710,32711],{"class":152},[142,43712,32714],{"class":5245},[142,43714,198],{"class":148},[142,43716,370],{"class":201},[142,43718,159],{"class":152},[142,43720,43721],{"class":144,"line":32703},[142,43722,32726],{"class":211},[142,43724,43725,43727,43729],{"class":144,"line":32723},[142,43726,32732],{"class":152},[142,43728,198],{"class":148},[142,43730,32737],{"class":152},[142,43732,43733],{"class":144,"line":32729},[142,43734,32743],{"class":211},[142,43736,43737],{"class":144,"line":32740},[142,43738,32749],{"class":152},[142,43740,43741],{"class":144,"line":32746},[142,43742,32755],{"class":211},[142,43744,43745],{"class":144,"line":32752},[142,43746,32761],{"class":152},[142,43748,43749],{"class":144,"line":32758},[142,43750,32767],{"class":211},[142,43752,43753],{"class":144,"line":32764},[142,43754,32773],{"class":152},[142,43756,43757],{"class":144,"line":32770},[142,43758,32779],{"class":211},[142,43760,43761,43763,43765,43767,43769,43771,43773],{"class":144,"line":32776},[142,43762,32785],{"class":152},[142,43764,9506],{"class":148},[142,43766,32790],{"class":152},[142,43768,608],{"class":148},[142,43770,32795],{"class":152},[142,43772,344],{"class":201},[142,43774,159],{"class":152},[142,43776,43777],{"class":144,"line":32782},[142,43778,32805],{"class":211},[142,43780,43781,43783,43785,43787,43789],{"class":144,"line":32802},[142,43782,32811],{"class":152},[142,43784,9506],{"class":148},[142,43786,32816],{"class":152},[142,43788,2977],{"class":148},[142,43790,32821],{"class":152},[142,43792,43793],{"class":144,"line":32808},[142,43794,32827],{"class":211},[142,43796,43797,43799,43801,43803,43805],{"class":144,"line":32824},[142,43798,32833],{"class":152},[142,43800,9506],{"class":148},[142,43802,32795],{"class":152},[142,43804,344],{"class":201},[142,43806,159],{"class":152},[142,43808,43809],{"class":144,"line":32830},[142,43810,32847],{"class":211},[142,43812,43813,43815,43817,43819,43821],{"class":144,"line":32844},[142,43814,3431],{"class":148},[142,43816,32855],{"class":152},[142,43818,26072],{"class":148},[142,43820,31635],{"class":201},[142,43822,32862],{"class":152},[142,43824,43825],{"class":144,"line":32850},[142,43826,32868],{"class":211},[142,43828,43829,43831,43833],{"class":144,"line":32865},[142,43830,32639],{"class":152},[142,43832,198],{"class":148},[142,43834,32644],{"class":152},[142,43836,43837],{"class":144,"line":32871},[142,43838,32883],{"class":211},[142,43840,43841,43843,43845],{"class":144,"line":32880},[142,43842,32654],{"class":152},[142,43844,198],{"class":148},[142,43846,32659],{"class":152},[142,43848,43849],{"class":144,"line":32886},[142,43850,32898],{"class":211},[142,43852,43853],{"class":144,"line":32895},[142,43854,32904],{"class":152},[142,43856,43857],{"class":144,"line":32901},[142,43858,36385],{"class":211},[142,43860,43861,43863],{"class":144,"line":32907},[142,43862,32910],{"class":148},[142,43864,32913],{"class":152},[142,43866,43867],{"class":144,"line":32916},[142,43868,32919],{"class":211},[142,43870,43871,43873,43875],{"class":144,"line":32922},[142,43872,36400],{"class":152},[142,43874,198],{"class":148},[142,43876,32694],{"class":152},[142,43878,43879],{"class":144,"line":32933},[142,43880,32936],{"class":211},[142,43882,43883,43885,43887,43889,43891,43893,43895],{"class":144,"line":32939},[142,43884,36413],{"class":152},[142,43886,198],{"class":148},[142,43888,32711],{"class":152},[142,43890,32714],{"class":5245},[142,43892,198],{"class":148},[142,43894,370],{"class":201},[142,43896,159],{"class":152},[142,43898,43899],{"class":144,"line":32958},[142,43900,32961],{"class":211},[142,43902,43903,43905,43907],{"class":144,"line":32964},[142,43904,36434],{"class":152},[142,43906,198],{"class":148},[142,43908,32737],{"class":152},[142,43910,43911],{"class":144,"line":32975},[142,43912,32978],{"class":211},[142,43914,43915,43917,43919,43921,43923,43925,43927],{"class":144,"line":32981},[142,43916,36447],{"class":152},[142,43918,9506],{"class":148},[142,43920,36452],{"class":152},[142,43922,608],{"class":148},[142,43924,32795],{"class":152},[142,43926,344],{"class":201},[142,43928,159],{"class":152},[142,43930,43931,43933,43935,43937,43939],{"class":144,"line":33001},[142,43932,36465],{"class":152},[142,43934,9506],{"class":148},[142,43936,32816],{"class":152},[142,43938,2977],{"class":148},[142,43940,32821],{"class":152},[142,43942,43943],{"class":144,"line":33017},[142,43944,36478],{"class":211},[142,43946,43947,43949,43951,43953,43955],{"class":144,"line":33023},[142,43948,36483],{"class":152},[142,43950,9506],{"class":148},[142,43952,32795],{"class":152},[142,43954,344],{"class":201},[142,43956,159],{"class":152},[142,43958,43959],{"class":144,"line":33037},[142,43960,33040],{"class":211},[142,43962,43963],{"class":144,"line":33043},[142,43964,33046],{"class":211},[142,43966,43967,43969,43971],{"class":144,"line":33049},[142,43968,33052],{"class":152},[142,43970,737],{"class":148},[142,43972,33057],{"class":152},[142,43974,43975],{"class":144,"line":33060},[142,43976,33063],{"class":211},[142,43978,43979],{"class":144,"line":33066},[142,43980,33069],{"class":211},[142,43982,43983,43985,43987],{"class":144,"line":33072},[142,43984,33075],{"class":152},[142,43986,737],{"class":148},[142,43988,33057],{"class":152},[142,43990,43991],{"class":144,"line":33082},[142,43992,33085],{"class":211},[142,43994,43995,43997,43999],{"class":144,"line":33088},[142,43996,33091],{"class":152},[142,43998,737],{"class":148},[142,44000,33096],{"class":152},[142,44002,44003],{"class":144,"line":33099},[142,44004,33102],{"class":211},[142,44006,44007,44009,44011],{"class":144,"line":33105},[142,44008,33108],{"class":152},[142,44010,737],{"class":148},[142,44012,33096],{"class":152},[142,44014,44015],{"class":144,"line":33115},[142,44016,2428],{"emptyLinePlaceholder":69},[142,44018,44019],{"class":144,"line":33120},[142,44020,33123],{"class":211},[142,44022,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053,44055,44057,44059,44061],{"class":144,"line":33126},[142,44024,32480],{"class":201},[142,44026,153],{"class":152},[142,44028,3620],{"class":257},[142,44030,32488],{"class":201},[142,44032,33137],{"class":257},[142,44034,1049],{"class":201},[142,44036,33142],{"class":148},[142,44038,1099],{"class":201},[142,44040,33147],{"class":257},[142,44042,1049],{"class":201},[142,44044,33142],{"class":148},[142,44046,1099],{"class":201},[142,44048,3620],{"class":257},[142,44050,33158],{"class":152},[142,44052,685],{"class":148},[142,44054,370],{"class":201},[142,44056,33165],{"class":152},[142,44058,685],{"class":148},[142,44060,370],{"class":201},[142,44062,33172],{"class":152},[142,44064,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083,44085,44087,44089,44091,44093,44095,44097,44099,44101,44103],{"class":144,"line":33175},[142,44066,32480],{"class":201},[142,44068,153],{"class":152},[142,44070,3620],{"class":257},[142,44072,32488],{"class":201},[142,44074,33186],{"class":257},[142,44076,1049],{"class":201},[142,44078,33142],{"class":148},[142,44080,1099],{"class":201},[142,44082,33195],{"class":257},[142,44084,1049],{"class":201},[142,44086,33142],{"class":148},[142,44088,1099],{"class":201},[142,44090,3620],{"class":257},[142,44092,33206],{"class":152},[142,44094,685],{"class":148},[142,44096,370],{"class":201},[142,44098,33213],{"class":152},[142,44100,685],{"class":148},[142,44102,370],{"class":201},[142,44104,33172],{"class":152},[142,44106,44107],{"class":144,"line":33222},[142,44108,2428],{"emptyLinePlaceholder":69},[142,44110,44111],{"class":144,"line":33227},[142,44112,33230],{"class":211},[142,44114,44115,44117,44119,44121,44123,44125,44127],{"class":144,"line":33233},[142,44116,2525],{"class":148},[142,44118,33238],{"class":152},[142,44120,685],{"class":148},[142,44122,370],{"class":201},[142,44124,1093],{"class":152},[142,44126,1113],{"class":148},[142,44128,33249],{"class":152},[142,44130,44131],{"class":144,"line":33252},[142,44132,33255],{"class":211},[142,44134,44135,44137,44139,44141,44143,44145,44147],{"class":144,"line":33258},[142,44136,33261],{"class":152},[142,44138,192],{"class":201},[142,44140,198],{"class":148},[142,44142,33268],{"class":152},[142,44144,685],{"class":148},[142,44146,370],{"class":201},[142,44148,33275],{"class":152},[142,44150,44151],{"class":144,"line":33278},[142,44152,33281],{"class":211},[142,44154,44155],{"class":144,"line":33284},[142,44156,33287],{"class":211},[142,44158,44159,44161,44163],{"class":144,"line":33290},[142,44160,33293],{"class":152},[142,44162,198],{"class":148},[142,44164,32343],{"class":152},[142,44166,44167],{"class":144,"line":33300},[142,44168,2428],{"emptyLinePlaceholder":69},[142,44170,44171],{"class":144,"line":33305},[142,44172,33308],{"class":211},[142,44174,44175,44177,44179,44181,44183],{"class":144,"line":33311},[142,44176,33314],{"class":152},[142,44178,198],{"class":148},[142,44180,33319],{"class":152},[142,44182,685],{"class":148},[142,44184,33324],{"class":152},[142,44186,44187,44189,44191,44193,44195,44197,44199,44201,44203,44205,44207,44209,44211,44213,44215,44217,44219,44221],{"class":144,"line":33327},[142,44188,32480],{"class":201},[142,44190,153],{"class":152},[142,44192,33334],{"class":257},[142,44194,1049],{"class":201},[142,44196,33339],{"class":148},[142,44198,1099],{"class":201},[142,44200,697],{"class":257},[142,44202,1049],{"class":201},[142,44204,33339],{"class":148},[142,44206,1099],{"class":201},[142,44208,33352],{"class":257},[142,44210,33355],{"class":152},[142,44212,33358],{"class":148},[142,44214,1060],{"class":201},[142,44216,33363],{"class":152},[142,44218,481],{"class":148},[142,44220,1060],{"class":201},[142,44222,30526],{"class":152},[142,44224,44225],{"class":144,"line":33372},[142,44226,36762],{"class":211},[142,44228,44229],{"class":144,"line":33378},[142,44230,36767],{"class":211},[142,44232,44233,44235,44237],{"class":144,"line":33384},[142,44234,36772],{"class":152},[142,44236,33396],{"class":257},[142,44238,159],{"class":152},[142,44240,44241],{"class":144,"line":33390},[142,44242,33416],{"class":211},[142,44244,44245,44247,44249,44251,44253,44255],{"class":144,"line":33401},[142,44246,33422],{"class":152},[142,44248,198],{"class":148},[142,44250,33427],{"class":152},[142,44252,33430],{"class":5245},[142,44254,198],{"class":148},[142,44256,1574],{"class":152},[142,44258,44259,44261,44263,44265],{"class":144,"line":33407},[142,44260,33440],{"class":257},[142,44262,1012],{"class":152},[142,44264,33445],{"class":201},[142,44266,33448],{"class":152},[142,44268,44269,44271],{"class":144,"line":33413},[142,44270,33454],{"class":257},[142,44272,33457],{"class":152},[142,44274,44275,44277],{"class":144,"line":33419},[142,44276,33463],{"class":257},[142,44278,33466],{"class":152},[142,44280,44281,44283],{"class":144,"line":33437},[142,44282,33472],{"class":257},[142,44284,33475],{"class":152},[142,44286,44287,44289],{"class":144,"line":33451},[142,44288,33481],{"class":257},[142,44290,33484],{"class":152},[142,44292,44293],{"class":144,"line":33460},[142,44294,33490],{"class":152},[142,44296,44297],{"class":144,"line":33469},[142,44298,33496],{"class":211},[142,44300,44301,44303],{"class":144,"line":33478},[142,44302,4118],{"class":148},[142,44304,33504],{"class":152},[142,44306,44307],{"class":144,"line":33487},[142,44308,2428],{"emptyLinePlaceholder":69},[142,44310,44311],{"class":144,"line":33493},[142,44312,33515],{"class":211},[142,44314,44315,44317,44319],{"class":144,"line":33499},[142,44316,31976],{"class":148},[142,44318,33523],{"class":1991},[142,44320,33526],{"class":152},[142,44322,44323],{"class":144,"line":33507},[142,44324,33532],{"class":211},[142,44326,44327,44329,44331,44333,44335,44337,44339,44341],{"class":144,"line":33512},[142,44328,33538],{"class":152},[142,44330,31722],{"class":5245},[142,44332,198],{"class":148},[142,44334,153],{"class":152},[142,44336,651],{"class":201},[142,44338,531],{"class":152},[142,44340,446],{"class":201},[142,44342,30526],{"class":152},[142,44344,44345],{"class":144,"line":33518},[142,44346,33558],{"class":211},[142,44348,44349],{"class":144,"line":33529},[142,44350,33564],{"class":211},[142,44352,44353],{"class":144,"line":33535},[142,44354,33570],{"class":211},[142,44356,44357,44359,44361,44363,44365,44367,44369],{"class":144,"line":33555},[142,44358,31756],{"class":152},[142,44360,370],{"class":201},[142,44362,531],{"class":152},[142,44364,230],{"class":201},[142,44366,531],{"class":152},[142,44368,370],{"class":201},[142,44370,159],{"class":152},[142,44372,44373],{"class":144,"line":33561},[142,44374,33593],{"class":211},[142,44376,44377],{"class":144,"line":33567},[142,44378,33599],{"class":211},[142,44380,44381],{"class":144,"line":33573},[142,44382,33605],{"class":211},[142,44384,44385],{"class":144,"line":33590},[142,44386,33611],{"class":211},[142,44388,44389],{"class":144,"line":33596},[142,44390,33617],{"class":211},[142,44392,44393,44395,44397,44399,44401,44403,44405,44407,44409],{"class":144,"line":33602},[142,44394,33623],{"class":152},[142,44396,33626],{"class":257},[142,44398,33629],{"class":152},[142,44400,33632],{"class":257},[142,44402,531],{"class":152},[142,44404,33637],{"class":5245},[142,44406,198],{"class":148},[142,44408,33642],{"class":257},[142,44410,159],{"class":152},[142,44412,44413,44415,44417,44419,44421,44423,44425,44427,44429],{"class":144,"line":33608},[142,44414,33623],{"class":152},[142,44416,33626],{"class":257},[142,44418,33654],{"class":152},[142,44420,33657],{"class":257},[142,44422,531],{"class":152},[142,44424,33637],{"class":5245},[142,44426,198],{"class":148},[142,44428,33666],{"class":257},[142,44430,159],{"class":152},[142,44432,44433],{"class":144,"line":33614},[142,44434,33674],{"class":211},[142,44436,44437],{"class":144,"line":33620},[142,44438,33680],{"class":152},[142,44440,44441],{"class":144,"line":33647},[142,44442,33686],{"class":211},[142,44444,44445,44447,44449],{"class":144,"line":33671},[142,44446,33692],{"class":152},[142,44448,33695],{"class":257},[142,44450,159],{"class":152},[142,44452,44453,44455,44457],{"class":144,"line":33677},[142,44454,33703],{"class":152},[142,44456,33706],{"class":257},[142,44458,159],{"class":152},[142,44460,44461],{"class":144,"line":33683},[142,44462,33714],{"class":211},[142,44464,44465,44467,44469,44471,44473,44475,44477],{"class":144,"line":33689},[142,44466,31756],{"class":152},[142,44468,370],{"class":201},[142,44470,531],{"class":152},[142,44472,230],{"class":201},[142,44474,531],{"class":152},[142,44476,230],{"class":201},[142,44478,159],{"class":152},[142,44480,44481,44483,44485,44487,44489,44491,44493,44495,44497],{"class":144,"line":33700},[142,44482,33623],{"class":152},[142,44484,33626],{"class":257},[142,44486,33741],{"class":152},[142,44488,33632],{"class":257},[142,44490,531],{"class":152},[142,44492,33637],{"class":5245},[142,44494,198],{"class":148},[142,44496,33752],{"class":257},[142,44498,159],{"class":152},[142,44500,44501,44503,44505,44507,44509,44511,44513,44515,44517],{"class":144,"line":33711},[142,44502,33623],{"class":152},[142,44504,33626],{"class":257},[142,44506,33764],{"class":152},[142,44508,33657],{"class":257},[142,44510,531],{"class":152},[142,44512,33637],{"class":5245},[142,44514,198],{"class":148},[142,44516,33775],{"class":257},[142,44518,159],{"class":152},[142,44520,44521],{"class":144,"line":33717},[142,44522,33783],{"class":211},[142,44524,44525],{"class":144,"line":33734},[142,44526,33680],{"class":152},[142,44528,44529,44531,44533],{"class":144,"line":33757},[142,44530,33692],{"class":152},[142,44532,33626],{"class":257},[142,44534,159],{"class":152},[142,44536,44537,44539,44541],{"class":144,"line":33780},[142,44538,33703],{"class":152},[142,44540,33805],{"class":257},[142,44542,159],{"class":152},[142,44544,44545],{"class":144,"line":33786},[142,44546,33813],{"class":152},[142,44548,44549],{"class":144,"line":33791},[142,44550,2428],{"emptyLinePlaceholder":69},[142,44552,44553],{"class":144,"line":33800},[142,44554,33824],{"class":211},[142,44556,44557,44559,44561,44563,44565],{"class":144,"line":33810},[142,44558,1559],{"class":148},[142,44560,31249],{"class":201},[142,44562,2977],{"class":148},[142,44564,31254],{"class":257},[142,44566,3767],{"class":152},[142,44568,44569],{"class":144,"line":33816},[142,44570,33843],{"class":211},[142,44572,44573,44576,44578],{"class":144,"line":33821},[142,44574,44575],{"class":152},"    GoogLeNet",[142,44577,198],{"class":148},[142,44579,44580],{"class":152},"GoogLeNet(Inception)\n",[142,44582,44583,44585,44587],{"class":144,"line":33827},[142,44584,33860],{"class":152},[142,44586,198],{"class":148},[142,44588,33865],{"class":152},[142,44590,44591,44593,44595,44598,44600,44602,44604],{"class":144,"line":33840},[142,44592,33422],{"class":152},[142,44594,198],{"class":148},[142,44596,44597],{"class":152},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[142,44599,33878],{"class":5245},[142,44601,198],{"class":148},[142,44603,1104],{"class":201},[142,44605,159],{"class":152},[142,44607,44608],{"class":144,"line":33846},[142,44609,33890],{"class":152},[96,44611,44612],{"start":1208},[99,44613,40603],{},[133,44615,44617],{"className":30407,"code":44616,"language":30409,"meta":31,"style":31},"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",[139,44618,44619,44625,44635,44645,44649,44659,44670,44674,44678,44682,44690,44706,44716,44732,44742,44756,44760,44770,44780,44790,44796,44800,44804,44812,44816,44832,44840,44844,44848,44856,44864,44868,44872,44876,44880,44886,44890,44900,44908,44916,44920,44924,44928,44936,44940,44956,44960,44964,44968,44980,44984,44996,45000,45004,45016,45020,45030,45034,45038,45050,45054,45062,45066,45070,45078,45082,45090,45094,45098,45102,45106,45110,45126,45134,45138,45142,45190,45196,45200,45210,45218,45226,45230,45234,45238,45242,45250,45254,45270,45274,45282,45290],{"__ignoreMap":31},[142,44620,44621,44623],{"class":144,"line":145},[142,44622,30421],{"class":148},[142,44624,30424],{"class":152},[142,44626,44627,44629,44631,44633],{"class":144,"line":64},[142,44628,30421],{"class":148},[142,44630,31444],{"class":152},[142,44632,31412],{"class":148},[142,44634,31449],{"class":152},[142,44636,44637,44639,44641,44643],{"class":144,"line":1208},[142,44638,30766],{"class":148},[142,44640,31427],{"class":152},[142,44642,30421],{"class":148},[142,44644,31432],{"class":152},[142,44646,44647],{"class":144,"line":1223},[142,44648,33951],{"class":211},[142,44650,44651,44653,44655,44657],{"class":144,"line":1229},[142,44652,30766],{"class":148},[142,44654,31397],{"class":152},[142,44656,30421],{"class":148},[142,44658,31402],{"class":152},[142,44660,44661,44663,44665,44667],{"class":144,"line":1243},[142,44662,30766],{"class":148},[142,44664,31943],{"class":152},[142,44666,30421],{"class":148},[142,44668,44669],{"class":152}," GoogLeNet,Inception\n",[142,44671,44672],{"class":144,"line":1249},[142,44673,2428],{"emptyLinePlaceholder":69},[142,44675,44676],{"class":144,"line":1340},[142,44677,2428],{"emptyLinePlaceholder":69},[142,44679,44680],{"class":144,"line":1346},[142,44681,33980],{"class":211},[142,44683,44684,44686,44688],{"class":144,"line":1358},[142,44685,31976],{"class":148},[142,44687,33987],{"class":1991},[142,44689,31982],{"class":152},[142,44691,44692,44694,44696,44698,44700,44702,44704],{"class":144,"line":1640},[142,44693,33994],{"class":152},[142,44695,198],{"class":148},[142,44697,31484],{"class":152},[142,44699,31487],{"class":5245},[142,44701,198],{"class":148},[142,44703,31492],{"class":257},[142,44705,31495],{"class":152},[142,44707,44708,44710,44712,44714],{"class":144,"line":1645},[142,44709,34011],{"class":5245},[142,44711,198],{"class":148},[142,44713,34016],{"class":201},[142,44715,31495],{"class":152},[142,44717,44718,44720,44722,44724,44726,44728,44730],{"class":144,"line":1651},[142,44719,34023],{"class":5245},[142,44721,198],{"class":148},[142,44723,31522],{"class":152},[142,44725,31525],{"class":5245},[142,44727,198],{"class":148},[142,44729,35478],{"class":201},[142,44731,31533],{"class":152},[142,44733,44734,44736,44738,44740],{"class":144,"line":1656},[142,44735,34040],{"class":5245},[142,44737,198],{"class":148},[142,44739,31505],{"class":201},[142,44741,159],{"class":152},[142,44743,44744,44746,44748,44750,44752,44754],{"class":144,"line":1670},[142,44745,34051],{"class":152},[142,44747,198],{"class":148},[142,44749,31563],{"class":152},[142,44751,31566],{"class":5245},[142,44753,198],{"class":148},[142,44755,34062],{"class":152},[142,44757,44758],{"class":144,"line":1675},[142,44759,34067],{"class":211},[142,44761,44762,44764,44766,44768],{"class":144,"line":1681},[142,44763,34072],{"class":5245},[142,44765,198],{"class":148},[142,44767,370],{"class":201},[142,44769,31495],{"class":152},[142,44771,44772,44774,44776,44778],{"class":144,"line":1702},[142,44773,34083],{"class":5245},[142,44775,198],{"class":148},[142,44777,31505],{"class":201},[142,44779,31495],{"class":152},[142,44781,44782,44784,44786,44788],{"class":144,"line":1707},[142,44783,34094],{"class":5245},[142,44785,198],{"class":148},[142,44787,344],{"class":201},[142,44789,159],{"class":152},[142,44791,44792,44794],{"class":144,"line":1721},[142,44793,4118],{"class":148},[142,44795,34107],{"class":152},[142,44797,44798],{"class":144,"line":1726},[142,44799,2428],{"emptyLinePlaceholder":69},[142,44801,44802],{"class":144,"line":1755},[142,44803,34116],{"class":211},[142,44805,44806,44808,44810],{"class":144,"line":1760},[142,44807,31976],{"class":148},[142,44809,34123],{"class":1991},[142,44811,34126],{"class":152},[142,44813,44814],{"class":144,"line":1777},[142,44815,34131],{"class":211},[142,44817,44818,44820,44822,44824,44826,44828,44830],{"class":144,"line":1782},[142,44819,31266],{"class":152},[142,44821,198],{"class":148},[142,44823,31273],{"class":257},[142,44825,1732],{"class":148},[142,44827,31278],{"class":152},[142,44829,1729],{"class":148},[142,44831,34148],{"class":257},[142,44833,44834,44836,44838],{"class":144,"line":1787},[142,44835,31318],{"class":152},[142,44837,198],{"class":148},[142,44839,32318],{"class":152},[142,44841,44842],{"class":144,"line":1792},[142,44843,2428],{"emptyLinePlaceholder":69},[142,44845,44846],{"class":144,"line":1806},[142,44847,34165],{"class":211},[142,44849,44850,44852,44854],{"class":144,"line":1811},[142,44851,34170],{"class":152},[142,44853,198],{"class":148},[142,44855,32371],{"class":201},[142,44857,44858,44860,44862],{"class":144,"line":2605},[142,44859,34179],{"class":152},[142,44861,198],{"class":148},[142,44863,3113],{"class":201},[142,44865,44866],{"class":144,"line":2619},[142,44867,2428],{"emptyLinePlaceholder":69},[142,44869,44870],{"class":144,"line":2627},[142,44871,34192],{"class":211},[142,44873,44874],{"class":144,"line":2632},[142,44875,34197],{"class":211},[142,44877,44878],{"class":144,"line":2638},[142,44879,34202],{"class":211},[142,44881,44882,44884],{"class":144,"line":2644},[142,44883,34207],{"class":148},[142,44885,32913],{"class":152},[142,44887,44888],{"class":144,"line":2649},[142,44889,34214],{"class":211},[142,44891,44892,44894,44896,44898],{"class":144,"line":7977},[142,44893,3431],{"class":148},[142,44895,34221],{"class":152},[142,44897,26072],{"class":148},[142,44899,34226],{"class":152},[142,44901,44902,44904,44906],{"class":144,"line":8001},[142,44903,34231],{"class":152},[142,44905,198],{"class":148},[142,44907,34236],{"class":152},[142,44909,44910,44912,44914],{"class":144,"line":8006},[142,44911,34241],{"class":152},[142,44913,198],{"class":148},[142,44915,34246],{"class":152},[142,44917,44918],{"class":144,"line":8012},[142,44919,34251],{"class":211},[142,44921,44922],{"class":144,"line":8039},[142,44923,32904],{"class":152},[142,44925,44926],{"class":144,"line":8044},[142,44927,34260],{"class":211},[142,44929,44930,44932,44934],{"class":144,"line":8050},[142,44931,32689],{"class":152},[142,44933,198],{"class":148},[142,44935,34269],{"class":152},[142,44937,44938],{"class":144,"line":8062},[142,44939,34274],{"class":211},[142,44941,44942,44944,44946,44948,44950,44952,44954],{"class":144,"line":8074},[142,44943,32706],{"class":152},[142,44945,198],{"class":148},[142,44947,32711],{"class":152},[142,44949,32714],{"class":5245},[142,44951,198],{"class":148},[142,44953,370],{"class":201},[142,44955,159],{"class":152},[142,44957,44958],{"class":144,"line":8086},[142,44959,34295],{"class":211},[142,44961,44962],{"class":144,"line":9745},[142,44963,34300],{"class":211},[142,44965,44966],{"class":144,"line":9770},[142,44967,34305],{"class":211},[142,44969,44970,44972,44974,44976,44978],{"class":144,"line":9793},[142,44971,34310],{"class":152},[142,44973,9506],{"class":148},[142,44975,32816],{"class":152},[142,44977,2977],{"class":148},[142,44979,34319],{"class":152},[142,44981,44982],{"class":144,"line":9817},[142,44983,34324],{"class":211},[142,44985,44986,44988,44990,44992,44994],{"class":144,"line":9822},[142,44987,34329],{"class":152},[142,44989,9506],{"class":148},[142,44991,34334],{"class":152},[142,44993,344],{"class":201},[142,44995,159],{"class":152},[142,44997,44998],{"class":144,"line":9827},[142,44999,2428],{"emptyLinePlaceholder":69},[142,45001,45002],{"class":144,"line":9832},[142,45003,34347],{"class":211},[142,45005,45006,45008,45010,45012,45014],{"class":144,"line":9841},[142,45007,34352],{"class":152},[142,45009,198],{"class":148},[142,45011,34357],{"class":152},[142,45013,737],{"class":148},[142,45015,34362],{"class":152},[142,45017,45018],{"class":144,"line":9846},[142,45019,34367],{"class":211},[142,45021,45022,45024,45026,45028],{"class":144,"line":9852},[142,45023,32480],{"class":201},[142,45025,153],{"class":152},[142,45027,34376],{"class":257},[142,45029,34379],{"class":152},[142,45031,45032],{"class":144,"line":9873},[142,45033,2428],{"emptyLinePlaceholder":69},[142,45035,45036],{"class":144,"line":9879},[142,45037,34388],{"class":211},[142,45039,45040,45042,45044,45046,45048],{"class":144,"line":9893},[142,45041,1559],{"class":148},[142,45043,31249],{"class":201},[142,45045,2977],{"class":148},[142,45047,31254],{"class":257},[142,45049,3767],{"class":152},[142,45051,45052],{"class":144,"line":9899},[142,45053,34405],{"class":211},[142,45055,45056,45058,45060],{"class":144,"line":9926},[142,45057,31318],{"class":152},[142,45059,198],{"class":148},[142,45061,44580],{"class":152},[142,45063,45064],{"class":144,"line":9935},[142,45065,34418],{"class":211},[142,45067,45068],{"class":144,"line":9941},[142,45069,34423],{"class":211},[142,45071,45072,45074,45076],{"class":144,"line":9949},[142,45073,34428],{"class":152},[142,45075,34431],{"class":257},[142,45077,30526],{"class":152},[142,45079,45080],{"class":144,"line":9954},[142,45081,34438],{"class":211},[142,45083,45084,45086,45088],{"class":144,"line":16633},[142,45085,34051],{"class":152},[142,45087,198],{"class":148},[142,45089,34447],{"class":152},[142,45091,45092],{"class":144,"line":16639},[142,45093,34452],{"class":211},[142,45095,45096],{"class":144,"line":16662},[142,45097,34457],{"class":152},[142,45099,45100],{"class":144,"line":16668},[142,45101,2428],{"emptyLinePlaceholder":69},[142,45103,45104],{"class":144,"line":16691},[142,45105,34466],{"class":211},[142,45107,45108],{"class":144,"line":16705},[142,45109,34471],{"class":211},[142,45111,45112,45114,45116,45118,45120,45122,45124],{"class":144,"line":16725},[142,45113,31266],{"class":152},[142,45115,198],{"class":148},[142,45117,31273],{"class":257},[142,45119,1732],{"class":148},[142,45121,31278],{"class":152},[142,45123,1729],{"class":148},[142,45125,34148],{"class":257},[142,45127,45128,45130,45132],{"class":144,"line":16731},[142,45129,31318],{"class":152},[142,45131,198],{"class":148},[142,45133,32318],{"class":152},[142,45135,45136],{"class":144,"line":16742},[142,45137,34500],{"class":211},[142,45139,45140],{"class":144,"line":16765},[142,45141,34505],{"class":211},[142,45143,45144,45146,45148,45150,45152,45154,45156,45158,45160,45162,45164,45166,45168,45170,45172,45174,45176,45178,45180,45182,45184,45186,45188],{"class":144,"line":16787},[142,45145,34510],{"class":152},[142,45147,198],{"class":148},[142,45149,1043],{"class":152},[142,45151,34517],{"class":257},[142,45153,531],{"class":152},[142,45155,34522],{"class":257},[142,45157,531],{"class":152},[142,45159,34527],{"class":257},[142,45161,531],{"class":152},[142,45163,34532],{"class":257},[142,45165,531],{"class":152},[142,45167,34537],{"class":257},[142,45169,531],{"class":152},[142,45171,34542],{"class":257},[142,45173,531],{"class":152},[142,45175,34547],{"class":257},[142,45177,531],{"class":152},[142,45179,34552],{"class":257},[142,45181,531],{"class":152},[142,45183,34557],{"class":257},[142,45185,531],{"class":152},[142,45187,34562],{"class":257},[142,45189,33275],{"class":152},[142,45191,45192,45194],{"class":144,"line":16792},[142,45193,34207],{"class":148},[142,45195,32913],{"class":152},[142,45197,45198],{"class":144,"line":16798},[142,45199,34575],{"class":211},[142,45201,45202,45204,45206,45208],{"class":144,"line":16812},[142,45203,3431],{"class":148},[142,45205,34582],{"class":152},[142,45207,26072],{"class":148},[142,45209,34226],{"class":152},[142,45211,45212,45214,45216],{"class":144,"line":16825},[142,45213,32639],{"class":152},[142,45215,198],{"class":148},[142,45217,32644],{"class":152},[142,45219,45220,45222,45224],{"class":144,"line":16830},[142,45221,32654],{"class":152},[142,45223,198],{"class":148},[142,45225,32659],{"class":152},[142,45227,45228],{"class":144,"line":16844},[142,45229,2428],{"emptyLinePlaceholder":69},[142,45231,45232],{"class":144,"line":16849},[142,45233,34611],{"class":211},[142,45235,45236],{"class":144,"line":16855},[142,45237,32904],{"class":152},[142,45239,45240],{"class":144,"line":16860},[142,45241,34620],{"class":211},[142,45243,45244,45246,45248],{"class":144,"line":16874},[142,45245,32689],{"class":152},[142,45247,198],{"class":148},[142,45249,32694],{"class":152},[142,45251,45252],{"class":144,"line":16879},[142,45253,34633],{"class":211},[142,45255,45256,45258,45260,45262,45264,45266,45268],{"class":144,"line":16884},[142,45257,32706],{"class":152},[142,45259,198],{"class":148},[142,45261,32711],{"class":152},[142,45263,32714],{"class":5245},[142,45265,198],{"class":148},[142,45267,370],{"class":201},[142,45269,159],{"class":152},[142,45271,45272],{"class":144,"line":16898},[142,45273,34654],{"class":211},[142,45275,45276,45278,45280],{"class":144,"line":16910},[142,45277,34659],{"class":152},[142,45279,198],{"class":148},[142,45281,34664],{"class":152},[142,45283,45284,45286,45288],{"class":144,"line":16915},[142,45285,34669],{"class":152},[142,45287,198],{"class":148},[142,45289,34674],{"class":152},[142,45291,45292,45294,45296,45298,45300,45302,45304,45306],{"class":144,"line":16928},[142,45293,34679],{"class":201},[142,45295,153],{"class":152},[142,45297,34684],{"class":257},[142,45299,34687],{"class":152},[142,45301,34690],{"class":257},[142,45303,531],{"class":152},[142,45305,34695],{"class":257},[142,45307,34698],{"class":152},[113,45309,45311],{"id":45310},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45313,45314],{},"猫狗分类任务",[14,45316,45317],{},"划分数据集和验证集",[133,45319,45321],{"className":30407,"code":45320,"language":30409,"meta":31,"style":31},"# 创建脚本，用于划分数据集和验证集\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",[139,45322,45323,45328,45335,45340,45351,45358,45362,45372,45386,45395,45399,45404,45414,45434,45438,45443,45453,45464,45477,45481,45486,45495,45505,45516,45520,45525,45535,45539,45544,45549,45554,45559,45564,45568,45578,45605,45618,45630,45657,45662,45667,45681,45686,45698,45713,45728,45736,45740,45745,45751,45763,45776,45781,45786,45791,45841,45847,45851],{"__ignoreMap":31},[142,45324,45325],{"class":144,"line":145},[142,45326,45327],{"class":211},"# 创建脚本，用于划分数据集和验证集\n",[142,45329,45330,45332],{"class":144,"line":64},[142,45331,30421],{"class":148},[142,45333,45334],{"class":152}," os\n",[142,45336,45337],{"class":144,"line":1208},[142,45338,45339],{"class":211},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[142,45341,45342,45344,45347,45349],{"class":144,"line":1223},[142,45343,30766],{"class":148},[142,45345,45346],{"class":152}," shutil ",[142,45348,30421],{"class":148},[142,45350,31851],{"class":152},[142,45352,45353,45355],{"class":144,"line":1229},[142,45354,30421],{"class":148},[142,45356,45357],{"class":152}," random\n",[142,45359,45360],{"class":144,"line":1243},[142,45361,2428],{"emptyLinePlaceholder":69},[142,45363,45364,45366,45369],{"class":144,"line":1249},[142,45365,31976],{"class":148},[142,45367,45368],{"class":1991}," mkfile",[142,45370,45371],{"class":152},"(file):\n",[142,45373,45374,45376,45378,45381,45384],{"class":144,"line":1340},[142,45375,3129],{"class":148},[142,45377,38959],{"class":148},[142,45379,45380],{"class":152}," os.path.exists(",[142,45382,45383],{"class":5245},"file",[142,45385,30815],{"class":152},[142,45387,45388,45391,45393],{"class":144,"line":1346},[142,45389,45390],{"class":152},"        os.makedirs(",[142,45392,45383],{"class":5245},[142,45394,159],{"class":152},[142,45396,45397],{"class":144,"line":1358},[142,45398,2428],{"emptyLinePlaceholder":69},[142,45400,45401],{"class":144,"line":1640},[142,45402,45403],{"class":211},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[142,45405,45406,45409,45411],{"class":144,"line":1645},[142,45407,45408],{"class":152},"file_path",[142,45410,198],{"class":148},[142,45412,45413],{"class":257},"'data_cat_dog'\n",[142,45415,45416,45419,45421,45424,45426,45429,45431],{"class":144,"line":1651},[142,45417,45418],{"class":152},"flower_class",[142,45420,198],{"class":148},[142,45422,45423],{"class":152},"[cla ",[142,45425,3053],{"class":148},[142,45427,45428],{"class":152}," cla ",[142,45430,26072],{"class":148},[142,45432,45433],{"class":152}," os.listdir(file_path)]\n",[142,45435,45436],{"class":144,"line":1656},[142,45437,2428],{"emptyLinePlaceholder":69},[142,45439,45440],{"class":144,"line":1670},[142,45441,45442],{"class":211},"# 创建训练集train文件夹\n",[142,45444,45445,45448,45451],{"class":144,"line":1675},[142,45446,45447],{"class":152},"mkfile(",[142,45449,45450],{"class":257},"'data\u002Ftrain'",[142,45452,159],{"class":152},[142,45454,45455,45457,45459,45461],{"class":144,"line":1681},[142,45456,3053],{"class":148},[142,45458,45428],{"class":152},[142,45460,26072],{"class":148},[142,45462,45463],{"class":152}," flower_class:\n",[142,45465,45466,45469,45472,45474],{"class":144,"line":1702},[142,45467,45468],{"class":152},"    mkfile(",[142,45470,45471],{"class":257},"'data\u002Ftrain\u002F'",[142,45473,634],{"class":148},[142,45475,45476],{"class":152},"cla)\n",[142,45478,45479],{"class":144,"line":1707},[142,45480,2428],{"emptyLinePlaceholder":69},[142,45482,45483],{"class":144,"line":1721},[142,45484,45485],{"class":211},"# 创建验证集val文件夹\n",[142,45487,45488,45490,45493],{"class":144,"line":1726},[142,45489,45447],{"class":152},[142,45491,45492],{"class":257},"'data\u002Ftest'",[142,45494,159],{"class":152},[142,45496,45497,45499,45501,45503],{"class":144,"line":1755},[142,45498,3053],{"class":148},[142,45500,45428],{"class":152},[142,45502,26072],{"class":148},[142,45504,45463],{"class":152},[142,45506,45507,45509,45512,45514],{"class":144,"line":1760},[142,45508,45468],{"class":152},[142,45510,45511],{"class":257},"'data\u002Ftest\u002F'",[142,45513,634],{"class":148},[142,45515,45476],{"class":152},[142,45517,45518],{"class":144,"line":1777},[142,45519,2428],{"emptyLinePlaceholder":69},[142,45521,45522],{"class":144,"line":1782},[142,45523,45524],{"class":211},"# 划分比例，训练集：测试集=9：1\n",[142,45526,45527,45530,45532],{"class":144,"line":1787},[142,45528,45529],{"class":152},"split_rate",[142,45531,198],{"class":148},[142,45533,45534],{"class":201},"0.1\n",[142,45536,45537],{"class":144,"line":1792},[142,45538,2428],{"emptyLinePlaceholder":69},[142,45540,45541],{"class":144,"line":1806},[142,45542,45543],{"class":211},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[142,45545,45546],{"class":144,"line":1811},[142,45547,45548],{"class":211},"# cla_path：当前类别的原始图片路径\n",[142,45550,45551],{"class":144,"line":2605},[142,45552,45553],{"class":211},"# images：当前类别下所有图片的文件名列表\n",[142,45555,45556],{"class":144,"line":2619},[142,45557,45558],{"class":211},"# num：该类别图片总数\n",[142,45560,45561],{"class":144,"line":2627},[142,45562,45563],{"class":211},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[142,45565,45566],{"class":144,"line":2632},[142,45567,2428],{"emptyLinePlaceholder":69},[142,45569,45570,45572,45574,45576],{"class":144,"line":2638},[142,45571,3053],{"class":148},[142,45573,45428],{"class":152},[142,45575,26072],{"class":148},[142,45577,45463],{"class":152},[142,45579,45580,45583,45585,45588,45590,45593,45596,45598,45600,45602],{"class":144,"line":2644},[142,45581,45582],{"class":152},"    cla_path ",[142,45584,198],{"class":148},[142,45586,45587],{"class":152}," file_path ",[142,45589,634],{"class":148},[142,45591,45592],{"class":257}," '\u002F'",[142,45594,45595],{"class":148}," +",[142,45597,45428],{"class":152},[142,45599,634],{"class":148},[142,45601,45592],{"class":257},[142,45603,45604],{"class":211},"  # 某一类别的子目录\n",[142,45606,45607,45610,45612,45615],{"class":144,"line":2649},[142,45608,45609],{"class":152},"    images ",[142,45611,198],{"class":148},[142,45613,45614],{"class":152}," os.listdir(cla_path)  ",[142,45616,45617],{"class":211},"# iamges 列表存储了该目录下所有图像的名称\n",[142,45619,45620,45623,45625,45627],{"class":144,"line":7977},[142,45621,45622],{"class":152},"    num ",[142,45624,198],{"class":148},[142,45626,7360],{"class":201},[142,45628,45629],{"class":152},"(images)\n",[142,45631,45632,45635,45637,45640,45642,45644,45646,45649,45651,45654],{"class":144,"line":8001},[142,45633,45634],{"class":152},"    eval_index ",[142,45636,198],{"class":148},[142,45638,45639],{"class":152}," random.sample(images, ",[142,45641,646],{"class":5245},[142,45643,198],{"class":148},[142,45645,156],{"class":201},[142,45647,45648],{"class":152},"(num ",[142,45650,608],{"class":148},[142,45652,45653],{"class":152}," split_rate))  ",[142,45655,45656],{"class":211},"# 从images列表中随机抽取 k 个图像名称\n",[142,45658,45659],{"class":144,"line":8006},[142,45660,45661],{"class":211},"    # 遍历该类别下的所有图片\n",[142,45663,45664],{"class":144,"line":8012},[142,45665,45666],{"class":211},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[142,45668,45669,45671,45674,45676,45678],{"class":144,"line":8039},[142,45670,3229],{"class":148},[142,45672,45673],{"class":152}," index, image ",[142,45675,26072],{"class":148},[142,45677,31635],{"class":201},[142,45679,45680],{"class":152},"(images):\n",[142,45682,45683],{"class":144,"line":8044},[142,45684,45685],{"class":211},"        # eval_index 中保存验证集val的图像名称\n",[142,45687,45688,45690,45693,45695],{"class":144,"line":8050},[142,45689,2525],{"class":148},[142,45691,45692],{"class":152}," image ",[142,45694,26072],{"class":148},[142,45696,45697],{"class":152}," eval_index:\n",[142,45699,45700,45703,45705,45708,45710],{"class":144,"line":8062},[142,45701,45702],{"class":152},"            image_path ",[142,45704,198],{"class":148},[142,45706,45707],{"class":152}," cla_path ",[142,45709,634],{"class":148},[142,45711,45712],{"class":152}," image\n",[142,45714,45715,45718,45720,45723,45725],{"class":144,"line":8074},[142,45716,45717],{"class":152},"            new_path ",[142,45719,198],{"class":148},[142,45721,45722],{"class":257}," 'data\u002Ftest\u002F'",[142,45724,45595],{"class":148},[142,45726,45727],{"class":152}," cla\n",[142,45729,45730,45733],{"class":144,"line":8086},[142,45731,45732],{"class":152},"            copy(image_path, new_path)  ",[142,45734,45735],{"class":211},"# 将选中的图像复制到新路径\n",[142,45737,45738],{"class":144,"line":9745},[142,45739,2428],{"emptyLinePlaceholder":69},[142,45741,45742],{"class":144,"line":9770},[142,45743,45744],{"class":211},"        # 其余的图像保存在训练集train中\n",[142,45746,45747,45749],{"class":144,"line":9793},[142,45748,2562],{"class":148},[142,45750,3767],{"class":152},[142,45752,45753,45755,45757,45759,45761],{"class":144,"line":9817},[142,45754,45702],{"class":152},[142,45756,198],{"class":148},[142,45758,45707],{"class":152},[142,45760,634],{"class":148},[142,45762,45712],{"class":152},[142,45764,45765,45767,45769,45772,45774],{"class":144,"line":9822},[142,45766,45717],{"class":152},[142,45768,198],{"class":148},[142,45770,45771],{"class":257}," 'data\u002Ftrain\u002F'",[142,45773,45595],{"class":148},[142,45775,45727],{"class":152},[142,45777,45778],{"class":144,"line":9827},[142,45779,45780],{"class":152},"            copy(image_path, new_path)\n",[142,45782,45783],{"class":144,"line":9832},[142,45784,45785],{"class":211},"            # 打印进度条信息\n",[142,45787,45788],{"class":144,"line":9841},[142,45789,45790],{"class":211},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[142,45792,45793,45795,45797,45799,45802,45804,45806,45809,45811,45813,45815,45818,45821,45823,45825,45828,45831,45833,45835,45838],{"class":144,"line":9846},[142,45794,32480],{"class":201},[142,45796,153],{"class":152},[142,45798,404],{"class":257},[142,45800,45801],{"class":201},"\\r",[142,45803,1043],{"class":257},[142,45805,32488],{"class":201},[142,45807,45808],{"class":257},"] processing [",[142,45810,32488],{"class":201},[142,45812,737],{"class":257},[142,45814,32488],{"class":201},[142,45816,45817],{"class":257},"]\"",[142,45819,45820],{"class":152},".format(cla, index ",[142,45822,634],{"class":148},[142,45824,25147],{"class":201},[142,45826,45827],{"class":152},", num), ",[142,45829,45830],{"class":5245},"end",[142,45832,198],{"class":148},[142,45834,7681],{"class":257},[142,45836,45837],{"class":152},")  ",[142,45839,45840],{"class":211},"# processing bar\n",[142,45842,45843,45845],{"class":144,"line":9852},[142,45844,31328],{"class":201},[142,45846,2004],{"class":152},[142,45848,45849],{"class":144,"line":9873},[142,45850,2428],{"emptyLinePlaceholder":69},[142,45852,45853,45855,45857,45860],{"class":144,"line":9879},[142,45854,30444],{"class":201},[142,45856,153],{"class":152},[142,45858,45859],{"class":257},"\"processing done!\"",[142,45861,159],{"class":152},[14,45863,45864],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22027,45866,45868],{"id":45867},"_242模型代码","2.4.2.模型代码",[14,45870,45871],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[133,45873,45875],{"className":30407,"code":45874,"language":30409,"meta":31,"style":31},"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",[139,45876,45877,45883,45893,45903,45907,45923,45931,45945,45955,45959,45989,45993,46027,46073,46077,46111,46157,46161,46165,46199,46229,46233,46241,46255,46277,46299,46317,46321,46335,46339,46343,46359,46363,46371,46385,46395,46439,46443,46471,46475,46485,46513,46517,46553,46557,46585,46589,46599,46631,46663,46691,46695,46705,46737,46769,46801,46833,46865,46893,46897,46907,46939,46971,46983,46987,46999,47003,47007,47019,47027,47047,47051,47055,47059,47063,47067,47071,47085,47093,47101,47113,47127,47135,47139,47147,47157,47167,47177,47187,47197,47203,47207,47211,47223,47243,47251],{"__ignoreMap":31},[142,45878,45879,45881],{"class":144,"line":145},[142,45880,30421],{"class":148},[142,45882,30424],{"class":152},[142,45884,45885,45887,45889,45891],{"class":144,"line":64},[142,45886,30766],{"class":148},[142,45888,30769],{"class":152},[142,45890,30421],{"class":148},[142,45892,30774],{"class":152},[142,45894,45895,45897,45899,45901],{"class":144,"line":1208},[142,45896,30766],{"class":148},[142,45898,30786],{"class":152},[142,45900,30421],{"class":148},[142,45902,30791],{"class":152},[142,45904,45905],{"class":144,"line":1223},[142,45906,2428],{"emptyLinePlaceholder":69},[142,45908,45909,45911,45913,45915,45917,45919,45921],{"class":144,"line":1229},[142,45910,14723],{"class":148},[142,45912,41522],{"class":1991},[142,45914,153],{"class":152},[142,45916,30807],{"class":1991},[142,45918,711],{"class":152},[142,45920,30812],{"class":1991},[142,45922,30815],{"class":152},[142,45924,45925,45927,45929],{"class":144,"line":1243},[142,45926,30830],{"class":148},[142,45928,30833],{"class":201},[142,45930,41541],{"class":152},[142,45932,45933,45935,45937,45939,45941,45943],{"class":144,"line":1249},[142,45934,30846],{"class":201},[142,45936,41548],{"class":152},[142,45938,30852],{"class":201},[142,45940,30855],{"class":152},[142,45942,30858],{"class":201},[142,45944,2004],{"class":152},[142,45946,45947,45949,45951,45953],{"class":144,"line":1340},[142,45948,30874],{"class":201},[142,45950,34800],{"class":152},[142,45952,198],{"class":148},[142,45954,34805],{"class":152},[142,45956,45957],{"class":144,"line":1346},[142,45958,41571],{"class":211},[142,45960,45961,45963,45965,45967,45969,45971,45973,45975,45977,45979,45981,45983,45985,45987],{"class":144,"line":1358},[142,45962,30874],{"class":201},[142,45964,41578],{"class":152},[142,45966,198],{"class":148},[142,45968,30882],{"class":152},[142,45970,30885],{"class":5245},[142,45972,198],{"class":148},[142,45974,41589],{"class":152},[142,45976,30894],{"class":5245},[142,45978,198],{"class":148},[142,45980,41596],{"class":152},[142,45982,30903],{"class":5245},[142,45984,198],{"class":148},[142,45986,370],{"class":201},[142,45988,159],{"class":152},[142,45990,45991],{"class":144,"line":1640},[142,45992,41609],{"class":211},[142,45994,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021,46023,46025],{"class":144,"line":1645},[142,45996,30874],{"class":201},[142,45998,41616],{"class":152},[142,46000,198],{"class":148},[142,46002,30882],{"class":152},[142,46004,30885],{"class":5245},[142,46006,198],{"class":148},[142,46008,41589],{"class":152},[142,46010,30894],{"class":5245},[142,46012,198],{"class":148},[142,46014,41633],{"class":152},[142,46016,344],{"class":201},[142,46018,41638],{"class":152},[142,46020,30903],{"class":5245},[142,46022,198],{"class":148},[142,46024,370],{"class":201},[142,46026,159],{"class":152},[142,46028,46029,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071],{"class":144,"line":1651},[142,46030,30874],{"class":201},[142,46032,41653],{"class":152},[142,46034,198],{"class":148},[142,46036,30882],{"class":152},[142,46038,30885],{"class":5245},[142,46040,198],{"class":148},[142,46042,41633],{"class":152},[142,46044,344],{"class":201},[142,46046,41638],{"class":152},[142,46048,30894],{"class":5245},[142,46050,198],{"class":148},[142,46052,41633],{"class":152},[142,46054,370],{"class":201},[142,46056,41638],{"class":152},[142,46058,30903],{"class":5245},[142,46060,198],{"class":148},[142,46062,224],{"class":201},[142,46064,531],{"class":152},[142,46066,30912],{"class":5245},[142,46068,198],{"class":148},[142,46070,370],{"class":201},[142,46072,159],{"class":152},[142,46074,46075],{"class":144,"line":1656},[142,46076,41698],{"class":211},[142,46078,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105,46107,46109],{"class":144,"line":1670},[142,46080,30874],{"class":201},[142,46082,41705],{"class":152},[142,46084,198],{"class":148},[142,46086,30882],{"class":152},[142,46088,30885],{"class":5245},[142,46090,198],{"class":148},[142,46092,41589],{"class":152},[142,46094,30894],{"class":5245},[142,46096,198],{"class":148},[142,46098,41722],{"class":152},[142,46100,344],{"class":201},[142,46102,41638],{"class":152},[142,46104,30903],{"class":5245},[142,46106,198],{"class":148},[142,46108,370],{"class":201},[142,46110,159],{"class":152},[142,46112,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155],{"class":144,"line":1675},[142,46114,30874],{"class":201},[142,46116,41741],{"class":152},[142,46118,198],{"class":148},[142,46120,30882],{"class":152},[142,46122,30885],{"class":5245},[142,46124,198],{"class":148},[142,46126,41722],{"class":152},[142,46128,344],{"class":201},[142,46130,41638],{"class":152},[142,46132,30894],{"class":5245},[142,46134,198],{"class":148},[142,46136,41722],{"class":152},[142,46138,370],{"class":201},[142,46140,41638],{"class":152},[142,46142,30903],{"class":5245},[142,46144,198],{"class":148},[142,46146,472],{"class":201},[142,46148,531],{"class":152},[142,46150,30912],{"class":5245},[142,46152,198],{"class":148},[142,46154,230],{"class":201},[142,46156,159],{"class":152},[142,46158,46159],{"class":144,"line":1681},[142,46160,41786],{"class":211},[142,46162,46163],{"class":144,"line":1702},[142,46164,41791],{"class":211},[142,46166,46167,46169,46171,46173,46175,46177,46179,46181,46183,46185,46187,46189,46191,46193,46195,46197],{"class":144,"line":1707},[142,46168,30874],{"class":201},[142,46170,41798],{"class":152},[142,46172,198],{"class":148},[142,46174,34858],{"class":152},[142,46176,30903],{"class":5245},[142,46178,198],{"class":148},[142,46180,224],{"class":201},[142,46182,531],{"class":152},[142,46184,30958],{"class":5245},[142,46186,198],{"class":148},[142,46188,370],{"class":201},[142,46190,531],{"class":152},[142,46192,30912],{"class":5245},[142,46194,198],{"class":148},[142,46196,370],{"class":201},[142,46198,159],{"class":152},[142,46200,46201,46203,46205,46207,46209,46211,46213,46215,46217,46219,46221,46223,46225,46227],{"class":144,"line":1721},[142,46202,30874],{"class":201},[142,46204,41833],{"class":152},[142,46206,198],{"class":148},[142,46208,30882],{"class":152},[142,46210,30885],{"class":5245},[142,46212,198],{"class":148},[142,46214,41589],{"class":152},[142,46216,30894],{"class":5245},[142,46218,198],{"class":148},[142,46220,41850],{"class":152},[142,46222,30903],{"class":5245},[142,46224,198],{"class":148},[142,46226,370],{"class":201},[142,46228,159],{"class":152},[142,46230,46231],{"class":144,"line":1726},[142,46232,2428],{"emptyLinePlaceholder":69},[142,46234,46235,46237,46239],{"class":144,"line":1755},[142,46236,30830],{"class":148},[142,46238,31122],{"class":1991},[142,46240,31125],{"class":152},[142,46242,46243,46245,46247,46249,46251,46253],{"class":144,"line":1760},[142,46244,41875],{"class":152},[142,46246,198],{"class":148},[142,46248,30852],{"class":201},[142,46250,35213],{"class":152},[142,46252,30852],{"class":201},[142,46254,41886],{"class":152},[142,46256,46257,46259,46261,46263,46265,46267,46269,46271,46273,46275],{"class":144,"line":1777},[142,46258,7114],{"class":152},[142,46260,198],{"class":148},[142,46262,30852],{"class":201},[142,46264,35213],{"class":152},[142,46266,30852],{"class":201},[142,46268,41901],{"class":152},[142,46270,30852],{"class":201},[142,46272,35213],{"class":152},[142,46274,30852],{"class":201},[142,46276,41910],{"class":152},[142,46278,46279,46281,46283,46285,46287,46289,46291,46293,46295,46297],{"class":144,"line":1782},[142,46280,41915],{"class":152},[142,46282,198],{"class":148},[142,46284,30852],{"class":201},[142,46286,35213],{"class":152},[142,46288,30852],{"class":201},[142,46290,41926],{"class":152},[142,46292,30852],{"class":201},[142,46294,35213],{"class":152},[142,46296,30852],{"class":201},[142,46298,41935],{"class":152},[142,46300,46301,46303,46305,46307,46309,46311,46313,46315],{"class":144,"line":1787},[142,46302,41940],{"class":152},[142,46304,198],{"class":148},[142,46306,30852],{"class":201},[142,46308,35213],{"class":152},[142,46310,30852],{"class":201},[142,46312,41951],{"class":152},[142,46314,30852],{"class":201},[142,46316,41956],{"class":152},[142,46318,46319],{"class":144,"line":1792},[142,46320,41961],{"class":211},[142,46322,46323,46325,46327,46329,46331,46333],{"class":144,"line":1806},[142,46324,14781],{"class":148},[142,46326,41968],{"class":152},[142,46328,32714],{"class":5245},[142,46330,198],{"class":148},[142,46332,370],{"class":201},[142,46334,159],{"class":152},[142,46336,46337],{"class":144,"line":1811},[142,46338,2428],{"emptyLinePlaceholder":69},[142,46340,46341],{"class":144,"line":2605},[142,46342,41989],{"class":211},[142,46344,46345,46347,46349,46351,46353,46355,46357],{"class":144,"line":2619},[142,46346,14723],{"class":148},[142,46348,41996],{"class":1991},[142,46350,153],{"class":152},[142,46352,30807],{"class":1991},[142,46354,711],{"class":152},[142,46356,30812],{"class":1991},[142,46358,30815],{"class":152},[142,46360,46361],{"class":144,"line":2627},[142,46362,42011],{"class":211},[142,46364,46365,46367,46369],{"class":144,"line":2632},[142,46366,30830],{"class":148},[142,46368,30833],{"class":201},[142,46370,42020],{"class":152},[142,46372,46373,46375,46377,46379,46381,46383],{"class":144,"line":2638},[142,46374,30846],{"class":201},[142,46376,42027],{"class":152},[142,46378,30852],{"class":201},[142,46380,30855],{"class":152},[142,46382,30858],{"class":201},[142,46384,2004],{"class":152},[142,46386,46387,46389,46391,46393],{"class":144,"line":2644},[142,46388,30874],{"class":201},[142,46390,42042],{"class":152},[142,46392,198],{"class":148},[142,46394,38038],{"class":152},[142,46396,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419,46421,46423,46425,46427,46429,46431,46433,46435,46437],{"class":144,"line":2649},[142,46398,38043],{"class":152},[142,46400,30885],{"class":5245},[142,46402,198],{"class":148},[142,46404,224],{"class":201},[142,46406,531],{"class":152},[142,46408,30894],{"class":5245},[142,46410,198],{"class":148},[142,46412,356],{"class":201},[142,46414,531],{"class":152},[142,46416,30903],{"class":5245},[142,46418,198],{"class":148},[142,46420,522],{"class":201},[142,46422,531],{"class":152},[142,46424,30958],{"class":5245},[142,46426,198],{"class":148},[142,46428,230],{"class":201},[142,46430,531],{"class":152},[142,46432,30912],{"class":5245},[142,46434,198],{"class":148},[142,46436,224],{"class":201},[142,46438,38076],{"class":152},[142,46440,46441],{"class":144,"line":7977},[142,46442,38081],{"class":152},[142,46444,46445,46447,46449,46451,46453,46455,46457,46459,46461,46463,46465,46467,46469],{"class":144,"line":8001},[142,46446,38126],{"class":152},[142,46448,30903],{"class":5245},[142,46450,198],{"class":148},[142,46452,224],{"class":201},[142,46454,531],{"class":152},[142,46456,30958],{"class":5245},[142,46458,198],{"class":148},[142,46460,230],{"class":201},[142,46462,531],{"class":152},[142,46464,30912],{"class":5245},[142,46466,198],{"class":148},[142,46468,370],{"class":201},[142,46470,159],{"class":152},[142,46472,46473],{"class":144,"line":8006},[142,46474,38155],{"class":152},[142,46476,46477,46479,46481,46483],{"class":144,"line":8012},[142,46478,30874],{"class":201},[142,46480,42133],{"class":152},[142,46482,198],{"class":148},[142,46484,38038],{"class":152},[142,46486,46487,46489,46491,46493,46495,46497,46499,46501,46503,46505,46507,46509,46511],{"class":144,"line":8039},[142,46488,38043],{"class":152},[142,46490,30885],{"class":5245},[142,46492,198],{"class":148},[142,46494,356],{"class":201},[142,46496,531],{"class":152},[142,46498,30894],{"class":5245},[142,46500,198],{"class":148},[142,46502,356],{"class":201},[142,46504,531],{"class":152},[142,46506,30903],{"class":5245},[142,46508,198],{"class":148},[142,46510,370],{"class":201},[142,46512,38076],{"class":152},[142,46514,46515],{"class":144,"line":8044},[142,46516,38081],{"class":152},[142,46518,46519,46521,46523,46525,46527,46529,46531,46533,46535,46537,46539,46541,46543,46545,46547,46549,46551],{"class":144,"line":8050},[142,46520,38043],{"class":152},[142,46522,30885],{"class":5245},[142,46524,198],{"class":148},[142,46526,356],{"class":201},[142,46528,531],{"class":152},[142,46530,30894],{"class":5245},[142,46532,198],{"class":148},[142,46534,42188],{"class":201},[142,46536,531],{"class":152},[142,46538,30903],{"class":5245},[142,46540,198],{"class":148},[142,46542,224],{"class":201},[142,46544,531],{"class":152},[142,46546,30912],{"class":5245},[142,46548,198],{"class":148},[142,46550,370],{"class":201},[142,46552,38076],{"class":152},[142,46554,46555],{"class":144,"line":8062},[142,46556,38081],{"class":152},[142,46558,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579,46581,46583],{"class":144,"line":8074},[142,46560,38126],{"class":152},[142,46562,30903],{"class":5245},[142,46564,198],{"class":148},[142,46566,224],{"class":201},[142,46568,531],{"class":152},[142,46570,30958],{"class":5245},[142,46572,198],{"class":148},[142,46574,230],{"class":201},[142,46576,531],{"class":152},[142,46578,30912],{"class":5245},[142,46580,198],{"class":148},[142,46582,370],{"class":201},[142,46584,159],{"class":152},[142,46586,46587],{"class":144,"line":8086},[142,46588,38155],{"class":152},[142,46590,46591,46593,46595,46597],{"class":144,"line":9745},[142,46592,30874],{"class":201},[142,46594,42249],{"class":152},[142,46596,198],{"class":148},[142,46598,38038],{"class":152},[142,46600,46601,46603,46605,46607,46609,46611,46613,46615,46617,46619,46621,46623,46625,46627,46629],{"class":144,"line":9770},[142,46602,42258],{"class":152},[142,46604,42188],{"class":201},[142,46606,531],{"class":152},[142,46608,356],{"class":201},[142,46610,42267],{"class":152},[142,46612,362],{"class":201},[142,46614,531],{"class":152},[142,46616,32099],{"class":201},[142,46618,42276],{"class":152},[142,46620,754],{"class":201},[142,46622,531],{"class":152},[142,46624,350],{"class":201},[142,46626,42285],{"class":152},[142,46628,350],{"class":201},[142,46630,38076],{"class":152},[142,46632,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651,46653,46655,46657,46659,46661],{"class":144,"line":9793},[142,46634,42258],{"class":152},[142,46636,34899],{"class":201},[142,46638,531],{"class":152},[142,46640,32099],{"class":201},[142,46642,42267],{"class":152},[142,46644,32099],{"class":201},[142,46646,531],{"class":152},[142,46648,42188],{"class":201},[142,46650,42276],{"class":152},[142,46652,350],{"class":201},[142,46654,531],{"class":152},[142,46656,362],{"class":201},[142,46658,42285],{"class":152},[142,46660,356],{"class":201},[142,46662,38076],{"class":152},[142,46664,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685,46687,46689],{"class":144,"line":9817},[142,46666,38126],{"class":152},[142,46668,30903],{"class":5245},[142,46670,198],{"class":148},[142,46672,224],{"class":201},[142,46674,531],{"class":152},[142,46676,30958],{"class":5245},[142,46678,198],{"class":148},[142,46680,230],{"class":201},[142,46682,531],{"class":152},[142,46684,30912],{"class":5245},[142,46686,198],{"class":148},[142,46688,370],{"class":201},[142,46690,159],{"class":152},[142,46692,46693],{"class":144,"line":9822},[142,46694,38155],{"class":152},[142,46696,46697,46699,46701,46703],{"class":144,"line":9827},[142,46698,30874],{"class":201},[142,46700,42360],{"class":152},[142,46702,198],{"class":148},[142,46704,38038],{"class":152},[142,46706,46707,46709,46711,46713,46715,46717,46719,46721,46723,46725,46727,46729,46731,46733,46735],{"class":144,"line":9832},[142,46708,42258],{"class":152},[142,46710,42371],{"class":201},[142,46712,531],{"class":152},[142,46714,42188],{"class":201},[142,46716,42267],{"class":152},[142,46718,362],{"class":201},[142,46720,531],{"class":152},[142,46722,42384],{"class":201},[142,46724,42276],{"class":152},[142,46726,754],{"class":201},[142,46728,531],{"class":152},[142,46730,760],{"class":201},[142,46732,42285],{"class":152},[142,46734,356],{"class":201},[142,46736,38076],{"class":152},[142,46738,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757,46759,46761,46763,46765,46767],{"class":144,"line":9841},[142,46740,42258],{"class":152},[142,46742,38486],{"class":201},[142,46744,531],{"class":152},[142,46746,21077],{"class":201},[142,46748,42267],{"class":152},[142,46750,771],{"class":201},[142,46752,531],{"class":152},[142,46754,31530],{"class":201},[142,46756,42276],{"class":152},[142,46758,953],{"class":201},[142,46760,531],{"class":152},[142,46762,356],{"class":201},[142,46764,42285],{"class":152},[142,46766,356],{"class":201},[142,46768,38076],{"class":152},[142,46770,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789,46791,46793,46795,46797,46799],{"class":144,"line":9846},[142,46772,42258],{"class":152},[142,46774,38486],{"class":201},[142,46776,531],{"class":152},[142,46778,32099],{"class":201},[142,46780,42267],{"class":152},[142,46782,32099],{"class":201},[142,46784,531],{"class":152},[142,46786,34899],{"class":201},[142,46788,42276],{"class":152},[142,46790,953],{"class":201},[142,46792,531],{"class":152},[142,46794,356],{"class":201},[142,46796,42285],{"class":152},[142,46798,356],{"class":201},[142,46800,38076],{"class":152},[142,46802,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821,46823,46825,46827,46829,46831],{"class":144,"line":9852},[142,46804,42258],{"class":152},[142,46806,38486],{"class":201},[142,46808,531],{"class":152},[142,46810,771],{"class":201},[142,46812,42267],{"class":152},[142,46814,32099],{"class":201},[142,46816,531],{"class":152},[142,46818,42481],{"class":201},[142,46820,42276],{"class":152},[142,46822,350],{"class":201},[142,46824,531],{"class":152},[142,46826,356],{"class":201},[142,46828,42285],{"class":152},[142,46830,356],{"class":201},[142,46832,38076],{"class":152},[142,46834,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853,46855,46857,46859,46861,46863],{"class":144,"line":9873},[142,46836,42258],{"class":152},[142,46838,42502],{"class":201},[142,46840,531],{"class":152},[142,46842,34899],{"class":201},[142,46844,42267],{"class":152},[142,46846,21077],{"class":201},[142,46848,531],{"class":152},[142,46850,42515],{"class":201},[142,46852,42276],{"class":152},[142,46854,350],{"class":201},[142,46856,531],{"class":152},[142,46858,32099],{"class":201},[142,46860,42285],{"class":152},[142,46862,32099],{"class":201},[142,46864,38076],{"class":152},[142,46866,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887,46889,46891],{"class":144,"line":9879},[142,46868,38126],{"class":152},[142,46870,30903],{"class":5245},[142,46872,198],{"class":148},[142,46874,224],{"class":201},[142,46876,531],{"class":152},[142,46878,30958],{"class":5245},[142,46880,198],{"class":148},[142,46882,230],{"class":201},[142,46884,531],{"class":152},[142,46886,30912],{"class":5245},[142,46888,198],{"class":148},[142,46890,370],{"class":201},[142,46892,159],{"class":152},[142,46894,46895],{"class":144,"line":9893},[142,46896,38155],{"class":152},[142,46898,46899,46901,46903,46905],{"class":144,"line":9899},[142,46900,30874],{"class":201},[142,46902,42568],{"class":152},[142,46904,198],{"class":148},[142,46906,38038],{"class":152},[142,46908,46909,46911,46913,46915,46917,46919,46921,46923,46925,46927,46929,46931,46933,46935,46937],{"class":144,"line":9926},[142,46910,42258],{"class":152},[142,46912,42579],{"class":201},[142,46914,531],{"class":152},[142,46916,34899],{"class":201},[142,46918,42267],{"class":152},[142,46920,21077],{"class":201},[142,46922,531],{"class":152},[142,46924,42515],{"class":201},[142,46926,42276],{"class":152},[142,46928,350],{"class":201},[142,46930,531],{"class":152},[142,46932,32099],{"class":201},[142,46934,42285],{"class":152},[142,46936,32099],{"class":201},[142,46938,38076],{"class":152},[142,46940,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959,46961,46963,46965,46967,46969],{"class":144,"line":9935},[142,46942,42258],{"class":152},[142,46944,42579],{"class":201},[142,46946,531],{"class":152},[142,46948,34969],{"class":201},[142,46950,42267],{"class":152},[142,46952,42188],{"class":201},[142,46954,531],{"class":152},[142,46956,34969],{"class":201},[142,46958,42276],{"class":152},[142,46960,760],{"class":201},[142,46962,531],{"class":152},[142,46964,32099],{"class":201},[142,46966,42285],{"class":152},[142,46968,32099],{"class":201},[142,46970,38076],{"class":152},[142,46972,46973,46975,46977,46979,46981],{"class":144,"line":9941},[142,46974,42642],{"class":152},[142,46976,370],{"class":201},[142,46978,531],{"class":152},[142,46980,370],{"class":201},[142,46982,42651],{"class":152},[142,46984,46985],{"class":144,"line":9949},[142,46986,38819],{"class":152},[142,46988,46989,46991,46993,46995,46997],{"class":144,"line":9954},[142,46990,38824],{"class":152},[142,46992,42662],{"class":201},[142,46994,531],{"class":152},[142,46996,230],{"class":201},[142,46998,159],{"class":152},[142,47000,47001],{"class":144,"line":16633},[142,47002,38155],{"class":152},[142,47004,47005],{"class":144,"line":16639},[142,47006,42677],{"class":211},[142,47008,47009,47011,47013,47015,47017],{"class":144,"line":16662},[142,47010,3431],{"class":148},[142,47012,38897],{"class":152},[142,47014,26072],{"class":148},[142,47016,38902],{"class":201},[142,47018,38905],{"class":152},[142,47020,47021,47023,47025],{"class":144,"line":16668},[142,47022,4670],{"class":148},[142,47024,38917],{"class":201},[142,47026,38920],{"class":152},[142,47028,47029,47031,47033,47035,47037,47039,47041,47043,47045],{"class":144,"line":16691},[142,47030,38930],{"class":152},[142,47032,42704],{"class":5245},[142,47034,198],{"class":148},[142,47036,42709],{"class":257},[142,47038,531],{"class":152},[142,47040,38933],{"class":5245},[142,47042,198],{"class":148},[142,47044,38938],{"class":257},[142,47046,159],{"class":152},[142,47048,47049],{"class":144,"line":16705},[142,47050,42724],{"class":211},[142,47052,47053],{"class":144,"line":16725},[142,47054,42729],{"class":211},[142,47056,47057],{"class":144,"line":16731},[142,47058,42734],{"class":211},[142,47060,47061],{"class":144,"line":16742},[142,47062,42739],{"class":211},[142,47064,47065],{"class":144,"line":16765},[142,47066,42744],{"class":211},[142,47068,47069],{"class":144,"line":16787},[142,47070,42749],{"class":211},[142,47072,47073,47075,47077,47079,47081,47083],{"class":144,"line":16792},[142,47074,38950],{"class":148},[142,47076,38953],{"class":152},[142,47078,38956],{"class":148},[142,47080,38959],{"class":148},[142,47082,38962],{"class":201},[142,47084,3767],{"class":152},[142,47086,47087,47089,47091],{"class":144,"line":16798},[142,47088,38974],{"class":152},[142,47090,344],{"class":201},[142,47092,159],{"class":152},[142,47094,47095,47097,47099],{"class":144,"line":16812},[142,47096,42776],{"class":148},[142,47098,38917],{"class":201},[142,47100,38993],{"class":152},[142,47102,47103,47105,47107,47109,47111],{"class":144,"line":16825},[142,47104,42785],{"class":152},[142,47106,344],{"class":201},[142,47108,531],{"class":152},[142,47110,39015],{"class":201},[142,47112,159],{"class":152},[142,47114,47115,47117,47119,47121,47123,47125],{"class":144,"line":16830},[142,47116,42798],{"class":148},[142,47118,38953],{"class":152},[142,47120,38956],{"class":148},[142,47122,38959],{"class":148},[142,47124,38962],{"class":201},[142,47126,3767],{"class":152},[142,47128,47129,47131,47133],{"class":144,"line":16844},[142,47130,42813],{"class":152},[142,47132,344],{"class":201},[142,47134,159],{"class":152},[142,47136,47137],{"class":144,"line":16849},[142,47138,35194],{"class":211},[142,47140,47141,47143,47145],{"class":144,"line":16855},[142,47142,30830],{"class":148},[142,47144,31122],{"class":1991},[142,47146,31125],{"class":152},[142,47148,47149,47151,47153,47155],{"class":144,"line":16860},[142,47150,31130],{"class":152},[142,47152,198],{"class":148},[142,47154,30852],{"class":201},[142,47156,42840],{"class":152},[142,47158,47159,47161,47163,47165],{"class":144,"line":16874},[142,47160,31130],{"class":152},[142,47162,198],{"class":148},[142,47164,30852],{"class":201},[142,47166,42851],{"class":152},[142,47168,47169,47171,47173,47175],{"class":144,"line":16879},[142,47170,31130],{"class":152},[142,47172,198],{"class":148},[142,47174,30852],{"class":201},[142,47176,42862],{"class":152},[142,47178,47179,47181,47183,47185],{"class":144,"line":16884},[142,47180,31130],{"class":152},[142,47182,198],{"class":148},[142,47184,30852],{"class":201},[142,47186,42873],{"class":152},[142,47188,47189,47191,47193,47195],{"class":144,"line":16898},[142,47190,31130],{"class":152},[142,47192,198],{"class":148},[142,47194,30852],{"class":201},[142,47196,42884],{"class":152},[142,47198,47199,47201],{"class":144,"line":16910},[142,47200,14781],{"class":148},[142,47202,31238],{"class":152},[142,47204,47205],{"class":144,"line":16915},[142,47206,2428],{"emptyLinePlaceholder":69},[142,47208,47209],{"class":144,"line":16928},[142,47210,42899],{"class":211},[142,47212,47213,47215,47217,47219,47221],{"class":144,"line":16933},[142,47214,1559],{"class":148},[142,47216,31249],{"class":201},[142,47218,2977],{"class":148},[142,47220,31254],{"class":257},[142,47222,3767],{"class":152},[142,47224,47225,47227,47229,47231,47233,47235,47237,47239,47241],{"class":144,"line":16938},[142,47226,31266],{"class":152},[142,47228,198],{"class":148},[142,47230,30480],{"class":152},[142,47232,31273],{"class":257},[142,47234,1732],{"class":148},[142,47236,31278],{"class":152},[142,47238,1729],{"class":148},[142,47240,30505],{"class":257},[142,47242,159],{"class":152},[142,47244,47245,47247,47249],{"class":144,"line":16943},[142,47246,31318],{"class":152},[142,47248,198],{"class":148},[142,47250,42940],{"class":152},[142,47252,47253,47255,47257,47259,47261,47263,47265,47267],{"class":144,"line":16956},[142,47254,31328],{"class":201},[142,47256,31331],{"class":152},[142,47258,370],{"class":201},[142,47260,531],{"class":152},[142,47262,31530],{"class":201},[142,47264,531],{"class":152},[142,47266,31530],{"class":201},[142,47268,31344],{"class":152},[22027,47270,47272],{"id":47271},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47274,47275],{},"计算图片的均值与方差，用于训练中归一化处理操作",[133,47277,47279],{"className":30407,"code":47278,"language":30409,"meta":31,"style":31},"# 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",[139,47280,47281,47286,47299,47304,47310,47315,47325,47329,47334,47344,47348,47353,47363,47380,47384,47389,47401,47413,47444,47453,47463,47473,47477,47482,47497,47501,47506,47511,47516,47526,47531,47556,47560,47565,47580,47584,47597,47601,47606,47611,47616,47621,47626,47636,47646,47669,47677,47685,47693,47697,47709,47713,47718,47722,47726,47733,47753,47777,47784,47798,47803,47808,47812,47826,47830,47842],{"__ignoreMap":31},[142,47282,47283],{"class":144,"line":145},[142,47284,47285],{"class":211},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[142,47287,47288,47290,47293,47296],{"class":144,"line":64},[142,47289,30766],{"class":148},[142,47291,47292],{"class":201}," PIL",[142,47294,47295],{"class":148}," import",[142,47297,47298],{"class":152}," Image\n",[142,47300,47301],{"class":144,"line":1208},[142,47302,47303],{"class":211},"# os 用来处理文件夹和文件路径\n",[142,47305,47306,47308],{"class":144,"line":1223},[142,47307,30421],{"class":148},[142,47309,45334],{"class":152},[142,47311,47312],{"class":144,"line":1229},[142,47313,47314],{"class":211},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[142,47316,47317,47319,47321,47323],{"class":144,"line":1243},[142,47318,30421],{"class":148},[142,47320,31409],{"class":152},[142,47322,31412],{"class":148},[142,47324,31415],{"class":152},[142,47326,47327],{"class":144,"line":1249},[142,47328,2428],{"emptyLinePlaceholder":69},[142,47330,47331],{"class":144,"line":1340},[142,47332,47333],{"class":211},"# 文件夹路径，包含所有图片文件\n",[142,47335,47336,47339,47341],{"class":144,"line":1346},[142,47337,47338],{"class":152},"folder_path ",[142,47340,198],{"class":148},[142,47342,47343],{"class":257}," 'data_cat_dog'\n",[142,47345,47346],{"class":144,"line":1358},[142,47347,2428],{"emptyLinePlaceholder":69},[142,47349,47350],{"class":144,"line":1640},[142,47351,47352],{"class":211},"# 初始化累积变量\n",[142,47354,47355,47358,47360],{"class":144,"line":1645},[142,47356,47357],{"class":152},"total_pixels ",[142,47359,198],{"class":148},[142,47361,47362],{"class":201}," 0\n",[142,47364,47365,47368,47370,47373,47375,47377],{"class":144,"line":1651},[142,47366,47367],{"class":152},"sum_normalized_pixel_values ",[142,47369,198],{"class":148},[142,47371,47372],{"class":152}," np.zeros(",[142,47374,224],{"class":201},[142,47376,45837],{"class":152},[142,47378,47379],{"class":211},"# 如果是RGB图像，需要三个通道的均值和方差\n",[142,47381,47382],{"class":144,"line":1656},[142,47383,2428],{"emptyLinePlaceholder":69},[142,47385,47386],{"class":144,"line":1670},[142,47387,47388],{"class":211},"# 遍历文件夹中的图片文件\n",[142,47390,47391,47393,47396,47398],{"class":144,"line":1675},[142,47392,3053],{"class":148},[142,47394,47395],{"class":152}," root, dirs, files ",[142,47397,26072],{"class":148},[142,47399,47400],{"class":152}," os.walk(folder_path):\n",[142,47402,47403,47405,47408,47410],{"class":144,"line":1681},[142,47404,3229],{"class":148},[142,47406,47407],{"class":152}," filename ",[142,47409,26072],{"class":148},[142,47411,47412],{"class":152}," files:\n",[142,47414,47415,47417,47420,47423,47425,47428,47430,47433,47435,47438,47441],{"class":144,"line":1702},[142,47416,2525],{"class":148},[142,47418,47419],{"class":152}," filename.endswith((",[142,47421,47422],{"class":257},"'.jpg'",[142,47424,12464],{"class":152},[142,47426,47427],{"class":257},"'.jpeg'",[142,47429,12464],{"class":152},[142,47431,47432],{"class":257},"'.png'",[142,47434,12464],{"class":152},[142,47436,47437],{"class":257},"'.bmp'",[142,47439,47440],{"class":152},")):  ",[142,47442,47443],{"class":211},"# 可根据实际情况添加其他格式\n",[142,47445,47446,47448,47450],{"class":144,"line":1707},[142,47447,45702],{"class":152},[142,47449,198],{"class":148},[142,47451,47452],{"class":152}," os.path.join(root, filename)\n",[142,47454,47455,47458,47460],{"class":144,"line":1721},[142,47456,47457],{"class":152},"            image ",[142,47459,198],{"class":148},[142,47461,47462],{"class":152}," Image.open(image_path)\n",[142,47464,47465,47468,47470],{"class":144,"line":1726},[142,47466,47467],{"class":152},"            image_array ",[142,47469,198],{"class":148},[142,47471,47472],{"class":152}," np.array(image)\n",[142,47474,47475],{"class":144,"line":1755},[142,47476,2428],{"emptyLinePlaceholder":69},[142,47478,47479],{"class":144,"line":1760},[142,47480,47481],{"class":211},"            # 归一化像素值到0-1之间\n",[142,47483,47484,47487,47489,47492,47494],{"class":144,"line":1777},[142,47485,47486],{"class":152},"            normalized_image_array ",[142,47488,198],{"class":148},[142,47490,47491],{"class":152}," image_array ",[142,47493,737],{"class":148},[142,47495,47496],{"class":201}," 255.0\n",[142,47498,47499],{"class":144,"line":1782},[142,47500,2428],{"emptyLinePlaceholder":69},[142,47502,47503],{"class":144,"line":1787},[142,47504,47505],{"class":211},"            # print(image_path)\n",[142,47507,47508],{"class":144,"line":1792},[142,47509,47510],{"class":211},"            # print(normalized_image_array.shape)\n",[142,47512,47513],{"class":144,"line":1806},[142,47514,47515],{"class":211},"            # 累积归一化后的像素值和像素数量\n",[142,47517,47518,47521,47523],{"class":144,"line":1811},[142,47519,47520],{"class":152},"            total_pixels ",[142,47522,9506],{"class":148},[142,47524,47525],{"class":152}," normalized_image_array.size\n",[142,47527,47528],{"class":144,"line":2605},[142,47529,47530],{"class":211},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[142,47532,47533,47536,47538,47541,47544,47546,47548,47550,47552,47554],{"class":144,"line":2619},[142,47534,47535],{"class":152},"            sum_normalized_pixel_values ",[142,47537,9506],{"class":148},[142,47539,47540],{"class":152}," np.sum(normalized_image_array, ",[142,47542,47543],{"class":5245},"axis",[142,47545,198],{"class":148},[142,47547,153],{"class":152},[142,47549,344],{"class":201},[142,47551,12464],{"class":152},[142,47553,370],{"class":201},[142,47555,30526],{"class":152},[142,47557,47558],{"class":144,"line":2627},[142,47559,2428],{"emptyLinePlaceholder":69},[142,47561,47562],{"class":144,"line":2632},[142,47563,47564],{"class":211},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[142,47566,47567,47570,47572,47575,47577],{"class":144,"line":2638},[142,47568,47569],{"class":152},"mean ",[142,47571,198],{"class":148},[142,47573,47574],{"class":152}," sum_normalized_pixel_values ",[142,47576,737],{"class":148},[142,47578,47579],{"class":152}," total_pixels\n",[142,47581,47582],{"class":144,"line":2644},[142,47583,2428],{"emptyLinePlaceholder":69},[142,47585,47586,47589,47591,47593,47595],{"class":144,"line":2649},[142,47587,47588],{"class":152},"sum_squared_diff ",[142,47590,198],{"class":148},[142,47592,47372],{"class":152},[142,47594,224],{"class":201},[142,47596,159],{"class":152},[142,47598,47599],{"class":144,"line":7977},[142,47600,2428],{"emptyLinePlaceholder":69},[142,47602,47603],{"class":144,"line":8001},[142,47604,47605],{"class":211},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[142,47607,47608],{"class":144,"line":8006},[142,47609,47610],{"class":211},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[142,47612,47613],{"class":144,"line":8012},[142,47614,47615],{"class":211},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[142,47617,47618],{"class":144,"line":8039},[142,47619,47620],{"class":211},"# Image.open(image_path)：打开图片\n",[142,47622,47623],{"class":144,"line":8044},[142,47624,47625],{"class":211},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[142,47627,47628,47630,47632,47634],{"class":144,"line":8050},[142,47629,3053],{"class":148},[142,47631,47395],{"class":152},[142,47633,26072],{"class":148},[142,47635,47400],{"class":152},[142,47637,47638,47640,47642,47644],{"class":144,"line":8062},[142,47639,3229],{"class":148},[142,47641,47407],{"class":152},[142,47643,26072],{"class":148},[142,47645,47412],{"class":152},[142,47647,47648,47650,47652,47654,47656,47658,47660,47662,47664,47666],{"class":144,"line":8074},[142,47649,2525],{"class":148},[142,47651,47419],{"class":152},[142,47653,47422],{"class":257},[142,47655,12464],{"class":152},[142,47657,47427],{"class":257},[142,47659,12464],{"class":152},[142,47661,47432],{"class":257},[142,47663,12464],{"class":152},[142,47665,47437],{"class":257},[142,47667,47668],{"class":152},")):\n",[142,47670,47671,47673,47675],{"class":144,"line":8086},[142,47672,45702],{"class":152},[142,47674,198],{"class":148},[142,47676,47452],{"class":152},[142,47678,47679,47681,47683],{"class":144,"line":9745},[142,47680,47457],{"class":152},[142,47682,198],{"class":148},[142,47684,47462],{"class":152},[142,47686,47687,47689,47691],{"class":144,"line":9770},[142,47688,47467],{"class":152},[142,47690,198],{"class":148},[142,47692,47472],{"class":152},[142,47694,47695],{"class":144,"line":9793},[142,47696,47481],{"class":211},[142,47698,47699,47701,47703,47705,47707],{"class":144,"line":9817},[142,47700,47486],{"class":152},[142,47702,198],{"class":148},[142,47704,47491],{"class":152},[142,47706,737],{"class":148},[142,47708,47496],{"class":201},[142,47710,47711],{"class":144,"line":9822},[142,47712,47510],{"class":211},[142,47714,47715],{"class":144,"line":9827},[142,47716,47717],{"class":211},"            # print(mean.shape)\n",[142,47719,47720],{"class":144,"line":9832},[142,47721,47505],{"class":211},[142,47723,47724],{"class":144,"line":9841},[142,47725,2428],{"emptyLinePlaceholder":69},[142,47727,47728,47731],{"class":144,"line":9846},[142,47729,47730],{"class":148},"            try",[142,47732,3767],{"class":152},[142,47734,47735,47738,47740,47743,47745,47748,47750],{"class":144,"line":9852},[142,47736,47737],{"class":152},"                diff ",[142,47739,198],{"class":148},[142,47741,47742],{"class":152}," (normalized_image_array ",[142,47744,685],{"class":148},[142,47746,47747],{"class":152}," mean) ",[142,47749,10690],{"class":148},[142,47751,47752],{"class":201}," 2\n",[142,47754,47755,47758,47760,47763,47765,47767,47769,47771,47773,47775],{"class":144,"line":9873},[142,47756,47757],{"class":152},"                sum_squared_diff ",[142,47759,9506],{"class":148},[142,47761,47762],{"class":152}," np.sum(diff, ",[142,47764,47543],{"class":5245},[142,47766,198],{"class":148},[142,47768,153],{"class":152},[142,47770,344],{"class":201},[142,47772,12464],{"class":152},[142,47774,370],{"class":201},[142,47776,30526],{"class":152},[142,47778,47779,47782],{"class":144,"line":9879},[142,47780,47781],{"class":148},"            except",[142,47783,3767],{"class":152},[142,47785,47786,47789,47791,47793,47796],{"class":144,"line":9893},[142,47787,47788],{"class":201},"                print",[142,47790,153],{"class":152},[142,47792,205],{"class":148},[142,47794,47795],{"class":257},"\"捕获到自定义异常\"",[142,47797,159],{"class":152},[142,47799,47800],{"class":144,"line":9899},[142,47801,47802],{"class":211},"            # diff = (normalized_image_array - mean) ** 2\n",[142,47804,47805],{"class":144,"line":9926},[142,47806,47807],{"class":211},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[142,47809,47810],{"class":144,"line":9935},[142,47811,2428],{"emptyLinePlaceholder":69},[142,47813,47814,47817,47819,47822,47824],{"class":144,"line":9941},[142,47815,47816],{"class":152},"variance ",[142,47818,198],{"class":148},[142,47820,47821],{"class":152}," sum_squared_diff ",[142,47823,737],{"class":148},[142,47825,47579],{"class":152},[142,47827,47828],{"class":144,"line":9949},[142,47829,2428],{"emptyLinePlaceholder":69},[142,47831,47832,47834,47836,47839],{"class":144,"line":9954},[142,47833,30444],{"class":201},[142,47835,153],{"class":152},[142,47837,47838],{"class":257},"\"Mean:\"",[142,47840,47841],{"class":152},", mean)\n",[142,47843,47844,47846,47848,47851],{"class":144,"line":16633},[142,47845,30444],{"class":201},[142,47847,153],{"class":152},[142,47849,47850],{"class":257},"\"Variance:\"",[142,47852,47853],{"class":152},", variance)\n",[133,47855,47857],{"className":30407,"code":47856,"language":30409,"meta":31,"style":31},"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",[139,47858,47859,47865,47871,47881,47887,47897,47911,47921,47931,47941,47945,47955,47965,47969,47973,47981,47986,47991,48010,48014,48019,48024,48029,48034,48075,48080,48090,48095,48108,48113,48118,48123,48128,48133,48137,48142,48147,48169,48173,48205,48219,48229,48239,48243,48253,48267,48277,48287,48297,48303,48307,48311,48315,48319,48323,48331,48351,48355,48359,48363,48367,48383,48387,48391,48399,48403,48407,48415,48419,48423,48427,48435,48439,48443,48447,48455,48459,48467,48471,48479,48483,48491,48495,48503,48507,48511,48519,48523,48527,48539,48563,48577,48581,48585,48589,48597,48601,48609,48613,48621,48625,48633,48637,48645,48649,48657,48661,48673,48677,48685,48689,48697,48701,48705,48709,48713,48721,48725,48741,48745,48753,48757,48761,48765,48769,48773,48777,48781,48797,48801,48813,48817,48829,48833,48845,48849,48857,48861,48869,48873,48877,48881,48887,48891,48899,48903,48919,48923,48931,48935,48951,48963,48967,48979,48983,48987,48995,48999,49003,49011,49015,49023,49027,49035,49039,49043,49085,49127,49131,49135,49151,49155,49171,49175,49179,49187,49191,49195,49207,49245,49249,49253,49261,49265,49279,49289,49295,49301,49307,49313,49317,49321,49327,49331,49335,49343,49347,49365,49369,49373,49377,49393,49397,49401,49405,49409,49413,49433,49453,49457,49461,49465,49473,49481,49485,49501,49521,49541,49545,49550,49559,49568,49573,49578,49583,49596,49601,49610,49619,49636],{"__ignoreMap":31},[142,47860,47861,47863],{"class":144,"line":145},[142,47862,30421],{"class":148},[142,47864,31851],{"class":152},[142,47866,47867,47869],{"class":144,"line":64},[142,47868,30421],{"class":148},[142,47870,31858],{"class":152},[142,47872,47873,47875,47877,47879],{"class":144,"line":1208},[142,47874,30421],{"class":148},[142,47876,31869],{"class":152},[142,47878,31412],{"class":148},[142,47880,31874],{"class":152},[142,47882,47883,47885],{"class":144,"line":1223},[142,47884,30421],{"class":148},[142,47886,30424],{"class":152},[142,47888,47889,47891,47893,47895],{"class":144,"line":1229},[142,47890,30766],{"class":148},[142,47892,31444],{"class":152},[142,47894,30421],{"class":148},[142,47896,31891],{"class":152},[142,47898,47899,47901,47903,47905,47908],{"class":144,"line":1243},[142,47900,30766],{"class":148},[142,47902,31397],{"class":152},[142,47904,30421],{"class":148},[142,47906,47907],{"class":152}," ImageFolder ",[142,47909,47910],{"class":211},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[142,47912,47913,47915,47917,47919],{"class":144,"line":1249},[142,47914,30766],{"class":148},[142,47916,31427],{"class":152},[142,47918,30421],{"class":148},[142,47920,31432],{"class":152},[142,47922,47923,47925,47927,47929],{"class":144,"line":1340},[142,47924,30421],{"class":148},[142,47926,31444],{"class":152},[142,47928,31412],{"class":148},[142,47930,31449],{"class":152},[142,47932,47933,47935,47937,47939],{"class":144,"line":1346},[142,47934,30421],{"class":148},[142,47936,31461],{"class":152},[142,47938,31412],{"class":148},[142,47940,31466],{"class":152},[142,47942,47943],{"class":144,"line":1358},[142,47944,31936],{"class":211},[142,47946,47947,47949,47951,47953],{"class":144,"line":1640},[142,47948,30766],{"class":148},[142,47950,31943],{"class":152},[142,47952,30421],{"class":148},[142,47954,43060],{"class":152},[142,47956,47957,47959,47961,47963],{"class":144,"line":1645},[142,47958,30766],{"class":148},[142,47960,30769],{"class":152},[142,47962,30421],{"class":148},[142,47964,30774],{"class":152},[142,47966,47967],{"class":144,"line":1651},[142,47968,2428],{"emptyLinePlaceholder":69},[142,47970,47971],{"class":144,"line":1656},[142,47972,31971],{"class":211},[142,47974,47975,47977,47979],{"class":144,"line":1670},[142,47976,31976],{"class":148},[142,47978,31979],{"class":1991},[142,47980,31982],{"class":152},[142,47982,47983],{"class":144,"line":1675},[142,47984,47985],{"class":211},"    # 导入自己的数据集，并进行数据处理\n",[142,47987,47988],{"class":144,"line":1681},[142,47989,47990],{"class":211},"    # 定义数据集的路径\n",[142,47992,47993,47996,47998,48000,48002,48004,48008],{"class":144,"line":1702},[142,47994,47995],{"class":201},"    ROOT_PATH",[142,47997,198],{"class":148},[142,47999,823],{"class":148},[142,48001,404],{"class":257},[142,48003,711],{"class":201},[142,48005,48007],{"class":48006},"sA_wV","\u002Fdata\u002Ftrain",[142,48009,25162],{"class":257},[142,48011,48012],{"class":144,"line":1707},[142,48013,2428],{"emptyLinePlaceholder":69},[142,48015,48016],{"class":144,"line":1721},[142,48017,48018],{"class":211},"    # 定义归一化方法\n",[142,48020,48021],{"class":144,"line":1726},[142,48022,48023],{"class":211},"    # 这里需要先计算一下数据集的均值和方差\n",[142,48025,48026],{"class":144,"line":1755},[142,48027,48028],{"class":211},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[142,48030,48031],{"class":144,"line":1760},[142,48032,48033],{"class":211},"    # 第一个参数是均值，第二个参数是方差\n",[142,48035,48036,48039,48041,48044,48047,48049,48052,48054,48057,48060,48063,48065,48068,48070,48073],{"class":144,"line":1777},[142,48037,48038],{"class":152},"    normalize",[142,48040,198],{"class":148},[142,48042,48043],{"class":152},"transforms.Normalize([",[142,48045,48046],{"class":201},"0.162",[142,48048,531],{"class":152},[142,48050,48051],{"class":201},"0.151",[142,48053,531],{"class":152},[142,48055,48056],{"class":201},"0.138",[142,48058,48059],{"class":152},"],[",[142,48061,48062],{"class":201},"0.058",[142,48064,531],{"class":152},[142,48066,48067],{"class":201},"0.052",[142,48069,531],{"class":152},[142,48071,48072],{"class":201},"0.048",[142,48074,4685],{"class":152},[142,48076,48077],{"class":144,"line":1782},[142,48078,48079],{"class":211},"    # 定义数据集处理方法变量\n",[142,48081,48082,48085,48087],{"class":144,"line":1787},[142,48083,48084],{"class":152},"    train_transform",[142,48086,198],{"class":148},[142,48088,48089],{"class":152},"transforms.Compose([\n",[142,48091,48092],{"class":144,"line":1792},[142,48093,48094],{"class":211},"        # 调整图像大小为224*224\n",[142,48096,48097,48100,48102,48104,48106],{"class":144,"line":1806},[142,48098,48099],{"class":152},"        transforms.Resize((",[142,48101,31530],{"class":201},[142,48103,531],{"class":152},[142,48105,31530],{"class":201},[142,48107,42651],{"class":152},[142,48109,48110],{"class":144,"line":1811},[142,48111,48112],{"class":211},"        # 将图像转换为张量\n",[142,48114,48115],{"class":144,"line":2605},[142,48116,48117],{"class":152},"        transforms.ToTensor(),\n",[142,48119,48120],{"class":144,"line":2619},[142,48121,48122],{"class":152},"        normalize])\n",[142,48124,48125],{"class":144,"line":2627},[142,48126,48127],{"class":211},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[142,48129,48130],{"class":144,"line":2632},[142,48131,48132],{"class":211},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[142,48134,48135],{"class":144,"line":2638},[142,48136,2428],{"emptyLinePlaceholder":69},[142,48138,48139],{"class":144,"line":2644},[142,48140,48141],{"class":211},"    # 加载数据集\n",[142,48143,48144],{"class":144,"line":2649},[142,48145,48146],{"class":211},"    # 传入数据集路径与处理方法\n",[142,48148,48149,48151,48153,48156,48159,48161,48164,48166],{"class":144,"line":7977},[142,48150,31987],{"class":152},[142,48152,198],{"class":148},[142,48154,48155],{"class":152},"ImageFolder(",[142,48157,48158],{"class":201},"ROOT_PATH",[142,48160,531],{"class":152},[142,48162,48163],{"class":5245},"transform",[142,48165,198],{"class":148},[142,48167,48168],{"class":152},"train_transform)\n",[142,48170,48171],{"class":144,"line":8001},[142,48172,2428],{"emptyLinePlaceholder":69},[142,48174,48175,48177,48179,48181,48183,48185,48187,48189,48191,48193,48195,48197,48199,48201,48203],{"class":144,"line":8006},[142,48176,32039],{"class":152},[142,48178,198],{"class":148},[142,48180,32044],{"class":152},[142,48182,32047],{"class":201},[142,48184,153],{"class":152},[142,48186,32052],{"class":201},[142,48188,608],{"class":148},[142,48190,7387],{"class":201},[142,48192,32059],{"class":152},[142,48194,32047],{"class":201},[142,48196,153],{"class":152},[142,48198,32066],{"class":201},[142,48200,608],{"class":148},[142,48202,7387],{"class":201},[142,48204,32073],{"class":152},[142,48206,48207,48209,48211,48213,48215,48217],{"class":144,"line":8012},[142,48208,32078],{"class":152},[142,48210,198],{"class":148},[142,48212,32083],{"class":152},[142,48214,31566],{"class":5245},[142,48216,198],{"class":148},[142,48218,31571],{"class":152},[142,48220,48221,48223,48225,48227],{"class":144,"line":8039},[142,48222,32094],{"class":5245},[142,48224,198],{"class":148},[142,48226,350],{"class":201},[142,48228,31495],{"class":152},[142,48230,48231,48233,48235,48237],{"class":144,"line":8044},[142,48232,32106],{"class":5245},[142,48234,198],{"class":148},[142,48236,31505],{"class":201},[142,48238,31495],{"class":152},[142,48240,48241],{"class":144,"line":8050},[142,48242,32117],{"class":211},[142,48244,48245,48247,48249,48251],{"class":144,"line":8062},[142,48246,32122],{"class":5245},[142,48248,198],{"class":148},[142,48250,548],{"class":201},[142,48252,159],{"class":152},[142,48254,48255,48257,48259,48261,48263,48265],{"class":144,"line":8074},[142,48256,32133],{"class":152},[142,48258,198],{"class":148},[142,48260,31563],{"class":152},[142,48262,31566],{"class":5245},[142,48264,198],{"class":148},[142,48266,32144],{"class":152},[142,48268,48269,48271,48273,48275],{"class":144,"line":8086},[142,48270,32149],{"class":5245},[142,48272,198],{"class":148},[142,48274,350],{"class":201},[142,48276,31495],{"class":152},[142,48278,48279,48281,48283,48285],{"class":144,"line":9745},[142,48280,32160],{"class":5245},[142,48282,198],{"class":148},[142,48284,31505],{"class":201},[142,48286,31495],{"class":152},[142,48288,48289,48291,48293,48295],{"class":144,"line":9770},[142,48290,32171],{"class":5245},[142,48292,198],{"class":148},[142,48294,548],{"class":201},[142,48296,159],{"class":152},[142,48298,48299,48301],{"class":144,"line":9793},[142,48300,4118],{"class":148},[142,48302,32184],{"class":152},[142,48304,48305],{"class":144,"line":9817},[142,48306,2428],{"emptyLinePlaceholder":69},[142,48308,48309],{"class":144,"line":9822},[142,48310,32193],{"class":211},[142,48312,48313],{"class":144,"line":9827},[142,48314,32198],{"class":211},[142,48316,48317],{"class":144,"line":9832},[142,48318,2428],{"emptyLinePlaceholder":69},[142,48320,48321],{"class":144,"line":9841},[142,48322,32207],{"class":211},[142,48324,48325,48327,48329],{"class":144,"line":9846},[142,48326,31976],{"class":148},[142,48328,32214],{"class":1991},[142,48330,32217],{"class":152},[142,48332,48333,48335,48337,48339,48341,48343,48345,48347,48349],{"class":144,"line":9852},[142,48334,31266],{"class":152},[142,48336,198],{"class":148},[142,48338,30480],{"class":152},[142,48340,31273],{"class":257},[142,48342,1732],{"class":148},[142,48344,31278],{"class":152},[142,48346,1729],{"class":148},[142,48348,32236],{"class":257},[142,48350,159],{"class":152},[142,48352,48353],{"class":144,"line":9873},[142,48354,2428],{"emptyLinePlaceholder":69},[142,48356,48357],{"class":144,"line":9879},[142,48358,32251],{"class":211},[142,48360,48361],{"class":144,"line":9893},[142,48362,32256],{"class":211},[142,48364,48365],{"class":144,"line":9899},[142,48366,32261],{"class":211},[142,48368,48369,48371,48373,48375,48377,48379,48381],{"class":144,"line":9926},[142,48370,32266],{"class":152},[142,48372,198],{"class":148},[142,48374,32271],{"class":152},[142,48376,32274],{"class":5245},[142,48378,198],{"class":148},[142,48380,32279],{"class":201},[142,48382,159],{"class":152},[142,48384,48385],{"class":144,"line":9935},[142,48386,2428],{"emptyLinePlaceholder":69},[142,48388,48389],{"class":144,"line":9941},[142,48390,32290],{"class":211},[142,48392,48393,48395,48397],{"class":144,"line":9949},[142,48394,32295],{"class":152},[142,48396,198],{"class":148},[142,48398,32300],{"class":152},[142,48400,48401],{"class":144,"line":9954},[142,48402,2428],{"emptyLinePlaceholder":69},[142,48404,48405],{"class":144,"line":16633},[142,48406,32309],{"class":211},[142,48408,48409,48411,48413],{"class":144,"line":16639},[142,48410,31318],{"class":152},[142,48412,198],{"class":148},[142,48414,32318],{"class":152},[142,48416,48417],{"class":144,"line":16662},[142,48418,32323],{"class":211},[142,48420,48421],{"class":144,"line":16668},[142,48422,32328],{"class":211},[142,48424,48425],{"class":144,"line":16691},[142,48426,32333],{"class":211},[142,48428,48429,48431,48433],{"class":144,"line":16705},[142,48430,32338],{"class":152},[142,48432,198],{"class":148},[142,48434,32343],{"class":152},[142,48436,48437],{"class":144,"line":16725},[142,48438,2428],{"emptyLinePlaceholder":69},[142,48440,48441],{"class":144,"line":16731},[142,48442,32356],{"class":211},[142,48444,48445],{"class":144,"line":16742},[142,48446,32361],{"class":211},[142,48448,48449,48451,48453],{"class":144,"line":16765},[142,48450,32366],{"class":152},[142,48452,198],{"class":148},[142,48454,32371],{"class":201},[142,48456,48457],{"class":144,"line":16787},[142,48458,32376],{"class":211},[142,48460,48461,48463,48465],{"class":144,"line":16792},[142,48462,32381],{"class":152},[142,48464,198],{"class":148},[142,48466,32386],{"class":152},[142,48468,48469],{"class":144,"line":16798},[142,48470,32391],{"class":211},[142,48472,48473,48475,48477],{"class":144,"line":16812},[142,48474,32396],{"class":152},[142,48476,198],{"class":148},[142,48478,32386],{"class":152},[142,48480,48481],{"class":144,"line":16825},[142,48482,32405],{"class":211},[142,48484,48485,48487,48489],{"class":144,"line":16830},[142,48486,32410],{"class":152},[142,48488,198],{"class":148},[142,48490,32386],{"class":152},[142,48492,48493],{"class":144,"line":16844},[142,48494,32419],{"class":211},[142,48496,48497,48499,48501],{"class":144,"line":16849},[142,48498,32424],{"class":152},[142,48500,198],{"class":148},[142,48502,32386],{"class":152},[142,48504,48505],{"class":144,"line":16855},[142,48506,2428],{"emptyLinePlaceholder":69},[142,48508,48509],{"class":144,"line":16860},[142,48510,32437],{"class":211},[142,48512,48513,48515,48517],{"class":144,"line":16874},[142,48514,32442],{"class":152},[142,48516,198],{"class":148},[142,48518,32447],{"class":152},[142,48520,48521],{"class":144,"line":16879},[142,48522,2428],{"emptyLinePlaceholder":69},[142,48524,48525],{"class":144,"line":16884},[142,48526,32460],{"class":211},[142,48528,48529,48531,48533,48535,48537],{"class":144,"line":16898},[142,48530,3229],{"class":148},[142,48532,32467],{"class":152},[142,48534,26072],{"class":148},[142,48536,32472],{"class":201},[142,48538,32475],{"class":152},[142,48540,48541,48543,48545,48547,48549,48551,48553,48555,48557,48559,48561],{"class":144,"line":16910},[142,48542,32480],{"class":201},[142,48544,153],{"class":152},[142,48546,32485],{"class":257},[142,48548,32488],{"class":201},[142,48550,737],{"class":257},[142,48552,32488],{"class":201},[142,48554,404],{"class":257},[142,48556,32497],{"class":152},[142,48558,685],{"class":148},[142,48560,370],{"class":201},[142,48562,30526],{"class":152},[142,48564,48565,48567,48569,48571,48573,48575],{"class":144,"line":16915},[142,48566,32480],{"class":201},[142,48568,153],{"class":152},[142,48570,32512],{"class":257},[142,48572,608],{"class":148},[142,48574,599],{"class":201},[142,48576,159],{"class":152},[142,48578,48579],{"class":144,"line":16928},[142,48580,2428],{"emptyLinePlaceholder":69},[142,48582,48583],{"class":144,"line":16933},[142,48584,32527],{"class":211},[142,48586,48587],{"class":144,"line":16938},[142,48588,32532],{"class":211},[142,48590,48591,48593,48595],{"class":144,"line":16943},[142,48592,32537],{"class":152},[142,48594,198],{"class":148},[142,48596,32371],{"class":201},[142,48598,48599],{"class":144,"line":16956},[142,48600,32546],{"class":211},[142,48602,48603,48605,48607],{"class":144,"line":16961},[142,48604,32551],{"class":152},[142,48606,198],{"class":148},[142,48608,3113],{"class":201},[142,48610,48611],{"class":144,"line":32662},[142,48612,32560],{"class":211},[142,48614,48615,48617,48619],{"class":144,"line":32668},[142,48616,32565],{"class":152},[142,48618,198],{"class":148},[142,48620,32371],{"class":201},[142,48622,48623],{"class":144,"line":32674},[142,48624,32574],{"class":211},[142,48626,48627,48629,48631],{"class":144,"line":32680},[142,48628,32579],{"class":152},[142,48630,198],{"class":148},[142,48632,3113],{"class":201},[142,48634,48635],{"class":144,"line":32686},[142,48636,32588],{"class":211},[142,48638,48639,48641,48643],{"class":144,"line":32697},[142,48640,32593],{"class":152},[142,48642,198],{"class":148},[142,48644,3113],{"class":201},[142,48646,48647],{"class":144,"line":32703},[142,48648,32602],{"class":211},[142,48650,48651,48653,48655],{"class":144,"line":32723},[142,48652,32607],{"class":152},[142,48654,198],{"class":148},[142,48656,3113],{"class":201},[142,48658,48659],{"class":144,"line":32729},[142,48660,32616],{"class":211},[142,48662,48663,48665,48667,48669,48671],{"class":144,"line":32740},[142,48664,3431],{"class":148},[142,48666,31630],{"class":152},[142,48668,26072],{"class":148},[142,48670,31635],{"class":201},[142,48672,32629],{"class":152},[142,48674,48675],{"class":144,"line":32746},[142,48676,32634],{"class":211},[142,48678,48679,48681,48683],{"class":144,"line":32752},[142,48680,32639],{"class":152},[142,48682,198],{"class":148},[142,48684,32644],{"class":152},[142,48686,48687],{"class":144,"line":32758},[142,48688,32649],{"class":211},[142,48690,48691,48693,48695],{"class":144,"line":32764},[142,48692,32654],{"class":152},[142,48694,198],{"class":148},[142,48696,32659],{"class":152},[142,48698,48699],{"class":144,"line":32770},[142,48700,32665],{"class":211},[142,48702,48703],{"class":144,"line":32776},[142,48704,32671],{"class":152},[142,48706,48707],{"class":144,"line":32782},[142,48708,32677],{"class":211},[142,48710,48711],{"class":144,"line":32802},[142,48712,32683],{"class":211},[142,48714,48715,48717,48719],{"class":144,"line":32808},[142,48716,32689],{"class":152},[142,48718,198],{"class":148},[142,48720,32694],{"class":152},[142,48722,48723],{"class":144,"line":32824},[142,48724,32700],{"class":211},[142,48726,48727,48729,48731,48733,48735,48737,48739],{"class":144,"line":32830},[142,48728,32706],{"class":152},[142,48730,198],{"class":148},[142,48732,32711],{"class":152},[142,48734,32714],{"class":5245},[142,48736,198],{"class":148},[142,48738,370],{"class":201},[142,48740,159],{"class":152},[142,48742,48743],{"class":144,"line":32844},[142,48744,32726],{"class":211},[142,48746,48747,48749,48751],{"class":144,"line":32850},[142,48748,32732],{"class":152},[142,48750,198],{"class":148},[142,48752,32737],{"class":152},[142,48754,48755],{"class":144,"line":32865},[142,48756,32743],{"class":211},[142,48758,48759],{"class":144,"line":32871},[142,48760,32749],{"class":152},[142,48762,48763],{"class":144,"line":32880},[142,48764,32755],{"class":211},[142,48766,48767],{"class":144,"line":32886},[142,48768,32761],{"class":152},[142,48770,48771],{"class":144,"line":32895},[142,48772,32767],{"class":211},[142,48774,48775],{"class":144,"line":32901},[142,48776,32773],{"class":152},[142,48778,48779],{"class":144,"line":32907},[142,48780,32779],{"class":211},[142,48782,48783,48785,48787,48789,48791,48793,48795],{"class":144,"line":32916},[142,48784,32785],{"class":152},[142,48786,9506],{"class":148},[142,48788,32790],{"class":152},[142,48790,608],{"class":148},[142,48792,32795],{"class":152},[142,48794,344],{"class":201},[142,48796,159],{"class":152},[142,48798,48799],{"class":144,"line":32922},[142,48800,32805],{"class":211},[142,48802,48803,48805,48807,48809,48811],{"class":144,"line":32933},[142,48804,32811],{"class":152},[142,48806,9506],{"class":148},[142,48808,32816],{"class":152},[142,48810,2977],{"class":148},[142,48812,32821],{"class":152},[142,48814,48815],{"class":144,"line":32939},[142,48816,32827],{"class":211},[142,48818,48819,48821,48823,48825,48827],{"class":144,"line":32958},[142,48820,32833],{"class":152},[142,48822,9506],{"class":148},[142,48824,32795],{"class":152},[142,48826,344],{"class":201},[142,48828,159],{"class":152},[142,48830,48831],{"class":144,"line":32964},[142,48832,32847],{"class":211},[142,48834,48835,48837,48839,48841,48843],{"class":144,"line":32975},[142,48836,3431],{"class":148},[142,48838,32855],{"class":152},[142,48840,26072],{"class":148},[142,48842,31635],{"class":201},[142,48844,32862],{"class":152},[142,48846,48847],{"class":144,"line":32981},[142,48848,32868],{"class":211},[142,48850,48851,48853,48855],{"class":144,"line":33001},[142,48852,32639],{"class":152},[142,48854,198],{"class":148},[142,48856,32644],{"class":152},[142,48858,48859],{"class":144,"line":33017},[142,48860,32883],{"class":211},[142,48862,48863,48865,48867],{"class":144,"line":33023},[142,48864,32654],{"class":152},[142,48866,198],{"class":148},[142,48868,32659],{"class":152},[142,48870,48871],{"class":144,"line":33037},[142,48872,32898],{"class":211},[142,48874,48875],{"class":144,"line":33043},[142,48876,32904],{"class":152},[142,48878,48879],{"class":144,"line":33049},[142,48880,36385],{"class":211},[142,48882,48883,48885],{"class":144,"line":33060},[142,48884,32910],{"class":148},[142,48886,32913],{"class":152},[142,48888,48889],{"class":144,"line":33066},[142,48890,32919],{"class":211},[142,48892,48893,48895,48897],{"class":144,"line":33072},[142,48894,36400],{"class":152},[142,48896,198],{"class":148},[142,48898,32694],{"class":152},[142,48900,48901],{"class":144,"line":33082},[142,48902,32936],{"class":211},[142,48904,48905,48907,48909,48911,48913,48915,48917],{"class":144,"line":33088},[142,48906,36413],{"class":152},[142,48908,198],{"class":148},[142,48910,32711],{"class":152},[142,48912,32714],{"class":5245},[142,48914,198],{"class":148},[142,48916,370],{"class":201},[142,48918,159],{"class":152},[142,48920,48921],{"class":144,"line":33099},[142,48922,32961],{"class":211},[142,48924,48925,48927,48929],{"class":144,"line":33105},[142,48926,36434],{"class":152},[142,48928,198],{"class":148},[142,48930,32737],{"class":152},[142,48932,48933],{"class":144,"line":33115},[142,48934,32978],{"class":211},[142,48936,48937,48939,48941,48943,48945,48947,48949],{"class":144,"line":33120},[142,48938,36447],{"class":152},[142,48940,9506],{"class":148},[142,48942,36452],{"class":152},[142,48944,608],{"class":148},[142,48946,32795],{"class":152},[142,48948,344],{"class":201},[142,48950,159],{"class":152},[142,48952,48953,48955,48957,48959,48961],{"class":144,"line":33126},[142,48954,36465],{"class":152},[142,48956,9506],{"class":148},[142,48958,32816],{"class":152},[142,48960,2977],{"class":148},[142,48962,32821],{"class":152},[142,48964,48965],{"class":144,"line":33175},[142,48966,36478],{"class":211},[142,48968,48969,48971,48973,48975,48977],{"class":144,"line":33222},[142,48970,36483],{"class":152},[142,48972,9506],{"class":148},[142,48974,32795],{"class":152},[142,48976,344],{"class":201},[142,48978,159],{"class":152},[142,48980,48981],{"class":144,"line":33227},[142,48982,33040],{"class":211},[142,48984,48985],{"class":144,"line":33233},[142,48986,33046],{"class":211},[142,48988,48989,48991,48993],{"class":144,"line":33252},[142,48990,33052],{"class":152},[142,48992,737],{"class":148},[142,48994,33057],{"class":152},[142,48996,48997],{"class":144,"line":33258},[142,48998,33063],{"class":211},[142,49000,49001],{"class":144,"line":33278},[142,49002,33069],{"class":211},[142,49004,49005,49007,49009],{"class":144,"line":33284},[142,49006,33075],{"class":152},[142,49008,737],{"class":148},[142,49010,33057],{"class":152},[142,49012,49013],{"class":144,"line":33290},[142,49014,33085],{"class":211},[142,49016,49017,49019,49021],{"class":144,"line":33300},[142,49018,33091],{"class":152},[142,49020,737],{"class":148},[142,49022,33096],{"class":152},[142,49024,49025],{"class":144,"line":33305},[142,49026,33102],{"class":211},[142,49028,49029,49031,49033],{"class":144,"line":33311},[142,49030,33108],{"class":152},[142,49032,737],{"class":148},[142,49034,33096],{"class":152},[142,49036,49037],{"class":144,"line":33327},[142,49038,2428],{"emptyLinePlaceholder":69},[142,49040,49041],{"class":144,"line":33372},[142,49042,33123],{"class":211},[142,49044,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071,49073,49075,49077,49079,49081,49083],{"class":144,"line":33378},[142,49046,32480],{"class":201},[142,49048,153],{"class":152},[142,49050,3620],{"class":257},[142,49052,32488],{"class":201},[142,49054,33137],{"class":257},[142,49056,1049],{"class":201},[142,49058,33142],{"class":148},[142,49060,1099],{"class":201},[142,49062,33147],{"class":257},[142,49064,1049],{"class":201},[142,49066,33142],{"class":148},[142,49068,1099],{"class":201},[142,49070,3620],{"class":257},[142,49072,33158],{"class":152},[142,49074,685],{"class":148},[142,49076,370],{"class":201},[142,49078,33165],{"class":152},[142,49080,685],{"class":148},[142,49082,370],{"class":201},[142,49084,33172],{"class":152},[142,49086,49087,49089,49091,49093,49095,49097,49099,49101,49103,49105,49107,49109,49111,49113,49115,49117,49119,49121,49123,49125],{"class":144,"line":33384},[142,49088,32480],{"class":201},[142,49090,153],{"class":152},[142,49092,3620],{"class":257},[142,49094,32488],{"class":201},[142,49096,33186],{"class":257},[142,49098,1049],{"class":201},[142,49100,33142],{"class":148},[142,49102,1099],{"class":201},[142,49104,33195],{"class":257},[142,49106,1049],{"class":201},[142,49108,33142],{"class":148},[142,49110,1099],{"class":201},[142,49112,3620],{"class":257},[142,49114,33206],{"class":152},[142,49116,685],{"class":148},[142,49118,370],{"class":201},[142,49120,33213],{"class":152},[142,49122,685],{"class":148},[142,49124,370],{"class":201},[142,49126,33172],{"class":152},[142,49128,49129],{"class":144,"line":33390},[142,49130,2428],{"emptyLinePlaceholder":69},[142,49132,49133],{"class":144,"line":33401},[142,49134,33230],{"class":211},[142,49136,49137,49139,49141,49143,49145,49147,49149],{"class":144,"line":33407},[142,49138,2525],{"class":148},[142,49140,33238],{"class":152},[142,49142,685],{"class":148},[142,49144,370],{"class":201},[142,49146,1093],{"class":152},[142,49148,1113],{"class":148},[142,49150,33249],{"class":152},[142,49152,49153],{"class":144,"line":33413},[142,49154,33255],{"class":211},[142,49156,49157,49159,49161,49163,49165,49167,49169],{"class":144,"line":33419},[142,49158,33261],{"class":152},[142,49160,192],{"class":201},[142,49162,198],{"class":148},[142,49164,33268],{"class":152},[142,49166,685],{"class":148},[142,49168,370],{"class":201},[142,49170,33275],{"class":152},[142,49172,49173],{"class":144,"line":33437},[142,49174,33281],{"class":211},[142,49176,49177],{"class":144,"line":33451},[142,49178,33287],{"class":211},[142,49180,49181,49183,49185],{"class":144,"line":33460},[142,49182,33293],{"class":152},[142,49184,198],{"class":148},[142,49186,32343],{"class":152},[142,49188,49189],{"class":144,"line":33469},[142,49190,2428],{"emptyLinePlaceholder":69},[142,49192,49193],{"class":144,"line":33478},[142,49194,33308],{"class":211},[142,49196,49197,49199,49201,49203,49205],{"class":144,"line":33487},[142,49198,33314],{"class":152},[142,49200,198],{"class":148},[142,49202,33319],{"class":152},[142,49204,685],{"class":148},[142,49206,33324],{"class":152},[142,49208,49209,49211,49213,49215,49217,49219,49221,49223,49225,49227,49229,49231,49233,49235,49237,49239,49241,49243],{"class":144,"line":33493},[142,49210,32480],{"class":201},[142,49212,153],{"class":152},[142,49214,33334],{"class":257},[142,49216,1049],{"class":201},[142,49218,33339],{"class":148},[142,49220,1099],{"class":201},[142,49222,697],{"class":257},[142,49224,1049],{"class":201},[142,49226,33339],{"class":148},[142,49228,1099],{"class":201},[142,49230,33352],{"class":257},[142,49232,33355],{"class":152},[142,49234,33358],{"class":148},[142,49236,1060],{"class":201},[142,49238,33363],{"class":152},[142,49240,481],{"class":148},[142,49242,1060],{"class":201},[142,49244,30526],{"class":152},[142,49246,49247],{"class":144,"line":33499},[142,49248,36762],{"class":211},[142,49250,49251],{"class":144,"line":33507},[142,49252,36767],{"class":211},[142,49254,49255,49257,49259],{"class":144,"line":33512},[142,49256,36772],{"class":152},[142,49258,33396],{"class":257},[142,49260,159],{"class":152},[142,49262,49263],{"class":144,"line":33518},[142,49264,33416],{"class":211},[142,49266,49267,49269,49271,49273,49275,49277],{"class":144,"line":33529},[142,49268,33422],{"class":152},[142,49270,198],{"class":148},[142,49272,33427],{"class":152},[142,49274,33430],{"class":5245},[142,49276,198],{"class":148},[142,49278,1574],{"class":152},[142,49280,49281,49283,49285,49287],{"class":144,"line":33535},[142,49282,33440],{"class":257},[142,49284,1012],{"class":152},[142,49286,33445],{"class":201},[142,49288,33448],{"class":152},[142,49290,49291,49293],{"class":144,"line":33555},[142,49292,33454],{"class":257},[142,49294,33457],{"class":152},[142,49296,49297,49299],{"class":144,"line":33561},[142,49298,33463],{"class":257},[142,49300,33466],{"class":152},[142,49302,49303,49305],{"class":144,"line":33567},[142,49304,33472],{"class":257},[142,49306,33475],{"class":152},[142,49308,49309,49311],{"class":144,"line":33573},[142,49310,33481],{"class":257},[142,49312,33484],{"class":152},[142,49314,49315],{"class":144,"line":33590},[142,49316,33490],{"class":152},[142,49318,49319],{"class":144,"line":33596},[142,49320,33496],{"class":211},[142,49322,49323,49325],{"class":144,"line":33602},[142,49324,4118],{"class":148},[142,49326,33504],{"class":152},[142,49328,49329],{"class":144,"line":33608},[142,49330,2428],{"emptyLinePlaceholder":69},[142,49332,49333],{"class":144,"line":33614},[142,49334,33515],{"class":211},[142,49336,49337,49339,49341],{"class":144,"line":33620},[142,49338,31976],{"class":148},[142,49340,33523],{"class":1991},[142,49342,33526],{"class":152},[142,49344,49345],{"class":144,"line":33647},[142,49346,33532],{"class":211},[142,49348,49349,49351,49353,49355,49357,49359,49361,49363],{"class":144,"line":33671},[142,49350,33538],{"class":152},[142,49352,31722],{"class":5245},[142,49354,198],{"class":148},[142,49356,153],{"class":152},[142,49358,651],{"class":201},[142,49360,531],{"class":152},[142,49362,446],{"class":201},[142,49364,30526],{"class":152},[142,49366,49367],{"class":144,"line":33677},[142,49368,33558],{"class":211},[142,49370,49371],{"class":144,"line":33683},[142,49372,33564],{"class":211},[142,49374,49375],{"class":144,"line":33689},[142,49376,33570],{"class":211},[142,49378,49379,49381,49383,49385,49387,49389,49391],{"class":144,"line":33700},[142,49380,31756],{"class":152},[142,49382,370],{"class":201},[142,49384,531],{"class":152},[142,49386,230],{"class":201},[142,49388,531],{"class":152},[142,49390,370],{"class":201},[142,49392,159],{"class":152},[142,49394,49395],{"class":144,"line":33711},[142,49396,33593],{"class":211},[142,49398,49399],{"class":144,"line":33717},[142,49400,33599],{"class":211},[142,49402,49403],{"class":144,"line":33734},[142,49404,33605],{"class":211},[142,49406,49407],{"class":144,"line":33757},[142,49408,33611],{"class":211},[142,49410,49411],{"class":144,"line":33780},[142,49412,33617],{"class":211},[142,49414,49415,49417,49419,49421,49423,49425,49427,49429,49431],{"class":144,"line":33786},[142,49416,33623],{"class":152},[142,49418,33626],{"class":257},[142,49420,33629],{"class":152},[142,49422,33632],{"class":257},[142,49424,531],{"class":152},[142,49426,33637],{"class":5245},[142,49428,198],{"class":148},[142,49430,33642],{"class":257},[142,49432,159],{"class":152},[142,49434,49435,49437,49439,49441,49443,49445,49447,49449,49451],{"class":144,"line":33791},[142,49436,33623],{"class":152},[142,49438,33626],{"class":257},[142,49440,33654],{"class":152},[142,49442,33657],{"class":257},[142,49444,531],{"class":152},[142,49446,33637],{"class":5245},[142,49448,198],{"class":148},[142,49450,33666],{"class":257},[142,49452,159],{"class":152},[142,49454,49455],{"class":144,"line":33800},[142,49456,33674],{"class":211},[142,49458,49459],{"class":144,"line":33810},[142,49460,33680],{"class":152},[142,49462,49463],{"class":144,"line":33816},[142,49464,33686],{"class":211},[142,49466,49467,49469,49471],{"class":144,"line":33821},[142,49468,33692],{"class":152},[142,49470,33695],{"class":257},[142,49472,159],{"class":152},[142,49474,49475,49477,49479],{"class":144,"line":33827},[142,49476,33703],{"class":152},[142,49478,33706],{"class":257},[142,49480,159],{"class":152},[142,49482,49483],{"class":144,"line":33840},[142,49484,33714],{"class":211},[142,49486,49487,49489,49491,49493,49495,49497,49499],{"class":144,"line":33846},[142,49488,31756],{"class":152},[142,49490,370],{"class":201},[142,49492,531],{"class":152},[142,49494,230],{"class":201},[142,49496,531],{"class":152},[142,49498,230],{"class":201},[142,49500,159],{"class":152},[142,49502,49503,49505,49507,49509,49511,49513,49515,49517,49519],{"class":144,"line":33857},[142,49504,33623],{"class":152},[142,49506,33626],{"class":257},[142,49508,33741],{"class":152},[142,49510,33632],{"class":257},[142,49512,531],{"class":152},[142,49514,33637],{"class":5245},[142,49516,198],{"class":148},[142,49518,33752],{"class":257},[142,49520,159],{"class":152},[142,49522,49523,49525,49527,49529,49531,49533,49535,49537,49539],{"class":144,"line":33868},[142,49524,33623],{"class":152},[142,49526,33626],{"class":257},[142,49528,33764],{"class":152},[142,49530,33657],{"class":257},[142,49532,531],{"class":152},[142,49534,33637],{"class":5245},[142,49536,198],{"class":148},[142,49538,33775],{"class":257},[142,49540,159],{"class":152},[142,49542,49543],{"class":144,"line":33887},[142,49544,33783],{"class":211},[142,49546,49548],{"class":144,"line":49547},219,[142,49549,33680],{"class":152},[142,49551,49553,49555,49557],{"class":144,"line":49552},220,[142,49554,33692],{"class":152},[142,49556,33626],{"class":257},[142,49558,159],{"class":152},[142,49560,49562,49564,49566],{"class":144,"line":49561},221,[142,49563,33703],{"class":152},[142,49565,33805],{"class":257},[142,49567,159],{"class":152},[142,49569,49571],{"class":144,"line":49570},222,[142,49572,33813],{"class":152},[142,49574,49576],{"class":144,"line":49575},223,[142,49577,2428],{"emptyLinePlaceholder":69},[142,49579,49581],{"class":144,"line":49580},224,[142,49582,33824],{"class":211},[142,49584,49586,49588,49590,49592,49594],{"class":144,"line":49585},225,[142,49587,1559],{"class":148},[142,49589,31249],{"class":201},[142,49591,2977],{"class":148},[142,49593,31254],{"class":257},[142,49595,3767],{"class":152},[142,49597,49599],{"class":144,"line":49598},226,[142,49600,33843],{"class":211},[142,49602,49604,49606,49608],{"class":144,"line":49603},227,[142,49605,44575],{"class":152},[142,49607,198],{"class":148},[142,49609,44580],{"class":152},[142,49611,49613,49615,49617],{"class":144,"line":49612},228,[142,49614,33860],{"class":152},[142,49616,198],{"class":148},[142,49618,33865],{"class":152},[142,49620,49622,49624,49626,49628,49630,49632,49634],{"class":144,"line":49621},229,[142,49623,33422],{"class":152},[142,49625,198],{"class":148},[142,49627,44597],{"class":152},[142,49629,33878],{"class":5245},[142,49631,198],{"class":148},[142,49633,1060],{"class":201},[142,49635,159],{"class":152},[142,49637,49639],{"class":144,"line":49638},230,[142,49640,33890],{"class":152},[22027,49642,49644],{"id":49643},"_242测试代码","2.4.2.测试代码",[14,49646,49647],{},"使用测试集进行测试与推理",[133,49649,49651],{"className":30407,"code":49650,"language":30409,"meta":31,"style":31},"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",[139,49652,49653,49659,49669,49679,49690,49700,49704,49708,49716,49721,49725,49742,49746,49750,49754,49758,49762,49794,49798,49806,49810,49822,49826,49830,49834,49838,49842,49846,49850,49854,49872,49886,49890,49900,49910,49920,49926,49930,49934,49942,49946,49962,49970,49974,49978,49986,49994,49998,50002,50006,50010,50016,50020,50030,50038,50046,50050,50054,50058,50066,50070,50086,50090,50094,50098,50110,50114,50126,50130,50134,50146,50150,50160,50164,50168,50180,50184,50192,50196,50200,50208,50212,50220,50224,50228,50232,50236,50240,50256,50264,50268,50272,50290,50296,50300,50310,50318,50326,50330,50334,50338,50342,50350,50354,50370,50374,50382,50390],{"__ignoreMap":31},[142,49654,49655,49657],{"class":144,"line":145},[142,49656,30421],{"class":148},[142,49658,30424],{"class":152},[142,49660,49661,49663,49665,49667],{"class":144,"line":64},[142,49662,30421],{"class":148},[142,49664,31444],{"class":152},[142,49666,31412],{"class":148},[142,49668,31449],{"class":152},[142,49670,49671,49673,49675,49677],{"class":144,"line":1208},[142,49672,30766],{"class":148},[142,49674,31427],{"class":152},[142,49676,30421],{"class":148},[142,49678,31432],{"class":152},[142,49680,49681,49683,49685,49687],{"class":144,"line":1223},[142,49682,30766],{"class":148},[142,49684,31397],{"class":152},[142,49686,30421],{"class":148},[142,49688,49689],{"class":152}," ImageFolder\n",[142,49691,49692,49694,49696,49698],{"class":144,"line":1229},[142,49693,30766],{"class":148},[142,49695,31943],{"class":152},[142,49697,30421],{"class":148},[142,49699,44669],{"class":152},[142,49701,49702],{"class":144,"line":1243},[142,49703,2428],{"emptyLinePlaceholder":69},[142,49705,49706],{"class":144,"line":1249},[142,49707,33980],{"class":211},[142,49709,49710,49712,49714],{"class":144,"line":1340},[142,49711,31976],{"class":148},[142,49713,33987],{"class":1991},[142,49715,31982],{"class":152},[142,49717,49718],{"class":144,"line":1346},[142,49719,49720],{"class":211},"   # 导入自己的数据集，并进行数据处理\n",[142,49722,49723],{"class":144,"line":1358},[142,49724,47990],{"class":211},[142,49726,49727,49729,49731,49733,49735,49737,49740],{"class":144,"line":1640},[142,49728,47995],{"class":201},[142,49730,198],{"class":148},[142,49732,823],{"class":148},[142,49734,404],{"class":257},[142,49736,711],{"class":201},[142,49738,49739],{"class":48006},"\u002Fdata\u002Ftest",[142,49741,25162],{"class":257},[142,49743,49744],{"class":144,"line":1645},[142,49745,2428],{"emptyLinePlaceholder":69},[142,49747,49748],{"class":144,"line":1651},[142,49749,48018],{"class":211},[142,49751,49752],{"class":144,"line":1656},[142,49753,48023],{"class":211},[142,49755,49756],{"class":144,"line":1670},[142,49757,48028],{"class":211},[142,49759,49760],{"class":144,"line":1675},[142,49761,48033],{"class":211},[142,49763,49764,49766,49768,49770,49772,49774,49776,49778,49780,49782,49784,49786,49788,49790,49792],{"class":144,"line":1681},[142,49765,48038],{"class":152},[142,49767,198],{"class":148},[142,49769,48043],{"class":152},[142,49771,48046],{"class":201},[142,49773,531],{"class":152},[142,49775,48051],{"class":201},[142,49777,531],{"class":152},[142,49779,48056],{"class":201},[142,49781,48059],{"class":152},[142,49783,48062],{"class":201},[142,49785,531],{"class":152},[142,49787,48067],{"class":201},[142,49789,531],{"class":152},[142,49791,48072],{"class":201},[142,49793,4685],{"class":152},[142,49795,49796],{"class":144,"line":1702},[142,49797,48079],{"class":211},[142,49799,49800,49802,49804],{"class":144,"line":1707},[142,49801,48084],{"class":152},[142,49803,198],{"class":148},[142,49805,48089],{"class":152},[142,49807,49808],{"class":144,"line":1721},[142,49809,48094],{"class":211},[142,49811,49812,49814,49816,49818,49820],{"class":144,"line":1726},[142,49813,48099],{"class":152},[142,49815,31530],{"class":201},[142,49817,531],{"class":152},[142,49819,31530],{"class":201},[142,49821,42651],{"class":152},[142,49823,49824],{"class":144,"line":1755},[142,49825,48112],{"class":211},[142,49827,49828],{"class":144,"line":1760},[142,49829,48117],{"class":152},[142,49831,49832],{"class":144,"line":1777},[142,49833,48122],{"class":152},[142,49835,49836],{"class":144,"line":1782},[142,49837,48127],{"class":211},[142,49839,49840],{"class":144,"line":1787},[142,49841,48132],{"class":211},[142,49843,49844],{"class":144,"line":1792},[142,49845,2428],{"emptyLinePlaceholder":69},[142,49847,49848],{"class":144,"line":1806},[142,49849,48141],{"class":211},[142,49851,49852],{"class":144,"line":1811},[142,49853,48146],{"class":211},[142,49855,49856,49858,49860,49862,49864,49866,49868,49870],{"class":144,"line":2605},[142,49857,33994],{"class":152},[142,49859,198],{"class":148},[142,49861,48155],{"class":152},[142,49863,48158],{"class":201},[142,49865,531],{"class":152},[142,49867,48163],{"class":5245},[142,49869,198],{"class":148},[142,49871,48168],{"class":152},[142,49873,49874,49876,49878,49880,49882,49884],{"class":144,"line":2619},[142,49875,34051],{"class":152},[142,49877,198],{"class":148},[142,49879,31563],{"class":152},[142,49881,31566],{"class":5245},[142,49883,198],{"class":148},[142,49885,34062],{"class":152},[142,49887,49888],{"class":144,"line":2627},[142,49889,34067],{"class":211},[142,49891,49892,49894,49896,49898],{"class":144,"line":2632},[142,49893,34072],{"class":5245},[142,49895,198],{"class":148},[142,49897,370],{"class":201},[142,49899,31495],{"class":152},[142,49901,49902,49904,49906,49908],{"class":144,"line":2638},[142,49903,34083],{"class":5245},[142,49905,198],{"class":148},[142,49907,31505],{"class":201},[142,49909,31495],{"class":152},[142,49911,49912,49914,49916,49918],{"class":144,"line":2644},[142,49913,34094],{"class":5245},[142,49915,198],{"class":148},[142,49917,344],{"class":201},[142,49919,159],{"class":152},[142,49921,49922,49924],{"class":144,"line":2649},[142,49923,4118],{"class":148},[142,49925,34107],{"class":152},[142,49927,49928],{"class":144,"line":7977},[142,49929,2428],{"emptyLinePlaceholder":69},[142,49931,49932],{"class":144,"line":8001},[142,49933,34116],{"class":211},[142,49935,49936,49938,49940],{"class":144,"line":8006},[142,49937,31976],{"class":148},[142,49939,34123],{"class":1991},[142,49941,34126],{"class":152},[142,49943,49944],{"class":144,"line":8012},[142,49945,34131],{"class":211},[142,49947,49948,49950,49952,49954,49956,49958,49960],{"class":144,"line":8039},[142,49949,31266],{"class":152},[142,49951,198],{"class":148},[142,49953,31273],{"class":257},[142,49955,1732],{"class":148},[142,49957,31278],{"class":152},[142,49959,1729],{"class":148},[142,49961,34148],{"class":257},[142,49963,49964,49966,49968],{"class":144,"line":8044},[142,49965,31318],{"class":152},[142,49967,198],{"class":148},[142,49969,32318],{"class":152},[142,49971,49972],{"class":144,"line":8050},[142,49973,2428],{"emptyLinePlaceholder":69},[142,49975,49976],{"class":144,"line":8062},[142,49977,34165],{"class":211},[142,49979,49980,49982,49984],{"class":144,"line":8074},[142,49981,34170],{"class":152},[142,49983,198],{"class":148},[142,49985,32371],{"class":201},[142,49987,49988,49990,49992],{"class":144,"line":8086},[142,49989,34179],{"class":152},[142,49991,198],{"class":148},[142,49993,3113],{"class":201},[142,49995,49996],{"class":144,"line":9745},[142,49997,2428],{"emptyLinePlaceholder":69},[142,49999,50000],{"class":144,"line":9770},[142,50001,34192],{"class":211},[142,50003,50004],{"class":144,"line":9793},[142,50005,34197],{"class":211},[142,50007,50008],{"class":144,"line":9817},[142,50009,34202],{"class":211},[142,50011,50012,50014],{"class":144,"line":9822},[142,50013,34207],{"class":148},[142,50015,32913],{"class":152},[142,50017,50018],{"class":144,"line":9827},[142,50019,34214],{"class":211},[142,50021,50022,50024,50026,50028],{"class":144,"line":9832},[142,50023,3431],{"class":148},[142,50025,34221],{"class":152},[142,50027,26072],{"class":148},[142,50029,34226],{"class":152},[142,50031,50032,50034,50036],{"class":144,"line":9841},[142,50033,34231],{"class":152},[142,50035,198],{"class":148},[142,50037,34236],{"class":152},[142,50039,50040,50042,50044],{"class":144,"line":9846},[142,50041,34241],{"class":152},[142,50043,198],{"class":148},[142,50045,34246],{"class":152},[142,50047,50048],{"class":144,"line":9852},[142,50049,34251],{"class":211},[142,50051,50052],{"class":144,"line":9873},[142,50053,32904],{"class":152},[142,50055,50056],{"class":144,"line":9879},[142,50057,34260],{"class":211},[142,50059,50060,50062,50064],{"class":144,"line":9893},[142,50061,32689],{"class":152},[142,50063,198],{"class":148},[142,50065,34269],{"class":152},[142,50067,50068],{"class":144,"line":9899},[142,50069,34274],{"class":211},[142,50071,50072,50074,50076,50078,50080,50082,50084],{"class":144,"line":9926},[142,50073,32706],{"class":152},[142,50075,198],{"class":148},[142,50077,32711],{"class":152},[142,50079,32714],{"class":5245},[142,50081,198],{"class":148},[142,50083,370],{"class":201},[142,50085,159],{"class":152},[142,50087,50088],{"class":144,"line":9935},[142,50089,34295],{"class":211},[142,50091,50092],{"class":144,"line":9941},[142,50093,34300],{"class":211},[142,50095,50096],{"class":144,"line":9949},[142,50097,34305],{"class":211},[142,50099,50100,50102,50104,50106,50108],{"class":144,"line":9954},[142,50101,34310],{"class":152},[142,50103,9506],{"class":148},[142,50105,32816],{"class":152},[142,50107,2977],{"class":148},[142,50109,34319],{"class":152},[142,50111,50112],{"class":144,"line":16633},[142,50113,34324],{"class":211},[142,50115,50116,50118,50120,50122,50124],{"class":144,"line":16639},[142,50117,34329],{"class":152},[142,50119,9506],{"class":148},[142,50121,34334],{"class":152},[142,50123,344],{"class":201},[142,50125,159],{"class":152},[142,50127,50128],{"class":144,"line":16662},[142,50129,2428],{"emptyLinePlaceholder":69},[142,50131,50132],{"class":144,"line":16668},[142,50133,34347],{"class":211},[142,50135,50136,50138,50140,50142,50144],{"class":144,"line":16691},[142,50137,34352],{"class":152},[142,50139,198],{"class":148},[142,50141,34357],{"class":152},[142,50143,737],{"class":148},[142,50145,34362],{"class":152},[142,50147,50148],{"class":144,"line":16705},[142,50149,34367],{"class":211},[142,50151,50152,50154,50156,50158],{"class":144,"line":16725},[142,50153,32480],{"class":201},[142,50155,153],{"class":152},[142,50157,34376],{"class":257},[142,50159,34379],{"class":152},[142,50161,50162],{"class":144,"line":16731},[142,50163,2428],{"emptyLinePlaceholder":69},[142,50165,50166],{"class":144,"line":16742},[142,50167,34388],{"class":211},[142,50169,50170,50172,50174,50176,50178],{"class":144,"line":16765},[142,50171,1559],{"class":148},[142,50173,31249],{"class":201},[142,50175,2977],{"class":148},[142,50177,31254],{"class":257},[142,50179,3767],{"class":152},[142,50181,50182],{"class":144,"line":16787},[142,50183,34405],{"class":211},[142,50185,50186,50188,50190],{"class":144,"line":16792},[142,50187,31318],{"class":152},[142,50189,198],{"class":148},[142,50191,44580],{"class":152},[142,50193,50194],{"class":144,"line":16798},[142,50195,34418],{"class":211},[142,50197,50198],{"class":144,"line":16812},[142,50199,34423],{"class":211},[142,50201,50202,50204,50206],{"class":144,"line":16825},[142,50203,34428],{"class":152},[142,50205,34431],{"class":257},[142,50207,30526],{"class":152},[142,50209,50210],{"class":144,"line":16830},[142,50211,34438],{"class":211},[142,50213,50214,50216,50218],{"class":144,"line":16844},[142,50215,34051],{"class":152},[142,50217,198],{"class":148},[142,50219,34447],{"class":152},[142,50221,50222],{"class":144,"line":16849},[142,50223,34452],{"class":211},[142,50225,50226],{"class":144,"line":16855},[142,50227,34457],{"class":152},[142,50229,50230],{"class":144,"line":16860},[142,50231,2428],{"emptyLinePlaceholder":69},[142,50233,50234],{"class":144,"line":16874},[142,50235,34466],{"class":211},[142,50237,50238],{"class":144,"line":16879},[142,50239,34471],{"class":211},[142,50241,50242,50244,50246,50248,50250,50252,50254],{"class":144,"line":16884},[142,50243,31266],{"class":152},[142,50245,198],{"class":148},[142,50247,31273],{"class":257},[142,50249,1732],{"class":148},[142,50251,31278],{"class":152},[142,50253,1729],{"class":148},[142,50255,34148],{"class":257},[142,50257,50258,50260,50262],{"class":144,"line":16898},[142,50259,31318],{"class":152},[142,50261,198],{"class":148},[142,50263,32318],{"class":152},[142,50265,50266],{"class":144,"line":16910},[142,50267,34500],{"class":211},[142,50269,50270],{"class":144,"line":16915},[142,50271,34505],{"class":211},[142,50273,50274,50276,50278,50280,50283,50285,50288],{"class":144,"line":16928},[142,50275,34510],{"class":152},[142,50277,198],{"class":148},[142,50279,1043],{"class":152},[142,50281,50282],{"class":257},"'猫'",[142,50284,531],{"class":152},[142,50286,50287],{"class":257},"'狗'",[142,50289,33275],{"class":152},[142,50291,50292,50294],{"class":144,"line":16933},[142,50293,34207],{"class":148},[142,50295,32913],{"class":152},[142,50297,50298],{"class":144,"line":16938},[142,50299,34575],{"class":211},[142,50301,50302,50304,50306,50308],{"class":144,"line":16943},[142,50303,3431],{"class":148},[142,50305,34582],{"class":152},[142,50307,26072],{"class":148},[142,50309,34226],{"class":152},[142,50311,50312,50314,50316],{"class":144,"line":16956},[142,50313,32639],{"class":152},[142,50315,198],{"class":148},[142,50317,32644],{"class":152},[142,50319,50320,50322,50324],{"class":144,"line":16961},[142,50321,32654],{"class":152},[142,50323,198],{"class":148},[142,50325,32659],{"class":152},[142,50327,50328],{"class":144,"line":32662},[142,50329,2428],{"emptyLinePlaceholder":69},[142,50331,50332],{"class":144,"line":32668},[142,50333,34611],{"class":211},[142,50335,50336],{"class":144,"line":32674},[142,50337,32904],{"class":152},[142,50339,50340],{"class":144,"line":32680},[142,50341,34620],{"class":211},[142,50343,50344,50346,50348],{"class":144,"line":32686},[142,50345,32689],{"class":152},[142,50347,198],{"class":148},[142,50349,32694],{"class":152},[142,50351,50352],{"class":144,"line":32697},[142,50353,34633],{"class":211},[142,50355,50356,50358,50360,50362,50364,50366,50368],{"class":144,"line":32703},[142,50357,32706],{"class":152},[142,50359,198],{"class":148},[142,50361,32711],{"class":152},[142,50363,32714],{"class":5245},[142,50365,198],{"class":148},[142,50367,370],{"class":201},[142,50369,159],{"class":152},[142,50371,50372],{"class":144,"line":32723},[142,50373,34654],{"class":211},[142,50375,50376,50378,50380],{"class":144,"line":32729},[142,50377,34659],{"class":152},[142,50379,198],{"class":148},[142,50381,34664],{"class":152},[142,50383,50384,50386,50388],{"class":144,"line":32740},[142,50385,34669],{"class":152},[142,50387,198],{"class":148},[142,50389,34674],{"class":152},[142,50391,50392,50394,50396,50398,50400,50402,50404,50406],{"class":144,"line":32746},[142,50393,34679],{"class":201},[142,50395,153],{"class":152},[142,50397,34684],{"class":257},[142,50399,34687],{"class":152},[142,50401,34690],{"class":257},[142,50403,531],{"class":152},[142,50405,34695],{"class":257},[142,50407,34698],{"class":152},[5155,50409,50410],{},"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":31,"searchDepth":64,"depth":64,"links":50412},[50413,50414,50415,50416],{"id":30620,"depth":1208,"text":30621},{"id":37868,"depth":1208,"text":37869},{"id":41301,"depth":1208,"text":41302},{"id":45310,"depth":1208,"text":45311},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30612,"description":66},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50423,"title":50424,"body":50425,"description":66,"extension":67,"meta":50432,"navigation":69,"path":50433,"seo":50434,"stem":50435,"__hash__":50436},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50426,"toc":50430},[50427],[10,50428,50424],{"id":50429},"_3yolo模型学习",{"title":31,"searchDepth":64,"depth":64,"links":50431},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50424,"description":66},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50438,"title":50439,"body":50440,"description":50447,"extension":67,"meta":50448,"navigation":69,"path":50450,"seo":50451,"stem":50452,"__hash__":50453},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50441,"toc":50445},[50442],[14,50443,50444],{},"yolo模型还未补充",{"title":31,"searchDepth":64,"depth":64,"links":50446},[],"深度学习学习",{"category":50449},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50439,"description":50447},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50455,"title":50456,"body":50457,"description":66,"extension":67,"meta":50482,"navigation":69,"path":50483,"seo":50484,"stem":50485,"__hash__":50486},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50458,"toc":50480},[50459,50462,50465,50470,50477],[10,50460,50456],{"id":50461},"_1工具",[14,50463,50464],{},"提示错误插件：有问题会提前报错",[14,50466,50467],{},[29,50468],{"alt":31,"src":50469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50471,50472],{},[391,50473,50476],{"href":50474,"rel":50475},"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",[23894],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50478,50479],{},"alt键加上下箭头可以实现语句的移动",{"title":31,"searchDepth":64,"depth":64,"links":50481},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50456,"description":66},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50488,"title":50489,"body":50490,"description":66,"extension":67,"meta":53354,"navigation":69,"path":53355,"seo":53356,"stem":53357,"__hash__":53358},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50491,"toc":53305},[50492,50495,50499,50503,50508,50511,50516,50520,50527,50532,50539,50544,50551,50556,50560,50565,50568,50572,50577,50581,50586,50589,50592,50595,50598,50601,50604,50607,50610,50615,50620,50625,50629,50632,50635,50639,50644,50647,50655,50660,50677,50685,50690,50695,50700,50705,50710,50713,50718,50723,50727,50736,50741,50746,50750,50755,50758,50762,50767,50775,50780,50785,50788,50793,50798,50803,50806,50809,50812,50817,50822,50825,50830,50833,50838,50841,50844,50847,50852,50855,50858,50873,50878,50883,50888,50891,50894,50897,50911,50914,50919,50924,50927,50930,50933,50936,50939,50942,50945,50949,50953,50958,50962,50965,50970,50975,50978,50983,50986,50990,50995,50998,51001,51004,51007,51010,51013,51016,51019,51022,51026,51031,51036,51041,51044,51047,51051,51056,51059,51063,51066,51069,51074,51077,51080,51084,51088,51091,51096,51101,51104,51133,51138,51143,51148,51153,51157,51162,51166,51171,51174,51178,51182,51187,51191,51196,51201,51205,51210,51213,51215,51218,51223,51227,51232,51236,51240,51245,51250,51255,51260,51264,51269,51274,51279,51282,51285,51290,51293,51298,51303,51308,51313,51317,52124,52128,52471,52476,52479,52482,52485,52488,52491,52494,52497,52500,52502,52505,52507,52510,52514,52519,52522,52525,52528,52532,52537,52542,52562,52565,52569,52574,52579,52596,52600,52629,52633,52655,52657,52696,52704,52710,52714,52717,52720,52725,52730,52733,52736,52739,52744,52749,52752,52755,52758,52761,52764,52767,52770,52773,52776,52779,52782,52784,52787,52790,52793,52796,52799,52802,52805,52808,52812,52817,52820,52825,52828,52831,52834,52837,52840,52843,52846,52848,52851,52854,52857,52860,52863,52866,52870,52873,52882,52885,52890,52893,52898,52901,52904,52907,52910,52913,52916,52919,52923,52927,52930,52933,52938,52943,52948,52952,52957,52962,52965,52968,52971,52974,52977,52982,52985,52990,52992,52997,53000,53004,53009,53012,53015,53020,53024,53027,53032,53035,53038,53067,53072,53075,53078,53081,53084,53087,53091,53094,53180,53184,53187,53192,53197,53204,53207,53210,53213,53216,53219,53224,53229,53232,53235,53238,53241,53244,53247,53250,53253,53256,53258,53261,53265,53270,53275,53280,53283,53288,53293,53296,53299,53302],[10,50493,50489],{"id":50494},"_2基础语法",[84,50496,50498],{"id":50497},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[113,50500,50502],{"id":50501},"_211-js组成","2.1.1 js组成",[96,50504,50505],{},[99,50506,50507],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50509,50510],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[96,50512,50513],{"start":64},[99,50514,50515],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[113,50517,50519],{"id":50518},"_212-js书写位置","2.1.2 js书写位置",[96,50521,50522],{},[99,50523,50524],{},[302,50525,50526],{},"内部 JavaScript",[14,50528,50529],{},[29,50530],{"alt":31,"src":50531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[96,50533,50534],{"start":64},[99,50535,50536],{},[302,50537,50538],{},"外部 JavaScript",[14,50540,50541],{},[29,50542],{"alt":31,"src":50543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[96,50545,50546],{"start":1208},[99,50547,50548],{},[302,50549,50550],{},"内联 JavaScript",[14,50552,50553],{},[29,50554],{"alt":31,"src":50555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[113,50557,50559],{"id":50558},"_213-javascript注释","2.1.3 JavaScript注释",[14,50561,50562],{},[29,50563],{"alt":31,"src":50564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50566,50567],{},"alt+shift+a一定要记住！",[113,50569,50571],{"id":50570},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50573,50574],{},[29,50575],{"alt":31,"src":50576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[113,50578,50580],{"id":50579},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[96,50582,50583],{},[99,50584,50585],{},"输出语法：",[14,50587,50588],{},"①document.write('要出的内容')",[14,50590,50591],{},"向body内输出内容；",[14,50593,50594],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50596,50597],{},"②alert('要出的内容')",[14,50599,50600],{},"页面弹出警告对话框",[14,50602,50603],{},"③console.log('控制台打印')",[14,50605,50606],{},"控制台输出语法，程序员调试使用",[14,50608,50609],{},"输入log就行，自动生成：",[14,50611,50612],{},[29,50613],{"alt":31,"src":50614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[96,50616,50617],{"start":64},[99,50618,50619],{},"输入语法：",[14,50621,50622],{},[29,50623],{"alt":31,"src":50624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[113,50626,50628],{"id":50627},"_2116-字面量","21.1.6 字面量",[14,50630,50631],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50633,50634],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[84,50636,50638],{"id":50637},"_22-变量","2.2 变量",[96,50640,50641],{},[99,50642,50643],{},"变量声明",[14,50645,50646],{},"let 变量名",[1160,50648,50649,50652],{},[99,50650,50651],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[99,50653,50654],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[96,50656,50657],{"start":64},[99,50658,50659],{},"变量赋值",[133,50661,50665],{"className":50662,"code":50663,"language":50664,"meta":31,"style":31},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[139,50666,50667,50672],{"__ignoreMap":31},[142,50668,50669],{"class":144,"line":145},[142,50670,50671],{"class":152},"let age\n",[142,50673,50674],{"class":144,"line":64},[142,50675,50676],{"class":152},"age=18\n",[96,50678,50679,50682],{"start":1208},[99,50680,50681],{},"连这些（变量的初始化）：let age=18",[99,50683,50684],{},"更新变量",[14,50686,50687],{},[29,50688],{"alt":31,"src":50689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[96,50691,50692],{"start":1229},[99,50693,50694],{},"声明多个变量",[14,50696,50697],{},[29,50698],{"alt":31,"src":50699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[96,50701,50702],{"start":1243},[99,50703,50704],{},"变量命名规则与规范",[14,50706,50707],{},[29,50708],{"alt":31,"src":50709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50711,50712],{},"遵守小驼峰！",[96,50714,50715],{"start":1249},[99,50716,50717],{},"变量拓展-let和var的区别",[14,50719,50720],{},[29,50721],{"alt":31,"src":50722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[84,50724,50726],{"id":50725},"_23-数组","2.3 数组",[133,50728,50730],{"className":50662,"code":50729,"language":50664,"meta":31,"style":31},"let arr = []\n",[139,50731,50732],{"__ignoreMap":31},[142,50733,50734],{"class":144,"line":145},[142,50735,50729],{"class":152},[14,50737,50738],{},[29,50739],{"alt":31,"src":50740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50742,50743],{},[29,50744],{"alt":31,"src":50745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[84,50747,50749],{"id":50748},"_24-常量","2.4 常量",[14,50751,50752],{},[29,50753],{"alt":31,"src":50754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50756,50757],{},"const — 类似于 let ，但是变量的值无法被修改",[84,50759,50761],{"id":50760},"_25-数据类型","2.5 数据类型",[14,50763,50764],{},[29,50765],{"alt":31,"src":50766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[96,50768,50769,50772],{},[99,50770,50771],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[99,50773,50774],{},"算数运算符：",[14,50776,50777],{},[29,50778],{"alt":31,"src":50779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[96,50781,50782],{"start":1208},[99,50783,50784],{},"数字类型（Number）",[14,50786,50787],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50789,50790],{},[29,50791],{"alt":31,"src":50792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[96,50794,50795],{"start":1223},[99,50796,50797],{},"字符串类型（string）",[14,50799,50800],{},[29,50801],{"alt":31,"src":50802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50804,50805],{},"反引号也是可以使用的",[14,50807,50808],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50810,50811],{},"例如：document.write(\"我今年\"+age+\"岁\")",[96,50813,50814],{"start":1229},[99,50815,50816],{},"模板字符串",[14,50818,50819],{},[29,50820],{"alt":31,"src":50821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50823,50824],{},"类似于python的字符串格式化",[96,50826,50827],{"start":1243},[99,50828,50829],{},"布尔类型",[14,50831,50832],{},"true 和 false",[96,50834,50835],{"start":1249},[99,50836,50837],{},"未定义类型（underfined）",[14,50839,50840],{},"表示没有赋值",[14,50842,50843],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50845,50846],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[96,50848,50849],{"start":1340},[99,50850,50851],{},"null（空类型）",[14,50853,50854],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50856,50857],{},"赋值了，但是内容为空",[133,50859,50861],{"className":50662,"code":50860,"language":50664,"meta":31,"style":31},"typeof null\n输出的是'object'，是一个对象数据类型\n",[139,50862,50863,50868],{"__ignoreMap":31},[142,50864,50865],{"class":144,"line":145},[142,50866,50867],{"class":152},"typeof null\n",[142,50869,50870],{"class":144,"line":64},[142,50871,50872],{"class":152},"输出的是'object'，是一个对象数据类型\n",[96,50874,50875],{"start":1346},[99,50876,50877],{},"控制台检测数据类型",[14,50879,50880],{},[29,50881],{"alt":31,"src":50882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[96,50884,50885],{"start":1358},[99,50886,50887],{},"类型转换",[14,50889,50890],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50892,50893],{},"转换方式：隐式转换和显示转换",[14,50895,50896],{},"①隐式转换",[1160,50898,50899,50902,50905,50908],{},[99,50900,50901],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[99,50903,50904],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[99,50906,50907],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[99,50909,50910],{},"任何数据和字符串相加结果都是字符串",[14,50912,50913],{},"②显示转换",[14,50915,50916],{},[29,50917],{"alt":31,"src":50918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50920,50921],{},[29,50922],{"alt":31,"src":50923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50925,50926],{},"在输入的时候要用好隐式转换，简单写起来",[14,50928,50929],{},"let num = +prompt(’请输入数字：‘)",[14,50931,50932],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50934,50935],{},"console.log(parseInt('12.333px'))",[14,50937,50938],{},"输出为：12",[14,50940,50941],{},"console.log(parseInt('a'a'a12.333px'))",[14,50943,50944],{},"输出：NaN",[84,50946,50948],{"id":50947},"_26-运算符","2.6 运算符",[113,50950,50952],{"id":50951},"_261-赋值运算符","2.6.1 赋值运算符",[14,50954,50955],{},[29,50956],{"alt":31,"src":50957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[113,50959,50961],{"id":50960},"_262-一元运算符","2.6.2 一元运算符",[14,50963,50964],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50966,50967],{},[29,50968],{"alt":31,"src":50969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50971,50972],{},[29,50973],{"alt":31,"src":50974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50976,50977],{},"两者的区别：",[14,50979,50980],{},[29,50981],{"alt":31,"src":50982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,50984,50985],{},"前置先自加；后置后加，代码执行完之后再加",[113,50987,50989],{"id":50988},"_263-比较运算符","2.6.3 比较运算符",[14,50991,50992],{},[29,50993],{"alt":31,"src":50994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,50996,50997],{},"比较运算符也有隐式转换",[14,50999,51000],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51002,51003],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51005,51006],{},"要使用三等，开发的时候",[14,51008,51009],{},"NaN不等于任何人，包括它自己",[14,51011,51012],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51014,51015],{},"7\u002F10=0.7",[14,51017,51018],{},"最后：0.5+0.2=0.7",[14,51020,51021],{},"字符串比较，比较的是字符对应的ASCII码",[113,51023,51025],{"id":51024},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51027,51028],{},[29,51029],{"alt":31,"src":51030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51032,51033],{},[29,51034],{"alt":31,"src":51035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51037,51038],{},[29,51039],{"alt":31,"src":51040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51042,51043],{},"上述题目选D",[14,51045,51046],{},"与真2假1；或真1假2",[113,51048,51050],{"id":51049},"_265-运算符优先级","2.6.5 运算符优先级",[14,51052,51053],{},[29,51054],{"alt":31,"src":51055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51057,51058],{},"先算逻辑与，后算逻辑或",[84,51060,51062],{"id":51061},"_27-语句","2.7 语句",[14,51064,51065],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51067,51068],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51070,51071],{},[29,51072],{"alt":31,"src":51073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51075,51076],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51078,51079],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[113,51081,51083],{"id":51082},"_271-分支语句","2.7.1 分支语句",[22027,51085,51087],{"id":51086},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51089,51090],{},"if语句单行简单的话，可以不写{}，写在一行就行",[96,51092,51093],{},[99,51094,51095],{},"单分支语句",[14,51097,51098],{},[29,51099],{"alt":31,"src":51100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51102,51103],{},"除了0，所有数字都为真",[133,51105,51107],{"className":50662,"code":51106,"language":50664,"meta":31,"style":31},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[139,51108,51109,51114,51119,51124,51128],{"__ignoreMap":31},[142,51110,51111],{"class":144,"line":145},[142,51112,51113],{"class":152},"if（0) {\n",[142,51115,51116],{"class":144,"line":64},[142,51117,51118],{"class":152},"    let a=1\n",[142,51120,51121],{"class":144,"line":1208},[142,51122,51123],{"class":152},"    alert(typeof a)\n",[142,51125,51126],{"class":144,"line":1223},[142,51127,1593],{"class":152},[142,51129,51130],{"class":144,"line":1229},[142,51131,51132],{"class":152},"不输出，括号为假\n",[96,51134,51135],{"start":64},[99,51136,51137],{},"双分支语句",[14,51139,51140],{},[29,51141],{"alt":31,"src":51142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[96,51144,51145],{"start":1208},[99,51146,51147],{},"多分支语句",[14,51149,51150],{},[29,51151],{"alt":31,"src":51152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22027,51154,51156],{"id":51155},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51158,51159],{},[29,51160],{"alt":31,"src":51161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22027,51163,51165],{"id":51164},"_2713-switch语句","2.7.1.3 switch语句",[14,51167,51168],{},[29,51169],{"alt":31,"src":51170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51172,51173],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[113,51175,51177],{"id":51176},"_272-循环语句","2.7.2 循环语句",[22027,51179,51181],{"id":51180},"_2721-断点演示","2.7.2.1 断点演示",[14,51183,51184],{},[29,51185],{"alt":31,"src":51186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22027,51188,51190],{"id":51189},"_2722-while循环","2.7.2.2 while循环",[14,51192,51193],{},[29,51194],{"alt":31,"src":51195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51197,51198],{},[29,51199],{"alt":31,"src":51200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22027,51202,51204],{"id":51203},"_2723-for循环","2.7.2.3 for循环",[14,51206,51207],{},[29,51208],{"alt":31,"src":51209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51211,51212],{},"for(;;) {",[14,51214,1099],{},[14,51216,51217],{},"表示无限循环",[14,51219,51220],{},[29,51221],{"alt":31,"src":51222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22027,51224,51226],{"id":51225},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51228,51229],{},[29,51230],{"alt":31,"src":51231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[84,51233,51235],{"id":51234},"_28-数组","2.8 数组",[113,51237,51239],{"id":51238},"_281-基础认识","2.8.1 基础认识",[14,51241,51242],{},[29,51243],{"alt":31,"src":51244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51246,51247],{},[29,51248],{"alt":31,"src":51249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51251,51252],{},[29,51253],{"alt":31,"src":51254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51256,51257],{},[29,51258],{"alt":31,"src":51259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[113,51261,51263],{"id":51262},"_282-操作数组","2.8.2 操作数组",[14,51265,51266],{},[29,51267],{"alt":31,"src":51268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[96,51270,51271],{},[99,51272,51273],{},"添加元素",[14,51275,51276],{},[29,51277],{"alt":31,"src":51278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51280,51281],{},"console.log(arr.push('green'))",[14,51283,51284],{},"输出结果：为新数组的长度",[14,51286,51287],{},[29,51288],{"alt":31,"src":51289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51291,51292],{},"push用的非常多，一定要记住",[96,51294,51295],{},[99,51296,51297],{},"删除元素",[14,51299,51300],{},[29,51301],{"alt":31,"src":51302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51304,51305],{},[29,51306],{"alt":31,"src":51307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51309,51310],{},[29,51311],{"alt":31,"src":51312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[113,51314,51316],{"id":51315},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[133,51318,51320],{"className":50662,"code":51319,"language":50664,"meta":31,"style":31},"\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",[139,51321,51322,51337,51353,51357,51366,51384,51408,51430,51444,51452,51459,51471,51482,51486,51490,51497,51509,51524,51537,51556,51573,51588,51600,51612,51624,51628,51632,51643,51653,51665,51677,51689,51700,51704,51708,51720,51724,51738,51742,51746,51757,51771,51783,51797,51801,51810,51819,51823,51832,51836,51845,51850,51855,51868,51896,51901,51906,51931,51936,51940,51945,51950,51965,51969,51974,52004,52016,52032,52048,52062,52067,52074,52078,52083,52096,52104,52112,52116],{"__ignoreMap":31},[142,51323,51324,51327,51331,51334],{"class":144,"line":145},[142,51325,51326],{"class":152},"\u003C!",[142,51328,51330],{"class":51329},"s9eBZ","DOCTYPE",[142,51332,51333],{"class":1991}," html",[142,51335,51336],{"class":152},">\n",[142,51338,51339,51341,51343,51346,51348,51351],{"class":144,"line":64},[142,51340,1063],{"class":152},[142,51342,50664],{"class":51329},[142,51344,51345],{"class":1991}," lang",[142,51347,198],{"class":152},[142,51349,51350],{"class":257},"\"en\"",[142,51352,51336],{"class":152},[142,51354,51355],{"class":144,"line":1208},[142,51356,2428],{"emptyLinePlaceholder":69},[142,51358,51359,51361,51364],{"class":144,"line":1223},[142,51360,1063],{"class":152},[142,51362,51363],{"class":51329},"head",[142,51365,51336],{"class":152},[142,51367,51368,51371,51374,51377,51379,51382],{"class":144,"line":1229},[142,51369,51370],{"class":152},"    \u003C",[142,51372,51373],{"class":51329},"meta",[142,51375,51376],{"class":1991}," charset",[142,51378,198],{"class":152},[142,51380,51381],{"class":257},"\"UTF-8\"",[142,51383,51336],{"class":152},[142,51385,51386,51388,51390,51393,51395,51398,51401,51403,51406],{"class":144,"line":1243},[142,51387,51370],{"class":152},[142,51389,51373],{"class":51329},[142,51391,51392],{"class":1991}," http-equiv",[142,51394,198],{"class":152},[142,51396,51397],{"class":257},"\"X-UA-Compatible\"",[142,51399,51400],{"class":1991}," content",[142,51402,198],{"class":152},[142,51404,51405],{"class":257},"\"IE=edge\"",[142,51407,51336],{"class":152},[142,51409,51410,51412,51414,51416,51418,51421,51423,51425,51428],{"class":144,"line":1249},[142,51411,51370],{"class":152},[142,51413,51373],{"class":51329},[142,51415,14949],{"class":1991},[142,51417,198],{"class":152},[142,51419,51420],{"class":257},"\"viewport\"",[142,51422,51400],{"class":1991},[142,51424,198],{"class":152},[142,51426,51427],{"class":257},"\"width=device-width, initial-scale=1.0\"",[142,51429,51336],{"class":152},[142,51431,51432,51434,51437,51440,51442],{"class":144,"line":1340},[142,51433,51370],{"class":152},[142,51435,51436],{"class":51329},"title",[142,51438,51439],{"class":152},">Document\u003C\u002F",[142,51441,51436],{"class":51329},[142,51443,51336],{"class":152},[142,51445,51446,51448,51450],{"class":144,"line":1346},[142,51447,51370],{"class":152},[142,51449,5155],{"class":51329},[142,51451,51336],{"class":152},[142,51453,51454,51457],{"class":144,"line":1358},[142,51455,51456],{"class":51329},"        *",[142,51458,15601],{"class":152},[142,51460,51461,51464,51467,51469],{"class":144,"line":1640},[142,51462,51463],{"class":201},"            margin",[142,51465,51466],{"class":152},": ",[142,51468,344],{"class":201},[142,51470,1319],{"class":152},[142,51472,51473,51476,51478,51480],{"class":144,"line":1645},[142,51474,51475],{"class":201},"            padding",[142,51477,51466],{"class":152},[142,51479,344],{"class":201},[142,51481,1319],{"class":152},[142,51483,51484],{"class":144,"line":1651},[142,51485,2557],{"class":152},[142,51487,51488],{"class":144,"line":1656},[142,51489,2428],{"emptyLinePlaceholder":69},[142,51491,51492,51495],{"class":144,"line":1670},[142,51493,51494],{"class":1991},"        .box",[142,51496,15601],{"class":152},[142,51498,51499,51502,51504,51507],{"class":144,"line":1675},[142,51500,51501],{"class":201},"            display",[142,51503,51466],{"class":152},[142,51505,51506],{"class":201},"flex",[142,51508,1319],{"class":152},[142,51510,51511,51514,51516,51519,51522],{"class":144,"line":1681},[142,51512,51513],{"class":201},"            width",[142,51515,51466],{"class":152},[142,51517,51518],{"class":201},"700",[142,51520,51521],{"class":148},"px",[142,51523,1319],{"class":152},[142,51525,51526,51529,51531,51533,51535],{"class":144,"line":1702},[142,51527,51528],{"class":201},"            height",[142,51530,51466],{"class":152},[142,51532,4001],{"class":201},[142,51534,51521],{"class":148},[142,51536,1319],{"class":152},[142,51538,51539,51542,51544,51546,51548,51551,51554],{"class":144,"line":1707},[142,51540,51541],{"class":201},"            border-left",[142,51543,51466],{"class":152},[142,51545,370],{"class":201},[142,51547,51521],{"class":148},[142,51549,51550],{"class":201}," solid",[142,51552,51553],{"class":201}," pink",[142,51555,1319],{"class":152},[142,51557,51558,51561,51563,51565,51567,51569,51571],{"class":144,"line":1721},[142,51559,51560],{"class":201},"            border-bottom",[142,51562,51466],{"class":152},[142,51564,370],{"class":201},[142,51566,51521],{"class":148},[142,51568,51550],{"class":201},[142,51570,51553],{"class":201},[142,51572,1319],{"class":152},[142,51574,51575,51577,51579,51581,51583,51586],{"class":144,"line":1726},[142,51576,51463],{"class":201},[142,51578,51466],{"class":152},[142,51580,809],{"class":201},[142,51582,51521],{"class":148},[142,51584,51585],{"class":201}," auto",[142,51587,1319],{"class":152},[142,51589,51590,51593,51595,51598],{"class":144,"line":1755},[142,51591,51592],{"class":201},"            justify-content",[142,51594,51466],{"class":152},[142,51596,51597],{"class":201},"space-around",[142,51599,1319],{"class":152},[142,51601,51602,51605,51607,51610],{"class":144,"line":1760},[142,51603,51604],{"class":201},"            align-items",[142,51606,51466],{"class":152},[142,51608,51609],{"class":201},"flex-end",[142,51611,1319],{"class":152},[142,51613,51614,51617,51619,51622],{"class":144,"line":1777},[142,51615,51616],{"class":201},"            text-align",[142,51618,51466],{"class":152},[142,51620,51621],{"class":201},"center",[142,51623,1319],{"class":152},[142,51625,51626],{"class":144,"line":1782},[142,51627,2557],{"class":152},[142,51629,51630],{"class":144,"line":1787},[142,51631,2428],{"emptyLinePlaceholder":69},[142,51633,51634,51636,51638,51641],{"class":144,"line":1792},[142,51635,51494],{"class":1991},[142,51637,1113],{"class":148},[142,51639,51640],{"class":51329},"div",[142,51642,15601],{"class":152},[142,51644,51645,51647,51649,51651],{"class":144,"line":1806},[142,51646,51501],{"class":201},[142,51648,51466],{"class":152},[142,51650,51506],{"class":201},[142,51652,1319],{"class":152},[142,51654,51655,51657,51659,51661,51663],{"class":144,"line":1811},[142,51656,51513],{"class":201},[142,51658,51466],{"class":152},[142,51660,809],{"class":201},[142,51662,51521],{"class":148},[142,51664,1319],{"class":152},[142,51666,51667,51670,51672,51675],{"class":144,"line":2605},[142,51668,51669],{"class":201},"            background-color",[142,51671,51466],{"class":152},[142,51673,51674],{"class":201},"pink",[142,51676,1319],{"class":152},[142,51678,51679,51682,51684,51687],{"class":144,"line":2619},[142,51680,51681],{"class":201},"            flex-direction",[142,51683,51466],{"class":152},[142,51685,51686],{"class":201},"column",[142,51688,1319],{"class":152},[142,51690,51691,51693,51695,51698],{"class":144,"line":2627},[142,51692,51592],{"class":201},[142,51694,51466],{"class":152},[142,51696,51697],{"class":201},"space-between",[142,51699,1319],{"class":152},[142,51701,51702],{"class":144,"line":2632},[142,51703,2557],{"class":152},[142,51705,51706],{"class":144,"line":2638},[142,51707,2428],{"emptyLinePlaceholder":69},[142,51709,51710,51712,51715,51718],{"class":144,"line":2644},[142,51711,51494],{"class":1991},[142,51713,51714],{"class":51329}," div",[142,51716,51717],{"class":51329}," span",[142,51719,15601],{"class":152},[142,51721,51722],{"class":144,"line":2649},[142,51723,2428],{"emptyLinePlaceholder":69},[142,51725,51726,51729,51731,51734,51736],{"class":144,"line":7977},[142,51727,51728],{"class":201},"            margin-top",[142,51730,51466],{"class":152},[142,51732,51733],{"class":201},"-20",[142,51735,51521],{"class":148},[142,51737,1319],{"class":152},[142,51739,51740],{"class":144,"line":8001},[142,51741,2557],{"class":152},[142,51743,51744],{"class":144,"line":8006},[142,51745,2428],{"emptyLinePlaceholder":69},[142,51747,51748,51750,51752,51755],{"class":144,"line":8012},[142,51749,51494],{"class":1991},[142,51751,51714],{"class":51329},[142,51753,51754],{"class":51329}," h4",[142,51756,15601],{"class":152},[142,51758,51759,51762,51764,51767,51769],{"class":144,"line":8039},[142,51760,51761],{"class":201},"            margin-bottom",[142,51763,51466],{"class":152},[142,51765,51766],{"class":201},"-35",[142,51768,51521],{"class":148},[142,51770,1319],{"class":152},[142,51772,51773,51775,51777,51779,51781],{"class":144,"line":8044},[142,51774,51513],{"class":201},[142,51776,51466],{"class":152},[142,51778,509],{"class":201},[142,51780,51521],{"class":148},[142,51782,1319],{"class":152},[142,51784,51785,51788,51790,51793,51795],{"class":144,"line":8050},[142,51786,51787],{"class":201},"            margin-left",[142,51789,51466],{"class":152},[142,51791,51792],{"class":201},"-10",[142,51794,51521],{"class":148},[142,51796,1319],{"class":152},[142,51798,51799],{"class":144,"line":8062},[142,51800,2557],{"class":152},[142,51802,51803,51806,51808],{"class":144,"line":8074},[142,51804,51805],{"class":152},"    \u003C\u002F",[142,51807,5155],{"class":51329},[142,51809,51336],{"class":152},[142,51811,51812,51815,51817],{"class":144,"line":8086},[142,51813,51814],{"class":152},"\u003C\u002F",[142,51816,51363],{"class":51329},[142,51818,51336],{"class":152},[142,51820,51821],{"class":144,"line":9745},[142,51822,2428],{"emptyLinePlaceholder":69},[142,51824,51825,51827,51830],{"class":144,"line":9770},[142,51826,1063],{"class":152},[142,51828,51829],{"class":51329},"body",[142,51831,51336],{"class":152},[142,51833,51834],{"class":144,"line":9793},[142,51835,2428],{"emptyLinePlaceholder":69},[142,51837,51838,51840,51843],{"class":144,"line":9817},[142,51839,51370],{"class":152},[142,51841,51842],{"class":51329},"script",[142,51844,51336],{"class":152},[142,51846,51847],{"class":144,"line":9822},[142,51848,51849],{"class":211},"        \u002F\u002F 1. 四次弹框效果\n",[142,51851,51852],{"class":144,"line":9827},[142,51853,51854],{"class":211},"        \u002F\u002F 声明一个新的数组\n",[142,51856,51857,51860,51863,51865],{"class":144,"line":9832},[142,51858,51859],{"class":148},"        let",[142,51861,51862],{"class":152}," arr ",[142,51864,198],{"class":148},[142,51866,51867],{"class":152}," []\n",[142,51869,51870,51872,51874,51877,51879,51881,51883,51885,51887,51890,51892,51894],{"class":144,"line":9841},[142,51871,3431],{"class":148},[142,51873,1686],{"class":152},[142,51875,51876],{"class":148},"let",[142,51878,9467],{"class":152},[142,51880,198],{"class":148},[142,51882,25147],{"class":201},[142,51884,9474],{"class":152},[142,51886,1616],{"class":148},[142,51888,51889],{"class":201}," 4",[142,51891,3242],{"class":152},[142,51893,2320],{"class":148},[142,51895,12471],{"class":152},[142,51897,51898],{"class":144,"line":9846},[142,51899,51900],{"class":211},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[142,51902,51903],{"class":144,"line":9852},[142,51904,51905],{"class":211},"            \u002F\u002F arr.push(num)\n",[142,51907,51908,51911,51914,51916,51919,51921,51924,51926,51929],{"class":144,"line":9873},[142,51909,51910],{"class":152},"            arr.",[142,51912,51913],{"class":1991},"push",[142,51915,153],{"class":152},[142,51917,51918],{"class":1991},"prompt",[142,51920,153],{"class":152},[142,51922,51923],{"class":257},"`请输入第${",[142,51925,594],{"class":152},[142,51927,51928],{"class":257},"}季度的数据:`",[142,51930,30526],{"class":152},[142,51932,51933],{"class":144,"line":9879},[142,51934,51935],{"class":211},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[142,51937,51938],{"class":144,"line":9893},[142,51939,2557],{"class":152},[142,51941,51942],{"class":144,"line":9899},[142,51943,51944],{"class":211},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[142,51946,51947],{"class":144,"line":9926},[142,51948,51949],{"class":211},"        \u002F\u002F 盒子开头\n",[142,51951,51952,51955,51958,51960,51963],{"class":144,"line":9935},[142,51953,51954],{"class":152},"        document.",[142,51956,51957],{"class":1991},"write",[142,51959,153],{"class":152},[142,51961,51962],{"class":257},"` \u003Cdiv class=\"box\">`",[142,51964,159],{"class":152},[142,51966,51967],{"class":144,"line":9941},[142,51968,2428],{"emptyLinePlaceholder":69},[142,51970,51971],{"class":144,"line":9949},[142,51972,51973],{"class":211},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[142,51975,51976,51978,51980,51982,51984,51986,51988,51990,51992,51995,51998,52000,52002],{"class":144,"line":9954},[142,51977,3431],{"class":148},[142,51979,1686],{"class":152},[142,51981,51876],{"class":148},[142,51983,9467],{"class":152},[142,51985,198],{"class":148},[142,51987,4121],{"class":201},[142,51989,9474],{"class":152},[142,51991,1063],{"class":148},[142,51993,51994],{"class":152}," arr.",[142,51996,51997],{"class":201},"length",[142,51999,3242],{"class":152},[142,52001,2320],{"class":148},[142,52003,12471],{"class":152},[142,52005,52006,52009,52011,52013],{"class":144,"line":16633},[142,52007,52008],{"class":152},"            document.",[142,52010,51957],{"class":1991},[142,52012,153],{"class":152},[142,52014,52015],{"class":257},"`\n",[142,52017,52018,52021,52023,52025,52027,52029],{"class":144,"line":16639},[142,52019,52020],{"class":257},"              \u003Cdiv style=\"height: ${",[142,52022,3908],{"class":152},[142,52024,1043],{"class":257},[142,52026,594],{"class":152},[142,52028,1093],{"class":257},[142,52030,52031],{"class":257},"}px;\">\n",[142,52033,52034,52037,52039,52041,52043,52045],{"class":144,"line":16662},[142,52035,52036],{"class":257},"                \u003Cspan>${",[142,52038,3908],{"class":152},[142,52040,1043],{"class":257},[142,52042,594],{"class":152},[142,52044,1093],{"class":257},[142,52046,52047],{"class":257},"}\u003C\u002Fspan>\n",[142,52049,52050,52053,52055,52057,52059],{"class":144,"line":16668},[142,52051,52052],{"class":257},"                \u003Ch4>第${",[142,52054,594],{"class":152},[142,52056,45595],{"class":148},[142,52058,25147],{"class":201},[142,52060,52061],{"class":257},"}季度\u003C\u002Fh4>\n",[142,52063,52064],{"class":144,"line":16691},[142,52065,52066],{"class":257},"              \u003C\u002Fdiv>          \n",[142,52068,52069,52072],{"class":144,"line":16705},[142,52070,52071],{"class":257},"            `",[142,52073,159],{"class":152},[142,52075,52076],{"class":144,"line":16725},[142,52077,2557],{"class":152},[142,52079,52080],{"class":144,"line":16731},[142,52081,52082],{"class":211},"        \u002F\u002F 盒子结尾\n",[142,52084,52085,52087,52089,52091,52094],{"class":144,"line":16742},[142,52086,51954],{"class":152},[142,52088,51957],{"class":1991},[142,52090,153],{"class":152},[142,52092,52093],{"class":257},"` \u003C\u002Fdiv>`",[142,52095,159],{"class":152},[142,52097,52098,52100,52102],{"class":144,"line":16765},[142,52099,51805],{"class":152},[142,52101,51842],{"class":51329},[142,52103,51336],{"class":152},[142,52105,52106,52108,52110],{"class":144,"line":16787},[142,52107,51814],{"class":152},[142,52109,51829],{"class":51329},[142,52111,51336],{"class":152},[142,52113,52114],{"class":144,"line":16792},[142,52115,2428],{"emptyLinePlaceholder":69},[142,52117,52118,52120,52122],{"class":144,"line":16798},[142,52119,51814],{"class":152},[142,52121,50664],{"class":51329},[142,52123,51336],{"class":152},[113,52125,52127],{"id":52126},"_284-冒泡排序","2.8.4 冒泡排序",[133,52129,52131],{"className":50662,"code":52130,"language":50664,"meta":31,"style":31},"\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",[139,52132,52133,52143,52157,52161,52169,52184,52204,52216,52224,52228,52236,52244,52276,52309,52346,52351,52370,52375,52388,52403,52419,52423,52428,52432,52442,52451,52459,52463],{"__ignoreMap":31},[142,52134,52135,52137,52139,52141],{"class":144,"line":145},[142,52136,51326],{"class":152},[142,52138,51330],{"class":51329},[142,52140,51333],{"class":1991},[142,52142,51336],{"class":152},[142,52144,52145,52147,52149,52151,52153,52155],{"class":144,"line":64},[142,52146,1063],{"class":152},[142,52148,50664],{"class":51329},[142,52150,51345],{"class":1991},[142,52152,198],{"class":152},[142,52154,51350],{"class":257},[142,52156,51336],{"class":152},[142,52158,52159],{"class":144,"line":1208},[142,52160,2428],{"emptyLinePlaceholder":69},[142,52162,52163,52165,52167],{"class":144,"line":1223},[142,52164,1063],{"class":152},[142,52166,51363],{"class":51329},[142,52168,51336],{"class":152},[142,52170,52171,52174,52176,52178,52180,52182],{"class":144,"line":1229},[142,52172,52173],{"class":152},"  \u003C",[142,52175,51373],{"class":51329},[142,52177,51376],{"class":1991},[142,52179,198],{"class":152},[142,52181,51381],{"class":257},[142,52183,51336],{"class":152},[142,52185,52186,52188,52190,52192,52194,52196,52198,52200,52202],{"class":144,"line":1243},[142,52187,52173],{"class":152},[142,52189,51373],{"class":51329},[142,52191,14949],{"class":1991},[142,52193,198],{"class":152},[142,52195,51420],{"class":257},[142,52197,51400],{"class":1991},[142,52199,198],{"class":152},[142,52201,51427],{"class":257},[142,52203,51336],{"class":152},[142,52205,52206,52208,52210,52212,52214],{"class":144,"line":1249},[142,52207,52173],{"class":152},[142,52209,51436],{"class":51329},[142,52211,51439],{"class":152},[142,52213,51436],{"class":51329},[142,52215,51336],{"class":152},[142,52217,52218,52220,52222],{"class":144,"line":1340},[142,52219,51814],{"class":152},[142,52221,51363],{"class":51329},[142,52223,51336],{"class":152},[142,52225,52226],{"class":144,"line":1346},[142,52227,2428],{"emptyLinePlaceholder":69},[142,52229,52230,52232,52234],{"class":144,"line":1358},[142,52231,1063],{"class":152},[142,52233,51829],{"class":51329},[142,52235,51336],{"class":152},[142,52237,52238,52240,52242],{"class":144,"line":1640},[142,52239,52173],{"class":152},[142,52241,51842],{"class":51329},[142,52243,51336],{"class":152},[142,52245,52246,52249,52251,52253,52256,52258,52260,52262,52264,52266,52268,52270,52272,52274],{"class":144,"line":1645},[142,52247,52248],{"class":148},"    let",[142,52250,51862],{"class":152},[142,52252,198],{"class":148},[142,52254,52255],{"class":152}," [",[142,52257,472],{"class":201},[142,52259,12464],{"class":152},[142,52261,446],{"class":201},[142,52263,12464],{"class":152},[142,52265,224],{"class":201},[142,52267,12464],{"class":152},[142,52269,230],{"class":201},[142,52271,12464],{"class":152},[142,52273,370],{"class":201},[142,52275,33275],{"class":152},[142,52277,52278,52280,52282,52284,52286,52288,52290,52292,52294,52296,52298,52301,52303,52305,52307],{"class":144,"line":1651},[142,52279,3229],{"class":148},[142,52281,1686],{"class":152},[142,52283,51876],{"class":148},[142,52285,9467],{"class":152},[142,52287,198],{"class":148},[142,52289,4121],{"class":201},[142,52291,9474],{"class":152},[142,52293,1063],{"class":148},[142,52295,51994],{"class":152},[142,52297,51997],{"class":201},[142,52299,52300],{"class":148}," -",[142,52302,25147],{"class":201},[142,52304,3242],{"class":152},[142,52306,2320],{"class":148},[142,52308,12471],{"class":152},[142,52310,52311,52314,52316,52318,52320,52322,52324,52326,52328,52330,52332,52334,52336,52338,52340,52342,52344],{"class":144,"line":1656},[142,52312,52313],{"class":148},"      for",[142,52315,1686],{"class":152},[142,52317,51876],{"class":148},[142,52319,9529],{"class":152},[142,52321,198],{"class":148},[142,52323,4121],{"class":201},[142,52325,9536],{"class":152},[142,52327,1063],{"class":148},[142,52329,51994],{"class":152},[142,52331,51997],{"class":201},[142,52333,52300],{"class":148},[142,52335,9467],{"class":152},[142,52337,685],{"class":148},[142,52339,25147],{"class":201},[142,52341,9543],{"class":152},[142,52343,2320],{"class":148},[142,52345,12471],{"class":152},[142,52347,52348],{"class":144,"line":1670},[142,52349,52350],{"class":211},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[142,52352,52353,52355,52358,52360,52363,52365,52367],{"class":144,"line":1675},[142,52354,2525],{"class":148},[142,52356,52357],{"class":152}," (arr[j] ",[142,52359,1113],{"class":148},[142,52361,52362],{"class":152}," arr[j ",[142,52364,634],{"class":148},[142,52366,25147],{"class":201},[142,52368,52369],{"class":152},"]) {\n",[142,52371,52372],{"class":144,"line":1681},[142,52373,52374],{"class":211},"          \u002F\u002F 交换两个变量\n",[142,52376,52377,52380,52383,52385],{"class":144,"line":1702},[142,52378,52379],{"class":148},"          let",[142,52381,52382],{"class":152}," tmp ",[142,52384,198],{"class":148},[142,52386,52387],{"class":152}," arr[j]\n",[142,52389,52390,52393,52395,52397,52399,52401],{"class":144,"line":1707},[142,52391,52392],{"class":152},"          arr[j] ",[142,52394,198],{"class":148},[142,52396,52362],{"class":152},[142,52398,634],{"class":148},[142,52400,25147],{"class":201},[142,52402,33275],{"class":152},[142,52404,52405,52408,52410,52412,52414,52416],{"class":144,"line":1721},[142,52406,52407],{"class":152},"          arr[j ",[142,52409,634],{"class":148},[142,52411,25147],{"class":201},[142,52413,4471],{"class":152},[142,52415,198],{"class":148},[142,52417,52418],{"class":152}," tmp\n",[142,52420,52421],{"class":144,"line":1726},[142,52422,2557],{"class":152},[142,52424,52425],{"class":144,"line":1755},[142,52426,52427],{"class":152},"      }\n",[142,52429,52430],{"class":144,"line":1760},[142,52431,2215],{"class":152},[142,52433,52434,52437,52439],{"class":144,"line":1777},[142,52435,52436],{"class":152},"    document.",[142,52438,51957],{"class":1991},[142,52440,52441],{"class":152},"(arr)\n",[142,52443,52444,52447,52449],{"class":144,"line":1782},[142,52445,52446],{"class":152},"  \u003C\u002F",[142,52448,51842],{"class":51329},[142,52450,51336],{"class":152},[142,52452,52453,52455,52457],{"class":144,"line":1787},[142,52454,51814],{"class":152},[142,52456,51829],{"class":51329},[142,52458,51336],{"class":152},[142,52460,52461],{"class":144,"line":1792},[142,52462,2428],{"emptyLinePlaceholder":69},[142,52464,52465,52467,52469],{"class":144,"line":1806},[142,52466,51814],{"class":152},[142,52468,50664],{"class":51329},[142,52470,51336],{"class":152},[14,52472,52473],{},[29,52474],{"alt":31,"src":52475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52477,52478],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52480,52481],{},"let arr = [4, 2, 5, 1, 3]",[14,52483,52484],{},"\u002F\u002F 1.升序排列写法",[14,52486,52487],{},"arr.sort(function (a, b) {",[14,52489,52490],{},"return a - b",[14,52492,52493],{},"})",[14,52495,52496],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52498,52499],{},"\u002F\u002F 降序排列写法",[14,52501,52487],{},[14,52503,52504],{},"return b - a",[14,52506,52493],{},[14,52508,52509],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[84,52511,52513],{"id":52512},"_29-函数","2.9 函数",[14,52515,52516],{},[29,52517],{"alt":31,"src":52518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52520,52521],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52523,52524],{},"函数的声明用function",[14,52526,52527],{},"函数里边可以嵌套函数",[113,52529,52531],{"id":52530},"_291-函数传参","2.9.1 函数传参",[14,52533,52534],{},[29,52535],{"alt":31,"src":52536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52538,52539],{},[29,52540],{"alt":31,"src":52541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1160,52543,52544,52547,52550,52553,52556,52559],{},[99,52545,52546],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[99,52548,52549],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[99,52551,52552],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[99,52554,52555],{},"开发中尽量保持形参和实参个数一致",[99,52557,52558],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[99,52560,52561],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52563,52564],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[113,52566,52568],{"id":52567},"_292-函数的返回值","2.9.2 函数的返回值",[14,52570,52571],{},[29,52572],{"alt":31,"src":52573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52575,52576],{},[29,52577],{"alt":31,"src":52578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1160,52580,52581,52584,52587,52590,52593],{},[99,52582,52583],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[99,52585,52586],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[99,52588,52589],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[99,52591,52592],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[99,52594,52595],{},"断点调试:进入函数内部看执行过程F11",[113,52597,52599],{"id":52598},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[133,52601,52603],{"className":50662,"code":52602,"language":50664,"meta":31,"style":31},"    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",[139,52604,52605,52610,52615,52619,52624],{"__ignoreMap":31},[142,52606,52607],{"class":144,"line":145},[142,52608,52609],{"class":152},"    function fn(a, b) {\n",[142,52611,52612],{"class":144,"line":64},[142,52613,52614],{"class":152},"      console.log(a + b);\n",[142,52616,52617],{"class":144,"line":1208},[142,52618,2215],{"class":152},[142,52620,52621],{"class":144,"line":1223},[142,52622,52623],{"class":152},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[142,52625,52626],{"class":144,"line":1229},[142,52627,52628],{"class":152},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[113,52630,52632],{"id":52631},"_294-作用域","2.9.4 作用域",[1160,52634,52635,52641,52646,52649,52652],{},[99,52636,52637,52638],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[302,52639,52640],{},"作用域",[99,52642,52643],{},[302,52644,52645],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[99,52647,52648],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[99,52650,52651],{},"函数内部可以直接所使用全局变量",[99,52653,52654],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52656,14662],{},[133,52658,52660],{"className":50662,"code":52659,"language":50664,"meta":31,"style":31},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[139,52661,52662,52667,52672,52676,52681,52686,52691],{"__ignoreMap":31},[142,52663,52664],{"class":144,"line":145},[142,52665,52666],{"class":152},"    function fun() {\n",[142,52668,52669],{"class":144,"line":64},[142,52670,52671],{"class":152},"      num = 10\n",[142,52673,52674],{"class":144,"line":1208},[142,52675,2215],{"class":152},[142,52677,52678],{"class":144,"line":1223},[142,52679,52680],{"class":152},"    fun()\n",[142,52682,52683],{"class":144,"line":1229},[142,52684,52685],{"class":152},"    console.log(num)\n",[142,52687,52688],{"class":144,"line":1243},[142,52689,52690],{"class":152},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[142,52692,52693],{"class":144,"line":1249},[142,52694,52695],{"class":152},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1160,52697,52698,52701],{},[99,52699,52700],{},"函数内部的形参可以看做是局部变量",[99,52702,52703],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52705,52706,52707],{},"变量访问原则： ",[302,52708,52709],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[113,52711,52713],{"id":52712},"_295-匿名函数","2.9.5 匿名函数",[14,52715,52716],{},"函数可以分为具名函数和匿名函数",[14,52718,52719],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[96,52721,52722],{},[99,52723,52724],{},"函数表达式",[14,52726,52727],{},[29,52728],{"alt":31,"src":52729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52731,52732],{},"里边也可以写参数",[14,52734,52735],{},"具名函数调用位置可以随意调整；",[14,52737,52738],{},"匿名函数函数表达式形式只能在声明后才可以使用",[96,52740,52741],{"start":64},[99,52742,52743],{},"立即执行函数",[14,52745,52746],{},[29,52747],{"alt":31,"src":52748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52750,52751],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52753,52754],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52756,52757],{},"(function () {})();",[14,52759,52760],{},"不要落下最后的;",[14,52762,52763],{},"立即执行函数必须要加;",[14,52765,52766],{},"分号写前写后都没问题",[14,52768,52769],{},"写前：",[14,52771,52772],{},"(function() {})()",[14,52774,52775],{},";(function () {})();",[14,52777,52778],{},"写后:",[14,52780,52781],{},"(function() {})();",[14,52783,52757],{},[14,52785,52786],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52788,52789],{},"还有一种写法：",[14,52791,52792],{},"(function(){}());",[14,52794,52795],{},"或者:",[14,52797,52798],{},"!function(){}();",[14,52800,52801],{},"立即执行函数有时候也是可以加名字的：",[14,52803,52804],{},"(function flexible(window,document) {}(window,document));",[14,52806,52807],{},"省一些调用方法",[113,52809,52811],{"id":52810},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52813,52814],{},[29,52815],{"alt":31,"src":52816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52818,52819],{},"这样就不用非得给x,y初始化了",[14,52821,52822],{},[29,52823],{"alt":31,"src":52824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52826,52827],{},"代码执行时先看左边",[14,52829,52830],{},"例如：console.log(false && 3+5)",[14,52832,52833],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52835,52836],{},"&&都是真时，就返回最后一个真值",[14,52838,52839],{},"console.log(11 && 22)",[14,52841,52842],{},"输出22",[14,52844,52845],{},"逻辑与：遇真则真",[14,52847,14662],{},[14,52849,52850],{},"let age=1",[14,52852,52853],{},"console.log(11 || age++)",[14,52855,52856],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52858,52859],{},"console.log(11 || 22)",[14,52861,52862],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52864,52865],{},"||如果都是假的话，就取最后一个假的值了",[113,52867,52869],{"id":52868},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52871,52872],{},"显示转换：",[14,52874,52875,52878,52879],{},[302,52876,52877],{},"记忆","： ",[302,52880,52881],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52883,52884],{},"空字符串为假，其他字符串全为真",[14,52886,52887],{},[29,52888],{"alt":31,"src":52889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52891,52892],{},"隐式转换：",[14,52894,52895],{},[29,52896],{"alt":31,"src":52897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52899,52900],{},"隐式转换:",[14,52902,52903],{},"null+3=3",[14,52905,52906],{},"undefined+3=NaN",[14,52908,52909],{},"null==undefined 输出true,他两个都当0看",[14,52911,52912],{},"null===undefined 输出false",[14,52914,52915],{},"undefined做任何操作都是NaN",[14,52917,52918],{},"NaN不等于NaN，NaN表示计算错误",[84,52920,52922],{"id":52921},"_210-对象","2.10 对象",[113,52924,52926],{"id":52925},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52928,52929],{},"对象也是一种数据类型，里边的数据是无序的",[14,52931,52932],{},"对象由属性和方法组成",[14,52934,52935],{},[29,52936],{"alt":31,"src":52937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52939,52940],{},[29,52941],{"alt":31,"src":52942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52944,52945],{},[29,52946],{"alt":31,"src":52947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[113,52949,52951],{"id":52950},"_2102-对象属性","2.10.2 对象属性",[14,52953,52954],{},[29,52955],{"alt":31,"src":52956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[96,52958,52959],{},[99,52960,52961],{},"查询对象",[14,52963,52964],{},"对象名.属性 goods.uname",[14,52966,52967],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52969,52970],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52972,52973],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52975,52976],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[96,52978,52979],{"start":64},[99,52980,52981],{},"重新赋值",[14,52983,52984],{},"对象名.属性=新值",[96,52986,52987],{"start":1208},[99,52988,52989],{},"增加新数据",[14,52991,52984],{},[96,52993,52994],{"start":1223},[99,52995,52996],{},"删除对象中的属性",[14,52998,52999],{},"delete 对象名.属性",[113,53001,53003],{"id":53002},"_2103-对象方法","2.10.3 对象方法",[14,53005,53006],{},[29,53007],{"alt":31,"src":53008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53010,53011],{},"后边跟的是匿名函数",[14,53013,53014],{},"对象外面的叫函数；对象内部的叫方法",[14,53016,53017],{},[29,53018],{"alt":31,"src":53019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[113,53021,53023],{"id":53022},"_2104-遍历对象","2.10.4 遍历对象",[14,53025,53026],{},"理解为加括号的python字典遍历",[14,53028,53029],{},[29,53030],{"alt":31,"src":53031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53033,53034],{},"k是字符串类型",[14,53036,53037],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[133,53039,53041],{"className":50662,"code":53040,"language":50664,"meta":31,"style":31},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[139,53042,53043,53048,53053,53058,53063],{"__ignoreMap":31},[142,53044,53045],{"class":144,"line":145},[142,53046,53047],{"class":152},"   let arr = [1, 2, 3]\n",[142,53049,53050],{"class":144,"line":64},[142,53051,53052],{"class":152},"    for (let k in arr) {\n",[142,53054,53055],{"class":144,"line":1208},[142,53056,53057],{"class":152},"      console.log(k)\n",[142,53059,53060],{"class":144,"line":1223},[142,53061,53062],{"class":152},"      console.log(arr[k])\n",[142,53064,53065],{"class":144,"line":1229},[142,53066,2215],{"class":152},[14,53068,53069],{},[29,53070],{"alt":31,"src":53071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53073,53074],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53076,53077],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53079,53080],{},"for in 得到的k是属性名",[51842,53082,53083],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[14,53085,53086],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[113,53088,53090],{"id":53089},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53092,53093],{},"数组中放对象信息",[133,53095,53099],{"className":53096,"code":53097,"language":53098,"meta":31,"style":31},"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",[139,53100,53101,53109,53114,53119,53124,53129,53134,53139,53144,53149,53154,53159,53164,53168,53172],{"__ignoreMap":31},[142,53102,53103,53105,53107],{"class":144,"line":145},[142,53104,1063],{"class":152},[142,53106,51842],{"class":51329},[142,53108,51336],{"class":152},[142,53110,53111],{"class":144,"line":64},[142,53112,53113],{"class":152},"    let students = [\n",[142,53115,53116],{"class":144,"line":1208},[142,53117,53118],{"class":152},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[142,53120,53121],{"class":144,"line":1223},[142,53122,53123],{"class":152},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[142,53125,53126],{"class":144,"line":1229},[142,53127,53128],{"class":152},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[142,53130,53131],{"class":144,"line":1243},[142,53132,53133],{"class":152},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[142,53135,53136],{"class":144,"line":1249},[142,53137,53138],{"class":152},"    ]\n",[142,53140,53141],{"class":144,"line":1340},[142,53142,53143],{"class":152},"    for (let i = 0; i \u003C students.length; i++) {\n",[142,53145,53146],{"class":144,"line":1346},[142,53147,53148],{"class":152},"      for (let k in students[i]) {\n",[142,53150,53151],{"class":144,"line":1358},[142,53152,53153],{"class":152},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[142,53155,53156],{"class":144,"line":1640},[142,53157,53158],{"class":152},"        \u002F\u002F输出每个人的名字：\n",[142,53160,53161],{"class":144,"line":1645},[142,53162,53163],{"class":152},"        \u002F\u002Fconsole.log(students[i].name)\n",[142,53165,53166],{"class":144,"line":1651},[142,53167,52427],{"class":152},[142,53169,53170],{"class":144,"line":1656},[142,53171,2215],{"class":152},[142,53173,53174,53176,53178],{"class":144,"line":1670},[142,53175,52446],{"class":152},[142,53177,51842],{"class":51329},[142,53179,51336],{"class":152},[113,53181,53183],{"id":53182},"_2106-内置对象","2.10.6 内置对象",[14,53185,53186],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[96,53188,53189],{},[99,53190,53191],{},"数学对象Math",[14,53193,53194],{},[29,53195],{"alt":31,"src":53196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53198,53199],{},[391,53200,53203],{"href":53201,"rel":53202},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23894],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53205,53206],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53208,53209],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53211,53212],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53214,53215],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53217,53218],{},"null属于对象数据类型",[96,53220,53221],{"start":64},[99,53222,53223],{},"生成任意范围随机数",[14,53225,53226],{},[29,53227],{"alt":31,"src":53228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53230,53231],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53233,53234],{},"乘以几就取不到几",[14,53236,53237],{},"取数组中的随机元素：",[14,53239,53240],{},"let arr = ['red', 'green', 'blue']",[14,53242,53243],{},"let random = Math.floor(Math.random() * arr.length)",[14,53245,53246],{},"console.log(arr[random])",[14,53248,53249],{},"这个函数得到的是全闭区间",[14,53251,53252],{},"function getRandom(N, M) {",[14,53254,53255],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53257,1099],{},[14,53259,53260],{},"console.log(getRandom(4, 8))",[113,53262,53264],{"id":53263},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53266,53267],{},[29,53268],{"alt":31,"src":53269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53271,53272],{},[29,53273],{"alt":31,"src":53274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53276,53277],{},[29,53278],{"alt":31,"src":53279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53281,53282],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53284,53285],{},[29,53286],{"alt":31,"src":53287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53289,53290],{},[29,53291],{"alt":31,"src":53292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53294,53295],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53297,53298],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53300,53301],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5155,53303,53304],{},"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":31,"searchDepth":64,"depth":64,"links":53306},[53307,53315,53316,53317,53318,53319,53326,53330,53336,53345],{"id":50497,"depth":64,"text":50498,"children":53308},[53309,53310,53311,53312,53313,53314],{"id":50501,"depth":1208,"text":50502},{"id":50518,"depth":1208,"text":50519},{"id":50558,"depth":1208,"text":50559},{"id":50570,"depth":1208,"text":50571},{"id":50579,"depth":1208,"text":50580},{"id":50627,"depth":1208,"text":50628},{"id":50637,"depth":64,"text":50638},{"id":50725,"depth":64,"text":50726},{"id":50748,"depth":64,"text":50749},{"id":50760,"depth":64,"text":50761},{"id":50947,"depth":64,"text":50948,"children":53320},[53321,53322,53323,53324,53325],{"id":50951,"depth":1208,"text":50952},{"id":50960,"depth":1208,"text":50961},{"id":50988,"depth":1208,"text":50989},{"id":51024,"depth":1208,"text":51025},{"id":51049,"depth":1208,"text":51050},{"id":51061,"depth":64,"text":51062,"children":53327},[53328,53329],{"id":51082,"depth":1208,"text":51083},{"id":51176,"depth":1208,"text":51177},{"id":51234,"depth":64,"text":51235,"children":53331},[53332,53333,53334,53335],{"id":51238,"depth":1208,"text":51239},{"id":51262,"depth":1208,"text":51263},{"id":51315,"depth":1208,"text":51316},{"id":52126,"depth":1208,"text":52127},{"id":52512,"depth":64,"text":52513,"children":53337},[53338,53339,53340,53341,53342,53343,53344],{"id":52530,"depth":1208,"text":52531},{"id":52567,"depth":1208,"text":52568},{"id":52598,"depth":1208,"text":52599},{"id":52631,"depth":1208,"text":52632},{"id":52712,"depth":1208,"text":52713},{"id":52810,"depth":1208,"text":52811},{"id":52868,"depth":1208,"text":52869},{"id":52921,"depth":64,"text":52922,"children":53346},[53347,53348,53349,53350,53351,53352,53353],{"id":52925,"depth":1208,"text":52926},{"id":52950,"depth":1208,"text":52951},{"id":53002,"depth":1208,"text":53003},{"id":53022,"depth":1208,"text":53023},{"id":53089,"depth":1208,"text":53090},{"id":53182,"depth":1208,"text":53183},{"id":53263,"depth":1208,"text":53264},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50489,"description":66},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53360,"title":53361,"body":53362,"description":66,"extension":67,"meta":76702,"navigation":69,"path":76703,"seo":76704,"stem":76705,"__hash__":76706},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53363,"toc":76642},[53364,53367,53370,53373,53378,53381,53384,53387,53391,53395,53401,53406,53414,53421,53424,53428,53433,53438,53443,53446,53449,53460,53463,53467,53470,53473,53478,53483,53488,53491,53494,53586,53589,53594,53597,53602,53605,53608,53613,53616,53621,53625,53628,53642,53646,53651,53654,53657,53661,53666,53669,53673,53677,53682,53686,53691,53694,53697,53700,53703,53706,53709,53714,53719,53747,53750,53753,53756,53761,53764,53767,53770,53773,53777,53806,53810,53815,53820,53823,53826,53829,53834,53949,53954,53959,54120,54125,54128,54132,54137,54142,54145,54148,54151,54154,54157,54160,54163,54166,54169,54172,54175,54178,54181,54184,54186,54189,54192,54195,54200,54204,54601,54604,54610,54614,54619,55901,55906,55909,55912,55915,55920,57116,57120,57126,57131,57134,57139,57144,57148,57152,57157,57160,57165,57168,57171,57175,58083,58086,58090,58311,58314,58317,58320,58546,58549,58773,58776,58780,58785,58788,58791,59019,59022,59055,59058,59062,59067,59071,59074,59077,59080,59083,59086,59089,59092,59097,60377,60381,60384,61477,61481,61484,61487,61490,61493,61497,61500,61503,61505,61513,62994,62998,63001,63004,63007,63216,63219,63223,63227,63232,63237,63240,63243,63248,63252,63257,63260,63369,63373,63378,63383,63386,63389,63393,63398,63403,63408,63411,63414,63425,63428,63433,63438,63441,63444,63517,63521,63526,63529,63531,63542,63546,63551,64877,64880,64883,64886,64888,64891,64894,64897,64900,64903,64906,64909,64912,64915,64918,64921,64924,64926,64928,64931,64935,66029,66032,66035,66051,66065,66068,66073,66079,66084,66088,66092,66097,66101,66106,66548,66553,66556,66560,66565,66568,66571,66575,66580,66584,66589,66594,66598,66603,66608,66611,66616,66621,66625,66630,66635,66739,66742,66746,66751,67117,67120,67123,67126,67129,67132,67135,67138,67141,68437,68441,68446,68451,68454,68457,68460,68463,68465,68470,68475,68478,68482,68487,68492,68497,68500,68503,68506,68509,68512,68517,68520,68524,68529,68534,68538,68543,68546,68551,68554,68557,68560,68563,68566,68571,68574,68577,68580,68583,68587,68592,68595,68599,68604,68607,68610,68614,68643,68646,68650,68654,68659,68663,68668,68671,68674,68677,68680,68683,68686,68689,68692,68695,68698,68701,68704,68707,68710,68714,68719,68724,68727,68731,68735,68740,68743,68747,68750,68753,68758,68763,68768,68773,68778,68781,68784,68789,68794,68798,68803,68806,68811,68814,68817,68820,68823,68828,68831,68840,68844,68849,68852,68855,68859,68862,68867,68871,68874,68880,68886,68890,68916,68919,70480,70483,70979,70982,70987,70992,70997,71001,71006,71011,71016,71020,71025,71028,71031,71034,71037,71041,71044,71049,71052,71057,71061,71066,71069,71074,71079,71084,71087,71090,71095,71100,71103,71106,71110,71113,71118,71121,71126,71129,71134,71139,71144,71147,71152,71217,71220,71231,71235,71240,71412,71416,71421,71424,71427,71430,71434,71445,71449,71452,71457,71462,71465,71468,71471,71474,71477,71479,71482,71485,71488,71493,71496,71501,71504,71508,71511,71514,71528,71532,71535,71590,71595,71598,71601,71606,71609,71613,71618,71748,71752,71757,71762,71843,71848,71852,71855,71860,71865,71871,71874,71877,71880,71884,71889,71892,71903,71907,71924,74971,74975,74978,74981,74984,75005,75009,75012,75020,75023,75028,75031,75034,75039,75044,75048,75069,75073,75078,75081,75084,75087,75090,75094,75099,75102,75106,75111,75114,75119,75122,75127,75130,75135,76338,76342,76347,76350,76355,76639],[10,53365,53361],{"id":53366},"_3web-apis",[14,53368,53369],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53371,53372],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53374,53375],{},[29,53376],{"alt":31,"src":53377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53379,53380],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53382,53383],{},"建议数组和对象使用 const 来声明",[14,53385,53386],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[84,53388,53390],{"id":53389},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[113,53392,53394],{"id":53393},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53396,53397,53400],{},[139,53398,53399],{},"document"," = HTML 文件解析后的对象化表示；",[14,53402,53403,53405],{},[139,53404,53399],{}," ≠ HTML 文件本身",[14,53407,53408,53413],{},[302,53409,53410],{},[139,53411,53412],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53415,53416,53420],{},[302,53417,53418],{},[139,53419,53399],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53422,53423],{},"document实际上为window.document的简写",[113,53425,53427],{"id":53426},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53429,53430],{},[29,53431],{"alt":31,"src":53432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53434,53435],{},[29,53436],{"alt":31,"src":53437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53439,53440],{},[29,53441],{"alt":31,"src":53442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53444,53445],{},"console.dir()",[14,53447,53448],{},"dir用来打印对象",[1160,53450,53451,53454,53457],{},[99,53452,53453],{},"任何一个标签，都是一个对象",[99,53455,53456],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[99,53458,53459],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53461,53462],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[113,53464,53466],{"id":53465},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53468,53469],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53471,53472],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53474,53475],{},[302,53476,53477],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[96,53479,53480],{},[99,53481,53482],{},"利用CSS选择器来获取标签元素",[14,53484,53485],{},[29,53486],{"alt":31,"src":53487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53489,53490],{},"里边的选择器必须必须加引号！！！",[14,53492,53493],{},"只选择第一个元素",[133,53495,53497],{"className":53096,"code":53496,"language":53098,"meta":31,"style":31},"\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",[139,53498,53499,53507,53528,53547,53555,53560,53565,53570,53578],{"__ignoreMap":31},[142,53500,53501,53503,53505],{"class":144,"line":145},[142,53502,1063],{"class":152},[142,53504,51829],{"class":51329},[142,53506,51336],{"class":152},[142,53508,53509,53511,53513,53516,53518,53521,53524,53526],{"class":144,"line":64},[142,53510,52173],{"class":152},[142,53512,51640],{"class":51329},[142,53514,53515],{"class":1991}," class",[142,53517,198],{"class":152},[142,53519,53520],{"class":257},"\"box\"",[142,53522,53523],{"class":152},">123\u003C\u002F",[142,53525,51640],{"class":51329},[142,53527,51336],{"class":152},[142,53529,53530,53532,53534,53536,53538,53540,53543,53545],{"class":144,"line":1208},[142,53531,52173],{"class":152},[142,53533,51640],{"class":51329},[142,53535,53515],{"class":1991},[142,53537,198],{"class":152},[142,53539,53520],{"class":257},[142,53541,53542],{"class":152},">456\u003C\u002F",[142,53544,51640],{"class":51329},[142,53546,51336],{"class":152},[142,53548,53549,53551,53553],{"class":144,"line":1223},[142,53550,52173],{"class":152},[142,53552,51842],{"class":51329},[142,53554,51336],{"class":152},[142,53556,53557],{"class":144,"line":1229},[142,53558,53559],{"class":152},"    \u002F\u002F 1.获取匹配的第一个元素\n",[142,53561,53562],{"class":144,"line":1243},[142,53563,53564],{"class":152},"    const box = document.querySelector('div')\n",[142,53566,53567],{"class":144,"line":1249},[142,53568,53569],{"class":152},"    console.dir(box)\n",[142,53571,53572,53574,53576],{"class":144,"line":1340},[142,53573,52446],{"class":152},[142,53575,51842],{"class":51329},[142,53577,51336],{"class":152},[142,53579,53580,53582,53584],{"class":144,"line":1346},[142,53581,51814],{"class":152},[142,53583,51829],{"class":51329},[142,53585,51336],{"class":152},[14,53587,53588],{},"只选123，不选456",[14,53590,53591],{},[29,53592],{"alt":31,"src":53593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53595,53596],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53598,53599],{},[29,53600],{"alt":31,"src":53601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53603,53604],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53606,53607],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[96,53609,53610],{"start":64},[99,53611,53612],{},"其他方法来获取标签元素",[14,53614,53615],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53617,53618],{},[29,53619],{"alt":31,"src":53620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[113,53622,53624],{"id":53623},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53626,53627],{},"设置修改DOM元素内容有两种方式：",[1160,53629,53630,53633,53636,53639],{},[99,53631,53632],{},"元素.innerText=''",[99,53634,53635],{},"元素.innerHTML=''",[99,53637,53638],{},"不写字符串输出数字也是可以的",[99,53640,53641],{},"元素.innerHtml=1",[22027,53643,53645],{"id":53644},"_3131-innertext","3.1.3.1 innerText",[14,53647,53648],{},[29,53649],{"alt":31,"src":53650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53652,53653],{},"思路：实现了修改盒子中的内容！",[14,53655,53656],{},"它只显示纯文本，不解析标签",[22027,53658,53660],{"id":53659},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53662,53663],{},[29,53664],{"alt":31,"src":53665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53667,53668],{},"相比于innerText，他的强大之处在于可以解析标签",[113,53670,53672],{"id":53671},"_314-操作元素属性","3.1.4 操作元素属性",[22027,53674,53676],{"id":53675},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53678,53679],{},[29,53680],{"alt":31,"src":53681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22027,53683,53685],{"id":53684},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53687,53688],{},[29,53689],{"alt":31,"src":53690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53692,53693],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53695,53696],{},"div.style.backgroundColor = 'hotpink'",[14,53698,53699],{},"如果按照css的写法，-表示减，就会出错",[14,53701,53702],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53704,53705],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53707,53708],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53710,53711],{},[29,53712],{"alt":31,"src":53713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53715,53716],{},[29,53717],{"alt":31,"src":53718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[96,53720,53721,53724,53727,53730,53733,53736],{},[99,53722,53723],{},"className这个方式就是修改很多样式的时候来使用的！",[99,53725,53726],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[99,53728,53729],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[99,53731,53732],{},"className为属性名，如果还用class的话就导致与关键字冲突",[99,53734,53735],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[99,53737,53738,53739,53744],{},"解析标签的时候就变为了",[51640,53740],{"className":53741},[53742,53743],"nav","box",[53745,53746],"br",{},[14,53748,53749],{},"例子：",[51640,53751],{"className":53752},[53742],[51842,53754,53755],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53757,53758],{},[29,53759],{"alt":31,"src":53760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53762,53763],{},"追加和删除类名用classList",[14,53765,53766],{},"常用于类似于开关的操作",[14,53768,53769],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53771,53772],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22027,53774,53776],{"id":53775},"_3143-牢记点","3.1.4.3 牢记点",[96,53778,53779,53782,53785,53788,53791,53794,53797,53800,53803],{},[99,53780,53781],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[99,53783,53784],{},"使用style属性操作css时不要忘记引号",[99,53786,53787],{},"使用className或者classList时也不要忘记引号",[99,53789,53790],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[99,53792,53793],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[99,53795,53796],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[99,53798,53799],{},"若： let arr=['1','2',3] arr[0]=1",[99,53801,53802],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[99,53804,53805],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[113,53807,53809],{"id":53808},"_315-操作表单元素","3.1.5 操作表单元素",[96,53811,53812],{},[99,53813,53814],{},"天生的属性",[14,53816,53817],{},[29,53818],{"alt":31,"src":53819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53821,53822],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53824,53825],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53827,53828],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53830,53831],{},[29,53832],{"alt":31,"src":53833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[133,53835,53837],{"className":50662,"code":53836,"language":50664,"meta":31,"style":31},"在复选框中如果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",[139,53838,53839,53844,53876,53881,53886,53891,53896,53900,53905,53910,53927,53939,53944],{"__ignoreMap":31},[142,53840,53841],{"class":144,"line":145},[142,53842,53843],{"class":152},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[142,53845,53846,53848,53851,53854,53856,53859,53861,53863,53865,53867,53869,53871,53874],{"class":144,"line":64},[142,53847,1063],{"class":152},[142,53849,53850],{"class":51329},"input",[142,53852,53853],{"class":1991}," type",[142,53855,198],{"class":152},[142,53857,53858],{"class":257},"\"checkbox\"",[142,53860,14949],{"class":1991},[142,53862,198],{"class":152},[142,53864,7681],{"class":257},[142,53866,14988],{"class":1991},[142,53868,198],{"class":152},[142,53870,7681],{"class":257},[142,53872,53873],{"class":1991}," checked",[142,53875,51336],{"class":152},[142,53877,53878],{"class":144,"line":1208},[142,53879,53880],{"class":152},"不选的话：\n",[142,53882,53883],{"class":144,"line":1223},[142,53884,53885],{"class":152},"const input = document.querySelector('input')\n",[142,53887,53888],{"class":144,"line":1229},[142,53889,53890],{"class":152},"input.checked=false\n",[142,53892,53893],{"class":144,"line":1243},[142,53894,53895],{"class":152},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[142,53897,53898],{"class":144,"line":1249},[142,53899,2428],{"emptyLinePlaceholder":69},[142,53901,53902],{"class":144,"line":1340},[142,53903,53904],{"class":152},"禁用按钮：\n",[142,53906,53907],{"class":144,"line":1346},[142,53908,53909],{"class":152},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[142,53911,53912,53914,53917,53920,53923,53925],{"class":144,"line":1358},[142,53913,1063],{"class":152},[142,53915,53916],{"class":51329},"button",[142,53918,53919],{"class":1991}," disabled",[142,53921,53922],{"class":152},">点击\u003C\u002F",[142,53924,53916],{"class":51329},[142,53926,51336],{"class":152},[142,53928,53929,53931,53933,53935,53937],{"class":144,"line":1640},[142,53930,1063],{"class":152},[142,53932,53916],{"class":51329},[142,53934,53922],{"class":152},[142,53936,53916],{"class":51329},[142,53938,51336],{"class":152},[142,53940,53941],{"class":144,"line":1645},[142,53942,53943],{"class":152},"const bt = document.querySelector('button')\n",[142,53945,53946],{"class":144,"line":1651},[142,53947,53948],{"class":152},"bt.disabled = false\n",[96,53950,53951],{"start":64},[99,53952,53953],{},"自定义属性",[14,53955,53956],{},[29,53957],{"alt":31,"src":53958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[133,53960,53962],{"className":53096,"code":53961,"language":53098,"meta":31,"style":31},"\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",[139,53963,53964,53972,54000,54019,54038,54057,54076,54084,54089,54094,54099,54104,54112],{"__ignoreMap":31},[142,53965,53966,53968,53970],{"class":144,"line":145},[142,53967,1063],{"class":152},[142,53969,51829],{"class":51329},[142,53971,51336],{"class":152},[142,53973,53974,53976,53978,53981,53983,53985,53988,53990,53993,53996,53998],{"class":144,"line":64},[142,53975,52173],{"class":152},[142,53977,51640],{"class":51329},[142,53979,53980],{"class":1991}," data-id",[142,53982,198],{"class":152},[142,53984,3706],{"class":257},[142,53986,53987],{"class":1991}," data-spm",[142,53989,198],{"class":152},[142,53991,53992],{"class":257},"\"我不知道\"",[142,53994,53995],{"class":152},">1\u003C\u002F",[142,53997,51640],{"class":51329},[142,53999,51336],{"class":152},[142,54001,54002,54004,54006,54008,54010,54012,54015,54017],{"class":144,"line":1208},[142,54003,52173],{"class":152},[142,54005,51640],{"class":51329},[142,54007,53980],{"class":1991},[142,54009,198],{"class":152},[142,54011,3729],{"class":257},[142,54013,54014],{"class":152},">2\u003C\u002F",[142,54016,51640],{"class":51329},[142,54018,51336],{"class":152},[142,54020,54021,54023,54025,54027,54029,54031,54034,54036],{"class":144,"line":1223},[142,54022,52173],{"class":152},[142,54024,51640],{"class":51329},[142,54026,53980],{"class":1991},[142,54028,198],{"class":152},[142,54030,3742],{"class":257},[142,54032,54033],{"class":152},">3\u003C\u002F",[142,54035,51640],{"class":51329},[142,54037,51336],{"class":152},[142,54039,54040,54042,54044,54046,54048,54050,54053,54055],{"class":144,"line":1229},[142,54041,52173],{"class":152},[142,54043,51640],{"class":51329},[142,54045,53980],{"class":1991},[142,54047,198],{"class":152},[142,54049,3755],{"class":257},[142,54051,54052],{"class":152},">4\u003C\u002F",[142,54054,51640],{"class":51329},[142,54056,51336],{"class":152},[142,54058,54059,54061,54063,54065,54067,54069,54072,54074],{"class":144,"line":1243},[142,54060,52173],{"class":152},[142,54062,51640],{"class":51329},[142,54064,53980],{"class":1991},[142,54066,198],{"class":152},[142,54068,3776],{"class":257},[142,54070,54071],{"class":152},">5\u003C\u002F",[142,54073,51640],{"class":51329},[142,54075,51336],{"class":152},[142,54077,54078,54080,54082],{"class":144,"line":1249},[142,54079,52173],{"class":152},[142,54081,51842],{"class":51329},[142,54083,51336],{"class":152},[142,54085,54086],{"class":144,"line":1340},[142,54087,54088],{"class":152},"    const one = document.querySelector('div')\n",[142,54090,54091],{"class":144,"line":1346},[142,54092,54093],{"class":152},"    console.log(one.dataset)\n",[142,54095,54096],{"class":144,"line":1358},[142,54097,54098],{"class":152},"    console.log(one.dataset.id)\n",[142,54100,54101],{"class":144,"line":1640},[142,54102,54103],{"class":152},"    console.log(one.dataset.spm)\n",[142,54105,54106,54108,54110],{"class":144,"line":1645},[142,54107,52446],{"class":152},[142,54109,51842],{"class":51329},[142,54111,51336],{"class":152},[142,54113,54114,54116,54118],{"class":144,"line":1651},[142,54115,51814],{"class":152},[142,54117,51829],{"class":51329},[142,54119,51336],{"class":152},[14,54121,54122],{},[29,54123],{"alt":31,"src":54124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54126,54127],{},"document.querySelector选择的是第一个对象（元素）",[113,54129,54131],{"id":54130},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54133,54134],{},[29,54135],{"alt":31,"src":54136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54138,54139],{},[29,54140],{"alt":31,"src":54141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54143,54144],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51842,54146,54147],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54149,54150],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51842,54152,54153],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[14,54155,54156],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54158,54159],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54161,54162],{},"单位为毫秒！！！",[14,54164,54165],{},"可以搭配匿名函数来用！！！",[14,54167,54168],{},"setInterval(function () {",[14,54170,54171],{},"alert('两秒执行一次')",[14,54173,54174],{},"}, 2000)",[14,54176,54177],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54179,54180],{},"function fn() {",[14,54182,54183],{},"document.write(1)",[14,54185,1099],{},[14,54187,54188],{},"setInterval(fn, 1000)",[14,54190,54191],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54193,54194],{},"setInterval('fn()', 1000)",[14,54196,54197],{},[29,54198],{"alt":31,"src":54199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22027,54201,54203],{"id":54202},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[133,54205,54207],{"className":50662,"code":54206,"language":50664,"meta":31,"style":31},"\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",[139,54208,54209,54219,54233,54237,54245,54259,54279,54291,54299,54303,54311,54348,54353,54358,54363,54371,54379,54401,54409,54414,54436,54441,54446,54457,54462,54482,54490,54505,54520,54531,54536,54546,54556,54560,54569,54573,54581,54589,54593],{"__ignoreMap":31},[142,54210,54211,54213,54215,54217],{"class":144,"line":145},[142,54212,51326],{"class":152},[142,54214,51330],{"class":51329},[142,54216,51333],{"class":1991},[142,54218,51336],{"class":152},[142,54220,54221,54223,54225,54227,54229,54231],{"class":144,"line":64},[142,54222,1063],{"class":152},[142,54224,50664],{"class":51329},[142,54226,51345],{"class":1991},[142,54228,198],{"class":152},[142,54230,51350],{"class":257},[142,54232,51336],{"class":152},[142,54234,54235],{"class":144,"line":1208},[142,54236,2428],{"emptyLinePlaceholder":69},[142,54238,54239,54241,54243],{"class":144,"line":1223},[142,54240,1063],{"class":152},[142,54242,51363],{"class":51329},[142,54244,51336],{"class":152},[142,54246,54247,54249,54251,54253,54255,54257],{"class":144,"line":1229},[142,54248,52173],{"class":152},[142,54250,51373],{"class":51329},[142,54252,51376],{"class":1991},[142,54254,198],{"class":152},[142,54256,51381],{"class":257},[142,54258,51336],{"class":152},[142,54260,54261,54263,54265,54267,54269,54271,54273,54275,54277],{"class":144,"line":1243},[142,54262,52173],{"class":152},[142,54264,51373],{"class":51329},[142,54266,14949],{"class":1991},[142,54268,198],{"class":152},[142,54270,51420],{"class":257},[142,54272,51400],{"class":1991},[142,54274,198],{"class":152},[142,54276,51427],{"class":257},[142,54278,51336],{"class":152},[142,54280,54281,54283,54285,54287,54289],{"class":144,"line":1249},[142,54282,52173],{"class":152},[142,54284,51436],{"class":51329},[142,54286,51439],{"class":152},[142,54288,51436],{"class":51329},[142,54290,51336],{"class":152},[142,54292,54293,54295,54297],{"class":144,"line":1340},[142,54294,51814],{"class":152},[142,54296,51363],{"class":51329},[142,54298,51336],{"class":152},[142,54300,54301],{"class":144,"line":1346},[142,54302,2428],{"emptyLinePlaceholder":69},[142,54304,54305,54307,54309],{"class":144,"line":1358},[142,54306,1063],{"class":152},[142,54308,51829],{"class":51329},[142,54310,51336],{"class":152},[142,54312,54313,54315,54318,54320,54322,54324,54326,54328,54330,54333,54335,54338,54341,54343,54346],{"class":144,"line":1640},[142,54314,52173],{"class":152},[142,54316,54317],{"class":51329},"textarea",[142,54319,14949],{"class":1991},[142,54321,198],{"class":152},[142,54323,7681],{"class":257},[142,54325,14988],{"class":1991},[142,54327,198],{"class":152},[142,54329,7681],{"class":257},[142,54331,54332],{"class":1991}," cols",[142,54334,198],{"class":152},[142,54336,54337],{"class":257},"\"30\"",[142,54339,54340],{"class":1991}," rows",[142,54342,198],{"class":152},[142,54344,54345],{"class":257},"\"10\"",[142,54347,51336],{"class":152},[142,54349,54350],{"class":144,"line":1645},[142,54351,54352],{"class":152},"        用户注册协议\n",[142,54354,54355],{"class":144,"line":1651},[142,54356,54357],{"class":152},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[142,54359,54360],{"class":144,"line":1656},[142,54361,54362],{"class":152},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[142,54364,54365,54367,54369],{"class":144,"line":1670},[142,54366,51805],{"class":152},[142,54368,54317],{"class":51329},[142,54370,51336],{"class":152},[142,54372,54373,54375,54377],{"class":144,"line":1675},[142,54374,52173],{"class":152},[142,54376,53745],{"class":51329},[142,54378,51336],{"class":152},[142,54380,54381,54383,54385,54387,54389,54392,54394,54397,54399],{"class":144,"line":1681},[142,54382,52173],{"class":152},[142,54384,53916],{"class":51329},[142,54386,53515],{"class":1991},[142,54388,198],{"class":152},[142,54390,54391],{"class":257},"\"btn\"",[142,54393,53919],{"class":1991},[142,54395,54396],{"class":152},">我已经阅读用户协议(5)\u003C\u002F",[142,54398,53916],{"class":51329},[142,54400,51336],{"class":152},[142,54402,54403,54405,54407],{"class":144,"line":1702},[142,54404,52173],{"class":152},[142,54406,51842],{"class":51329},[142,54408,51336],{"class":152},[142,54410,54411],{"class":144,"line":1707},[142,54412,54413],{"class":211},"    \u002F\u002F 1. 获取元素\n",[142,54415,54416,54418,54421,54423,54426,54429,54431,54434],{"class":144,"line":1721},[142,54417,11250],{"class":148},[142,54419,54420],{"class":201}," btn",[142,54422,13593],{"class":148},[142,54424,54425],{"class":152}," document.",[142,54427,54428],{"class":1991},"querySelector",[142,54430,153],{"class":152},[142,54432,54433],{"class":257},"'.btn'",[142,54435,159],{"class":152},[142,54437,54438],{"class":144,"line":1726},[142,54439,54440],{"class":211},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[142,54442,54443],{"class":144,"line":1755},[142,54444,54445],{"class":211},"    \u002F\u002F 2. 倒计时\n",[142,54447,54448,54450,54452,54454],{"class":144,"line":1760},[142,54449,52248],{"class":148},[142,54451,9467],{"class":152},[142,54453,198],{"class":148},[142,54455,54456],{"class":201}," 5\n",[142,54458,54459],{"class":144,"line":1777},[142,54460,54461],{"class":211},"    \u002F\u002F 2.1 开启定时器\n",[142,54463,54464,54466,54469,54471,54474,54476,54479],{"class":144,"line":1782},[142,54465,52248],{"class":148},[142,54467,54468],{"class":152}," n ",[142,54470,198],{"class":148},[142,54472,54473],{"class":1991}," setInterval",[142,54475,153],{"class":152},[142,54477,54478],{"class":148},"function",[142,54480,54481],{"class":152}," () {\n",[142,54483,54484,54487],{"class":144,"line":1787},[142,54485,54486],{"class":152},"      i",[142,54488,54489],{"class":148},"--\n",[142,54491,54492,54495,54497,54500,54502],{"class":144,"line":1792},[142,54493,54494],{"class":152},"      btn.innerHTML ",[142,54496,198],{"class":148},[142,54498,54499],{"class":257}," `我已经阅读用户协议(${",[142,54501,594],{"class":152},[142,54503,54504],{"class":257},"})`\n",[142,54506,54507,54510,54513,54516,54518],{"class":144,"line":1806},[142,54508,54509],{"class":148},"      if",[142,54511,54512],{"class":152}," (i ",[142,54514,54515],{"class":148},"===",[142,54517,4121],{"class":201},[142,54519,12471],{"class":152},[142,54521,54522,54525,54528],{"class":144,"line":1811},[142,54523,54524],{"class":1991},"        clearInterval",[142,54526,54527],{"class":152},"(n)  ",[142,54529,54530],{"class":211},"\u002F\u002F 关闭定时器\n",[142,54532,54533],{"class":144,"line":2605},[142,54534,54535],{"class":211},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[142,54537,54538,54541,54543],{"class":144,"line":2619},[142,54539,54540],{"class":152},"        btn.disabled ",[142,54542,198],{"class":148},[142,54544,54545],{"class":201}," false\n",[142,54547,54548,54551,54553],{"class":144,"line":2627},[142,54549,54550],{"class":152},"        btn.innerHTML ",[142,54552,198],{"class":148},[142,54554,54555],{"class":257}," '同意'\n",[142,54557,54558],{"class":144,"line":2632},[142,54559,52427],{"class":152},[142,54561,54562,54565,54567],{"class":144,"line":2638},[142,54563,54564],{"class":152},"    }, ",[142,54566,6439],{"class":201},[142,54568,159],{"class":152},[142,54570,54571],{"class":144,"line":2644},[142,54572,2428],{"emptyLinePlaceholder":69},[142,54574,54575,54577,54579],{"class":144,"line":2649},[142,54576,52446],{"class":152},[142,54578,51842],{"class":51329},[142,54580,51336],{"class":152},[142,54582,54583,54585,54587],{"class":144,"line":7977},[142,54584,51814],{"class":152},[142,54586,51829],{"class":51329},[142,54588,51336],{"class":152},[142,54590,54591],{"class":144,"line":8001},[142,54592,2428],{"emptyLinePlaceholder":69},[142,54594,54595,54597,54599],{"class":144,"line":8006},[142,54596,51814],{"class":152},[142,54598,50664],{"class":51329},[142,54600,51336],{"class":152},[14,54602,54603],{},"不要一直想着用死循环,避免死循环",[14,54605,54606,54609],{},[139,54607,54608],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22027,54611,54613],{"id":54612},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[96,54615,54616],{},[99,54617,54618],{},"法1",[133,54620,54622],{"className":50662,"code":54621,"language":50664,"meta":31,"style":31},"\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",[139,54623,54624,54634,54648,54652,54660,54674,54694,54706,54714,54720,54731,54742,54746,54750,54757,54769,54773,54777,54784,54796,54810,54823,54837,54841,54845,54852,54863,54874,54885,54897,54909,54921,54925,54929,54937,54947,54960,54972,54985,54989,54993,55000,55010,55022,55034,55045,55056,55066,55078,55090,55094,55098,55107,55119,55131,55159,55172,55176,55180,55187,55198,55202,55210,55218,55222,55230,55244,55259,55283,55291,55306,55319,55327,55348,55360,55372,55384,55396,55408,55420,55432,55441,55449,55457,55465,55477,55500,55519,55538,55557,55576,55595,55614,55634,55638,55658,55677,55697,55718,55729,55746,55756,55766,55776,55781,55786,55791,55796,55821,55834,55838,55861,55865,55873,55881,55889,55893],{"__ignoreMap":31},[142,54625,54626,54628,54630,54632],{"class":144,"line":145},[142,54627,51326],{"class":152},[142,54629,51330],{"class":51329},[142,54631,51333],{"class":1991},[142,54633,51336],{"class":152},[142,54635,54636,54638,54640,54642,54644,54646],{"class":144,"line":64},[142,54637,1063],{"class":152},[142,54639,50664],{"class":51329},[142,54641,51345],{"class":1991},[142,54643,198],{"class":152},[142,54645,51350],{"class":257},[142,54647,51336],{"class":152},[142,54649,54650],{"class":144,"line":1208},[142,54651,2428],{"emptyLinePlaceholder":69},[142,54653,54654,54656,54658],{"class":144,"line":1223},[142,54655,1063],{"class":152},[142,54657,51363],{"class":51329},[142,54659,51336],{"class":152},[142,54661,54662,54664,54666,54668,54670,54672],{"class":144,"line":1229},[142,54663,52173],{"class":152},[142,54665,51373],{"class":51329},[142,54667,51376],{"class":1991},[142,54669,198],{"class":152},[142,54671,51381],{"class":257},[142,54673,51336],{"class":152},[142,54675,54676,54678,54680,54682,54684,54686,54688,54690,54692],{"class":144,"line":1243},[142,54677,52173],{"class":152},[142,54679,51373],{"class":51329},[142,54681,14949],{"class":1991},[142,54683,198],{"class":152},[142,54685,51420],{"class":257},[142,54687,51400],{"class":1991},[142,54689,198],{"class":152},[142,54691,51427],{"class":257},[142,54693,51336],{"class":152},[142,54695,54696,54698,54700,54702,54704],{"class":144,"line":1249},[142,54697,52173],{"class":152},[142,54699,51436],{"class":51329},[142,54701,51439],{"class":152},[142,54703,51436],{"class":51329},[142,54705,51336],{"class":152},[142,54707,54708,54710,54712],{"class":144,"line":1340},[142,54709,52173],{"class":152},[142,54711,5155],{"class":51329},[142,54713,51336],{"class":152},[142,54715,54716,54718],{"class":144,"line":1346},[142,54717,6432],{"class":51329},[142,54719,15601],{"class":152},[142,54721,54722,54725,54727,54729],{"class":144,"line":1358},[142,54723,54724],{"class":201},"      padding",[142,54726,51466],{"class":152},[142,54728,344],{"class":201},[142,54730,1319],{"class":152},[142,54732,54733,54736,54738,54740],{"class":144,"line":1640},[142,54734,54735],{"class":201},"      margin",[142,54737,51466],{"class":152},[142,54739,344],{"class":201},[142,54741,1319],{"class":152},[142,54743,54744],{"class":144,"line":1645},[142,54745,2215],{"class":152},[142,54747,54748],{"class":144,"line":1651},[142,54749,2428],{"emptyLinePlaceholder":69},[142,54751,54752,54755],{"class":144,"line":1656},[142,54753,54754],{"class":51329},"    li",[142,54756,15601],{"class":152},[142,54758,54759,54762,54764,54767],{"class":144,"line":1670},[142,54760,54761],{"class":201},"      list-style",[142,54763,51466],{"class":152},[142,54765,54766],{"class":201},"none",[142,54768,1319],{"class":152},[142,54770,54771],{"class":144,"line":1675},[142,54772,2215],{"class":152},[142,54774,54775],{"class":144,"line":1681},[142,54776,2428],{"emptyLinePlaceholder":69},[142,54778,54779,54782],{"class":144,"line":1702},[142,54780,54781],{"class":1991},"    .box",[142,54783,15601],{"class":152},[142,54785,54786,54789,54791,54794],{"class":144,"line":1707},[142,54787,54788],{"class":201},"      position",[142,54790,51466],{"class":152},[142,54792,54793],{"class":201},"relative",[142,54795,1319],{"class":152},[142,54797,54798,54801,54803,54806,54808],{"class":144,"line":1721},[142,54799,54800],{"class":201},"      width",[142,54802,51466],{"class":152},[142,54804,54805],{"class":201},"976",[142,54807,51521],{"class":148},[142,54809,1319],{"class":152},[142,54811,54812,54815,54817,54819,54821],{"class":144,"line":1726},[142,54813,54814],{"class":201},"      height",[142,54816,51466],{"class":152},[142,54818,1567],{"class":201},[142,54820,51521],{"class":148},[142,54822,1319],{"class":152},[142,54824,54825,54827,54829,54831,54833,54835],{"class":144,"line":1755},[142,54826,54735],{"class":201},[142,54828,51466],{"class":152},[142,54830,464],{"class":201},[142,54832,51521],{"class":148},[142,54834,51585],{"class":201},[142,54836,1319],{"class":152},[142,54838,54839],{"class":144,"line":1760},[142,54840,2215],{"class":152},[142,54842,54843],{"class":144,"line":1777},[142,54844,2428],{"emptyLinePlaceholder":69},[142,54846,54847,54850],{"class":144,"line":1782},[142,54848,54849],{"class":1991},"    .slider-footer",[142,54851,15601],{"class":152},[142,54853,54854,54856,54858,54861],{"class":144,"line":1787},[142,54855,54788],{"class":201},[142,54857,51466],{"class":152},[142,54859,54860],{"class":201},"absolute",[142,54862,1319],{"class":152},[142,54864,54865,54868,54870,54872],{"class":144,"line":1792},[142,54866,54867],{"class":201},"      left",[142,54869,51466],{"class":152},[142,54871,344],{"class":201},[142,54873,1319],{"class":152},[142,54875,54876,54879,54881,54883],{"class":144,"line":1806},[142,54877,54878],{"class":201},"      bottom",[142,54880,51466],{"class":152},[142,54882,344],{"class":201},[142,54884,1319],{"class":152},[142,54886,54887,54889,54891,54893,54895],{"class":144,"line":1811},[142,54888,54800],{"class":201},[142,54890,51466],{"class":152},[142,54892,464],{"class":201},[142,54894,481],{"class":148},[142,54896,1319],{"class":152},[142,54898,54899,54901,54903,54905,54907],{"class":144,"line":2605},[142,54900,54814],{"class":201},[142,54902,51466],{"class":152},[142,54904,728],{"class":201},[142,54906,481],{"class":148},[142,54908,1319],{"class":152},[142,54910,54911,54914,54916,54919],{"class":144,"line":2619},[142,54912,54913],{"class":201},"      background-color",[142,54915,51466],{"class":152},[142,54917,54918],{"class":201},"skyblue",[142,54920,1319],{"class":152},[142,54922,54923],{"class":144,"line":2627},[142,54924,2215],{"class":152},[142,54926,54927],{"class":144,"line":2632},[142,54928,2428],{"emptyLinePlaceholder":69},[142,54930,54931,54933,54935],{"class":144,"line":2638},[142,54932,54849],{"class":1991},[142,54934,6854],{"class":51329},[142,54936,15601],{"class":152},[142,54938,54939,54941,54943,54945],{"class":144,"line":2644},[142,54940,54788],{"class":201},[142,54942,51466],{"class":152},[142,54944,54860],{"class":201},[142,54946,1319],{"class":152},[142,54948,54949,54952,54954,54956,54958],{"class":144,"line":2649},[142,54950,54951],{"class":201},"      font-size",[142,54953,51466],{"class":152},[142,54955,1054],{"class":201},[142,54957,51521],{"class":148},[142,54959,1319],{"class":152},[142,54961,54962,54964,54966,54968,54970],{"class":144,"line":7977},[142,54963,54867],{"class":201},[142,54965,51466],{"class":152},[142,54967,853],{"class":201},[142,54969,51521],{"class":148},[142,54971,1319],{"class":152},[142,54973,54974,54977,54979,54981,54983],{"class":144,"line":8001},[142,54975,54976],{"class":201},"      top",[142,54978,51466],{"class":152},[142,54980,472],{"class":201},[142,54982,51521],{"class":148},[142,54984,1319],{"class":152},[142,54986,54987],{"class":144,"line":8006},[142,54988,2215],{"class":152},[142,54990,54991],{"class":144,"line":8012},[142,54992,2428],{"emptyLinePlaceholder":69},[142,54994,54995,54998],{"class":144,"line":8039},[142,54996,54997],{"class":51329},"    ul",[142,54999,15601],{"class":152},[142,55001,55002,55004,55006,55008],{"class":144,"line":8044},[142,55003,54788],{"class":201},[142,55005,51466],{"class":152},[142,55007,54860],{"class":201},[142,55009,1319],{"class":152},[142,55011,55012,55014,55016,55018,55020],{"class":144,"line":8050},[142,55013,54976],{"class":201},[142,55015,51466],{"class":152},[142,55017,934],{"class":201},[142,55019,51521],{"class":148},[142,55021,1319],{"class":152},[142,55023,55024,55026,55028,55030,55032],{"class":144,"line":8062},[142,55025,54867],{"class":201},[142,55027,51466],{"class":152},[142,55029,853],{"class":201},[142,55031,51521],{"class":148},[142,55033,1319],{"class":152},[142,55035,55036,55039,55041,55043],{"class":144,"line":8074},[142,55037,55038],{"class":201},"      display",[142,55040,51466],{"class":152},[142,55042,51506],{"class":201},[142,55044,1319],{"class":152},[142,55046,55047,55050,55052,55054],{"class":144,"line":8086},[142,55048,55049],{"class":201},"      justify-content",[142,55051,51466],{"class":152},[142,55053,51697],{"class":201},[142,55055,1319],{"class":152},[142,55057,55058,55060,55062,55064],{"class":144,"line":9745},[142,55059,54788],{"class":201},[142,55061,51466],{"class":152},[142,55063,54860],{"class":201},[142,55065,1319],{"class":152},[142,55067,55068,55070,55072,55074,55076],{"class":144,"line":9770},[142,55069,54800],{"class":201},[142,55071,51466],{"class":152},[142,55073,4020],{"class":201},[142,55075,51521],{"class":148},[142,55077,1319],{"class":152},[142,55079,55080,55082,55084,55086,55088],{"class":144,"line":9793},[142,55081,54814],{"class":201},[142,55083,51466],{"class":152},[142,55085,853],{"class":201},[142,55087,51521],{"class":148},[142,55089,1319],{"class":152},[142,55091,55092],{"class":144,"line":9817},[142,55093,2215],{"class":152},[142,55095,55096],{"class":144,"line":9822},[142,55097,2428],{"emptyLinePlaceholder":69},[142,55099,55100,55102,55105],{"class":144,"line":9827},[142,55101,54997],{"class":51329},[142,55103,55104],{"class":51329}," li",[142,55106,15601],{"class":152},[142,55108,55109,55111,55113,55115,55117],{"class":144,"line":9832},[142,55110,54800],{"class":201},[142,55112,51466],{"class":152},[142,55114,853],{"class":201},[142,55116,51521],{"class":148},[142,55118,1319],{"class":152},[142,55120,55121,55123,55125,55127,55129],{"class":144,"line":9841},[142,55122,54814],{"class":201},[142,55124,51466],{"class":152},[142,55126,853],{"class":201},[142,55128,51521],{"class":148},[142,55130,1319],{"class":152},[142,55132,55133,55135,55137,55140,55142,55144,55146,55148,55150,55152,55154,55157],{"class":144,"line":9846},[142,55134,54913],{"class":201},[142,55136,51466],{"class":152},[142,55138,55139],{"class":201},"rgba",[142,55141,153],{"class":152},[142,55143,344],{"class":201},[142,55145,12464],{"class":152},[142,55147,344],{"class":201},[142,55149,12464],{"class":152},[142,55151,344],{"class":201},[142,55153,12464],{"class":152},[142,55155,55156],{"class":201},".4",[142,55158,2747],{"class":152},[142,55160,55161,55164,55166,55168,55170],{"class":144,"line":9852},[142,55162,55163],{"class":201},"      border-radius",[142,55165,51466],{"class":152},[142,55167,599],{"class":201},[142,55169,51521],{"class":148},[142,55171,1319],{"class":152},[142,55173,55174],{"class":144,"line":9873},[142,55175,2215],{"class":152},[142,55177,55178],{"class":144,"line":9879},[142,55179,2428],{"emptyLinePlaceholder":69},[142,55181,55182,55185],{"class":144,"line":9893},[142,55183,55184],{"class":1991},"    .activate",[142,55186,15601],{"class":152},[142,55188,55189,55191,55193,55196],{"class":144,"line":9899},[142,55190,54913],{"class":201},[142,55192,51466],{"class":152},[142,55194,55195],{"class":201},"#f7f7f7",[142,55197,1319],{"class":152},[142,55199,55200],{"class":144,"line":9926},[142,55201,2215],{"class":152},[142,55203,55204,55206,55208],{"class":144,"line":9935},[142,55205,52446],{"class":152},[142,55207,5155],{"class":51329},[142,55209,51336],{"class":152},[142,55211,55212,55214,55216],{"class":144,"line":9941},[142,55213,51814],{"class":152},[142,55215,51363],{"class":51329},[142,55217,51336],{"class":152},[142,55219,55220],{"class":144,"line":9949},[142,55221,2428],{"emptyLinePlaceholder":69},[142,55223,55224,55226,55228],{"class":144,"line":9954},[142,55225,1063],{"class":152},[142,55227,51829],{"class":51329},[142,55229,51336],{"class":152},[142,55231,55232,55234,55236,55238,55240,55242],{"class":144,"line":16633},[142,55233,52173],{"class":152},[142,55235,51640],{"class":51329},[142,55237,53515],{"class":1991},[142,55239,198],{"class":152},[142,55241,53520],{"class":257},[142,55243,51336],{"class":152},[142,55245,55246,55248,55250,55252,55254,55257],{"class":144,"line":16639},[142,55247,51370],{"class":152},[142,55249,51640],{"class":51329},[142,55251,53515],{"class":1991},[142,55253,198],{"class":152},[142,55255,55256],{"class":257},"\"slider-wrapper\"",[142,55258,51336],{"class":152},[142,55260,55261,55264,55266,55269,55271,55274,55277,55279,55281],{"class":144,"line":16662},[142,55262,55263],{"class":152},"      \u003C",[142,55265,29],{"class":51329},[142,55267,55268],{"class":1991}," src",[142,55270,198],{"class":152},[142,55272,55273],{"class":257},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[142,55275,55276],{"class":1991}," alt",[142,55278,198],{"class":152},[142,55280,7681],{"class":257},[142,55282,51336],{"class":152},[142,55284,55285,55287,55289],{"class":144,"line":16668},[142,55286,51805],{"class":152},[142,55288,51640],{"class":51329},[142,55290,51336],{"class":152},[142,55292,55293,55295,55297,55299,55301,55304],{"class":144,"line":16691},[142,55294,51370],{"class":152},[142,55296,51640],{"class":51329},[142,55298,53515],{"class":1991},[142,55300,198],{"class":152},[142,55302,55303],{"class":257},"\"slider-footer\"",[142,55305,51336],{"class":152},[142,55307,55308,55310,55312,55315,55317],{"class":144,"line":16705},[142,55309,55263],{"class":152},[142,55311,14],{"class":51329},[142,55313,55314],{"class":152},">对人类来说会不会太超前了?\u003C\u002F",[142,55316,14],{"class":51329},[142,55318,51336],{"class":152},[142,55320,55321,55323,55325],{"class":144,"line":16725},[142,55322,55263],{"class":152},[142,55324,1160],{"class":51329},[142,55326,51336],{"class":152},[142,55328,55329,55332,55334,55336,55338,55341,55344,55346],{"class":144,"line":16731},[142,55330,55331],{"class":152},"        \u003C",[142,55333,99],{"class":51329},[142,55335,53515],{"class":1991},[142,55337,198],{"class":152},[142,55339,55340],{"class":257},"\"activate\"",[142,55342,55343],{"class":152},">\u003C\u002F",[142,55345,99],{"class":51329},[142,55347,51336],{"class":152},[142,55349,55350,55352,55354,55356,55358],{"class":144,"line":16742},[142,55351,55331],{"class":152},[142,55353,99],{"class":51329},[142,55355,55343],{"class":152},[142,55357,99],{"class":51329},[142,55359,51336],{"class":152},[142,55361,55362,55364,55366,55368,55370],{"class":144,"line":16765},[142,55363,55331],{"class":152},[142,55365,99],{"class":51329},[142,55367,55343],{"class":152},[142,55369,99],{"class":51329},[142,55371,51336],{"class":152},[142,55373,55374,55376,55378,55380,55382],{"class":144,"line":16787},[142,55375,55331],{"class":152},[142,55377,99],{"class":51329},[142,55379,55343],{"class":152},[142,55381,99],{"class":51329},[142,55383,51336],{"class":152},[142,55385,55386,55388,55390,55392,55394],{"class":144,"line":16792},[142,55387,55331],{"class":152},[142,55389,99],{"class":51329},[142,55391,55343],{"class":152},[142,55393,99],{"class":51329},[142,55395,51336],{"class":152},[142,55397,55398,55400,55402,55404,55406],{"class":144,"line":16798},[142,55399,55331],{"class":152},[142,55401,99],{"class":51329},[142,55403,55343],{"class":152},[142,55405,99],{"class":51329},[142,55407,51336],{"class":152},[142,55409,55410,55412,55414,55416,55418],{"class":144,"line":16812},[142,55411,55331],{"class":152},[142,55413,99],{"class":51329},[142,55415,55343],{"class":152},[142,55417,99],{"class":51329},[142,55419,51336],{"class":152},[142,55421,55422,55424,55426,55428,55430],{"class":144,"line":16825},[142,55423,55331],{"class":152},[142,55425,99],{"class":51329},[142,55427,55343],{"class":152},[142,55429,99],{"class":51329},[142,55431,51336],{"class":152},[142,55433,55434,55437,55439],{"class":144,"line":16830},[142,55435,55436],{"class":152},"      \u003C\u002F",[142,55438,1160],{"class":51329},[142,55440,51336],{"class":152},[142,55442,55443,55445,55447],{"class":144,"line":16844},[142,55444,51805],{"class":152},[142,55446,51640],{"class":51329},[142,55448,51336],{"class":152},[142,55450,55451,55453,55455],{"class":144,"line":16849},[142,55452,52446],{"class":152},[142,55454,51640],{"class":51329},[142,55456,51336],{"class":152},[142,55458,55459,55461,55463],{"class":144,"line":16855},[142,55460,52173],{"class":152},[142,55462,51842],{"class":51329},[142,55464,51336],{"class":152},[142,55466,55467,55469,55472,55474],{"class":144,"line":16860},[142,55468,11250],{"class":148},[142,55470,55471],{"class":201}," arrImage",[142,55473,13593],{"class":148},[142,55475,55476],{"class":152}," [\n",[142,55478,55479,55482,55485,55488,55491,55494,55497],{"class":144,"line":16874},[142,55480,55481],{"class":152},"      { url: ",[142,55483,55484],{"class":257},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[142,55486,55487],{"class":152},", title: ",[142,55489,55490],{"class":257},"'对人类来说会不会太超前了?'",[142,55492,55493],{"class":152},", color: ",[142,55495,55496],{"class":257},"'rgba(100,67,68)'",[142,55498,55499],{"class":152}," },\n",[142,55501,55502,55504,55507,55509,55512,55514,55517],{"class":144,"line":16879},[142,55503,55481],{"class":152},[142,55505,55506],{"class":257},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[142,55508,55487],{"class":152},[142,55510,55511],{"class":257},"'开启剑与雪的黑暗传说!'",[142,55513,55493],{"class":152},[142,55515,55516],{"class":257},"'rgba(43,35,26)'",[142,55518,55499],{"class":152},[142,55520,55521,55523,55526,55528,55531,55533,55536],{"class":144,"line":16884},[142,55522,55481],{"class":152},[142,55524,55525],{"class":257},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[142,55527,55487],{"class":152},[142,55529,55530],{"class":257},"'真正的jo厨出现了!'",[142,55532,55493],{"class":152},[142,55534,55535],{"class":257},"'rgba(36,31,33)'",[142,55537,55499],{"class":152},[142,55539,55540,55542,55545,55547,55550,55552,55555],{"class":144,"line":16898},[142,55541,55481],{"class":152},[142,55543,55544],{"class":257},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[142,55546,55487],{"class":152},[142,55548,55549],{"class":257},"'李玉刚:让世界通过b站看到东方大国文化'",[142,55551,55493],{"class":152},[142,55553,55554],{"class":257},"'rgba(139,98,66)'",[142,55556,55499],{"class":152},[142,55558,55559,55561,55564,55566,55569,55571,55574],{"class":144,"line":16910},[142,55560,55481],{"class":152},[142,55562,55563],{"class":257},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[142,55565,55487],{"class":152},[142,55567,55568],{"class":257},"'快来分享你的寒假日常吧'",[142,55570,55493],{"class":152},[142,55572,55573],{"class":257},"'rgba(67,90,92)'",[142,55575,55499],{"class":152},[142,55577,55578,55580,55583,55585,55588,55590,55593],{"class":144,"line":16915},[142,55579,55481],{"class":152},[142,55581,55582],{"class":257},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[142,55584,55487],{"class":152},[142,55586,55587],{"class":257},"'哔哩哔哩小年YEAR'",[142,55589,55493],{"class":152},[142,55591,55592],{"class":257},"'rgba(166,131,143)'",[142,55594,55499],{"class":152},[142,55596,55597,55599,55602,55604,55607,55609,55612],{"class":144,"line":16928},[142,55598,55481],{"class":152},[142,55600,55601],{"class":257},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[142,55603,55487],{"class":152},[142,55605,55606],{"class":257},"'一站式解决你的电脑配置问题'",[142,55608,55493],{"class":152},[142,55610,55611],{"class":257},"'rgba(53,29,25)'",[142,55613,55499],{"class":152},[142,55615,55616,55618,55621,55623,55626,55628,55631],{"class":144,"line":16933},[142,55617,55481],{"class":152},[142,55619,55620],{"class":257},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[142,55622,55487],{"class":152},[142,55624,55625],{"class":257},"'谁不想和小猫咪贴贴呢?'",[142,55627,55493],{"class":152},[142,55629,55630],{"class":257},"'rgba(99,72,114)'",[142,55632,55633],{"class":152}," }\n",[142,55635,55636],{"class":144,"line":16938},[142,55637,53138],{"class":152},[142,55639,55640,55642,55645,55647,55649,55651,55653,55656],{"class":144,"line":16943},[142,55641,11250],{"class":148},[142,55643,55644],{"class":201}," img",[142,55646,13593],{"class":148},[142,55648,54425],{"class":152},[142,55650,54428],{"class":1991},[142,55652,153],{"class":152},[142,55654,55655],{"class":257},"'.slider-wrapper img'",[142,55657,159],{"class":152},[142,55659,55660,55662,55664,55666,55668,55670,55672,55675],{"class":144,"line":16956},[142,55661,11250],{"class":148},[142,55663,6854],{"class":201},[142,55665,13593],{"class":148},[142,55667,54425],{"class":152},[142,55669,54428],{"class":1991},[142,55671,153],{"class":152},[142,55673,55674],{"class":257},"'.slider-footer p'",[142,55676,159],{"class":152},[142,55678,55679,55681,55684,55686,55688,55690,55692,55695],{"class":144,"line":16961},[142,55680,11250],{"class":148},[142,55682,55683],{"class":201}," color",[142,55685,13593],{"class":148},[142,55687,54425],{"class":152},[142,55689,54428],{"class":1991},[142,55691,153],{"class":152},[142,55693,55694],{"class":257},"'.slider-footer'",[142,55696,159],{"class":152},[142,55698,55699,55701,55704,55706,55708,55711,55713,55716],{"class":144,"line":32662},[142,55700,11250],{"class":148},[142,55702,55703],{"class":201}," lis",[142,55705,13593],{"class":148},[142,55707,54425],{"class":152},[142,55709,55710],{"class":1991},"querySelectorAll",[142,55712,153],{"class":152},[142,55714,55715],{"class":257},"'.slider-footer ul li'",[142,55717,159],{"class":152},[142,55719,55720,55722,55724,55726],{"class":144,"line":32668},[142,55721,52248],{"class":148},[142,55723,9467],{"class":152},[142,55725,198],{"class":148},[142,55727,55728],{"class":201}," 1\n",[142,55730,55731,55733,55736,55738,55740,55742,55744],{"class":144,"line":32674},[142,55732,52248],{"class":148},[142,55734,55735],{"class":152}," timer ",[142,55737,198],{"class":148},[142,55739,54473],{"class":1991},[142,55741,153],{"class":152},[142,55743,54478],{"class":148},[142,55745,54481],{"class":152},[142,55747,55748,55751,55753],{"class":144,"line":32680},[142,55749,55750],{"class":152},"      img.src ",[142,55752,198],{"class":148},[142,55754,55755],{"class":152}," arrImage[i].url\n",[142,55757,55758,55761,55763],{"class":144,"line":32686},[142,55759,55760],{"class":152},"      p.innerHTML ",[142,55762,198],{"class":148},[142,55764,55765],{"class":152}," arrImage[i].title\n",[142,55767,55768,55771,55773],{"class":144,"line":32697},[142,55769,55770],{"class":152},"      color.style.backgroundColor ",[142,55772,198],{"class":148},[142,55774,55775],{"class":152}," arrImage[i].color\n",[142,55777,55778],{"class":144,"line":32703},[142,55779,55780],{"class":211},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[142,55782,55783],{"class":144,"line":32723},[142,55784,55785],{"class":211},"      \u002F\u002F li.classList.add('activate')\n",[142,55787,55788],{"class":144,"line":32729},[142,55789,55790],{"class":211},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[142,55792,55793],{"class":144,"line":32740},[142,55794,55795],{"class":211},"      \u002F\u002F lis[i].classList.remove('activate')\n",[142,55797,55798,55801,55803,55805,55808,55811,55814,55816,55819],{"class":144,"line":32746},[142,55799,55800],{"class":152},"      document.",[142,55802,54428],{"class":1991},[142,55804,153],{"class":152},[142,55806,55807],{"class":257},"'.activate'",[142,55809,55810],{"class":152},")?.classList.",[142,55812,55813],{"class":1991},"toggle",[142,55815,153],{"class":152},[142,55817,55818],{"class":257},"'activate'",[142,55820,159],{"class":152},[142,55822,55823,55826,55828,55830,55832],{"class":144,"line":32752},[142,55824,55825],{"class":152},"      lis[i].classList.",[142,55827,5363],{"class":1991},[142,55829,153],{"class":152},[142,55831,55818],{"class":257},[142,55833,159],{"class":152},[142,55835,55836],{"class":144,"line":32758},[142,55837,2428],{"emptyLinePlaceholder":69},[142,55839,55840,55843,55845,55847,55849,55851,55853,55855,55858],{"class":144,"line":32764},[142,55841,55842],{"class":152},"      i ",[142,55844,198],{"class":148},[142,55846,54512],{"class":152},[142,55848,634],{"class":148},[142,55850,25147],{"class":201},[142,55852,13743],{"class":152},[142,55854,481],{"class":148},[142,55856,55857],{"class":152}," arrImage.",[142,55859,55860],{"class":201},"length\n",[142,55862,55863],{"class":144,"line":32770},[142,55864,2428],{"emptyLinePlaceholder":69},[142,55866,55867,55869,55871],{"class":144,"line":32776},[142,55868,54564],{"class":152},[142,55870,6439],{"class":201},[142,55872,159],{"class":152},[142,55874,55875,55877,55879],{"class":144,"line":32782},[142,55876,52446],{"class":152},[142,55878,51842],{"class":51329},[142,55880,51336],{"class":152},[142,55882,55883,55885,55887],{"class":144,"line":32802},[142,55884,51814],{"class":152},[142,55886,51829],{"class":51329},[142,55888,51336],{"class":152},[142,55890,55891],{"class":144,"line":32808},[142,55892,2428],{"emptyLinePlaceholder":69},[142,55894,55895,55897,55899],{"class":144,"line":32824},[142,55896,51814],{"class":152},[142,55898,50664],{"class":51329},[142,55900,51336],{"class":152},[14,55902,55903],{},[29,55904],{"alt":31,"src":55905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55907,55908],{},"?.就是短路保护,确保输出正常进行",[14,55910,55911],{},"不要忘记取余%,有时候可以用",[14,55913,55914],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[96,55916,55917],{"start":64},[99,55918,55919],{},"法2",[133,55921,55923],{"className":50662,"code":55922,"language":50664,"meta":31,"style":31},"\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",[139,55924,55925,55935,55949,55953,55961,55975,55995,56007,56015,56021,56031,56041,56045,56049,56055,56065,56069,56073,56079,56089,56101,56113,56127,56131,56135,56141,56151,56161,56171,56183,56195,56205,56209,56213,56221,56231,56243,56255,56267,56271,56275,56281,56291,56303,56315,56325,56335,56345,56357,56369,56373,56377,56385,56397,56409,56435,56447,56451,56455,56461,56471,56475,56483,56491,56495,56503,56517,56531,56551,56559,56573,56585,56593,56611,56623,56635,56647,56659,56671,56683,56695,56703,56711,56719,56727,56738,56754,56770,56786,56802,56818,56834,56850,56866,56870,56875,56893,56911,56921,56926,56931,56942,56948,56963,56972,56976,56981,56990,56995,57004,57009,57014,57019,57042,57072,57076,57084,57088,57096,57104,57108],{"__ignoreMap":31},[142,55926,55927,55929,55931,55933],{"class":144,"line":145},[142,55928,51326],{"class":152},[142,55930,51330],{"class":51329},[142,55932,51333],{"class":1991},[142,55934,51336],{"class":152},[142,55936,55937,55939,55941,55943,55945,55947],{"class":144,"line":64},[142,55938,1063],{"class":152},[142,55940,50664],{"class":51329},[142,55942,51345],{"class":1991},[142,55944,198],{"class":152},[142,55946,51350],{"class":257},[142,55948,51336],{"class":152},[142,55950,55951],{"class":144,"line":1208},[142,55952,2428],{"emptyLinePlaceholder":69},[142,55954,55955,55957,55959],{"class":144,"line":1223},[142,55956,1063],{"class":152},[142,55958,51363],{"class":51329},[142,55960,51336],{"class":152},[142,55962,55963,55965,55967,55969,55971,55973],{"class":144,"line":1229},[142,55964,52173],{"class":152},[142,55966,51373],{"class":51329},[142,55968,51376],{"class":1991},[142,55970,198],{"class":152},[142,55972,51381],{"class":257},[142,55974,51336],{"class":152},[142,55976,55977,55979,55981,55983,55985,55987,55989,55991,55993],{"class":144,"line":1243},[142,55978,52173],{"class":152},[142,55980,51373],{"class":51329},[142,55982,14949],{"class":1991},[142,55984,198],{"class":152},[142,55986,51420],{"class":257},[142,55988,51400],{"class":1991},[142,55990,198],{"class":152},[142,55992,51427],{"class":257},[142,55994,51336],{"class":152},[142,55996,55997,55999,56001,56003,56005],{"class":144,"line":1249},[142,55998,52173],{"class":152},[142,56000,51436],{"class":51329},[142,56002,51439],{"class":152},[142,56004,51436],{"class":51329},[142,56006,51336],{"class":152},[142,56008,56009,56011,56013],{"class":144,"line":1340},[142,56010,52173],{"class":152},[142,56012,5155],{"class":51329},[142,56014,51336],{"class":152},[142,56016,56017,56019],{"class":144,"line":1346},[142,56018,6432],{"class":51329},[142,56020,15601],{"class":152},[142,56022,56023,56025,56027,56029],{"class":144,"line":1358},[142,56024,54724],{"class":201},[142,56026,51466],{"class":152},[142,56028,344],{"class":201},[142,56030,1319],{"class":152},[142,56032,56033,56035,56037,56039],{"class":144,"line":1640},[142,56034,54735],{"class":201},[142,56036,51466],{"class":152},[142,56038,344],{"class":201},[142,56040,1319],{"class":152},[142,56042,56043],{"class":144,"line":1645},[142,56044,2215],{"class":152},[142,56046,56047],{"class":144,"line":1651},[142,56048,2428],{"emptyLinePlaceholder":69},[142,56050,56051,56053],{"class":144,"line":1656},[142,56052,54754],{"class":51329},[142,56054,15601],{"class":152},[142,56056,56057,56059,56061,56063],{"class":144,"line":1670},[142,56058,54761],{"class":201},[142,56060,51466],{"class":152},[142,56062,54766],{"class":201},[142,56064,1319],{"class":152},[142,56066,56067],{"class":144,"line":1675},[142,56068,2215],{"class":152},[142,56070,56071],{"class":144,"line":1681},[142,56072,2428],{"emptyLinePlaceholder":69},[142,56074,56075,56077],{"class":144,"line":1702},[142,56076,54781],{"class":1991},[142,56078,15601],{"class":152},[142,56080,56081,56083,56085,56087],{"class":144,"line":1707},[142,56082,54788],{"class":201},[142,56084,51466],{"class":152},[142,56086,54793],{"class":201},[142,56088,1319],{"class":152},[142,56090,56091,56093,56095,56097,56099],{"class":144,"line":1721},[142,56092,54800],{"class":201},[142,56094,51466],{"class":152},[142,56096,54805],{"class":201},[142,56098,51521],{"class":148},[142,56100,1319],{"class":152},[142,56102,56103,56105,56107,56109,56111],{"class":144,"line":1726},[142,56104,54814],{"class":201},[142,56106,51466],{"class":152},[142,56108,1567],{"class":201},[142,56110,51521],{"class":148},[142,56112,1319],{"class":152},[142,56114,56115,56117,56119,56121,56123,56125],{"class":144,"line":1755},[142,56116,54735],{"class":201},[142,56118,51466],{"class":152},[142,56120,464],{"class":201},[142,56122,51521],{"class":148},[142,56124,51585],{"class":201},[142,56126,1319],{"class":152},[142,56128,56129],{"class":144,"line":1760},[142,56130,2215],{"class":152},[142,56132,56133],{"class":144,"line":1777},[142,56134,2428],{"emptyLinePlaceholder":69},[142,56136,56137,56139],{"class":144,"line":1782},[142,56138,54849],{"class":1991},[142,56140,15601],{"class":152},[142,56142,56143,56145,56147,56149],{"class":144,"line":1787},[142,56144,54788],{"class":201},[142,56146,51466],{"class":152},[142,56148,54860],{"class":201},[142,56150,1319],{"class":152},[142,56152,56153,56155,56157,56159],{"class":144,"line":1792},[142,56154,54867],{"class":201},[142,56156,51466],{"class":152},[142,56158,344],{"class":201},[142,56160,1319],{"class":152},[142,56162,56163,56165,56167,56169],{"class":144,"line":1806},[142,56164,54878],{"class":201},[142,56166,51466],{"class":152},[142,56168,344],{"class":201},[142,56170,1319],{"class":152},[142,56172,56173,56175,56177,56179,56181],{"class":144,"line":1811},[142,56174,54800],{"class":201},[142,56176,51466],{"class":152},[142,56178,464],{"class":201},[142,56180,481],{"class":148},[142,56182,1319],{"class":152},[142,56184,56185,56187,56189,56191,56193],{"class":144,"line":2605},[142,56186,54814],{"class":201},[142,56188,51466],{"class":152},[142,56190,728],{"class":201},[142,56192,481],{"class":148},[142,56194,1319],{"class":152},[142,56196,56197,56199,56201,56203],{"class":144,"line":2619},[142,56198,54913],{"class":201},[142,56200,51466],{"class":152},[142,56202,54918],{"class":201},[142,56204,1319],{"class":152},[142,56206,56207],{"class":144,"line":2627},[142,56208,2215],{"class":152},[142,56210,56211],{"class":144,"line":2632},[142,56212,2428],{"emptyLinePlaceholder":69},[142,56214,56215,56217,56219],{"class":144,"line":2638},[142,56216,54849],{"class":1991},[142,56218,6854],{"class":51329},[142,56220,15601],{"class":152},[142,56222,56223,56225,56227,56229],{"class":144,"line":2644},[142,56224,54788],{"class":201},[142,56226,51466],{"class":152},[142,56228,54860],{"class":201},[142,56230,1319],{"class":152},[142,56232,56233,56235,56237,56239,56241],{"class":144,"line":2649},[142,56234,54951],{"class":201},[142,56236,51466],{"class":152},[142,56238,1054],{"class":201},[142,56240,51521],{"class":148},[142,56242,1319],{"class":152},[142,56244,56245,56247,56249,56251,56253],{"class":144,"line":7977},[142,56246,54867],{"class":201},[142,56248,51466],{"class":152},[142,56250,853],{"class":201},[142,56252,51521],{"class":148},[142,56254,1319],{"class":152},[142,56256,56257,56259,56261,56263,56265],{"class":144,"line":8001},[142,56258,54976],{"class":201},[142,56260,51466],{"class":152},[142,56262,472],{"class":201},[142,56264,51521],{"class":148},[142,56266,1319],{"class":152},[142,56268,56269],{"class":144,"line":8006},[142,56270,2215],{"class":152},[142,56272,56273],{"class":144,"line":8012},[142,56274,2428],{"emptyLinePlaceholder":69},[142,56276,56277,56279],{"class":144,"line":8039},[142,56278,54997],{"class":51329},[142,56280,15601],{"class":152},[142,56282,56283,56285,56287,56289],{"class":144,"line":8044},[142,56284,54788],{"class":201},[142,56286,51466],{"class":152},[142,56288,54860],{"class":201},[142,56290,1319],{"class":152},[142,56292,56293,56295,56297,56299,56301],{"class":144,"line":8050},[142,56294,54976],{"class":201},[142,56296,51466],{"class":152},[142,56298,934],{"class":201},[142,56300,51521],{"class":148},[142,56302,1319],{"class":152},[142,56304,56305,56307,56309,56311,56313],{"class":144,"line":8062},[142,56306,54867],{"class":201},[142,56308,51466],{"class":152},[142,56310,853],{"class":201},[142,56312,51521],{"class":148},[142,56314,1319],{"class":152},[142,56316,56317,56319,56321,56323],{"class":144,"line":8074},[142,56318,55038],{"class":201},[142,56320,51466],{"class":152},[142,56322,51506],{"class":201},[142,56324,1319],{"class":152},[142,56326,56327,56329,56331,56333],{"class":144,"line":8086},[142,56328,55049],{"class":201},[142,56330,51466],{"class":152},[142,56332,51697],{"class":201},[142,56334,1319],{"class":152},[142,56336,56337,56339,56341,56343],{"class":144,"line":9745},[142,56338,54788],{"class":201},[142,56340,51466],{"class":152},[142,56342,54860],{"class":201},[142,56344,1319],{"class":152},[142,56346,56347,56349,56351,56353,56355],{"class":144,"line":9770},[142,56348,54800],{"class":201},[142,56350,51466],{"class":152},[142,56352,4020],{"class":201},[142,56354,51521],{"class":148},[142,56356,1319],{"class":152},[142,56358,56359,56361,56363,56365,56367],{"class":144,"line":9793},[142,56360,54814],{"class":201},[142,56362,51466],{"class":152},[142,56364,853],{"class":201},[142,56366,51521],{"class":148},[142,56368,1319],{"class":152},[142,56370,56371],{"class":144,"line":9817},[142,56372,2215],{"class":152},[142,56374,56375],{"class":144,"line":9822},[142,56376,2428],{"emptyLinePlaceholder":69},[142,56378,56379,56381,56383],{"class":144,"line":9827},[142,56380,54997],{"class":51329},[142,56382,55104],{"class":51329},[142,56384,15601],{"class":152},[142,56386,56387,56389,56391,56393,56395],{"class":144,"line":9832},[142,56388,54800],{"class":201},[142,56390,51466],{"class":152},[142,56392,853],{"class":201},[142,56394,51521],{"class":148},[142,56396,1319],{"class":152},[142,56398,56399,56401,56403,56405,56407],{"class":144,"line":9841},[142,56400,54814],{"class":201},[142,56402,51466],{"class":152},[142,56404,853],{"class":201},[142,56406,51521],{"class":148},[142,56408,1319],{"class":152},[142,56410,56411,56413,56415,56417,56419,56421,56423,56425,56427,56429,56431,56433],{"class":144,"line":9846},[142,56412,54913],{"class":201},[142,56414,51466],{"class":152},[142,56416,55139],{"class":201},[142,56418,153],{"class":152},[142,56420,344],{"class":201},[142,56422,12464],{"class":152},[142,56424,344],{"class":201},[142,56426,12464],{"class":152},[142,56428,344],{"class":201},[142,56430,12464],{"class":152},[142,56432,55156],{"class":201},[142,56434,2747],{"class":152},[142,56436,56437,56439,56441,56443,56445],{"class":144,"line":9852},[142,56438,55163],{"class":201},[142,56440,51466],{"class":152},[142,56442,599],{"class":201},[142,56444,51521],{"class":148},[142,56446,1319],{"class":152},[142,56448,56449],{"class":144,"line":9873},[142,56450,2215],{"class":152},[142,56452,56453],{"class":144,"line":9879},[142,56454,2428],{"emptyLinePlaceholder":69},[142,56456,56457,56459],{"class":144,"line":9893},[142,56458,55184],{"class":1991},[142,56460,15601],{"class":152},[142,56462,56463,56465,56467,56469],{"class":144,"line":9899},[142,56464,54913],{"class":201},[142,56466,51466],{"class":152},[142,56468,55195],{"class":201},[142,56470,1319],{"class":152},[142,56472,56473],{"class":144,"line":9926},[142,56474,2215],{"class":152},[142,56476,56477,56479,56481],{"class":144,"line":9935},[142,56478,52446],{"class":152},[142,56480,5155],{"class":51329},[142,56482,51336],{"class":152},[142,56484,56485,56487,56489],{"class":144,"line":9941},[142,56486,51814],{"class":152},[142,56488,51363],{"class":51329},[142,56490,51336],{"class":152},[142,56492,56493],{"class":144,"line":9949},[142,56494,2428],{"emptyLinePlaceholder":69},[142,56496,56497,56499,56501],{"class":144,"line":9954},[142,56498,1063],{"class":152},[142,56500,51829],{"class":51329},[142,56502,51336],{"class":152},[142,56504,56505,56507,56509,56511,56513,56515],{"class":144,"line":16633},[142,56506,52173],{"class":152},[142,56508,51640],{"class":51329},[142,56510,53515],{"class":1991},[142,56512,198],{"class":152},[142,56514,53520],{"class":257},[142,56516,51336],{"class":152},[142,56518,56519,56521,56523,56525,56527,56529],{"class":144,"line":16639},[142,56520,51370],{"class":152},[142,56522,51640],{"class":51329},[142,56524,53515],{"class":1991},[142,56526,198],{"class":152},[142,56528,55256],{"class":257},[142,56530,51336],{"class":152},[142,56532,56533,56535,56537,56539,56541,56543,56545,56547,56549],{"class":144,"line":16662},[142,56534,55263],{"class":152},[142,56536,29],{"class":51329},[142,56538,55268],{"class":1991},[142,56540,198],{"class":152},[142,56542,55273],{"class":257},[142,56544,55276],{"class":1991},[142,56546,198],{"class":152},[142,56548,7681],{"class":257},[142,56550,51336],{"class":152},[142,56552,56553,56555,56557],{"class":144,"line":16668},[142,56554,51805],{"class":152},[142,56556,51640],{"class":51329},[142,56558,51336],{"class":152},[142,56560,56561,56563,56565,56567,56569,56571],{"class":144,"line":16691},[142,56562,51370],{"class":152},[142,56564,51640],{"class":51329},[142,56566,53515],{"class":1991},[142,56568,198],{"class":152},[142,56570,55303],{"class":257},[142,56572,51336],{"class":152},[142,56574,56575,56577,56579,56581,56583],{"class":144,"line":16705},[142,56576,55263],{"class":152},[142,56578,14],{"class":51329},[142,56580,55314],{"class":152},[142,56582,14],{"class":51329},[142,56584,51336],{"class":152},[142,56586,56587,56589,56591],{"class":144,"line":16725},[142,56588,55263],{"class":152},[142,56590,1160],{"class":51329},[142,56592,51336],{"class":152},[142,56594,56595,56597,56599,56601,56603,56605,56607,56609],{"class":144,"line":16731},[142,56596,55331],{"class":152},[142,56598,99],{"class":51329},[142,56600,53515],{"class":1991},[142,56602,198],{"class":152},[142,56604,55340],{"class":257},[142,56606,55343],{"class":152},[142,56608,99],{"class":51329},[142,56610,51336],{"class":152},[142,56612,56613,56615,56617,56619,56621],{"class":144,"line":16742},[142,56614,55331],{"class":152},[142,56616,99],{"class":51329},[142,56618,55343],{"class":152},[142,56620,99],{"class":51329},[142,56622,51336],{"class":152},[142,56624,56625,56627,56629,56631,56633],{"class":144,"line":16765},[142,56626,55331],{"class":152},[142,56628,99],{"class":51329},[142,56630,55343],{"class":152},[142,56632,99],{"class":51329},[142,56634,51336],{"class":152},[142,56636,56637,56639,56641,56643,56645],{"class":144,"line":16787},[142,56638,55331],{"class":152},[142,56640,99],{"class":51329},[142,56642,55343],{"class":152},[142,56644,99],{"class":51329},[142,56646,51336],{"class":152},[142,56648,56649,56651,56653,56655,56657],{"class":144,"line":16792},[142,56650,55331],{"class":152},[142,56652,99],{"class":51329},[142,56654,55343],{"class":152},[142,56656,99],{"class":51329},[142,56658,51336],{"class":152},[142,56660,56661,56663,56665,56667,56669],{"class":144,"line":16798},[142,56662,55331],{"class":152},[142,56664,99],{"class":51329},[142,56666,55343],{"class":152},[142,56668,99],{"class":51329},[142,56670,51336],{"class":152},[142,56672,56673,56675,56677,56679,56681],{"class":144,"line":16812},[142,56674,55331],{"class":152},[142,56676,99],{"class":51329},[142,56678,55343],{"class":152},[142,56680,99],{"class":51329},[142,56682,51336],{"class":152},[142,56684,56685,56687,56689,56691,56693],{"class":144,"line":16825},[142,56686,55331],{"class":152},[142,56688,99],{"class":51329},[142,56690,55343],{"class":152},[142,56692,99],{"class":51329},[142,56694,51336],{"class":152},[142,56696,56697,56699,56701],{"class":144,"line":16830},[142,56698,55436],{"class":152},[142,56700,1160],{"class":51329},[142,56702,51336],{"class":152},[142,56704,56705,56707,56709],{"class":144,"line":16844},[142,56706,51805],{"class":152},[142,56708,51640],{"class":51329},[142,56710,51336],{"class":152},[142,56712,56713,56715,56717],{"class":144,"line":16849},[142,56714,52446],{"class":152},[142,56716,51640],{"class":51329},[142,56718,51336],{"class":152},[142,56720,56721,56723,56725],{"class":144,"line":16855},[142,56722,52173],{"class":152},[142,56724,51842],{"class":51329},[142,56726,51336],{"class":152},[142,56728,56729,56731,56734,56736],{"class":144,"line":16860},[142,56730,11250],{"class":148},[142,56732,56733],{"class":201}," sliderData",[142,56735,13593],{"class":148},[142,56737,55476],{"class":152},[142,56739,56740,56742,56744,56746,56748,56750,56752],{"class":144,"line":16874},[142,56741,55481],{"class":152},[142,56743,55484],{"class":257},[142,56745,55487],{"class":152},[142,56747,55490],{"class":257},[142,56749,55493],{"class":152},[142,56751,55496],{"class":257},[142,56753,55499],{"class":152},[142,56755,56756,56758,56760,56762,56764,56766,56768],{"class":144,"line":16879},[142,56757,55481],{"class":152},[142,56759,55506],{"class":257},[142,56761,55487],{"class":152},[142,56763,55511],{"class":257},[142,56765,55493],{"class":152},[142,56767,55516],{"class":257},[142,56769,55499],{"class":152},[142,56771,56772,56774,56776,56778,56780,56782,56784],{"class":144,"line":16884},[142,56773,55481],{"class":152},[142,56775,55525],{"class":257},[142,56777,55487],{"class":152},[142,56779,55530],{"class":257},[142,56781,55493],{"class":152},[142,56783,55535],{"class":257},[142,56785,55499],{"class":152},[142,56787,56788,56790,56792,56794,56796,56798,56800],{"class":144,"line":16898},[142,56789,55481],{"class":152},[142,56791,55544],{"class":257},[142,56793,55487],{"class":152},[142,56795,55549],{"class":257},[142,56797,55493],{"class":152},[142,56799,55554],{"class":257},[142,56801,55499],{"class":152},[142,56803,56804,56806,56808,56810,56812,56814,56816],{"class":144,"line":16910},[142,56805,55481],{"class":152},[142,56807,55563],{"class":257},[142,56809,55487],{"class":152},[142,56811,55568],{"class":257},[142,56813,55493],{"class":152},[142,56815,55573],{"class":257},[142,56817,55499],{"class":152},[142,56819,56820,56822,56824,56826,56828,56830,56832],{"class":144,"line":16915},[142,56821,55481],{"class":152},[142,56823,55582],{"class":257},[142,56825,55487],{"class":152},[142,56827,55587],{"class":257},[142,56829,55493],{"class":152},[142,56831,55592],{"class":257},[142,56833,55499],{"class":152},[142,56835,56836,56838,56840,56842,56844,56846,56848],{"class":144,"line":16928},[142,56837,55481],{"class":152},[142,56839,55601],{"class":257},[142,56841,55487],{"class":152},[142,56843,55606],{"class":257},[142,56845,55493],{"class":152},[142,56847,55611],{"class":257},[142,56849,55499],{"class":152},[142,56851,56852,56854,56856,56858,56860,56862,56864],{"class":144,"line":16933},[142,56853,55481],{"class":152},[142,56855,55620],{"class":257},[142,56857,55487],{"class":152},[142,56859,55625],{"class":257},[142,56861,55493],{"class":152},[142,56863,55630],{"class":257},[142,56865,55633],{"class":152},[142,56867,56868],{"class":144,"line":16938},[142,56869,53138],{"class":152},[142,56871,56872],{"class":144,"line":16943},[142,56873,56874],{"class":211},"    \u002F\u002F 1.获取元素\n",[142,56876,56877,56879,56881,56883,56885,56887,56889,56891],{"class":144,"line":16956},[142,56878,11250],{"class":148},[142,56880,55644],{"class":201},[142,56882,13593],{"class":148},[142,56884,54425],{"class":152},[142,56886,54428],{"class":1991},[142,56888,153],{"class":152},[142,56890,55655],{"class":257},[142,56892,159],{"class":152},[142,56894,56895,56897,56899,56901,56903,56905,56907,56909],{"class":144,"line":16961},[142,56896,11250],{"class":148},[142,56898,6854],{"class":201},[142,56900,13593],{"class":148},[142,56902,54425],{"class":152},[142,56904,54428],{"class":1991},[142,56906,153],{"class":152},[142,56908,55674],{"class":257},[142,56910,159],{"class":152},[142,56912,56913,56915,56917,56919],{"class":144,"line":32662},[142,56914,52248],{"class":148},[142,56916,9467],{"class":152},[142,56918,198],{"class":148},[142,56920,47362],{"class":201},[142,56922,56923],{"class":144,"line":32668},[142,56924,56925],{"class":211},"    \u002F\u002F 2.开启定时器\n",[142,56927,56928],{"class":144,"line":32674},[142,56929,56930],{"class":211},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[142,56932,56933,56936,56938,56940],{"class":144,"line":32680},[142,56934,56935],{"class":1991},"    setInterval",[142,56937,153],{"class":152},[142,56939,54478],{"class":148},[142,56941,54481],{"class":152},[142,56943,56944,56946],{"class":144,"line":32686},[142,56945,54486],{"class":152},[142,56947,2730],{"class":148},[142,56949,56950,56952,56954,56956,56959,56961],{"class":144,"line":32697},[142,56951,54509],{"class":148},[142,56953,54512],{"class":152},[142,56955,1738],{"class":148},[142,56957,56958],{"class":152}," sliderData.",[142,56960,51997],{"class":201},[142,56962,12471],{"class":152},[142,56964,56965,56968,56970],{"class":144,"line":32703},[142,56966,56967],{"class":152},"        i ",[142,56969,198],{"class":148},[142,56971,47362],{"class":201},[142,56973,56974],{"class":144,"line":32723},[142,56975,52427],{"class":152},[142,56977,56978],{"class":144,"line":32729},[142,56979,56980],{"class":211},"      \u002F\u002F 更换图片路径\n",[142,56982,56983,56985,56987],{"class":144,"line":32740},[142,56984,55750],{"class":152},[142,56986,198],{"class":148},[142,56988,56989],{"class":152}," sliderData[i].url\n",[142,56991,56992],{"class":144,"line":32746},[142,56993,56994],{"class":211},"      \u002F\u002F 把文字写到p里面\n",[142,56996,56997,56999,57001],{"class":144,"line":32752},[142,56998,55760],{"class":152},[142,57000,198],{"class":148},[142,57002,57003],{"class":152}," sliderData[i].title\n",[142,57005,57006],{"class":144,"line":32758},[142,57007,57008],{"class":211},"      \u002F\u002F 小圆点\n",[142,57010,57011],{"class":144,"line":32764},[142,57012,57013],{"class":211},"      \u002F\u002F 先删除以前的active\n",[142,57015,57016],{"class":144,"line":32770},[142,57017,57018],{"class":211},"      \u002F\u002F 只让当前li添加active\n",[142,57020,57021,57023,57025,57027,57030,57033,57036,57038,57040],{"class":144,"line":32776},[142,57022,55800],{"class":152},[142,57024,54428],{"class":1991},[142,57026,153],{"class":152},[142,57028,57029],{"class":257},"'.slider-footer .activate'",[142,57031,57032],{"class":152},").classList.",[142,57034,57035],{"class":1991},"remove",[142,57037,153],{"class":152},[142,57039,55818],{"class":257},[142,57041,159],{"class":152},[142,57043,57044,57046,57048,57050,57053,57055,57057,57059,57062,57064,57066,57068,57070],{"class":144,"line":32782},[142,57045,55800],{"class":152},[142,57047,54428],{"class":1991},[142,57049,153],{"class":152},[142,57051,57052],{"class":257},"`.slider-footer ul li:nth-child(${",[142,57054,594],{"class":152},[142,57056,45595],{"class":148},[142,57058,25147],{"class":201},[142,57060,57061],{"class":257},"})`",[142,57063,57032],{"class":152},[142,57065,5363],{"class":1991},[142,57067,153],{"class":152},[142,57069,55818],{"class":257},[142,57071,159],{"class":152},[142,57073,57074],{"class":144,"line":32802},[142,57075,2428],{"emptyLinePlaceholder":69},[142,57077,57078,57080,57082],{"class":144,"line":32808},[142,57079,54564],{"class":152},[142,57081,6439],{"class":201},[142,57083,159],{"class":152},[142,57085,57086],{"class":144,"line":32824},[142,57087,2428],{"emptyLinePlaceholder":69},[142,57089,57090,57092,57094],{"class":144,"line":32830},[142,57091,52446],{"class":152},[142,57093,51842],{"class":51329},[142,57095,51336],{"class":152},[142,57097,57098,57100,57102],{"class":144,"line":32844},[142,57099,51814],{"class":152},[142,57101,51829],{"class":51329},[142,57103,51336],{"class":152},[142,57105,57106],{"class":144,"line":32850},[142,57107,2428],{"emptyLinePlaceholder":69},[142,57109,57110,57112,57114],{"class":144,"line":32865},[142,57111,51814],{"class":152},[142,57113,50664],{"class":51329},[142,57115,51336],{"class":152},[113,57117,57119],{"id":57118},"_317-重要知识点","3.1.7 重要知识点",[14,57121,57122,57123],{},"浏览器在渲染文本时， ",[302,57124,57125],{},"没有空格或换行符就没有“断行点”",[14,57127,57128],{},[29,57129],{"alt":31,"src":57130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57132,57133],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57135,57136],{},[29,57137],{"alt":31,"src":57138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57140,57141],{},[29,57142],{"alt":31,"src":57143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[84,57145,57147],{"id":57146},"_32-dom事件基础","3.2 DOM事件基础",[113,57149,57151],{"id":57150},"_321-事件监听","3.2.1 事件监听",[14,57153,57154],{},[29,57155],{"alt":31,"src":57156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57158,57159],{},"事件监听有响应的发生",[14,57161,57162],{},[29,57163],{"alt":31,"src":57164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57166,57167],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57169,57170],{},"对于有名函数,要执行的函数名后边不要加()",[113,57172,57174],{"id":57173},"_322-随机点名案例","3.2.2 随机点名案例",[133,57176,57178],{"className":50662,"code":57177,"language":50664,"meta":31,"style":31},"\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",[139,57179,57180,57190,57204,57208,57216,57230,57250,57262,57270,57276,57286,57296,57300,57304,57311,57322,57326,57330,57336,57348,57362,57372,57384,57397,57401,57405,57412,57416,57429,57441,57453,57457,57461,57465,57472,57482,57486,57490,57499,57511,57523,57538,57542,57550,57558,57562,57570,57583,57597,57610,57630,57638,57653,57673,57693,57701,57705,57713,57718,57754,57774,57779,57798,57803,57814,57819,57830,57835,57854,57869,57874,57900,57910,57919,57924,57940,57945,57950,57955,57970,57974,57978,57983,58002,58019,58027,58032,58047,58051,58055,58063,58071,58075],{"__ignoreMap":31},[142,57181,57182,57184,57186,57188],{"class":144,"line":145},[142,57183,51326],{"class":152},[142,57185,51330],{"class":51329},[142,57187,51333],{"class":1991},[142,57189,51336],{"class":152},[142,57191,57192,57194,57196,57198,57200,57202],{"class":144,"line":64},[142,57193,1063],{"class":152},[142,57195,50664],{"class":51329},[142,57197,51345],{"class":1991},[142,57199,198],{"class":152},[142,57201,51350],{"class":257},[142,57203,51336],{"class":152},[142,57205,57206],{"class":144,"line":1208},[142,57207,2428],{"emptyLinePlaceholder":69},[142,57209,57210,57212,57214],{"class":144,"line":1223},[142,57211,1063],{"class":152},[142,57213,51363],{"class":51329},[142,57215,51336],{"class":152},[142,57217,57218,57220,57222,57224,57226,57228],{"class":144,"line":1229},[142,57219,52173],{"class":152},[142,57221,51373],{"class":51329},[142,57223,51376],{"class":1991},[142,57225,198],{"class":152},[142,57227,51381],{"class":257},[142,57229,51336],{"class":152},[142,57231,57232,57234,57236,57238,57240,57242,57244,57246,57248],{"class":144,"line":1243},[142,57233,52173],{"class":152},[142,57235,51373],{"class":51329},[142,57237,14949],{"class":1991},[142,57239,198],{"class":152},[142,57241,51420],{"class":257},[142,57243,51400],{"class":1991},[142,57245,198],{"class":152},[142,57247,51427],{"class":257},[142,57249,51336],{"class":152},[142,57251,57252,57254,57256,57258,57260],{"class":144,"line":1249},[142,57253,52173],{"class":152},[142,57255,51436],{"class":51329},[142,57257,51439],{"class":152},[142,57259,51436],{"class":51329},[142,57261,51336],{"class":152},[142,57263,57264,57266,57268],{"class":144,"line":1340},[142,57265,52173],{"class":152},[142,57267,5155],{"class":51329},[142,57269,51336],{"class":152},[142,57271,57272,57274],{"class":144,"line":1346},[142,57273,6432],{"class":51329},[142,57275,15601],{"class":152},[142,57277,57278,57280,57282,57284],{"class":144,"line":1358},[142,57279,54735],{"class":201},[142,57281,51466],{"class":152},[142,57283,344],{"class":201},[142,57285,1319],{"class":152},[142,57287,57288,57290,57292,57294],{"class":144,"line":1640},[142,57289,54724],{"class":201},[142,57291,51466],{"class":152},[142,57293,344],{"class":201},[142,57295,1319],{"class":152},[142,57297,57298],{"class":144,"line":1645},[142,57299,2215],{"class":152},[142,57301,57302],{"class":144,"line":1651},[142,57303,2428],{"emptyLinePlaceholder":69},[142,57305,57306,57309],{"class":144,"line":1656},[142,57307,57308],{"class":51329},"    h2",[142,57310,15601],{"class":152},[142,57312,57313,57316,57318,57320],{"class":144,"line":1670},[142,57314,57315],{"class":201},"      text-align",[142,57317,51466],{"class":152},[142,57319,51621],{"class":201},[142,57321,1319],{"class":152},[142,57323,57324],{"class":144,"line":1675},[142,57325,2215],{"class":152},[142,57327,57328],{"class":144,"line":1681},[142,57329,2428],{"emptyLinePlaceholder":69},[142,57331,57332,57334],{"class":144,"line":1702},[142,57333,54781],{"class":1991},[142,57335,15601],{"class":152},[142,57337,57338,57340,57342,57344,57346],{"class":144,"line":1707},[142,57339,54800],{"class":201},[142,57341,51466],{"class":152},[142,57343,1567],{"class":201},[142,57345,51521],{"class":148},[142,57347,1319],{"class":152},[142,57349,57350,57352,57354,57356,57358,57360],{"class":144,"line":1721},[142,57351,54735],{"class":201},[142,57353,51466],{"class":152},[142,57355,809],{"class":201},[142,57357,51521],{"class":148},[142,57359,51585],{"class":201},[142,57361,1319],{"class":152},[142,57363,57364,57366,57368,57370],{"class":144,"line":1726},[142,57365,55038],{"class":201},[142,57367,51466],{"class":152},[142,57369,51506],{"class":201},[142,57371,1319],{"class":152},[142,57373,57374,57376,57378,57380,57382],{"class":144,"line":1755},[142,57375,54951],{"class":201},[142,57377,51466],{"class":152},[142,57379,978],{"class":201},[142,57381,51521],{"class":148},[142,57383,1319],{"class":152},[142,57385,57386,57389,57391,57393,57395],{"class":144,"line":1760},[142,57387,57388],{"class":201},"      line-height",[142,57390,51466],{"class":152},[142,57392,554],{"class":201},[142,57394,51521],{"class":148},[142,57396,1319],{"class":152},[142,57398,57399],{"class":144,"line":1777},[142,57400,2215],{"class":152},[142,57402,57403],{"class":144,"line":1782},[142,57404,2428],{"emptyLinePlaceholder":69},[142,57406,57407,57410],{"class":144,"line":1787},[142,57408,57409],{"class":1991},"    .qs",[142,57411,15601],{"class":152},[142,57413,57414],{"class":144,"line":1792},[142,57415,2428],{"emptyLinePlaceholder":69},[142,57417,57418,57420,57422,57425,57427],{"class":144,"line":1806},[142,57419,54800],{"class":201},[142,57421,51466],{"class":152},[142,57423,57424],{"class":201},"450",[142,57426,51521],{"class":148},[142,57428,1319],{"class":152},[142,57430,57431,57433,57435,57437,57439],{"class":144,"line":1811},[142,57432,54814],{"class":201},[142,57434,51466],{"class":152},[142,57436,554],{"class":201},[142,57438,51521],{"class":148},[142,57440,1319],{"class":152},[142,57442,57443,57446,57448,57451],{"class":144,"line":2605},[142,57444,57445],{"class":201},"      color",[142,57447,51466],{"class":152},[142,57449,57450],{"class":201},"red",[142,57452,1319],{"class":152},[142,57454,57455],{"class":144,"line":2619},[142,57456,2428],{"emptyLinePlaceholder":69},[142,57458,57459],{"class":144,"line":2627},[142,57460,2215],{"class":152},[142,57462,57463],{"class":144,"line":2632},[142,57464,2428],{"emptyLinePlaceholder":69},[142,57466,57467,57470],{"class":144,"line":2638},[142,57468,57469],{"class":1991},"    .btns",[142,57471,15601],{"class":152},[142,57473,57474,57476,57478,57480],{"class":144,"line":2644},[142,57475,57315],{"class":201},[142,57477,51466],{"class":152},[142,57479,51621],{"class":201},[142,57481,1319],{"class":152},[142,57483,57484],{"class":144,"line":2649},[142,57485,2215],{"class":152},[142,57487,57488],{"class":144,"line":7977},[142,57489,2428],{"emptyLinePlaceholder":69},[142,57491,57492,57494,57497],{"class":144,"line":8001},[142,57493,57469],{"class":1991},[142,57495,57496],{"class":51329}," button",[142,57498,15601],{"class":152},[142,57500,57501,57503,57505,57507,57509],{"class":144,"line":8006},[142,57502,54800],{"class":201},[142,57504,51466],{"class":152},[142,57506,970],{"class":201},[142,57508,51521],{"class":148},[142,57510,1319],{"class":152},[142,57512,57513,57515,57517,57519,57521],{"class":144,"line":8012},[142,57514,54814],{"class":201},[142,57516,51466],{"class":152},[142,57518,426],{"class":201},[142,57520,51521],{"class":148},[142,57522,1319],{"class":152},[142,57524,57525,57527,57529,57531,57534,57536],{"class":144,"line":8039},[142,57526,54735],{"class":201},[142,57528,51466],{"class":152},[142,57530,344],{"class":201},[142,57532,57533],{"class":201}," 50",[142,57535,51521],{"class":148},[142,57537,1319],{"class":152},[142,57539,57540],{"class":144,"line":8044},[142,57541,2215],{"class":152},[142,57543,57544,57546,57548],{"class":144,"line":8050},[142,57545,52446],{"class":152},[142,57547,5155],{"class":51329},[142,57549,51336],{"class":152},[142,57551,57552,57554,57556],{"class":144,"line":8062},[142,57553,51814],{"class":152},[142,57555,51363],{"class":51329},[142,57557,51336],{"class":152},[142,57559,57560],{"class":144,"line":8074},[142,57561,2428],{"emptyLinePlaceholder":69},[142,57563,57564,57566,57568],{"class":144,"line":8086},[142,57565,1063],{"class":152},[142,57567,51829],{"class":51329},[142,57569,51336],{"class":152},[142,57571,57572,57574,57576,57579,57581],{"class":144,"line":9745},[142,57573,52173],{"class":152},[142,57575,84],{"class":51329},[142,57577,57578],{"class":152},">随机点名\u003C\u002F",[142,57580,84],{"class":51329},[142,57582,51336],{"class":152},[142,57584,57585,57587,57589,57591,57593,57595],{"class":144,"line":9770},[142,57586,52173],{"class":152},[142,57588,51640],{"class":51329},[142,57590,53515],{"class":1991},[142,57592,198],{"class":152},[142,57594,53520],{"class":257},[142,57596,51336],{"class":152},[142,57598,57599,57601,57603,57606,57608],{"class":144,"line":9793},[142,57600,51370],{"class":152},[142,57602,142],{"class":51329},[142,57604,57605],{"class":152},">名字是：\u003C\u002F",[142,57607,142],{"class":51329},[142,57609,51336],{"class":152},[142,57611,57612,57614,57616,57618,57620,57623,57626,57628],{"class":144,"line":9817},[142,57613,51370],{"class":152},[142,57615,51640],{"class":51329},[142,57617,53515],{"class":1991},[142,57619,198],{"class":152},[142,57621,57622],{"class":257},"\"qs\"",[142,57624,57625],{"class":152},">这里显示姓名\u003C\u002F",[142,57627,51640],{"class":51329},[142,57629,51336],{"class":152},[142,57631,57632,57634,57636],{"class":144,"line":9822},[142,57633,52446],{"class":152},[142,57635,51640],{"class":51329},[142,57637,51336],{"class":152},[142,57639,57640,57642,57644,57646,57648,57651],{"class":144,"line":9827},[142,57641,52173],{"class":152},[142,57643,51640],{"class":51329},[142,57645,53515],{"class":1991},[142,57647,198],{"class":152},[142,57649,57650],{"class":257},"\"btns\"",[142,57652,51336],{"class":152},[142,57654,57655,57657,57659,57661,57663,57666,57669,57671],{"class":144,"line":9832},[142,57656,51370],{"class":152},[142,57658,53916],{"class":51329},[142,57660,53515],{"class":1991},[142,57662,198],{"class":152},[142,57664,57665],{"class":257},"\"start\"",[142,57667,57668],{"class":152},">开始\u003C\u002F",[142,57670,53916],{"class":51329},[142,57672,51336],{"class":152},[142,57674,57675,57677,57679,57681,57683,57686,57689,57691],{"class":144,"line":9841},[142,57676,51370],{"class":152},[142,57678,53916],{"class":51329},[142,57680,53515],{"class":1991},[142,57682,198],{"class":152},[142,57684,57685],{"class":257},"\"end\"",[142,57687,57688],{"class":152},">结束\u003C\u002F",[142,57690,53916],{"class":51329},[142,57692,51336],{"class":152},[142,57694,57695,57697,57699],{"class":144,"line":9846},[142,57696,52446],{"class":152},[142,57698,51640],{"class":51329},[142,57700,51336],{"class":152},[142,57702,57703],{"class":144,"line":9852},[142,57704,2428],{"emptyLinePlaceholder":69},[142,57706,57707,57709,57711],{"class":144,"line":9873},[142,57708,52173],{"class":152},[142,57710,51842],{"class":51329},[142,57712,51336],{"class":152},[142,57714,57715],{"class":144,"line":9879},[142,57716,57717],{"class":211},"    \u002F\u002F 数据数组\n",[142,57719,57720,57722,57725,57727,57729,57732,57734,57737,57739,57742,57744,57747,57749,57752],{"class":144,"line":9893},[142,57721,11250],{"class":148},[142,57723,57724],{"class":201}," arr",[142,57726,13593],{"class":148},[142,57728,52255],{"class":152},[142,57730,57731],{"class":257},"'马超'",[142,57733,12464],{"class":152},[142,57735,57736],{"class":257},"'黄忠'",[142,57738,12464],{"class":152},[142,57740,57741],{"class":257},"'赵云'",[142,57743,12464],{"class":152},[142,57745,57746],{"class":257},"'关羽'",[142,57748,12464],{"class":152},[142,57750,57751],{"class":257},"'张飞'",[142,57753,33275],{"class":152},[142,57755,57756,57758,57761,57763,57765,57767,57769,57772],{"class":144,"line":9899},[142,57757,11250],{"class":148},[142,57759,57760],{"class":201}," qs",[142,57762,13593],{"class":148},[142,57764,54425],{"class":152},[142,57766,54428],{"class":1991},[142,57768,153],{"class":152},[142,57770,57771],{"class":257},"'.qs'",[142,57773,159],{"class":152},[142,57775,57776],{"class":144,"line":9926},[142,57777,57778],{"class":211},"    \u002F\u002F 1.业务1.开始按钮模块\n",[142,57780,57781,57783,57785,57787,57789,57791,57793,57796],{"class":144,"line":9935},[142,57782,11250],{"class":148},[142,57784,4212],{"class":201},[142,57786,13593],{"class":148},[142,57788,54425],{"class":152},[142,57790,54428],{"class":1991},[142,57792,153],{"class":152},[142,57794,57795],{"class":257},"'.start'",[142,57797,159],{"class":152},[142,57799,57800],{"class":144,"line":9941},[142,57801,57802],{"class":211},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[142,57804,57805,57807,57810,57812],{"class":144,"line":9949},[142,57806,52248],{"class":148},[142,57808,57809],{"class":152}," timerId ",[142,57811,198],{"class":148},[142,57813,47362],{"class":201},[142,57815,57816],{"class":144,"line":9954},[142,57817,57818],{"class":211},"    \u002F\u002F 随机号要全局变量\n",[142,57820,57821,57823,57826,57828],{"class":144,"line":16633},[142,57822,52248],{"class":148},[142,57824,57825],{"class":152}," random ",[142,57827,198],{"class":148},[142,57829,47362],{"class":201},[142,57831,57832],{"class":144,"line":16639},[142,57833,57834],{"class":211},"    \u002F\u002F 1.1 添加点击事件\n",[142,57836,57837,57840,57843,57845,57848,57850,57852],{"class":144,"line":16662},[142,57838,57839],{"class":152},"    start.",[142,57841,57842],{"class":1991},"addEventListener",[142,57844,153],{"class":152},[142,57846,57847],{"class":257},"'click'",[142,57849,12464],{"class":152},[142,57851,54478],{"class":148},[142,57853,54481],{"class":152},[142,57855,57856,57859,57861,57863,57865,57867],{"class":144,"line":16668},[142,57857,57858],{"class":152},"      timerId ",[142,57860,198],{"class":148},[142,57862,54473],{"class":1991},[142,57864,153],{"class":152},[142,57866,54478],{"class":148},[142,57868,54481],{"class":152},[142,57870,57871],{"class":144,"line":16691},[142,57872,57873],{"class":211},"        \u002F\u002F 随机数\n",[142,57875,57876,57879,57881,57884,57887,57890,57892,57894,57896,57898],{"class":144,"line":16705},[142,57877,57878],{"class":152},"        random ",[142,57880,198],{"class":148},[142,57882,57883],{"class":1991}," parseInt",[142,57885,57886],{"class":152},"(Math.",[142,57888,57889],{"class":1991},"random",[142,57891,13079],{"class":152},[142,57893,608],{"class":148},[142,57895,51994],{"class":152},[142,57897,51997],{"class":201},[142,57899,159],{"class":152},[142,57901,57902,57905,57907],{"class":144,"line":16725},[142,57903,57904],{"class":152},"        qs.innerHTML ",[142,57906,198],{"class":148},[142,57908,57909],{"class":152}," arr[random]\n",[142,57911,57912,57915,57917],{"class":144,"line":16731},[142,57913,57914],{"class":152},"      }, ",[142,57916,426],{"class":201},[142,57918,159],{"class":152},[142,57920,57921],{"class":144,"line":16742},[142,57922,57923],{"class":211},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[142,57925,57926,57928,57931,57933,57936,57938],{"class":144,"line":16765},[142,57927,54509],{"class":148},[142,57929,57930],{"class":152}," (arr.",[142,57932,51997],{"class":201},[142,57934,57935],{"class":148}," ===",[142,57937,25147],{"class":201},[142,57939,12471],{"class":152},[142,57941,57942],{"class":144,"line":16787},[142,57943,57944],{"class":211},"        \u002F\u002F start.disabled = true\n",[142,57946,57947],{"class":144,"line":16792},[142,57948,57949],{"class":211},"        \u002F\u002F end.disabled = true\n",[142,57951,57952],{"class":144,"line":16798},[142,57953,57954],{"class":211},"        \u002F\u002F 可以合起来写\n",[142,57956,57957,57960,57962,57965,57967],{"class":144,"line":16812},[142,57958,57959],{"class":152},"        start.disabled ",[142,57961,198],{"class":148},[142,57963,57964],{"class":152}," end.disabled ",[142,57966,198],{"class":148},[142,57968,57969],{"class":201}," true\n",[142,57971,57972],{"class":144,"line":16825},[142,57973,52427],{"class":152},[142,57975,57976],{"class":144,"line":16830},[142,57977,33490],{"class":152},[142,57979,57980],{"class":144,"line":16844},[142,57981,57982],{"class":211},"    \u002F\u002F 1.2 关闭按钮模块\n",[142,57984,57985,57987,57989,57991,57993,57995,57997,58000],{"class":144,"line":16849},[142,57986,11250],{"class":148},[142,57988,4228],{"class":201},[142,57990,13593],{"class":148},[142,57992,54425],{"class":152},[142,57994,54428],{"class":1991},[142,57996,153],{"class":152},[142,57998,57999],{"class":257},"'.end'",[142,58001,159],{"class":152},[142,58003,58004,58007,58009,58011,58013,58015,58017],{"class":144,"line":16855},[142,58005,58006],{"class":152},"    end.",[142,58008,57842],{"class":1991},[142,58010,153],{"class":152},[142,58012,57847],{"class":257},[142,58014,12464],{"class":152},[142,58016,54478],{"class":148},[142,58018,54481],{"class":152},[142,58020,58021,58024],{"class":144,"line":16860},[142,58022,58023],{"class":1991},"      clearInterval",[142,58025,58026],{"class":152},"(timerId)\n",[142,58028,58029],{"class":144,"line":16874},[142,58030,58031],{"class":211},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[142,58033,58034,58037,58040,58043,58045],{"class":144,"line":16879},[142,58035,58036],{"class":152},"      arr.",[142,58038,58039],{"class":1991},"splice",[142,58041,58042],{"class":152},"(random, ",[142,58044,370],{"class":201},[142,58046,159],{"class":152},[142,58048,58049],{"class":144,"line":16884},[142,58050,33490],{"class":152},[142,58052,58053],{"class":144,"line":16898},[142,58054,2428],{"emptyLinePlaceholder":69},[142,58056,58057,58059,58061],{"class":144,"line":16910},[142,58058,52446],{"class":152},[142,58060,51842],{"class":51329},[142,58062,51336],{"class":152},[142,58064,58065,58067,58069],{"class":144,"line":16915},[142,58066,51814],{"class":152},[142,58068,51829],{"class":51329},[142,58070,51336],{"class":152},[142,58072,58073],{"class":144,"line":16928},[142,58074,2428],{"emptyLinePlaceholder":69},[142,58076,58077,58079,58081],{"class":144,"line":16933},[142,58078,51814],{"class":152},[142,58080,50664],{"class":51329},[142,58082,51336],{"class":152},[14,58084,58085],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[113,58087,58089],{"id":58088},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[133,58091,58093],{"className":50662,"code":58092,"language":50664,"meta":31,"style":31},"\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",[139,58094,58095,58105,58119,58123,58131,58145,58165,58177,58185,58189,58197,58209,58217,58236,58253,58269,58279,58283,58291,58299,58303],{"__ignoreMap":31},[142,58096,58097,58099,58101,58103],{"class":144,"line":145},[142,58098,51326],{"class":152},[142,58100,51330],{"class":51329},[142,58102,51333],{"class":1991},[142,58104,51336],{"class":152},[142,58106,58107,58109,58111,58113,58115,58117],{"class":144,"line":64},[142,58108,1063],{"class":152},[142,58110,50664],{"class":51329},[142,58112,51345],{"class":1991},[142,58114,198],{"class":152},[142,58116,51350],{"class":257},[142,58118,51336],{"class":152},[142,58120,58121],{"class":144,"line":1208},[142,58122,2428],{"emptyLinePlaceholder":69},[142,58124,58125,58127,58129],{"class":144,"line":1223},[142,58126,1063],{"class":152},[142,58128,51363],{"class":51329},[142,58130,51336],{"class":152},[142,58132,58133,58135,58137,58139,58141,58143],{"class":144,"line":1229},[142,58134,52173],{"class":152},[142,58136,51373],{"class":51329},[142,58138,51376],{"class":1991},[142,58140,198],{"class":152},[142,58142,51381],{"class":257},[142,58144,51336],{"class":152},[142,58146,58147,58149,58151,58153,58155,58157,58159,58161,58163],{"class":144,"line":1243},[142,58148,52173],{"class":152},[142,58150,51373],{"class":51329},[142,58152,14949],{"class":1991},[142,58154,198],{"class":152},[142,58156,51420],{"class":257},[142,58158,51400],{"class":1991},[142,58160,198],{"class":152},[142,58162,51427],{"class":257},[142,58164,51336],{"class":152},[142,58166,58167,58169,58171,58173,58175],{"class":144,"line":1249},[142,58168,52173],{"class":152},[142,58170,51436],{"class":51329},[142,58172,51439],{"class":152},[142,58174,51436],{"class":51329},[142,58176,51336],{"class":152},[142,58178,58179,58181,58183],{"class":144,"line":1340},[142,58180,51814],{"class":152},[142,58182,51363],{"class":51329},[142,58184,51336],{"class":152},[142,58186,58187],{"class":144,"line":1346},[142,58188,2428],{"emptyLinePlaceholder":69},[142,58190,58191,58193,58195],{"class":144,"line":1358},[142,58192,1063],{"class":152},[142,58194,51829],{"class":51329},[142,58196,51336],{"class":152},[142,58198,58199,58201,58203,58205,58207],{"class":144,"line":1640},[142,58200,52173],{"class":152},[142,58202,53916],{"class":51329},[142,58204,53922],{"class":152},[142,58206,53916],{"class":51329},[142,58208,51336],{"class":152},[142,58210,58211,58213,58215],{"class":144,"line":1645},[142,58212,52173],{"class":152},[142,58214,51842],{"class":51329},[142,58216,51336],{"class":152},[142,58218,58219,58221,58223,58225,58227,58229,58231,58234],{"class":144,"line":1651},[142,58220,11250],{"class":148},[142,58222,54420],{"class":201},[142,58224,13593],{"class":148},[142,58226,54425],{"class":152},[142,58228,54428],{"class":1991},[142,58230,153],{"class":152},[142,58232,58233],{"class":257},"'button'",[142,58235,159],{"class":152},[142,58237,58238,58241,58243,58245,58247,58249,58251],{"class":144,"line":1656},[142,58239,58240],{"class":152},"    btn.",[142,58242,57842],{"class":1991},[142,58244,153],{"class":152},[142,58246,57847],{"class":257},[142,58248,12464],{"class":152},[142,58250,54478],{"class":148},[142,58252,54481],{"class":152},[142,58254,58255,58258,58260,58262,58265,58267],{"class":144,"line":1670},[142,58256,58257],{"class":148},"      const",[142,58259,2268],{"class":201},[142,58261,13593],{"class":148},[142,58263,58264],{"class":152}," Math.",[142,58266,57889],{"class":1991},[142,58268,2004],{"class":152},[142,58270,58271,58274,58277],{"class":144,"line":1675},[142,58272,58273],{"class":152},"      console.",[142,58275,58276],{"class":1991},"log",[142,58278,166],{"class":152},[142,58280,58281],{"class":144,"line":1681},[142,58282,33490],{"class":152},[142,58284,58285,58287,58289],{"class":144,"line":1702},[142,58286,52446],{"class":152},[142,58288,51842],{"class":51329},[142,58290,51336],{"class":152},[142,58292,58293,58295,58297],{"class":144,"line":1707},[142,58294,51814],{"class":152},[142,58296,51829],{"class":51329},[142,58298,51336],{"class":152},[142,58300,58301],{"class":144,"line":1721},[142,58302,2428],{"emptyLinePlaceholder":69},[142,58304,58305,58307,58309],{"class":144,"line":1726},[142,58306,51814],{"class":152},[142,58308,50664],{"class":51329},[142,58310,51336],{"class":152},[14,58312,58313],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58315,58316],{},"常量不可以重新赋值",[14,58318,58319],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[133,58321,58323],{"className":50662,"code":58322,"language":50664,"meta":31,"style":31},"\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",[139,58324,58325,58335,58349,58353,58361,58375,58395,58407,58415,58419,58427,58439,58447,58458,58476,58492,58506,58514,58518,58526,58534,58538],{"__ignoreMap":31},[142,58326,58327,58329,58331,58333],{"class":144,"line":145},[142,58328,51326],{"class":152},[142,58330,51330],{"class":51329},[142,58332,51333],{"class":1991},[142,58334,51336],{"class":152},[142,58336,58337,58339,58341,58343,58345,58347],{"class":144,"line":64},[142,58338,1063],{"class":152},[142,58340,50664],{"class":51329},[142,58342,51345],{"class":1991},[142,58344,198],{"class":152},[142,58346,51350],{"class":257},[142,58348,51336],{"class":152},[142,58350,58351],{"class":144,"line":1208},[142,58352,2428],{"emptyLinePlaceholder":69},[142,58354,58355,58357,58359],{"class":144,"line":1223},[142,58356,1063],{"class":152},[142,58358,51363],{"class":51329},[142,58360,51336],{"class":152},[142,58362,58363,58365,58367,58369,58371,58373],{"class":144,"line":1229},[142,58364,52173],{"class":152},[142,58366,51373],{"class":51329},[142,58368,51376],{"class":1991},[142,58370,198],{"class":152},[142,58372,51381],{"class":257},[142,58374,51336],{"class":152},[142,58376,58377,58379,58381,58383,58385,58387,58389,58391,58393],{"class":144,"line":1243},[142,58378,52173],{"class":152},[142,58380,51373],{"class":51329},[142,58382,14949],{"class":1991},[142,58384,198],{"class":152},[142,58386,51420],{"class":257},[142,58388,51400],{"class":1991},[142,58390,198],{"class":152},[142,58392,51427],{"class":257},[142,58394,51336],{"class":152},[142,58396,58397,58399,58401,58403,58405],{"class":144,"line":1249},[142,58398,52173],{"class":152},[142,58400,51436],{"class":51329},[142,58402,51439],{"class":152},[142,58404,51436],{"class":51329},[142,58406,51336],{"class":152},[142,58408,58409,58411,58413],{"class":144,"line":1340},[142,58410,51814],{"class":152},[142,58412,51363],{"class":51329},[142,58414,51336],{"class":152},[142,58416,58417],{"class":144,"line":1346},[142,58418,2428],{"emptyLinePlaceholder":69},[142,58420,58421,58423,58425],{"class":144,"line":1358},[142,58422,1063],{"class":152},[142,58424,51829],{"class":51329},[142,58426,51336],{"class":152},[142,58428,58429,58431,58433,58435,58437],{"class":144,"line":1640},[142,58430,52173],{"class":152},[142,58432,53916],{"class":51329},[142,58434,53922],{"class":152},[142,58436,53916],{"class":51329},[142,58438,51336],{"class":152},[142,58440,58441,58443,58445],{"class":144,"line":1645},[142,58442,52173],{"class":152},[142,58444,51842],{"class":51329},[142,58446,51336],{"class":152},[142,58448,58449,58451,58453,58455],{"class":144,"line":1651},[142,58450,11250],{"class":148},[142,58452,2268],{"class":201},[142,58454,13593],{"class":148},[142,58456,58457],{"class":201}," 10\n",[142,58459,58460,58462,58464,58466,58468,58470,58472,58474],{"class":144,"line":1656},[142,58461,11250],{"class":148},[142,58463,54420],{"class":201},[142,58465,13593],{"class":148},[142,58467,54425],{"class":152},[142,58469,54428],{"class":1991},[142,58471,153],{"class":152},[142,58473,58233],{"class":257},[142,58475,159],{"class":152},[142,58477,58478,58480,58482,58484,58486,58488,58490],{"class":144,"line":1670},[142,58479,58240],{"class":152},[142,58481,57842],{"class":1991},[142,58483,153],{"class":152},[142,58485,57847],{"class":257},[142,58487,12464],{"class":152},[142,58489,54478],{"class":148},[142,58491,54481],{"class":152},[142,58493,58494,58496,58498,58500,58502,58504],{"class":144,"line":1675},[142,58495,58257],{"class":148},[142,58497,2268],{"class":201},[142,58499,13593],{"class":148},[142,58501,58264],{"class":152},[142,58503,57889],{"class":1991},[142,58505,2004],{"class":152},[142,58507,58508,58510,58512],{"class":144,"line":1681},[142,58509,58273],{"class":152},[142,58511,58276],{"class":1991},[142,58513,166],{"class":152},[142,58515,58516],{"class":144,"line":1702},[142,58517,33490],{"class":152},[142,58519,58520,58522,58524],{"class":144,"line":1707},[142,58521,52446],{"class":152},[142,58523,51842],{"class":51329},[142,58525,51336],{"class":152},[142,58527,58528,58530,58532],{"class":144,"line":1721},[142,58529,51814],{"class":152},[142,58531,51829],{"class":51329},[142,58533,51336],{"class":152},[142,58535,58536],{"class":144,"line":1726},[142,58537,2428],{"emptyLinePlaceholder":69},[142,58539,58540,58542,58544],{"class":144,"line":1755},[142,58541,51814],{"class":152},[142,58543,50664],{"class":51329},[142,58545,51336],{"class":152},[14,58547,58548],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[133,58550,58552],{"className":50662,"code":58551,"language":50664,"meta":31,"style":31},"\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",[139,58553,58554,58564,58578,58582,58590,58604,58624,58636,58644,58648,58656,58668,58676,58686,58704,58720,58733,58741,58745,58753,58761,58765],{"__ignoreMap":31},[142,58555,58556,58558,58560,58562],{"class":144,"line":145},[142,58557,51326],{"class":152},[142,58559,51330],{"class":51329},[142,58561,51333],{"class":1991},[142,58563,51336],{"class":152},[142,58565,58566,58568,58570,58572,58574,58576],{"class":144,"line":64},[142,58567,1063],{"class":152},[142,58569,50664],{"class":51329},[142,58571,51345],{"class":1991},[142,58573,198],{"class":152},[142,58575,51350],{"class":257},[142,58577,51336],{"class":152},[142,58579,58580],{"class":144,"line":1208},[142,58581,2428],{"emptyLinePlaceholder":69},[142,58583,58584,58586,58588],{"class":144,"line":1223},[142,58585,1063],{"class":152},[142,58587,51363],{"class":51329},[142,58589,51336],{"class":152},[142,58591,58592,58594,58596,58598,58600,58602],{"class":144,"line":1229},[142,58593,52173],{"class":152},[142,58595,51373],{"class":51329},[142,58597,51376],{"class":1991},[142,58599,198],{"class":152},[142,58601,51381],{"class":257},[142,58603,51336],{"class":152},[142,58605,58606,58608,58610,58612,58614,58616,58618,58620,58622],{"class":144,"line":1243},[142,58607,52173],{"class":152},[142,58609,51373],{"class":51329},[142,58611,14949],{"class":1991},[142,58613,198],{"class":152},[142,58615,51420],{"class":257},[142,58617,51400],{"class":1991},[142,58619,198],{"class":152},[142,58621,51427],{"class":257},[142,58623,51336],{"class":152},[142,58625,58626,58628,58630,58632,58634],{"class":144,"line":1249},[142,58627,52173],{"class":152},[142,58629,51436],{"class":51329},[142,58631,51439],{"class":152},[142,58633,51436],{"class":51329},[142,58635,51336],{"class":152},[142,58637,58638,58640,58642],{"class":144,"line":1340},[142,58639,51814],{"class":152},[142,58641,51363],{"class":51329},[142,58643,51336],{"class":152},[142,58645,58646],{"class":144,"line":1346},[142,58647,2428],{"emptyLinePlaceholder":69},[142,58649,58650,58652,58654],{"class":144,"line":1358},[142,58651,1063],{"class":152},[142,58653,51829],{"class":51329},[142,58655,51336],{"class":152},[142,58657,58658,58660,58662,58664,58666],{"class":144,"line":1640},[142,58659,52173],{"class":152},[142,58661,53916],{"class":51329},[142,58663,53922],{"class":152},[142,58665,53916],{"class":51329},[142,58667,51336],{"class":152},[142,58669,58670,58672,58674],{"class":144,"line":1645},[142,58671,52173],{"class":152},[142,58673,51842],{"class":51329},[142,58675,51336],{"class":152},[142,58677,58678,58680,58682,58684],{"class":144,"line":1651},[142,58679,11250],{"class":148},[142,58681,2268],{"class":201},[142,58683,13593],{"class":148},[142,58685,58457],{"class":201},[142,58687,58688,58690,58692,58694,58696,58698,58700,58702],{"class":144,"line":1656},[142,58689,11250],{"class":148},[142,58691,54420],{"class":201},[142,58693,13593],{"class":148},[142,58695,54425],{"class":152},[142,58697,54428],{"class":1991},[142,58699,153],{"class":152},[142,58701,58233],{"class":257},[142,58703,159],{"class":152},[142,58705,58706,58708,58710,58712,58714,58716,58718],{"class":144,"line":1670},[142,58707,58240],{"class":152},[142,58709,57842],{"class":1991},[142,58711,153],{"class":152},[142,58713,57847],{"class":257},[142,58715,12464],{"class":152},[142,58717,54478],{"class":148},[142,58719,54481],{"class":152},[142,58721,58722,58725,58727,58729,58731],{"class":144,"line":1675},[142,58723,58724],{"class":152},"      num ",[142,58726,198],{"class":148},[142,58728,58264],{"class":152},[142,58730,57889],{"class":1991},[142,58732,2004],{"class":152},[142,58734,58735,58737,58739],{"class":144,"line":1681},[142,58736,58273],{"class":152},[142,58738,58276],{"class":1991},[142,58740,166],{"class":152},[142,58742,58743],{"class":144,"line":1702},[142,58744,33490],{"class":152},[142,58746,58747,58749,58751],{"class":144,"line":1707},[142,58748,52446],{"class":152},[142,58750,51842],{"class":51329},[142,58752,51336],{"class":152},[142,58754,58755,58757,58759],{"class":144,"line":1721},[142,58756,51814],{"class":152},[142,58758,51829],{"class":51329},[142,58760,51336],{"class":152},[142,58762,58763],{"class":144,"line":1726},[142,58764,2428],{"emptyLinePlaceholder":69},[142,58766,58767,58769,58771],{"class":144,"line":1755},[142,58768,51814],{"class":152},[142,58770,50664],{"class":51329},[142,58772,51336],{"class":152},[14,58774,58775],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[113,58777,58779],{"id":58778},"_324-事件监听版本","3.2.4 事件监听版本",[14,58781,58782],{},[29,58783],{"alt":31,"src":58784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58786,58787],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58789,58790],{},"这种方式会覆盖前边的事件监听:",[133,58792,58794],{"className":50662,"code":58793,"language":50664,"meta":31,"style":31},"\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",[139,58795,58796,58806,58820,58824,58832,58846,58866,58878,58886,58890,58898,58910,58918,58936,58950,58961,58965,58977,58987,58991,58999,59007,59011],{"__ignoreMap":31},[142,58797,58798,58800,58802,58804],{"class":144,"line":145},[142,58799,51326],{"class":152},[142,58801,51330],{"class":51329},[142,58803,51333],{"class":1991},[142,58805,51336],{"class":152},[142,58807,58808,58810,58812,58814,58816,58818],{"class":144,"line":64},[142,58809,1063],{"class":152},[142,58811,50664],{"class":51329},[142,58813,51345],{"class":1991},[142,58815,198],{"class":152},[142,58817,51350],{"class":257},[142,58819,51336],{"class":152},[142,58821,58822],{"class":144,"line":1208},[142,58823,2428],{"emptyLinePlaceholder":69},[142,58825,58826,58828,58830],{"class":144,"line":1223},[142,58827,1063],{"class":152},[142,58829,51363],{"class":51329},[142,58831,51336],{"class":152},[142,58833,58834,58836,58838,58840,58842,58844],{"class":144,"line":1229},[142,58835,52173],{"class":152},[142,58837,51373],{"class":51329},[142,58839,51376],{"class":1991},[142,58841,198],{"class":152},[142,58843,51381],{"class":257},[142,58845,51336],{"class":152},[142,58847,58848,58850,58852,58854,58856,58858,58860,58862,58864],{"class":144,"line":1243},[142,58849,52173],{"class":152},[142,58851,51373],{"class":51329},[142,58853,14949],{"class":1991},[142,58855,198],{"class":152},[142,58857,51420],{"class":257},[142,58859,51400],{"class":1991},[142,58861,198],{"class":152},[142,58863,51427],{"class":257},[142,58865,51336],{"class":152},[142,58867,58868,58870,58872,58874,58876],{"class":144,"line":1249},[142,58869,52173],{"class":152},[142,58871,51436],{"class":51329},[142,58873,51439],{"class":152},[142,58875,51436],{"class":51329},[142,58877,51336],{"class":152},[142,58879,58880,58882,58884],{"class":144,"line":1340},[142,58881,51814],{"class":152},[142,58883,51363],{"class":51329},[142,58885,51336],{"class":152},[142,58887,58888],{"class":144,"line":1346},[142,58889,2428],{"emptyLinePlaceholder":69},[142,58891,58892,58894,58896],{"class":144,"line":1358},[142,58893,1063],{"class":152},[142,58895,51829],{"class":51329},[142,58897,51336],{"class":152},[142,58899,58900,58902,58904,58906,58908],{"class":144,"line":1640},[142,58901,52173],{"class":152},[142,58903,53916],{"class":51329},[142,58905,53922],{"class":152},[142,58907,53916],{"class":51329},[142,58909,51336],{"class":152},[142,58911,58912,58914,58916],{"class":144,"line":1645},[142,58913,52173],{"class":152},[142,58915,51842],{"class":51329},[142,58917,51336],{"class":152},[142,58919,58920,58922,58924,58926,58928,58930,58932,58934],{"class":144,"line":1651},[142,58921,11250],{"class":148},[142,58923,54420],{"class":201},[142,58925,13593],{"class":148},[142,58927,54425],{"class":152},[142,58929,54428],{"class":1991},[142,58931,153],{"class":152},[142,58933,58233],{"class":257},[142,58935,159],{"class":152},[142,58937,58938,58940,58943,58945,58948],{"class":144,"line":1656},[142,58939,58240],{"class":152},[142,58941,58942],{"class":1991},"onclick",[142,58944,13593],{"class":148},[142,58946,58947],{"class":148}," function",[142,58949,54481],{"class":152},[142,58951,58952,58955,58957,58959],{"class":144,"line":1670},[142,58953,58954],{"class":1991},"      alert",[142,58956,153],{"class":152},[142,58958,625],{"class":201},[142,58960,159],{"class":152},[142,58962,58963],{"class":144,"line":1675},[142,58964,2215],{"class":152},[142,58966,58967,58969,58971,58973,58975],{"class":144,"line":1681},[142,58968,58240],{"class":152},[142,58970,58942],{"class":1991},[142,58972,13593],{"class":148},[142,58974,58947],{"class":148},[142,58976,54481],{"class":152},[142,58978,58979,58981,58983,58985],{"class":144,"line":1702},[142,58980,58954],{"class":1991},[142,58982,153],{"class":152},[142,58984,903],{"class":201},[142,58986,159],{"class":152},[142,58988,58989],{"class":144,"line":1707},[142,58990,2215],{"class":152},[142,58992,58993,58995,58997],{"class":144,"line":1721},[142,58994,52446],{"class":152},[142,58996,51842],{"class":51329},[142,58998,51336],{"class":152},[142,59000,59001,59003,59005],{"class":144,"line":1726},[142,59002,51814],{"class":152},[142,59004,51829],{"class":51329},[142,59006,51336],{"class":152},[142,59008,59009],{"class":144,"line":1755},[142,59010,2428],{"emptyLinePlaceholder":69},[142,59012,59013,59015,59017],{"class":144,"line":1760},[142,59014,51814],{"class":152},[142,59016,50664],{"class":51329},[142,59018,51336],{"class":152},[14,59020,59021],{},"只要点击就输出结果为22,前边11被覆盖了",[133,59023,59025],{"className":50662,"code":59024,"language":50664,"meta":31,"style":31},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[139,59026,59027,59032,59037,59041,59046,59051],{"__ignoreMap":31},[142,59028,59029],{"class":144,"line":145},[142,59030,59031],{"class":152},"  btn.addEventListener('click', function () {\n",[142,59033,59034],{"class":144,"line":64},[142,59035,59036],{"class":152},"      alert(11)\n",[142,59038,59039],{"class":144,"line":1208},[142,59040,33490],{"class":152},[142,59042,59043],{"class":144,"line":1223},[142,59044,59045],{"class":152},"    btn.addEventListener('click', function () {\n",[142,59047,59048],{"class":144,"line":1229},[142,59049,59050],{"class":152},"      alert(22)\n",[142,59052,59053],{"class":144,"line":1243},[142,59054,33490],{"class":152},[14,59056,59057],{},"点击第一次输出11,第二次点击为22",[113,59059,59061],{"id":59060},"_325-事件类型","3.2.5 事件类型",[14,59063,59064],{},[29,59065],{"alt":31,"src":59066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22027,59068,59070],{"id":59069},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59072,59073],{},"补充知识:",[14,59075,59076],{},"轮播图自动播放模块,可以使用",[14,59078,59079],{},"let timerId = setInterval(function () {",[14,59081,59082],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59084,59085],{},"用js方法模拟进行点击事件,click必须加()",[14,59087,59088],{},"next.click()",[14,59090,59091],{},"}, 1000)",[14,59093,59094],{},[29,59095],{"alt":31,"src":59096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[133,59098,59100],{"className":53096,"code":59099,"language":53098,"meta":31,"style":31},"\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",[139,59101,59102,59106,59116,59130,59134,59142,59157,59177,59197,59210,59218,59223,59228,59232,59236,59241,59246,59251,59256,59260,59264,59269,59274,59279,59283,59287,59292,59296,59301,59306,59310,59314,59319,59324,59329,59334,59339,59343,59347,59352,59357,59362,59367,59372,59376,59380,59385,59390,59395,59400,59405,59410,59415,59420,59425,59430,59434,59438,59443,59448,59452,59456,59461,59466,59470,59475,59480,59484,59488,59493,59497,59502,59507,59511,59516,59520,59524,59529,59534,59539,59544,59549,59554,59559,59563,59567,59571,59576,59581,59586,59591,59595,59603,59611,59615,59623,59638,59652,59673,59681,59695,59708,59723,59742,59754,59766,59778,59790,59802,59814,59826,59834,59849,59873,59897,59905,59913,59921,59929,59934,59939,59944,59949,59954,59959,59964,59969,59974,59979,59983,59988,59993,59998,60003,60008,60013,60018,60023,60028,60032,60037,60042,60047,60052,60057,60062,60067,60072,60077,60082,60087,60092,60096,60100,60105,60110,60115,60119,60124,60129,60134,60139,60144,60148,60153,60157,60161,60165,60169,60173,60177,60182,60187,60192,60197,60202,60207,60212,60217,60222,60226,60230,60235,60240,60245,60250,60255,60259,60264,60269,60274,60279,60284,60289,60293,60297,60302,60306,60311,60315,60320,60325,60330,60335,60340,60345,60349,60357,60365,60369],{"__ignoreMap":31},[142,59103,59104],{"class":144,"line":145},[142,59105,2428],{"emptyLinePlaceholder":69},[142,59107,59108,59110,59112,59114],{"class":144,"line":64},[142,59109,51326],{"class":152},[142,59111,51330],{"class":148},[142,59113,51333],{"class":201},[142,59115,51336],{"class":152},[142,59117,59118,59120,59122,59124,59126,59128],{"class":144,"line":1208},[142,59119,1063],{"class":152},[142,59121,50664],{"class":51329},[142,59123,51345],{"class":1991},[142,59125,198],{"class":152},[142,59127,51350],{"class":257},[142,59129,51336],{"class":152},[142,59131,59132],{"class":144,"line":1223},[142,59133,2428],{"emptyLinePlaceholder":69},[142,59135,59136,59138,59140],{"class":144,"line":1229},[142,59137,1063],{"class":152},[142,59139,51363],{"class":51329},[142,59141,51336],{"class":152},[142,59143,59144,59146,59148,59150,59152,59154],{"class":144,"line":1243},[142,59145,52173],{"class":152},[142,59147,51373],{"class":51329},[142,59149,51376],{"class":1991},[142,59151,198],{"class":152},[142,59153,51381],{"class":257},[142,59155,59156],{"class":152}," \u002F>\n",[142,59158,59159,59161,59163,59165,59167,59169,59171,59173,59175],{"class":144,"line":1249},[142,59160,52173],{"class":152},[142,59162,51373],{"class":51329},[142,59164,51392],{"class":1991},[142,59166,198],{"class":152},[142,59168,51397],{"class":257},[142,59170,51400],{"class":1991},[142,59172,198],{"class":152},[142,59174,51405],{"class":257},[142,59176,59156],{"class":152},[142,59178,59179,59181,59183,59185,59187,59189,59191,59193,59195],{"class":144,"line":1340},[142,59180,52173],{"class":152},[142,59182,51373],{"class":51329},[142,59184,14949],{"class":1991},[142,59186,198],{"class":152},[142,59188,51420],{"class":257},[142,59190,51400],{"class":1991},[142,59192,198],{"class":152},[142,59194,51427],{"class":257},[142,59196,59156],{"class":152},[142,59198,59199,59201,59203,59206,59208],{"class":144,"line":1346},[142,59200,52173],{"class":152},[142,59202,51436],{"class":51329},[142,59204,59205],{"class":152},">轮播图点击切换\u003C\u002F",[142,59207,51436],{"class":51329},[142,59209,51336],{"class":152},[142,59211,59212,59214,59216],{"class":144,"line":1358},[142,59213,52173],{"class":152},[142,59215,5155],{"class":51329},[142,59217,51336],{"class":152},[142,59219,59220],{"class":144,"line":1640},[142,59221,59222],{"class":152},"    * {\n",[142,59224,59225],{"class":144,"line":1645},[142,59226,59227],{"class":152},"      box-sizing: border-box;\n",[142,59229,59230],{"class":144,"line":1651},[142,59231,2215],{"class":152},[142,59233,59234],{"class":144,"line":1656},[142,59235,2428],{"emptyLinePlaceholder":69},[142,59237,59238],{"class":144,"line":1670},[142,59239,59240],{"class":152},"    .slider {\n",[142,59242,59243],{"class":144,"line":1675},[142,59244,59245],{"class":152},"      width: 560px;\n",[142,59247,59248],{"class":144,"line":1681},[142,59249,59250],{"class":152},"      height: 400px;\n",[142,59252,59253],{"class":144,"line":1702},[142,59254,59255],{"class":152},"      overflow: hidden;\n",[142,59257,59258],{"class":144,"line":1707},[142,59259,2215],{"class":152},[142,59261,59262],{"class":144,"line":1721},[142,59263,2428],{"emptyLinePlaceholder":69},[142,59265,59266],{"class":144,"line":1726},[142,59267,59268],{"class":152},"    .slider-wrapper {\n",[142,59270,59271],{"class":144,"line":1755},[142,59272,59273],{"class":152},"      width: 100%;\n",[142,59275,59276],{"class":144,"line":1760},[142,59277,59278],{"class":152},"      height: 320px;\n",[142,59280,59281],{"class":144,"line":1777},[142,59282,2215],{"class":152},[142,59284,59285],{"class":144,"line":1782},[142,59286,2428],{"emptyLinePlaceholder":69},[142,59288,59289],{"class":144,"line":1787},[142,59290,59291],{"class":152},"    .slider-wrapper img {\n",[142,59293,59294],{"class":144,"line":1792},[142,59295,59273],{"class":152},[142,59297,59298],{"class":144,"line":1806},[142,59299,59300],{"class":152},"      height: 100%;\n",[142,59302,59303],{"class":144,"line":1811},[142,59304,59305],{"class":152},"      display: block;\n",[142,59307,59308],{"class":144,"line":2605},[142,59309,2215],{"class":152},[142,59311,59312],{"class":144,"line":2619},[142,59313,2428],{"emptyLinePlaceholder":69},[142,59315,59316],{"class":144,"line":2627},[142,59317,59318],{"class":152},"    .slider-footer {\n",[142,59320,59321],{"class":144,"line":2632},[142,59322,59323],{"class":152},"      height: 80px;\n",[142,59325,59326],{"class":144,"line":2638},[142,59327,59328],{"class":152},"      background-color: rgb(100, 67, 68);\n",[142,59330,59331],{"class":144,"line":2644},[142,59332,59333],{"class":152},"      padding: 12px 12px 0 12px;\n",[142,59335,59336],{"class":144,"line":2649},[142,59337,59338],{"class":152},"      position: relative;\n",[142,59340,59341],{"class":144,"line":7977},[142,59342,2215],{"class":152},[142,59344,59345],{"class":144,"line":8001},[142,59346,2428],{"emptyLinePlaceholder":69},[142,59348,59349],{"class":144,"line":8006},[142,59350,59351],{"class":152},"    .slider-footer .toggle {\n",[142,59353,59354],{"class":144,"line":8012},[142,59355,59356],{"class":152},"      position: absolute;\n",[142,59358,59359],{"class":144,"line":8039},[142,59360,59361],{"class":152},"      right: 0;\n",[142,59363,59364],{"class":144,"line":8044},[142,59365,59366],{"class":152},"      top: 12px;\n",[142,59368,59369],{"class":144,"line":8050},[142,59370,59371],{"class":152},"      display: flex;\n",[142,59373,59374],{"class":144,"line":8062},[142,59375,2215],{"class":152},[142,59377,59378],{"class":144,"line":8074},[142,59379,2428],{"emptyLinePlaceholder":69},[142,59381,59382],{"class":144,"line":8086},[142,59383,59384],{"class":152},"    .slider-footer .toggle button {\n",[142,59386,59387],{"class":144,"line":9745},[142,59388,59389],{"class":152},"      margin-right: 12px;\n",[142,59391,59392],{"class":144,"line":9770},[142,59393,59394],{"class":152},"      width: 28px;\n",[142,59396,59397],{"class":144,"line":9793},[142,59398,59399],{"class":152},"      height: 28px;\n",[142,59401,59402],{"class":144,"line":9817},[142,59403,59404],{"class":152},"      appearance: none;\n",[142,59406,59407],{"class":144,"line":9822},[142,59408,59409],{"class":152},"      border: none;\n",[142,59411,59412],{"class":144,"line":9827},[142,59413,59414],{"class":152},"      background: rgba(255, 255, 255, 0.1);\n",[142,59416,59417],{"class":144,"line":9832},[142,59418,59419],{"class":152},"      color: #fff;\n",[142,59421,59422],{"class":144,"line":9841},[142,59423,59424],{"class":152},"      border-radius: 4px;\n",[142,59426,59427],{"class":144,"line":9846},[142,59428,59429],{"class":152},"      cursor: pointer;\n",[142,59431,59432],{"class":144,"line":9852},[142,59433,2215],{"class":152},[142,59435,59436],{"class":144,"line":9873},[142,59437,2428],{"emptyLinePlaceholder":69},[142,59439,59440],{"class":144,"line":9879},[142,59441,59442],{"class":152},"    .slider-footer .toggle button:hover {\n",[142,59444,59445],{"class":144,"line":9893},[142,59446,59447],{"class":152},"      background: rgba(255, 255, 255, 0.2);\n",[142,59449,59450],{"class":144,"line":9899},[142,59451,2215],{"class":152},[142,59453,59454],{"class":144,"line":9926},[142,59455,2428],{"emptyLinePlaceholder":69},[142,59457,59458],{"class":144,"line":9935},[142,59459,59460],{"class":152},"    .slider-footer p {\n",[142,59462,59463],{"class":144,"line":9941},[142,59464,59465],{"class":152},"      margin: 0;\n",[142,59467,59468],{"class":144,"line":9949},[142,59469,59419],{"class":152},[142,59471,59472],{"class":144,"line":9954},[142,59473,59474],{"class":152},"      font-size: 18px;\n",[142,59476,59477],{"class":144,"line":16633},[142,59478,59479],{"class":152},"      margin-bottom: 10px;\n",[142,59481,59482],{"class":144,"line":16639},[142,59483,2215],{"class":152},[142,59485,59486],{"class":144,"line":16662},[142,59487,2428],{"emptyLinePlaceholder":69},[142,59489,59490],{"class":144,"line":16668},[142,59491,59492],{"class":152},"    .slider-indicator {\n",[142,59494,59495],{"class":144,"line":16691},[142,59496,59465],{"class":152},[142,59498,59499],{"class":144,"line":16705},[142,59500,59501],{"class":152},"      padding: 0;\n",[142,59503,59504],{"class":144,"line":16725},[142,59505,59506],{"class":152},"      list-style: none;\n",[142,59508,59509],{"class":144,"line":16731},[142,59510,59371],{"class":152},[142,59512,59513],{"class":144,"line":16742},[142,59514,59515],{"class":152},"      align-items: center;\n",[142,59517,59518],{"class":144,"line":16765},[142,59519,2215],{"class":152},[142,59521,59522],{"class":144,"line":16787},[142,59523,2428],{"emptyLinePlaceholder":69},[142,59525,59526],{"class":144,"line":16792},[142,59527,59528],{"class":152},"    .slider-indicator li {\n",[142,59530,59531],{"class":144,"line":16798},[142,59532,59533],{"class":152},"      width: 8px;\n",[142,59535,59536],{"class":144,"line":16812},[142,59537,59538],{"class":152},"      height: 8px;\n",[142,59540,59541],{"class":144,"line":16825},[142,59542,59543],{"class":152},"      margin: 4px;\n",[142,59545,59546],{"class":144,"line":16830},[142,59547,59548],{"class":152},"      border-radius: 50%;\n",[142,59550,59551],{"class":144,"line":16844},[142,59552,59553],{"class":152},"      background: #fff;\n",[142,59555,59556],{"class":144,"line":16849},[142,59557,59558],{"class":152},"      opacity: 0.4;\n",[142,59560,59561],{"class":144,"line":16855},[142,59562,59429],{"class":152},[142,59564,59565],{"class":144,"line":16860},[142,59566,2215],{"class":152},[142,59568,59569],{"class":144,"line":16874},[142,59570,2428],{"emptyLinePlaceholder":69},[142,59572,59573],{"class":144,"line":16879},[142,59574,59575],{"class":152},"    .slider-indicator li.active {\n",[142,59577,59578],{"class":144,"line":16884},[142,59579,59580],{"class":152},"      width: 12px;\n",[142,59582,59583],{"class":144,"line":16898},[142,59584,59585],{"class":152},"      height: 12px;\n",[142,59587,59588],{"class":144,"line":16910},[142,59589,59590],{"class":152},"      opacity: 1;\n",[142,59592,59593],{"class":144,"line":16915},[142,59594,2215],{"class":152},[142,59596,59597,59599,59601],{"class":144,"line":16928},[142,59598,52446],{"class":152},[142,59600,5155],{"class":51329},[142,59602,51336],{"class":152},[142,59604,59605,59607,59609],{"class":144,"line":16933},[142,59606,51814],{"class":152},[142,59608,51363],{"class":51329},[142,59610,51336],{"class":152},[142,59612,59613],{"class":144,"line":16938},[142,59614,2428],{"emptyLinePlaceholder":69},[142,59616,59617,59619,59621],{"class":144,"line":16943},[142,59618,1063],{"class":152},[142,59620,51829],{"class":51329},[142,59622,51336],{"class":152},[142,59624,59625,59627,59629,59631,59633,59636],{"class":144,"line":16956},[142,59626,52173],{"class":152},[142,59628,51640],{"class":51329},[142,59630,53515],{"class":1991},[142,59632,198],{"class":152},[142,59634,59635],{"class":257},"\"slider\"",[142,59637,51336],{"class":152},[142,59639,59640,59642,59644,59646,59648,59650],{"class":144,"line":16961},[142,59641,51370],{"class":152},[142,59643,51640],{"class":51329},[142,59645,53515],{"class":1991},[142,59647,198],{"class":152},[142,59649,55256],{"class":257},[142,59651,51336],{"class":152},[142,59653,59654,59656,59658,59660,59662,59665,59667,59669,59671],{"class":144,"line":32662},[142,59655,55263],{"class":152},[142,59657,29],{"class":51329},[142,59659,55268],{"class":1991},[142,59661,198],{"class":152},[142,59663,59664],{"class":257},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[142,59666,55276],{"class":1991},[142,59668,198],{"class":152},[142,59670,7681],{"class":257},[142,59672,59156],{"class":152},[142,59674,59675,59677,59679],{"class":144,"line":32668},[142,59676,51805],{"class":152},[142,59678,51640],{"class":51329},[142,59680,51336],{"class":152},[142,59682,59683,59685,59687,59689,59691,59693],{"class":144,"line":32674},[142,59684,51370],{"class":152},[142,59686,51640],{"class":51329},[142,59688,53515],{"class":1991},[142,59690,198],{"class":152},[142,59692,55303],{"class":257},[142,59694,51336],{"class":152},[142,59696,59697,59699,59701,59704,59706],{"class":144,"line":32680},[142,59698,55263],{"class":152},[142,59700,14],{"class":51329},[142,59702,59703],{"class":152},">对人类来说会不会太超前了？\u003C\u002F",[142,59705,14],{"class":51329},[142,59707,51336],{"class":152},[142,59709,59710,59712,59714,59716,59718,59721],{"class":144,"line":32686},[142,59711,55263],{"class":152},[142,59713,1160],{"class":51329},[142,59715,53515],{"class":1991},[142,59717,198],{"class":152},[142,59719,59720],{"class":257},"\"slider-indicator\"",[142,59722,51336],{"class":152},[142,59724,59725,59727,59729,59731,59733,59736,59738,59740],{"class":144,"line":32697},[142,59726,55331],{"class":152},[142,59728,99],{"class":51329},[142,59730,53515],{"class":1991},[142,59732,198],{"class":152},[142,59734,59735],{"class":257},"\"active\"",[142,59737,55343],{"class":152},[142,59739,99],{"class":51329},[142,59741,51336],{"class":152},[142,59743,59744,59746,59748,59750,59752],{"class":144,"line":32703},[142,59745,55331],{"class":152},[142,59747,99],{"class":51329},[142,59749,55343],{"class":152},[142,59751,99],{"class":51329},[142,59753,51336],{"class":152},[142,59755,59756,59758,59760,59762,59764],{"class":144,"line":32723},[142,59757,55331],{"class":152},[142,59759,99],{"class":51329},[142,59761,55343],{"class":152},[142,59763,99],{"class":51329},[142,59765,51336],{"class":152},[142,59767,59768,59770,59772,59774,59776],{"class":144,"line":32729},[142,59769,55331],{"class":152},[142,59771,99],{"class":51329},[142,59773,55343],{"class":152},[142,59775,99],{"class":51329},[142,59777,51336],{"class":152},[142,59779,59780,59782,59784,59786,59788],{"class":144,"line":32740},[142,59781,55331],{"class":152},[142,59783,99],{"class":51329},[142,59785,55343],{"class":152},[142,59787,99],{"class":51329},[142,59789,51336],{"class":152},[142,59791,59792,59794,59796,59798,59800],{"class":144,"line":32746},[142,59793,55331],{"class":152},[142,59795,99],{"class":51329},[142,59797,55343],{"class":152},[142,59799,99],{"class":51329},[142,59801,51336],{"class":152},[142,59803,59804,59806,59808,59810,59812],{"class":144,"line":32752},[142,59805,55331],{"class":152},[142,59807,99],{"class":51329},[142,59809,55343],{"class":152},[142,59811,99],{"class":51329},[142,59813,51336],{"class":152},[142,59815,59816,59818,59820,59822,59824],{"class":144,"line":32758},[142,59817,55331],{"class":152},[142,59819,99],{"class":51329},[142,59821,55343],{"class":152},[142,59823,99],{"class":51329},[142,59825,51336],{"class":152},[142,59827,59828,59830,59832],{"class":144,"line":32764},[142,59829,55436],{"class":152},[142,59831,1160],{"class":51329},[142,59833,51336],{"class":152},[142,59835,59836,59838,59840,59842,59844,59847],{"class":144,"line":32770},[142,59837,55263],{"class":152},[142,59839,51640],{"class":51329},[142,59841,53515],{"class":1991},[142,59843,198],{"class":152},[142,59845,59846],{"class":257},"\"toggle\"",[142,59848,51336],{"class":152},[142,59850,59851,59853,59855,59857,59859,59862,59864,59867,59869,59871],{"class":144,"line":32776},[142,59852,55331],{"class":152},[142,59854,53916],{"class":51329},[142,59856,53515],{"class":1991},[142,59858,198],{"class":152},[142,59860,59861],{"class":257},"\"prev\"",[142,59863,1113],{"class":152},[142,59865,59866],{"class":201},"&lt;",[142,59868,51814],{"class":152},[142,59870,53916],{"class":51329},[142,59872,51336],{"class":152},[142,59874,59875,59877,59879,59881,59883,59886,59888,59891,59893,59895],{"class":144,"line":32782},[142,59876,55331],{"class":152},[142,59878,53916],{"class":51329},[142,59880,53515],{"class":1991},[142,59882,198],{"class":152},[142,59884,59885],{"class":257},"\"next\"",[142,59887,1113],{"class":152},[142,59889,59890],{"class":201},"&gt;",[142,59892,51814],{"class":152},[142,59894,53916],{"class":51329},[142,59896,51336],{"class":152},[142,59898,59899,59901,59903],{"class":144,"line":32802},[142,59900,55436],{"class":152},[142,59902,51640],{"class":51329},[142,59904,51336],{"class":152},[142,59906,59907,59909,59911],{"class":144,"line":32808},[142,59908,51805],{"class":152},[142,59910,51640],{"class":51329},[142,59912,51336],{"class":152},[142,59914,59915,59917,59919],{"class":144,"line":32824},[142,59916,52446],{"class":152},[142,59918,51640],{"class":51329},[142,59920,51336],{"class":152},[142,59922,59923,59925,59927],{"class":144,"line":32830},[142,59924,52173],{"class":152},[142,59926,51842],{"class":51329},[142,59928,51336],{"class":152},[142,59930,59931],{"class":144,"line":32844},[142,59932,59933],{"class":152},"    \u002F\u002F 1. 初始数据\n",[142,59935,59936],{"class":144,"line":32850},[142,59937,59938],{"class":152},"    const data = [\n",[142,59940,59941],{"class":144,"line":32865},[142,59942,59943],{"class":152},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[142,59945,59946],{"class":144,"line":32871},[142,59947,59948],{"class":152},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[142,59950,59951],{"class":144,"line":32880},[142,59952,59953],{"class":152},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[142,59955,59956],{"class":144,"line":32886},[142,59957,59958],{"class":152},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[142,59960,59961],{"class":144,"line":32895},[142,59962,59963],{"class":152},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[142,59965,59966],{"class":144,"line":32901},[142,59967,59968],{"class":152},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[142,59970,59971],{"class":144,"line":32907},[142,59972,59973],{"class":152},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[142,59975,59976],{"class":144,"line":32916},[142,59977,59978],{"class":152},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[142,59980,59981],{"class":144,"line":32922},[142,59982,53138],{"class":152},[142,59984,59985],{"class":144,"line":32933},[142,59986,59987],{"class":152},"    \u002F\u002F 获取元素\n",[142,59989,59990],{"class":144,"line":32939},[142,59991,59992],{"class":152},"    const img = document.querySelector('.slider-wrapper img')\n",[142,59994,59995],{"class":144,"line":32958},[142,59996,59997],{"class":152},"    const p = document.querySelector('.slider-footer p')\n",[142,59999,60000],{"class":144,"line":32964},[142,60001,60002],{"class":152},"    const footer = document.querySelector('.slider-footer')\n",[142,60004,60005],{"class":144,"line":32975},[142,60006,60007],{"class":152},"    \u002F\u002F 1. 右按钮业务\n",[142,60009,60010],{"class":144,"line":32981},[142,60011,60012],{"class":152},"    \u002F\u002F 1.1 获取右侧按钮 \n",[142,60014,60015],{"class":144,"line":33001},[142,60016,60017],{"class":152},"    const next = document.querySelector('.next')\n",[142,60019,60020],{"class":144,"line":33017},[142,60021,60022],{"class":152},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[142,60024,60025],{"class":144,"line":33023},[142,60026,60027],{"class":152},"    \u002F\u002F 1.2 注册点击事件\n",[142,60029,60030],{"class":144,"line":33037},[142,60031,2428],{"emptyLinePlaceholder":69},[142,60033,60034],{"class":144,"line":33043},[142,60035,60036],{"class":152},"    next.addEventListener('click', function () {\n",[142,60038,60039],{"class":144,"line":33049},[142,60040,60041],{"class":152},"      \u002F\u002F console.log(11)\n",[142,60043,60044],{"class":144,"line":33060},[142,60045,60046],{"class":152},"      i++\n",[142,60048,60049],{"class":144,"line":33066},[142,60050,60051],{"class":152},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[142,60053,60054],{"class":144,"line":33072},[142,60055,60056],{"class":152},"      \u002F\u002F if (i >= 8) {\n",[142,60058,60059],{"class":144,"line":33082},[142,60060,60061],{"class":152},"      \u002F\u002F   i = 0\n",[142,60063,60064],{"class":144,"line":33088},[142,60065,60066],{"class":152},"      \u002F\u002F }\n",[142,60068,60069],{"class":144,"line":33099},[142,60070,60071],{"class":152},"      i = i >= data.length ? 0 : i\n",[142,60073,60074],{"class":144,"line":33105},[142,60075,60076],{"class":152},"      \u002F\u002F 1.3 得到对应的对象\n",[142,60078,60079],{"class":144,"line":33115},[142,60080,60081],{"class":152},"      \u002F\u002F console.log(data[i])\n",[142,60083,60084],{"class":144,"line":33120},[142,60085,60086],{"class":152},"      \u002F\u002F 调用函数\n",[142,60088,60089],{"class":144,"line":33126},[142,60090,60091],{"class":152},"      toggle()\n",[142,60093,60094],{"class":144,"line":33175},[142,60095,33490],{"class":152},[142,60097,60098],{"class":144,"line":33222},[142,60099,2428],{"emptyLinePlaceholder":69},[142,60101,60102],{"class":144,"line":33227},[142,60103,60104],{"class":152},"    \u002F\u002F 2. 左侧按钮业务\n",[142,60106,60107],{"class":144,"line":33233},[142,60108,60109],{"class":152},"    \u002F\u002F 2.1 获取左侧按钮 \n",[142,60111,60112],{"class":144,"line":33252},[142,60113,60114],{"class":152},"    const prev = document.querySelector('.prev')\n",[142,60116,60117],{"class":144,"line":33258},[142,60118,60027],{"class":152},[142,60120,60121],{"class":144,"line":33278},[142,60122,60123],{"class":152},"    prev.addEventListener('click', function () {\n",[142,60125,60126],{"class":144,"line":33284},[142,60127,60128],{"class":152},"      i--\n",[142,60130,60131],{"class":144,"line":33290},[142,60132,60133],{"class":152},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[142,60135,60136],{"class":144,"line":33300},[142,60137,60138],{"class":152},"      \u002F\u002F if (i \u003C 0) {\n",[142,60140,60141],{"class":144,"line":33305},[142,60142,60143],{"class":152},"      \u002F\u002F   i = 7\n",[142,60145,60146],{"class":144,"line":33311},[142,60147,60066],{"class":152},[142,60149,60150],{"class":144,"line":33327},[142,60151,60152],{"class":152},"      i = i \u003C 0 ? data.length - 1 : i\n",[142,60154,60155],{"class":144,"line":33372},[142,60156,60076],{"class":152},[142,60158,60159],{"class":144,"line":33378},[142,60160,60081],{"class":152},[142,60162,60163],{"class":144,"line":33384},[142,60164,60086],{"class":152},[142,60166,60167],{"class":144,"line":33390},[142,60168,60091],{"class":152},[142,60170,60171],{"class":144,"line":33401},[142,60172,33490],{"class":152},[142,60174,60175],{"class":144,"line":33407},[142,60176,2428],{"emptyLinePlaceholder":69},[142,60178,60179],{"class":144,"line":33413},[142,60180,60181],{"class":152},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[142,60183,60184],{"class":144,"line":33419},[142,60185,60186],{"class":152},"    function toggle() {\n",[142,60188,60189],{"class":144,"line":33437},[142,60190,60191],{"class":152},"      \u002F\u002F 1.4 渲染对应的数据\n",[142,60193,60194],{"class":144,"line":33451},[142,60195,60196],{"class":152},"      img.src = data[i].url\n",[142,60198,60199],{"class":144,"line":33460},[142,60200,60201],{"class":152},"      p.innerHTML = data[i].title\n",[142,60203,60204],{"class":144,"line":33469},[142,60205,60206],{"class":152},"      footer.style.backgroundColor = data[i].color\n",[142,60208,60209],{"class":144,"line":33478},[142,60210,60211],{"class":152},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[142,60213,60214],{"class":144,"line":33487},[142,60215,60216],{"class":152},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[142,60218,60219],{"class":144,"line":33493},[142,60220,60221],{"class":152},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[142,60223,60224],{"class":144,"line":33499},[142,60225,2215],{"class":152},[142,60227,60228],{"class":144,"line":33507},[142,60229,2428],{"emptyLinePlaceholder":69},[142,60231,60232],{"class":144,"line":33512},[142,60233,60234],{"class":152},"    \u002F\u002F 3. 自动播放模块\n",[142,60236,60237],{"class":144,"line":33518},[142,60238,60239],{"class":152},"    let timerId = setInterval(function () {\n",[142,60241,60242],{"class":144,"line":33529},[142,60243,60244],{"class":152},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[142,60246,60247],{"class":144,"line":33535},[142,60248,60249],{"class":152},"      next.click()\n",[142,60251,60252],{"class":144,"line":33555},[142,60253,60254],{"class":152},"    }, 1000)\n",[142,60256,60257],{"class":144,"line":33561},[142,60258,2428],{"emptyLinePlaceholder":69},[142,60260,60261],{"class":144,"line":33567},[142,60262,60263],{"class":152},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[142,60265,60266],{"class":144,"line":33573},[142,60267,60268],{"class":152},"    const slider = document.querySelector('.slider')\n",[142,60270,60271],{"class":144,"line":33590},[142,60272,60273],{"class":152},"    \u002F\u002F 注册事件\n",[142,60275,60276],{"class":144,"line":33596},[142,60277,60278],{"class":152},"    slider.addEventListener('mouseenter', function () {\n",[142,60280,60281],{"class":144,"line":33602},[142,60282,60283],{"class":152},"      \u002F\u002F 停止定时器\n",[142,60285,60286],{"class":144,"line":33608},[142,60287,60288],{"class":152},"      clearInterval(timerId)\n",[142,60290,60291],{"class":144,"line":33614},[142,60292,33490],{"class":152},[142,60294,60295],{"class":144,"line":33620},[142,60296,2428],{"emptyLinePlaceholder":69},[142,60298,60299],{"class":144,"line":33647},[142,60300,60301],{"class":152},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[142,60303,60304],{"class":144,"line":33671},[142,60305,60273],{"class":152},[142,60307,60308],{"class":144,"line":33677},[142,60309,60310],{"class":152},"    slider.addEventListener('mouseleave', function () {\n",[142,60312,60313],{"class":144,"line":33683},[142,60314,60283],{"class":152},[142,60316,60317],{"class":144,"line":33689},[142,60318,60319],{"class":152},"      if (timerId) clearInterval(timerId)\n",[142,60321,60322],{"class":144,"line":33700},[142,60323,60324],{"class":152},"      \u002F\u002F 开启定时器\n",[142,60326,60327],{"class":144,"line":33711},[142,60328,60329],{"class":152},"      timerId = setInterval(function () {\n",[142,60331,60332],{"class":144,"line":33717},[142,60333,60334],{"class":152},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[142,60336,60337],{"class":144,"line":33734},[142,60338,60339],{"class":152},"        next.click()\n",[142,60341,60342],{"class":144,"line":33757},[142,60343,60344],{"class":152},"      }, 1000)\n",[142,60346,60347],{"class":144,"line":33780},[142,60348,33490],{"class":152},[142,60350,60351,60353,60355],{"class":144,"line":33786},[142,60352,52446],{"class":152},[142,60354,51842],{"class":51329},[142,60356,51336],{"class":152},[142,60358,60359,60361,60363],{"class":144,"line":33791},[142,60360,51814],{"class":152},[142,60362,51829],{"class":51329},[142,60364,51336],{"class":152},[142,60366,60367],{"class":144,"line":33800},[142,60368,2428],{"emptyLinePlaceholder":69},[142,60370,60371,60373,60375],{"class":144,"line":33810},[142,60372,51814],{"class":152},[142,60374,50664],{"class":51329},[142,60376,51336],{"class":152},[22027,60378,60380],{"id":60379},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60382,60383],{},"小米搜索框案例：",[133,60385,60387],{"className":50662,"code":60386,"language":50664,"meta":31,"style":31},"\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",[139,60388,60389,60399,60413,60417,60425,60439,60459,60479,60491,60499,60505,60515,60525,60537,60541,60545,60552,60556,60567,60571,60575,60582,60593,60606,60620,60624,60628,60637,60649,60661,60675,60688,60701,60719,60730,60734,60738,60747,60764,60768,60772,60779,60789,60799,60810,60823,60835,60851,60862,60874,60878,60882,60890,60901,60918,60930,60942,60953,60957,60961,60972,60983,60987,60995,60999,61007,61011,61019,61034,61057,61072,61103,61130,61157,61184,61211,61238,61265,61274,61282,61290,61295,61315,61335,61340,61345,61363,61368,61378,61383,61397,61402,61407,61424,61433,61445,61449,61457,61465,61469],{"__ignoreMap":31},[142,60390,60391,60393,60395,60397],{"class":144,"line":145},[142,60392,51326],{"class":152},[142,60394,51330],{"class":51329},[142,60396,51333],{"class":1991},[142,60398,51336],{"class":152},[142,60400,60401,60403,60405,60407,60409,60411],{"class":144,"line":64},[142,60402,1063],{"class":152},[142,60404,50664],{"class":51329},[142,60406,51345],{"class":1991},[142,60408,198],{"class":152},[142,60410,51350],{"class":257},[142,60412,51336],{"class":152},[142,60414,60415],{"class":144,"line":1208},[142,60416,2428],{"emptyLinePlaceholder":69},[142,60418,60419,60421,60423],{"class":144,"line":1223},[142,60420,1063],{"class":152},[142,60422,51363],{"class":51329},[142,60424,51336],{"class":152},[142,60426,60427,60429,60431,60433,60435,60437],{"class":144,"line":1229},[142,60428,51370],{"class":152},[142,60430,51373],{"class":51329},[142,60432,51376],{"class":1991},[142,60434,198],{"class":152},[142,60436,51381],{"class":257},[142,60438,51336],{"class":152},[142,60440,60441,60443,60445,60447,60449,60451,60453,60455,60457],{"class":144,"line":1243},[142,60442,51370],{"class":152},[142,60444,51373],{"class":51329},[142,60446,51392],{"class":1991},[142,60448,198],{"class":152},[142,60450,51397],{"class":257},[142,60452,51400],{"class":1991},[142,60454,198],{"class":152},[142,60456,51405],{"class":257},[142,60458,51336],{"class":152},[142,60460,60461,60463,60465,60467,60469,60471,60473,60475,60477],{"class":144,"line":1249},[142,60462,51370],{"class":152},[142,60464,51373],{"class":51329},[142,60466,14949],{"class":1991},[142,60468,198],{"class":152},[142,60470,51420],{"class":257},[142,60472,51400],{"class":1991},[142,60474,198],{"class":152},[142,60476,51427],{"class":257},[142,60478,51336],{"class":152},[142,60480,60481,60483,60485,60487,60489],{"class":144,"line":1340},[142,60482,51370],{"class":152},[142,60484,51436],{"class":51329},[142,60486,51439],{"class":152},[142,60488,51436],{"class":51329},[142,60490,51336],{"class":152},[142,60492,60493,60495,60497],{"class":144,"line":1346},[142,60494,51370],{"class":152},[142,60496,5155],{"class":51329},[142,60498,51336],{"class":152},[142,60500,60501,60503],{"class":144,"line":1358},[142,60502,51456],{"class":51329},[142,60504,15601],{"class":152},[142,60506,60507,60509,60511,60513],{"class":144,"line":1640},[142,60508,51463],{"class":201},[142,60510,51466],{"class":152},[142,60512,344],{"class":201},[142,60514,1319],{"class":152},[142,60516,60517,60519,60521,60523],{"class":144,"line":1645},[142,60518,51475],{"class":201},[142,60520,51466],{"class":152},[142,60522,344],{"class":201},[142,60524,1319],{"class":152},[142,60526,60527,60530,60532,60535],{"class":144,"line":1651},[142,60528,60529],{"class":201},"            box-sizing",[142,60531,51466],{"class":152},[142,60533,60534],{"class":201},"border-box",[142,60536,1319],{"class":152},[142,60538,60539],{"class":144,"line":1656},[142,60540,2557],{"class":152},[142,60542,60543],{"class":144,"line":1670},[142,60544,2428],{"emptyLinePlaceholder":69},[142,60546,60547,60550],{"class":144,"line":1675},[142,60548,60549],{"class":51329},"        ul",[142,60551,15601],{"class":152},[142,60553,60554],{"class":144,"line":1681},[142,60555,2428],{"emptyLinePlaceholder":69},[142,60557,60558,60561,60563,60565],{"class":144,"line":1702},[142,60559,60560],{"class":201},"            list-style",[142,60562,51466],{"class":152},[142,60564,54766],{"class":201},[142,60566,1319],{"class":152},[142,60568,60569],{"class":144,"line":1707},[142,60570,2557],{"class":152},[142,60572,60573],{"class":144,"line":1721},[142,60574,2428],{"emptyLinePlaceholder":69},[142,60576,60577,60580],{"class":144,"line":1726},[142,60578,60579],{"class":1991},"        .mi",[142,60581,15601],{"class":152},[142,60583,60584,60587,60589,60591],{"class":144,"line":1755},[142,60585,60586],{"class":201},"            position",[142,60588,51466],{"class":152},[142,60590,54793],{"class":201},[142,60592,1319],{"class":152},[142,60594,60595,60597,60599,60602,60604],{"class":144,"line":1760},[142,60596,51513],{"class":201},[142,60598,51466],{"class":152},[142,60600,60601],{"class":201},"223",[142,60603,51521],{"class":148},[142,60605,1319],{"class":152},[142,60607,60608,60610,60612,60614,60616,60618],{"class":144,"line":1777},[142,60609,51463],{"class":201},[142,60611,51466],{"class":152},[142,60613,464],{"class":201},[142,60615,51521],{"class":148},[142,60617,51585],{"class":201},[142,60619,1319],{"class":152},[142,60621,60622],{"class":144,"line":1782},[142,60623,2557],{"class":152},[142,60625,60626],{"class":144,"line":1787},[142,60627,2428],{"emptyLinePlaceholder":69},[142,60629,60630,60632,60635],{"class":144,"line":1792},[142,60631,60579],{"class":1991},[142,60633,60634],{"class":51329}," input",[142,60636,15601],{"class":152},[142,60638,60639,60641,60643,60645,60647],{"class":144,"line":1806},[142,60640,51513],{"class":201},[142,60642,51466],{"class":152},[142,60644,60601],{"class":201},[142,60646,51521],{"class":148},[142,60648,1319],{"class":152},[142,60650,60651,60653,60655,60657,60659],{"class":144,"line":1811},[142,60652,51528],{"class":201},[142,60654,51466],{"class":152},[142,60656,760],{"class":201},[142,60658,51521],{"class":148},[142,60660,1319],{"class":152},[142,60662,60663,60665,60667,60669,60671,60673],{"class":144,"line":2605},[142,60664,51475],{"class":201},[142,60666,51466],{"class":152},[142,60668,344],{"class":201},[142,60670,2066],{"class":201},[142,60672,51521],{"class":148},[142,60674,1319],{"class":152},[142,60676,60677,60680,60682,60684,60686],{"class":144,"line":2619},[142,60678,60679],{"class":201},"            font-size",[142,60681,51466],{"class":152},[142,60683,702],{"class":201},[142,60685,51521],{"class":148},[142,60687,1319],{"class":152},[142,60689,60690,60693,60695,60697,60699],{"class":144,"line":2627},[142,60691,60692],{"class":201},"            line-height",[142,60694,51466],{"class":152},[142,60696,760],{"class":201},[142,60698,51521],{"class":148},[142,60700,1319],{"class":152},[142,60702,60703,60706,60708,60710,60712,60714,60717],{"class":144,"line":2632},[142,60704,60705],{"class":201},"            border",[142,60707,51466],{"class":152},[142,60709,370],{"class":201},[142,60711,51521],{"class":148},[142,60713,51550],{"class":201},[142,60715,60716],{"class":201}," #e0e0e0",[142,60718,1319],{"class":152},[142,60720,60721,60724,60726,60728],{"class":144,"line":2638},[142,60722,60723],{"class":201},"            outline",[142,60725,51466],{"class":152},[142,60727,54766],{"class":201},[142,60729,1319],{"class":152},[142,60731,60732],{"class":144,"line":2644},[142,60733,2557],{"class":152},[142,60735,60736],{"class":144,"line":2649},[142,60737,2428],{"emptyLinePlaceholder":69},[142,60739,60740,60742,60745],{"class":144,"line":7977},[142,60741,60579],{"class":1991},[142,60743,60744],{"class":1991}," .search",[142,60746,15601],{"class":152},[142,60748,60749,60751,60753,60755,60757,60759,60762],{"class":144,"line":8001},[142,60750,60705],{"class":201},[142,60752,51466],{"class":152},[142,60754,370],{"class":201},[142,60756,51521],{"class":148},[142,60758,51550],{"class":201},[142,60760,60761],{"class":201}," #ff6700",[142,60763,1319],{"class":152},[142,60765,60766],{"class":144,"line":8006},[142,60767,2557],{"class":152},[142,60769,60770],{"class":144,"line":8012},[142,60771,2428],{"emptyLinePlaceholder":69},[142,60773,60774,60777],{"class":144,"line":8039},[142,60775,60776],{"class":1991},"        .result-list",[142,60778,15601],{"class":152},[142,60780,60781,60783,60785,60787],{"class":144,"line":8044},[142,60782,51501],{"class":201},[142,60784,51466],{"class":152},[142,60786,54766],{"class":201},[142,60788,1319],{"class":152},[142,60790,60791,60793,60795,60797],{"class":144,"line":8050},[142,60792,60586],{"class":201},[142,60794,51466],{"class":152},[142,60796,54860],{"class":201},[142,60798,1319],{"class":152},[142,60800,60801,60804,60806,60808],{"class":144,"line":8062},[142,60802,60803],{"class":201},"            left",[142,60805,51466],{"class":152},[142,60807,344],{"class":201},[142,60809,1319],{"class":152},[142,60811,60812,60815,60817,60819,60821],{"class":144,"line":8074},[142,60813,60814],{"class":201},"            top",[142,60816,51466],{"class":152},[142,60818,760],{"class":201},[142,60820,51521],{"class":148},[142,60822,1319],{"class":152},[142,60824,60825,60827,60829,60831,60833],{"class":144,"line":8086},[142,60826,51513],{"class":201},[142,60828,51466],{"class":152},[142,60830,60601],{"class":201},[142,60832,51521],{"class":148},[142,60834,1319],{"class":152},[142,60836,60837,60839,60841,60843,60845,60847,60849],{"class":144,"line":9745},[142,60838,60705],{"class":201},[142,60840,51466],{"class":152},[142,60842,370],{"class":201},[142,60844,51521],{"class":148},[142,60846,51550],{"class":201},[142,60848,60761],{"class":201},[142,60850,1319],{"class":152},[142,60852,60853,60856,60858,60860],{"class":144,"line":9770},[142,60854,60855],{"class":201},"            border-top",[142,60857,51466],{"class":152},[142,60859,344],{"class":201},[142,60861,1319],{"class":152},[142,60863,60864,60867,60869,60872],{"class":144,"line":9793},[142,60865,60866],{"class":201},"            background",[142,60868,51466],{"class":152},[142,60870,60871],{"class":201},"#fff",[142,60873,1319],{"class":152},[142,60875,60876],{"class":144,"line":9817},[142,60877,2557],{"class":152},[142,60879,60880],{"class":144,"line":9822},[142,60881,2428],{"emptyLinePlaceholder":69},[142,60883,60884,60886,60888],{"class":144,"line":9827},[142,60885,60776],{"class":1991},[142,60887,1427],{"class":51329},[142,60889,15601],{"class":152},[142,60891,60892,60894,60896,60899],{"class":144,"line":9832},[142,60893,51501],{"class":201},[142,60895,51466],{"class":152},[142,60897,60898],{"class":201},"block",[142,60900,1319],{"class":152},[142,60902,60903,60905,60907,60909,60911,60914,60916],{"class":144,"line":9841},[142,60904,51475],{"class":201},[142,60906,51466],{"class":152},[142,60908,497],{"class":201},[142,60910,51521],{"class":148},[142,60912,60913],{"class":201}," 15",[142,60915,51521],{"class":148},[142,60917,1319],{"class":152},[142,60919,60920,60922,60924,60926,60928],{"class":144,"line":9846},[142,60921,60679],{"class":201},[142,60923,51466],{"class":152},[142,60925,651],{"class":201},[142,60927,51521],{"class":148},[142,60929,1319],{"class":152},[142,60931,60932,60935,60937,60940],{"class":144,"line":9852},[142,60933,60934],{"class":201},"            color",[142,60936,51466],{"class":152},[142,60938,60939],{"class":201},"#424242",[142,60941,1319],{"class":152},[142,60943,60944,60947,60949,60951],{"class":144,"line":9873},[142,60945,60946],{"class":201},"            text-decoration",[142,60948,51466],{"class":152},[142,60950,54766],{"class":201},[142,60952,1319],{"class":152},[142,60954,60955],{"class":144,"line":9879},[142,60956,2557],{"class":152},[142,60958,60959],{"class":144,"line":9893},[142,60960,2428],{"emptyLinePlaceholder":69},[142,60962,60963,60965,60967,60970],{"class":144,"line":9899},[142,60964,60776],{"class":1991},[142,60966,1427],{"class":51329},[142,60968,60969],{"class":1991},":hover",[142,60971,15601],{"class":152},[142,60973,60974,60976,60978,60981],{"class":144,"line":9926},[142,60975,51669],{"class":201},[142,60977,51466],{"class":152},[142,60979,60980],{"class":201},"#eee",[142,60982,1319],{"class":152},[142,60984,60985],{"class":144,"line":9935},[142,60986,2557],{"class":152},[142,60988,60989,60991,60993],{"class":144,"line":9941},[142,60990,51805],{"class":152},[142,60992,5155],{"class":51329},[142,60994,51336],{"class":152},[142,60996,60997],{"class":144,"line":9949},[142,60998,2428],{"emptyLinePlaceholder":69},[142,61000,61001,61003,61005],{"class":144,"line":9954},[142,61002,51814],{"class":152},[142,61004,51363],{"class":51329},[142,61006,51336],{"class":152},[142,61008,61009],{"class":144,"line":16633},[142,61010,2428],{"emptyLinePlaceholder":69},[142,61012,61013,61015,61017],{"class":144,"line":16639},[142,61014,1063],{"class":152},[142,61016,51829],{"class":51329},[142,61018,51336],{"class":152},[142,61020,61021,61023,61025,61027,61029,61032],{"class":144,"line":16662},[142,61022,51370],{"class":152},[142,61024,51640],{"class":51329},[142,61026,53515],{"class":1991},[142,61028,198],{"class":152},[142,61030,61031],{"class":257},"\"mi\"",[142,61033,51336],{"class":152},[142,61035,61036,61038,61040,61042,61044,61047,61050,61052,61055],{"class":144,"line":16668},[142,61037,55331],{"class":152},[142,61039,53850],{"class":51329},[142,61041,53853],{"class":1991},[142,61043,198],{"class":152},[142,61045,61046],{"class":257},"\"search\"",[142,61048,61049],{"class":1991}," placeholder",[142,61051,198],{"class":152},[142,61053,61054],{"class":257},"\"小米笔记本\"",[142,61056,51336],{"class":152},[142,61058,61059,61061,61063,61065,61067,61070],{"class":144,"line":16691},[142,61060,55331],{"class":152},[142,61062,1160],{"class":51329},[142,61064,53515],{"class":1991},[142,61066,198],{"class":152},[142,61068,61069],{"class":257},"\"result-list\"",[142,61071,51336],{"class":152},[142,61073,61074,61077,61079,61082,61084,61087,61089,61092,61095,61097,61099,61101],{"class":144,"line":16705},[142,61075,61076],{"class":152},"            \u003C",[142,61078,99],{"class":51329},[142,61080,61081],{"class":152},">\u003C",[142,61083,391],{"class":51329},[142,61085,61086],{"class":1991}," href",[142,61088,198],{"class":152},[142,61090,61091],{"class":257},"\"#\"",[142,61093,61094],{"class":152},">全部商品\u003C\u002F",[142,61096,391],{"class":51329},[142,61098,55343],{"class":152},[142,61100,99],{"class":51329},[142,61102,51336],{"class":152},[142,61104,61105,61107,61109,61111,61113,61115,61117,61119,61122,61124,61126,61128],{"class":144,"line":16725},[142,61106,61076],{"class":152},[142,61108,99],{"class":51329},[142,61110,61081],{"class":152},[142,61112,391],{"class":51329},[142,61114,61086],{"class":1991},[142,61116,198],{"class":152},[142,61118,61091],{"class":257},[142,61120,61121],{"class":152},">小米11\u003C\u002F",[142,61123,391],{"class":51329},[142,61125,55343],{"class":152},[142,61127,99],{"class":51329},[142,61129,51336],{"class":152},[142,61131,61132,61134,61136,61138,61140,61142,61144,61146,61149,61151,61153,61155],{"class":144,"line":16731},[142,61133,61076],{"class":152},[142,61135,99],{"class":51329},[142,61137,61081],{"class":152},[142,61139,391],{"class":51329},[142,61141,61086],{"class":1991},[142,61143,198],{"class":152},[142,61145,61091],{"class":257},[142,61147,61148],{"class":152},">小米10S\u003C\u002F",[142,61150,391],{"class":51329},[142,61152,55343],{"class":152},[142,61154,99],{"class":51329},[142,61156,51336],{"class":152},[142,61158,61159,61161,61163,61165,61167,61169,61171,61173,61176,61178,61180,61182],{"class":144,"line":16742},[142,61160,61076],{"class":152},[142,61162,99],{"class":51329},[142,61164,61081],{"class":152},[142,61166,391],{"class":51329},[142,61168,61086],{"class":1991},[142,61170,198],{"class":152},[142,61172,61091],{"class":257},[142,61174,61175],{"class":152},">小米笔记本\u003C\u002F",[142,61177,391],{"class":51329},[142,61179,55343],{"class":152},[142,61181,99],{"class":51329},[142,61183,51336],{"class":152},[142,61185,61186,61188,61190,61192,61194,61196,61198,61200,61203,61205,61207,61209],{"class":144,"line":16765},[142,61187,61076],{"class":152},[142,61189,99],{"class":51329},[142,61191,61081],{"class":152},[142,61193,391],{"class":51329},[142,61195,61086],{"class":1991},[142,61197,198],{"class":152},[142,61199,61091],{"class":257},[142,61201,61202],{"class":152},">小米手机\u003C\u002F",[142,61204,391],{"class":51329},[142,61206,55343],{"class":152},[142,61208,99],{"class":51329},[142,61210,51336],{"class":152},[142,61212,61213,61215,61217,61219,61221,61223,61225,61227,61230,61232,61234,61236],{"class":144,"line":16787},[142,61214,61076],{"class":152},[142,61216,99],{"class":51329},[142,61218,61081],{"class":152},[142,61220,391],{"class":51329},[142,61222,61086],{"class":1991},[142,61224,198],{"class":152},[142,61226,61091],{"class":257},[142,61228,61229],{"class":152},">黑鲨4\u003C\u002F",[142,61231,391],{"class":51329},[142,61233,55343],{"class":152},[142,61235,99],{"class":51329},[142,61237,51336],{"class":152},[142,61239,61240,61242,61244,61246,61248,61250,61252,61254,61257,61259,61261,61263],{"class":144,"line":16792},[142,61241,61076],{"class":152},[142,61243,99],{"class":51329},[142,61245,61081],{"class":152},[142,61247,391],{"class":51329},[142,61249,61086],{"class":1991},[142,61251,198],{"class":152},[142,61253,61091],{"class":257},[142,61255,61256],{"class":152},">空调\u003C\u002F",[142,61258,391],{"class":51329},[142,61260,55343],{"class":152},[142,61262,99],{"class":51329},[142,61264,51336],{"class":152},[142,61266,61267,61270,61272],{"class":144,"line":16798},[142,61268,61269],{"class":152},"        \u003C\u002F",[142,61271,1160],{"class":51329},[142,61273,51336],{"class":152},[142,61275,61276,61278,61280],{"class":144,"line":16812},[142,61277,51805],{"class":152},[142,61279,51640],{"class":51329},[142,61281,51336],{"class":152},[142,61283,61284,61286,61288],{"class":144,"line":16825},[142,61285,51370],{"class":152},[142,61287,51842],{"class":51329},[142,61289,51336],{"class":152},[142,61291,61292],{"class":144,"line":16830},[142,61293,61294],{"class":211},"        \u002F\u002F 1. 获取元素\n",[142,61296,61297,61300,61302,61304,61306,61308,61310,61313],{"class":144,"line":16844},[142,61298,61299],{"class":148},"        const",[142,61301,60634],{"class":201},[142,61303,13593],{"class":148},[142,61305,54425],{"class":152},[142,61307,54428],{"class":1991},[142,61309,153],{"class":152},[142,61311,61312],{"class":257},"'[type=search]'",[142,61314,159],{"class":152},[142,61316,61317,61319,61322,61324,61326,61328,61330,61333],{"class":144,"line":16849},[142,61318,61299],{"class":148},[142,61320,61321],{"class":201}," ul",[142,61323,13593],{"class":148},[142,61325,54425],{"class":152},[142,61327,54428],{"class":1991},[142,61329,153],{"class":152},[142,61331,61332],{"class":257},"'.result-list'",[142,61334,159],{"class":152},[142,61336,61337],{"class":144,"line":16855},[142,61338,61339],{"class":211},"        \u002F\u002F console.log(input)\n",[142,61341,61342],{"class":144,"line":16860},[142,61343,61344],{"class":211},"        \u002F\u002F 2. 监听事件 获得焦点\n",[142,61346,61347,61350,61352,61354,61357,61359,61361],{"class":144,"line":16874},[142,61348,61349],{"class":152},"        input.",[142,61351,57842],{"class":1991},[142,61353,153],{"class":152},[142,61355,61356],{"class":257},"'focus'",[142,61358,12464],{"class":152},[142,61360,54478],{"class":148},[142,61362,54481],{"class":152},[142,61364,61365],{"class":144,"line":16879},[142,61366,61367],{"class":211},"            \u002F\u002F ul显示\n",[142,61369,61370,61373,61375],{"class":144,"line":16884},[142,61371,61372],{"class":152},"            ul.style.display ",[142,61374,198],{"class":148},[142,61376,61377],{"class":257}," 'block'\n",[142,61379,61380],{"class":144,"line":16898},[142,61381,61382],{"class":211},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[142,61384,61385,61388,61390,61392,61395],{"class":144,"line":16910},[142,61386,61387],{"class":152},"            input.classList.",[142,61389,5363],{"class":1991},[142,61391,153],{"class":152},[142,61393,61394],{"class":257},"'search'",[142,61396,159],{"class":152},[142,61398,61399],{"class":144,"line":16915},[142,61400,61401],{"class":152},"        })\n",[142,61403,61404],{"class":144,"line":16928},[142,61405,61406],{"class":211},"        \u002F\u002F 3. 监听事件 失去焦点\n",[142,61408,61409,61411,61413,61415,61418,61420,61422],{"class":144,"line":16933},[142,61410,61349],{"class":152},[142,61412,57842],{"class":1991},[142,61414,153],{"class":152},[142,61416,61417],{"class":257},"'blur'",[142,61419,12464],{"class":152},[142,61421,54478],{"class":148},[142,61423,54481],{"class":152},[142,61425,61426,61428,61430],{"class":144,"line":16938},[142,61427,61372],{"class":152},[142,61429,198],{"class":148},[142,61431,61432],{"class":257}," 'none'\n",[142,61434,61435,61437,61439,61441,61443],{"class":144,"line":16943},[142,61436,61387],{"class":152},[142,61438,57035],{"class":1991},[142,61440,153],{"class":152},[142,61442,61394],{"class":257},[142,61444,159],{"class":152},[142,61446,61447],{"class":144,"line":16956},[142,61448,61401],{"class":152},[142,61450,61451,61453,61455],{"class":144,"line":16961},[142,61452,51805],{"class":152},[142,61454,51842],{"class":51329},[142,61456,51336],{"class":152},[142,61458,61459,61461,61463],{"class":144,"line":32662},[142,61460,51814],{"class":152},[142,61462,51829],{"class":51329},[142,61464,51336],{"class":152},[142,61466,61467],{"class":144,"line":32668},[142,61468,2428],{"emptyLinePlaceholder":69},[142,61470,61471,61473,61475],{"class":144,"line":32674},[142,61472,51814],{"class":152},[142,61474,50664],{"class":51329},[142,61476,51336],{"class":152},[22027,61478,61480],{"id":61479},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61482,61483],{},"评论字数统计案例",[14,61485,61486],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61488,61489],{},"牢记focus伪类选择器",[51373,61491],{"charSet":61492},"UTF-8",[51373,61494],{"name":61495,"content":61496},"viewport","width=device-width, initial-scale=1.0",[51436,61498,61499],{},"Document",[5155,61501,61502],{},"\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",[53850,61504],{"type":5216},[1160,61506,61507,61510],{},[99,61508,61509],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[99,61511,61512],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[133,61514,61516],{"className":50662,"code":61515,"language":50664,"meta":31,"style":31},"\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",[139,61517,61518,61528,61542,61546,61554,61568,61588,61608,61621,61629,61636,61649,61663,61673,61683,61687,61691,61698,61710,61722,61734,61746,61775,61788,61792,61796,61805,61816,61828,61839,61850,61862,61873,61885,61901,61913,61917,61921,61932,61943,61953,61965,61969,61973,61981,61992,62002,62013,62025,62038,62050,62062,62066,62070,62079,62091,62102,62115,62126,62140,62144,62148,62155,62167,62179,62189,62193,62197,62206,62218,62228,62232,62236,62247,62257,62276,62289,62293,62297,62307,62317,62321,62325,62336,62347,62359,62371,62375,62379,62390,62401,62415,62419,62423,62434,62444,62456,62460,62468,62476,62480,62488,62503,62522,62562,62575,62583,62597,62617,62625,62640,62663,62681,62696,62716,62736,62756,62764,62772,62780,62788,62808,62828,62833,62850,62859,62863,62868,62884,62892,62896,62901,62918,62923,62948,62952,62956,62961,62966,62974,62982,62986],{"__ignoreMap":31},[142,61519,61520,61522,61524,61526],{"class":144,"line":145},[142,61521,51326],{"class":152},[142,61523,51330],{"class":51329},[142,61525,51333],{"class":1991},[142,61527,51336],{"class":152},[142,61529,61530,61532,61534,61536,61538,61540],{"class":144,"line":64},[142,61531,1063],{"class":152},[142,61533,50664],{"class":51329},[142,61535,51345],{"class":1991},[142,61537,198],{"class":152},[142,61539,51350],{"class":257},[142,61541,51336],{"class":152},[142,61543,61544],{"class":144,"line":1208},[142,61545,2428],{"emptyLinePlaceholder":69},[142,61547,61548,61550,61552],{"class":144,"line":1223},[142,61549,1063],{"class":152},[142,61551,51363],{"class":51329},[142,61553,51336],{"class":152},[142,61555,61556,61558,61560,61562,61564,61566],{"class":144,"line":1229},[142,61557,52173],{"class":152},[142,61559,51373],{"class":51329},[142,61561,51376],{"class":1991},[142,61563,198],{"class":152},[142,61565,51381],{"class":257},[142,61567,51336],{"class":152},[142,61569,61570,61572,61574,61576,61578,61580,61582,61584,61586],{"class":144,"line":1243},[142,61571,52173],{"class":152},[142,61573,51373],{"class":51329},[142,61575,51392],{"class":1991},[142,61577,198],{"class":152},[142,61579,51397],{"class":257},[142,61581,51400],{"class":1991},[142,61583,198],{"class":152},[142,61585,51405],{"class":257},[142,61587,51336],{"class":152},[142,61589,61590,61592,61594,61596,61598,61600,61602,61604,61606],{"class":144,"line":1249},[142,61591,52173],{"class":152},[142,61593,51373],{"class":51329},[142,61595,14949],{"class":1991},[142,61597,198],{"class":152},[142,61599,51420],{"class":257},[142,61601,51400],{"class":1991},[142,61603,198],{"class":152},[142,61605,51427],{"class":257},[142,61607,51336],{"class":152},[142,61609,61610,61612,61614,61617,61619],{"class":144,"line":1340},[142,61611,52173],{"class":152},[142,61613,51436],{"class":51329},[142,61615,61616],{"class":152},">评论回车发布\u003C\u002F",[142,61618,51436],{"class":51329},[142,61620,51336],{"class":152},[142,61622,61623,61625,61627],{"class":144,"line":1346},[142,61624,52173],{"class":152},[142,61626,5155],{"class":51329},[142,61628,51336],{"class":152},[142,61630,61631,61634],{"class":144,"line":1358},[142,61632,61633],{"class":1991},"    .wrapper",[142,61635,15601],{"class":152},[142,61637,61638,61641,61643,61645,61647],{"class":144,"line":1640},[142,61639,61640],{"class":201},"      min-width",[142,61642,51466],{"class":152},[142,61644,4015],{"class":201},[142,61646,51521],{"class":148},[142,61648,1319],{"class":152},[142,61650,61651,61654,61656,61659,61661],{"class":144,"line":1645},[142,61652,61653],{"class":201},"      max-width",[142,61655,51466],{"class":152},[142,61657,61658],{"class":201},"800",[142,61660,51521],{"class":148},[142,61662,1319],{"class":152},[142,61664,61665,61667,61669,61671],{"class":144,"line":1651},[142,61666,55038],{"class":201},[142,61668,51466],{"class":152},[142,61670,51506],{"class":201},[142,61672,1319],{"class":152},[142,61674,61675,61677,61679,61681],{"class":144,"line":1656},[142,61676,55049],{"class":201},[142,61678,51466],{"class":152},[142,61680,51609],{"class":201},[142,61682,1319],{"class":152},[142,61684,61685],{"class":144,"line":1670},[142,61686,2215],{"class":152},[142,61688,61689],{"class":144,"line":1675},[142,61690,2428],{"emptyLinePlaceholder":69},[142,61692,61693,61696],{"class":144,"line":1681},[142,61694,61695],{"class":1991},"    .avatar",[142,61697,15601],{"class":152},[142,61699,61700,61702,61704,61706,61708],{"class":144,"line":1702},[142,61701,54800],{"class":201},[142,61703,51466],{"class":152},[142,61705,760],{"class":201},[142,61707,51521],{"class":148},[142,61709,1319],{"class":152},[142,61711,61712,61714,61716,61718,61720],{"class":144,"line":1707},[142,61713,54814],{"class":201},[142,61715,51466],{"class":152},[142,61717,760],{"class":201},[142,61719,51521],{"class":148},[142,61721,1319],{"class":152},[142,61723,61724,61726,61728,61730,61732],{"class":144,"line":1721},[142,61725,55163],{"class":201},[142,61727,51466],{"class":152},[142,61729,809],{"class":201},[142,61731,481],{"class":148},[142,61733,1319],{"class":152},[142,61735,61736,61739,61741,61744],{"class":144,"line":1726},[142,61737,61738],{"class":201},"      overflow",[142,61740,51466],{"class":152},[142,61742,61743],{"class":201},"hidden",[142,61745,1319],{"class":152},[142,61747,61748,61751,61753,61756,61758,61761,61763,61766,61768,61770,61773],{"class":144,"line":1755},[142,61749,61750],{"class":201},"      background",[142,61752,51466],{"class":152},[142,61754,61755],{"class":201},"url",[142,61757,153],{"class":152},[142,61759,61760],{"class":5245},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[142,61762,13743],{"class":152},[142,61764,61765],{"class":201},"no-repeat",[142,61767,17173],{"class":201},[142,61769,25007],{"class":152},[142,61771,61772],{"class":201},"cover",[142,61774,1319],{"class":152},[142,61776,61777,61780,61782,61784,61786],{"class":144,"line":1760},[142,61778,61779],{"class":201},"      margin-right",[142,61781,51466],{"class":152},[142,61783,853],{"class":201},[142,61785,51521],{"class":148},[142,61787,1319],{"class":152},[142,61789,61790],{"class":144,"line":1777},[142,61791,2215],{"class":152},[142,61793,61794],{"class":144,"line":1782},[142,61795,2428],{"emptyLinePlaceholder":69},[142,61797,61798,61800,61803],{"class":144,"line":1787},[142,61799,61633],{"class":1991},[142,61801,61802],{"class":51329}," textarea",[142,61804,15601],{"class":152},[142,61806,61807,61810,61812,61814],{"class":144,"line":1792},[142,61808,61809],{"class":201},"      outline",[142,61811,51466],{"class":152},[142,61813,54766],{"class":201},[142,61815,1319],{"class":152},[142,61817,61818,61821,61823,61826],{"class":144,"line":1806},[142,61819,61820],{"class":201},"      border-color",[142,61822,51466],{"class":152},[142,61824,61825],{"class":201},"transparent",[142,61827,1319],{"class":152},[142,61829,61830,61833,61835,61837],{"class":144,"line":1811},[142,61831,61832],{"class":201},"      resize",[142,61834,51466],{"class":152},[142,61836,54766],{"class":201},[142,61838,1319],{"class":152},[142,61840,61841,61843,61845,61848],{"class":144,"line":2605},[142,61842,61750],{"class":201},[142,61844,51466],{"class":152},[142,61846,61847],{"class":201},"#f5f5f5",[142,61849,1319],{"class":152},[142,61851,61852,61854,61856,61858,61860],{"class":144,"line":2619},[142,61853,55163],{"class":201},[142,61855,51466],{"class":152},[142,61857,446],{"class":201},[142,61859,51521],{"class":148},[142,61861,1319],{"class":152},[142,61863,61864,61867,61869,61871],{"class":144,"line":2627},[142,61865,61866],{"class":201},"      flex",[142,61868,51466],{"class":152},[142,61870,370],{"class":201},[142,61872,1319],{"class":152},[142,61874,61875,61877,61879,61881,61883],{"class":144,"line":2632},[142,61876,54724],{"class":201},[142,61878,51466],{"class":152},[142,61880,599],{"class":201},[142,61882,51521],{"class":148},[142,61884,1319],{"class":152},[142,61886,61887,61890,61892,61894,61897,61899],{"class":144,"line":2638},[142,61888,61889],{"class":201},"      transition",[142,61891,51466],{"class":152},[142,61893,28150],{"class":201},[142,61895,61896],{"class":201}," 0.5",[142,61898,848],{"class":148},[142,61900,1319],{"class":152},[142,61902,61903,61905,61907,61909,61911],{"class":144,"line":2644},[142,61904,54814],{"class":201},[142,61906,51466],{"class":152},[142,61908,1104],{"class":201},[142,61910,51521],{"class":148},[142,61912,1319],{"class":152},[142,61914,61915],{"class":144,"line":2649},[142,61916,2215],{"class":152},[142,61918,61919],{"class":144,"line":7977},[142,61920,2428],{"emptyLinePlaceholder":69},[142,61922,61923,61925,61927,61930],{"class":144,"line":8001},[142,61924,61633],{"class":1991},[142,61926,61802],{"class":51329},[142,61928,61929],{"class":1991},":focus",[142,61931,15601],{"class":152},[142,61933,61934,61936,61938,61941],{"class":144,"line":8006},[142,61935,61820],{"class":201},[142,61937,51466],{"class":152},[142,61939,61940],{"class":201},"#e4e4e4",[142,61942,1319],{"class":152},[142,61944,61945,61947,61949,61951],{"class":144,"line":8012},[142,61946,61750],{"class":201},[142,61948,51466],{"class":152},[142,61950,60871],{"class":201},[142,61952,1319],{"class":152},[142,61954,61955,61957,61959,61961,61963],{"class":144,"line":8039},[142,61956,54814],{"class":201},[142,61958,51466],{"class":152},[142,61960,809],{"class":201},[142,61962,51521],{"class":148},[142,61964,1319],{"class":152},[142,61966,61967],{"class":144,"line":8044},[142,61968,2215],{"class":152},[142,61970,61971],{"class":144,"line":8050},[142,61972,2428],{"emptyLinePlaceholder":69},[142,61974,61975,61977,61979],{"class":144,"line":8062},[142,61976,61633],{"class":1991},[142,61978,57496],{"class":51329},[142,61980,15601],{"class":152},[142,61982,61983,61985,61987,61990],{"class":144,"line":8074},[142,61984,61750],{"class":201},[142,61986,51466],{"class":152},[142,61988,61989],{"class":201},"#00aeec",[142,61991,1319],{"class":152},[142,61993,61994,61996,61998,62000],{"class":144,"line":8086},[142,61995,57445],{"class":201},[142,61997,51466],{"class":152},[142,61999,60871],{"class":201},[142,62001,1319],{"class":152},[142,62003,62004,62007,62009,62011],{"class":144,"line":9745},[142,62005,62006],{"class":201},"      border",[142,62008,51466],{"class":152},[142,62010,54766],{"class":201},[142,62012,1319],{"class":152},[142,62014,62015,62017,62019,62021,62023],{"class":144,"line":9770},[142,62016,55163],{"class":201},[142,62018,51466],{"class":152},[142,62020,446],{"class":201},[142,62022,51521],{"class":148},[142,62024,1319],{"class":152},[142,62026,62027,62030,62032,62034,62036],{"class":144,"line":9793},[142,62028,62029],{"class":201},"      margin-left",[142,62031,51466],{"class":152},[142,62033,599],{"class":201},[142,62035,51521],{"class":148},[142,62037,1319],{"class":152},[142,62039,62040,62042,62044,62046,62048],{"class":144,"line":9817},[142,62041,54800],{"class":201},[142,62043,51466],{"class":152},[142,62045,509],{"class":201},[142,62047,51521],{"class":148},[142,62049,1319],{"class":152},[142,62051,62052,62055,62057,62060],{"class":144,"line":9822},[142,62053,62054],{"class":201},"      cursor",[142,62056,51466],{"class":152},[142,62058,62059],{"class":201},"pointer",[142,62061,1319],{"class":152},[142,62063,62064],{"class":144,"line":9827},[142,62065,2215],{"class":152},[142,62067,62068],{"class":144,"line":9832},[142,62069,2428],{"emptyLinePlaceholder":69},[142,62071,62072,62074,62077],{"class":144,"line":9841},[142,62073,61633],{"class":1991},[142,62075,62076],{"class":1991}," .total",[142,62078,15601],{"class":152},[142,62080,62081,62083,62085,62087,62089],{"class":144,"line":9846},[142,62082,61779],{"class":201},[142,62084,51466],{"class":152},[142,62086,765],{"class":201},[142,62088,51521],{"class":148},[142,62090,1319],{"class":152},[142,62092,62093,62095,62097,62100],{"class":144,"line":9852},[142,62094,57445],{"class":201},[142,62096,51466],{"class":152},[142,62098,62099],{"class":201},"#999",[142,62101,1319],{"class":152},[142,62103,62104,62107,62109,62111,62113],{"class":144,"line":9873},[142,62105,62106],{"class":201},"      margin-top",[142,62108,51466],{"class":152},[142,62110,472],{"class":201},[142,62112,51521],{"class":148},[142,62114,1319],{"class":152},[142,62116,62117,62120,62122,62124],{"class":144,"line":9879},[142,62118,62119],{"class":201},"      opacity",[142,62121,51466],{"class":152},[142,62123,344],{"class":201},[142,62125,1319],{"class":152},[142,62127,62128,62130,62132,62134,62136,62138],{"class":144,"line":9893},[142,62129,61889],{"class":201},[142,62131,51466],{"class":152},[142,62133,28150],{"class":201},[142,62135,61896],{"class":201},[142,62137,848],{"class":148},[142,62139,1319],{"class":152},[142,62141,62142],{"class":144,"line":9899},[142,62143,2215],{"class":152},[142,62145,62146],{"class":144,"line":9926},[142,62147,2428],{"emptyLinePlaceholder":69},[142,62149,62150,62153],{"class":144,"line":9935},[142,62151,62152],{"class":1991},"    .list",[142,62154,15601],{"class":152},[142,62156,62157,62159,62161,62163,62165],{"class":144,"line":9941},[142,62158,61640],{"class":201},[142,62160,51466],{"class":152},[142,62162,4015],{"class":201},[142,62164,51521],{"class":148},[142,62166,1319],{"class":152},[142,62168,62169,62171,62173,62175,62177],{"class":144,"line":9949},[142,62170,61653],{"class":201},[142,62172,51466],{"class":152},[142,62174,61658],{"class":201},[142,62176,51521],{"class":148},[142,62178,1319],{"class":152},[142,62180,62181,62183,62185,62187],{"class":144,"line":9954},[142,62182,55038],{"class":201},[142,62184,51466],{"class":152},[142,62186,51506],{"class":201},[142,62188,1319],{"class":152},[142,62190,62191],{"class":144,"line":16633},[142,62192,2215],{"class":152},[142,62194,62195],{"class":144,"line":16639},[142,62196,2428],{"emptyLinePlaceholder":69},[142,62198,62199,62201,62204],{"class":144,"line":16662},[142,62200,62152],{"class":1991},[142,62202,62203],{"class":1991}," .item",[142,62205,15601],{"class":152},[142,62207,62208,62210,62212,62214,62216],{"class":144,"line":16668},[142,62209,54800],{"class":201},[142,62211,51466],{"class":152},[142,62213,464],{"class":201},[142,62215,481],{"class":148},[142,62217,1319],{"class":152},[142,62219,62220,62222,62224,62226],{"class":144,"line":16691},[142,62221,55038],{"class":201},[142,62223,51466],{"class":152},[142,62225,51506],{"class":201},[142,62227,1319],{"class":152},[142,62229,62230],{"class":144,"line":16705},[142,62231,2215],{"class":152},[142,62233,62234],{"class":144,"line":16725},[142,62235,2428],{"emptyLinePlaceholder":69},[142,62237,62238,62240,62242,62245],{"class":144,"line":16731},[142,62239,62152],{"class":1991},[142,62241,62203],{"class":1991},[142,62243,62244],{"class":1991}," .info",[142,62246,15601],{"class":152},[142,62248,62249,62251,62253,62255],{"class":144,"line":16742},[142,62250,61866],{"class":201},[142,62252,51466],{"class":152},[142,62254,370],{"class":201},[142,62256,1319],{"class":152},[142,62258,62259,62262,62264,62266,62268,62271,62274],{"class":144,"line":16765},[142,62260,62261],{"class":201},"      border-bottom",[142,62263,51466],{"class":152},[142,62265,370],{"class":201},[142,62267,51521],{"class":148},[142,62269,62270],{"class":201}," dashed",[142,62272,62273],{"class":201}," #e4e4e4",[142,62275,1319],{"class":152},[142,62277,62278,62281,62283,62285,62287],{"class":144,"line":16787},[142,62279,62280],{"class":201},"      padding-bottom",[142,62282,51466],{"class":152},[142,62284,599],{"class":201},[142,62286,51521],{"class":148},[142,62288,1319],{"class":152},[142,62290,62291],{"class":144,"line":16792},[142,62292,2215],{"class":152},[142,62294,62295],{"class":144,"line":16798},[142,62296,2428],{"emptyLinePlaceholder":69},[142,62298,62299,62301,62303,62305],{"class":144,"line":16812},[142,62300,62152],{"class":1991},[142,62302,62203],{"class":1991},[142,62304,6854],{"class":51329},[142,62306,15601],{"class":152},[142,62308,62309,62311,62313,62315],{"class":144,"line":16825},[142,62310,54735],{"class":201},[142,62312,51466],{"class":152},[142,62314,344],{"class":201},[142,62316,1319],{"class":152},[142,62318,62319],{"class":144,"line":16830},[142,62320,2215],{"class":152},[142,62322,62323],{"class":144,"line":16844},[142,62324,2428],{"emptyLinePlaceholder":69},[142,62326,62327,62329,62331,62334],{"class":144,"line":16849},[142,62328,62152],{"class":1991},[142,62330,62203],{"class":1991},[142,62332,62333],{"class":1991}," .name",[142,62335,15601],{"class":152},[142,62337,62338,62340,62342,62345],{"class":144,"line":16855},[142,62339,57445],{"class":201},[142,62341,51466],{"class":152},[142,62343,62344],{"class":201},"#FB7299",[142,62346,1319],{"class":152},[142,62348,62349,62351,62353,62355,62357],{"class":144,"line":16860},[142,62350,54951],{"class":201},[142,62352,51466],{"class":152},[142,62354,702],{"class":201},[142,62356,51521],{"class":148},[142,62358,1319],{"class":152},[142,62360,62361,62364,62366,62369],{"class":144,"line":16874},[142,62362,62363],{"class":201},"      font-weight",[142,62365,51466],{"class":152},[142,62367,62368],{"class":201},"bold",[142,62370,1319],{"class":152},[142,62372,62373],{"class":144,"line":16879},[142,62374,2215],{"class":152},[142,62376,62377],{"class":144,"line":16884},[142,62378,2428],{"emptyLinePlaceholder":69},[142,62380,62381,62383,62385,62388],{"class":144,"line":16898},[142,62382,62152],{"class":1991},[142,62384,62203],{"class":1991},[142,62386,62387],{"class":1991}," .text",[142,62389,15601],{"class":152},[142,62391,62392,62394,62396,62399],{"class":144,"line":16910},[142,62393,57445],{"class":201},[142,62395,51466],{"class":152},[142,62397,62398],{"class":201},"#333",[142,62400,1319],{"class":152},[142,62402,62403,62405,62407,62409,62411,62413],{"class":144,"line":16915},[142,62404,54724],{"class":201},[142,62406,51466],{"class":152},[142,62408,599],{"class":201},[142,62410,51521],{"class":148},[142,62412,4121],{"class":201},[142,62414,1319],{"class":152},[142,62416,62417],{"class":144,"line":16928},[142,62418,2215],{"class":152},[142,62420,62421],{"class":144,"line":16933},[142,62422,2428],{"emptyLinePlaceholder":69},[142,62424,62425,62427,62429,62432],{"class":144,"line":16938},[142,62426,62152],{"class":1991},[142,62428,62203],{"class":1991},[142,62430,62431],{"class":1991}," .time",[142,62433,15601],{"class":152},[142,62435,62436,62438,62440,62442],{"class":144,"line":16943},[142,62437,57445],{"class":201},[142,62439,51466],{"class":152},[142,62441,62099],{"class":201},[142,62443,1319],{"class":152},[142,62445,62446,62448,62450,62452,62454],{"class":144,"line":16956},[142,62447,54951],{"class":201},[142,62449,51466],{"class":152},[142,62451,651],{"class":201},[142,62453,51521],{"class":148},[142,62455,1319],{"class":152},[142,62457,62458],{"class":144,"line":16961},[142,62459,2215],{"class":152},[142,62461,62462,62464,62466],{"class":144,"line":32662},[142,62463,52446],{"class":152},[142,62465,5155],{"class":51329},[142,62467,51336],{"class":152},[142,62469,62470,62472,62474],{"class":144,"line":32668},[142,62471,51814],{"class":152},[142,62473,51363],{"class":51329},[142,62475,51336],{"class":152},[142,62477,62478],{"class":144,"line":32674},[142,62479,2428],{"emptyLinePlaceholder":69},[142,62481,62482,62484,62486],{"class":144,"line":32680},[142,62483,1063],{"class":152},[142,62485,51829],{"class":51329},[142,62487,51336],{"class":152},[142,62489,62490,62492,62494,62496,62498,62501],{"class":144,"line":32686},[142,62491,52173],{"class":152},[142,62493,51640],{"class":51329},[142,62495,53515],{"class":1991},[142,62497,198],{"class":152},[142,62499,62500],{"class":257},"\"wrapper\"",[142,62502,51336],{"class":152},[142,62504,62505,62507,62509,62511,62513,62516,62518,62520],{"class":144,"line":32697},[142,62506,51370],{"class":152},[142,62508,594],{"class":51329},[142,62510,53515],{"class":1991},[142,62512,198],{"class":152},[142,62514,62515],{"class":257},"\"avatar\"",[142,62517,55343],{"class":152},[142,62519,594],{"class":51329},[142,62521,51336],{"class":152},[142,62523,62524,62526,62528,62530,62532,62535,62537,62539,62542,62544,62546,62548,62551,62553,62556,62558,62560],{"class":144,"line":32703},[142,62525,51370],{"class":152},[142,62527,54317],{"class":51329},[142,62529,14988],{"class":1991},[142,62531,198],{"class":152},[142,62533,62534],{"class":257},"\"tx\"",[142,62536,61049],{"class":1991},[142,62538,198],{"class":152},[142,62540,62541],{"class":257},"\"发一条友善的评论\"",[142,62543,54340],{"class":1991},[142,62545,198],{"class":152},[142,62547,3729],{"class":257},[142,62549,62550],{"class":1991}," maxlength",[142,62552,198],{"class":152},[142,62554,62555],{"class":257},"\"200\"",[142,62557,55343],{"class":152},[142,62559,54317],{"class":51329},[142,62561,51336],{"class":152},[142,62563,62564,62566,62568,62571,62573],{"class":144,"line":32723},[142,62565,51370],{"class":152},[142,62567,53916],{"class":51329},[142,62569,62570],{"class":152},">发布\u003C\u002F",[142,62572,53916],{"class":51329},[142,62574,51336],{"class":152},[142,62576,62577,62579,62581],{"class":144,"line":32729},[142,62578,52446],{"class":152},[142,62580,51640],{"class":51329},[142,62582,51336],{"class":152},[142,62584,62585,62587,62589,62591,62593,62595],{"class":144,"line":32740},[142,62586,52173],{"class":152},[142,62588,51640],{"class":51329},[142,62590,53515],{"class":1991},[142,62592,198],{"class":152},[142,62594,62500],{"class":257},[142,62596,51336],{"class":152},[142,62598,62599,62601,62603,62605,62607,62610,62613,62615],{"class":144,"line":32746},[142,62600,51370],{"class":152},[142,62602,142],{"class":51329},[142,62604,53515],{"class":1991},[142,62606,198],{"class":152},[142,62608,62609],{"class":257},"\"total\"",[142,62611,62612],{"class":152},">0\u002F200字\u003C\u002F",[142,62614,142],{"class":51329},[142,62616,51336],{"class":152},[142,62618,62619,62621,62623],{"class":144,"line":32752},[142,62620,52446],{"class":152},[142,62622,51640],{"class":51329},[142,62624,51336],{"class":152},[142,62626,62627,62629,62631,62633,62635,62638],{"class":144,"line":32758},[142,62628,52173],{"class":152},[142,62630,51640],{"class":51329},[142,62632,53515],{"class":1991},[142,62634,198],{"class":152},[142,62636,62637],{"class":257},"\"list\"",[142,62639,51336],{"class":152},[142,62641,62642,62644,62646,62648,62650,62653,62656,62658,62661],{"class":144,"line":32764},[142,62643,51370],{"class":152},[142,62645,51640],{"class":51329},[142,62647,53515],{"class":1991},[142,62649,198],{"class":152},[142,62651,62652],{"class":257},"\"item\"",[142,62654,62655],{"class":1991}," style",[142,62657,198],{"class":152},[142,62659,62660],{"class":257},"\"display: none;\"",[142,62662,51336],{"class":152},[142,62664,62665,62667,62669,62671,62673,62675,62677,62679],{"class":144,"line":32770},[142,62666,55263],{"class":152},[142,62668,594],{"class":51329},[142,62670,53515],{"class":1991},[142,62672,198],{"class":152},[142,62674,62515],{"class":257},[142,62676,55343],{"class":152},[142,62678,594],{"class":51329},[142,62680,51336],{"class":152},[142,62682,62683,62685,62687,62689,62691,62694],{"class":144,"line":32776},[142,62684,55263],{"class":152},[142,62686,51640],{"class":51329},[142,62688,53515],{"class":1991},[142,62690,198],{"class":152},[142,62692,62693],{"class":257},"\"info\"",[142,62695,51336],{"class":152},[142,62697,62698,62700,62702,62704,62706,62709,62712,62714],{"class":144,"line":32782},[142,62699,55331],{"class":152},[142,62701,14],{"class":51329},[142,62703,53515],{"class":1991},[142,62705,198],{"class":152},[142,62707,62708],{"class":257},"\"name\"",[142,62710,62711],{"class":152},">清风徐来\u003C\u002F",[142,62713,14],{"class":51329},[142,62715,51336],{"class":152},[142,62717,62718,62720,62722,62724,62726,62729,62732,62734],{"class":144,"line":32802},[142,62719,55331],{"class":152},[142,62721,14],{"class":51329},[142,62723,53515],{"class":1991},[142,62725,198],{"class":152},[142,62727,62728],{"class":257},"\"text\"",[142,62730,62731],{"class":152},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[142,62733,14],{"class":51329},[142,62735,51336],{"class":152},[142,62737,62738,62740,62742,62744,62746,62749,62752,62754],{"class":144,"line":32808},[142,62739,55331],{"class":152},[142,62741,14],{"class":51329},[142,62743,53515],{"class":1991},[142,62745,198],{"class":152},[142,62747,62748],{"class":257},"\"time\"",[142,62750,62751],{"class":152},">2022-10-10 20:29:21\u003C\u002F",[142,62753,14],{"class":51329},[142,62755,51336],{"class":152},[142,62757,62758,62760,62762],{"class":144,"line":32824},[142,62759,55436],{"class":152},[142,62761,51640],{"class":51329},[142,62763,51336],{"class":152},[142,62765,62766,62768,62770],{"class":144,"line":32830},[142,62767,51805],{"class":152},[142,62769,51640],{"class":51329},[142,62771,51336],{"class":152},[142,62773,62774,62776,62778],{"class":144,"line":32844},[142,62775,52446],{"class":152},[142,62777,51640],{"class":51329},[142,62779,51336],{"class":152},[142,62781,62782,62784,62786],{"class":144,"line":32850},[142,62783,52173],{"class":152},[142,62785,51842],{"class":51329},[142,62787,51336],{"class":152},[142,62789,62790,62792,62795,62797,62799,62801,62803,62806],{"class":144,"line":32865},[142,62791,11250],{"class":148},[142,62793,62794],{"class":201}," tx",[142,62796,13593],{"class":148},[142,62798,54425],{"class":152},[142,62800,54428],{"class":1991},[142,62802,153],{"class":152},[142,62804,62805],{"class":257},"'#tx'",[142,62807,159],{"class":152},[142,62809,62810,62812,62815,62817,62819,62821,62823,62826],{"class":144,"line":32871},[142,62811,11250],{"class":148},[142,62813,62814],{"class":201}," total",[142,62816,13593],{"class":148},[142,62818,54425],{"class":152},[142,62820,54428],{"class":1991},[142,62822,153],{"class":152},[142,62824,62825],{"class":257},"'.total'",[142,62827,159],{"class":152},[142,62829,62830],{"class":144,"line":32880},[142,62831,62832],{"class":211},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[142,62834,62835,62838,62840,62842,62844,62846,62848],{"class":144,"line":32886},[142,62836,62837],{"class":152},"    tx.",[142,62839,57842],{"class":1991},[142,62841,153],{"class":152},[142,62843,61356],{"class":257},[142,62845,12464],{"class":152},[142,62847,54478],{"class":148},[142,62849,54481],{"class":152},[142,62851,62852,62855,62857],{"class":144,"line":32895},[142,62853,62854],{"class":152},"      total.style.opacity ",[142,62856,198],{"class":148},[142,62858,55728],{"class":201},[142,62860,62861],{"class":144,"line":32901},[142,62862,33490],{"class":152},[142,62864,62865],{"class":144,"line":32907},[142,62866,62867],{"class":211},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[142,62869,62870,62872,62874,62876,62878,62880,62882],{"class":144,"line":32916},[142,62871,62837],{"class":152},[142,62873,57842],{"class":1991},[142,62875,153],{"class":152},[142,62877,61417],{"class":257},[142,62879,12464],{"class":152},[142,62881,54478],{"class":148},[142,62883,54481],{"class":152},[142,62885,62886,62888,62890],{"class":144,"line":32922},[142,62887,62854],{"class":152},[142,62889,198],{"class":148},[142,62891,47362],{"class":201},[142,62893,62894],{"class":144,"line":32933},[142,62895,33490],{"class":152},[142,62897,62898],{"class":144,"line":32939},[142,62899,62900],{"class":211},"    \u002F\u002F 3. 检测用户输入\n",[142,62902,62903,62905,62907,62909,62912,62914,62916],{"class":144,"line":32958},[142,62904,62837],{"class":152},[142,62906,57842],{"class":1991},[142,62908,153],{"class":152},[142,62910,62911],{"class":257},"'input'",[142,62913,12464],{"class":152},[142,62915,54478],{"class":148},[142,62917,54481],{"class":152},[142,62919,62920],{"class":144,"line":32964},[142,62921,62922],{"class":211},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[142,62924,62925,62928,62930,62933,62936,62938,62941,62943,62945],{"class":144,"line":32975},[142,62926,62927],{"class":152},"      total.innerHTML ",[142,62929,198],{"class":148},[142,62931,62932],{"class":257}," `${",[142,62934,62935],{"class":152},"tx",[142,62937,711],{"class":257},[142,62939,62940],{"class":152},"value",[142,62942,711],{"class":257},[142,62944,51997],{"class":201},[142,62946,62947],{"class":257},"}\u002F200字`\n",[142,62949,62950],{"class":144,"line":32981},[142,62951,33490],{"class":152},[142,62953,62954],{"class":144,"line":33001},[142,62955,2428],{"emptyLinePlaceholder":69},[142,62957,62958],{"class":144,"line":33017},[142,62959,62960],{"class":211},"    \u002F\u002F const str = 'andy'\n",[142,62962,62963],{"class":144,"line":33023},[142,62964,62965],{"class":211},"    \u002F\u002F console.log(str.length)\n",[142,62967,62968,62970,62972],{"class":144,"line":33037},[142,62969,52446],{"class":152},[142,62971,51842],{"class":51329},[142,62973,51336],{"class":152},[142,62975,62976,62978,62980],{"class":144,"line":33043},[142,62977,51814],{"class":152},[142,62979,51829],{"class":51329},[142,62981,51336],{"class":152},[142,62983,62984],{"class":144,"line":33049},[142,62985,2428],{"emptyLinePlaceholder":69},[142,62987,62988,62990,62992],{"class":144,"line":33060},[142,62989,51814],{"class":152},[142,62991,50664],{"class":51329},[142,62993,51336],{"class":152},[22027,62995,62997],{"id":62996},"_3254-change事件","3.2.5.4 change事件",[14,62999,63000],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63002,63003],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63005,63006],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[133,63008,63010],{"className":50662,"code":63009,"language":50664,"meta":31,"style":31},"\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",[139,63011,63012,63022,63036,63040,63048,63062,63082,63094,63102,63106,63114,63128,63136,63154,63172,63184,63188,63196,63204,63208],{"__ignoreMap":31},[142,63013,63014,63016,63018,63020],{"class":144,"line":145},[142,63015,51326],{"class":152},[142,63017,51330],{"class":51329},[142,63019,51333],{"class":1991},[142,63021,51336],{"class":152},[142,63023,63024,63026,63028,63030,63032,63034],{"class":144,"line":64},[142,63025,1063],{"class":152},[142,63027,50664],{"class":51329},[142,63029,51345],{"class":1991},[142,63031,198],{"class":152},[142,63033,51350],{"class":257},[142,63035,51336],{"class":152},[142,63037,63038],{"class":144,"line":1208},[142,63039,2428],{"emptyLinePlaceholder":69},[142,63041,63042,63044,63046],{"class":144,"line":1223},[142,63043,1063],{"class":152},[142,63045,51363],{"class":51329},[142,63047,51336],{"class":152},[142,63049,63050,63052,63054,63056,63058,63060],{"class":144,"line":1229},[142,63051,52173],{"class":152},[142,63053,51373],{"class":51329},[142,63055,51376],{"class":1991},[142,63057,198],{"class":152},[142,63059,51381],{"class":257},[142,63061,51336],{"class":152},[142,63063,63064,63066,63068,63070,63072,63074,63076,63078,63080],{"class":144,"line":1243},[142,63065,52173],{"class":152},[142,63067,51373],{"class":51329},[142,63069,14949],{"class":1991},[142,63071,198],{"class":152},[142,63073,51420],{"class":257},[142,63075,51400],{"class":1991},[142,63077,198],{"class":152},[142,63079,51427],{"class":257},[142,63081,51336],{"class":152},[142,63083,63084,63086,63088,63090,63092],{"class":144,"line":1249},[142,63085,52173],{"class":152},[142,63087,51436],{"class":51329},[142,63089,51439],{"class":152},[142,63091,51436],{"class":51329},[142,63093,51336],{"class":152},[142,63095,63096,63098,63100],{"class":144,"line":1340},[142,63097,51814],{"class":152},[142,63099,51363],{"class":51329},[142,63101,51336],{"class":152},[142,63103,63104],{"class":144,"line":1346},[142,63105,2428],{"emptyLinePlaceholder":69},[142,63107,63108,63110,63112],{"class":144,"line":1358},[142,63109,1063],{"class":152},[142,63111,51829],{"class":51329},[142,63113,51336],{"class":152},[142,63115,63116,63118,63120,63122,63124,63126],{"class":144,"line":1640},[142,63117,52173],{"class":152},[142,63119,53850],{"class":51329},[142,63121,53853],{"class":1991},[142,63123,198],{"class":152},[142,63125,62728],{"class":257},[142,63127,51336],{"class":152},[142,63129,63130,63132,63134],{"class":144,"line":1645},[142,63131,52173],{"class":152},[142,63133,51842],{"class":51329},[142,63135,51336],{"class":152},[142,63137,63138,63140,63142,63144,63146,63148,63150,63152],{"class":144,"line":1651},[142,63139,11250],{"class":148},[142,63141,60634],{"class":201},[142,63143,13593],{"class":148},[142,63145,54425],{"class":152},[142,63147,54428],{"class":1991},[142,63149,153],{"class":152},[142,63151,62911],{"class":257},[142,63153,159],{"class":152},[142,63155,63156,63159,63161,63163,63166,63168,63170],{"class":144,"line":1656},[142,63157,63158],{"class":152},"    input.",[142,63160,57842],{"class":1991},[142,63162,153],{"class":152},[142,63164,63165],{"class":257},"'change'",[142,63167,12464],{"class":152},[142,63169,54478],{"class":148},[142,63171,54481],{"class":152},[142,63173,63174,63176,63178,63180,63182],{"class":144,"line":1670},[142,63175,58273],{"class":152},[142,63177,58276],{"class":1991},[142,63179,153],{"class":152},[142,63181,746],{"class":201},[142,63183,159],{"class":152},[142,63185,63186],{"class":144,"line":1675},[142,63187,33490],{"class":152},[142,63189,63190,63192,63194],{"class":144,"line":1681},[142,63191,52446],{"class":152},[142,63193,51842],{"class":51329},[142,63195,51336],{"class":152},[142,63197,63198,63200,63202],{"class":144,"line":1702},[142,63199,51814],{"class":152},[142,63201,51829],{"class":51329},[142,63203,51336],{"class":152},[142,63205,63206],{"class":144,"line":1707},[142,63207,2428],{"emptyLinePlaceholder":69},[142,63209,63210,63212,63214],{"class":144,"line":1721},[142,63211,51814],{"class":152},[142,63213,50664],{"class":51329},[142,63215,51336],{"class":152},[14,63217,63218],{},"总结：内容发生改变才回去触发",[113,63220,63222],{"id":63221},"_326-事件对象","3.2.6 事件对象",[22027,63224,63226],{"id":63225},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63228,63229],{},[29,63230],{"alt":31,"src":63231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63233,63234],{},[29,63235],{"alt":31,"src":63236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63238,63239],{},"点击一次，就输出了事件对象，它是个对象",[14,63241,63242],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63244,63245],{},[29,63246],{"alt":31,"src":63247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22027,63249,63251],{"id":63250},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63253,63254],{},[29,63255],{"alt":31,"src":63256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63258,63259],{},"实现按特殊字符才是实现打印输出效果：",[133,63261,63263],{"className":53096,"code":63262,"language":53098,"meta":31,"style":31},"\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",[139,63264,63265,63273,63278,63292,63300,63305,63310,63315,63320,63325,63330,63335,63340,63345,63349,63353,63361],{"__ignoreMap":31},[142,63266,63267,63269,63271],{"class":144,"line":145},[142,63268,1063],{"class":152},[142,63270,51829],{"class":51329},[142,63272,51336],{"class":152},[142,63274,63275],{"class":144,"line":64},[142,63276,63277],{"class":211},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[142,63279,63280,63282,63284,63286,63288,63290],{"class":144,"line":1208},[142,63281,52173],{"class":152},[142,63283,53850],{"class":51329},[142,63285,53853],{"class":1991},[142,63287,198],{"class":152},[142,63289,62728],{"class":257},[142,63291,51336],{"class":152},[142,63293,63294,63296,63298],{"class":144,"line":1223},[142,63295,52173],{"class":152},[142,63297,51842],{"class":51329},[142,63299,51336],{"class":152},[142,63301,63302],{"class":144,"line":1229},[142,63303,63304],{"class":152},"    \u002F\u002F const btn = document.querySelector('button')\n",[142,63306,63307],{"class":144,"line":1243},[142,63308,63309],{"class":152},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[142,63311,63312],{"class":144,"line":1249},[142,63313,63314],{"class":152},"    \u002F\u002F   console.log(e);\n",[142,63316,63317],{"class":144,"line":1340},[142,63318,63319],{"class":152},"    \u002F\u002F })\n",[142,63321,63322],{"class":144,"line":1346},[142,63323,63324],{"class":152},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[142,63326,63327],{"class":144,"line":1358},[142,63328,63329],{"class":152},"    const input = document.querySelector('input')\n",[142,63331,63332],{"class":144,"line":1640},[142,63333,63334],{"class":152},"    input.addEventListener('keyup', function (e) {\n",[142,63336,63337],{"class":144,"line":1645},[142,63338,63339],{"class":152},"      if (e.key === 'Enter') {\n",[142,63341,63342],{"class":144,"line":1651},[142,63343,63344],{"class":152},"        console.log('我按下了回车键')\n",[142,63346,63347],{"class":144,"line":1656},[142,63348,52427],{"class":152},[142,63350,63351],{"class":144,"line":1670},[142,63352,33490],{"class":152},[142,63354,63355,63357,63359],{"class":144,"line":1675},[142,63356,52446],{"class":152},[142,63358,51842],{"class":51329},[142,63360,51336],{"class":152},[142,63362,63363,63365,63367],{"class":144,"line":1681},[142,63364,51814],{"class":152},[142,63366,51829],{"class":51329},[142,63368,51336],{"class":152},[22027,63370,63372],{"id":63371},"_3263-trim方法","3.2.6.3 trim方法",[14,63374,63375],{},[29,63376],{"alt":31,"src":63377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63379,63380],{},[29,63381],{"alt":31,"src":63382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63384,63385],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63387,63388],{},"str.trim()",[113,63390,63392],{"id":63391},"_327-环境对象","3.2.7 环境对象",[14,63394,63395],{},[29,63396],{"alt":31,"src":63397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63399,63400],{},[29,63401],{"alt":31,"src":63402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63404,63405],{},[29,63406],{"alt":31,"src":63407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63409,63410],{},"实际函数调用是window.fn()",[14,63412,63413],{},"普通函数里面this指向的是window",[1160,63415,63416,63419,63422],{},[99,63417,63418],{},"在普通函数下，this指向的是window",[99,63420,63421],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[99,63423,63424],{},"箭头函数没有this",[14,63426,63427],{},"粗略记法就是：谁调用，this就指向谁",[14,63429,63430],{},[29,63431],{"alt":31,"src":63432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63434,63435],{},[29,63436],{"alt":31,"src":63437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63439,63440],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63442,63443],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[133,63445,63447],{"className":53096,"code":63446,"language":53098,"meta":31,"style":31},"\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",[139,63448,63449,63457,63469,63477,63482,63487,63492,63497,63501,63509],{"__ignoreMap":31},[142,63450,63451,63453,63455],{"class":144,"line":145},[142,63452,1063],{"class":152},[142,63454,51829],{"class":51329},[142,63456,51336],{"class":152},[142,63458,63459,63461,63463,63465,63467],{"class":144,"line":64},[142,63460,52173],{"class":152},[142,63462,53916],{"class":51329},[142,63464,53922],{"class":152},[142,63466,53916],{"class":51329},[142,63468,51336],{"class":152},[142,63470,63471,63473,63475],{"class":144,"line":1208},[142,63472,52173],{"class":152},[142,63474,51842],{"class":51329},[142,63476,51336],{"class":152},[142,63478,63479],{"class":144,"line":1223},[142,63480,63481],{"class":152},"    const button = document.querySelector('button')\n",[142,63483,63484],{"class":144,"line":1229},[142,63485,63486],{"class":152},"    button.addEventListener('click', function () {\n",[142,63488,63489],{"class":144,"line":1243},[142,63490,63491],{"class":152},"      \u002F\u002F console.log(this);\n",[142,63493,63494],{"class":144,"line":1249},[142,63495,63496],{"class":152},"      this.style.color = 'pink'\n",[142,63498,63499],{"class":144,"line":1340},[142,63500,33490],{"class":152},[142,63502,63503,63505,63507],{"class":144,"line":1346},[142,63504,52446],{"class":152},[142,63506,51842],{"class":51329},[142,63508,51336],{"class":152},[142,63510,63511,63513,63515],{"class":144,"line":1358},[142,63512,51814],{"class":152},[142,63514,51829],{"class":51329},[142,63516,51336],{"class":152},[113,63518,63520],{"id":63519},"_328-回调函数","3.2.8 回调函数",[14,63522,63523],{},[29,63524],{"alt":31,"src":63525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63527,63528],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63530,11361],{},[1160,63532,63533,63536,63539],{},[99,63534,63535],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[99,63537,63538],{},"回调函数本质还是函数，只不过把它当成参数使用",[99,63540,63541],{},"使用匿名函数做为回调函数比较常见",[113,63543,63545],{"id":63544},"_329-tab栏切换","3.2.9 tab栏切换",[14,63547,63548],{},[29,63549],{"alt":31,"src":63550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[133,63552,63554],{"className":50662,"code":63553,"language":50664,"meta":31,"style":31},"\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",[139,63555,63556,63566,63580,63584,63592,63606,63626,63646,63659,63667,63673,63683,63693,63697,63701,63708,63721,63734,63746,63762,63766,63770,63777,63789,63801,63813,63823,63833,63837,63841,63850,63862,63873,63885,63889,63893,63901,63911,63921,63931,63935,63939,63949,63963,63975,63979,63983,63995,64006,64023,64033,64037,64041,64056,64067,64077,64081,64085,64092,64107,64111,64115,64123,64133,64137,64141,64150,64160,64164,64172,64180,64184,64192,64207,64222,64235,64243,64277,64304,64331,64358,64385,64393,64401,64416,64453,64488,64523,64558,64593,64601,64609,64617,64622,64627,64647,64652,64681,64686,64691,64709,64714,64719,64724,64746,64751,64767,64771,64776,64781,64802,64807,64836,64840,64845,64849,64857,64865,64869],{"__ignoreMap":31},[142,63557,63558,63560,63562,63564],{"class":144,"line":145},[142,63559,51326],{"class":152},[142,63561,51330],{"class":51329},[142,63563,51333],{"class":1991},[142,63565,51336],{"class":152},[142,63567,63568,63570,63572,63574,63576,63578],{"class":144,"line":64},[142,63569,1063],{"class":152},[142,63571,50664],{"class":51329},[142,63573,51345],{"class":1991},[142,63575,198],{"class":152},[142,63577,51350],{"class":257},[142,63579,51336],{"class":152},[142,63581,63582],{"class":144,"line":1208},[142,63583,2428],{"emptyLinePlaceholder":69},[142,63585,63586,63588,63590],{"class":144,"line":1223},[142,63587,1063],{"class":152},[142,63589,51363],{"class":51329},[142,63591,51336],{"class":152},[142,63593,63594,63596,63598,63600,63602,63604],{"class":144,"line":1229},[142,63595,52173],{"class":152},[142,63597,51373],{"class":51329},[142,63599,51376],{"class":1991},[142,63601,198],{"class":152},[142,63603,51381],{"class":257},[142,63605,59156],{"class":152},[142,63607,63608,63610,63612,63614,63616,63618,63620,63622,63624],{"class":144,"line":1243},[142,63609,52173],{"class":152},[142,63611,51373],{"class":51329},[142,63613,51392],{"class":1991},[142,63615,198],{"class":152},[142,63617,51397],{"class":257},[142,63619,51400],{"class":1991},[142,63621,198],{"class":152},[142,63623,51405],{"class":257},[142,63625,59156],{"class":152},[142,63627,63628,63630,63632,63634,63636,63638,63640,63642,63644],{"class":144,"line":1249},[142,63629,52173],{"class":152},[142,63631,51373],{"class":51329},[142,63633,14949],{"class":1991},[142,63635,198],{"class":152},[142,63637,51420],{"class":257},[142,63639,51400],{"class":1991},[142,63641,198],{"class":152},[142,63643,51427],{"class":257},[142,63645,59156],{"class":152},[142,63647,63648,63650,63652,63655,63657],{"class":144,"line":1340},[142,63649,52173],{"class":152},[142,63651,51436],{"class":51329},[142,63653,63654],{"class":152},">tab栏切换\u003C\u002F",[142,63656,51436],{"class":51329},[142,63658,51336],{"class":152},[142,63660,63661,63663,63665],{"class":144,"line":1346},[142,63662,52173],{"class":152},[142,63664,5155],{"class":51329},[142,63666,51336],{"class":152},[142,63668,63669,63671],{"class":144,"line":1358},[142,63670,6432],{"class":51329},[142,63672,15601],{"class":152},[142,63674,63675,63677,63679,63681],{"class":144,"line":1640},[142,63676,54735],{"class":201},[142,63678,51466],{"class":152},[142,63680,344],{"class":201},[142,63682,1319],{"class":152},[142,63684,63685,63687,63689,63691],{"class":144,"line":1645},[142,63686,54724],{"class":201},[142,63688,51466],{"class":152},[142,63690,344],{"class":201},[142,63692,1319],{"class":152},[142,63694,63695],{"class":144,"line":1651},[142,63696,2215],{"class":152},[142,63698,63699],{"class":144,"line":1656},[142,63700,2428],{"emptyLinePlaceholder":69},[142,63702,63703,63706],{"class":144,"line":1670},[142,63704,63705],{"class":1991},"    .tab",[142,63707,15601],{"class":152},[142,63709,63710,63712,63714,63717,63719],{"class":144,"line":1675},[142,63711,54800],{"class":201},[142,63713,51466],{"class":152},[142,63715,63716],{"class":201},"590",[142,63718,51521],{"class":148},[142,63720,1319],{"class":152},[142,63722,63723,63725,63727,63730,63732],{"class":144,"line":1681},[142,63724,54814],{"class":201},[142,63726,51466],{"class":152},[142,63728,63729],{"class":201},"340",[142,63731,51521],{"class":148},[142,63733,1319],{"class":152},[142,63735,63736,63738,63740,63742,63744],{"class":144,"line":1702},[142,63737,54735],{"class":201},[142,63739,51466],{"class":152},[142,63741,853],{"class":201},[142,63743,51521],{"class":148},[142,63745,1319],{"class":152},[142,63747,63748,63750,63752,63754,63756,63758,63760],{"class":144,"line":1707},[142,63749,62006],{"class":201},[142,63751,51466],{"class":152},[142,63753,370],{"class":201},[142,63755,51521],{"class":148},[142,63757,51550],{"class":201},[142,63759,62273],{"class":201},[142,63761,1319],{"class":152},[142,63763,63764],{"class":144,"line":1721},[142,63765,2215],{"class":152},[142,63767,63768],{"class":144,"line":1726},[142,63769,2428],{"emptyLinePlaceholder":69},[142,63771,63772,63775],{"class":144,"line":1755},[142,63773,63774],{"class":1991},"    .tab-nav",[142,63776,15601],{"class":152},[142,63778,63779,63781,63783,63785,63787],{"class":144,"line":1760},[142,63780,54800],{"class":201},[142,63782,51466],{"class":152},[142,63784,464],{"class":201},[142,63786,481],{"class":148},[142,63788,1319],{"class":152},[142,63790,63791,63793,63795,63797,63799],{"class":144,"line":1777},[142,63792,54814],{"class":201},[142,63794,51466],{"class":152},[142,63796,1060],{"class":201},[142,63798,51521],{"class":148},[142,63800,1319],{"class":152},[142,63802,63803,63805,63807,63809,63811],{"class":144,"line":1782},[142,63804,57388],{"class":201},[142,63806,51466],{"class":152},[142,63808,1060],{"class":201},[142,63810,51521],{"class":148},[142,63812,1319],{"class":152},[142,63814,63815,63817,63819,63821],{"class":144,"line":1787},[142,63816,55038],{"class":201},[142,63818,51466],{"class":152},[142,63820,51506],{"class":201},[142,63822,1319],{"class":152},[142,63824,63825,63827,63829,63831],{"class":144,"line":1792},[142,63826,55049],{"class":201},[142,63828,51466],{"class":152},[142,63830,51697],{"class":201},[142,63832,1319],{"class":152},[142,63834,63835],{"class":144,"line":1806},[142,63836,2215],{"class":152},[142,63838,63839],{"class":144,"line":1811},[142,63840,2428],{"emptyLinePlaceholder":69},[142,63842,63843,63845,63848],{"class":144,"line":2605},[142,63844,63774],{"class":1991},[142,63846,63847],{"class":51329}," h3",[142,63849,15601],{"class":152},[142,63851,63852,63854,63856,63858,63860],{"class":144,"line":2619},[142,63853,54951],{"class":201},[142,63855,51466],{"class":152},[142,63857,953],{"class":201},[142,63859,51521],{"class":148},[142,63861,1319],{"class":152},[142,63863,63864,63866,63868,63871],{"class":144,"line":2627},[142,63865,62363],{"class":201},[142,63867,51466],{"class":152},[142,63869,63870],{"class":201},"normal",[142,63872,1319],{"class":152},[142,63874,63875,63877,63879,63881,63883],{"class":144,"line":2632},[142,63876,62029],{"class":201},[142,63878,51466],{"class":152},[142,63880,853],{"class":201},[142,63882,51521],{"class":148},[142,63884,1319],{"class":152},[142,63886,63887],{"class":144,"line":2638},[142,63888,2215],{"class":152},[142,63890,63891],{"class":144,"line":2644},[142,63892,2428],{"emptyLinePlaceholder":69},[142,63894,63895,63897,63899],{"class":144,"line":2649},[142,63896,63774],{"class":1991},[142,63898,61321],{"class":51329},[142,63900,15601],{"class":152},[142,63902,63903,63905,63907,63909],{"class":144,"line":7977},[142,63904,54761],{"class":201},[142,63906,51466],{"class":152},[142,63908,54766],{"class":201},[142,63910,1319],{"class":152},[142,63912,63913,63915,63917,63919],{"class":144,"line":8001},[142,63914,55038],{"class":201},[142,63916,51466],{"class":152},[142,63918,51506],{"class":201},[142,63920,1319],{"class":152},[142,63922,63923,63925,63927,63929],{"class":144,"line":8006},[142,63924,55049],{"class":201},[142,63926,51466],{"class":152},[142,63928,51609],{"class":201},[142,63930,1319],{"class":152},[142,63932,63933],{"class":144,"line":8012},[142,63934,2215],{"class":152},[142,63936,63937],{"class":144,"line":8039},[142,63938,2428],{"emptyLinePlaceholder":69},[142,63940,63941,63943,63945,63947],{"class":144,"line":8044},[142,63942,63774],{"class":1991},[142,63944,61321],{"class":51329},[142,63946,55104],{"class":51329},[142,63948,15601],{"class":152},[142,63950,63951,63953,63955,63957,63959,63961],{"class":144,"line":8050},[142,63952,54735],{"class":201},[142,63954,51466],{"class":152},[142,63956,344],{"class":201},[142,63958,8979],{"class":201},[142,63960,51521],{"class":148},[142,63962,1319],{"class":152},[142,63964,63965,63967,63969,63971,63973],{"class":144,"line":8062},[142,63966,54951],{"class":201},[142,63968,51466],{"class":152},[142,63970,702],{"class":201},[142,63972,51521],{"class":148},[142,63974,1319],{"class":152},[142,63976,63977],{"class":144,"line":8074},[142,63978,2215],{"class":152},[142,63980,63981],{"class":144,"line":8086},[142,63982,2428],{"emptyLinePlaceholder":69},[142,63984,63985,63987,63989,63991,63993],{"class":144,"line":9745},[142,63986,63774],{"class":1991},[142,63988,61321],{"class":51329},[142,63990,55104],{"class":51329},[142,63992,1427],{"class":51329},[142,63994,15601],{"class":152},[142,63996,63997,64000,64002,64004],{"class":144,"line":9770},[142,63998,63999],{"class":201},"      text-decoration",[142,64001,51466],{"class":152},[142,64003,54766],{"class":201},[142,64005,1319],{"class":152},[142,64007,64008,64010,64012,64014,64016,64018,64021],{"class":144,"line":9793},[142,64009,62261],{"class":201},[142,64011,51466],{"class":152},[142,64013,230],{"class":201},[142,64015,51521],{"class":148},[142,64017,51550],{"class":201},[142,64019,64020],{"class":201}," transparent",[142,64022,1319],{"class":152},[142,64024,64025,64027,64029,64031],{"class":144,"line":9817},[142,64026,57445],{"class":201},[142,64028,51466],{"class":152},[142,64030,62398],{"class":201},[142,64032,1319],{"class":152},[142,64034,64035],{"class":144,"line":9822},[142,64036,2215],{"class":152},[142,64038,64039],{"class":144,"line":9827},[142,64040,2428],{"emptyLinePlaceholder":69},[142,64042,64043,64045,64047,64049,64051,64054],{"class":144,"line":9832},[142,64044,63774],{"class":1991},[142,64046,61321],{"class":51329},[142,64048,55104],{"class":51329},[142,64050,1427],{"class":51329},[142,64052,64053],{"class":1991},".active",[142,64055,15601],{"class":152},[142,64057,64058,64060,64062,64065],{"class":144,"line":9841},[142,64059,61820],{"class":201},[142,64061,51466],{"class":152},[142,64063,64064],{"class":201},"#e1251b",[142,64066,1319],{"class":152},[142,64068,64069,64071,64073,64075],{"class":144,"line":9846},[142,64070,57445],{"class":201},[142,64072,51466],{"class":152},[142,64074,64064],{"class":201},[142,64076,1319],{"class":152},[142,64078,64079],{"class":144,"line":9852},[142,64080,2215],{"class":152},[142,64082,64083],{"class":144,"line":9873},[142,64084,2428],{"emptyLinePlaceholder":69},[142,64086,64087,64090],{"class":144,"line":9879},[142,64088,64089],{"class":1991},"    .tab-content",[142,64091,15601],{"class":152},[142,64093,64094,64096,64098,64100,64103,64105],{"class":144,"line":9893},[142,64095,54724],{"class":201},[142,64097,51466],{"class":152},[142,64099,344],{"class":201},[142,64101,64102],{"class":201}," 16",[142,64104,51521],{"class":148},[142,64106,1319],{"class":152},[142,64108,64109],{"class":144,"line":9899},[142,64110,2215],{"class":152},[142,64112,64113],{"class":144,"line":9926},[142,64114,2428],{"emptyLinePlaceholder":69},[142,64116,64117,64119,64121],{"class":144,"line":9935},[142,64118,64089],{"class":1991},[142,64120,62203],{"class":1991},[142,64122,15601],{"class":152},[142,64124,64125,64127,64129,64131],{"class":144,"line":9941},[142,64126,55038],{"class":201},[142,64128,51466],{"class":152},[142,64130,54766],{"class":201},[142,64132,1319],{"class":152},[142,64134,64135],{"class":144,"line":9949},[142,64136,2215],{"class":152},[142,64138,64139],{"class":144,"line":9954},[142,64140,2428],{"emptyLinePlaceholder":69},[142,64142,64143,64145,64148],{"class":144,"line":16633},[142,64144,64089],{"class":1991},[142,64146,64147],{"class":1991}," .item.active",[142,64149,15601],{"class":152},[142,64151,64152,64154,64156,64158],{"class":144,"line":16639},[142,64153,55038],{"class":201},[142,64155,51466],{"class":152},[142,64157,60898],{"class":201},[142,64159,1319],{"class":152},[142,64161,64162],{"class":144,"line":16662},[142,64163,2215],{"class":152},[142,64165,64166,64168,64170],{"class":144,"line":16668},[142,64167,52446],{"class":152},[142,64169,5155],{"class":51329},[142,64171,51336],{"class":152},[142,64173,64174,64176,64178],{"class":144,"line":16691},[142,64175,51814],{"class":152},[142,64177,51363],{"class":51329},[142,64179,51336],{"class":152},[142,64181,64182],{"class":144,"line":16705},[142,64183,2428],{"emptyLinePlaceholder":69},[142,64185,64186,64188,64190],{"class":144,"line":16725},[142,64187,1063],{"class":152},[142,64189,51829],{"class":51329},[142,64191,51336],{"class":152},[142,64193,64194,64196,64198,64200,64202,64205],{"class":144,"line":16731},[142,64195,52173],{"class":152},[142,64197,51640],{"class":51329},[142,64199,53515],{"class":1991},[142,64201,198],{"class":152},[142,64203,64204],{"class":257},"\"tab\"",[142,64206,51336],{"class":152},[142,64208,64209,64211,64213,64215,64217,64220],{"class":144,"line":16742},[142,64210,51370],{"class":152},[142,64212,51640],{"class":51329},[142,64214,53515],{"class":1991},[142,64216,198],{"class":152},[142,64218,64219],{"class":257},"\"tab-nav\"",[142,64221,51336],{"class":152},[142,64223,64224,64226,64228,64231,64233],{"class":144,"line":16765},[142,64225,55263],{"class":152},[142,64227,113],{"class":51329},[142,64229,64230],{"class":152},">每日特价\u003C\u002F",[142,64232,113],{"class":51329},[142,64234,51336],{"class":152},[142,64236,64237,64239,64241],{"class":144,"line":16787},[142,64238,55263],{"class":152},[142,64240,1160],{"class":51329},[142,64242,51336],{"class":152},[142,64244,64245,64247,64249,64251,64253,64255,64257,64259,64261,64263,64266,64269,64271,64273,64275],{"class":144,"line":16792},[142,64246,55331],{"class":152},[142,64248,99],{"class":51329},[142,64250,61081],{"class":152},[142,64252,391],{"class":51329},[142,64254,53515],{"class":1991},[142,64256,198],{"class":152},[142,64258,59735],{"class":257},[142,64260,61086],{"class":1991},[142,64262,198],{"class":152},[142,64264,64265],{"class":257},"\"javascript:;\"",[142,64267,64268],{"class":152},">精选\u003C\u002F",[142,64270,391],{"class":51329},[142,64272,55343],{"class":152},[142,64274,99],{"class":51329},[142,64276,51336],{"class":152},[142,64278,64279,64281,64283,64285,64287,64289,64291,64293,64296,64298,64300,64302],{"class":144,"line":16798},[142,64280,55331],{"class":152},[142,64282,99],{"class":51329},[142,64284,61081],{"class":152},[142,64286,391],{"class":51329},[142,64288,61086],{"class":1991},[142,64290,198],{"class":152},[142,64292,64265],{"class":257},[142,64294,64295],{"class":152},">美食\u003C\u002F",[142,64297,391],{"class":51329},[142,64299,55343],{"class":152},[142,64301,99],{"class":51329},[142,64303,51336],{"class":152},[142,64305,64306,64308,64310,64312,64314,64316,64318,64320,64323,64325,64327,64329],{"class":144,"line":16812},[142,64307,55331],{"class":152},[142,64309,99],{"class":51329},[142,64311,61081],{"class":152},[142,64313,391],{"class":51329},[142,64315,61086],{"class":1991},[142,64317,198],{"class":152},[142,64319,64265],{"class":257},[142,64321,64322],{"class":152},">百货\u003C\u002F",[142,64324,391],{"class":51329},[142,64326,55343],{"class":152},[142,64328,99],{"class":51329},[142,64330,51336],{"class":152},[142,64332,64333,64335,64337,64339,64341,64343,64345,64347,64350,64352,64354,64356],{"class":144,"line":16825},[142,64334,55331],{"class":152},[142,64336,99],{"class":51329},[142,64338,61081],{"class":152},[142,64340,391],{"class":51329},[142,64342,61086],{"class":1991},[142,64344,198],{"class":152},[142,64346,64265],{"class":257},[142,64348,64349],{"class":152},">个护\u003C\u002F",[142,64351,391],{"class":51329},[142,64353,55343],{"class":152},[142,64355,99],{"class":51329},[142,64357,51336],{"class":152},[142,64359,64360,64362,64364,64366,64368,64370,64372,64374,64377,64379,64381,64383],{"class":144,"line":16830},[142,64361,55331],{"class":152},[142,64363,99],{"class":51329},[142,64365,61081],{"class":152},[142,64367,391],{"class":51329},[142,64369,61086],{"class":1991},[142,64371,198],{"class":152},[142,64373,64265],{"class":257},[142,64375,64376],{"class":152},">预告\u003C\u002F",[142,64378,391],{"class":51329},[142,64380,55343],{"class":152},[142,64382,99],{"class":51329},[142,64384,51336],{"class":152},[142,64386,64387,64389,64391],{"class":144,"line":16844},[142,64388,55436],{"class":152},[142,64390,1160],{"class":51329},[142,64392,51336],{"class":152},[142,64394,64395,64397,64399],{"class":144,"line":16849},[142,64396,51805],{"class":152},[142,64398,51640],{"class":51329},[142,64400,51336],{"class":152},[142,64402,64403,64405,64407,64409,64411,64414],{"class":144,"line":16855},[142,64404,51370],{"class":152},[142,64406,51640],{"class":51329},[142,64408,53515],{"class":1991},[142,64410,198],{"class":152},[142,64412,64413],{"class":257},"\"tab-content\"",[142,64415,51336],{"class":152},[142,64417,64418,64420,64422,64424,64426,64429,64431,64433,64435,64437,64440,64442,64444,64446,64449,64451],{"class":144,"line":16860},[142,64419,55263],{"class":152},[142,64421,51640],{"class":51329},[142,64423,53515],{"class":1991},[142,64425,198],{"class":152},[142,64427,64428],{"class":257},"\"item active\"",[142,64430,61081],{"class":152},[142,64432,29],{"class":51329},[142,64434,55268],{"class":1991},[142,64436,198],{"class":152},[142,64438,64439],{"class":257},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[142,64441,55276],{"class":1991},[142,64443,198],{"class":152},[142,64445,7681],{"class":257},[142,64447,64448],{"class":152}," \u002F>\u003C\u002F",[142,64450,51640],{"class":51329},[142,64452,51336],{"class":152},[142,64454,64455,64457,64459,64461,64463,64465,64467,64469,64471,64473,64476,64478,64480,64482,64484,64486],{"class":144,"line":16874},[142,64456,55263],{"class":152},[142,64458,51640],{"class":51329},[142,64460,53515],{"class":1991},[142,64462,198],{"class":152},[142,64464,62652],{"class":257},[142,64466,61081],{"class":152},[142,64468,29],{"class":51329},[142,64470,55268],{"class":1991},[142,64472,198],{"class":152},[142,64474,64475],{"class":257},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[142,64477,55276],{"class":1991},[142,64479,198],{"class":152},[142,64481,7681],{"class":257},[142,64483,64448],{"class":152},[142,64485,51640],{"class":51329},[142,64487,51336],{"class":152},[142,64489,64490,64492,64494,64496,64498,64500,64502,64504,64506,64508,64511,64513,64515,64517,64519,64521],{"class":144,"line":16879},[142,64491,55263],{"class":152},[142,64493,51640],{"class":51329},[142,64495,53515],{"class":1991},[142,64497,198],{"class":152},[142,64499,62652],{"class":257},[142,64501,61081],{"class":152},[142,64503,29],{"class":51329},[142,64505,55268],{"class":1991},[142,64507,198],{"class":152},[142,64509,64510],{"class":257},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[142,64512,55276],{"class":1991},[142,64514,198],{"class":152},[142,64516,7681],{"class":257},[142,64518,64448],{"class":152},[142,64520,51640],{"class":51329},[142,64522,51336],{"class":152},[142,64524,64525,64527,64529,64531,64533,64535,64537,64539,64541,64543,64546,64548,64550,64552,64554,64556],{"class":144,"line":16884},[142,64526,55263],{"class":152},[142,64528,51640],{"class":51329},[142,64530,53515],{"class":1991},[142,64532,198],{"class":152},[142,64534,62652],{"class":257},[142,64536,61081],{"class":152},[142,64538,29],{"class":51329},[142,64540,55268],{"class":1991},[142,64542,198],{"class":152},[142,64544,64545],{"class":257},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[142,64547,55276],{"class":1991},[142,64549,198],{"class":152},[142,64551,7681],{"class":257},[142,64553,64448],{"class":152},[142,64555,51640],{"class":51329},[142,64557,51336],{"class":152},[142,64559,64560,64562,64564,64566,64568,64570,64572,64574,64576,64578,64581,64583,64585,64587,64589,64591],{"class":144,"line":16898},[142,64561,55263],{"class":152},[142,64563,51640],{"class":51329},[142,64565,53515],{"class":1991},[142,64567,198],{"class":152},[142,64569,62652],{"class":257},[142,64571,61081],{"class":152},[142,64573,29],{"class":51329},[142,64575,55268],{"class":1991},[142,64577,198],{"class":152},[142,64579,64580],{"class":257},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[142,64582,55276],{"class":1991},[142,64584,198],{"class":152},[142,64586,7681],{"class":257},[142,64588,64448],{"class":152},[142,64590,51640],{"class":51329},[142,64592,51336],{"class":152},[142,64594,64595,64597,64599],{"class":144,"line":16910},[142,64596,51805],{"class":152},[142,64598,51640],{"class":51329},[142,64600,51336],{"class":152},[142,64602,64603,64605,64607],{"class":144,"line":16915},[142,64604,52446],{"class":152},[142,64606,51640],{"class":51329},[142,64608,51336],{"class":152},[142,64610,64611,64613,64615],{"class":144,"line":16928},[142,64612,52173],{"class":152},[142,64614,51842],{"class":51329},[142,64616,51336],{"class":152},[142,64618,64619],{"class":144,"line":16933},[142,64620,64621],{"class":211},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[142,64623,64624],{"class":144,"line":16938},[142,64625,64626],{"class":211},"    \u002F\u002F 1.1 获取 a 元素 \n",[142,64628,64629,64631,64634,64636,64638,64640,64642,64645],{"class":144,"line":16943},[142,64630,11250],{"class":148},[142,64632,64633],{"class":201}," as",[142,64635,13593],{"class":148},[142,64637,54425],{"class":152},[142,64639,55710],{"class":1991},[142,64641,153],{"class":152},[142,64643,64644],{"class":257},"'.tab-nav a'",[142,64646,159],{"class":152},[142,64648,64649],{"class":144,"line":16956},[142,64650,64651],{"class":211},"    \u002F\u002F console.log(as) \n",[142,64653,64654,64656,64658,64660,64662,64664,64666,64668,64670,64673,64675,64677,64679],{"class":144,"line":16961},[142,64655,3229],{"class":148},[142,64657,1686],{"class":152},[142,64659,51876],{"class":148},[142,64661,9467],{"class":152},[142,64663,198],{"class":148},[142,64665,4121],{"class":201},[142,64667,9474],{"class":152},[142,64669,1063],{"class":148},[142,64671,64672],{"class":152}," as.",[142,64674,51997],{"class":201},[142,64676,3242],{"class":152},[142,64678,2320],{"class":148},[142,64680,12471],{"class":152},[142,64682,64683],{"class":144,"line":32662},[142,64684,64685],{"class":211},"      \u002F\u002F console.log(as[i])\n",[142,64687,64688],{"class":144,"line":32668},[142,64689,64690],{"class":211},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[142,64692,64693,64696,64698,64700,64703,64705,64707],{"class":144,"line":32674},[142,64694,64695],{"class":152},"      as[i].",[142,64697,57842],{"class":1991},[142,64699,153],{"class":152},[142,64701,64702],{"class":257},"'mouseenter'",[142,64704,12464],{"class":152},[142,64706,54478],{"class":148},[142,64708,54481],{"class":152},[142,64710,64711],{"class":144,"line":32680},[142,64712,64713],{"class":211},"        \u002F\u002F console.log('鼠标经过')\n",[142,64715,64716],{"class":144,"line":32686},[142,64717,64718],{"class":211},"        \u002F\u002F 排他思想  \n",[142,64720,64721],{"class":144,"line":32697},[142,64722,64723],{"class":211},"        \u002F\u002F 干掉别人 移除类active\n",[142,64725,64726,64728,64730,64732,64735,64737,64739,64741,64744],{"class":144,"line":32703},[142,64727,51954],{"class":152},[142,64729,54428],{"class":1991},[142,64731,153],{"class":152},[142,64733,64734],{"class":257},"'.tab-nav .active'",[142,64736,57032],{"class":152},[142,64738,57035],{"class":1991},[142,64740,153],{"class":152},[142,64742,64743],{"class":257},"'active'",[142,64745,159],{"class":152},[142,64747,64748],{"class":144,"line":32723},[142,64749,64750],{"class":211},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[142,64752,64753,64756,64759,64761,64763,64765],{"class":144,"line":32729},[142,64754,64755],{"class":201},"        this",[142,64757,64758],{"class":152},".classList.",[142,64760,5363],{"class":1991},[142,64762,153],{"class":152},[142,64764,64743],{"class":257},[142,64766,159],{"class":152},[142,64768,64769],{"class":144,"line":32740},[142,64770,2428],{"emptyLinePlaceholder":69},[142,64772,64773],{"class":144,"line":32746},[142,64774,64775],{"class":211},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[142,64777,64778],{"class":144,"line":32752},[142,64779,64780],{"class":211},"        \u002F\u002F 干掉别人\n",[142,64782,64783,64785,64787,64789,64792,64794,64796,64798,64800],{"class":144,"line":32758},[142,64784,51954],{"class":152},[142,64786,54428],{"class":1991},[142,64788,153],{"class":152},[142,64790,64791],{"class":257},"'.tab-content .active'",[142,64793,57032],{"class":152},[142,64795,57035],{"class":1991},[142,64797,153],{"class":152},[142,64799,64743],{"class":257},[142,64801,159],{"class":152},[142,64803,64804],{"class":144,"line":32764},[142,64805,64806],{"class":211},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[142,64808,64809,64811,64813,64815,64818,64820,64822,64824,64826,64828,64830,64832,64834],{"class":144,"line":32770},[142,64810,51954],{"class":152},[142,64812,54428],{"class":1991},[142,64814,153],{"class":152},[142,64816,64817],{"class":257},"`.tab-content .item:nth-child(${",[142,64819,594],{"class":152},[142,64821,45595],{"class":148},[142,64823,25147],{"class":201},[142,64825,57061],{"class":257},[142,64827,57032],{"class":152},[142,64829,5363],{"class":1991},[142,64831,153],{"class":152},[142,64833,64743],{"class":257},[142,64835,159],{"class":152},[142,64837,64838],{"class":144,"line":32776},[142,64839,2428],{"emptyLinePlaceholder":69},[142,64841,64842],{"class":144,"line":32782},[142,64843,64844],{"class":152},"      })\n",[142,64846,64847],{"class":144,"line":32802},[142,64848,2215],{"class":152},[142,64850,64851,64853,64855],{"class":144,"line":32808},[142,64852,52446],{"class":152},[142,64854,51842],{"class":51329},[142,64856,51336],{"class":152},[142,64858,64859,64861,64863],{"class":144,"line":32824},[142,64860,51814],{"class":152},[142,64862,51829],{"class":51329},[142,64864,51336],{"class":152},[142,64866,64867],{"class":144,"line":32830},[142,64868,2428],{"emptyLinePlaceholder":69},[142,64870,64871,64873,64875],{"class":144,"line":32844},[142,64872,51814],{"class":152},[142,64874,50664],{"class":51329},[142,64876,51336],{"class":152},[14,64878,64879],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64881,64882],{},"在监听事件中，this指向的就是他的调用者",[14,64884,64885],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64887,53749],{},[14,64889,64890],{},"(function () {",[14,64892,64893],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64895,64896],{},"list.addEventListener('click', function (e) {",[14,64898,64899],{},"if (e.target.tagName === 'A') {",[14,64901,64902],{},"\u002F\u002F 排他思想",[14,64904,64905],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64907,64908],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64910,64911],{},"\u002F\u002F console.log(old);",[14,64913,64914],{},"\u002F\u002F 判断",[14,64916,64917],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64919,64920],{},"if (old) old.classList.remove('active')",[14,64922,64923],{},"e.target.classList.add('active')",[14,64925,1099],{},[14,64927,52493],{},[14,64929,64930],{},"})();",[113,64932,64934],{"id":64933},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[133,64936,64938],{"className":50662,"code":64937,"language":50664,"meta":31,"style":31},"\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",[139,64939,64940,64950,64954,64962,64966,64980,64994,65006,65014,65020,65030,65040,65044,65048,65055,65067,65078,65095,65108,65122,65132,65136,65140,65147,65158,65176,65186,65198,65202,65206,65213,65230,65241,65253,65257,65261,65268,65280,65284,65292,65300,65304,65312,65320,65328,65343,65387,65395,65408,65421,65434,65442,65450,65458,65486,65494,65506,65519,65532,65540,65548,65556,65582,65590,65603,65615,65628,65636,65644,65652,65678,65686,65699,65711,65724,65732,65740,65748,65753,65773,65778,65798,65803,65820,65825,65833,65838,65867,65880,65884,65888,65893,65897,65925,65930,65947,65952,65957,65962,65967,65993,65997,66001,66009,66017,66021],{"__ignoreMap":31},[142,64941,64942,64944,64946,64948],{"class":144,"line":145},[142,64943,51326],{"class":152},[142,64945,51330],{"class":51329},[142,64947,51333],{"class":1991},[142,64949,51336],{"class":152},[142,64951,64952],{"class":144,"line":64},[142,64953,2428],{"emptyLinePlaceholder":69},[142,64955,64956,64958,64960],{"class":144,"line":1208},[142,64957,1063],{"class":152},[142,64959,50664],{"class":51329},[142,64961,51336],{"class":152},[142,64963,64964],{"class":144,"line":1223},[142,64965,2428],{"emptyLinePlaceholder":69},[142,64967,64968,64970,64972,64974,64976,64978],{"class":144,"line":1229},[142,64969,1063],{"class":152},[142,64971,51363],{"class":51329},[142,64973,51345],{"class":1991},[142,64975,198],{"class":152},[142,64977,51350],{"class":257},[142,64979,51336],{"class":152},[142,64981,64982,64984,64986,64988,64990,64992],{"class":144,"line":1243},[142,64983,52173],{"class":152},[142,64985,51373],{"class":51329},[142,64987,51376],{"class":1991},[142,64989,198],{"class":152},[142,64991,51381],{"class":257},[142,64993,51336],{"class":152},[142,64995,64996,64998,65000,65002,65004],{"class":144,"line":1249},[142,64997,52173],{"class":152},[142,64999,51436],{"class":51329},[142,65001,55343],{"class":152},[142,65003,51436],{"class":51329},[142,65005,51336],{"class":152},[142,65007,65008,65010,65012],{"class":144,"line":1340},[142,65009,52173],{"class":152},[142,65011,5155],{"class":51329},[142,65013,51336],{"class":152},[142,65015,65016,65018],{"class":144,"line":1346},[142,65017,6432],{"class":51329},[142,65019,15601],{"class":152},[142,65021,65022,65024,65026,65028],{"class":144,"line":1358},[142,65023,54735],{"class":201},[142,65025,51466],{"class":152},[142,65027,344],{"class":201},[142,65029,1319],{"class":152},[142,65031,65032,65034,65036,65038],{"class":144,"line":1640},[142,65033,54724],{"class":201},[142,65035,51466],{"class":152},[142,65037,344],{"class":201},[142,65039,1319],{"class":152},[142,65041,65042],{"class":144,"line":1645},[142,65043,2215],{"class":152},[142,65045,65046],{"class":144,"line":1651},[142,65047,2428],{"emptyLinePlaceholder":69},[142,65049,65050,65053],{"class":144,"line":1656},[142,65051,65052],{"class":51329},"    table",[142,65054,15601],{"class":152},[142,65056,65057,65060,65062,65065],{"class":144,"line":1670},[142,65058,65059],{"class":201},"      border-collapse",[142,65061,51466],{"class":152},[142,65063,65064],{"class":201},"collapse",[142,65066,1319],{"class":152},[142,65068,65069,65072,65074,65076],{"class":144,"line":1675},[142,65070,65071],{"class":201},"      border-spacing",[142,65073,51466],{"class":152},[142,65075,344],{"class":201},[142,65077,1319],{"class":152},[142,65079,65080,65082,65084,65086,65088,65090,65093],{"class":144,"line":1681},[142,65081,62006],{"class":201},[142,65083,51466],{"class":152},[142,65085,370],{"class":201},[142,65087,51521],{"class":148},[142,65089,51550],{"class":201},[142,65091,65092],{"class":201}," #c0c0c0",[142,65094,1319],{"class":152},[142,65096,65097,65099,65101,65104,65106],{"class":144,"line":1702},[142,65098,54800],{"class":201},[142,65100,51466],{"class":152},[142,65102,65103],{"class":201},"500",[142,65105,51521],{"class":148},[142,65107,1319],{"class":152},[142,65109,65110,65112,65114,65116,65118,65120],{"class":144,"line":1707},[142,65111,54735],{"class":201},[142,65113,51466],{"class":152},[142,65115,464],{"class":201},[142,65117,51521],{"class":148},[142,65119,51585],{"class":201},[142,65121,1319],{"class":152},[142,65123,65124,65126,65128,65130],{"class":144,"line":1721},[142,65125,57315],{"class":201},[142,65127,51466],{"class":152},[142,65129,51621],{"class":201},[142,65131,1319],{"class":152},[142,65133,65134],{"class":144,"line":1726},[142,65135,2215],{"class":152},[142,65137,65138],{"class":144,"line":1755},[142,65139,2428],{"emptyLinePlaceholder":69},[142,65141,65142,65145],{"class":144,"line":1760},[142,65143,65144],{"class":51329},"    th",[142,65146,15601],{"class":152},[142,65148,65149,65151,65153,65156],{"class":144,"line":1777},[142,65150,54913],{"class":201},[142,65152,51466],{"class":152},[142,65154,65155],{"class":201},"#09c",[142,65157,1319],{"class":152},[142,65159,65160,65163,65165,65167,65169,65171,65174],{"class":144,"line":1782},[142,65161,65162],{"class":201},"      font",[142,65164,51466],{"class":152},[142,65166,62368],{"class":201},[142,65168,64102],{"class":201},[142,65170,51521],{"class":148},[142,65172,65173],{"class":257}," \"微软雅黑\"",[142,65175,1319],{"class":152},[142,65177,65178,65180,65182,65184],{"class":144,"line":1787},[142,65179,57445],{"class":201},[142,65181,51466],{"class":152},[142,65183,60871],{"class":201},[142,65185,1319],{"class":152},[142,65187,65188,65190,65192,65194,65196],{"class":144,"line":1792},[142,65189,54814],{"class":201},[142,65191,51466],{"class":152},[142,65193,953],{"class":201},[142,65195,51521],{"class":148},[142,65197,1319],{"class":152},[142,65199,65200],{"class":144,"line":1806},[142,65201,2215],{"class":152},[142,65203,65204],{"class":144,"line":1811},[142,65205,2428],{"emptyLinePlaceholder":69},[142,65207,65208,65211],{"class":144,"line":2605},[142,65209,65210],{"class":51329},"    td",[142,65212,15601],{"class":152},[142,65214,65215,65217,65219,65221,65223,65225,65228],{"class":144,"line":2619},[142,65216,62006],{"class":201},[142,65218,51466],{"class":152},[142,65220,370],{"class":201},[142,65222,51521],{"class":148},[142,65224,51550],{"class":201},[142,65226,65227],{"class":201}," #d0d0d0",[142,65229,1319],{"class":152},[142,65231,65232,65234,65236,65239],{"class":144,"line":2627},[142,65233,57445],{"class":201},[142,65235,51466],{"class":152},[142,65237,65238],{"class":201},"#404060",[142,65240,1319],{"class":152},[142,65242,65243,65245,65247,65249,65251],{"class":144,"line":2632},[142,65244,54724],{"class":201},[142,65246,51466],{"class":152},[142,65248,599],{"class":201},[142,65250,51521],{"class":148},[142,65252,1319],{"class":152},[142,65254,65255],{"class":144,"line":2638},[142,65256,2215],{"class":152},[142,65258,65259],{"class":144,"line":2644},[142,65260,2428],{"emptyLinePlaceholder":69},[142,65262,65263,65266],{"class":144,"line":2649},[142,65264,65265],{"class":1991},"    .allCheck",[142,65267,15601],{"class":152},[142,65269,65270,65272,65274,65276,65278],{"class":144,"line":7977},[142,65271,54800],{"class":201},[142,65273,51466],{"class":152},[142,65275,765],{"class":201},[142,65277,51521],{"class":148},[142,65279,1319],{"class":152},[142,65281,65282],{"class":144,"line":8001},[142,65283,2215],{"class":152},[142,65285,65286,65288,65290],{"class":144,"line":8006},[142,65287,52446],{"class":152},[142,65289,5155],{"class":51329},[142,65291,51336],{"class":152},[142,65293,65294,65296,65298],{"class":144,"line":8012},[142,65295,51814],{"class":152},[142,65297,51363],{"class":51329},[142,65299,51336],{"class":152},[142,65301,65302],{"class":144,"line":8039},[142,65303,2428],{"emptyLinePlaceholder":69},[142,65305,65306,65308,65310],{"class":144,"line":8044},[142,65307,1063],{"class":152},[142,65309,51829],{"class":51329},[142,65311,51336],{"class":152},[142,65313,65314,65316,65318],{"class":144,"line":8050},[142,65315,52173],{"class":152},[142,65317,290],{"class":51329},[142,65319,51336],{"class":152},[142,65321,65322,65324,65326],{"class":144,"line":8062},[142,65323,51370],{"class":152},[142,65325,296],{"class":51329},[142,65327,51336],{"class":152},[142,65329,65330,65332,65334,65336,65338,65341],{"class":144,"line":8074},[142,65331,55263],{"class":152},[142,65333,299],{"class":51329},[142,65335,53515],{"class":1991},[142,65337,198],{"class":152},[142,65339,65340],{"class":257},"\"allCheck\"",[142,65342,51336],{"class":152},[142,65344,65345,65347,65349,65351,65353,65355,65357,65359,65361,65363,65365,65368,65371,65373,65375,65377,65380,65383,65385],{"class":144,"line":8086},[142,65346,55331],{"class":152},[142,65348,53850],{"class":51329},[142,65350,53853],{"class":1991},[142,65352,198],{"class":152},[142,65354,53858],{"class":257},[142,65356,14949],{"class":1991},[142,65358,198],{"class":152},[142,65360,7681],{"class":257},[142,65362,14988],{"class":1991},[142,65364,198],{"class":152},[142,65366,65367],{"class":257},"\"checkAll\"",[142,65369,65370],{"class":152},"> \u003C",[142,65372,142],{"class":51329},[142,65374,53515],{"class":1991},[142,65376,198],{"class":152},[142,65378,65379],{"class":257},"\"all\"",[142,65381,65382],{"class":152},">全选\u003C\u002F",[142,65384,142],{"class":51329},[142,65386,51336],{"class":152},[142,65388,65389,65391,65393],{"class":144,"line":9745},[142,65390,55436],{"class":152},[142,65392,299],{"class":51329},[142,65394,51336],{"class":152},[142,65396,65397,65399,65401,65404,65406],{"class":144,"line":9770},[142,65398,55263],{"class":152},[142,65400,299],{"class":51329},[142,65402,65403],{"class":152},">商品\u003C\u002F",[142,65405,299],{"class":51329},[142,65407,51336],{"class":152},[142,65409,65410,65412,65414,65417,65419],{"class":144,"line":9793},[142,65411,55263],{"class":152},[142,65413,299],{"class":51329},[142,65415,65416],{"class":152},">商家\u003C\u002F",[142,65418,299],{"class":51329},[142,65420,51336],{"class":152},[142,65422,65423,65425,65427,65430,65432],{"class":144,"line":9817},[142,65424,55263],{"class":152},[142,65426,299],{"class":51329},[142,65428,65429],{"class":152},">价格\u003C\u002F",[142,65431,299],{"class":51329},[142,65433,51336],{"class":152},[142,65435,65436,65438,65440],{"class":144,"line":9822},[142,65437,51805],{"class":152},[142,65439,296],{"class":51329},[142,65441,51336],{"class":152},[142,65443,65444,65446,65448],{"class":144,"line":9827},[142,65445,51370],{"class":152},[142,65447,296],{"class":51329},[142,65449,51336],{"class":152},[142,65451,65452,65454,65456],{"class":144,"line":9832},[142,65453,55263],{"class":152},[142,65455,342],{"class":51329},[142,65457,51336],{"class":152},[142,65459,65460,65462,65464,65466,65468,65470,65472,65474,65477,65479,65481,65484],{"class":144,"line":9841},[142,65461,55331],{"class":152},[142,65463,53850],{"class":51329},[142,65465,53853],{"class":1991},[142,65467,198],{"class":152},[142,65469,53858],{"class":257},[142,65471,14949],{"class":1991},[142,65473,198],{"class":152},[142,65475,65476],{"class":257},"\"check\"",[142,65478,53515],{"class":1991},[142,65480,198],{"class":152},[142,65482,65483],{"class":257},"\"ck\"",[142,65485,51336],{"class":152},[142,65487,65488,65490,65492],{"class":144,"line":9846},[142,65489,55436],{"class":152},[142,65491,342],{"class":51329},[142,65493,51336],{"class":152},[142,65495,65496,65498,65500,65502,65504],{"class":144,"line":9852},[142,65497,55263],{"class":152},[142,65499,342],{"class":51329},[142,65501,61202],{"class":152},[142,65503,342],{"class":51329},[142,65505,51336],{"class":152},[142,65507,65508,65510,65512,65515,65517],{"class":144,"line":9873},[142,65509,55263],{"class":152},[142,65511,342],{"class":51329},[142,65513,65514],{"class":152},">小米\u003C\u002F",[142,65516,342],{"class":51329},[142,65518,51336],{"class":152},[142,65520,65521,65523,65525,65528,65530],{"class":144,"line":9879},[142,65522,55263],{"class":152},[142,65524,342],{"class":51329},[142,65526,65527],{"class":152},">￥1999\u003C\u002F",[142,65529,342],{"class":51329},[142,65531,51336],{"class":152},[142,65533,65534,65536,65538],{"class":144,"line":9893},[142,65535,51805],{"class":152},[142,65537,296],{"class":51329},[142,65539,51336],{"class":152},[142,65541,65542,65544,65546],{"class":144,"line":9899},[142,65543,51370],{"class":152},[142,65545,296],{"class":51329},[142,65547,51336],{"class":152},[142,65549,65550,65552,65554],{"class":144,"line":9926},[142,65551,55263],{"class":152},[142,65553,342],{"class":51329},[142,65555,51336],{"class":152},[142,65557,65558,65560,65562,65564,65566,65568,65570,65572,65574,65576,65578,65580],{"class":144,"line":9935},[142,65559,55331],{"class":152},[142,65561,53850],{"class":51329},[142,65563,53853],{"class":1991},[142,65565,198],{"class":152},[142,65567,53858],{"class":257},[142,65569,14949],{"class":1991},[142,65571,198],{"class":152},[142,65573,65476],{"class":257},[142,65575,53515],{"class":1991},[142,65577,198],{"class":152},[142,65579,65483],{"class":257},[142,65581,51336],{"class":152},[142,65583,65584,65586,65588],{"class":144,"line":9941},[142,65585,55436],{"class":152},[142,65587,342],{"class":51329},[142,65589,51336],{"class":152},[142,65591,65592,65594,65596,65599,65601],{"class":144,"line":9949},[142,65593,55263],{"class":152},[142,65595,342],{"class":51329},[142,65597,65598],{"class":152},">小米净水器\u003C\u002F",[142,65600,342],{"class":51329},[142,65602,51336],{"class":152},[142,65604,65605,65607,65609,65611,65613],{"class":144,"line":9954},[142,65606,55263],{"class":152},[142,65608,342],{"class":51329},[142,65610,65514],{"class":152},[142,65612,342],{"class":51329},[142,65614,51336],{"class":152},[142,65616,65617,65619,65621,65624,65626],{"class":144,"line":16633},[142,65618,55263],{"class":152},[142,65620,342],{"class":51329},[142,65622,65623],{"class":152},">￥4999\u003C\u002F",[142,65625,342],{"class":51329},[142,65627,51336],{"class":152},[142,65629,65630,65632,65634],{"class":144,"line":16639},[142,65631,51805],{"class":152},[142,65633,296],{"class":51329},[142,65635,51336],{"class":152},[142,65637,65638,65640,65642],{"class":144,"line":16662},[142,65639,51370],{"class":152},[142,65641,296],{"class":51329},[142,65643,51336],{"class":152},[142,65645,65646,65648,65650],{"class":144,"line":16668},[142,65647,55263],{"class":152},[142,65649,342],{"class":51329},[142,65651,51336],{"class":152},[142,65653,65654,65656,65658,65660,65662,65664,65666,65668,65670,65672,65674,65676],{"class":144,"line":16691},[142,65655,55331],{"class":152},[142,65657,53850],{"class":51329},[142,65659,53853],{"class":1991},[142,65661,198],{"class":152},[142,65663,53858],{"class":257},[142,65665,14949],{"class":1991},[142,65667,198],{"class":152},[142,65669,65476],{"class":257},[142,65671,53515],{"class":1991},[142,65673,198],{"class":152},[142,65675,65483],{"class":257},[142,65677,51336],{"class":152},[142,65679,65680,65682,65684],{"class":144,"line":16705},[142,65681,55436],{"class":152},[142,65683,342],{"class":51329},[142,65685,51336],{"class":152},[142,65687,65688,65690,65692,65695,65697],{"class":144,"line":16725},[142,65689,55263],{"class":152},[142,65691,342],{"class":51329},[142,65693,65694],{"class":152},">小米电视\u003C\u002F",[142,65696,342],{"class":51329},[142,65698,51336],{"class":152},[142,65700,65701,65703,65705,65707,65709],{"class":144,"line":16731},[142,65702,55263],{"class":152},[142,65704,342],{"class":51329},[142,65706,65514],{"class":152},[142,65708,342],{"class":51329},[142,65710,51336],{"class":152},[142,65712,65713,65715,65717,65720,65722],{"class":144,"line":16742},[142,65714,55263],{"class":152},[142,65716,342],{"class":51329},[142,65718,65719],{"class":152},">￥5999\u003C\u002F",[142,65721,342],{"class":51329},[142,65723,51336],{"class":152},[142,65725,65726,65728,65730],{"class":144,"line":16765},[142,65727,51805],{"class":152},[142,65729,296],{"class":51329},[142,65731,51336],{"class":152},[142,65733,65734,65736,65738],{"class":144,"line":16787},[142,65735,52446],{"class":152},[142,65737,290],{"class":51329},[142,65739,51336],{"class":152},[142,65741,65742,65744,65746],{"class":144,"line":16792},[142,65743,52173],{"class":152},[142,65745,51842],{"class":51329},[142,65747,51336],{"class":152},[142,65749,65750],{"class":144,"line":16798},[142,65751,65752],{"class":211},"    \u002F\u002F 1. 获取大复选框\n",[142,65754,65755,65757,65760,65762,65764,65766,65768,65771],{"class":144,"line":16812},[142,65756,11250],{"class":148},[142,65758,65759],{"class":201}," checkAll",[142,65761,13593],{"class":148},[142,65763,54425],{"class":152},[142,65765,54428],{"class":1991},[142,65767,153],{"class":152},[142,65769,65770],{"class":257},"'#checkAll'",[142,65772,159],{"class":152},[142,65774,65775],{"class":144,"line":16825},[142,65776,65777],{"class":211},"    \u002F\u002F 2. 获取所有的小复选框\n",[142,65779,65780,65782,65785,65787,65789,65791,65793,65796],{"class":144,"line":16830},[142,65781,11250],{"class":148},[142,65783,65784],{"class":201}," cks",[142,65786,13593],{"class":148},[142,65788,54425],{"class":152},[142,65790,55710],{"class":1991},[142,65792,153],{"class":152},[142,65794,65795],{"class":257},"'.ck'",[142,65797,159],{"class":152},[142,65799,65800],{"class":144,"line":16844},[142,65801,65802],{"class":211},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[142,65804,65805,65808,65810,65812,65814,65816,65818],{"class":144,"line":16849},[142,65806,65807],{"class":152},"    checkAll.",[142,65809,57842],{"class":1991},[142,65811,153],{"class":152},[142,65813,57847],{"class":257},[142,65815,12464],{"class":152},[142,65817,54478],{"class":148},[142,65819,54481],{"class":152},[142,65821,65822],{"class":144,"line":16855},[142,65823,65824],{"class":211},"      \u002F\u002F 得到当前大复选框的选中状态\n",[142,65826,65827,65830],{"class":144,"line":16860},[142,65828,65829],{"class":211},"      \u002F\u002F console.log(checkAll.checked)",[142,65831,65832],{"class":211},"  \u002F\u002F 得到 是 true 或者是 false\n",[142,65834,65835],{"class":144,"line":16874},[142,65836,65837],{"class":211},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[142,65839,65840,65842,65844,65846,65848,65850,65852,65854,65856,65859,65861,65863,65865],{"class":144,"line":16879},[142,65841,52313],{"class":148},[142,65843,1686],{"class":152},[142,65845,51876],{"class":148},[142,65847,9467],{"class":152},[142,65849,198],{"class":148},[142,65851,4121],{"class":201},[142,65853,9474],{"class":152},[142,65855,1063],{"class":148},[142,65857,65858],{"class":152}," cks.",[142,65860,51997],{"class":201},[142,65862,3242],{"class":152},[142,65864,2320],{"class":148},[142,65866,12471],{"class":152},[142,65868,65869,65872,65874,65877],{"class":144,"line":16884},[142,65870,65871],{"class":152},"        cks[i].checked ",[142,65873,198],{"class":148},[142,65875,65876],{"class":201}," this",[142,65878,65879],{"class":152},".checked\n",[142,65881,65882],{"class":144,"line":16898},[142,65883,52427],{"class":152},[142,65885,65886],{"class":144,"line":16910},[142,65887,33490],{"class":152},[142,65889,65890],{"class":144,"line":16915},[142,65891,65892],{"class":211},"    \u002F\u002F 5. 小复选框控制大复选框\n",[142,65894,65895],{"class":144,"line":16928},[142,65896,2428],{"emptyLinePlaceholder":69},[142,65898,65899,65901,65903,65905,65907,65909,65911,65913,65915,65917,65919,65921,65923],{"class":144,"line":16933},[142,65900,3229],{"class":148},[142,65902,1686],{"class":152},[142,65904,51876],{"class":148},[142,65906,9467],{"class":152},[142,65908,198],{"class":148},[142,65910,4121],{"class":201},[142,65912,9474],{"class":152},[142,65914,1063],{"class":148},[142,65916,65858],{"class":152},[142,65918,51997],{"class":201},[142,65920,3242],{"class":152},[142,65922,2320],{"class":148},[142,65924,12471],{"class":152},[142,65926,65927],{"class":144,"line":16938},[142,65928,65929],{"class":211},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[142,65931,65932,65935,65937,65939,65941,65943,65945],{"class":144,"line":16943},[142,65933,65934],{"class":152},"      cks[i].",[142,65936,57842],{"class":1991},[142,65938,153],{"class":152},[142,65940,57847],{"class":257},[142,65942,12464],{"class":152},[142,65944,54478],{"class":148},[142,65946,54481],{"class":152},[142,65948,65949],{"class":144,"line":16956},[142,65950,65951],{"class":211},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[142,65953,65954],{"class":144,"line":16961},[142,65955,65956],{"class":211},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[142,65958,65959],{"class":144,"line":32662},[142,65960,65961],{"class":211},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[142,65963,65964],{"class":144,"line":32668},[142,65965,65966],{"class":211},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[142,65968,65969,65972,65974,65976,65978,65980,65983,65985,65987,65989,65991],{"class":144,"line":32674},[142,65970,65971],{"class":152},"        checkAll.checked ",[142,65973,198],{"class":148},[142,65975,54425],{"class":152},[142,65977,55710],{"class":1991},[142,65979,153],{"class":152},[142,65981,65982],{"class":257},"'.ck:checked'",[142,65984,30855],{"class":152},[142,65986,51997],{"class":201},[142,65988,57935],{"class":148},[142,65990,65858],{"class":152},[142,65992,55860],{"class":201},[142,65994,65995],{"class":144,"line":32680},[142,65996,64844],{"class":152},[142,65998,65999],{"class":144,"line":32686},[142,66000,2215],{"class":152},[142,66002,66003,66005,66007],{"class":144,"line":32697},[142,66004,52446],{"class":152},[142,66006,51842],{"class":51329},[142,66008,51336],{"class":152},[142,66010,66011,66013,66015],{"class":144,"line":32703},[142,66012,51814],{"class":152},[142,66014,51829],{"class":51329},[142,66016,51336],{"class":152},[142,66018,66019],{"class":144,"line":32723},[142,66020,2428],{"emptyLinePlaceholder":69},[142,66022,66023,66025,66027],{"class":144,"line":32729},[142,66024,51814],{"class":152},[142,66026,50664],{"class":51329},[142,66028,51336],{"class":152},[14,66030,66031],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66033,66034],{},"用好之间比较得到的布尔值！！！",[14,66036,66037,66038,66041,66042,1686,66045,737,66047,66050],{},"在 JS 里访问的时候，",[139,66039,66040],{},"checkbox.checked"," 是一个 ",[302,66043,66044],{},"布尔值",[139,66046,1391],{},[139,66048,66049],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66052,66053,66054,66057,66058],{},"HTML 的 ",[139,66055,66056],{},"checked=\"checked\""," 只是 ",[302,66059,66060,66061,66064],{},"初始值；JS 的 ",[139,66062,66063],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66066,66067],{},"：checked是一个伪类选择器",[14,66069,66070],{},[29,66071],{"alt":31,"src":66072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66074,66075,66078],{},[66076,66077],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66080,66081],{},[29,66082],{"alt":31,"src":66083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[84,66085,66087],{"id":66086},"_33-dom事件进阶","3.3 DOM事件进阶",[113,66089,66091],{"id":66090},"_331-事件流","3.3.1 事件流",[14,66093,66094],{},[29,66095],{"alt":31,"src":66096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22027,66098,66100],{"id":66099},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66102,66103],{},[29,66104],{"alt":31,"src":66105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[133,66107,66109],{"className":50662,"code":66108,"language":50664,"meta":31,"style":31},"\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",[139,66110,66111,66121,66135,66139,66147,66161,66181,66193,66201,66208,66220,66232,66242,66246,66250,66257,66269,66281,66291,66295,66303,66311,66315,66323,66338,66357,66365,66373,66393,66413,66429,66440,66448,66465,66476,66484,66501,66512,66520,66528,66536,66540],{"__ignoreMap":31},[142,66112,66113,66115,66117,66119],{"class":144,"line":145},[142,66114,51326],{"class":152},[142,66116,51330],{"class":51329},[142,66118,51333],{"class":1991},[142,66120,51336],{"class":152},[142,66122,66123,66125,66127,66129,66131,66133],{"class":144,"line":64},[142,66124,1063],{"class":152},[142,66126,50664],{"class":51329},[142,66128,51345],{"class":1991},[142,66130,198],{"class":152},[142,66132,51350],{"class":257},[142,66134,51336],{"class":152},[142,66136,66137],{"class":144,"line":1208},[142,66138,2428],{"emptyLinePlaceholder":69},[142,66140,66141,66143,66145],{"class":144,"line":1223},[142,66142,1063],{"class":152},[142,66144,51363],{"class":51329},[142,66146,51336],{"class":152},[142,66148,66149,66151,66153,66155,66157,66159],{"class":144,"line":1229},[142,66150,52173],{"class":152},[142,66152,51373],{"class":51329},[142,66154,51376],{"class":1991},[142,66156,198],{"class":152},[142,66158,51381],{"class":257},[142,66160,51336],{"class":152},[142,66162,66163,66165,66167,66169,66171,66173,66175,66177,66179],{"class":144,"line":1243},[142,66164,52173],{"class":152},[142,66166,51373],{"class":51329},[142,66168,14949],{"class":1991},[142,66170,198],{"class":152},[142,66172,51420],{"class":257},[142,66174,51400],{"class":1991},[142,66176,198],{"class":152},[142,66178,51427],{"class":257},[142,66180,51336],{"class":152},[142,66182,66183,66185,66187,66189,66191],{"class":144,"line":1249},[142,66184,52173],{"class":152},[142,66186,51436],{"class":51329},[142,66188,51439],{"class":152},[142,66190,51436],{"class":51329},[142,66192,51336],{"class":152},[142,66194,66195,66197,66199],{"class":144,"line":1340},[142,66196,52173],{"class":152},[142,66198,5155],{"class":51329},[142,66200,51336],{"class":152},[142,66202,66203,66206],{"class":144,"line":1346},[142,66204,66205],{"class":1991},"    .father",[142,66207,15601],{"class":152},[142,66209,66210,66212,66214,66216,66218],{"class":144,"line":1358},[142,66211,54800],{"class":201},[142,66213,51466],{"class":152},[142,66215,65103],{"class":201},[142,66217,51521],{"class":148},[142,66219,1319],{"class":152},[142,66221,66222,66224,66226,66228,66230],{"class":144,"line":1640},[142,66223,54814],{"class":201},[142,66225,51466],{"class":152},[142,66227,65103],{"class":201},[142,66229,51521],{"class":148},[142,66231,1319],{"class":152},[142,66233,66234,66236,66238,66240],{"class":144,"line":1645},[142,66235,54913],{"class":201},[142,66237,51466],{"class":152},[142,66239,51674],{"class":201},[142,66241,1319],{"class":152},[142,66243,66244],{"class":144,"line":1651},[142,66245,2215],{"class":152},[142,66247,66248],{"class":144,"line":1656},[142,66249,2428],{"emptyLinePlaceholder":69},[142,66251,66252,66255],{"class":144,"line":1670},[142,66253,66254],{"class":1991},"    .son",[142,66256,15601],{"class":152},[142,66258,66259,66261,66263,66265,66267],{"class":144,"line":1675},[142,66260,54800],{"class":201},[142,66262,51466],{"class":152},[142,66264,1750],{"class":201},[142,66266,51521],{"class":148},[142,66268,1319],{"class":152},[142,66270,66271,66273,66275,66277,66279],{"class":144,"line":1681},[142,66272,54814],{"class":201},[142,66274,51466],{"class":152},[142,66276,1750],{"class":201},[142,66278,51521],{"class":148},[142,66280,1319],{"class":152},[142,66282,66283,66285,66287,66289],{"class":144,"line":1702},[142,66284,54913],{"class":201},[142,66286,51466],{"class":152},[142,66288,54918],{"class":201},[142,66290,1319],{"class":152},[142,66292,66293],{"class":144,"line":1707},[142,66294,2215],{"class":152},[142,66296,66297,66299,66301],{"class":144,"line":1721},[142,66298,52446],{"class":152},[142,66300,5155],{"class":51329},[142,66302,51336],{"class":152},[142,66304,66305,66307,66309],{"class":144,"line":1726},[142,66306,51814],{"class":152},[142,66308,51363],{"class":51329},[142,66310,51336],{"class":152},[142,66312,66313],{"class":144,"line":1755},[142,66314,2428],{"emptyLinePlaceholder":69},[142,66316,66317,66319,66321],{"class":144,"line":1760},[142,66318,1063],{"class":152},[142,66320,51829],{"class":51329},[142,66322,51336],{"class":152},[142,66324,66325,66327,66329,66331,66333,66336],{"class":144,"line":1777},[142,66326,52173],{"class":152},[142,66328,51640],{"class":51329},[142,66330,53515],{"class":1991},[142,66332,198],{"class":152},[142,66334,66335],{"class":257},"\"father\"",[142,66337,51336],{"class":152},[142,66339,66340,66342,66344,66346,66348,66351,66353,66355],{"class":144,"line":1782},[142,66341,51370],{"class":152},[142,66343,51640],{"class":51329},[142,66345,53515],{"class":1991},[142,66347,198],{"class":152},[142,66349,66350],{"class":257},"\"son\"",[142,66352,55343],{"class":152},[142,66354,51640],{"class":51329},[142,66356,51336],{"class":152},[142,66358,66359,66361,66363],{"class":144,"line":1787},[142,66360,52446],{"class":152},[142,66362,51640],{"class":51329},[142,66364,51336],{"class":152},[142,66366,66367,66369,66371],{"class":144,"line":1792},[142,66368,52173],{"class":152},[142,66370,51842],{"class":51329},[142,66372,51336],{"class":152},[142,66374,66375,66377,66380,66382,66384,66386,66388,66391],{"class":144,"line":1806},[142,66376,11250],{"class":148},[142,66378,66379],{"class":201}," fa",[142,66381,13593],{"class":148},[142,66383,54425],{"class":152},[142,66385,54428],{"class":1991},[142,66387,153],{"class":152},[142,66389,66390],{"class":257},"'.father'",[142,66392,159],{"class":152},[142,66394,66395,66397,66400,66402,66404,66406,66408,66411],{"class":144,"line":1811},[142,66396,11250],{"class":148},[142,66398,66399],{"class":201}," son",[142,66401,13593],{"class":148},[142,66403,54425],{"class":152},[142,66405,54428],{"class":1991},[142,66407,153],{"class":152},[142,66409,66410],{"class":257},"'.son'",[142,66412,159],{"class":152},[142,66414,66415,66417,66419,66421,66423,66425,66427],{"class":144,"line":2605},[142,66416,52436],{"class":152},[142,66418,57842],{"class":1991},[142,66420,153],{"class":152},[142,66422,57847],{"class":257},[142,66424,12464],{"class":152},[142,66426,54478],{"class":148},[142,66428,54481],{"class":152},[142,66430,66431,66433,66435,66438],{"class":144,"line":2619},[142,66432,58954],{"class":1991},[142,66434,153],{"class":152},[142,66436,66437],{"class":257},"'woshiu1'",[142,66439,159],{"class":152},[142,66441,66442,66444,66446],{"class":144,"line":2627},[142,66443,54564],{"class":152},[142,66445,1391],{"class":201},[142,66447,159],{"class":152},[142,66449,66450,66453,66455,66457,66459,66461,66463],{"class":144,"line":2632},[142,66451,66452],{"class":152},"    fa.",[142,66454,57842],{"class":1991},[142,66456,153],{"class":152},[142,66458,57847],{"class":257},[142,66460,12464],{"class":152},[142,66462,54478],{"class":148},[142,66464,54481],{"class":152},[142,66466,66467,66469,66471,66474],{"class":144,"line":2638},[142,66468,58954],{"class":1991},[142,66470,153],{"class":152},[142,66472,66473],{"class":257},"'1'",[142,66475,159],{"class":152},[142,66477,66478,66480,66482],{"class":144,"line":2644},[142,66479,54564],{"class":152},[142,66481,1391],{"class":201},[142,66483,159],{"class":152},[142,66485,66486,66489,66491,66493,66495,66497,66499],{"class":144,"line":2649},[142,66487,66488],{"class":152},"    son.",[142,66490,57842],{"class":1991},[142,66492,153],{"class":152},[142,66494,57847],{"class":257},[142,66496,12464],{"class":152},[142,66498,54478],{"class":148},[142,66500,54481],{"class":152},[142,66502,66503,66505,66507,66510],{"class":144,"line":7977},[142,66504,58954],{"class":1991},[142,66506,153],{"class":152},[142,66508,66509],{"class":257},"'2'",[142,66511,159],{"class":152},[142,66513,66514,66516,66518],{"class":144,"line":8001},[142,66515,54564],{"class":152},[142,66517,1391],{"class":201},[142,66519,159],{"class":152},[142,66521,66522,66524,66526],{"class":144,"line":8006},[142,66523,52446],{"class":152},[142,66525,51842],{"class":51329},[142,66527,51336],{"class":152},[142,66529,66530,66532,66534],{"class":144,"line":8012},[142,66531,51814],{"class":152},[142,66533,51829],{"class":51329},[142,66535,51336],{"class":152},[142,66537,66538],{"class":144,"line":8039},[142,66539,2428],{"emptyLinePlaceholder":69},[142,66541,66542,66544,66546],{"class":144,"line":8044},[142,66543,51814],{"class":152},[142,66545,50664],{"class":51329},[142,66547,51336],{"class":152},[14,66549,66550],{},[29,66551],{"alt":31,"src":66552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66554,66555],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22027,66557,66559],{"id":66558},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66561,66562],{},[29,66563],{"alt":31,"src":66564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66566,66567],{},"反着来",[14,66569,66570],{},"注意是同名事件，比如都是‘click’",[22027,66572,66574],{"id":66573},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66576,66577],{},[29,66578],{"alt":31,"src":66579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22027,66581,66583],{"id":66582},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66585,66586],{},[29,66587],{"alt":31,"src":66588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66590,66591],{},[29,66592],{"alt":31,"src":66593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22027,66595,66597],{"id":66596},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[96,66599,66600],{},[99,66601,66602],{},"事件类型的区别",[14,66604,66605],{},[29,66606],{"alt":31,"src":66607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66609,66610],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[96,66612,66613],{"start":64},[99,66614,66615],{},"注册事件的区别",[14,66617,66618],{},[29,66619],{"alt":31,"src":66620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22027,66622,66624],{"id":66623},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66626,66627],{},[29,66628],{"alt":31,"src":66629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66631,66632],{},[29,66633],{"alt":31,"src":66634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[133,66636,66638],{"className":53096,"code":66637,"language":53098,"meta":31,"style":31},"\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",[139,66639,66640,66648,66665,66688,66696,66701,66706,66711,66715,66723,66731],{"__ignoreMap":31},[142,66641,66642,66644,66646],{"class":144,"line":145},[142,66643,1063],{"class":152},[142,66645,51829],{"class":51329},[142,66647,51336],{"class":152},[142,66649,66650,66652,66655,66658,66660,66663],{"class":144,"line":64},[142,66651,52173],{"class":152},[142,66653,66654],{"class":51329},"form",[142,66656,66657],{"class":1991}," action",[142,66659,198],{"class":152},[142,66661,66662],{"class":257},"\"http:\u002F\u002Fwww.itcast.cn\"",[142,66664,51336],{"class":152},[142,66666,66667,66669,66671,66673,66675,66678,66681,66683,66686],{"class":144,"line":1208},[142,66668,51370],{"class":152},[142,66670,53850],{"class":51329},[142,66672,53853],{"class":1991},[142,66674,198],{"class":152},[142,66676,66677],{"class":257},"\"submit\"",[142,66679,66680],{"class":1991}," value",[142,66682,198],{"class":152},[142,66684,66685],{"class":257},"\"免费注册\"",[142,66687,51336],{"class":152},[142,66689,66690,66692,66694],{"class":144,"line":1223},[142,66691,51370],{"class":152},[142,66693,51842],{"class":51329},[142,66695,51336],{"class":152},[142,66697,66698],{"class":144,"line":1229},[142,66699,66700],{"class":152},"      const form = document.querySelector('form')\n",[142,66702,66703],{"class":144,"line":1243},[142,66704,66705],{"class":152},"      form.addEventListener('submit', function (e) {\n",[142,66707,66708],{"class":144,"line":1249},[142,66709,66710],{"class":152},"        e.preventDefault()\n",[142,66712,66713],{"class":144,"line":1340},[142,66714,64844],{"class":152},[142,66716,66717,66719,66721],{"class":144,"line":1346},[142,66718,51805],{"class":152},[142,66720,51842],{"class":51329},[142,66722,51336],{"class":152},[142,66724,66725,66727,66729],{"class":144,"line":1358},[142,66726,52446],{"class":152},[142,66728,66654],{"class":51329},[142,66730,51336],{"class":152},[142,66732,66733,66735,66737],{"class":144,"line":1640},[142,66734,51814],{"class":152},[142,66736,51829],{"class":51329},[142,66738,51336],{"class":152},[14,66740,66741],{},"点击不在跳转！！！",[113,66743,66745],{"id":66744},"_332-事件委托","3.3.2 事件委托",[14,66747,66748],{},[29,66749],{"alt":31,"src":66750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[133,66752,66754],{"className":50662,"code":66753,"language":50664,"meta":31,"style":31},"\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",[139,66755,66756,66766,66780,66784,66792,66806,66826,66838,66846,66850,66858,66866,66878,66890,66902,66914,66926,66939,66947,66955,66960,66979,67000,67005,67010,67015,67020,67029,67033,67043,67047,67052,67057,67071,67081,67085,67089,67097,67105,67109],{"__ignoreMap":31},[142,66757,66758,66760,66762,66764],{"class":144,"line":145},[142,66759,51326],{"class":152},[142,66761,51330],{"class":51329},[142,66763,51333],{"class":1991},[142,66765,51336],{"class":152},[142,66767,66768,66770,66772,66774,66776,66778],{"class":144,"line":64},[142,66769,1063],{"class":152},[142,66771,50664],{"class":51329},[142,66773,51345],{"class":1991},[142,66775,198],{"class":152},[142,66777,51350],{"class":257},[142,66779,51336],{"class":152},[142,66781,66782],{"class":144,"line":1208},[142,66783,2428],{"emptyLinePlaceholder":69},[142,66785,66786,66788,66790],{"class":144,"line":1223},[142,66787,1063],{"class":152},[142,66789,51363],{"class":51329},[142,66791,51336],{"class":152},[142,66793,66794,66796,66798,66800,66802,66804],{"class":144,"line":1229},[142,66795,52173],{"class":152},[142,66797,51373],{"class":51329},[142,66799,51376],{"class":1991},[142,66801,198],{"class":152},[142,66803,51381],{"class":257},[142,66805,51336],{"class":152},[142,66807,66808,66810,66812,66814,66816,66818,66820,66822,66824],{"class":144,"line":1243},[142,66809,52173],{"class":152},[142,66811,51373],{"class":51329},[142,66813,14949],{"class":1991},[142,66815,198],{"class":152},[142,66817,51420],{"class":257},[142,66819,51400],{"class":1991},[142,66821,198],{"class":152},[142,66823,51427],{"class":257},[142,66825,51336],{"class":152},[142,66827,66828,66830,66832,66834,66836],{"class":144,"line":1249},[142,66829,52173],{"class":152},[142,66831,51436],{"class":51329},[142,66833,51439],{"class":152},[142,66835,51436],{"class":51329},[142,66837,51336],{"class":152},[142,66839,66840,66842,66844],{"class":144,"line":1340},[142,66841,51814],{"class":152},[142,66843,51363],{"class":51329},[142,66845,51336],{"class":152},[142,66847,66848],{"class":144,"line":1346},[142,66849,2428],{"emptyLinePlaceholder":69},[142,66851,66852,66854,66856],{"class":144,"line":1358},[142,66853,1063],{"class":152},[142,66855,51829],{"class":51329},[142,66857,51336],{"class":152},[142,66859,66860,66862,66864],{"class":144,"line":1640},[142,66861,52173],{"class":152},[142,66863,1160],{"class":51329},[142,66865,51336],{"class":152},[142,66867,66868,66870,66872,66874,66876],{"class":144,"line":1645},[142,66869,51370],{"class":152},[142,66871,99],{"class":51329},[142,66873,53995],{"class":152},[142,66875,99],{"class":51329},[142,66877,51336],{"class":152},[142,66879,66880,66882,66884,66886,66888],{"class":144,"line":1651},[142,66881,51370],{"class":152},[142,66883,99],{"class":51329},[142,66885,54014],{"class":152},[142,66887,99],{"class":51329},[142,66889,51336],{"class":152},[142,66891,66892,66894,66896,66898,66900],{"class":144,"line":1656},[142,66893,51370],{"class":152},[142,66895,99],{"class":51329},[142,66897,54033],{"class":152},[142,66899,99],{"class":51329},[142,66901,51336],{"class":152},[142,66903,66904,66906,66908,66910,66912],{"class":144,"line":1670},[142,66905,51370],{"class":152},[142,66907,99],{"class":51329},[142,66909,54052],{"class":152},[142,66911,99],{"class":51329},[142,66913,51336],{"class":152},[142,66915,66916,66918,66920,66922,66924],{"class":144,"line":1675},[142,66917,51370],{"class":152},[142,66919,99],{"class":51329},[142,66921,54071],{"class":152},[142,66923,99],{"class":51329},[142,66925,51336],{"class":152},[142,66927,66928,66930,66932,66935,66937],{"class":144,"line":1681},[142,66929,51370],{"class":152},[142,66931,14],{"class":51329},[142,66933,66934],{"class":152},">我不需要变色\u003C\u002F",[142,66936,14],{"class":51329},[142,66938,51336],{"class":152},[142,66940,66941,66943,66945],{"class":144,"line":1702},[142,66942,52446],{"class":152},[142,66944,1160],{"class":51329},[142,66946,51336],{"class":152},[142,66948,66949,66951,66953],{"class":144,"line":1707},[142,66950,52173],{"class":152},[142,66952,51842],{"class":51329},[142,66954,51336],{"class":152},[142,66956,66957],{"class":144,"line":1721},[142,66958,66959],{"class":211},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[142,66961,66962,66964,66966,66968,66970,66972,66974,66977],{"class":144,"line":1726},[142,66963,11250],{"class":148},[142,66965,61321],{"class":201},[142,66967,13593],{"class":148},[142,66969,54425],{"class":152},[142,66971,54428],{"class":1991},[142,66973,153],{"class":152},[142,66975,66976],{"class":257},"'ul'",[142,66978,159],{"class":152},[142,66980,66981,66984,66986,66988,66990,66992,66994,66996,66998],{"class":144,"line":1755},[142,66982,66983],{"class":152},"    ul.",[142,66985,57842],{"class":1991},[142,66987,153],{"class":152},[142,66989,57847],{"class":257},[142,66991,12464],{"class":152},[142,66993,54478],{"class":148},[142,66995,1686],{"class":152},[142,66997,227],{"class":5245},[142,66999,12471],{"class":152},[142,67001,67002],{"class":144,"line":1760},[142,67003,67004],{"class":211},"      \u002F\u002F alert(1)\n",[142,67006,67007],{"class":144,"line":1777},[142,67008,67009],{"class":211},"      \u002F\u002F e.target就是我们点击的对象\n",[142,67011,67012],{"class":144,"line":1782},[142,67013,67014],{"class":211},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[142,67016,67017],{"class":144,"line":1787},[142,67018,67019],{"class":211},"      \u002F\u002F e.target.style.color = 'red'\n",[142,67021,67022,67024,67026],{"class":144,"line":1792},[142,67023,58273],{"class":152},[142,67025,58276],{"class":1991},[142,67027,67028],{"class":152},"(e)\n",[142,67030,67031],{"class":144,"line":1806},[142,67032,2428],{"emptyLinePlaceholder":69},[142,67034,67035,67037,67040],{"class":144,"line":1811},[142,67036,58273],{"class":152},[142,67038,67039],{"class":1991},"dir",[142,67041,67042],{"class":152},"(e.target)\n",[142,67044,67045],{"class":144,"line":2605},[142,67046,2428],{"emptyLinePlaceholder":69},[142,67048,67049],{"class":144,"line":2619},[142,67050,67051],{"class":211},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[142,67053,67054],{"class":144,"line":2627},[142,67055,67056],{"class":211},"      \u002F\u002F 通过tagName来进行判断\n",[142,67058,67059,67061,67064,67066,67069],{"class":144,"line":2632},[142,67060,54509],{"class":148},[142,67062,67063],{"class":152}," (e.target.tagName ",[142,67065,54515],{"class":148},[142,67067,67068],{"class":257}," 'LI'",[142,67070,12471],{"class":152},[142,67072,67073,67076,67078],{"class":144,"line":2638},[142,67074,67075],{"class":152},"        e.target.style.color ",[142,67077,198],{"class":148},[142,67079,67080],{"class":257}," 'red'\n",[142,67082,67083],{"class":144,"line":2644},[142,67084,52427],{"class":152},[142,67086,67087],{"class":144,"line":2649},[142,67088,33490],{"class":152},[142,67090,67091,67093,67095],{"class":144,"line":7977},[142,67092,52446],{"class":152},[142,67094,51842],{"class":51329},[142,67096,51336],{"class":152},[142,67098,67099,67101,67103],{"class":144,"line":8001},[142,67100,51814],{"class":152},[142,67102,51829],{"class":51329},[142,67104,51336],{"class":152},[142,67106,67107],{"class":144,"line":8006},[142,67108,2428],{"emptyLinePlaceholder":69},[142,67110,67111,67113,67115],{"class":144,"line":8012},[142,67112,51814],{"class":152},[142,67114,50664],{"class":51329},[142,67116,51336],{"class":152},[14,67118,67119],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67121,67122],{},"if(e.target.ragName==='P') {}",[14,67124,67125],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67127,67128],{},"通过事件委托的方式实现tab栏切换改造：",[14,67130,67131],{},"一定要记住自定义属性！！！！！！",[14,67133,67134],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67136,67137],{},"id是自定义的属性名",[14,67139,67140],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[133,67142,67144],{"className":50662,"code":67143,"language":50664,"meta":31,"style":31},"\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",[139,67145,67146,67156,67170,67174,67182,67196,67216,67236,67248,67256,67262,67272,67282,67286,67290,67296,67308,67320,67332,67348,67352,67356,67362,67374,67386,67398,67408,67418,67422,67426,67434,67446,67456,67468,67472,67476,67484,67494,67504,67514,67518,67522,67532,67546,67558,67562,67566,67578,67588,67604,67614,67618,67622,67636,67646,67656,67660,67664,67670,67684,67688,67692,67700,67710,67714,67718,67727,67737,67741,67749,67757,67761,67769,67783,67797,67809,67817,67856,67888,67920,67952,67984,67992,68000,68014,68048,68082,68116,68150,68184,68192,68200,68208,68213,68218,68237,68242,68262,68270,68275,68288,68309,68322,68326,68331,68336,68349,68369,68397,68401,68405,68409,68417,68425,68429],{"__ignoreMap":31},[142,67147,67148,67150,67152,67154],{"class":144,"line":145},[142,67149,51326],{"class":152},[142,67151,51330],{"class":51329},[142,67153,51333],{"class":1991},[142,67155,51336],{"class":152},[142,67157,67158,67160,67162,67164,67166,67168],{"class":144,"line":64},[142,67159,1063],{"class":152},[142,67161,50664],{"class":51329},[142,67163,51345],{"class":1991},[142,67165,198],{"class":152},[142,67167,51350],{"class":257},[142,67169,51336],{"class":152},[142,67171,67172],{"class":144,"line":1208},[142,67173,2428],{"emptyLinePlaceholder":69},[142,67175,67176,67178,67180],{"class":144,"line":1223},[142,67177,1063],{"class":152},[142,67179,51363],{"class":51329},[142,67181,51336],{"class":152},[142,67183,67184,67186,67188,67190,67192,67194],{"class":144,"line":1229},[142,67185,52173],{"class":152},[142,67187,51373],{"class":51329},[142,67189,51376],{"class":1991},[142,67191,198],{"class":152},[142,67193,51381],{"class":257},[142,67195,59156],{"class":152},[142,67197,67198,67200,67202,67204,67206,67208,67210,67212,67214],{"class":144,"line":1243},[142,67199,52173],{"class":152},[142,67201,51373],{"class":51329},[142,67203,51392],{"class":1991},[142,67205,198],{"class":152},[142,67207,51397],{"class":257},[142,67209,51400],{"class":1991},[142,67211,198],{"class":152},[142,67213,51405],{"class":257},[142,67215,59156],{"class":152},[142,67217,67218,67220,67222,67224,67226,67228,67230,67232,67234],{"class":144,"line":1249},[142,67219,52173],{"class":152},[142,67221,51373],{"class":51329},[142,67223,14949],{"class":1991},[142,67225,198],{"class":152},[142,67227,51420],{"class":257},[142,67229,51400],{"class":1991},[142,67231,198],{"class":152},[142,67233,51427],{"class":257},[142,67235,59156],{"class":152},[142,67237,67238,67240,67242,67244,67246],{"class":144,"line":1340},[142,67239,52173],{"class":152},[142,67241,51436],{"class":51329},[142,67243,63654],{"class":152},[142,67245,51436],{"class":51329},[142,67247,51336],{"class":152},[142,67249,67250,67252,67254],{"class":144,"line":1346},[142,67251,52173],{"class":152},[142,67253,5155],{"class":51329},[142,67255,51336],{"class":152},[142,67257,67258,67260],{"class":144,"line":1358},[142,67259,6432],{"class":51329},[142,67261,15601],{"class":152},[142,67263,67264,67266,67268,67270],{"class":144,"line":1640},[142,67265,54735],{"class":201},[142,67267,51466],{"class":152},[142,67269,344],{"class":201},[142,67271,1319],{"class":152},[142,67273,67274,67276,67278,67280],{"class":144,"line":1645},[142,67275,54724],{"class":201},[142,67277,51466],{"class":152},[142,67279,344],{"class":201},[142,67281,1319],{"class":152},[142,67283,67284],{"class":144,"line":1651},[142,67285,2215],{"class":152},[142,67287,67288],{"class":144,"line":1656},[142,67289,2428],{"emptyLinePlaceholder":69},[142,67291,67292,67294],{"class":144,"line":1670},[142,67293,63705],{"class":1991},[142,67295,15601],{"class":152},[142,67297,67298,67300,67302,67304,67306],{"class":144,"line":1675},[142,67299,54800],{"class":201},[142,67301,51466],{"class":152},[142,67303,63716],{"class":201},[142,67305,51521],{"class":148},[142,67307,1319],{"class":152},[142,67309,67310,67312,67314,67316,67318],{"class":144,"line":1681},[142,67311,54814],{"class":201},[142,67313,51466],{"class":152},[142,67315,63729],{"class":201},[142,67317,51521],{"class":148},[142,67319,1319],{"class":152},[142,67321,67322,67324,67326,67328,67330],{"class":144,"line":1702},[142,67323,54735],{"class":201},[142,67325,51466],{"class":152},[142,67327,853],{"class":201},[142,67329,51521],{"class":148},[142,67331,1319],{"class":152},[142,67333,67334,67336,67338,67340,67342,67344,67346],{"class":144,"line":1707},[142,67335,62006],{"class":201},[142,67337,51466],{"class":152},[142,67339,370],{"class":201},[142,67341,51521],{"class":148},[142,67343,51550],{"class":201},[142,67345,62273],{"class":201},[142,67347,1319],{"class":152},[142,67349,67350],{"class":144,"line":1721},[142,67351,2215],{"class":152},[142,67353,67354],{"class":144,"line":1726},[142,67355,2428],{"emptyLinePlaceholder":69},[142,67357,67358,67360],{"class":144,"line":1755},[142,67359,63774],{"class":1991},[142,67361,15601],{"class":152},[142,67363,67364,67366,67368,67370,67372],{"class":144,"line":1760},[142,67365,54800],{"class":201},[142,67367,51466],{"class":152},[142,67369,464],{"class":201},[142,67371,481],{"class":148},[142,67373,1319],{"class":152},[142,67375,67376,67378,67380,67382,67384],{"class":144,"line":1777},[142,67377,54814],{"class":201},[142,67379,51466],{"class":152},[142,67381,1060],{"class":201},[142,67383,51521],{"class":148},[142,67385,1319],{"class":152},[142,67387,67388,67390,67392,67394,67396],{"class":144,"line":1782},[142,67389,57388],{"class":201},[142,67391,51466],{"class":152},[142,67393,1060],{"class":201},[142,67395,51521],{"class":148},[142,67397,1319],{"class":152},[142,67399,67400,67402,67404,67406],{"class":144,"line":1787},[142,67401,55038],{"class":201},[142,67403,51466],{"class":152},[142,67405,51506],{"class":201},[142,67407,1319],{"class":152},[142,67409,67410,67412,67414,67416],{"class":144,"line":1792},[142,67411,55049],{"class":201},[142,67413,51466],{"class":152},[142,67415,51697],{"class":201},[142,67417,1319],{"class":152},[142,67419,67420],{"class":144,"line":1806},[142,67421,2215],{"class":152},[142,67423,67424],{"class":144,"line":1811},[142,67425,2428],{"emptyLinePlaceholder":69},[142,67427,67428,67430,67432],{"class":144,"line":2605},[142,67429,63774],{"class":1991},[142,67431,63847],{"class":51329},[142,67433,15601],{"class":152},[142,67435,67436,67438,67440,67442,67444],{"class":144,"line":2619},[142,67437,54951],{"class":201},[142,67439,51466],{"class":152},[142,67441,953],{"class":201},[142,67443,51521],{"class":148},[142,67445,1319],{"class":152},[142,67447,67448,67450,67452,67454],{"class":144,"line":2627},[142,67449,62363],{"class":201},[142,67451,51466],{"class":152},[142,67453,63870],{"class":201},[142,67455,1319],{"class":152},[142,67457,67458,67460,67462,67464,67466],{"class":144,"line":2632},[142,67459,62029],{"class":201},[142,67461,51466],{"class":152},[142,67463,853],{"class":201},[142,67465,51521],{"class":148},[142,67467,1319],{"class":152},[142,67469,67470],{"class":144,"line":2638},[142,67471,2215],{"class":152},[142,67473,67474],{"class":144,"line":2644},[142,67475,2428],{"emptyLinePlaceholder":69},[142,67477,67478,67480,67482],{"class":144,"line":2649},[142,67479,63774],{"class":1991},[142,67481,61321],{"class":51329},[142,67483,15601],{"class":152},[142,67485,67486,67488,67490,67492],{"class":144,"line":7977},[142,67487,54761],{"class":201},[142,67489,51466],{"class":152},[142,67491,54766],{"class":201},[142,67493,1319],{"class":152},[142,67495,67496,67498,67500,67502],{"class":144,"line":8001},[142,67497,55038],{"class":201},[142,67499,51466],{"class":152},[142,67501,51506],{"class":201},[142,67503,1319],{"class":152},[142,67505,67506,67508,67510,67512],{"class":144,"line":8006},[142,67507,55049],{"class":201},[142,67509,51466],{"class":152},[142,67511,51609],{"class":201},[142,67513,1319],{"class":152},[142,67515,67516],{"class":144,"line":8012},[142,67517,2215],{"class":152},[142,67519,67520],{"class":144,"line":8039},[142,67521,2428],{"emptyLinePlaceholder":69},[142,67523,67524,67526,67528,67530],{"class":144,"line":8044},[142,67525,63774],{"class":1991},[142,67527,61321],{"class":51329},[142,67529,55104],{"class":51329},[142,67531,15601],{"class":152},[142,67533,67534,67536,67538,67540,67542,67544],{"class":144,"line":8050},[142,67535,54735],{"class":201},[142,67537,51466],{"class":152},[142,67539,344],{"class":201},[142,67541,8979],{"class":201},[142,67543,51521],{"class":148},[142,67545,1319],{"class":152},[142,67547,67548,67550,67552,67554,67556],{"class":144,"line":8062},[142,67549,54951],{"class":201},[142,67551,51466],{"class":152},[142,67553,702],{"class":201},[142,67555,51521],{"class":148},[142,67557,1319],{"class":152},[142,67559,67560],{"class":144,"line":8074},[142,67561,2215],{"class":152},[142,67563,67564],{"class":144,"line":8086},[142,67565,2428],{"emptyLinePlaceholder":69},[142,67567,67568,67570,67572,67574,67576],{"class":144,"line":9745},[142,67569,63774],{"class":1991},[142,67571,61321],{"class":51329},[142,67573,55104],{"class":51329},[142,67575,1427],{"class":51329},[142,67577,15601],{"class":152},[142,67579,67580,67582,67584,67586],{"class":144,"line":9770},[142,67581,63999],{"class":201},[142,67583,51466],{"class":152},[142,67585,54766],{"class":201},[142,67587,1319],{"class":152},[142,67589,67590,67592,67594,67596,67598,67600,67602],{"class":144,"line":9793},[142,67591,62261],{"class":201},[142,67593,51466],{"class":152},[142,67595,230],{"class":201},[142,67597,51521],{"class":148},[142,67599,51550],{"class":201},[142,67601,64020],{"class":201},[142,67603,1319],{"class":152},[142,67605,67606,67608,67610,67612],{"class":144,"line":9817},[142,67607,57445],{"class":201},[142,67609,51466],{"class":152},[142,67611,62398],{"class":201},[142,67613,1319],{"class":152},[142,67615,67616],{"class":144,"line":9822},[142,67617,2215],{"class":152},[142,67619,67620],{"class":144,"line":9827},[142,67621,2428],{"emptyLinePlaceholder":69},[142,67623,67624,67626,67628,67630,67632,67634],{"class":144,"line":9832},[142,67625,63774],{"class":1991},[142,67627,61321],{"class":51329},[142,67629,55104],{"class":51329},[142,67631,1427],{"class":51329},[142,67633,64053],{"class":1991},[142,67635,15601],{"class":152},[142,67637,67638,67640,67642,67644],{"class":144,"line":9841},[142,67639,61820],{"class":201},[142,67641,51466],{"class":152},[142,67643,64064],{"class":201},[142,67645,1319],{"class":152},[142,67647,67648,67650,67652,67654],{"class":144,"line":9846},[142,67649,57445],{"class":201},[142,67651,51466],{"class":152},[142,67653,64064],{"class":201},[142,67655,1319],{"class":152},[142,67657,67658],{"class":144,"line":9852},[142,67659,2215],{"class":152},[142,67661,67662],{"class":144,"line":9873},[142,67663,2428],{"emptyLinePlaceholder":69},[142,67665,67666,67668],{"class":144,"line":9879},[142,67667,64089],{"class":1991},[142,67669,15601],{"class":152},[142,67671,67672,67674,67676,67678,67680,67682],{"class":144,"line":9893},[142,67673,54724],{"class":201},[142,67675,51466],{"class":152},[142,67677,344],{"class":201},[142,67679,64102],{"class":201},[142,67681,51521],{"class":148},[142,67683,1319],{"class":152},[142,67685,67686],{"class":144,"line":9899},[142,67687,2215],{"class":152},[142,67689,67690],{"class":144,"line":9926},[142,67691,2428],{"emptyLinePlaceholder":69},[142,67693,67694,67696,67698],{"class":144,"line":9935},[142,67695,64089],{"class":1991},[142,67697,62203],{"class":1991},[142,67699,15601],{"class":152},[142,67701,67702,67704,67706,67708],{"class":144,"line":9941},[142,67703,55038],{"class":201},[142,67705,51466],{"class":152},[142,67707,54766],{"class":201},[142,67709,1319],{"class":152},[142,67711,67712],{"class":144,"line":9949},[142,67713,2215],{"class":152},[142,67715,67716],{"class":144,"line":9954},[142,67717,2428],{"emptyLinePlaceholder":69},[142,67719,67720,67722,67725],{"class":144,"line":16633},[142,67721,64089],{"class":1991},[142,67723,67724],{"class":1991}," .active",[142,67726,15601],{"class":152},[142,67728,67729,67731,67733,67735],{"class":144,"line":16639},[142,67730,55038],{"class":201},[142,67732,51466],{"class":152},[142,67734,60898],{"class":201},[142,67736,1319],{"class":152},[142,67738,67739],{"class":144,"line":16662},[142,67740,2215],{"class":152},[142,67742,67743,67745,67747],{"class":144,"line":16668},[142,67744,52446],{"class":152},[142,67746,5155],{"class":51329},[142,67748,51336],{"class":152},[142,67750,67751,67753,67755],{"class":144,"line":16691},[142,67752,51814],{"class":152},[142,67754,51363],{"class":51329},[142,67756,51336],{"class":152},[142,67758,67759],{"class":144,"line":16705},[142,67760,2428],{"emptyLinePlaceholder":69},[142,67762,67763,67765,67767],{"class":144,"line":16725},[142,67764,1063],{"class":152},[142,67766,51829],{"class":51329},[142,67768,51336],{"class":152},[142,67770,67771,67773,67775,67777,67779,67781],{"class":144,"line":16731},[142,67772,52173],{"class":152},[142,67774,51640],{"class":51329},[142,67776,53515],{"class":1991},[142,67778,198],{"class":152},[142,67780,64204],{"class":257},[142,67782,51336],{"class":152},[142,67784,67785,67787,67789,67791,67793,67795],{"class":144,"line":16742},[142,67786,51370],{"class":152},[142,67788,51640],{"class":51329},[142,67790,53515],{"class":1991},[142,67792,198],{"class":152},[142,67794,64219],{"class":257},[142,67796,51336],{"class":152},[142,67798,67799,67801,67803,67805,67807],{"class":144,"line":16765},[142,67800,55263],{"class":152},[142,67802,113],{"class":51329},[142,67804,64230],{"class":152},[142,67806,113],{"class":51329},[142,67808,51336],{"class":152},[142,67810,67811,67813,67815],{"class":144,"line":16787},[142,67812,55263],{"class":152},[142,67814,1160],{"class":51329},[142,67816,51336],{"class":152},[142,67818,67819,67821,67823,67825,67827,67829,67831,67833,67835,67837,67839,67841,67843,67846,67848,67850,67852,67854],{"class":144,"line":16792},[142,67820,55331],{"class":152},[142,67822,99],{"class":51329},[142,67824,61081],{"class":152},[142,67826,391],{"class":51329},[142,67828,53515],{"class":1991},[142,67830,198],{"class":152},[142,67832,59735],{"class":257},[142,67834,61086],{"class":1991},[142,67836,198],{"class":152},[142,67838,64265],{"class":257},[142,67840,53980],{"class":1991},[142,67842,198],{"class":152},[142,67844,67845],{"class":257},"\"0\"",[142,67847,64268],{"class":152},[142,67849,391],{"class":51329},[142,67851,55343],{"class":152},[142,67853,99],{"class":51329},[142,67855,51336],{"class":152},[142,67857,67858,67860,67862,67864,67866,67868,67870,67872,67874,67876,67878,67880,67882,67884,67886],{"class":144,"line":16798},[142,67859,55331],{"class":152},[142,67861,99],{"class":51329},[142,67863,61081],{"class":152},[142,67865,391],{"class":51329},[142,67867,61086],{"class":1991},[142,67869,198],{"class":152},[142,67871,64265],{"class":257},[142,67873,53980],{"class":1991},[142,67875,198],{"class":152},[142,67877,3706],{"class":257},[142,67879,64295],{"class":152},[142,67881,391],{"class":51329},[142,67883,55343],{"class":152},[142,67885,99],{"class":51329},[142,67887,51336],{"class":152},[142,67889,67890,67892,67894,67896,67898,67900,67902,67904,67906,67908,67910,67912,67914,67916,67918],{"class":144,"line":16812},[142,67891,55331],{"class":152},[142,67893,99],{"class":51329},[142,67895,61081],{"class":152},[142,67897,391],{"class":51329},[142,67899,61086],{"class":1991},[142,67901,198],{"class":152},[142,67903,64265],{"class":257},[142,67905,53980],{"class":1991},[142,67907,198],{"class":152},[142,67909,3729],{"class":257},[142,67911,64322],{"class":152},[142,67913,391],{"class":51329},[142,67915,55343],{"class":152},[142,67917,99],{"class":51329},[142,67919,51336],{"class":152},[142,67921,67922,67924,67926,67928,67930,67932,67934,67936,67938,67940,67942,67944,67946,67948,67950],{"class":144,"line":16825},[142,67923,55331],{"class":152},[142,67925,99],{"class":51329},[142,67927,61081],{"class":152},[142,67929,391],{"class":51329},[142,67931,61086],{"class":1991},[142,67933,198],{"class":152},[142,67935,64265],{"class":257},[142,67937,53980],{"class":1991},[142,67939,198],{"class":152},[142,67941,3742],{"class":257},[142,67943,64349],{"class":152},[142,67945,391],{"class":51329},[142,67947,55343],{"class":152},[142,67949,99],{"class":51329},[142,67951,51336],{"class":152},[142,67953,67954,67956,67958,67960,67962,67964,67966,67968,67970,67972,67974,67976,67978,67980,67982],{"class":144,"line":16830},[142,67955,55331],{"class":152},[142,67957,99],{"class":51329},[142,67959,61081],{"class":152},[142,67961,391],{"class":51329},[142,67963,61086],{"class":1991},[142,67965,198],{"class":152},[142,67967,64265],{"class":257},[142,67969,53980],{"class":1991},[142,67971,198],{"class":152},[142,67973,3755],{"class":257},[142,67975,64376],{"class":152},[142,67977,391],{"class":51329},[142,67979,55343],{"class":152},[142,67981,99],{"class":51329},[142,67983,51336],{"class":152},[142,67985,67986,67988,67990],{"class":144,"line":16844},[142,67987,55436],{"class":152},[142,67989,1160],{"class":51329},[142,67991,51336],{"class":152},[142,67993,67994,67996,67998],{"class":144,"line":16849},[142,67995,51805],{"class":152},[142,67997,51640],{"class":51329},[142,67999,51336],{"class":152},[142,68001,68002,68004,68006,68008,68010,68012],{"class":144,"line":16855},[142,68003,51370],{"class":152},[142,68005,51640],{"class":51329},[142,68007,53515],{"class":1991},[142,68009,198],{"class":152},[142,68011,64413],{"class":257},[142,68013,51336],{"class":152},[142,68015,68016,68018,68020,68022,68024,68026,68028,68030,68032,68034,68036,68038,68040,68042,68044,68046],{"class":144,"line":16860},[142,68017,55263],{"class":152},[142,68019,51640],{"class":51329},[142,68021,53515],{"class":1991},[142,68023,198],{"class":152},[142,68025,64428],{"class":257},[142,68027,61081],{"class":152},[142,68029,29],{"class":51329},[142,68031,55268],{"class":1991},[142,68033,198],{"class":152},[142,68035,64439],{"class":257},[142,68037,55276],{"class":1991},[142,68039,198],{"class":152},[142,68041,7681],{"class":257},[142,68043,64448],{"class":152},[142,68045,51640],{"class":51329},[142,68047,51336],{"class":152},[142,68049,68050,68052,68054,68056,68058,68060,68062,68064,68066,68068,68070,68072,68074,68076,68078,68080],{"class":144,"line":16874},[142,68051,55263],{"class":152},[142,68053,51640],{"class":51329},[142,68055,53515],{"class":1991},[142,68057,198],{"class":152},[142,68059,62652],{"class":257},[142,68061,61081],{"class":152},[142,68063,29],{"class":51329},[142,68065,55268],{"class":1991},[142,68067,198],{"class":152},[142,68069,64475],{"class":257},[142,68071,55276],{"class":1991},[142,68073,198],{"class":152},[142,68075,7681],{"class":257},[142,68077,64448],{"class":152},[142,68079,51640],{"class":51329},[142,68081,51336],{"class":152},[142,68083,68084,68086,68088,68090,68092,68094,68096,68098,68100,68102,68104,68106,68108,68110,68112,68114],{"class":144,"line":16879},[142,68085,55263],{"class":152},[142,68087,51640],{"class":51329},[142,68089,53515],{"class":1991},[142,68091,198],{"class":152},[142,68093,62652],{"class":257},[142,68095,61081],{"class":152},[142,68097,29],{"class":51329},[142,68099,55268],{"class":1991},[142,68101,198],{"class":152},[142,68103,64510],{"class":257},[142,68105,55276],{"class":1991},[142,68107,198],{"class":152},[142,68109,7681],{"class":257},[142,68111,64448],{"class":152},[142,68113,51640],{"class":51329},[142,68115,51336],{"class":152},[142,68117,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136,68138,68140,68142,68144,68146,68148],{"class":144,"line":16884},[142,68119,55263],{"class":152},[142,68121,51640],{"class":51329},[142,68123,53515],{"class":1991},[142,68125,198],{"class":152},[142,68127,62652],{"class":257},[142,68129,61081],{"class":152},[142,68131,29],{"class":51329},[142,68133,55268],{"class":1991},[142,68135,198],{"class":152},[142,68137,64545],{"class":257},[142,68139,55276],{"class":1991},[142,68141,198],{"class":152},[142,68143,7681],{"class":257},[142,68145,64448],{"class":152},[142,68147,51640],{"class":51329},[142,68149,51336],{"class":152},[142,68151,68152,68154,68156,68158,68160,68162,68164,68166,68168,68170,68172,68174,68176,68178,68180,68182],{"class":144,"line":16898},[142,68153,55263],{"class":152},[142,68155,51640],{"class":51329},[142,68157,53515],{"class":1991},[142,68159,198],{"class":152},[142,68161,62652],{"class":257},[142,68163,61081],{"class":152},[142,68165,29],{"class":51329},[142,68167,55268],{"class":1991},[142,68169,198],{"class":152},[142,68171,64580],{"class":257},[142,68173,55276],{"class":1991},[142,68175,198],{"class":152},[142,68177,7681],{"class":257},[142,68179,64448],{"class":152},[142,68181,51640],{"class":51329},[142,68183,51336],{"class":152},[142,68185,68186,68188,68190],{"class":144,"line":16910},[142,68187,51805],{"class":152},[142,68189,51640],{"class":51329},[142,68191,51336],{"class":152},[142,68193,68194,68196,68198],{"class":144,"line":16915},[142,68195,52446],{"class":152},[142,68197,51640],{"class":51329},[142,68199,51336],{"class":152},[142,68201,68202,68204,68206],{"class":144,"line":16928},[142,68203,52173],{"class":152},[142,68205,51842],{"class":51329},[142,68207,51336],{"class":152},[142,68209,68210],{"class":144,"line":16933},[142,68211,68212],{"class":211},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[142,68214,68215],{"class":144,"line":16938},[142,68216,68217],{"class":211},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[142,68219,68220,68222,68224,68226,68228,68230,68232,68235],{"class":144,"line":16943},[142,68221,11250],{"class":148},[142,68223,61321],{"class":201},[142,68225,13593],{"class":148},[142,68227,54425],{"class":152},[142,68229,54428],{"class":1991},[142,68231,153],{"class":152},[142,68233,68234],{"class":257},"'.tab-nav ul'",[142,68236,159],{"class":152},[142,68238,68239],{"class":144,"line":16956},[142,68240,68241],{"class":211},"    \u002F\u002F 2.添加事件\n",[142,68243,68244,68246,68248,68250,68252,68254,68256,68258,68260],{"class":144,"line":16961},[142,68245,66983],{"class":152},[142,68247,57842],{"class":1991},[142,68249,153],{"class":152},[142,68251,57847],{"class":257},[142,68253,12464],{"class":152},[142,68255,54478],{"class":148},[142,68257,1686],{"class":152},[142,68259,227],{"class":5245},[142,68261,12471],{"class":152},[142,68263,68264,68266,68268],{"class":144,"line":32662},[142,68265,58273],{"class":152},[142,68267,67039],{"class":1991},[142,68269,67042],{"class":152},[142,68271,68272],{"class":144,"line":32668},[142,68273,68274],{"class":211},"      \u002F\u002Fe.targer是我们点击的对象\n",[142,68276,68277,68279,68281,68283,68286],{"class":144,"line":32674},[142,68278,54509],{"class":148},[142,68280,67063],{"class":152},[142,68282,54515],{"class":148},[142,68284,68285],{"class":257}," 'A'",[142,68287,12471],{"class":152},[142,68289,68290,68292,68294,68296,68299,68301,68303,68305,68307],{"class":144,"line":32680},[142,68291,51954],{"class":152},[142,68293,54428],{"class":1991},[142,68295,153],{"class":152},[142,68297,68298],{"class":257},"'.active'",[142,68300,57032],{"class":152},[142,68302,57035],{"class":1991},[142,68304,153],{"class":152},[142,68306,64743],{"class":257},[142,68308,159],{"class":152},[142,68310,68311,68314,68316,68318,68320],{"class":144,"line":32686},[142,68312,68313],{"class":152},"        e.target.classList.",[142,68315,5363],{"class":1991},[142,68317,153],{"class":152},[142,68319,64743],{"class":257},[142,68321,159],{"class":152},[142,68323,68324],{"class":144,"line":32697},[142,68325,2428],{"emptyLinePlaceholder":69},[142,68327,68328],{"class":144,"line":32703},[142,68329,68330],{"class":211},"        \u002F\u002F 下面大盒子模块\n",[142,68332,68333],{"class":144,"line":32723},[142,68334,68335],{"class":211},"        \u002F\u002F console.log(e.target.dataset.id)\n",[142,68337,68338,68340,68342,68344,68346],{"class":144,"line":32729},[142,68339,61299],{"class":148},[142,68341,3060],{"class":201},[142,68343,13593],{"class":148},[142,68345,45595],{"class":148},[142,68347,68348],{"class":152},"e.target.dataset.id\n",[142,68350,68351,68353,68355,68357,68359,68361,68363,68365,68367],{"class":144,"line":32740},[142,68352,51954],{"class":152},[142,68354,54428],{"class":1991},[142,68356,153],{"class":152},[142,68358,64791],{"class":257},[142,68360,57032],{"class":152},[142,68362,57035],{"class":1991},[142,68364,153],{"class":152},[142,68366,64743],{"class":257},[142,68368,159],{"class":152},[142,68370,68371,68373,68375,68377,68379,68381,68383,68385,68387,68389,68391,68393,68395],{"class":144,"line":32746},[142,68372,51954],{"class":152},[142,68374,54428],{"class":1991},[142,68376,153],{"class":152},[142,68378,64817],{"class":257},[142,68380,594],{"class":152},[142,68382,45595],{"class":148},[142,68384,25147],{"class":201},[142,68386,57061],{"class":257},[142,68388,57032],{"class":152},[142,68390,5363],{"class":1991},[142,68392,153],{"class":152},[142,68394,64743],{"class":257},[142,68396,159],{"class":152},[142,68398,68399],{"class":144,"line":32752},[142,68400,2428],{"emptyLinePlaceholder":69},[142,68402,68403],{"class":144,"line":32758},[142,68404,52427],{"class":152},[142,68406,68407],{"class":144,"line":32764},[142,68408,33490],{"class":152},[142,68410,68411,68413,68415],{"class":144,"line":32770},[142,68412,52446],{"class":152},[142,68414,51842],{"class":51329},[142,68416,51336],{"class":152},[142,68418,68419,68421,68423],{"class":144,"line":32776},[142,68420,51814],{"class":152},[142,68422,51829],{"class":51329},[142,68424,51336],{"class":152},[142,68426,68427],{"class":144,"line":32782},[142,68428,2428],{"emptyLinePlaceholder":69},[142,68430,68431,68433,68435],{"class":144,"line":32802},[142,68432,51814],{"class":152},[142,68434,50664],{"class":51329},[142,68436,51336],{"class":152},[113,68438,68440],{"id":68439},"_333-页面加载事件","3.3.3 页面加载事件",[96,68442,68443],{},[99,68444,68445],{},"load",[14,68447,68448],{},[29,68449],{"alt":31,"src":68450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68452,68453],{},"window代表整个窗口，比document还要大",[14,68455,68456],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68458,68459],{},"img.addEventListener('load', function () {",[14,68461,68462],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68464,52493],{},[96,68466,68467],{"start":64},[99,68468,68469],{},"DOMContentLoaded",[14,68471,68472],{},[29,68473],{"alt":31,"src":68474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68476,68477],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[113,68479,68481],{"id":68480},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68483,68484],{},[29,68485],{"alt":31,"src":68486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68488,68489],{},[29,68490],{"alt":31,"src":68491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68493,68494],{},[29,68495],{"alt":31,"src":68496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68498,68499],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68501,68502],{},"获得的是数字型数据，不带单位",[14,68504,68505],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68507,68508],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68510,68511],{},"它是通过document.documentElement来获取",[14,68513,68514],{},[29,68515],{"alt":31,"src":68516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68518,68519],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[113,68521,68523],{"id":68522},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68525,68526],{},[29,68527],{"alt":31,"src":68528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68530,68531],{},[29,68532],{"alt":31,"src":68533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[113,68535,68537],{"id":68536},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68539,68540],{},[29,68541],{"alt":31,"src":68542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68544,68545],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68547,68548],{},[29,68549],{"alt":31,"src":68550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68552,68553],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68555,68556],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68558,68559],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68561,68562],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68564,68565],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68567,68568],{},[29,68569],{"alt":31,"src":68570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68572,68573],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68575,68576],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68578,68579],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68581,68582],{},"e.pageX-box.getBoundingClientRect()",[113,68584,68586],{"id":68585},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68588,68589],{},[29,68590],{"alt":31,"src":68591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68593,68594],{},"这个是相对于视口来说的，它是个方法，不是属性值",[113,68596,68598],{"id":68597},"_338-总结","3.3.8 总结",[14,68600,68601],{},[29,68602],{"alt":31,"src":68603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68605,68606],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68608,68609],{},"修改盒子的宽高只能通过width和height来实现",[113,68611,68613],{"id":68612},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[133,68615,68617],{"className":50662,"code":68616,"language":50664,"meta":31,"style":31},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[139,68618,68619,68624,68629,68634,68639],{"__ignoreMap":31},[142,68620,68621],{"class":144,"line":145},[142,68622,68623],{"class":152},"\u002F* 页面滑动 *\u002F\n",[142,68625,68626],{"class":144,"line":64},[142,68627,68628],{"class":152},"html {\n",[142,68630,68631],{"class":144,"line":1208},[142,68632,68633],{"class":152},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[142,68635,68636],{"class":144,"line":1223},[142,68637,68638],{"class":152},"  scroll-behavior: smooth;\n",[142,68640,68641],{"class":144,"line":1229},[142,68642,1593],{"class":152},[14,68644,68645],{},"默认是auto",[113,68647,68649],{"id":68648},"_3310-日期对象","3.3.10 日期对象",[22027,68651,68653],{"id":68652},"_33101-实例化","3.3.10.1 实例化",[14,68655,68656],{},[29,68657],{"alt":31,"src":68658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22027,68660,68662],{"id":68661},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68664,68665],{},[29,68666],{"alt":31,"src":68667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68669,68670],{},"月份+1",[14,68672,68673],{},"老外认为第一天为0，星期天",[14,68675,68676],{},"方法使用的时候必须要跟括号",[14,68678,68679],{},"快速获得日期",[14,68681,68682],{},"\u002F\u002F 得到年月日",[14,68684,68685],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68687,68688],{},"\u002F\u002F 得到当地日期",[14,68690,68691],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68693,68694],{},"\u002F\u002F 得到当地时间",[14,68696,68697],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68699,68700],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68702,68703],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51842,68705,68706],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[14,68708,68709],{},"学会去封装函数！",[22027,68711,68713],{"id":68712},"_33103-时间戳","3.3.10.3 时间戳",[14,68715,68716],{},[29,68717],{"alt":31,"src":68718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68720,68721],{},[29,68722],{"alt":31,"src":68723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68725,68726],{},"三种方法记住一个就可以",[113,68728,68730],{"id":68729},"_3311-节点操作","3.3.11 节点操作",[22027,68732,68734],{"id":68733},"_33111-dom节点","3.3.11.1 DOM节点",[14,68736,68737],{},[29,68738],{"alt":31,"src":68739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68741,68742],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22027,68744,68746],{"id":68745},"_33112-查找节点","3.3.11.2 查找节点",[14,68748,68749],{},"前边的document.querySelector()是获取的元素",[14,68751,68752],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68754,68755],{},[29,68756],{"alt":31,"src":68757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[96,68759,68760],{},[99,68761,68762],{},"父节点",[14,68764,68765],{},[29,68766],{"alt":31,"src":68767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[96,68769,68770],{"start":64},[99,68771,68772],{},"子节点",[14,68774,68775],{},[29,68776],{"alt":31,"src":68777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68779,68780],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68782,68783],{},"children获得的是伪数组，是亲儿子",[96,68785,68786],{"start":1208},[99,68787,68788],{},"兄弟节点",[14,68790,68791],{},[29,68792],{"alt":31,"src":68793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22027,68795,68797],{"id":68796},"_33113-增加节点","3.3.11.3 增加节点",[14,68799,68800],{},[29,68801],{"alt":31,"src":68802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68804,68805],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68807,68808],{},[29,68809],{"alt":31,"src":68810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68812,68813],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68815,68816],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68818,68819],{},"例：",[51842,68821,68822],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[14,68824,68825],{},[29,68826],{"alt":31,"src":68827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68829,68830],{},"false只克隆标签，里边的内容不会克隆过来",[133,68832,68834],{"className":50662,"code":68833,"language":50664,"meta":31,"style":31},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[139,68835,68836],{"__ignoreMap":31},[142,68837,68838],{"class":144,"line":145},[142,68839,68833],{"class":152},[22027,68841,68843],{"id":68842},"_33114-删除节点","3.3.11.4 删除节点",[14,68845,68846],{},[29,68847],{"alt":31,"src":68848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68850,68851],{},"父亲删儿子",[14,68853,68854],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[113,68856,68858],{"id":68857},"_3312-m端事件","3.3.12 M端事件",[14,68860,68861],{},"M端就是移动端",[14,68863,68864],{},[29,68865],{"alt":31,"src":68866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[113,68868,68870],{"id":68869},"_3313-插件","3.3.13 插件",[14,68872,68873],{},"要熟悉官网！！！",[14,68875,68876],{},[391,68877,68878],{"href":68878,"rel":68879},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23894],[14,68881,68882],{},[391,68883,68884],{"href":68884,"rel":68885},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23894],[113,68887,68889],{"id":68888},"_3314-学生信息表","3.3.14 学生信息表",[96,68891,68892,68895,68898,68901,68904,68907,68910,68913],{},[99,68893,68894],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[99,68896,68897],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[99,68899,68900],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[99,68902,68903],{},"用好表单元素自带的属性，value,name等",[99,68905,68906],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[99,68908,68909],{},"不要忘记事件对象",[99,68911,68912],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[99,68914,68915],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68917,68918],{},"结构：",[133,68920,68922],{"className":50662,"code":68921,"language":50664,"meta":31,"style":31},"\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",[139,68923,68924,68934,68948,68952,68960,68974,68994,69015,69028,69052,69060,69064,69072,69085,69106,69134,69162,69167,69189,69209,69228,69236,69264,69286,69306,69326,69346,69366,69386,69394,69414,69422,69426,69439,69447,69455,69463,69476,69489,69502,69515,69528,69541,69554,69562,69570,69578,69583,69588,69593,69598,69603,69608,69613,69618,69623,69628,69633,69638,69643,69651,69659,69667,69671,69691,69710,69730,69750,69770,69790,69794,69799,69819,69824,69834,69839,69844,69864,69886,69891,69901,69905,69909,69914,69919,69948,69962,69977,69981,69985,69989,69994,70005,70018,70023,70028,70033,70038,70043,70047,70052,70057,70066,70071,70076,70088,70093,70100,70104,70109,70119,70124,70134,70139,70167,70188,70198,70218,70236,70253,70270,70287,70304,70308,70318,70323,70328,70333,70344,70348,70352,70356,70361,70366,70387,70399,70404,70409,70414,70428,70433,70440,70444,70448,70456,70460,70468,70472],{"__ignoreMap":31},[142,68925,68926,68928,68930,68932],{"class":144,"line":145},[142,68927,51326],{"class":152},[142,68929,51330],{"class":51329},[142,68931,51333],{"class":1991},[142,68933,51336],{"class":152},[142,68935,68936,68938,68940,68942,68944,68946],{"class":144,"line":64},[142,68937,1063],{"class":152},[142,68939,50664],{"class":51329},[142,68941,51345],{"class":1991},[142,68943,198],{"class":152},[142,68945,51350],{"class":257},[142,68947,51336],{"class":152},[142,68949,68950],{"class":144,"line":1208},[142,68951,2428],{"emptyLinePlaceholder":69},[142,68953,68954,68956,68958],{"class":144,"line":1223},[142,68955,1063],{"class":152},[142,68957,51363],{"class":51329},[142,68959,51336],{"class":152},[142,68961,68962,68964,68966,68968,68970,68972],{"class":144,"line":1229},[142,68963,52173],{"class":152},[142,68965,51373],{"class":51329},[142,68967,51376],{"class":1991},[142,68969,198],{"class":152},[142,68971,51381],{"class":257},[142,68973,59156],{"class":152},[142,68975,68976,68978,68980,68982,68984,68986,68988,68990,68992],{"class":144,"line":1243},[142,68977,52173],{"class":152},[142,68979,51373],{"class":51329},[142,68981,14949],{"class":1991},[142,68983,198],{"class":152},[142,68985,51420],{"class":257},[142,68987,51400],{"class":1991},[142,68989,198],{"class":152},[142,68991,51427],{"class":257},[142,68993,59156],{"class":152},[142,68995,68996,68998,69000,69002,69004,69006,69008,69010,69013],{"class":144,"line":1249},[142,68997,52173],{"class":152},[142,68999,51373],{"class":51329},[142,69001,51392],{"class":1991},[142,69003,198],{"class":152},[142,69005,51397],{"class":257},[142,69007,51400],{"class":1991},[142,69009,198],{"class":152},[142,69011,69012],{"class":257},"\"ie=edge\"",[142,69014,59156],{"class":152},[142,69016,69017,69019,69021,69024,69026],{"class":144,"line":1340},[142,69018,52173],{"class":152},[142,69020,51436],{"class":51329},[142,69022,69023],{"class":152},">学生信息管理\u003C\u002F",[142,69025,51436],{"class":51329},[142,69027,51336],{"class":152},[142,69029,69030,69032,69035,69038,69040,69043,69045,69047,69050],{"class":144,"line":1346},[142,69031,52173],{"class":152},[142,69033,69034],{"class":51329},"link",[142,69036,69037],{"class":1991}," rel",[142,69039,198],{"class":152},[142,69041,69042],{"class":257},"\"stylesheet\"",[142,69044,61086],{"class":1991},[142,69046,198],{"class":152},[142,69048,69049],{"class":257},"\"css\u002Findex.css\"",[142,69051,59156],{"class":152},[142,69053,69054,69056,69058],{"class":144,"line":1358},[142,69055,51814],{"class":152},[142,69057,51363],{"class":51329},[142,69059,51336],{"class":152},[142,69061,69062],{"class":144,"line":1640},[142,69063,2428],{"emptyLinePlaceholder":69},[142,69065,69066,69068,69070],{"class":144,"line":1645},[142,69067,1063],{"class":152},[142,69069,51829],{"class":51329},[142,69071,51336],{"class":152},[142,69073,69074,69076,69078,69081,69083],{"class":144,"line":1651},[142,69075,52173],{"class":152},[142,69077,10],{"class":51329},[142,69079,69080],{"class":152},">新增学员\u003C\u002F",[142,69082,10],{"class":51329},[142,69084,51336],{"class":152},[142,69086,69087,69089,69091,69093,69095,69097,69100,69102,69104],{"class":144,"line":1656},[142,69088,52173],{"class":152},[142,69090,66654],{"class":51329},[142,69092,53515],{"class":1991},[142,69094,198],{"class":152},[142,69096,62693],{"class":257},[142,69098,69099],{"class":1991}," autocomplete",[142,69101,198],{"class":152},[142,69103,31805],{"class":257},[142,69105,51336],{"class":152},[142,69107,69108,69111,69113,69115,69117,69119,69121,69123,69126,69128,69130,69132],{"class":144,"line":1670},[142,69109,69110],{"class":152},"    姓名：\u003C",[142,69112,53850],{"class":51329},[142,69114,53853],{"class":1991},[142,69116,198],{"class":152},[142,69118,62728],{"class":257},[142,69120,53515],{"class":1991},[142,69122,198],{"class":152},[142,69124,69125],{"class":257},"\"uname\"",[142,69127,14949],{"class":1991},[142,69129,198],{"class":152},[142,69131,69125],{"class":257},[142,69133,59156],{"class":152},[142,69135,69136,69139,69141,69143,69145,69147,69149,69151,69154,69156,69158,69160],{"class":144,"line":1675},[142,69137,69138],{"class":152},"    年龄：\u003C",[142,69140,53850],{"class":51329},[142,69142,53853],{"class":1991},[142,69144,198],{"class":152},[142,69146,62728],{"class":257},[142,69148,53515],{"class":1991},[142,69150,198],{"class":152},[142,69152,69153],{"class":257},"\"age\"",[142,69155,14949],{"class":1991},[142,69157,198],{"class":152},[142,69159,69153],{"class":257},[142,69161,59156],{"class":152},[142,69163,69164],{"class":144,"line":1681},[142,69165,69166],{"class":152},"    性别:\n",[142,69168,69169,69171,69174,69176,69178,69181,69183,69185,69187],{"class":144,"line":1702},[142,69170,51370],{"class":152},[142,69172,69173],{"class":51329},"select",[142,69175,14949],{"class":1991},[142,69177,198],{"class":152},[142,69179,69180],{"class":257},"\"gender\"",[142,69182,53515],{"class":1991},[142,69184,198],{"class":152},[142,69186,69180],{"class":257},[142,69188,51336],{"class":152},[142,69190,69191,69193,69196,69198,69200,69202,69205,69207],{"class":144,"line":1707},[142,69192,55263],{"class":152},[142,69194,69195],{"class":51329},"option",[142,69197,66680],{"class":1991},[142,69199,198],{"class":152},[142,69201,9990],{"class":257},[142,69203,69204],{"class":152},">男\u003C\u002F",[142,69206,69195],{"class":51329},[142,69208,51336],{"class":152},[142,69210,69211,69213,69215,69217,69219,69221,69224,69226],{"class":144,"line":1721},[142,69212,55263],{"class":152},[142,69214,69195],{"class":51329},[142,69216,66680],{"class":1991},[142,69218,198],{"class":152},[142,69220,10059],{"class":257},[142,69222,69223],{"class":152},">女\u003C\u002F",[142,69225,69195],{"class":51329},[142,69227,51336],{"class":152},[142,69229,69230,69232,69234],{"class":144,"line":1726},[142,69231,51805],{"class":152},[142,69233,69173],{"class":51329},[142,69235,51336],{"class":152},[142,69237,69238,69241,69243,69245,69247,69249,69251,69253,69256,69258,69260,69262],{"class":144,"line":1755},[142,69239,69240],{"class":152},"    薪资：\u003C",[142,69242,53850],{"class":51329},[142,69244,53853],{"class":1991},[142,69246,198],{"class":152},[142,69248,62728],{"class":257},[142,69250,53515],{"class":1991},[142,69252,198],{"class":152},[142,69254,69255],{"class":257},"\"salary\"",[142,69257,14949],{"class":1991},[142,69259,198],{"class":152},[142,69261,69255],{"class":257},[142,69263,59156],{"class":152},[142,69265,69266,69269,69271,69273,69275,69278,69280,69282,69284],{"class":144,"line":1760},[142,69267,69268],{"class":152},"    就业城市：\u003C",[142,69270,69173],{"class":51329},[142,69272,14949],{"class":1991},[142,69274,198],{"class":152},[142,69276,69277],{"class":257},"\"city\"",[142,69279,53515],{"class":1991},[142,69281,198],{"class":152},[142,69283,69277],{"class":257},[142,69285,51336],{"class":152},[142,69287,69288,69290,69292,69294,69296,69299,69302,69304],{"class":144,"line":1777},[142,69289,55263],{"class":152},[142,69291,69195],{"class":51329},[142,69293,66680],{"class":1991},[142,69295,198],{"class":152},[142,69297,69298],{"class":257},"\"北京\"",[142,69300,69301],{"class":152},">北京\u003C\u002F",[142,69303,69195],{"class":51329},[142,69305,51336],{"class":152},[142,69307,69308,69310,69312,69314,69316,69319,69322,69324],{"class":144,"line":1782},[142,69309,55263],{"class":152},[142,69311,69195],{"class":51329},[142,69313,66680],{"class":1991},[142,69315,198],{"class":152},[142,69317,69318],{"class":257},"\"上海\"",[142,69320,69321],{"class":152},">上海\u003C\u002F",[142,69323,69195],{"class":51329},[142,69325,51336],{"class":152},[142,69327,69328,69330,69332,69334,69336,69339,69342,69344],{"class":144,"line":1787},[142,69329,55263],{"class":152},[142,69331,69195],{"class":51329},[142,69333,66680],{"class":1991},[142,69335,198],{"class":152},[142,69337,69338],{"class":257},"\"广州\"",[142,69340,69341],{"class":152},">广州\u003C\u002F",[142,69343,69195],{"class":51329},[142,69345,51336],{"class":152},[142,69347,69348,69350,69352,69354,69356,69359,69362,69364],{"class":144,"line":1792},[142,69349,55263],{"class":152},[142,69351,69195],{"class":51329},[142,69353,66680],{"class":1991},[142,69355,198],{"class":152},[142,69357,69358],{"class":257},"\"深圳\"",[142,69360,69361],{"class":152},">深圳\u003C\u002F",[142,69363,69195],{"class":51329},[142,69365,51336],{"class":152},[142,69367,69368,69370,69372,69374,69376,69379,69382,69384],{"class":144,"line":1806},[142,69369,55263],{"class":152},[142,69371,69195],{"class":51329},[142,69373,66680],{"class":1991},[142,69375,198],{"class":152},[142,69377,69378],{"class":257},"\"曹县\"",[142,69380,69381],{"class":152},">曹县\u003C\u002F",[142,69383,69195],{"class":51329},[142,69385,51336],{"class":152},[142,69387,69388,69390,69392],{"class":144,"line":1811},[142,69389,51805],{"class":152},[142,69391,69173],{"class":51329},[142,69393,51336],{"class":152},[142,69395,69396,69398,69400,69402,69404,69407,69410,69412],{"class":144,"line":2605},[142,69397,51370],{"class":152},[142,69399,53916],{"class":51329},[142,69401,53515],{"class":1991},[142,69403,198],{"class":152},[142,69405,69406],{"class":257},"\"add\"",[142,69408,69409],{"class":152},">录入\u003C\u002F",[142,69411,53916],{"class":51329},[142,69413,51336],{"class":152},[142,69415,69416,69418,69420],{"class":144,"line":2619},[142,69417,52446],{"class":152},[142,69419,66654],{"class":51329},[142,69421,51336],{"class":152},[142,69423,69424],{"class":144,"line":2627},[142,69425,2428],{"emptyLinePlaceholder":69},[142,69427,69428,69430,69432,69435,69437],{"class":144,"line":2632},[142,69429,52173],{"class":152},[142,69431,10],{"class":51329},[142,69433,69434],{"class":152},">就业榜\u003C\u002F",[142,69436,10],{"class":51329},[142,69438,51336],{"class":152},[142,69440,69441,69443,69445],{"class":144,"line":2638},[142,69442,52173],{"class":152},[142,69444,290],{"class":51329},[142,69446,51336],{"class":152},[142,69448,69449,69451,69453],{"class":144,"line":2644},[142,69450,51370],{"class":152},[142,69452,293],{"class":51329},[142,69454,51336],{"class":152},[142,69456,69457,69459,69461],{"class":144,"line":2649},[142,69458,55263],{"class":152},[142,69460,296],{"class":51329},[142,69462,51336],{"class":152},[142,69464,69465,69467,69469,69472,69474],{"class":144,"line":7977},[142,69466,55331],{"class":152},[142,69468,299],{"class":51329},[142,69470,69471],{"class":152},">序号\u003C\u002F",[142,69473,299],{"class":51329},[142,69475,51336],{"class":152},[142,69477,69478,69480,69482,69485,69487],{"class":144,"line":8001},[142,69479,55331],{"class":152},[142,69481,299],{"class":51329},[142,69483,69484],{"class":152},">姓名\u003C\u002F",[142,69486,299],{"class":51329},[142,69488,51336],{"class":152},[142,69490,69491,69493,69495,69498,69500],{"class":144,"line":8006},[142,69492,55331],{"class":152},[142,69494,299],{"class":51329},[142,69496,69497],{"class":152},">年龄\u003C\u002F",[142,69499,299],{"class":51329},[142,69501,51336],{"class":152},[142,69503,69504,69506,69508,69511,69513],{"class":144,"line":8012},[142,69505,55331],{"class":152},[142,69507,299],{"class":51329},[142,69509,69510],{"class":152},">性别\u003C\u002F",[142,69512,299],{"class":51329},[142,69514,51336],{"class":152},[142,69516,69517,69519,69521,69524,69526],{"class":144,"line":8039},[142,69518,55331],{"class":152},[142,69520,299],{"class":51329},[142,69522,69523],{"class":152},">薪资\u003C\u002F",[142,69525,299],{"class":51329},[142,69527,51336],{"class":152},[142,69529,69530,69532,69534,69537,69539],{"class":144,"line":8044},[142,69531,55331],{"class":152},[142,69533,299],{"class":51329},[142,69535,69536],{"class":152},">就业城市\u003C\u002F",[142,69538,299],{"class":51329},[142,69540,51336],{"class":152},[142,69542,69543,69545,69547,69550,69552],{"class":144,"line":8050},[142,69544,55331],{"class":152},[142,69546,299],{"class":51329},[142,69548,69549],{"class":152},">操作\u003C\u002F",[142,69551,299],{"class":51329},[142,69553,51336],{"class":152},[142,69555,69556,69558,69560],{"class":144,"line":8062},[142,69557,55436],{"class":152},[142,69559,296],{"class":51329},[142,69561,51336],{"class":152},[142,69563,69564,69566,69568],{"class":144,"line":8074},[142,69565,51805],{"class":152},[142,69567,293],{"class":51329},[142,69569,51336],{"class":152},[142,69571,69572,69574,69576],{"class":144,"line":8086},[142,69573,51370],{"class":152},[142,69575,337],{"class":51329},[142,69577,51336],{"class":152},[142,69579,69580],{"class":144,"line":9745},[142,69581,69582],{"class":211},"      \u003C!-- \n",[142,69584,69585],{"class":144,"line":9770},[142,69586,69587],{"class":211},"        \u003Ctr>\n",[142,69589,69590],{"class":144,"line":9793},[142,69591,69592],{"class":211},"          \u003Ctd>1001\u003C\u002Ftd>\n",[142,69594,69595],{"class":144,"line":9817},[142,69596,69597],{"class":211},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[142,69599,69600],{"class":144,"line":9822},[142,69601,69602],{"class":211},"          \u003Ctd>19\u003C\u002Ftd>\n",[142,69604,69605],{"class":144,"line":9827},[142,69606,69607],{"class":211},"          \u003Ctd>男\u003C\u002Ftd>\n",[142,69609,69610],{"class":144,"line":9832},[142,69611,69612],{"class":211},"          \u003Ctd>15000\u003C\u002Ftd>\n",[142,69614,69615],{"class":144,"line":9841},[142,69616,69617],{"class":211},"          \u003Ctd>上海\u003C\u002Ftd>\n",[142,69619,69620],{"class":144,"line":9846},[142,69621,69622],{"class":211},"          \u003Ctd>\n",[142,69624,69625],{"class":144,"line":9852},[142,69626,69627],{"class":211},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[142,69629,69630],{"class":144,"line":9873},[142,69631,69632],{"class":211},"          \u003C\u002Ftd>\n",[142,69634,69635],{"class":144,"line":9879},[142,69636,69637],{"class":211},"        \u003C\u002Ftr> \n",[142,69639,69640],{"class":144,"line":9893},[142,69641,69642],{"class":211},"        -->\n",[142,69644,69645,69647,69649],{"class":144,"line":9899},[142,69646,51805],{"class":152},[142,69648,337],{"class":51329},[142,69650,51336],{"class":152},[142,69652,69653,69655,69657],{"class":144,"line":9926},[142,69654,52446],{"class":152},[142,69656,290],{"class":51329},[142,69658,51336],{"class":152},[142,69660,69661,69663,69665],{"class":144,"line":9935},[142,69662,52173],{"class":152},[142,69664,51842],{"class":51329},[142,69666,51336],{"class":152},[142,69668,69669],{"class":144,"line":9941},[142,69670,59987],{"class":211},[142,69672,69673,69675,69678,69680,69682,69684,69686,69689],{"class":144,"line":9949},[142,69674,11250],{"class":148},[142,69676,69677],{"class":201}," uname",[142,69679,13593],{"class":148},[142,69681,54425],{"class":152},[142,69683,54428],{"class":1991},[142,69685,153],{"class":152},[142,69687,69688],{"class":257},"'.uname'",[142,69690,159],{"class":152},[142,69692,69693,69695,69697,69699,69701,69703,69705,69708],{"class":144,"line":9954},[142,69694,11250],{"class":148},[142,69696,15718],{"class":201},[142,69698,13593],{"class":148},[142,69700,54425],{"class":152},[142,69702,54428],{"class":1991},[142,69704,153],{"class":152},[142,69706,69707],{"class":257},"'.age'",[142,69709,159],{"class":152},[142,69711,69712,69714,69717,69719,69721,69723,69725,69728],{"class":144,"line":16633},[142,69713,11250],{"class":148},[142,69715,69716],{"class":201}," gender",[142,69718,13593],{"class":148},[142,69720,54425],{"class":152},[142,69722,54428],{"class":1991},[142,69724,153],{"class":152},[142,69726,69727],{"class":257},"'.gender'",[142,69729,159],{"class":152},[142,69731,69732,69734,69737,69739,69741,69743,69745,69748],{"class":144,"line":16639},[142,69733,11250],{"class":148},[142,69735,69736],{"class":201}," salary",[142,69738,13593],{"class":148},[142,69740,54425],{"class":152},[142,69742,54428],{"class":1991},[142,69744,153],{"class":152},[142,69746,69747],{"class":257},"'.salary'",[142,69749,159],{"class":152},[142,69751,69752,69754,69757,69759,69761,69763,69765,69768],{"class":144,"line":16662},[142,69753,11250],{"class":148},[142,69755,69756],{"class":201}," city",[142,69758,13593],{"class":148},[142,69760,54425],{"class":152},[142,69762,54428],{"class":1991},[142,69764,153],{"class":152},[142,69766,69767],{"class":257},"'.city'",[142,69769,159],{"class":152},[142,69771,69772,69774,69777,69779,69781,69783,69785,69788],{"class":144,"line":16668},[142,69773,11250],{"class":148},[142,69775,69776],{"class":201}," tbody",[142,69778,13593],{"class":148},[142,69780,54425],{"class":152},[142,69782,54428],{"class":1991},[142,69784,153],{"class":152},[142,69786,69787],{"class":257},"'tbody'",[142,69789,159],{"class":152},[142,69791,69792],{"class":144,"line":16691},[142,69793,2428],{"emptyLinePlaceholder":69},[142,69795,69796],{"class":144,"line":16705},[142,69797,69798],{"class":211},"    \u002F\u002F 获取所有带有name属性的元素\n",[142,69800,69801,69803,69806,69808,69810,69812,69814,69817],{"class":144,"line":16725},[142,69802,11250],{"class":148},[142,69804,69805],{"class":201}," items",[142,69807,13593],{"class":148},[142,69809,54425],{"class":152},[142,69811,55710],{"class":1991},[142,69813,153],{"class":152},[142,69815,69816],{"class":257},"'[name]'",[142,69818,159],{"class":152},[142,69820,69821],{"class":144,"line":16731},[142,69822,69823],{"class":211},"    \u002F\u002F 声明一个空的数组\n",[142,69825,69826,69828,69830,69832],{"class":144,"line":16742},[142,69827,11250],{"class":148},[142,69829,57724],{"class":201},[142,69831,13593],{"class":148},[142,69833,51867],{"class":152},[142,69835,69836],{"class":144,"line":16765},[142,69837,69838],{"class":211},"    \u002F\u002F 1.录入模块\n",[142,69840,69841],{"class":144,"line":16787},[142,69842,69843],{"class":211},"    \u002F\u002F 1.1这是一个表单提交事件\n",[142,69845,69846,69848,69851,69853,69855,69857,69859,69862],{"class":144,"line":16792},[142,69847,11250],{"class":148},[142,69849,69850],{"class":201}," info",[142,69852,13593],{"class":148},[142,69854,54425],{"class":152},[142,69856,54428],{"class":1991},[142,69858,153],{"class":152},[142,69860,69861],{"class":257},"'.info'",[142,69863,159],{"class":152},[142,69865,69866,69869,69871,69873,69876,69878,69880,69882,69884],{"class":144,"line":16798},[142,69867,69868],{"class":152},"    info.",[142,69870,57842],{"class":1991},[142,69872,153],{"class":152},[142,69874,69875],{"class":257},"'submit'",[142,69877,12464],{"class":152},[142,69879,54478],{"class":148},[142,69881,1686],{"class":152},[142,69883,227],{"class":5245},[142,69885,12471],{"class":152},[142,69887,69888],{"class":144,"line":16812},[142,69889,69890],{"class":211},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[142,69892,69893,69896,69899],{"class":144,"line":16825},[142,69894,69895],{"class":152},"      e.",[142,69897,69898],{"class":1991},"preventDefault",[142,69900,2004],{"class":152},[142,69902,69903],{"class":144,"line":16830},[142,69904,60041],{"class":211},[142,69906,69907],{"class":144,"line":16844},[142,69908,2428],{"emptyLinePlaceholder":69},[142,69910,69911],{"class":144,"line":16849},[142,69912,69913],{"class":211},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[142,69915,69916],{"class":144,"line":16855},[142,69917,69918],{"class":211},"      \u002F\u002F 先遍历循环\n",[142,69920,69921,69923,69925,69927,69929,69931,69933,69935,69937,69940,69942,69944,69946],{"class":144,"line":16860},[142,69922,52313],{"class":148},[142,69924,1686],{"class":152},[142,69926,51876],{"class":148},[142,69928,9467],{"class":152},[142,69930,198],{"class":148},[142,69932,4121],{"class":201},[142,69934,9474],{"class":152},[142,69936,1063],{"class":148},[142,69938,69939],{"class":152}," items.",[142,69941,51997],{"class":201},[142,69943,3242],{"class":152},[142,69945,2320],{"class":148},[142,69947,12471],{"class":152},[142,69949,69950,69952,69955,69957,69960],{"class":144,"line":16874},[142,69951,2525],{"class":148},[142,69953,69954],{"class":152}," (items[i].value ",[142,69956,54515],{"class":148},[142,69958,69959],{"class":257}," ''",[142,69961,12471],{"class":152},[142,69963,69964,69967,69970,69972,69975],{"class":144,"line":16879},[142,69965,69966],{"class":148},"          return",[142,69968,69969],{"class":1991}," alert",[142,69971,153],{"class":152},[142,69973,69974],{"class":257},"'输入内容不能为空'",[142,69976,159],{"class":152},[142,69978,69979],{"class":144,"line":16884},[142,69980,2557],{"class":152},[142,69982,69983],{"class":144,"line":16898},[142,69984,52427],{"class":152},[142,69986,69987],{"class":144,"line":16910},[142,69988,2428],{"emptyLinePlaceholder":69},[142,69990,69991],{"class":144,"line":16915},[142,69992,69993],{"class":211},"      \u002F\u002F 创建新的对象\n",[142,69995,69996,69998,70001,70003],{"class":144,"line":16928},[142,69997,58257],{"class":148},[142,69999,70000],{"class":201}," obj",[142,70002,13593],{"class":148},[142,70004,15601],{"class":152},[142,70006,70007,70010,70012,70014,70016],{"class":144,"line":16933},[142,70008,70009],{"class":152},"        stuID: arr.",[142,70011,51997],{"class":201},[142,70013,45595],{"class":148},[142,70015,25147],{"class":201},[142,70017,31495],{"class":152},[142,70019,70020],{"class":144,"line":16938},[142,70021,70022],{"class":152},"        uname: uname.value,\n",[142,70024,70025],{"class":144,"line":16943},[142,70026,70027],{"class":152},"        age: age.value,\n",[142,70029,70030],{"class":144,"line":16956},[142,70031,70032],{"class":152},"        gender: gender.value,\n",[142,70034,70035],{"class":144,"line":16961},[142,70036,70037],{"class":152},"        salary: salary.value,\n",[142,70039,70040],{"class":144,"line":32662},[142,70041,70042],{"class":152},"        city: city.value\n",[142,70044,70045],{"class":144,"line":32668},[142,70046,52427],{"class":152},[142,70048,70049],{"class":144,"line":32674},[142,70050,70051],{"class":211},"      \u002F\u002F console.log(obj);\n",[142,70053,70054],{"class":144,"line":32680},[142,70055,70056],{"class":211},"      \u002F\u002F 追加到数组里面\n",[142,70058,70059,70061,70063],{"class":144,"line":32686},[142,70060,58036],{"class":152},[142,70062,51913],{"class":1991},[142,70064,70065],{"class":152},"(obj)\n",[142,70067,70068],{"class":144,"line":32697},[142,70069,70070],{"class":211},"      \u002F\u002F console.log(arr);\n",[142,70072,70073],{"class":144,"line":32703},[142,70074,70075],{"class":211},"      \u002F\u002F 清空表单  reset重置表单\n",[142,70077,70078,70081,70083,70086],{"class":144,"line":32723},[142,70079,70080],{"class":201},"      this",[142,70082,711],{"class":152},[142,70084,70085],{"class":1991},"reset",[142,70087,2004],{"class":152},[142,70089,70090],{"class":144,"line":32729},[142,70091,70092],{"class":211},"      \u002F\u002F 调用渲染函数\n",[142,70094,70095,70098],{"class":144,"line":32740},[142,70096,70097],{"class":1991},"      render",[142,70099,2004],{"class":152},[142,70101,70102],{"class":144,"line":32746},[142,70103,33490],{"class":152},[142,70105,70106],{"class":144,"line":32752},[142,70107,70108],{"class":211},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[142,70110,70111,70114,70117],{"class":144,"line":32758},[142,70112,70113],{"class":148},"    function",[142,70115,70116],{"class":1991}," render",[142,70118,10882],{"class":152},[142,70120,70121],{"class":144,"line":32764},[142,70122,70123],{"class":211},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[142,70125,70126,70129,70131],{"class":144,"line":32770},[142,70127,70128],{"class":152},"      tbody.innerHTML ",[142,70130,198],{"class":148},[142,70132,70133],{"class":257}," ''\n",[142,70135,70136],{"class":144,"line":32776},[142,70137,70138],{"class":211},"      \u002F\u002F 遍历数组\n",[142,70140,70141,70143,70145,70147,70149,70151,70153,70155,70157,70159,70161,70163,70165],{"class":144,"line":32782},[142,70142,52313],{"class":148},[142,70144,1686],{"class":152},[142,70146,51876],{"class":148},[142,70148,9467],{"class":152},[142,70150,198],{"class":148},[142,70152,4121],{"class":201},[142,70154,9474],{"class":152},[142,70156,1063],{"class":148},[142,70158,51994],{"class":152},[142,70160,51997],{"class":201},[142,70162,3242],{"class":152},[142,70164,2320],{"class":148},[142,70166,12471],{"class":152},[142,70168,70169,70171,70174,70176,70178,70181,70183,70186],{"class":144,"line":32802},[142,70170,61299],{"class":148},[142,70172,70173],{"class":201}," tr",[142,70175,13593],{"class":148},[142,70177,54425],{"class":152},[142,70179,70180],{"class":1991},"createElement",[142,70182,153],{"class":152},[142,70184,70185],{"class":257},"'tr'",[142,70187,159],{"class":152},[142,70189,70190,70193,70195],{"class":144,"line":32808},[142,70191,70192],{"class":152},"        tr.innerHTML ",[142,70194,198],{"class":148},[142,70196,70197],{"class":257}," `\n",[142,70199,70200,70203,70205,70207,70209,70212,70215],{"class":144,"line":32824},[142,70201,70202],{"class":257},"        \u003Ctd>${",[142,70204,3908],{"class":152},[142,70206,1043],{"class":257},[142,70208,594],{"class":152},[142,70210,70211],{"class":257},"].",[142,70213,70214],{"class":152},"stuID",[142,70216,70217],{"class":257},"}\u003C\u002Ftd>\n",[142,70219,70220,70223,70225,70227,70229,70231,70234],{"class":144,"line":32830},[142,70221,70222],{"class":257},"          \u003Ctd>${",[142,70224,3908],{"class":152},[142,70226,1043],{"class":257},[142,70228,594],{"class":152},[142,70230,70211],{"class":257},[142,70232,70233],{"class":152},"uname",[142,70235,70217],{"class":257},[142,70237,70238,70240,70242,70244,70246,70248,70251],{"class":144,"line":32844},[142,70239,70222],{"class":257},[142,70241,3908],{"class":152},[142,70243,1043],{"class":257},[142,70245,594],{"class":152},[142,70247,70211],{"class":257},[142,70249,70250],{"class":152},"age",[142,70252,70217],{"class":257},[142,70254,70255,70257,70259,70261,70263,70265,70268],{"class":144,"line":32850},[142,70256,70222],{"class":257},[142,70258,3908],{"class":152},[142,70260,1043],{"class":257},[142,70262,594],{"class":152},[142,70264,70211],{"class":257},[142,70266,70267],{"class":152},"gender",[142,70269,70217],{"class":257},[142,70271,70272,70274,70276,70278,70280,70282,70285],{"class":144,"line":32865},[142,70273,70222],{"class":257},[142,70275,3908],{"class":152},[142,70277,1043],{"class":257},[142,70279,594],{"class":152},[142,70281,70211],{"class":257},[142,70283,70284],{"class":152},"salary",[142,70286,70217],{"class":257},[142,70288,70289,70291,70293,70295,70297,70299,70302],{"class":144,"line":32871},[142,70290,70222],{"class":257},[142,70292,3908],{"class":152},[142,70294,1043],{"class":257},[142,70296,594],{"class":152},[142,70298,70211],{"class":257},[142,70300,70301],{"class":152},"city",[142,70303,70217],{"class":257},[142,70305,70306],{"class":144,"line":32880},[142,70307,69622],{"class":257},[142,70309,70310,70313,70315],{"class":144,"line":32886},[142,70311,70312],{"class":257},"            \u003Ca href=\"javascript:\" data-id=${",[142,70314,594],{"class":152},[142,70316,70317],{"class":257},"}>删除\u003C\u002Fa>\n",[142,70319,70320],{"class":144,"line":32895},[142,70321,70322],{"class":257},"          \u003C\u002Ftd> \n",[142,70324,70325],{"class":144,"line":32901},[142,70326,70327],{"class":257},"          `\n",[142,70329,70330],{"class":144,"line":32907},[142,70331,70332],{"class":211},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[142,70334,70335,70338,70341],{"class":144,"line":32916},[142,70336,70337],{"class":152},"        tbody.",[142,70339,70340],{"class":1991},"appendChild",[142,70342,70343],{"class":152},"(tr)\n",[142,70345,70346],{"class":144,"line":32922},[142,70347,52427],{"class":152},[142,70349,70350],{"class":144,"line":32933},[142,70351,2215],{"class":152},[142,70353,70354],{"class":144,"line":32939},[142,70355,2428],{"emptyLinePlaceholder":69},[142,70357,70358],{"class":144,"line":32958},[142,70359,70360],{"class":211},"    \u002F\u002F 3.删除委托\n",[142,70362,70363],{"class":144,"line":32964},[142,70364,70365],{"class":211},"    \u002F\u002F 3.1 事件委托 tbody\n",[142,70367,70368,70371,70373,70375,70377,70379,70381,70383,70385],{"class":144,"line":32975},[142,70369,70370],{"class":152},"    tbody.",[142,70372,57842],{"class":1991},[142,70374,153],{"class":152},[142,70376,57847],{"class":257},[142,70378,12464],{"class":152},[142,70380,54478],{"class":148},[142,70382,1686],{"class":152},[142,70384,227],{"class":5245},[142,70386,12471],{"class":152},[142,70388,70389,70391,70393,70395,70397],{"class":144,"line":32981},[142,70390,54509],{"class":148},[142,70392,67063],{"class":152},[142,70394,54515],{"class":148},[142,70396,68285],{"class":257},[142,70398,12471],{"class":152},[142,70400,70401],{"class":144,"line":33001},[142,70402,70403],{"class":211},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[142,70405,70406],{"class":144,"line":33017},[142,70407,70408],{"class":211},"        \u002F\u002F console.log(e.target.dataset.id);\n",[142,70410,70411],{"class":144,"line":33023},[142,70412,70413],{"class":211},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[142,70415,70416,70419,70421,70424,70426],{"class":144,"line":33037},[142,70417,70418],{"class":152},"        arr.",[142,70420,58039],{"class":1991},[142,70422,70423],{"class":152},"(e.target.dataset.id, ",[142,70425,370],{"class":201},[142,70427,159],{"class":152},[142,70429,70430],{"class":144,"line":33043},[142,70431,70432],{"class":211},"        \u002F\u002F 重新渲染一次\n",[142,70434,70435,70438],{"class":144,"line":33049},[142,70436,70437],{"class":1991},"        render",[142,70439,2004],{"class":152},[142,70441,70442],{"class":144,"line":33060},[142,70443,52427],{"class":152},[142,70445,70446],{"class":144,"line":33066},[142,70447,33490],{"class":152},[142,70449,70450,70452,70454],{"class":144,"line":33072},[142,70451,52446],{"class":152},[142,70453,51842],{"class":51329},[142,70455,51336],{"class":152},[142,70457,70458],{"class":144,"line":33082},[142,70459,2428],{"emptyLinePlaceholder":69},[142,70461,70462,70464,70466],{"class":144,"line":33088},[142,70463,51814],{"class":152},[142,70465,51829],{"class":51329},[142,70467,51336],{"class":152},[142,70469,70470],{"class":144,"line":33099},[142,70471,2428],{"emptyLinePlaceholder":69},[142,70473,70474,70476,70478],{"class":144,"line":33105},[142,70475,51814],{"class":152},[142,70477,50664],{"class":51329},[142,70479,51336],{"class":152},[14,70481,70482],{},"样式：",[133,70484,70488],{"className":70485,"code":70486,"language":70487,"meta":31,"style":31},"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",[139,70489,70490,70495,70505,70514,70518,70522,70527,70537,70542,70546,70551,70561,70566,70575,70579,70583,70588,70593,70603,70613,70618,70622,70627,70636,70646,70651,70661,70671,70675,70680,70688,70692,70697,70702,70707,70715,70724,70728,70733,70742,70746,70751,70760,70764,70769,70778,70787,70795,70799,70804,70813,70823,70832,70842,70848,70857,70867,70877,70881,70886,70895,70903,70913,70921,70930,70939,70949,70957,70961,70966,70975],{"__ignoreMap":31},[142,70491,70492],{"class":144,"line":145},[142,70493,70494],{"class":152},"* {\n",[142,70496,70497,70500,70502],{"class":144,"line":64},[142,70498,70499],{"class":51329},"  margin",[142,70501,51466],{"class":152},[142,70503,70504],{"class":257},"0;\n",[142,70506,70507,70510,70512],{"class":144,"line":1208},[142,70508,70509],{"class":257},"  padding",[142,70511,51466],{"class":152},[142,70513,70504],{"class":257},[142,70515,70516],{"class":144,"line":1223},[142,70517,1593],{"class":152},[142,70519,70520],{"class":144,"line":1229},[142,70521,2428],{"emptyLinePlaceholder":69},[142,70523,70524],{"class":144,"line":1243},[142,70525,70526],{"class":257},"a {\n",[142,70528,70529,70532,70534],{"class":144,"line":1249},[142,70530,70531],{"class":51329},"  text-decoration",[142,70533,51466],{"class":152},[142,70535,70536],{"class":257},"none;\n",[142,70538,70539],{"class":144,"line":1340},[142,70540,70541],{"class":257},"  color:#721c24;\n",[142,70543,70544],{"class":144,"line":1346},[142,70545,1593],{"class":152},[142,70547,70548],{"class":144,"line":1358},[142,70549,70550],{"class":257},"h1 {\n",[142,70552,70553,70556,70558],{"class":144,"line":1640},[142,70554,70555],{"class":51329},"  text-align",[142,70557,51466],{"class":152},[142,70559,70560],{"class":257},"center;\n",[142,70562,70563],{"class":144,"line":1645},[142,70564,70565],{"class":257},"  color:#333;\n",[142,70567,70568,70570,70572],{"class":144,"line":1651},[142,70569,70499],{"class":51329},[142,70571,51466],{"class":152},[142,70573,70574],{"class":257},"20px 0;\n",[142,70576,70577],{"class":144,"line":1656},[142,70578,2702],{"class":152},[142,70580,70581],{"class":144,"line":1670},[142,70582,1593],{"class":152},[142,70584,70585],{"class":144,"line":1675},[142,70586,70587],{"class":257},"table {\n",[142,70589,70590],{"class":144,"line":1681},[142,70591,70592],{"class":257},"  margin:0 auto;\n",[142,70594,70595,70598,70600],{"class":144,"line":1702},[142,70596,70597],{"class":51329},"  width",[142,70599,51466],{"class":152},[142,70601,70602],{"class":257},"800px;\n",[142,70604,70605,70608,70610],{"class":144,"line":1707},[142,70606,70607],{"class":51329},"  border-collapse",[142,70609,51466],{"class":152},[142,70611,70612],{"class":257},"collapse;\n",[142,70614,70615],{"class":144,"line":1721},[142,70616,70617],{"class":257},"  color:#004085;\n",[142,70619,70620],{"class":144,"line":1726},[142,70621,1593],{"class":152},[142,70623,70624],{"class":144,"line":1755},[142,70625,70626],{"class":257},"th {\n",[142,70628,70629,70631,70633],{"class":144,"line":1760},[142,70630,70509],{"class":51329},[142,70632,51466],{"class":152},[142,70634,70635],{"class":257},"10px;\n",[142,70637,70638,70641,70643],{"class":144,"line":1777},[142,70639,70640],{"class":51329},"  background",[142,70642,51466],{"class":152},[142,70644,70645],{"class":211},"#cfe5ff;\n",[142,70647,70648],{"class":144,"line":1782},[142,70649,70650],{"class":152},"  \n",[142,70652,70653,70656,70658],{"class":144,"line":1787},[142,70654,70655],{"class":51329},"  font-size",[142,70657,51466],{"class":152},[142,70659,70660],{"class":257},"20px;\n",[142,70662,70663,70666,70668],{"class":144,"line":1792},[142,70664,70665],{"class":51329},"  font-weight",[142,70667,51466],{"class":152},[142,70669,70670],{"class":257},"400;\n",[142,70672,70673],{"class":144,"line":1806},[142,70674,1593],{"class":152},[142,70676,70677],{"class":144,"line":1811},[142,70678,70679],{"class":257},"td,th {\n",[142,70681,70682,70685],{"class":144,"line":2605},[142,70683,70684],{"class":257},"  border:1px solid",[142,70686,70687],{"class":211}," #b8daff;\n",[142,70689,70690],{"class":144,"line":2619},[142,70691,1593],{"class":152},[142,70693,70694],{"class":144,"line":2627},[142,70695,70696],{"class":257},"td {\n",[142,70698,70699],{"class":144,"line":2632},[142,70700,70701],{"class":257},"  padding:10px;\n",[142,70703,70704],{"class":144,"line":2638},[142,70705,70706],{"class":257},"  color:#666;\n",[142,70708,70709,70711,70713],{"class":144,"line":2644},[142,70710,70555],{"class":51329},[142,70712,51466],{"class":152},[142,70714,70560],{"class":257},[142,70716,70717,70719,70721],{"class":144,"line":2649},[142,70718,70655],{"class":51329},[142,70720,51466],{"class":152},[142,70722,70723],{"class":257},"16px;\n",[142,70725,70726],{"class":144,"line":7977},[142,70727,1593],{"class":152},[142,70729,70730],{"class":144,"line":8001},[142,70731,70732],{"class":257},"tbody tr {\n",[142,70734,70735,70737,70739],{"class":144,"line":8006},[142,70736,70640],{"class":51329},[142,70738,51466],{"class":152},[142,70740,70741],{"class":211},"#fff;\n",[142,70743,70744],{"class":144,"line":8012},[142,70745,1593],{"class":152},[142,70747,70748],{"class":144,"line":8039},[142,70749,70750],{"class":257},"tbody tr:hover {\n",[142,70752,70753,70755,70757],{"class":144,"line":8044},[142,70754,70640],{"class":51329},[142,70756,51466],{"class":152},[142,70758,70759],{"class":211},"#e1ecf8;\n",[142,70761,70762],{"class":144,"line":8050},[142,70763,1593],{"class":152},[142,70765,70766],{"class":144,"line":8062},[142,70767,70768],{"class":257},".info {\n",[142,70770,70771,70773,70775],{"class":144,"line":8074},[142,70772,70597],{"class":51329},[142,70774,51466],{"class":152},[142,70776,70777],{"class":257},"900px;\n",[142,70779,70780,70782,70784],{"class":144,"line":8086},[142,70781,70499],{"class":51329},[142,70783,51466],{"class":152},[142,70785,70786],{"class":257},"50px auto;\n",[142,70788,70789,70791,70793],{"class":144,"line":9745},[142,70790,70555],{"class":51329},[142,70792,51466],{"class":152},[142,70794,70560],{"class":257},[142,70796,70797],{"class":144,"line":9770},[142,70798,1593],{"class":152},[142,70800,70801],{"class":144,"line":9793},[142,70802,70803],{"class":257},".info  input, .info select {\n",[142,70805,70806,70808,70810],{"class":144,"line":9817},[142,70807,70597],{"class":51329},[142,70809,51466],{"class":152},[142,70811,70812],{"class":257},"80px;\n",[142,70814,70815,70818,70820],{"class":144,"line":9822},[142,70816,70817],{"class":51329},"  height",[142,70819,51466],{"class":152},[142,70821,70822],{"class":257},"27px;\n",[142,70824,70825,70828,70830],{"class":144,"line":9827},[142,70826,70827],{"class":51329},"  outline",[142,70829,51466],{"class":152},[142,70831,70536],{"class":257},[142,70833,70834,70837,70839],{"class":144,"line":9832},[142,70835,70836],{"class":51329},"  border-radius",[142,70838,51466],{"class":152},[142,70840,70841],{"class":257},"5px;\n",[142,70843,70844,70846],{"class":144,"line":9841},[142,70845,70684],{"class":257},[142,70847,70687],{"class":211},[142,70849,70850,70853,70855],{"class":144,"line":9846},[142,70851,70852],{"class":51329},"  padding-left",[142,70854,51466],{"class":152},[142,70856,70841],{"class":257},[142,70858,70859,70862,70864],{"class":144,"line":9852},[142,70860,70861],{"class":51329},"  box-sizing",[142,70863,51466],{"class":152},[142,70865,70866],{"class":257},"border-box;\n",[142,70868,70869,70872,70874],{"class":144,"line":9873},[142,70870,70871],{"class":51329},"  margin-right",[142,70873,51466],{"class":152},[142,70875,70876],{"class":257},"15px;\n",[142,70878,70879],{"class":144,"line":9879},[142,70880,1593],{"class":152},[142,70882,70883],{"class":144,"line":9893},[142,70884,70885],{"class":257},".info button {\n",[142,70887,70888,70890,70892],{"class":144,"line":9899},[142,70889,70597],{"class":51329},[142,70891,51466],{"class":152},[142,70893,70894],{"class":257},"60px;\n",[142,70896,70897,70899,70901],{"class":144,"line":9926},[142,70898,70817],{"class":51329},[142,70900,51466],{"class":152},[142,70902,70822],{"class":257},[142,70904,70905,70908,70910],{"class":144,"line":9935},[142,70906,70907],{"class":51329},"  background-color",[142,70909,51466],{"class":152},[142,70911,70912],{"class":211},"#004085;\n",[142,70914,70915,70917,70919],{"class":144,"line":9941},[142,70916,70827],{"class":51329},[142,70918,51466],{"class":152},[142,70920,70536],{"class":257},[142,70922,70923,70926,70928],{"class":144,"line":9949},[142,70924,70925],{"class":51329},"  border",[142,70927,51466],{"class":152},[142,70929,70504],{"class":257},[142,70931,70932,70935,70937],{"class":144,"line":9954},[142,70933,70934],{"class":51329},"  color",[142,70936,51466],{"class":152},[142,70938,70741],{"class":211},[142,70940,70941,70944,70946],{"class":144,"line":16633},[142,70942,70943],{"class":51329},"  cursor",[142,70945,51466],{"class":152},[142,70947,70948],{"class":257},"pointer;\n",[142,70950,70951,70953,70955],{"class":144,"line":16639},[142,70952,70836],{"class":51329},[142,70954,51466],{"class":152},[142,70956,70841],{"class":257},[142,70958,70959],{"class":144,"line":16662},[142,70960,1593],{"class":152},[142,70962,70963],{"class":144,"line":16668},[142,70964,70965],{"class":257},".info .age {\n",[142,70967,70968,70970,70972],{"class":144,"line":16691},[142,70969,70597],{"class":51329},[142,70971,51466],{"class":152},[142,70973,70974],{"class":257},"50px;\n",[142,70976,70977],{"class":144,"line":16705},[142,70978,1593],{"class":152},[14,70980,70981],{},"思路：",[14,70983,70984],{},[29,70985],{"alt":31,"src":70986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,70988,70989],{},[29,70990],{"alt":31,"src":70991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,70993,70994],{},[29,70995],{"alt":31,"src":70996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[113,70998,71000],{"id":70999},"_3315-重绘回流","3.3.15 重绘回流",[14,71002,71003],{},[29,71004],{"alt":31,"src":71005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71007,71008],{},[29,71009],{"alt":31,"src":71010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71012,71013],{},[29,71014],{"alt":31,"src":71015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[84,71017,71019],{"id":71018},"_34-bom","3.4 BOM",[14,71021,71022],{},[29,71023],{"alt":31,"src":71024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71026,71027],{},"平时写的document省略了window而已，实际上是window.document",[14,71029,71030],{},"函数也是这样，调用的时候实际为window.fn()",[14,71032,71033],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71035,71036],{},"window大部分情况下可以省略",[113,71038,71040],{"id":71039},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71042,71043],{},"只执行一次",[14,71045,71046],{},[29,71047],{"alt":31,"src":71048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71050,71051],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71053,71054],{},[29,71055],{"alt":31,"src":71056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[113,71058,71060],{"id":71059},"_342-js执行机制","3.4.2 JS执行机制",[14,71062,71063],{},[29,71064],{"alt":31,"src":71065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71067,71068],{},"两个的结果都是1111 3333 2222",[14,71070,71071],{},[29,71072],{"alt":31,"src":71073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71075,71076],{},[29,71077],{"alt":31,"src":71078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71080,71081],{},[29,71082],{"alt":31,"src":71083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71085,71086],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71088,71089],{},"工作流程：",[14,71091,71092],{},[29,71093],{"alt":31,"src":71094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71096,71097],{},[29,71098],{"alt":31,"src":71099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71101,71102],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71104,71105],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[113,71107,71109],{"id":71108},"_343-location对象","3.4.3 location对象",[14,71111,71112],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71114,71115],{},[29,71116],{"alt":31,"src":71117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71119,71120],{},"href可以跳转页面",[96,71122,71123],{},[99,71124,71125],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71127,71128],{},"search得到提交信息之后网站后边的地址",[14,71130,71131],{},[29,71132],{"alt":31,"src":71133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71135,71136],{},[29,71137],{"alt":31,"src":71138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[96,71140,71141],{"start":64},[99,71142,71143],{},"hash:这个获取单页面应用#后边的地址",[14,71145,71146],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71148,71149],{},[29,71150],{"alt":31,"src":71151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[133,71153,71155],{"className":53096,"code":71154,"language":53098,"meta":31,"style":31},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[139,71156,71157,71177,71197],{"__ignoreMap":31},[142,71158,71159,71161,71163,71165,71167,71170,71173,71175],{"class":144,"line":145},[142,71160,52173],{"class":152},[142,71162,391],{"class":51329},[142,71164,61086],{"class":1991},[142,71166,198],{"class":152},[142,71168,71169],{"class":257},"\"#\u002Fmy\"",[142,71171,71172],{"class":152},">我的\u003C\u002F",[142,71174,391],{"class":51329},[142,71176,51336],{"class":152},[142,71178,71179,71181,71183,71185,71187,71190,71193,71195],{"class":144,"line":64},[142,71180,52173],{"class":152},[142,71182,391],{"class":51329},[142,71184,61086],{"class":1991},[142,71186,198],{"class":152},[142,71188,71189],{"class":257},"\"#\u002Ffriend\"",[142,71191,71192],{"class":152},">关注\u003C\u002F",[142,71194,391],{"class":51329},[142,71196,51336],{"class":152},[142,71198,71199,71201,71203,71205,71207,71210,71213,71215],{"class":144,"line":1208},[142,71200,52173],{"class":152},[142,71202,391],{"class":51329},[142,71204,61086],{"class":1991},[142,71206,198],{"class":152},[142,71208,71209],{"class":257},"\"#\u002Fdownload\"",[142,71211,71212],{"class":152},">下载\u003C\u002F",[142,71214,391],{"class":51329},[142,71216,51336],{"class":152},[14,71218,71219],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[96,71221,71222],{"start":1208},[99,71223,71224,71225,71227,71228,71230],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53745,71226],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53745,71229],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[113,71232,71234],{"id":71233},"_345-navigator对象","3.4.5 navigator对象",[14,71236,71237],{},[29,71238],{"alt":31,"src":71239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[133,71241,71245],{"className":71242,"code":71243,"language":71244,"meta":31,"style":31},"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",[139,71246,71247,71252,71263,71275,71280,71331,71372,71377,71390,71402,71407],{"__ignoreMap":31},[142,71248,71249],{"class":144,"line":145},[142,71250,71251],{"class":211},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[142,71253,71254,71256,71258,71260],{"class":144,"line":64},[142,71255,379],{"class":148},[142,71257,153],{"class":152},[142,71259,54478],{"class":148},[142,71261,71262],{"class":152}," () { \n",[142,71264,71265,71267,71270,71272],{"class":144,"line":1208},[142,71266,6821],{"class":148},[142,71268,71269],{"class":201}," userAgent",[142,71271,13593],{"class":148},[142,71273,71274],{"class":152}," navigator.userAgent \n",[142,71276,71277],{"class":144,"line":1223},[142,71278,71279],{"class":211},"\u002F\u002F 验证是否为Android或iPhone \n",[142,71281,71282,71284,71287,71289,71292,71295,71297,71299,71302,71304,71307,71311,71313,71315,71317,71320,71322,71324,71326,71328],{"class":144,"line":1229},[142,71283,6821],{"class":148},[142,71285,71286],{"class":201}," android",[142,71288,13593],{"class":148},[142,71290,71291],{"class":152}," userAgent.",[142,71293,71294],{"class":1991},"match",[142,71296,153],{"class":152},[142,71298,737],{"class":257},[142,71300,71301],{"class":48006},"(Android);",[142,71303,1139],{"class":148},[142,71305,71306],{"class":201},"[\\s",[142,71308,71310],{"class":71309},"snhLl","\\\u002F",[142,71312,1093],{"class":201},[142,71314,634],{"class":148},[142,71316,153],{"class":48006},[142,71318,71319],{"class":201},"[\\d.]",[142,71321,634],{"class":148},[142,71323,582],{"class":48006},[142,71325,1139],{"class":148},[142,71327,737],{"class":257},[142,71329,71330],{"class":152},") \n",[142,71332,71333,71335,71338,71340,71342,71344,71346,71348,71351,71354,71357,71359,71361,71364,71366,71368,71370],{"class":144,"line":1243},[142,71334,6821],{"class":148},[142,71336,71337],{"class":201}," iphone",[142,71339,13593],{"class":148},[142,71341,71291],{"class":152},[142,71343,71294],{"class":1991},[142,71345,153],{"class":152},[142,71347,737],{"class":257},[142,71349,71350],{"class":48006},"(iPhone",[142,71352,71353],{"class":201},"\\s",[142,71355,71356],{"class":48006},"OS)",[142,71358,71353],{"class":201},[142,71360,153],{"class":48006},[142,71362,71363],{"class":201},"[\\d_]",[142,71365,634],{"class":148},[142,71367,582],{"class":48006},[142,71369,737],{"class":257},[142,71371,71330],{"class":152},[142,71373,71374],{"class":144,"line":1249},[142,71375,71376],{"class":211},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[142,71378,71379,71381,71384,71387],{"class":144,"line":1340},[142,71380,1559],{"class":148},[142,71382,71383],{"class":152}," (android ",[142,71385,71386],{"class":148},"||",[142,71388,71389],{"class":152}," iphone) { \n",[142,71391,71392,71395,71397,71400],{"class":144,"line":1346},[142,71393,71394],{"class":152},"location.href ",[142,71396,198],{"class":148},[142,71398,71399],{"class":257}," 'http:\u002F\u002Fm.itcast.cn'",[142,71401,2702],{"class":152},[142,71403,71404],{"class":144,"line":1358},[142,71405,71406],{"class":152},"} \n",[142,71408,71409],{"class":144,"line":1640},[142,71410,71411],{"class":152},"})()\n",[113,71413,71415],{"id":71414},"_346-histroy对象","3.4.6 histroy对象",[14,71417,71418],{},[29,71419],{"alt":31,"src":71420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71422,71423],{},"浏览器地址的前进与后退!!!",[14,71425,71426],{},"history.back() 等效于 history.go(-1)",[14,71428,71429],{},"history.forward() 等效于 history.go(1)",[84,71431,71433],{"id":71432},"_35-本地存储","3.5 本地存储",[96,71435,71436,71439,71442],{},[99,71437,71438],{},"数据存储在用户浏览器中",[99,71440,71441],{},"设置、读取方便、甚至页面刷新不丢失数据",[99,71443,71444],{},"容量较大，sessionStorage和localStorage约 5M 左右",[113,71446,71448],{"id":71447},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71450,71451],{},"只能存储字符串",[14,71453,71454],{},[29,71455],{"alt":31,"src":71456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71458,71459],{},[29,71460],{"alt":31,"src":71461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71463,71464],{},"键值对要加引号,不然就会当变量来看了",[14,71466,71467],{},"localStorage.setItem('uname', 'pink')",[14,71469,71470],{},"刷新之后信息不再丢失",[14,71472,71473],{},"操作key,value会跟着变",[14,71475,71476],{},"删除只删除键就可以,即名字",[14,71478,71467],{},[14,71480,71481],{},"改:",[14,71483,71484],{},"localStorage.setItem('uname','red')",[14,71486,71487],{},"有这个键就是改,没有这个键就是改",[14,71489,71490],{},[29,71491],{"alt":31,"src":71492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71494,71495],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71497,71498],{},[29,71499],{"alt":31,"src":71500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71502,71503],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[113,71505,71507],{"id":71506},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71509,71510],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71512,71513],{},"特性:",[96,71515,71516,71519,71522,71525],{},[99,71517,71518],{},"生命周期为关闭浏览器窗口",[99,71520,71521],{},"在同一个窗口(页面)下数据可以共享",[99,71523,71524],{},"以键值对的形式存储使用",[99,71526,71527],{},"用法跟localStorage 基本相同",[113,71529,71531],{"id":71530},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71533,71534],{},"本地只能存储字符串,无法直接存储复杂数据类型",[133,71536,71538],{"className":53096,"code":71537,"language":53098,"meta":31,"style":31},"\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",[139,71539,71540,71548,71553,71558,71563,71568,71572,71577,71582],{"__ignoreMap":31},[142,71541,71542,71544,71546],{"class":144,"line":145},[142,71543,1063],{"class":152},[142,71545,51842],{"class":51329},[142,71547,51336],{"class":152},[142,71549,71550],{"class":144,"line":64},[142,71551,71552],{"class":152},"    const obj = {\n",[142,71554,71555],{"class":144,"line":1208},[142,71556,71557],{"class":152},"      uname: 'pink老师',\n",[142,71559,71560],{"class":144,"line":1223},[142,71561,71562],{"class":152},"      age: 18,\n",[142,71564,71565],{"class":144,"line":1229},[142,71566,71567],{"class":152},"      gender: '女'\n",[142,71569,71570],{"class":144,"line":1243},[142,71571,2215],{"class":152},[142,71573,71574],{"class":144,"line":1249},[142,71575,71576],{"class":152},"    \u002F\u002F 存储复杂数据类型\n",[142,71578,71579],{"class":144,"line":1340},[142,71580,71581],{"class":152},"    localStorage.setItem('obj', obj)\n",[142,71583,71584,71586,71588],{"class":144,"line":1346},[142,71585,52446],{"class":152},[142,71587,51842],{"class":51329},[142,71589,51336],{"class":152},[14,71591,71592],{},[29,71593],{"alt":31,"src":71594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71596,71597],{},"如果获取一下数据:",[14,71599,71600],{},"log(localStorage.getItem('obj'))",[14,71602,71603],{},[29,71604],{"alt":31,"src":71605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71607,71608],{},"发现直接存对象是使用不了的!!!",[22027,71610,71612],{"id":71611},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71614,71615],{},[29,71616],{"alt":31,"src":71617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[133,71619,71621],{"className":50662,"code":71620,"language":50664,"meta":31,"style":31},"\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",[139,71622,71623,71631,71641,71651,71660,71668,71672,71676,71702,71721,71729,71733,71738,71743],{"__ignoreMap":31},[142,71624,71625,71627,71629],{"class":144,"line":145},[142,71626,1063],{"class":152},[142,71628,51842],{"class":51329},[142,71630,51336],{"class":152},[142,71632,71633,71635,71637,71639],{"class":144,"line":64},[142,71634,11250],{"class":148},[142,71636,70000],{"class":201},[142,71638,13593],{"class":148},[142,71640,15601],{"class":152},[142,71642,71643,71646,71649],{"class":144,"line":1208},[142,71644,71645],{"class":152},"      uname: ",[142,71647,71648],{"class":257},"'pink老师'",[142,71650,31495],{"class":152},[142,71652,71653,71656,71658],{"class":144,"line":1223},[142,71654,71655],{"class":152},"      age: ",[142,71657,803],{"class":201},[142,71659,31495],{"class":152},[142,71661,71662,71665],{"class":144,"line":1229},[142,71663,71664],{"class":152},"      gender: ",[142,71666,71667],{"class":257},"'女'\n",[142,71669,71670],{"class":144,"line":1243},[142,71671,2215],{"class":152},[142,71673,71674],{"class":144,"line":1249},[142,71675,71576],{"class":211},[142,71677,71678,71681,71684,71686,71689,71691,71694,71696,71699],{"class":144,"line":1340},[142,71679,71680],{"class":152},"  localStorage.",[142,71682,71683],{"class":1991},"setItem",[142,71685,153],{"class":152},[142,71687,71688],{"class":257},"'obj'",[142,71690,12464],{"class":152},[142,71692,71693],{"class":201},"JSON",[142,71695,711],{"class":152},[142,71697,71698],{"class":1991},"stringify",[142,71700,71701],{"class":152},"(obj))\n",[142,71703,71704,71707,71709,71712,71715,71717,71719],{"class":144,"line":1346},[142,71705,71706],{"class":152},"  console.",[142,71708,58276],{"class":1991},[142,71710,71711],{"class":152},"(localStorage.",[142,71713,71714],{"class":1991},"getItem",[142,71716,153],{"class":152},[142,71718,71688],{"class":257},[142,71720,30526],{"class":152},[142,71722,71723,71725,71727],{"class":144,"line":1358},[142,71724,52446],{"class":152},[142,71726,51842],{"class":51329},[142,71728,51336],{"class":152},[142,71730,71731],{"class":144,"line":1640},[142,71732,70650],{"class":152},[142,71734,71735],{"class":144,"line":1645},[142,71736,71737],{"class":152},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[142,71739,71740],{"class":144,"line":1651},[142,71741,71742],{"class":152},"  类型是字符串的\n",[142,71744,71745],{"class":144,"line":1656},[142,71746,71747],{"class":152},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22027,71749,71751],{"id":71750},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71753,71754],{},[29,71755],{"alt":31,"src":71756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71758,71759],{},[29,71760],{"alt":31,"src":71761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[133,71763,71765],{"className":53096,"code":71764,"language":53098,"meta":31,"style":31},"  \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",[139,71766,71767,71775,71779,71783,71787,71791,71795,71800,71805,71810,71815,71820,71825,71830,71835],{"__ignoreMap":31},[142,71768,71769,71771,71773],{"class":144,"line":145},[142,71770,52173],{"class":152},[142,71772,51842],{"class":51329},[142,71774,51336],{"class":152},[142,71776,71777],{"class":144,"line":64},[142,71778,71552],{"class":152},[142,71780,71781],{"class":144,"line":1208},[142,71782,71557],{"class":152},[142,71784,71785],{"class":144,"line":1223},[142,71786,71562],{"class":152},[142,71788,71789],{"class":144,"line":1229},[142,71790,71567],{"class":152},[142,71792,71793],{"class":144,"line":1243},[142,71794,2215],{"class":152},[142,71796,71797],{"class":144,"line":1249},[142,71798,71799],{"class":152},"    \u002F\u002F 1.存储复杂数据类型\n",[142,71801,71802],{"class":144,"line":1340},[142,71803,71804],{"class":152},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[142,71806,71807],{"class":144,"line":1346},[142,71808,71809],{"class":152},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[142,71811,71812],{"class":144,"line":1358},[142,71813,71814],{"class":152},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[142,71816,71817],{"class":144,"line":1640},[142,71818,71819],{"class":152},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[142,71821,71822],{"class":144,"line":1645},[142,71823,71824],{"class":152},"    \u002F\u002F 取\n",[142,71826,71827],{"class":144,"line":1651},[142,71828,71829],{"class":152},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[142,71831,71832],{"class":144,"line":1656},[142,71833,71834],{"class":152},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[142,71836,71837,71839,71841],{"class":144,"line":1670},[142,71838,52446],{"class":152},[142,71840,51842],{"class":51329},[142,71842,51336],{"class":152},[14,71844,71845],{},[29,71846],{"alt":31,"src":71847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[113,71849,71851],{"id":71850},"_356-数组map方法","3.5.6 数组map方法",[14,71853,71854],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71856,71857],{},[29,71858],{"alt":31,"src":71859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71861,71862],{},[29,71863],{"alt":31,"src":71864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71866,71867,71870],{},[302,71868,71869],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71872,71873],{},"map有返回值，但是forEach没有返回值",[14,71875,71876],{},"map是个方法。用的时候要加 ()",[14,71878,71879],{},"map返回的是一个数组",[113,71881,71883],{"id":71882},"_357-数组中join方法","3.5.7 数组中join方法",[14,71885,71886],{},[29,71887],{"alt":31,"src":71888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71890,71891],{},"类似于python中拼接字符串一样！",[96,71893,71894,71897,71900],{},[99,71895,71896],{},"小括号为空则逗号分开",[99,71898,71899],{},"小括号为空字符串 ''，则元素之间没有分隔符",[99,71901,71902],{},"小括号用啥符号就用进行分割",[113,71904,71906],{"id":71905},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[96,71908,71909,71912,71915,71918,71921],{},[99,71910,71911],{},"记住本地时间获取快速方式：new Date().toDateString()",[99,71913,71914],{},"尽量减少DOM操作，用好map+join的渲染方式",[99,71916,71917],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[99,71919,71920],{},"return可以实现函数的结束",[99,71922,71923],{},"禁止跳转是 preventDefault() 不要忘记",[133,71925,71927],{"className":50662,"code":71926,"language":50664,"meta":31,"style":31},"\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",[139,71928,71929,71939,71953,71957,71965,71979,71999,72011,72019,72025,72035,72045,72049,72053,72059,72069,72081,72085,72089,72096,72108,72122,72132,72136,72140,72147,72154,72161,72173,72185,72195,72207,72211,72215,72222,72229,72241,72253,72263,72275,72305,72309,72313,72320,72332,72344,72368,72378,72388,72392,72396,72404,72415,72427,72439,72451,72468,72480,72492,72496,72500,72507,72519,72531,72543,72554,72572,72585,72597,72621,72632,72636,72640,72648,72658,72662,72666,72672,72684,72695,72705,72709,72713,72719,72741,72745,72749,72755,72761,72773,72783,72795,72825,72838,72855,72859,72863,72874,72896,72906,72910,72914,72927,72937,72949,72961,72973,72985,72995,73005,73015,73026,73039,73043,73051,73059,73063,73071,73084,73104,73137,73170,73203,73229,73247,73265,73273,73299,73317,73335,73353,73371,73389,73397,73405,73423,73431,73460,73468,73476,73484,73497,73509,73521,73533,73545,73557,73570,73582,73590,73598,73606,73611,73616,73620,73624,73628,73632,73636,73640,73645,73650,73655,73660,73668,73676,73684,73689,73694,73699,73704,73709,73714,73719,73724,73729,73734,73739,73744,73749,73754,73758,73763,73768,73778,73787,73791,73796,73805,73821,73863,73903,73942,74007,74015,74019,74024,74042,74050,74055,74060,74090,74096,74101,74114,74126,74138,74150,74162,74174,74186,74190,74200,74204,74209,74214,74218,74227,74231,74236,74241,74260,74265,74285,74289,74294,74298,74303,74321,74339,74357,74376,74395,74414,74419,74425,74446,74452,74461,74467,74473,74479,74506,74519,74524,74534,74540,74546,74552,74558,74563,74569,74575,74581,74587,74620,74625,74630,74635,74640,74646,74652,74658,74669,74674,74680,74687,74701,74707,74731,74736,74741,74747,74753,74774,74780,74793,74799,74805,74811,74817,74822,74828,74834,74840,74858,74872,74878,74886,74892,74914,74919,74924,74929,74934,74939,74948,74957,74962],{"__ignoreMap":31},[142,71930,71931,71933,71935,71937],{"class":144,"line":145},[142,71932,51326],{"class":152},[142,71934,51330],{"class":51329},[142,71936,51333],{"class":1991},[142,71938,51336],{"class":152},[142,71940,71941,71943,71945,71947,71949,71951],{"class":144,"line":64},[142,71942,1063],{"class":152},[142,71944,50664],{"class":51329},[142,71946,51345],{"class":1991},[142,71948,198],{"class":152},[142,71950,51350],{"class":257},[142,71952,51336],{"class":152},[142,71954,71955],{"class":144,"line":1208},[142,71956,2428],{"emptyLinePlaceholder":69},[142,71958,71959,71961,71963],{"class":144,"line":1223},[142,71960,1063],{"class":152},[142,71962,51363],{"class":51329},[142,71964,51336],{"class":152},[142,71966,71967,71969,71971,71973,71975,71977],{"class":144,"line":1229},[142,71968,52173],{"class":152},[142,71970,51373],{"class":51329},[142,71972,51376],{"class":1991},[142,71974,198],{"class":152},[142,71976,51381],{"class":257},[142,71978,51336],{"class":152},[142,71980,71981,71983,71985,71987,71989,71991,71993,71995,71997],{"class":144,"line":1243},[142,71982,52173],{"class":152},[142,71984,51373],{"class":51329},[142,71986,14949],{"class":1991},[142,71988,198],{"class":152},[142,71990,51420],{"class":257},[142,71992,51400],{"class":1991},[142,71994,198],{"class":152},[142,71996,51427],{"class":257},[142,71998,51336],{"class":152},[142,72000,72001,72003,72005,72007,72009],{"class":144,"line":1249},[142,72002,52173],{"class":152},[142,72004,51436],{"class":51329},[142,72006,51439],{"class":152},[142,72008,51436],{"class":51329},[142,72010,51336],{"class":152},[142,72012,72013,72015,72017],{"class":144,"line":1340},[142,72014,52173],{"class":152},[142,72016,5155],{"class":51329},[142,72018,51336],{"class":152},[142,72020,72021,72023],{"class":144,"line":1346},[142,72022,6432],{"class":51329},[142,72024,15601],{"class":152},[142,72026,72027,72029,72031,72033],{"class":144,"line":1358},[142,72028,54724],{"class":201},[142,72030,51466],{"class":152},[142,72032,344],{"class":201},[142,72034,1319],{"class":152},[142,72036,72037,72039,72041,72043],{"class":144,"line":1640},[142,72038,54735],{"class":201},[142,72040,51466],{"class":152},[142,72042,344],{"class":201},[142,72044,1319],{"class":152},[142,72046,72047],{"class":144,"line":1645},[142,72048,2215],{"class":152},[142,72050,72051],{"class":144,"line":1651},[142,72052,2428],{"emptyLinePlaceholder":69},[142,72054,72055,72057],{"class":144,"line":1656},[142,72056,57308],{"class":51329},[142,72058,15601],{"class":152},[142,72060,72061,72063,72065,72067],{"class":144,"line":1670},[142,72062,57315],{"class":201},[142,72064,51466],{"class":152},[142,72066,51621],{"class":201},[142,72068,1319],{"class":152},[142,72070,72071,72073,72075,72077,72079],{"class":144,"line":1675},[142,72072,62106],{"class":201},[142,72074,51466],{"class":152},[142,72076,853],{"class":201},[142,72078,51521],{"class":148},[142,72080,1319],{"class":152},[142,72082,72083],{"class":144,"line":1681},[142,72084,2215],{"class":152},[142,72086,72087],{"class":144,"line":1702},[142,72088,2428],{"emptyLinePlaceholder":69},[142,72090,72091,72094],{"class":144,"line":1707},[142,72092,72093],{"class":1991},"    .info",[142,72095,15601],{"class":152},[142,72097,72098,72100,72102,72104,72106],{"class":144,"line":1721},[142,72099,54800],{"class":201},[142,72101,51466],{"class":152},[142,72103,51518],{"class":201},[142,72105,51521],{"class":148},[142,72107,1319],{"class":152},[142,72109,72110,72112,72114,72116,72118,72120],{"class":144,"line":1726},[142,72111,54735],{"class":201},[142,72113,51466],{"class":152},[142,72115,599],{"class":201},[142,72117,51521],{"class":148},[142,72119,51585],{"class":201},[142,72121,1319],{"class":152},[142,72123,72124,72126,72128,72130],{"class":144,"line":1755},[142,72125,57315],{"class":201},[142,72127,51466],{"class":152},[142,72129,51621],{"class":201},[142,72131,1319],{"class":152},[142,72133,72134],{"class":144,"line":1760},[142,72135,2215],{"class":152},[142,72137,72138],{"class":144,"line":1777},[142,72139,2428],{"emptyLinePlaceholder":69},[142,72141,72142,72145],{"class":144,"line":1782},[142,72143,72144],{"class":1991},"    .uname",[142,72146,31495],{"class":152},[142,72148,72149,72152],{"class":144,"line":1787},[142,72150,72151],{"class":1991},"    .age",[142,72153,31495],{"class":152},[142,72155,72156,72159],{"class":144,"line":1792},[142,72157,72158],{"class":1991},"    .salary",[142,72160,15601],{"class":152},[142,72162,72163,72165,72167,72169,72171],{"class":144,"line":1806},[142,72164,54800],{"class":201},[142,72166,51466],{"class":152},[142,72168,464],{"class":201},[142,72170,51521],{"class":148},[142,72172,1319],{"class":152},[142,72174,72175,72177,72179,72181,72183],{"class":144,"line":1811},[142,72176,54814],{"class":201},[142,72178,51466],{"class":152},[142,72180,853],{"class":201},[142,72182,51521],{"class":148},[142,72184,1319],{"class":152},[142,72186,72187,72189,72191,72193],{"class":144,"line":2605},[142,72188,61809],{"class":201},[142,72190,51466],{"class":152},[142,72192,54766],{"class":201},[142,72194,1319],{"class":152},[142,72196,72197,72199,72201,72203,72205],{"class":144,"line":2619},[142,72198,61779],{"class":201},[142,72200,51466],{"class":152},[142,72202,728],{"class":201},[142,72204,51521],{"class":148},[142,72206,1319],{"class":152},[142,72208,72209],{"class":144,"line":2627},[142,72210,2215],{"class":152},[142,72212,72213],{"class":144,"line":2632},[142,72214,2428],{"emptyLinePlaceholder":69},[142,72216,72217,72220],{"class":144,"line":2638},[142,72218,72219],{"class":1991},"    .gender",[142,72221,31495],{"class":152},[142,72223,72224,72227],{"class":144,"line":2644},[142,72225,72226],{"class":1991},"    .city",[142,72228,15601],{"class":152},[142,72230,72231,72233,72235,72237,72239],{"class":144,"line":2649},[142,72232,54800],{"class":201},[142,72234,51466],{"class":152},[142,72236,464],{"class":201},[142,72238,51521],{"class":148},[142,72240,1319],{"class":152},[142,72242,72243,72245,72247,72249,72251],{"class":144,"line":7977},[142,72244,54814],{"class":201},[142,72246,51466],{"class":152},[142,72248,978],{"class":201},[142,72250,51521],{"class":148},[142,72252,1319],{"class":152},[142,72254,72255,72257,72259,72261],{"class":144,"line":8001},[142,72256,61809],{"class":201},[142,72258,51466],{"class":152},[142,72260,54766],{"class":201},[142,72262,1319],{"class":152},[142,72264,72265,72267,72269,72271,72273],{"class":144,"line":8006},[142,72266,61779],{"class":201},[142,72268,51466],{"class":152},[142,72270,728],{"class":201},[142,72272,51521],{"class":148},[142,72274,1319],{"class":152},[142,72276,72277,72279,72281,72283,72285,72287,72290,72292,72294,72296,72299,72301,72303],{"class":144,"line":8012},[142,72278,62006],{"class":201},[142,72280,51466],{"class":152},[142,72282,370],{"class":201},[142,72284,51521],{"class":148},[142,72286,51550],{"class":201},[142,72288,72289],{"class":201}," rgb",[142,72291,153],{"class":152},[142,72293,1750],{"class":201},[142,72295,12464],{"class":152},[142,72297,72298],{"class":201},"197",[142,72300,12464],{"class":152},[142,72302,72298],{"class":201},[142,72304,2747],{"class":152},[142,72306,72307],{"class":144,"line":8039},[142,72308,2215],{"class":152},[142,72310,72311],{"class":144,"line":8044},[142,72312,2428],{"emptyLinePlaceholder":69},[142,72314,72315,72318],{"class":144,"line":8050},[142,72316,72317],{"class":51329},"    button",[142,72319,15601],{"class":152},[142,72321,72322,72324,72326,72328,72330],{"class":144,"line":8062},[142,72323,54814],{"class":201},[142,72325,51466],{"class":152},[142,72327,978],{"class":201},[142,72329,51521],{"class":148},[142,72331,1319],{"class":152},[142,72333,72334,72336,72338,72340,72342],{"class":144,"line":8074},[142,72335,54800],{"class":201},[142,72337,51466],{"class":152},[142,72339,637],{"class":201},[142,72341,51521],{"class":148},[142,72343,1319],{"class":152},[142,72345,72346,72348,72350,72353,72355,72357,72359,72362,72364,72366],{"class":144,"line":8086},[142,72347,54913],{"class":201},[142,72349,51466],{"class":152},[142,72351,72352],{"class":201},"rgb",[142,72354,153],{"class":152},[142,72356,1122],{"class":201},[142,72358,12464],{"class":152},[142,72360,72361],{"class":201},"187",[142,72363,12464],{"class":152},[142,72365,452],{"class":201},[142,72367,2747],{"class":152},[142,72369,72370,72372,72374,72376],{"class":144,"line":9745},[142,72371,57445],{"class":201},[142,72373,51466],{"class":152},[142,72375,60871],{"class":201},[142,72377,1319],{"class":152},[142,72379,72380,72382,72384,72386],{"class":144,"line":9770},[142,72381,62006],{"class":201},[142,72383,51466],{"class":152},[142,72385,344],{"class":201},[142,72387,1319],{"class":152},[142,72389,72390],{"class":144,"line":9793},[142,72391,2215],{"class":152},[142,72393,72394],{"class":144,"line":9817},[142,72395,2428],{"emptyLinePlaceholder":69},[142,72397,72398,72400,72402],{"class":144,"line":9822},[142,72399,72317],{"class":51329},[142,72401,51717],{"class":51329},[142,72403,15601],{"class":152},[142,72405,72406,72408,72410,72413],{"class":144,"line":9827},[142,72407,55038],{"class":201},[142,72409,51466],{"class":152},[142,72411,72412],{"class":201},"inline-block",[142,72414,1319],{"class":152},[142,72416,72417,72419,72421,72423,72425],{"class":144,"line":9832},[142,72418,54800],{"class":201},[142,72420,51466],{"class":152},[142,72422,599],{"class":201},[142,72424,51521],{"class":148},[142,72426,1319],{"class":152},[142,72428,72429,72431,72433,72435,72437],{"class":144,"line":9841},[142,72430,54814],{"class":201},[142,72432,51466],{"class":152},[142,72434,599],{"class":201},[142,72436,51521],{"class":148},[142,72438,1319],{"class":152},[142,72440,72441,72443,72445,72447,72449],{"class":144,"line":9846},[142,72442,57388],{"class":201},[142,72444,51466],{"class":152},[142,72446,625],{"class":201},[142,72448,51521],{"class":148},[142,72450,1319],{"class":152},[142,72452,72453,72455,72457,72459,72461,72463,72466],{"class":144,"line":9852},[142,72454,62006],{"class":201},[142,72456,51466],{"class":152},[142,72458,370],{"class":201},[142,72460,51521],{"class":148},[142,72462,51550],{"class":201},[142,72464,72465],{"class":201}," #fff",[142,72467,1319],{"class":152},[142,72469,72470,72472,72474,72476,72478],{"class":144,"line":9873},[142,72471,55163],{"class":201},[142,72473,51466],{"class":152},[142,72475,472],{"class":201},[142,72477,51521],{"class":148},[142,72479,1319],{"class":152},[142,72481,72482,72484,72486,72488,72490],{"class":144,"line":9879},[142,72483,61779],{"class":201},[142,72485,51466],{"class":152},[142,72487,370],{"class":201},[142,72489,51521],{"class":148},[142,72491,1319],{"class":152},[142,72493,72494],{"class":144,"line":9893},[142,72495,2215],{"class":152},[142,72497,72498],{"class":144,"line":9899},[142,72499,2428],{"emptyLinePlaceholder":69},[142,72501,72502,72505],{"class":144,"line":9926},[142,72503,72504],{"class":1991},"    .total",[142,72506,15601],{"class":152},[142,72508,72509,72511,72513,72515,72517],{"class":144,"line":9935},[142,72510,54800],{"class":201},[142,72512,51466],{"class":152},[142,72514,61658],{"class":201},[142,72516,51521],{"class":148},[142,72518,1319],{"class":152},[142,72520,72521,72523,72525,72527,72529],{"class":144,"line":9941},[142,72522,54814],{"class":201},[142,72524,51466],{"class":152},[142,72526,554],{"class":201},[142,72528,51521],{"class":148},[142,72530,1319],{"class":152},[142,72532,72533,72535,72537,72539,72541],{"class":144,"line":9949},[142,72534,57388],{"class":201},[142,72536,51466],{"class":152},[142,72538,554],{"class":201},[142,72540,51521],{"class":148},[142,72542,1319],{"class":152},[142,72544,72545,72547,72549,72552],{"class":144,"line":9954},[142,72546,57315],{"class":201},[142,72548,51466],{"class":152},[142,72550,72551],{"class":201},"right",[142,72553,1319],{"class":152},[142,72555,72556,72558,72560,72562,72564,72566,72568,72570],{"class":144,"line":16633},[142,72557,54735],{"class":201},[142,72559,51466],{"class":152},[142,72561,554],{"class":201},[142,72563,51521],{"class":148},[142,72565,51585],{"class":201},[142,72567,2066],{"class":201},[142,72569,51521],{"class":148},[142,72571,1319],{"class":152},[142,72573,72574,72577,72579,72581,72583],{"class":144,"line":16639},[142,72575,72576],{"class":201},"      padding-right",[142,72578,51466],{"class":152},[142,72580,599],{"class":201},[142,72582,51521],{"class":148},[142,72584,1319],{"class":152},[142,72586,72587,72589,72591,72593,72595],{"class":144,"line":16662},[142,72588,54951],{"class":201},[142,72590,51466],{"class":152},[142,72592,676],{"class":201},[142,72594,51521],{"class":148},[142,72596,1319],{"class":152},[142,72598,72599,72601,72603,72605,72607,72610,72612,72615,72617,72619],{"class":144,"line":16668},[142,72600,54913],{"class":201},[142,72602,51466],{"class":152},[142,72604,72352],{"class":201},[142,72606,153],{"class":152},[142,72608,72609],{"class":201},"237",[142,72611,12464],{"class":152},[142,72613,72614],{"class":201},"235",[142,72616,12464],{"class":152},[142,72618,72614],{"class":201},[142,72620,2747],{"class":152},[142,72622,72623,72626,72628,72630],{"class":144,"line":16691},[142,72624,72625],{"class":201},"      box-sizing",[142,72627,51466],{"class":152},[142,72629,60534],{"class":201},[142,72631,1319],{"class":152},[142,72633,72634],{"class":144,"line":16705},[142,72635,2215],{"class":152},[142,72637,72638],{"class":144,"line":16725},[142,72639,2428],{"emptyLinePlaceholder":69},[142,72641,72642,72644,72646],{"class":144,"line":16731},[142,72643,72504],{"class":1991},[142,72645,51717],{"class":51329},[142,72647,15601],{"class":152},[142,72649,72650,72652,72654,72656],{"class":144,"line":16742},[142,72651,57445],{"class":201},[142,72653,51466],{"class":152},[142,72655,57450],{"class":201},[142,72657,1319],{"class":152},[142,72659,72660],{"class":144,"line":16765},[142,72661,2215],{"class":152},[142,72663,72664],{"class":144,"line":16787},[142,72665,2428],{"emptyLinePlaceholder":69},[142,72667,72668,72670],{"class":144,"line":16792},[142,72669,65052],{"class":51329},[142,72671,15601],{"class":152},[142,72673,72674,72676,72678,72680,72682],{"class":144,"line":16798},[142,72675,54800],{"class":201},[142,72677,51466],{"class":152},[142,72679,61658],{"class":201},[142,72681,51521],{"class":148},[142,72683,1319],{"class":152},[142,72685,72686,72688,72690,72693],{"class":144,"line":16812},[142,72687,54735],{"class":201},[142,72689,51466],{"class":152},[142,72691,72692],{"class":201},"auto",[142,72694,1319],{"class":152},[142,72696,72697,72699,72701,72703],{"class":144,"line":16825},[142,72698,65059],{"class":201},[142,72700,51466],{"class":152},[142,72702,65064],{"class":201},[142,72704,1319],{"class":152},[142,72706,72707],{"class":144,"line":16830},[142,72708,2215],{"class":152},[142,72710,72711],{"class":144,"line":16844},[142,72712,2428],{"emptyLinePlaceholder":69},[142,72714,72715,72717],{"class":144,"line":16849},[142,72716,65144],{"class":51329},[142,72718,15601],{"class":152},[142,72720,72721,72723,72725,72727,72729,72731,72733,72735,72737,72739],{"class":144,"line":16855},[142,72722,54913],{"class":201},[142,72724,51466],{"class":152},[142,72726,72352],{"class":201},[142,72728,153],{"class":152},[142,72730,72609],{"class":201},[142,72732,12464],{"class":152},[142,72734,72614],{"class":201},[142,72736,12464],{"class":152},[142,72738,72614],{"class":201},[142,72740,2747],{"class":152},[142,72742,72743],{"class":144,"line":16860},[142,72744,2215],{"class":152},[142,72746,72747],{"class":144,"line":16874},[142,72748,2428],{"emptyLinePlaceholder":69},[142,72750,72751,72753],{"class":144,"line":16879},[142,72752,65144],{"class":51329},[142,72754,31495],{"class":152},[142,72756,72757,72759],{"class":144,"line":16884},[142,72758,65210],{"class":51329},[142,72760,15601],{"class":152},[142,72762,72763,72765,72767,72769,72771],{"class":144,"line":16898},[142,72764,54814],{"class":201},[142,72766,51466],{"class":152},[142,72768,426],{"class":201},[142,72770,51521],{"class":148},[142,72772,1319],{"class":152},[142,72774,72775,72777,72779,72781],{"class":144,"line":16910},[142,72776,57315],{"class":201},[142,72778,51466],{"class":152},[142,72780,23765],{"class":201},[142,72782,1319],{"class":152},[142,72784,72785,72787,72789,72791,72793],{"class":144,"line":16915},[142,72786,54951],{"class":201},[142,72788,51466],{"class":152},[142,72790,702],{"class":201},[142,72792,51521],{"class":148},[142,72794,1319],{"class":152},[142,72796,72797,72799,72801,72803,72805,72807,72809,72811,72814,72816,72819,72821,72823],{"class":144,"line":16928},[142,72798,62006],{"class":201},[142,72800,51466],{"class":152},[142,72802,370],{"class":201},[142,72804,51521],{"class":148},[142,72806,51550],{"class":201},[142,72808,72289],{"class":201},[142,72810,153],{"class":152},[142,72812,72813],{"class":201},"228",[142,72815,12464],{"class":152},[142,72817,72818],{"class":201},"225",[142,72820,12464],{"class":152},[142,72822,72818],{"class":201},[142,72824,2747],{"class":152},[142,72826,72827,72830,72832,72834,72836],{"class":144,"line":16933},[142,72828,72829],{"class":201},"      padding-left",[142,72831,51466],{"class":152},[142,72833,472],{"class":201},[142,72835,51521],{"class":148},[142,72837,1319],{"class":152},[142,72839,72840,72842,72844,72846,72849,72851,72853],{"class":144,"line":16938},[142,72841,61889],{"class":201},[142,72843,51466],{"class":152},[142,72845,28150],{"class":201},[142,72847,72848],{"class":201}," linear",[142,72850,61896],{"class":201},[142,72852,848],{"class":148},[142,72854,1319],{"class":152},[142,72856,72857],{"class":144,"line":16943},[142,72858,2215],{"class":152},[142,72860,72861],{"class":144,"line":16956},[142,72862,2428],{"emptyLinePlaceholder":69},[142,72864,72865,72868,72870,72872],{"class":144,"line":16961},[142,72866,72867],{"class":51329},"    tbody",[142,72869,70173],{"class":51329},[142,72871,60969],{"class":1991},[142,72873,15601],{"class":152},[142,72875,72876,72878,72880,72882,72884,72886,72888,72890,72892,72894],{"class":144,"line":32662},[142,72877,54913],{"class":201},[142,72879,51466],{"class":152},[142,72881,72352],{"class":201},[142,72883,153],{"class":152},[142,72885,72609],{"class":201},[142,72887,12464],{"class":152},[142,72889,72614],{"class":201},[142,72891,12464],{"class":152},[142,72893,72614],{"class":201},[142,72895,2747],{"class":152},[142,72897,72898,72900,72902,72904],{"class":144,"line":32668},[142,72899,62054],{"class":201},[142,72901,51466],{"class":152},[142,72903,62059],{"class":201},[142,72905,1319],{"class":152},[142,72907,72908],{"class":144,"line":32674},[142,72909,2215],{"class":152},[142,72911,72912],{"class":144,"line":32680},[142,72913,2428],{"emptyLinePlaceholder":69},[142,72915,72916,72918,72920,72923,72925],{"class":144,"line":32686},[142,72917,72867],{"class":51329},[142,72919,70173],{"class":51329},[142,72921,72922],{"class":51329}," td",[142,72924,1427],{"class":51329},[142,72926,15601],{"class":152},[142,72928,72929,72931,72933,72935],{"class":144,"line":32697},[142,72930,55038],{"class":201},[142,72932,51466],{"class":152},[142,72934,60898],{"class":201},[142,72936,1319],{"class":152},[142,72938,72939,72941,72943,72945,72947],{"class":144,"line":32703},[142,72940,54800],{"class":201},[142,72942,51466],{"class":152},[142,72944,1060],{"class":201},[142,72946,51521],{"class":148},[142,72948,1319],{"class":152},[142,72950,72951,72953,72955,72957,72959],{"class":144,"line":32723},[142,72952,54814],{"class":201},[142,72954,51466],{"class":152},[142,72956,978],{"class":201},[142,72958,51521],{"class":148},[142,72960,1319],{"class":152},[142,72962,72963,72965,72967,72969,72971],{"class":144,"line":32729},[142,72964,57388],{"class":201},[142,72966,51466],{"class":152},[142,72968,978],{"class":201},[142,72970,51521],{"class":148},[142,72972,1319],{"class":152},[142,72974,72975,72977,72979,72981,72983],{"class":144,"line":32740},[142,72976,62106],{"class":201},[142,72978,51466],{"class":152},[142,72980,230],{"class":201},[142,72982,51521],{"class":148},[142,72984,1319],{"class":152},[142,72986,72987,72989,72991,72993],{"class":144,"line":32746},[142,72988,57445],{"class":201},[142,72990,51466],{"class":152},[142,72992,60871],{"class":201},[142,72994,1319],{"class":152},[142,72996,72997,72999,73001,73003],{"class":144,"line":32752},[142,72998,57315],{"class":201},[142,73000,51466],{"class":152},[142,73002,51621],{"class":201},[142,73004,1319],{"class":152},[142,73006,73007,73009,73011,73013],{"class":144,"line":32758},[142,73008,63999],{"class":201},[142,73010,51466],{"class":152},[142,73012,54766],{"class":201},[142,73014,1319],{"class":152},[142,73016,73017,73019,73021,73024],{"class":144,"line":32764},[142,73018,54913],{"class":201},[142,73020,51466],{"class":152},[142,73022,73023],{"class":201},"orange",[142,73025,1319],{"class":152},[142,73027,73028,73030,73032,73035,73037],{"class":144,"line":32770},[142,73029,55163],{"class":201},[142,73031,51466],{"class":152},[142,73033,73034],{"class":201},"12.5",[142,73036,51521],{"class":148},[142,73038,1319],{"class":152},[142,73040,73041],{"class":144,"line":32776},[142,73042,2215],{"class":152},[142,73044,73045,73047,73049],{"class":144,"line":32782},[142,73046,52446],{"class":152},[142,73048,5155],{"class":51329},[142,73050,51336],{"class":152},[142,73052,73053,73055,73057],{"class":144,"line":32802},[142,73054,51814],{"class":152},[142,73056,51363],{"class":51329},[142,73058,51336],{"class":152},[142,73060,73061],{"class":144,"line":32808},[142,73062,2428],{"emptyLinePlaceholder":69},[142,73064,73065,73067,73069],{"class":144,"line":32824},[142,73066,1063],{"class":152},[142,73068,51829],{"class":51329},[142,73070,51336],{"class":152},[142,73072,73073,73075,73077,73080,73082],{"class":144,"line":32830},[142,73074,52173],{"class":152},[142,73076,84],{"class":51329},[142,73078,73079],{"class":152},">学生就业统计表\u003C\u002F",[142,73081,84],{"class":51329},[142,73083,51336],{"class":152},[142,73085,73086,73088,73090,73092,73094,73096,73098,73100,73102],{"class":144,"line":32844},[142,73087,52173],{"class":152},[142,73089,66654],{"class":51329},[142,73091,53515],{"class":1991},[142,73093,198],{"class":152},[142,73095,62693],{"class":257},[142,73097,69099],{"class":1991},[142,73099,198],{"class":152},[142,73101,31805],{"class":257},[142,73103,51336],{"class":152},[142,73105,73106,73108,73110,73112,73114,73116,73118,73120,73122,73124,73126,73129,73131,73133,73135],{"class":144,"line":32850},[142,73107,51370],{"class":152},[142,73109,53850],{"class":51329},[142,73111,53853],{"class":1991},[142,73113,198],{"class":152},[142,73115,62728],{"class":257},[142,73117,14949],{"class":1991},[142,73119,198],{"class":152},[142,73121,69125],{"class":257},[142,73123,61049],{"class":1991},[142,73125,198],{"class":152},[142,73127,73128],{"class":257},"\"姓名\"",[142,73130,53515],{"class":1991},[142,73132,198],{"class":152},[142,73134,69125],{"class":257},[142,73136,51336],{"class":152},[142,73138,73139,73141,73143,73145,73147,73149,73151,73153,73155,73157,73159,73162,73164,73166,73168],{"class":144,"line":32865},[142,73140,51370],{"class":152},[142,73142,53850],{"class":51329},[142,73144,53853],{"class":1991},[142,73146,198],{"class":152},[142,73148,62728],{"class":257},[142,73150,14949],{"class":1991},[142,73152,198],{"class":152},[142,73154,69153],{"class":257},[142,73156,61049],{"class":1991},[142,73158,198],{"class":152},[142,73160,73161],{"class":257},"\"年龄\"",[142,73163,53515],{"class":1991},[142,73165,198],{"class":152},[142,73167,69153],{"class":257},[142,73169,51336],{"class":152},[142,73171,73172,73174,73176,73178,73180,73182,73184,73186,73188,73190,73192,73195,73197,73199,73201],{"class":144,"line":32871},[142,73173,51370],{"class":152},[142,73175,53850],{"class":51329},[142,73177,53853],{"class":1991},[142,73179,198],{"class":152},[142,73181,62728],{"class":257},[142,73183,14949],{"class":1991},[142,73185,198],{"class":152},[142,73187,69255],{"class":257},[142,73189,61049],{"class":1991},[142,73191,198],{"class":152},[142,73193,73194],{"class":257},"\"薪资\"",[142,73196,53515],{"class":1991},[142,73198,198],{"class":152},[142,73200,69255],{"class":257},[142,73202,51336],{"class":152},[142,73204,73205,73207,73209,73211,73213,73215,73217,73219,73221,73223,73225,73227],{"class":144,"line":32880},[142,73206,51370],{"class":152},[142,73208,69173],{"class":51329},[142,73210,14949],{"class":1991},[142,73212,198],{"class":152},[142,73214,69180],{"class":257},[142,73216,14988],{"class":1991},[142,73218,198],{"class":152},[142,73220,7681],{"class":257},[142,73222,53515],{"class":1991},[142,73224,198],{"class":152},[142,73226,69180],{"class":257},[142,73228,51336],{"class":152},[142,73230,73231,73233,73235,73237,73239,73241,73243,73245],{"class":144,"line":32886},[142,73232,55263],{"class":152},[142,73234,69195],{"class":51329},[142,73236,66680],{"class":1991},[142,73238,198],{"class":152},[142,73240,9990],{"class":257},[142,73242,69204],{"class":152},[142,73244,69195],{"class":51329},[142,73246,51336],{"class":152},[142,73248,73249,73251,73253,73255,73257,73259,73261,73263],{"class":144,"line":32895},[142,73250,55263],{"class":152},[142,73252,69195],{"class":51329},[142,73254,66680],{"class":1991},[142,73256,198],{"class":152},[142,73258,10059],{"class":257},[142,73260,69223],{"class":152},[142,73262,69195],{"class":51329},[142,73264,51336],{"class":152},[142,73266,73267,73269,73271],{"class":144,"line":32901},[142,73268,51805],{"class":152},[142,73270,69173],{"class":51329},[142,73272,51336],{"class":152},[142,73274,73275,73277,73279,73281,73283,73285,73287,73289,73291,73293,73295,73297],{"class":144,"line":32907},[142,73276,51370],{"class":152},[142,73278,69173],{"class":51329},[142,73280,14949],{"class":1991},[142,73282,198],{"class":152},[142,73284,69277],{"class":257},[142,73286,14988],{"class":1991},[142,73288,198],{"class":152},[142,73290,7681],{"class":257},[142,73292,53515],{"class":1991},[142,73294,198],{"class":152},[142,73296,69277],{"class":257},[142,73298,51336],{"class":152},[142,73300,73301,73303,73305,73307,73309,73311,73313,73315],{"class":144,"line":32916},[142,73302,55263],{"class":152},[142,73304,69195],{"class":51329},[142,73306,66680],{"class":1991},[142,73308,198],{"class":152},[142,73310,69298],{"class":257},[142,73312,69301],{"class":152},[142,73314,69195],{"class":51329},[142,73316,51336],{"class":152},[142,73318,73319,73321,73323,73325,73327,73329,73331,73333],{"class":144,"line":32922},[142,73320,55263],{"class":152},[142,73322,69195],{"class":51329},[142,73324,66680],{"class":1991},[142,73326,198],{"class":152},[142,73328,69318],{"class":257},[142,73330,69321],{"class":152},[142,73332,69195],{"class":51329},[142,73334,51336],{"class":152},[142,73336,73337,73339,73341,73343,73345,73347,73349,73351],{"class":144,"line":32933},[142,73338,55263],{"class":152},[142,73340,69195],{"class":51329},[142,73342,66680],{"class":1991},[142,73344,198],{"class":152},[142,73346,69338],{"class":257},[142,73348,69341],{"class":152},[142,73350,69195],{"class":51329},[142,73352,51336],{"class":152},[142,73354,73355,73357,73359,73361,73363,73365,73367,73369],{"class":144,"line":32939},[142,73356,55263],{"class":152},[142,73358,69195],{"class":51329},[142,73360,66680],{"class":1991},[142,73362,198],{"class":152},[142,73364,69358],{"class":257},[142,73366,69361],{"class":152},[142,73368,69195],{"class":51329},[142,73370,51336],{"class":152},[142,73372,73373,73375,73377,73379,73381,73383,73385,73387],{"class":144,"line":32958},[142,73374,55263],{"class":152},[142,73376,69195],{"class":51329},[142,73378,66680],{"class":1991},[142,73380,198],{"class":152},[142,73382,69378],{"class":257},[142,73384,69381],{"class":152},[142,73386,69195],{"class":51329},[142,73388,51336],{"class":152},[142,73390,73391,73393,73395],{"class":144,"line":32964},[142,73392,51805],{"class":152},[142,73394,69173],{"class":51329},[142,73396,51336],{"class":152},[142,73398,73399,73401,73403],{"class":144,"line":32975},[142,73400,51370],{"class":152},[142,73402,53916],{"class":51329},[142,73404,51336],{"class":152},[142,73406,73407,73409,73411,73414,73416,73419,73421],{"class":144,"line":32981},[142,73408,55263],{"class":152},[142,73410,142],{"class":51329},[142,73412,73413],{"class":152},">+\u003C\u002F",[142,73415,142],{"class":51329},[142,73417,73418],{"class":152},">添加\u003C\u002F",[142,73420,53916],{"class":51329},[142,73422,51336],{"class":152},[142,73424,73425,73427,73429],{"class":144,"line":33001},[142,73426,52446],{"class":152},[142,73428,66654],{"class":51329},[142,73430,51336],{"class":152},[142,73432,73433,73435,73437,73439,73441,73443,73446,73448,73451,73453,73456,73458],{"class":144,"line":33017},[142,73434,52173],{"class":152},[142,73436,51640],{"class":51329},[142,73438,53515],{"class":1991},[142,73440,198],{"class":152},[142,73442,62609],{"class":257},[142,73444,73445],{"class":152},">共有数据 \u003C",[142,73447,142],{"class":51329},[142,73449,73450],{"class":152},">0\u003C\u002F",[142,73452,142],{"class":51329},[142,73454,73455],{"class":152},"> 条\u003C\u002F",[142,73457,51640],{"class":51329},[142,73459,51336],{"class":152},[142,73461,73462,73464,73466],{"class":144,"line":33023},[142,73463,52173],{"class":152},[142,73465,290],{"class":51329},[142,73467,51336],{"class":152},[142,73469,73470,73472,73474],{"class":144,"line":33037},[142,73471,51370],{"class":152},[142,73473,293],{"class":51329},[142,73475,51336],{"class":152},[142,73477,73478,73480,73482],{"class":144,"line":33043},[142,73479,55263],{"class":152},[142,73481,296],{"class":51329},[142,73483,51336],{"class":152},[142,73485,73486,73488,73490,73493,73495],{"class":144,"line":33049},[142,73487,55331],{"class":152},[142,73489,299],{"class":51329},[142,73491,73492],{"class":152},">ID\u003C\u002F",[142,73494,299],{"class":51329},[142,73496,51336],{"class":152},[142,73498,73499,73501,73503,73505,73507],{"class":144,"line":33060},[142,73500,55331],{"class":152},[142,73502,299],{"class":51329},[142,73504,69484],{"class":152},[142,73506,299],{"class":51329},[142,73508,51336],{"class":152},[142,73510,73511,73513,73515,73517,73519],{"class":144,"line":33066},[142,73512,55331],{"class":152},[142,73514,299],{"class":51329},[142,73516,69497],{"class":152},[142,73518,299],{"class":51329},[142,73520,51336],{"class":152},[142,73522,73523,73525,73527,73529,73531],{"class":144,"line":33072},[142,73524,55331],{"class":152},[142,73526,299],{"class":51329},[142,73528,69510],{"class":152},[142,73530,299],{"class":51329},[142,73532,51336],{"class":152},[142,73534,73535,73537,73539,73541,73543],{"class":144,"line":33082},[142,73536,55331],{"class":152},[142,73538,299],{"class":51329},[142,73540,69523],{"class":152},[142,73542,299],{"class":51329},[142,73544,51336],{"class":152},[142,73546,73547,73549,73551,73553,73555],{"class":144,"line":33088},[142,73548,55331],{"class":152},[142,73550,299],{"class":51329},[142,73552,69536],{"class":152},[142,73554,299],{"class":51329},[142,73556,51336],{"class":152},[142,73558,73559,73561,73563,73566,73568],{"class":144,"line":33099},[142,73560,55331],{"class":152},[142,73562,299],{"class":51329},[142,73564,73565],{"class":152},">录入时间\u003C\u002F",[142,73567,299],{"class":51329},[142,73569,51336],{"class":152},[142,73571,73572,73574,73576,73578,73580],{"class":144,"line":33105},[142,73573,55331],{"class":152},[142,73575,299],{"class":51329},[142,73577,69549],{"class":152},[142,73579,299],{"class":51329},[142,73581,51336],{"class":152},[142,73583,73584,73586,73588],{"class":144,"line":33115},[142,73585,55436],{"class":152},[142,73587,296],{"class":51329},[142,73589,51336],{"class":152},[142,73591,73592,73594,73596],{"class":144,"line":33120},[142,73593,51805],{"class":152},[142,73595,293],{"class":51329},[142,73597,51336],{"class":152},[142,73599,73600,73602,73604],{"class":144,"line":33126},[142,73601,51370],{"class":152},[142,73603,337],{"class":51329},[142,73605,51336],{"class":152},[142,73607,73608],{"class":144,"line":33175},[142,73609,73610],{"class":211},"      \u003C!-- \u003Ctr>\n",[142,73612,73613],{"class":144,"line":33222},[142,73614,73615],{"class":211},"        \u003Ctd>1\u003C\u002Ftd>\n",[142,73617,73618],{"class":144,"line":33227},[142,73619,73615],{"class":211},[142,73621,73622],{"class":144,"line":33233},[142,73623,73615],{"class":211},[142,73625,73626],{"class":144,"line":33252},[142,73627,73615],{"class":211},[142,73629,73630],{"class":144,"line":33258},[142,73631,73615],{"class":211},[142,73633,73634],{"class":144,"line":33278},[142,73635,73615],{"class":211},[142,73637,73638],{"class":144,"line":33284},[142,73639,73615],{"class":211},[142,73641,73642],{"class":144,"line":33290},[142,73643,73644],{"class":211},"        \u003Ctd>\n",[142,73646,73647],{"class":144,"line":33300},[142,73648,73649],{"class":211},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[142,73651,73652],{"class":144,"line":33305},[142,73653,73654],{"class":211},"        \u003C\u002Ftd>\n",[142,73656,73657],{"class":144,"line":33311},[142,73658,73659],{"class":211},"      \u003C\u002Ftr> -->\n",[142,73661,73662,73664,73666],{"class":144,"line":33327},[142,73663,51805],{"class":152},[142,73665,337],{"class":51329},[142,73667,51336],{"class":152},[142,73669,73670,73672,73674],{"class":144,"line":33372},[142,73671,52446],{"class":152},[142,73673,290],{"class":51329},[142,73675,51336],{"class":152},[142,73677,73678,73680,73682],{"class":144,"line":33378},[142,73679,52173],{"class":152},[142,73681,51842],{"class":51329},[142,73683,51336],{"class":152},[142,73685,73686],{"class":144,"line":33384},[142,73687,73688],{"class":211},"    \u002F\u002F const initData = [{\n",[142,73690,73691],{"class":144,"line":33390},[142,73692,73693],{"class":211},"    \u002F\u002F   unameId: 1,\n",[142,73695,73696],{"class":144,"line":33401},[142,73697,73698],{"class":211},"    \u002F\u002F   uname: '华晨宇',\n",[142,73700,73701],{"class":144,"line":33407},[142,73702,73703],{"class":211},"    \u002F\u002F   age: 22,\n",[142,73705,73706],{"class":144,"line":33413},[142,73707,73708],{"class":211},"    \u002F\u002F   salary: 12000,\n",[142,73710,73711],{"class":144,"line":33419},[142,73712,73713],{"class":211},"    \u002F\u002F   gender: '男',\n",[142,73715,73716],{"class":144,"line":33437},[142,73717,73718],{"class":211},"    \u002F\u002F   city: '北京',\n",[142,73720,73721],{"class":144,"line":33451},[142,73722,73723],{"class":211},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[142,73725,73726],{"class":144,"line":33460},[142,73727,73728],{"class":211},"    \u002F\u002F }]\n",[142,73730,73731],{"class":144,"line":33469},[142,73732,73733],{"class":211},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[142,73735,73736],{"class":144,"line":33478},[142,73737,73738],{"class":211},"    \u002F\u002F 1.渲染业务\n",[142,73740,73741],{"class":144,"line":33487},[142,73742,73743],{"class":211},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[142,73745,73746],{"class":144,"line":33493},[142,73747,73748],{"class":211},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[142,73750,73751],{"class":144,"line":33499},[142,73752,73753],{"class":211},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[142,73755,73756],{"class":144,"line":33507},[142,73757,2428],{"emptyLinePlaceholder":69},[142,73759,73760],{"class":144,"line":33512},[142,73761,73762],{"class":211},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[142,73764,73765],{"class":144,"line":33518},[142,73766,73767],{"class":211},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[142,73769,73770,73772,73774,73776],{"class":144,"line":33529},[142,73771,11250],{"class":148},[142,73773,57724],{"class":201},[142,73775,13593],{"class":148},[142,73777,51867],{"class":152},[142,73779,73780,73783,73785],{"class":144,"line":33535},[142,73781,73782],{"class":152},"    console.",[142,73784,58276],{"class":1991},[142,73786,52441],{"class":152},[142,73788,73789],{"class":144,"line":33555},[142,73790,2428],{"emptyLinePlaceholder":69},[142,73792,73793],{"class":144,"line":33561},[142,73794,73795],{"class":211},"    \u002F\u002F 时间函数\n",[142,73797,73798,73800,73803],{"class":144,"line":33567},[142,73799,70113],{"class":148},[142,73801,73802],{"class":1991}," getTime",[142,73804,10882],{"class":152},[142,73806,73807,73809,73812,73814,73816,73819],{"class":144,"line":33573},[142,73808,58257],{"class":148},[142,73810,73811],{"class":201}," date",[142,73813,13593],{"class":148},[142,73815,11607],{"class":148},[142,73817,73818],{"class":1991}," Date",[142,73820,2004],{"class":152},[142,73822,73823,73825,73827,73829,73832,73835,73837,73839,73841,73844,73847,73849,73851,73853,73855,73857,73859,73861],{"class":144,"line":33590},[142,73824,58257],{"class":148},[142,73826,16120],{"class":201},[142,73828,13593],{"class":148},[142,73830,73831],{"class":152}," date.",[142,73833,73834],{"class":1991},"getHours",[142,73836,13079],{"class":152},[142,73838,1063],{"class":148},[142,73840,2066],{"class":201},[142,73842,73843],{"class":148}," ?",[142,73845,73846],{"class":257}," '0'",[142,73848,45595],{"class":148},[142,73850,73831],{"class":152},[142,73852,73834],{"class":1991},[142,73854,13079],{"class":152},[142,73856,1012],{"class":148},[142,73858,73831],{"class":152},[142,73860,73834],{"class":1991},[142,73862,2004],{"class":152},[142,73864,73865,73867,73870,73872,73874,73877,73879,73881,73883,73885,73887,73889,73891,73893,73895,73897,73899,73901],{"class":144,"line":33596},[142,73866,58257],{"class":148},[142,73868,73869],{"class":201}," m",[142,73871,13593],{"class":148},[142,73873,73831],{"class":152},[142,73875,73876],{"class":1991},"getMinutes",[142,73878,13079],{"class":152},[142,73880,1063],{"class":148},[142,73882,2066],{"class":201},[142,73884,73843],{"class":148},[142,73886,73846],{"class":257},[142,73888,45595],{"class":148},[142,73890,73831],{"class":152},[142,73892,73876],{"class":1991},[142,73894,13079],{"class":152},[142,73896,1012],{"class":148},[142,73898,73831],{"class":152},[142,73900,73876],{"class":1991},[142,73902,2004],{"class":152},[142,73904,73905,73907,73909,73911,73913,73916,73918,73920,73922,73924,73926,73928,73930,73932,73934,73936,73938,73940],{"class":144,"line":33602},[142,73906,58257],{"class":148},[142,73908,8457],{"class":201},[142,73910,13593],{"class":148},[142,73912,73831],{"class":152},[142,73914,73915],{"class":1991},"getSeconds",[142,73917,13079],{"class":152},[142,73919,1063],{"class":148},[142,73921,2066],{"class":201},[142,73923,73843],{"class":148},[142,73925,73846],{"class":257},[142,73927,45595],{"class":148},[142,73929,73831],{"class":152},[142,73931,73915],{"class":1991},[142,73933,13079],{"class":152},[142,73935,1012],{"class":148},[142,73937,73831],{"class":152},[142,73939,73915],{"class":1991},[142,73941,2004],{"class":152},[142,73943,73944,73946,73949,73951,73953,73956,73958,73961,73963,73966,73968,73970,73973,73975,73977,73979,73981,73983,73985,73988,73990,73993,73995,73998,74000,74002,74004],{"class":144,"line":33608},[142,73945,58257],{"class":148},[142,73947,73948],{"class":201}," str",[142,73950,13593],{"class":148},[142,73952,62932],{"class":257},[142,73954,73955],{"class":152},"date",[142,73957,711],{"class":257},[142,73959,73960],{"class":1991},"getFullYear",[142,73962,2455],{"class":257},[142,73964,73965],{"class":257},"}\u002F${",[142,73967,73955],{"class":152},[142,73969,711],{"class":257},[142,73971,73972],{"class":1991},"getMonth",[142,73974,13079],{"class":257},[142,73976,634],{"class":148},[142,73978,25147],{"class":201},[142,73980,73965],{"class":257},[142,73982,73955],{"class":152},[142,73984,711],{"class":257},[142,73986,73987],{"class":1991},"getDate",[142,73989,2455],{"class":257},[142,73991,73992],{"class":257},"} ${",[142,73994,568],{"class":152},[142,73996,73997],{"class":257},"}:${",[142,73999,697],{"class":152},[142,74001,73997],{"class":257},[142,74003,848],{"class":152},[142,74005,74006],{"class":257},"}`\n",[142,74008,74009,74012],{"class":144,"line":33614},[142,74010,74011],{"class":148},"      return",[142,74013,74014],{"class":152}," str\n",[142,74016,74017],{"class":144,"line":33620},[142,74018,2215],{"class":152},[142,74020,74021],{"class":144,"line":33647},[142,74022,74023],{"class":211},"    \u002F\u002F 渲染函数\n",[142,74025,74026,74028,74030,74032,74034,74036,74038,74040],{"class":144,"line":33671},[142,74027,11250],{"class":148},[142,74029,69776],{"class":201},[142,74031,13593],{"class":148},[142,74033,54425],{"class":152},[142,74035,54428],{"class":1991},[142,74037,153],{"class":152},[142,74039,69787],{"class":257},[142,74041,159],{"class":152},[142,74043,74044,74046,74048],{"class":144,"line":33677},[142,74045,70113],{"class":148},[142,74047,70116],{"class":1991},[142,74049,10882],{"class":152},[142,74051,74052],{"class":144,"line":33683},[142,74053,74054],{"class":211},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[142,74056,74057],{"class":144,"line":33689},[142,74058,74059],{"class":211},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[142,74061,74062,74064,74067,74069,74071,74074,74076,74078,74080,74083,74085,74088],{"class":144,"line":33700},[142,74063,58257],{"class":148},[142,74065,74066],{"class":201}," trArr",[142,74068,13593],{"class":148},[142,74070,51994],{"class":152},[142,74072,74073],{"class":1991},"map",[142,74075,153],{"class":152},[142,74077,54478],{"class":148},[142,74079,1686],{"class":152},[142,74081,74082],{"class":5245},"ele",[142,74084,12464],{"class":152},[142,74086,74087],{"class":5245},"index",[142,74089,12471],{"class":152},[142,74091,74092,74094],{"class":144,"line":33711},[142,74093,14781],{"class":148},[142,74095,70197],{"class":257},[142,74097,74098],{"class":144,"line":33717},[142,74099,74100],{"class":257},"      \u003Ctr>\n",[142,74102,74103,74105,74107,74109,74112],{"class":144,"line":33734},[142,74104,70202],{"class":257},[142,74106,74082],{"class":152},[142,74108,711],{"class":257},[142,74110,74111],{"class":152},"unameId",[142,74113,70217],{"class":257},[142,74115,74116,74118,74120,74122,74124],{"class":144,"line":33757},[142,74117,70202],{"class":257},[142,74119,74082],{"class":152},[142,74121,711],{"class":257},[142,74123,70233],{"class":152},[142,74125,70217],{"class":257},[142,74127,74128,74130,74132,74134,74136],{"class":144,"line":33780},[142,74129,70202],{"class":257},[142,74131,74082],{"class":152},[142,74133,711],{"class":257},[142,74135,70250],{"class":152},[142,74137,70217],{"class":257},[142,74139,74140,74142,74144,74146,74148],{"class":144,"line":33786},[142,74141,70202],{"class":257},[142,74143,74082],{"class":152},[142,74145,711],{"class":257},[142,74147,70267],{"class":152},[142,74149,70217],{"class":257},[142,74151,74152,74154,74156,74158,74160],{"class":144,"line":33791},[142,74153,70202],{"class":257},[142,74155,74082],{"class":152},[142,74157,711],{"class":257},[142,74159,70284],{"class":152},[142,74161,70217],{"class":257},[142,74163,74164,74166,74168,74170,74172],{"class":144,"line":33800},[142,74165,70202],{"class":257},[142,74167,74082],{"class":152},[142,74169,711],{"class":257},[142,74171,70301],{"class":152},[142,74173,70217],{"class":257},[142,74175,74176,74178,74180,74182,74184],{"class":144,"line":33810},[142,74177,70202],{"class":257},[142,74179,74082],{"class":152},[142,74181,711],{"class":257},[142,74183,2415],{"class":152},[142,74185,70217],{"class":257},[142,74187,74188],{"class":144,"line":33816},[142,74189,73644],{"class":257},[142,74191,74192,74195,74197],{"class":144,"line":33821},[142,74193,74194],{"class":257},"          \u003Ca href=\"#\" data-id=\"${",[142,74196,74087],{"class":152},[142,74198,74199],{"class":257},"}\">删除\u003C\u002Fa>\n",[142,74201,74202],{"class":144,"line":33827},[142,74203,73654],{"class":257},[142,74205,74206],{"class":144,"line":33840},[142,74207,74208],{"class":257},"      \u003C\u002Ftr>\n",[142,74210,74211],{"class":144,"line":33846},[142,74212,74213],{"class":257},"  `\n",[142,74215,74216],{"class":144,"line":33857},[142,74217,64844],{"class":152},[142,74219,74220,74222,74224],{"class":144,"line":33868},[142,74221,58273],{"class":152},[142,74223,58276],{"class":1991},[142,74225,74226],{"class":152},"(trArr)\n",[142,74228,74229],{"class":144,"line":33887},[142,74230,2428],{"emptyLinePlaceholder":69},[142,74232,74233],{"class":144,"line":49547},[142,74234,74235],{"class":211},"      \u002F\u002F (2) 把数组转换为字符串join\n",[142,74237,74238],{"class":144,"line":49552},[142,74239,74240],{"class":211},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[142,74242,74243,74245,74247,74250,74253,74255,74258],{"class":144,"line":49561},[142,74244,70128],{"class":152},[142,74246,198],{"class":148},[142,74248,74249],{"class":152}," trArr.",[142,74251,74252],{"class":1991},"join",[142,74254,153],{"class":152},[142,74256,74257],{"class":257},"''",[142,74259,159],{"class":152},[142,74261,74262],{"class":144,"line":49570},[142,74263,74264],{"class":211},"      \u002F\u002F 显示共有几条\n",[142,74266,74267,74269,74271,74273,74276,74279,74281,74283],{"class":144,"line":49575},[142,74268,55800],{"class":152},[142,74270,54428],{"class":1991},[142,74272,153],{"class":152},[142,74274,74275],{"class":257},"'.total span'",[142,74277,74278],{"class":152},").innerHTML ",[142,74280,198],{"class":148},[142,74282,51994],{"class":152},[142,74284,55860],{"class":201},[142,74286,74287],{"class":144,"line":49580},[142,74288,2215],{"class":152},[142,74290,74291],{"class":144,"line":49585},[142,74292,74293],{"class":211},"    \u002F\u002F render()\n",[142,74295,74296],{"class":144,"line":49598},[142,74297,2428],{"emptyLinePlaceholder":69},[142,74299,74300],{"class":144,"line":49603},[142,74301,74302],{"class":211},"    \u002F\u002F 获取DOM对象\n",[142,74304,74305,74307,74309,74311,74313,74315,74317,74319],{"class":144,"line":49612},[142,74306,11250],{"class":148},[142,74308,69850],{"class":201},[142,74310,13593],{"class":148},[142,74312,54425],{"class":152},[142,74314,54428],{"class":1991},[142,74316,153],{"class":152},[142,74318,69861],{"class":257},[142,74320,159],{"class":152},[142,74322,74323,74325,74327,74329,74331,74333,74335,74337],{"class":144,"line":49621},[142,74324,11250],{"class":148},[142,74326,69677],{"class":201},[142,74328,13593],{"class":148},[142,74330,54425],{"class":152},[142,74332,54428],{"class":1991},[142,74334,153],{"class":152},[142,74336,69688],{"class":257},[142,74338,159],{"class":152},[142,74340,74341,74343,74345,74347,74349,74351,74353,74355],{"class":144,"line":49638},[142,74342,11250],{"class":148},[142,74344,15718],{"class":201},[142,74346,13593],{"class":148},[142,74348,54425],{"class":152},[142,74350,54428],{"class":1991},[142,74352,153],{"class":152},[142,74354,69707],{"class":257},[142,74356,159],{"class":152},[142,74358,74360,74362,74364,74366,74368,74370,74372,74374],{"class":144,"line":74359},231,[142,74361,11250],{"class":148},[142,74363,69736],{"class":201},[142,74365,13593],{"class":148},[142,74367,54425],{"class":152},[142,74369,54428],{"class":1991},[142,74371,153],{"class":152},[142,74373,69747],{"class":257},[142,74375,159],{"class":152},[142,74377,74379,74381,74383,74385,74387,74389,74391,74393],{"class":144,"line":74378},232,[142,74380,11250],{"class":148},[142,74382,69716],{"class":201},[142,74384,13593],{"class":148},[142,74386,54425],{"class":152},[142,74388,54428],{"class":1991},[142,74390,153],{"class":152},[142,74392,69727],{"class":257},[142,74394,159],{"class":152},[142,74396,74398,74400,74402,74404,74406,74408,74410,74412],{"class":144,"line":74397},233,[142,74399,11250],{"class":148},[142,74401,69756],{"class":201},[142,74403,13593],{"class":148},[142,74405,54425],{"class":152},[142,74407,54428],{"class":1991},[142,74409,153],{"class":152},[142,74411,69767],{"class":257},[142,74413,159],{"class":152},[142,74415,74417],{"class":144,"line":74416},234,[142,74418,2428],{"emptyLinePlaceholder":69},[142,74420,74422],{"class":144,"line":74421},235,[142,74423,74424],{"class":211},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[142,74426,74428,74430,74432,74434,74436,74438,74440,74442,74444],{"class":144,"line":74427},236,[142,74429,69868],{"class":152},[142,74431,57842],{"class":1991},[142,74433,153],{"class":152},[142,74435,69875],{"class":257},[142,74437,12464],{"class":152},[142,74439,54478],{"class":148},[142,74441,1686],{"class":152},[142,74443,227],{"class":5245},[142,74445,12471],{"class":152},[142,74447,74449],{"class":144,"line":74448},237,[142,74450,74451],{"class":211},"      \u002F\u002F 禁止浏览器跳转\n",[142,74453,74455,74457,74459],{"class":144,"line":74454},238,[142,74456,69895],{"class":152},[142,74458,69898],{"class":1991},[142,74460,2004],{"class":152},[142,74462,74464],{"class":144,"line":74463},239,[142,74465,74466],{"class":211},"      \u002F\u002F 非空判断\n",[142,74468,74470],{"class":144,"line":74469},240,[142,74471,74472],{"class":211},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[142,74474,74476],{"class":144,"line":74475},241,[142,74477,74478],{"class":211},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[142,74480,74482,74484,74486,74488,74491,74493,74496,74499,74501,74503],{"class":144,"line":74481},242,[142,74483,54509],{"class":148},[142,74485,1686],{"class":152},[142,74487,379],{"class":148},[142,74489,74490],{"class":152},"uname.value ",[142,74492,71386],{"class":148},[142,74494,74495],{"class":148}," !",[142,74497,74498],{"class":152},"age.value ",[142,74500,71386],{"class":148},[142,74502,74495],{"class":148},[142,74504,74505],{"class":152},"salary.value) {\n",[142,74507,74509,74511,74513,74515,74517],{"class":144,"line":74508},243,[142,74510,14781],{"class":148},[142,74512,69969],{"class":1991},[142,74514,153],{"class":152},[142,74516,69974],{"class":257},[142,74518,159],{"class":152},[142,74520,74522],{"class":144,"line":74521},244,[142,74523,52427],{"class":152},[142,74525,74527,74529,74531],{"class":144,"line":74526},245,[142,74528,58036],{"class":152},[142,74530,51913],{"class":1991},[142,74532,74533],{"class":152},"({\n",[142,74535,74537],{"class":144,"line":74536},246,[142,74538,74539],{"class":211},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[142,74541,74543],{"class":144,"line":74542},247,[142,74544,74545],{"class":211},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[142,74547,74549],{"class":144,"line":74548},248,[142,74550,74551],{"class":211},"        \u002F\u002F 对象的序号应为数组长度+1\n",[142,74553,74555],{"class":144,"line":74554},249,[142,74556,74557],{"class":211},"        \u002F\u002F unameId: arr.length + 1,\n",[142,74559,74561],{"class":144,"line":74560},250,[142,74562,2428],{"emptyLinePlaceholder":69},[142,74564,74566],{"class":144,"line":74565},251,[142,74567,74568],{"class":211},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[142,74570,74572],{"class":144,"line":74571},252,[142,74573,74574],{"class":211},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[142,74576,74578],{"class":144,"line":74577},253,[142,74579,74580],{"class":211},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[142,74582,74584],{"class":144,"line":74583},254,[142,74585,74586],{"class":211},"        \u002F\u002F 0当假看\n",[142,74588,74590,74593,74595,74597,74600,74602,74604,74606,74609,74611,74613,74616,74618],{"class":144,"line":74589},255,[142,74591,74592],{"class":152},"        unameId: arr.",[142,74594,51997],{"class":201},[142,74596,73843],{"class":148},[142,74598,74599],{"class":152}," arr[arr.",[142,74601,51997],{"class":201},[142,74603,52300],{"class":148},[142,74605,25147],{"class":201},[142,74607,74608],{"class":152},"].unameId ",[142,74610,634],{"class":148},[142,74612,25147],{"class":201},[142,74614,74615],{"class":148}," :",[142,74617,25147],{"class":201},[142,74619,31495],{"class":152},[142,74621,74623],{"class":144,"line":74622},256,[142,74624,70022],{"class":152},[142,74626,74628],{"class":144,"line":74627},257,[142,74629,70027],{"class":152},[142,74631,74633],{"class":144,"line":74632},258,[142,74634,70037],{"class":152},[142,74636,74638],{"class":144,"line":74637},259,[142,74639,70032],{"class":152},[142,74641,74643],{"class":144,"line":74642},260,[142,74644,74645],{"class":152},"        city: city.value,\n",[142,74647,74649],{"class":144,"line":74648},261,[142,74650,74651],{"class":211},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[142,74653,74655],{"class":144,"line":74654},262,[142,74656,74657],{"class":211},"        \u002F\u002F time: new Date().toDateString()\n",[142,74659,74661,74664,74667],{"class":144,"line":74660},263,[142,74662,74663],{"class":152},"        time: ",[142,74665,74666],{"class":1991},"getTime",[142,74668,2004],{"class":152},[142,74670,74672],{"class":144,"line":74671},264,[142,74673,64844],{"class":152},[142,74675,74677],{"class":144,"line":74676},265,[142,74678,74679],{"class":211},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[142,74681,74683,74685],{"class":144,"line":74682},266,[142,74684,70097],{"class":1991},[142,74686,2004],{"class":152},[142,74688,74690,74692,74694,74696,74698],{"class":144,"line":74689},267,[142,74691,70080],{"class":201},[142,74693,711],{"class":152},[142,74695,70085],{"class":1991},[142,74697,13079],{"class":152},[142,74699,74700],{"class":211},"\u002F\u002F重置表单\n",[142,74702,74704],{"class":144,"line":74703},268,[142,74705,74706],{"class":211},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[142,74708,74710,74713,74715,74717,74720,74722,74724,74726,74728],{"class":144,"line":74709},269,[142,74711,74712],{"class":152},"      localStorage.",[142,74714,71683],{"class":1991},[142,74716,153],{"class":152},[142,74718,74719],{"class":257},"'data'",[142,74721,12464],{"class":152},[142,74723,71693],{"class":201},[142,74725,711],{"class":152},[142,74727,71698],{"class":1991},[142,74729,74730],{"class":152},"(arr))\n",[142,74732,74734],{"class":144,"line":74733},270,[142,74735,33490],{"class":152},[142,74737,74739],{"class":144,"line":74738},271,[142,74740,2428],{"emptyLinePlaceholder":69},[142,74742,74744],{"class":144,"line":74743},272,[142,74745,74746],{"class":211},"    \u002F\u002F 3.删除业务\n",[142,74748,74750],{"class":144,"line":74749},273,[142,74751,74752],{"class":211},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[142,74754,74756,74758,74760,74762,74764,74766,74768,74770,74772],{"class":144,"line":74755},274,[142,74757,70370],{"class":152},[142,74759,57842],{"class":1991},[142,74761,153],{"class":152},[142,74763,57847],{"class":257},[142,74765,12464],{"class":152},[142,74767,54478],{"class":148},[142,74769,1686],{"class":152},[142,74771,227],{"class":5245},[142,74773,12471],{"class":152},[142,74775,74777],{"class":144,"line":74776},275,[142,74778,74779],{"class":211},"      \u002F\u002F 判断是否点击的是删除按钮\n",[142,74781,74783,74785,74787,74789,74791],{"class":144,"line":74782},276,[142,74784,54509],{"class":148},[142,74786,67063],{"class":152},[142,74788,54515],{"class":148},[142,74790,68285],{"class":257},[142,74792,12471],{"class":152},[142,74794,74796],{"class":144,"line":74795},277,[142,74797,74798],{"class":211},"        \u002F\u002F alert(1)\n",[142,74800,74802],{"class":144,"line":74801},278,[142,74803,74804],{"class":211},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[142,74806,74808],{"class":144,"line":74807},279,[142,74809,74810],{"class":211},"        \u002F\u002F console.log(e.target)\n",[142,74812,74814],{"class":144,"line":74813},280,[142,74815,74816],{"class":211},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[142,74818,74820],{"class":144,"line":74819},281,[142,74821,2428],{"emptyLinePlaceholder":69},[142,74823,74825],{"class":144,"line":74824},282,[142,74826,74827],{"class":211},"        \u002F\u002F 确认框，确然是否真的要删除\n",[142,74829,74831],{"class":144,"line":74830},283,[142,74832,74833],{"class":211},"        \u002F\u002F confirm()为确认框\n",[142,74835,74837],{"class":144,"line":74836},284,[142,74838,74839],{"class":211},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[142,74841,74843,74845,74847,74850,74852,74855],{"class":144,"line":74842},285,[142,74844,2525],{"class":148},[142,74846,1686],{"class":152},[142,74848,74849],{"class":1991},"confirm",[142,74851,153],{"class":152},[142,74853,74854],{"class":257},"'您确定要删除这条数据吗？'",[142,74856,74857],{"class":152},")) {\n",[142,74859,74861,74864,74866,74868,74870],{"class":144,"line":74860},286,[142,74862,74863],{"class":152},"          arr.",[142,74865,58039],{"class":1991},[142,74867,70423],{"class":152},[142,74869,370],{"class":201},[142,74871,159],{"class":152},[142,74873,74875],{"class":144,"line":74874},287,[142,74876,74877],{"class":211},"          \u002F\u002F 3.4 重新渲染页面\n",[142,74879,74881,74884],{"class":144,"line":74880},288,[142,74882,74883],{"class":1991},"          render",[142,74885,2004],{"class":152},[142,74887,74889],{"class":144,"line":74888},289,[142,74890,74891],{"class":211},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[142,74893,74895,74898,74900,74902,74904,74906,74908,74910,74912],{"class":144,"line":74894},290,[142,74896,74897],{"class":152},"          localStorage.",[142,74899,71683],{"class":1991},[142,74901,153],{"class":152},[142,74903,74719],{"class":257},[142,74905,12464],{"class":152},[142,74907,71693],{"class":201},[142,74909,711],{"class":152},[142,74911,71698],{"class":1991},[142,74913,74730],{"class":152},[142,74915,74917],{"class":144,"line":74916},291,[142,74918,2557],{"class":152},[142,74920,74922],{"class":144,"line":74921},292,[142,74923,52427],{"class":152},[142,74925,74927],{"class":144,"line":74926},293,[142,74928,2428],{"emptyLinePlaceholder":69},[142,74930,74932],{"class":144,"line":74931},294,[142,74933,33490],{"class":152},[142,74935,74937],{"class":144,"line":74936},295,[142,74938,2428],{"emptyLinePlaceholder":69},[142,74940,74942,74944,74946],{"class":144,"line":74941},296,[142,74943,52446],{"class":152},[142,74945,51842],{"class":51329},[142,74947,51336],{"class":152},[142,74949,74951,74953,74955],{"class":144,"line":74950},297,[142,74952,51814],{"class":152},[142,74954,51829],{"class":51329},[142,74956,51336],{"class":152},[142,74958,74960],{"class":144,"line":74959},298,[142,74961,2428],{"emptyLinePlaceholder":69},[142,74963,74965,74967,74969],{"class":144,"line":74964},299,[142,74966,51814],{"class":152},[142,74968,50664],{"class":51329},[142,74970,51336],{"class":152},[84,74972,74974],{"id":74973},"_36-正则表达式","3.6 正则表达式",[14,74976,74977],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,74979,74980],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,74982,74983],{},"正则表达式的作用：",[1160,74985,74986,74993,74999],{},[99,74987,74988,74989,74992],{},"表单验证（ ",[302,74990,74991],{},"匹配"," ）",[99,74994,74995,74996,74992],{},"过滤敏感词（ ",[302,74997,74998],{},"替换",[99,75000,75001,75002,74992],{},"字符串中提取我们想要的部分（ ",[302,75003,75004],{},"提取",[113,75006,75008],{"id":75007},"_361-语法","3.6.1 语法",[14,75010,75011],{},"正则表达式使用步骤：",[96,75013,75014,75017],{},[99,75015,75016],{},"定义规则",[99,75018,75019],{},"查找是否匹配",[14,75021,75022],{},"正则表达式里边不需要写引号",[14,75024,75025],{},[29,75026],{"alt":31,"src":75027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75029,75030],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75032,75033],{},"reg.test(str)",[14,75035,75036],{},[29,75037],{"alt":31,"src":75038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75040,75041],{},[29,75042],{"alt":31,"src":75043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[113,75045,75047],{"id":75046},"_362-元字符","3.6.2 元字符",[96,75049,75050,75053,75056,75059,75066],{},[99,75051,75052],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[99,75054,75055],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[99,75057,75058],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[99,75060,75061,75062],{},"正则验证工具：",[391,75063,75064],{"href":75064,"rel":75065},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23894],[99,75067,75068],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22027,75070,75072],{"id":75071},"_3621-边界符","3.6.2.1 边界符",[14,75074,75075],{},[29,75076],{"alt":31,"src":75077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75079,75080],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75082,75083],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75085,75086],{},"只匹配一次",[14,75088,75089],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22027,75091,75093],{"id":75092},"_3622-量词","3.6.2.2 量词",[14,75095,75096],{},[29,75097],{"alt":31,"src":75098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75100,75101],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22027,75103,75105],{"id":75104},"_3623-元字符","3.6.2.3 元字符",[14,75107,75108],{},[29,75109],{"alt":31,"src":75110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75112,75113],{},"匹配的是a或b或c []只选一个",[14,75115,75116],{},[29,75117],{"alt":31,"src":75118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75120,75121],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75123,75124],{},[29,75125],{"alt":31,"src":75126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75128,75129],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75131,75132],{},[29,75133],{"alt":31,"src":75134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[133,75136,75138],{"className":50662,"code":75137,"language":50664,"meta":31,"style":31},"\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",[139,75139,75140,75150,75164,75168,75176,75190,75210,75222,75230,75234,75242,75250,75255,75286,75313,75341,75345,75350,75378,75409,75414,75419,75450,75482,75514,75518,75523,75554,75584,75614,75618,75623,75654,75685,75715,75745,75749,75754,75787,75791,75796,75827,75858,75862,75867,75898,75928,75959,75963,75968,76000,76031,76062,76089,76120,76152,76185,76216,76247,76279,76310,76318,76326,76330],{"__ignoreMap":31},[142,75141,75142,75144,75146,75148],{"class":144,"line":145},[142,75143,51326],{"class":152},[142,75145,51330],{"class":51329},[142,75147,51333],{"class":1991},[142,75149,51336],{"class":152},[142,75151,75152,75154,75156,75158,75160,75162],{"class":144,"line":64},[142,75153,1063],{"class":152},[142,75155,50664],{"class":51329},[142,75157,51345],{"class":1991},[142,75159,198],{"class":152},[142,75161,51350],{"class":257},[142,75163,51336],{"class":152},[142,75165,75166],{"class":144,"line":1208},[142,75167,2428],{"emptyLinePlaceholder":69},[142,75169,75170,75172,75174],{"class":144,"line":1223},[142,75171,1063],{"class":152},[142,75173,51363],{"class":51329},[142,75175,51336],{"class":152},[142,75177,75178,75180,75182,75184,75186,75188],{"class":144,"line":1229},[142,75179,52173],{"class":152},[142,75181,51373],{"class":51329},[142,75183,51376],{"class":1991},[142,75185,198],{"class":152},[142,75187,51381],{"class":257},[142,75189,51336],{"class":152},[142,75191,75192,75194,75196,75198,75200,75202,75204,75206,75208],{"class":144,"line":1243},[142,75193,52173],{"class":152},[142,75195,51373],{"class":51329},[142,75197,14949],{"class":1991},[142,75199,198],{"class":152},[142,75201,51420],{"class":257},[142,75203,51400],{"class":1991},[142,75205,198],{"class":152},[142,75207,51427],{"class":257},[142,75209,51336],{"class":152},[142,75211,75212,75214,75216,75218,75220],{"class":144,"line":1249},[142,75213,52173],{"class":152},[142,75215,51436],{"class":51329},[142,75217,51439],{"class":152},[142,75219,51436],{"class":51329},[142,75221,51336],{"class":152},[142,75223,75224,75226,75228],{"class":144,"line":1340},[142,75225,51814],{"class":152},[142,75227,51363],{"class":51329},[142,75229,51336],{"class":152},[142,75231,75232],{"class":144,"line":1346},[142,75233,2428],{"emptyLinePlaceholder":69},[142,75235,75236,75238,75240],{"class":144,"line":1358},[142,75237,1063],{"class":152},[142,75239,51829],{"class":51329},[142,75241,51336],{"class":152},[142,75243,75244,75246,75248],{"class":144,"line":1640},[142,75245,52173],{"class":152},[142,75247,51842],{"class":51329},[142,75249,51336],{"class":152},[142,75251,75252],{"class":144,"line":1645},[142,75253,75254],{"class":211},"    \u002F\u002F 元字符中\n",[142,75256,75257,75259,75261,75263,75265,75268,75270,75272,75275,75277,75280,75283],{"class":144,"line":1651},[142,75258,73782],{"class":152},[142,75260,58276],{"class":1991},[142,75262,153],{"class":152},[142,75264,737],{"class":257},[142,75266,75267],{"class":48006},"哈",[142,75269,737],{"class":257},[142,75271,711],{"class":152},[142,75273,75274],{"class":1991},"test",[142,75276,153],{"class":152},[142,75278,75279],{"class":257},"'哈'",[142,75281,75282],{"class":152},"))  ",[142,75284,75285],{"class":211},"\u002F\u002Ftrue\n",[142,75287,75288,75290,75292,75294,75296,75298,75300,75302,75304,75306,75309,75311],{"class":144,"line":1656},[142,75289,73782],{"class":152},[142,75291,58276],{"class":1991},[142,75293,153],{"class":152},[142,75295,737],{"class":257},[142,75297,75267],{"class":48006},[142,75299,737],{"class":257},[142,75301,711],{"class":152},[142,75303,75274],{"class":1991},[142,75305,153],{"class":152},[142,75307,75308],{"class":257},"'哈哈'",[142,75310,75282],{"class":152},[142,75312,75285],{"class":211},[142,75314,75315,75317,75319,75321,75323,75325,75327,75329,75331,75333,75336,75339],{"class":144,"line":1670},[142,75316,73782],{"class":152},[142,75318,58276],{"class":1991},[142,75320,153],{"class":152},[142,75322,737],{"class":257},[142,75324,75267],{"class":48006},[142,75326,737],{"class":257},[142,75328,711],{"class":152},[142,75330,75274],{"class":1991},[142,75332,153],{"class":152},[142,75334,75335],{"class":257},"'二哈'",[142,75337,75338],{"class":152},"))   ",[142,75340,75285],{"class":211},[142,75342,75343],{"class":144,"line":1675},[142,75344,2428],{"emptyLinePlaceholder":69},[142,75346,75347],{"class":144,"line":1681},[142,75348,75349],{"class":211},"    \u002F\u002F 1.边界符\n",[142,75351,75352,75354,75356,75358,75360,75362,75364,75366,75368,75370,75372,75374,75376],{"class":144,"line":1702},[142,75353,73782],{"class":152},[142,75355,58276],{"class":1991},[142,75357,153],{"class":152},[142,75359,737],{"class":257},[142,75361,1119],{"class":148},[142,75363,75267],{"class":48006},[142,75365,737],{"class":257},[142,75367,711],{"class":152},[142,75369,75274],{"class":1991},[142,75371,153],{"class":152},[142,75373,75279],{"class":257},[142,75375,75282],{"class":152},[142,75377,75285],{"class":211},[142,75379,75380,75382,75384,75386,75388,75390,75392,75394,75396,75398,75400,75402,75404,75406],{"class":144,"line":1707},[142,75381,73782],{"class":152},[142,75383,58276],{"class":1991},[142,75385,153],{"class":152},[142,75387,737],{"class":257},[142,75389,1119],{"class":148},[142,75391,75267],{"class":48006},[142,75393,455],{"class":148},[142,75395,737],{"class":257},[142,75397,711],{"class":152},[142,75399,75274],{"class":1991},[142,75401,153],{"class":152},[142,75403,75308],{"class":257},[142,75405,75282],{"class":152},[142,75407,75408],{"class":211},"\u002F\u002Ffalse\n",[142,75410,75411],{"class":144,"line":1721},[142,75412,75413],{"class":211},"    \u002F\u002F 2.量词\n",[142,75415,75416],{"class":144,"line":1726},[142,75417,75418],{"class":211},"    \u002F\u002F 量词 * 类似于 >= 0\n",[142,75420,75421,75423,75425,75427,75429,75431,75433,75436,75438,75440,75442,75444,75446,75448],{"class":144,"line":1755},[142,75422,73782],{"class":152},[142,75424,58276],{"class":1991},[142,75426,153],{"class":152},[142,75428,737],{"class":257},[142,75430,1119],{"class":148},[142,75432,75267],{"class":48006},[142,75434,75435],{"class":148},"*$",[142,75437,737],{"class":257},[142,75439,711],{"class":152},[142,75441,75274],{"class":1991},[142,75443,153],{"class":152},[142,75445,75308],{"class":257},[142,75447,75282],{"class":152},[142,75449,75285],{"class":211},[142,75451,75452,75454,75456,75458,75460,75462,75464,75466,75468,75470,75472,75474,75477,75479],{"class":144,"line":1760},[142,75453,73782],{"class":152},[142,75455,58276],{"class":1991},[142,75457,153],{"class":152},[142,75459,737],{"class":257},[142,75461,1119],{"class":148},[142,75463,75267],{"class":48006},[142,75465,75435],{"class":148},[142,75467,737],{"class":257},[142,75469,711],{"class":152},[142,75471,75274],{"class":1991},[142,75473,153],{"class":152},[142,75475,75476],{"class":257},"'二哈好傻'",[142,75478,75282],{"class":152},[142,75480,75481],{"class":211},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[142,75483,75484,75486,75488,75490,75492,75494,75496,75498,75500,75502,75504,75506,75509,75511],{"class":144,"line":1777},[142,75485,73782],{"class":152},[142,75487,58276],{"class":1991},[142,75489,153],{"class":152},[142,75491,737],{"class":257},[142,75493,1119],{"class":148},[142,75495,75267],{"class":48006},[142,75497,75435],{"class":148},[142,75499,737],{"class":257},[142,75501,711],{"class":152},[142,75503,75274],{"class":1991},[142,75505,153],{"class":152},[142,75507,75508],{"class":257},"'哈好哈'",[142,75510,75338],{"class":152},[142,75512,75513],{"class":211},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[142,75515,75516],{"class":144,"line":1782},[142,75517,2428],{"emptyLinePlaceholder":69},[142,75519,75520],{"class":144,"line":1787},[142,75521,75522],{"class":211},"    \u002F\u002F +类似于>=1\n",[142,75524,75525,75527,75529,75531,75533,75535,75537,75540,75542,75544,75546,75548,75550,75552],{"class":144,"line":1792},[142,75526,73782],{"class":152},[142,75528,58276],{"class":1991},[142,75530,153],{"class":152},[142,75532,737],{"class":257},[142,75534,1119],{"class":148},[142,75536,75267],{"class":48006},[142,75538,75539],{"class":148},"+$",[142,75541,737],{"class":257},[142,75543,711],{"class":152},[142,75545,75274],{"class":1991},[142,75547,153],{"class":152},[142,75549,75308],{"class":257},[142,75551,75282],{"class":152},[142,75553,75285],{"class":211},[142,75555,75556,75558,75560,75562,75564,75566,75568,75570,75572,75574,75576,75578,75580,75582],{"class":144,"line":1806},[142,75557,73782],{"class":152},[142,75559,58276],{"class":1991},[142,75561,153],{"class":152},[142,75563,737],{"class":257},[142,75565,1119],{"class":148},[142,75567,75267],{"class":48006},[142,75569,75539],{"class":148},[142,75571,737],{"class":257},[142,75573,711],{"class":152},[142,75575,75274],{"class":1991},[142,75577,153],{"class":152},[142,75579,75476],{"class":257},[142,75581,75282],{"class":152},[142,75583,75481],{"class":211},[142,75585,75586,75588,75590,75592,75594,75596,75598,75600,75602,75604,75606,75608,75610,75612],{"class":144,"line":1811},[142,75587,73782],{"class":152},[142,75589,58276],{"class":1991},[142,75591,153],{"class":152},[142,75593,737],{"class":257},[142,75595,1119],{"class":148},[142,75597,75267],{"class":48006},[142,75599,75539],{"class":148},[142,75601,737],{"class":257},[142,75603,711],{"class":152},[142,75605,75274],{"class":1991},[142,75607,153],{"class":152},[142,75609,75508],{"class":257},[142,75611,75338],{"class":152},[142,75613,75408],{"class":211},[142,75615,75616],{"class":144,"line":2605},[142,75617,2428],{"emptyLinePlaceholder":69},[142,75619,75620],{"class":144,"line":2619},[142,75621,75622],{"class":211},"    \u002F\u002F ?类似于0次或一次\n",[142,75624,75625,75627,75629,75631,75633,75635,75638,75640,75642,75644,75646,75648,75650,75652],{"class":144,"line":2627},[142,75626,73782],{"class":152},[142,75628,58276],{"class":1991},[142,75630,153],{"class":152},[142,75632,737],{"class":257},[142,75634,1119],{"class":148},[142,75636,75637],{"class":48006},"哈？",[142,75639,455],{"class":148},[142,75641,737],{"class":257},[142,75643,711],{"class":152},[142,75645,75274],{"class":1991},[142,75647,153],{"class":152},[142,75649,74257],{"class":257},[142,75651,75338],{"class":152},[142,75653,75285],{"class":211},[142,75655,75656,75658,75660,75662,75664,75666,75668,75671,75673,75675,75677,75679,75681,75683],{"class":144,"line":2632},[142,75657,73782],{"class":152},[142,75659,58276],{"class":1991},[142,75661,153],{"class":152},[142,75663,737],{"class":257},[142,75665,1119],{"class":148},[142,75667,75267],{"class":48006},[142,75669,75670],{"class":148},"?$",[142,75672,737],{"class":257},[142,75674,711],{"class":152},[142,75676,75274],{"class":1991},[142,75678,153],{"class":152},[142,75680,75308],{"class":257},[142,75682,75282],{"class":152},[142,75684,75408],{"class":211},[142,75686,75687,75689,75691,75693,75695,75697,75699,75701,75703,75705,75707,75709,75711,75713],{"class":144,"line":2638},[142,75688,73782],{"class":152},[142,75690,58276],{"class":1991},[142,75692,153],{"class":152},[142,75694,737],{"class":257},[142,75696,1119],{"class":148},[142,75698,75267],{"class":48006},[142,75700,75670],{"class":148},[142,75702,737],{"class":257},[142,75704,711],{"class":152},[142,75706,75274],{"class":1991},[142,75708,153],{"class":152},[142,75710,75476],{"class":257},[142,75712,75282],{"class":152},[142,75714,75481],{"class":211},[142,75716,75717,75719,75721,75723,75725,75727,75729,75731,75733,75735,75737,75739,75741,75743],{"class":144,"line":2644},[142,75718,73782],{"class":152},[142,75720,58276],{"class":1991},[142,75722,153],{"class":152},[142,75724,737],{"class":257},[142,75726,1119],{"class":148},[142,75728,75267],{"class":48006},[142,75730,75670],{"class":148},[142,75732,737],{"class":257},[142,75734,711],{"class":152},[142,75736,75274],{"class":1991},[142,75738,153],{"class":152},[142,75740,75508],{"class":257},[142,75742,75282],{"class":152},[142,75744,75408],{"class":211},[142,75746,75747],{"class":144,"line":2649},[142,75748,2428],{"emptyLinePlaceholder":69},[142,75750,75751],{"class":144,"line":7977},[142,75752,75753],{"class":211},"    \u002F\u002F {n}写几，就必须出现几次\n",[142,75755,75756,75758,75760,75762,75764,75766,75768,75771,75773,75775,75777,75779,75782,75785],{"class":144,"line":8001},[142,75757,73782],{"class":152},[142,75759,58276],{"class":1991},[142,75761,153],{"class":152},[142,75763,737],{"class":257},[142,75765,1119],{"class":148},[142,75767,75267],{"class":48006},[142,75769,75770],{"class":148},"{4}$",[142,75772,737],{"class":257},[142,75774,711],{"class":152},[142,75776,75274],{"class":1991},[142,75778,153],{"class":152},[142,75780,75781],{"class":257},"'哈哈哈哈'",[142,75783,75784],{"class":152},")) ",[142,75786,75285],{"class":211},[142,75788,75789],{"class":144,"line":8006},[142,75790,2428],{"emptyLinePlaceholder":69},[142,75792,75793],{"class":144,"line":8012},[142,75794,75795],{"class":211},"    \u002F\u002F {n,}大于等于n次\n",[142,75797,75798,75800,75802,75804,75806,75808,75810,75813,75815,75817,75819,75821,75823,75825],{"class":144,"line":8039},[142,75799,73782],{"class":152},[142,75801,58276],{"class":1991},[142,75803,153],{"class":152},[142,75805,737],{"class":257},[142,75807,1119],{"class":148},[142,75809,75267],{"class":48006},[142,75811,75812],{"class":148},"{4,}$",[142,75814,737],{"class":257},[142,75816,711],{"class":152},[142,75818,75274],{"class":1991},[142,75820,153],{"class":152},[142,75822,75781],{"class":257},[142,75824,75784],{"class":152},[142,75826,75285],{"class":211},[142,75828,75829,75831,75833,75835,75837,75839,75841,75843,75845,75847,75849,75851,75854,75856],{"class":144,"line":8044},[142,75830,73782],{"class":152},[142,75832,58276],{"class":1991},[142,75834,153],{"class":152},[142,75836,737],{"class":257},[142,75838,1119],{"class":148},[142,75840,75267],{"class":48006},[142,75842,75812],{"class":148},[142,75844,737],{"class":257},[142,75846,711],{"class":152},[142,75848,75274],{"class":1991},[142,75850,153],{"class":152},[142,75852,75853],{"class":257},"'哈哈哈哈哈'",[142,75855,75784],{"class":152},[142,75857,75285],{"class":211},[142,75859,75860],{"class":144,"line":8050},[142,75861,2428],{"emptyLinePlaceholder":69},[142,75863,75864],{"class":144,"line":8062},[142,75865,75866],{"class":211},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[142,75868,75869,75871,75873,75875,75877,75879,75881,75884,75886,75888,75890,75892,75894,75896],{"class":144,"line":8074},[142,75870,73782],{"class":152},[142,75872,58276],{"class":1991},[142,75874,153],{"class":152},[142,75876,737],{"class":257},[142,75878,1119],{"class":148},[142,75880,75267],{"class":48006},[142,75882,75883],{"class":148},"{4,6}$",[142,75885,737],{"class":257},[142,75887,711],{"class":152},[142,75889,75274],{"class":1991},[142,75891,153],{"class":152},[142,75893,75781],{"class":257},[142,75895,75784],{"class":152},[142,75897,75285],{"class":211},[142,75899,75900,75902,75904,75906,75908,75910,75912,75914,75916,75918,75920,75922,75924,75926],{"class":144,"line":8086},[142,75901,73782],{"class":152},[142,75903,58276],{"class":1991},[142,75905,153],{"class":152},[142,75907,737],{"class":257},[142,75909,1119],{"class":148},[142,75911,75267],{"class":48006},[142,75913,75883],{"class":148},[142,75915,737],{"class":257},[142,75917,711],{"class":152},[142,75919,75274],{"class":1991},[142,75921,153],{"class":152},[142,75923,75853],{"class":257},[142,75925,75784],{"class":152},[142,75927,75285],{"class":211},[142,75929,75930,75932,75934,75936,75938,75940,75942,75944,75946,75948,75950,75952,75955,75957],{"class":144,"line":9745},[142,75931,73782],{"class":152},[142,75933,58276],{"class":1991},[142,75935,153],{"class":152},[142,75937,737],{"class":257},[142,75939,1119],{"class":148},[142,75941,75267],{"class":48006},[142,75943,75883],{"class":148},[142,75945,737],{"class":257},[142,75947,711],{"class":152},[142,75949,75274],{"class":1991},[142,75951,153],{"class":152},[142,75953,75954],{"class":257},"'哈哈哈哈哈哈哈'",[142,75956,75784],{"class":152},[142,75958,75408],{"class":211},[142,75960,75961],{"class":144,"line":9770},[142,75962,2428],{"emptyLinePlaceholder":69},[142,75964,75965],{"class":144,"line":9793},[142,75966,75967],{"class":211},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[142,75969,75970,75972,75974,75976,75978,75980,75983,75985,75987,75989,75991,75993,75996,75998],{"class":144,"line":9817},[142,75971,73782],{"class":152},[142,75973,58276],{"class":1991},[142,75975,153],{"class":152},[142,75977,737],{"class":257},[142,75979,1119],{"class":148},[142,75981,75982],{"class":201},"[abc]",[142,75984,455],{"class":148},[142,75986,737],{"class":257},[142,75988,711],{"class":152},[142,75990,75274],{"class":1991},[142,75992,153],{"class":152},[142,75994,75995],{"class":257},"'a'",[142,75997,75282],{"class":152},[142,75999,75285],{"class":211},[142,76001,76002,76004,76006,76008,76010,76012,76014,76016,76018,76020,76022,76024,76027,76029],{"class":144,"line":9822},[142,76003,73782],{"class":152},[142,76005,58276],{"class":1991},[142,76007,153],{"class":152},[142,76009,737],{"class":257},[142,76011,1119],{"class":148},[142,76013,75982],{"class":201},[142,76015,455],{"class":148},[142,76017,737],{"class":257},[142,76019,711],{"class":152},[142,76021,75274],{"class":1991},[142,76023,153],{"class":152},[142,76025,76026],{"class":257},"'b'",[142,76028,75282],{"class":152},[142,76030,75285],{"class":211},[142,76032,76033,76035,76037,76039,76041,76043,76045,76047,76049,76051,76053,76055,76058,76060],{"class":144,"line":9827},[142,76034,73782],{"class":152},[142,76036,58276],{"class":1991},[142,76038,153],{"class":152},[142,76040,737],{"class":257},[142,76042,1119],{"class":148},[142,76044,75982],{"class":201},[142,76046,455],{"class":148},[142,76048,737],{"class":257},[142,76050,711],{"class":152},[142,76052,75274],{"class":1991},[142,76054,153],{"class":152},[142,76056,76057],{"class":257},"'c'",[142,76059,75282],{"class":152},[142,76061,75285],{"class":211},[142,76063,76064,76066,76068,76070,76072,76074,76076,76078,76080,76082,76085,76087],{"class":144,"line":9832},[142,76065,73782],{"class":152},[142,76067,58276],{"class":1991},[142,76069,153],{"class":152},[142,76071,737],{"class":257},[142,76073,75982],{"class":201},[142,76075,737],{"class":257},[142,76077,711],{"class":152},[142,76079,75274],{"class":1991},[142,76081,153],{"class":152},[142,76083,76084],{"class":257},"'ab'",[142,76086,75282],{"class":152},[142,76088,75285],{"class":211},[142,76090,76091,76093,76095,76097,76099,76101,76103,76105,76107,76109,76111,76113,76115,76117],{"class":144,"line":9841},[142,76092,73782],{"class":152},[142,76094,58276],{"class":1991},[142,76096,153],{"class":152},[142,76098,737],{"class":257},[142,76100,1119],{"class":148},[142,76102,75982],{"class":201},[142,76104,455],{"class":148},[142,76106,737],{"class":257},[142,76108,711],{"class":152},[142,76110,75274],{"class":1991},[142,76112,153],{"class":152},[142,76114,76084],{"class":257},[142,76116,75282],{"class":152},[142,76118,76119],{"class":211},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[142,76121,76122,76124,76126,76128,76130,76132,76134,76137,76139,76141,76143,76145,76147,76149],{"class":144,"line":9846},[142,76123,73782],{"class":152},[142,76125,58276],{"class":1991},[142,76127,153],{"class":152},[142,76129,737],{"class":257},[142,76131,1119],{"class":148},[142,76133,75982],{"class":201},[142,76135,76136],{"class":148},"{2}$",[142,76138,737],{"class":257},[142,76140,711],{"class":152},[142,76142,75274],{"class":1991},[142,76144,153],{"class":152},[142,76146,76084],{"class":257},[142,76148,75282],{"class":152},[142,76150,76151],{"class":211},"\u002F\u002Ftrue   可以选两个\n",[142,76153,76154,76156,76158,76160,76162,76164,76167,76169,76171,76173,76175,76177,76180,76182],{"class":144,"line":9852},[142,76155,73782],{"class":152},[142,76157,58276],{"class":1991},[142,76159,153],{"class":152},[142,76161,737],{"class":257},[142,76163,1119],{"class":148},[142,76165,76166],{"class":201},"[a-z]",[142,76168,455],{"class":148},[142,76170,737],{"class":257},[142,76172,711],{"class":152},[142,76174,75274],{"class":1991},[142,76176,153],{"class":152},[142,76178,76179],{"class":257},"'p'",[142,76181,75338],{"class":152},[142,76183,76184],{"class":211},"\u002F\u002Ftrue   依然只能选一个\n",[142,76186,76187,76189,76191,76193,76195,76197,76200,76202,76204,76206,76208,76210,76212,76214],{"class":144,"line":9873},[142,76188,73782],{"class":152},[142,76190,58276],{"class":1991},[142,76192,153],{"class":152},[142,76194,737],{"class":257},[142,76196,1119],{"class":148},[142,76198,76199],{"class":201},"[A-Z]",[142,76201,455],{"class":148},[142,76203,737],{"class":257},[142,76205,711],{"class":152},[142,76207,75274],{"class":1991},[142,76209,153],{"class":152},[142,76211,76179],{"class":257},[142,76213,75338],{"class":152},[142,76215,75408],{"class":211},[142,76217,76218,76220,76222,76224,76226,76228,76230,76232,76234,76236,76238,76240,76243,76245],{"class":144,"line":9879},[142,76219,73782],{"class":152},[142,76221,58276],{"class":1991},[142,76223,153],{"class":152},[142,76225,737],{"class":257},[142,76227,1119],{"class":148},[142,76229,76199],{"class":201},[142,76231,455],{"class":148},[142,76233,737],{"class":257},[142,76235,711],{"class":152},[142,76237,75274],{"class":1991},[142,76239,153],{"class":152},[142,76241,76242],{"class":257},"'P'",[142,76244,75338],{"class":152},[142,76246,75285],{"class":211},[142,76248,76249,76251,76253,76255,76257,76259,76262,76264,76266,76268,76270,76272,76275,76277],{"class":144,"line":9893},[142,76250,73782],{"class":152},[142,76252,58276],{"class":1991},[142,76254,153],{"class":152},[142,76256,737],{"class":257},[142,76258,1119],{"class":148},[142,76260,76261],{"class":201},"[0-9]",[142,76263,455],{"class":148},[142,76265,737],{"class":257},[142,76267,711],{"class":152},[142,76269,75274],{"class":1991},[142,76271,153],{"class":152},[142,76273,76274],{"class":257},"'0'",[142,76276,75338],{"class":152},[142,76278,75285],{"class":211},[142,76280,76281,76283,76285,76287,76289,76291,76294,76296,76298,76300,76302,76304,76306,76308],{"class":144,"line":9899},[142,76282,73782],{"class":152},[142,76284,58276],{"class":1991},[142,76286,153],{"class":152},[142,76288,737],{"class":257},[142,76290,1119],{"class":148},[142,76292,76293],{"class":201},"[a-zA-Z0-9]",[142,76295,455],{"class":148},[142,76297,737],{"class":257},[142,76299,711],{"class":152},[142,76301,75274],{"class":1991},[142,76303,153],{"class":152},[142,76305,76179],{"class":257},[142,76307,75282],{"class":152},[142,76309,75285],{"class":211},[142,76311,76312,76314,76316],{"class":144,"line":9926},[142,76313,52446],{"class":152},[142,76315,51842],{"class":51329},[142,76317,51336],{"class":152},[142,76319,76320,76322,76324],{"class":144,"line":9935},[142,76321,51814],{"class":152},[142,76323,51829],{"class":51329},[142,76325,51336],{"class":152},[142,76327,76328],{"class":144,"line":9941},[142,76329,2428],{"emptyLinePlaceholder":69},[142,76331,76332,76334,76336],{"class":144,"line":9949},[142,76333,51814],{"class":152},[142,76335,50664],{"class":51329},[142,76337,51336],{"class":152},[22027,76339,76341],{"id":76340},"_3624-修饰符","3.6.2.4 修饰符",[14,76343,76344],{},[29,76345],{"alt":31,"src":76346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76348,76349],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76351,76352],{},[29,76353],{"alt":31,"src":76354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[133,76356,76358],{"className":50662,"code":76357,"language":50664,"meta":31,"style":31},"\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",[139,76359,76360,76370,76384,76392,76406,76426,76438,76446,76454,76462,76494,76525,76530,76562,76573,76606,76615,76623,76631],{"__ignoreMap":31},[142,76361,76362,76364,76366,76368],{"class":144,"line":145},[142,76363,51326],{"class":152},[142,76365,51330],{"class":51329},[142,76367,51333],{"class":1991},[142,76369,51336],{"class":152},[142,76371,76372,76374,76376,76378,76380,76382],{"class":144,"line":64},[142,76373,1063],{"class":152},[142,76375,50664],{"class":51329},[142,76377,51345],{"class":1991},[142,76379,198],{"class":152},[142,76381,51350],{"class":257},[142,76383,51336],{"class":152},[142,76385,76386,76388,76390],{"class":144,"line":1208},[142,76387,1063],{"class":152},[142,76389,51363],{"class":51329},[142,76391,51336],{"class":152},[142,76393,76394,76396,76398,76400,76402,76404],{"class":144,"line":1223},[142,76395,52173],{"class":152},[142,76397,51373],{"class":51329},[142,76399,51376],{"class":1991},[142,76401,198],{"class":152},[142,76403,51381],{"class":257},[142,76405,51336],{"class":152},[142,76407,76408,76410,76412,76414,76416,76418,76420,76422,76424],{"class":144,"line":1229},[142,76409,52173],{"class":152},[142,76411,51373],{"class":51329},[142,76413,14949],{"class":1991},[142,76415,198],{"class":152},[142,76417,51420],{"class":257},[142,76419,51400],{"class":1991},[142,76421,198],{"class":152},[142,76423,51427],{"class":257},[142,76425,51336],{"class":152},[142,76427,76428,76430,76432,76434,76436],{"class":144,"line":1243},[142,76429,52173],{"class":152},[142,76431,51436],{"class":51329},[142,76433,51439],{"class":152},[142,76435,51436],{"class":51329},[142,76437,51336],{"class":152},[142,76439,76440,76442,76444],{"class":144,"line":1249},[142,76441,51814],{"class":152},[142,76443,51363],{"class":51329},[142,76445,51336],{"class":152},[142,76447,76448,76450,76452],{"class":144,"line":1340},[142,76449,1063],{"class":152},[142,76451,51829],{"class":51329},[142,76453,51336],{"class":152},[142,76455,76456,76458,76460],{"class":144,"line":1346},[142,76457,52173],{"class":152},[142,76459,51842],{"class":51329},[142,76461,51336],{"class":152},[142,76463,76464,76466,76468,76470,76472,76474,76477,76479,76481,76483,76485,76487,76490,76492],{"class":144,"line":1358},[142,76465,73782],{"class":152},[142,76467,58276],{"class":1991},[142,76469,153],{"class":152},[142,76471,737],{"class":257},[142,76473,1119],{"class":148},[142,76475,76476],{"class":48006},"java",[142,76478,455],{"class":148},[142,76480,737],{"class":257},[142,76482,711],{"class":152},[142,76484,75274],{"class":1991},[142,76486,153],{"class":152},[142,76488,76489],{"class":257},"'java'",[142,76491,75784],{"class":152},[142,76493,75285],{"class":211},[142,76495,76496,76498,76500,76502,76504,76506,76508,76510,76512,76514,76516,76518,76521,76523],{"class":144,"line":1640},[142,76497,73782],{"class":152},[142,76499,58276],{"class":1991},[142,76501,153],{"class":152},[142,76503,737],{"class":257},[142,76505,1119],{"class":148},[142,76507,76476],{"class":48006},[142,76509,455],{"class":148},[142,76511,737],{"class":257},[142,76513,711],{"class":152},[142,76515,75274],{"class":1991},[142,76517,153],{"class":152},[142,76519,76520],{"class":257},"'Java'",[142,76522,75784],{"class":152},[142,76524,75408],{"class":211},[142,76526,76527],{"class":144,"line":1645},[142,76528,76529],{"class":211},"    \u002F\u002F 不区分大小写、\n",[142,76531,76532,76534,76536,76538,76540,76542,76544,76546,76548,76550,76552,76554,76556,76558,76560],{"class":144,"line":1651},[142,76533,73782],{"class":152},[142,76535,58276],{"class":1991},[142,76537,153],{"class":152},[142,76539,737],{"class":257},[142,76541,1119],{"class":148},[142,76543,76476],{"class":48006},[142,76545,455],{"class":148},[142,76547,737],{"class":257},[142,76549,594],{"class":148},[142,76551,711],{"class":152},[142,76553,75274],{"class":1991},[142,76555,153],{"class":152},[142,76557,76520],{"class":257},[142,76559,75784],{"class":152},[142,76561,75285],{"class":211},[142,76563,76564,76566,76568,76570],{"class":144,"line":1656},[142,76565,11250],{"class":148},[142,76567,73948],{"class":201},[142,76569,13593],{"class":148},[142,76571,76572],{"class":257}," 'java是一门编程语言，学完java工资很高'\n",[142,76574,76575,76577,76580,76582,76585,76588,76590,76592,76594,76596,76599,76601,76604],{"class":144,"line":1670},[142,76576,11250],{"class":148},[142,76578,76579],{"class":201}," result",[142,76581,13593],{"class":148},[142,76583,76584],{"class":152}," str.",[142,76586,76587],{"class":1991},"replace",[142,76589,153],{"class":152},[142,76591,737],{"class":257},[142,76593,76476],{"class":48006},[142,76595,737],{"class":257},[142,76597,76598],{"class":148},"ig",[142,76600,12464],{"class":152},[142,76602,76603],{"class":257},"'前端'",[142,76605,159],{"class":152},[142,76607,76608,76610,76612],{"class":144,"line":1675},[142,76609,73782],{"class":152},[142,76611,58276],{"class":1991},[142,76613,76614],{"class":152},"(result)\n",[142,76616,76617,76619,76621],{"class":144,"line":1681},[142,76618,52446],{"class":152},[142,76620,51842],{"class":51329},[142,76622,51336],{"class":152},[142,76624,76625,76627,76629],{"class":144,"line":1702},[142,76626,51814],{"class":152},[142,76628,51829],{"class":51329},[142,76630,51336],{"class":152},[142,76632,76633,76635,76637],{"class":144,"line":1707},[142,76634,51814],{"class":152},[142,76636,50664],{"class":51329},[142,76638,51336],{"class":152},[5155,76640,76641],{},"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":31,"searchDepth":64,"depth":64,"links":76643},[76644,76654,76666,76683,76690,76698],{"id":53389,"depth":64,"text":53390,"children":76645},[76646,76647,76648,76649,76650,76651,76652,76653],{"id":53393,"depth":1208,"text":53394},{"id":53426,"depth":1208,"text":53427},{"id":53465,"depth":1208,"text":53466},{"id":53623,"depth":1208,"text":53624},{"id":53671,"depth":1208,"text":53672},{"id":53808,"depth":1208,"text":53809},{"id":54130,"depth":1208,"text":54131},{"id":57118,"depth":1208,"text":57119},{"id":57146,"depth":64,"text":57147,"children":76655},[76656,76657,76658,76659,76660,76661,76662,76663,76664,76665],{"id":57150,"depth":1208,"text":57151},{"id":57173,"depth":1208,"text":57174},{"id":58088,"depth":1208,"text":58089},{"id":58778,"depth":1208,"text":58779},{"id":59060,"depth":1208,"text":59061},{"id":63221,"depth":1208,"text":63222},{"id":63391,"depth":1208,"text":63392},{"id":63519,"depth":1208,"text":63520},{"id":63544,"depth":1208,"text":63545},{"id":64933,"depth":1208,"text":64934},{"id":66086,"depth":64,"text":66087,"children":76667},[76668,76669,76670,76671,76672,76673,76674,76675,76676,76677,76678,76679,76680,76681,76682],{"id":66090,"depth":1208,"text":66091},{"id":66744,"depth":1208,"text":66745},{"id":68439,"depth":1208,"text":68440},{"id":68480,"depth":1208,"text":68481},{"id":68522,"depth":1208,"text":68523},{"id":68536,"depth":1208,"text":68537},{"id":68585,"depth":1208,"text":68586},{"id":68597,"depth":1208,"text":68598},{"id":68612,"depth":1208,"text":68613},{"id":68648,"depth":1208,"text":68649},{"id":68729,"depth":1208,"text":68730},{"id":68857,"depth":1208,"text":68858},{"id":68869,"depth":1208,"text":68870},{"id":68888,"depth":1208,"text":68889},{"id":70999,"depth":1208,"text":71000},{"id":71018,"depth":64,"text":71019,"children":76684},[76685,76686,76687,76688,76689],{"id":71039,"depth":1208,"text":71040},{"id":71059,"depth":1208,"text":71060},{"id":71108,"depth":1208,"text":71109},{"id":71233,"depth":1208,"text":71234},{"id":71414,"depth":1208,"text":71415},{"id":71432,"depth":64,"text":71433,"children":76691},[76692,76693,76694,76695,76696,76697],{"id":71447,"depth":1208,"text":71448},{"id":71506,"depth":1208,"text":71507},{"id":71530,"depth":1208,"text":71531},{"id":71850,"depth":1208,"text":71851},{"id":71882,"depth":1208,"text":71883},{"id":71905,"depth":1208,"text":71906},{"id":74973,"depth":64,"text":74974,"children":76699},[76700,76701],{"id":75007,"depth":1208,"text":75008},{"id":75046,"depth":1208,"text":75047},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53361,"description":66},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76708,"title":76709,"body":76710,"description":66,"extension":67,"meta":92847,"navigation":69,"path":92848,"seo":92849,"stem":92850,"__hash__":92851},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76711,"toc":92783},[76712,76715,76718,76722,76726,76731,76736,76747,76751,76756,76759,76763,76766,76771,76775,76779,76782,76787,76790,76794,76797,76805,76808,76812,76817,76822,76825,76829,76834,76839,76842,76846,76851,76854,76859,76862,76867,76870,76875,76880,76883,76886,76890,76895,76900,76903,76907,76911,76914,76917,76920,76924,76928,76933,76938,76941,76945,76950,76955,76958,76961,76964,76967,76970,76973,76976,76979,76982,76987,76991,76996,77001,77004,77007,77010,77013,77016,77019,77022,77025,77029,77033,77036,77039,77042,77047,77049,77052,77055,77058,77061,77064,77067,77070,77073,77076,77079,77082,77085,77088,77093,77098,77103,77106,77110,77113,77118,77122,77124,77135,77140,77241,77244,77247,77250,77253,77256,77259,77262,77265,77267,77270,77273,77276,77279,77282,77284,77287,77290,77293,77296,77299,77302,77304,77307,77309,77311,77314,77318,77322,77325,77328,77331,77334,77337,77340,77343,77346,77349,77354,77474,77477,77480,77485,77488,77491,77494,77497,77502,77505,77508,77511,77514,77519,77522,77622,77687,77761,77765,77768,77771,77775,77778,77792,77821,77824,77827,77830,77833,77836,77839,77842,77844,77847,77850,77853,77856,77860,77865,77869,77874,77949,77952,78135,78138,78141,78144,78147,78150,78152,78155,78158,78161,78164,78167,78170,78172,78176,78179,78184,78187,78190,78193,78196,78198,78203,78206,78209,78212,78215,78217,78222,78225,78228,78230,78232,78235,78239,78242,78245,78250,78253,78256,78259,78309,78314,78318,78323,78326,78395,78398,78407,78411,78416,78419,78422,78430,78433,78450,80252,80256,80260,80265,80268,80272,80278,80284,80436,80441,80446,80449,80452,80455,80458,80461,80464,80467,80470,80473,80476,80479,80482,80487,80491,80494,80505,80509,80514,80517,80520,80523,80526,80529,80531,80534,80537,80540,80543,80545,80562,80565,80569,80572,80577,80582,80585,80588,80592,80595,80598,80607,80610,80614,80617,80622,80627,80694,80698,80701,80704,80709,80714,80800,80805,80809,80812,80815,80830,80833,80838,80842,80847,80956,80959,80970,81120,81124,81129,81238,81242,81247,81252,81257,81260,81267,81287,81323,81487,81492,81495,81500,81507,81510,81513,81516,81575,81631,81687,81691,81696,82011,82014,82018,82021,82026,82135,82140,82144,82149,82153,82224,82228,82230,82233,82236,82274,82550,82554,82571,82637,82671,82675,82678,82683,82712,82719,82728,82733,82748,82753,82762,82765,82902,82906,82968,82972,82977,83222,83226,83231,83234,83237,83240,83243,83247,83252,84833,84837,84841,84847,84850,84855,84859,84862,84867,84870,84881,84885,84890,84894,84899,84904,84907,84912,84916,84920,84923,84928,84933,84936,84939,84942,85064,85069,85171,85174,85177,85181,85186,85358,85363,85367,85370,85375,85441,85446,85449,85580,85583,85588,85591,85594,85685,85690,85693,85696,85699,85702,85707,85712,85715,85720,85725,85730,85734,85737,85740,85745,85750,85755,85760,85814,85817,85820,85825,85828,85831,85836,85841,85846,85850,85855,85869,85874,85877,85882,85886,85891,85896,85901,85906,85911,85916,85921,85926,85929,85933,85938,85941,85944,85947,85952,85957,85960,85963,85967,85970,85973,85978,85983,85988,85993,85996,86001,86006,86067,86072,86075,86080,87321,87326,87330,87334,87339,87342,87347,87352,87355,87360,87362,87367,87371,87374,87377,87388,87392,87397,87402,87457,87462,87467,87472,87683,87688,87692,87697,87700,87702,87705,87708,88155,88160,88167,88173,88176,88179,88443,88448,88452,88717,88722,88726,88731,88736,88741,88746,89077,89080,89085,89090,89093,89097,89101,89106,89111,89116,89121,89126,89131,89135,89138,89143,89148,89151,89225,89230,89235,89240,89242,89245,89615,89620,89625,89630,89633,89636,89738,89743,89748,89851,89855,89860,89864,89868,89873,89878,89881,89886,89889,89892,90285,90290,90293,90296,90299,90302,90822,90826,90831,90836,90841,90844,90849,90852,90855,91237,91242,91244,91246,91249,91252,91764,91768,91829,91832,91835,91838,91842,91845,91850,91855,92780],[10,76713,76709],{"id":76714},"_4js进阶",[14,76716,76717],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[84,76719,76721],{"id":76720},"_41-作用域","4.1 作用域",[113,76723,76725],{"id":76724},"_411-局部作用域","4.1.1 局部作用域",[14,76727,76728],{},[29,76729],{"alt":31,"src":76730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76732,76733],{},[29,76734],{"alt":31,"src":76735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1160,76737,76738,76741,76744],{},[99,76739,76740],{},"函数作用域在函数内部",[99,76742,76743],{},"块级作用域在{}",[99,76745,76746],{},"对象的那个{}不是作用域，不是块作用域",[113,76748,76750],{"id":76749},"_412-全局作用域","4.1.2 全局作用域",[14,76752,76753],{},[29,76754],{"alt":31,"src":76755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76757,76758],{},"window.a=10不要这样写",[113,76760,76762],{"id":76761},"_413-作用域链","4.1.3 作用域链",[14,76764,76765],{},"变量查找机制",[14,76767,76768],{},[29,76769],{"alt":31,"src":76770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[84,76772,76774],{"id":76773},"_42-垃圾回收机制","4.2 垃圾回收机制",[113,76776,76778],{"id":76777},"_421-大体介绍","4.2.1 大体介绍",[14,76780,76781],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76783,76784],{},[29,76785],{"alt":31,"src":76786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76788,76789],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[113,76791,76793],{"id":76792},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76795,76796],{},"堆栈空间分配区别：",[96,76798,76799,76802],{},[99,76800,76801],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[99,76803,76804],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76806,76807],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22027,76809,76811],{"id":76810},"_4221-引用计数","4.2.2.1 引用计数",[14,76813,76814],{},[29,76815],{"alt":31,"src":76816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76818,76819],{},[29,76820],{"alt":31,"src":76821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76823,76824],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22027,76826,76828],{"id":76827},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76830,76831],{},[29,76832],{"alt":31,"src":76833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76835,76836],{},[29,76837],{"alt":31,"src":76838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76840,76841],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[84,76843,76845],{"id":76844},"_43-闭包","4.3 闭包",[14,76847,76848],{},[29,76849],{"alt":31,"src":76850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76852,76853],{},"闭包：内层函数+外层函数的变量",[14,76855,76856],{},[29,76857],{"alt":31,"src":76858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76860,76861],{},"closure就是闭包",[14,76863,76864],{},[29,76865],{"alt":31,"src":76866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76868,76869],{},"内层函数必须包含外层函数的变量才是闭包",[14,76871,76872],{},[29,76873],{"alt":31,"src":76874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76876,76877],{},[29,76878],{"alt":31,"src":76879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76881,76882],{},"闭包可能会引起内存泄漏",[14,76884,76885],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[84,76887,76889],{"id":76888},"_44-变量提升","4.4 变量提升",[14,76891,76892],{},[29,76893],{"alt":31,"src":76894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76896,76897],{},[29,76898],{"alt":31,"src":76899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76901,76902],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[84,76904,76906],{"id":76905},"_45-函数进阶","4.5 函数进阶",[113,76908,76910],{"id":76909},"_451-函数提升","4.5.1 函数提升",[14,76912,76913],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76915,76916],{},"只提升函数声明，不提升函数调用",[51842,76918,76919],{},"\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",[113,76921,76923],{"id":76922},"_452-函数参数","4.5.2 函数参数",[22027,76925,76927],{"id":76926},"_4521-动态参数","4.5.2.1 动态参数",[14,76929,76930],{},[29,76931],{"alt":31,"src":76932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76934,76935],{},[29,76936],{"alt":31,"src":76937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76939,76940],{},"箭头函数里边没有arguments",[22027,76942,76944],{"id":76943},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76946,76947],{},[29,76948],{"alt":31,"src":76949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76951,76952],{},[29,76953],{"alt":31,"src":76954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76956,76957],{},"剩余参数使用的时候不需要写...",[14,76959,76960],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76962,76963],{},"  function getSum(a,b,...arr) {",[14,76965,76966],{},"  console.log(11)",[14,76968,76969],{},"  }",[14,76971,76972],{},"  getSum(1,2,3,4)",[14,76974,76975],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76977,76978],{},"  getSum(1,2)",[14,76980,76981],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,76983,76984],{},[29,76985],{"alt":31,"src":76986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22027,76988,76990],{"id":76989},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,76992,76993],{},[29,76994],{"alt":31,"src":76995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,76997,76998],{},[29,76999],{"alt":31,"src":77000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77002,77003],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77005,77006],{},"展开运算符可以用于数组之间的合并：",[14,77008,77009],{},"const arr1 = [1, 2, 3]",[14,77011,77012],{},"const arr2 = [3, 4, 5]",[14,77014,77015],{},"const arr = [...arr1, ...arr2]",[14,77017,77018],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77020,77021],{},"剩余参数：函数参数使用，得到真数组",[14,77023,77024],{},"展开运算符：数组中使用，数组展开",[113,77026,77028],{"id":77027},"_453-箭头函数","4.5.3 箭头函数",[22027,77030,77032],{"id":77031},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77034,77035],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77037,77038],{},"它不是万能的！！！",[14,77040,77041],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77043,77044],{},[29,77045],{"alt":31,"src":77046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77048,182],{},[14,77050,77051],{},"① 只有一个形参的时候，可以省略小括号：",[14,77053,77054],{},"const fn=x=>{console.log(x)}",[14,77056,77057],{},"② 只有一行代码时可以省略大括号：",[14,77059,77060],{},"const fn=x=>console.log(11)",[14,77062,77063],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77065,77066],{},"const fn=x=>x+x",[14,77068,77069],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77071,77072],{},"⑤ 阻止表单默认提交：",[14,77074,77075],{},"const form = document.querySelector('form')",[14,77077,77078],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77080,77081],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77083,77084],{},"const fn=uname=>({uname:uname})",[14,77086,77087],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77089,77090],{},[29,77091],{"alt":31,"src":77092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77094,77095],{},[29,77096],{"alt":31,"src":77097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77099,77100],{},[29,77101],{"alt":31,"src":77102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77104,77105],{},"一定不要忘记用()，有()就理解为自带return",[22027,77107,77109],{"id":77108},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77111,77112],{},"箭头函数是没有动态参数的arguments",[14,77114,77115],{},[29,77116],{"alt":31,"src":77117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22027,77119,77121],{"id":77120},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77123,11361],{},[96,77125,77126,77129,77132],{},[99,77127,77128],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[99,77130,77131],{},"事件回调函数使用箭头函数时，this 为全局的 window",[99,77133,77134],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77136,77137],{},[29,77138],{"alt":31,"src":77139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[133,77141,77143],{"className":53096,"code":77142,"language":53098,"meta":31,"style":31},"  \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",[139,77144,77145,77153,77158,77163,77168,77173,77178,77182,77187,77191,77195,77200,77205,77210,77214,77218,77223,77228,77233],{"__ignoreMap":31},[142,77146,77147,77149,77151],{"class":144,"line":145},[142,77148,52173],{"class":152},[142,77150,51842],{"class":51329},[142,77152,51336],{"class":152},[142,77154,77155],{"class":144,"line":64},[142,77156,77157],{"class":152},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[142,77159,77160],{"class":144,"line":1208},[142,77161,77162],{"class":152},"    console.log(this) \u002F\u002F指向window\n",[142,77164,77165],{"class":144,"line":1223},[142,77166,77167],{"class":152},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[142,77169,77170],{"class":144,"line":1229},[142,77171,77172],{"class":152},"    function fn() {\n",[142,77174,77175],{"class":144,"line":1243},[142,77176,77177],{"class":152},"      console.log(this)  \u002F\u002F指向window\n",[142,77179,77180],{"class":144,"line":1249},[142,77181,2215],{"class":152},[142,77183,77184],{"class":144,"line":1340},[142,77185,77186],{"class":152},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[142,77188,77189],{"class":144,"line":1346},[142,77190,2428],{"emptyLinePlaceholder":69},[142,77192,77193],{"class":144,"line":1358},[142,77194,71552],{"class":152},[142,77196,77197],{"class":144,"line":1640},[142,77198,77199],{"class":152},"      name: 'andy',\n",[142,77201,77202],{"class":144,"line":1645},[142,77203,77204],{"class":152},"      sayHai: function () {\n",[142,77206,77207],{"class":144,"line":1651},[142,77208,77209],{"class":152},"        console.log(this)\n",[142,77211,77212],{"class":144,"line":1656},[142,77213,52427],{"class":152},[142,77215,77216],{"class":144,"line":1670},[142,77217,2215],{"class":152},[142,77219,77220],{"class":144,"line":1675},[142,77221,77222],{"class":152},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[142,77224,77225],{"class":144,"line":1681},[142,77226,77227],{"class":152},"    \u002F\u002F 2.箭头函数的this\n",[142,77229,77230],{"class":144,"line":1702},[142,77231,77232],{"class":152},"    const fn = () => console.log(this)\n",[142,77234,77235,77237,77239],{"class":144,"line":1707},[142,77236,52446],{"class":152},[142,77238,51842],{"class":51329},[142,77240,51336],{"class":152},[14,77242,77243],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77245,77246],{},"const fn = () => console.log(this)",[14,77248,77249],{},"fn() \u002F\u002F指向window",[14,77251,77252],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77254,77255],{},"①",[14,77257,77258],{},"const obj = {",[14,77260,77261],{},"uname: 'pink老师',",[14,77263,77264],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77266,1099],{},[14,77268,77269],{},"调用对象里边的函数",[14,77271,77272],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77274,77275],{},"obj.sayHai()",[14,77277,77278],{},"②",[14,77280,77281],{},"const obj1 = {",[14,77283,77261],{},[14,77285,77286],{},"sayHai: function () {",[14,77288,77289],{},"let i = 10",[14,77291,77292],{},"const count = () => {",[14,77294,77295],{},"console.log(this)",[14,77297,77298],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77300,77301],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77303,1099],{},[14,77305,77306],{},"count()",[14,77308,1099],{},[14,77310,1099],{},[14,77312,77313],{},"obj1.sayHai()",[84,77315,77317],{"id":77316},"_46-解构赋值","4.6 解构赋值",[113,77319,77321],{"id":77320},"_461-数组解构","4.6.1 数组解构",[14,77323,77324],{},"以前要是使用数组中的值的话：",[14,77326,77327],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77329,77330],{},"const arr=[100,60,80]",[14,77332,77333],{},"const max=arr[0]",[14,77335,77336],{},"const min=arr[1]",[14,77338,77339],{},"const avg=arr[2]",[14,77341,77342],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77344,77345],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77347,77348],{},"这个写法就类似于上边的那种用很多const的方法",[14,77350,77351],{},[29,77352],{"alt":31,"src":77353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[133,77355,77357],{"className":50662,"code":77356,"language":50664,"meta":31,"style":31},"①变量之间交换值:\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",[139,77358,77359,77364,77369,77374,77379,77384,77388,77392,77397,77401,77406,77411,77415,77420,77425,77436,77446,77451,77456,77461,77465,77469],{"__ignoreMap":31},[142,77360,77361],{"class":144,"line":145},[142,77362,77363],{"class":152},"①变量之间交换值:\n",[142,77365,77366],{"class":144,"line":64},[142,77367,77368],{"class":152},"let a=1\n",[142,77370,77371],{"class":144,"line":1208},[142,77372,77373],{"class":152},"let b=2;\n",[142,77375,77376],{"class":144,"line":1223},[142,77377,77378],{"class":152},"必须加这行代码，不然就会报错\n",[142,77380,77381],{"class":144,"line":1229},[142,77382,77383],{"class":152},"[b,a]=[a,b]\n",[142,77385,77386],{"class":144,"line":1243},[142,77387,2428],{"emptyLinePlaceholder":69},[142,77389,77390],{"class":144,"line":1249},[142,77391,2428],{"emptyLinePlaceholder":69},[142,77393,77394],{"class":144,"line":1340},[142,77395,77396],{"class":152},"可以写成下面的方式：\n",[142,77398,77399],{"class":144,"line":1346},[142,77400,77368],{"class":152},[142,77402,77403],{"class":144,"line":1358},[142,77404,77405],{"class":152},"let b=2\n",[142,77407,77408],{"class":144,"line":1640},[142,77409,77410],{"class":152},";[b,a]=[a,b]\n",[142,77412,77413],{"class":144,"line":1645},[142,77414,2428],{"emptyLinePlaceholder":69},[142,77416,77417],{"class":144,"line":1651},[142,77418,77419],{"class":152},"②排序\n",[142,77421,77422],{"class":144,"line":1656},[142,77423,77424],{"class":152},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[142,77426,77427,77430,77433],{"class":144,"line":1670},[142,77428,77429],{"class":152},"for (let i = 0; i ",[142,77431,1063],{"class":77432},"s7hpK",[142,77434,77435],{"class":152}," arr1.length; i++) {\n",[142,77437,77438,77441,77443],{"class":144,"line":1675},[142,77439,77440],{"class":152},"   for (let j = 0; j ",[142,77442,1063],{"class":77432},[142,77444,77445],{"class":152}," arr1.length - 1; j++) {\n",[142,77447,77448],{"class":144,"line":1681},[142,77449,77450],{"class":152},"      if (arr1[j] > arr1[j + 1]) {\n",[142,77452,77453],{"class":144,"line":1702},[142,77454,77455],{"class":152},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[142,77457,77458],{"class":144,"line":1707},[142,77459,77460],{"class":152},"       }\n",[142,77462,77463],{"class":144,"line":1721},[142,77464,4337],{"class":152},[142,77466,77467],{"class":144,"line":1726},[142,77468,1593],{"class":152},[142,77470,77471],{"class":144,"line":1755},[142,77472,77473],{"class":152},"console.log(arr1)\n",[14,77475,77476],{},"数组解构的细节：",[14,77478,77479],{},"①变量多，单元值少",[14,77481,77482],{},[29,77483],{"alt":31,"src":77484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77486,77487],{},"防止出现undefined的方法：",[14,77489,77490],{},"const [a=0,b=0] =[1]",[14,77492,77493],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77495,77496],{},"②变量少，单元值多",[14,77498,77499],{},[29,77500],{"alt":31,"src":77501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77503,77504],{},"此时可以使用剩余参数来接收多余的值",[14,77506,77507],{},"const [a,b,...c]=[1,2,3,4]",[14,77509,77510],{},"console.log(c) 输出[3,4]",[14,77512,77513],{},"③可以按需导入，忽略某些返回值",[14,77515,77516],{},[29,77517],{"alt":31,"src":77518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77520,77521],{},"④支持多维数组的结构",[133,77523,77527],{"className":77524,"code":77525,"language":77526,"meta":31,"style":31},"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",[139,77528,77529,77557,77573,77588,77603],{"__ignoreMap":31},[142,77530,77531,77533,77535,77537,77539,77541,77543,77545,77548,77550,77552,77554],{"class":144,"line":145},[142,77532,6821],{"class":148},[142,77534,51862],{"class":152},[142,77536,198],{"class":148},[142,77538,52255],{"class":152},[142,77540,370],{"class":201},[142,77542,12464],{"class":152},[142,77544,230],{"class":201},[142,77546,77547],{"class":152},", [",[142,77549,224],{"class":201},[142,77551,12464],{"class":152},[142,77553,446],{"class":201},[142,77555,77556],{"class":152},"]]\n",[142,77558,77559,77562,77564,77566,77568,77570],{"class":144,"line":64},[142,77560,77561],{"class":152},"console.",[142,77563,58276],{"class":1991},[142,77565,3879],{"class":152},[142,77567,344],{"class":201},[142,77569,4244],{"class":152},[142,77571,77572],{"class":211},"  \u002F\u002F1\n",[142,77574,77575,77577,77579,77581,77583,77585],{"class":144,"line":1208},[142,77576,77561],{"class":152},[142,77578,58276],{"class":1991},[142,77580,3879],{"class":152},[142,77582,370],{"class":201},[142,77584,4244],{"class":152},[142,77586,77587],{"class":211},"  \u002F\u002F2\n",[142,77589,77590,77592,77594,77596,77598,77600],{"class":144,"line":1223},[142,77591,77561],{"class":152},[142,77593,58276],{"class":1991},[142,77595,3879],{"class":152},[142,77597,230],{"class":201},[142,77599,4244],{"class":152},[142,77601,77602],{"class":211},"  \u002F\u002F[3,4]\n",[142,77604,77605,77607,77609,77611,77613,77615,77617,77619],{"class":144,"line":1229},[142,77606,77561],{"class":152},[142,77608,58276],{"class":1991},[142,77610,3879],{"class":152},[142,77612,230],{"class":201},[142,77614,4929],{"class":152},[142,77616,344],{"class":201},[142,77618,4244],{"class":152},[142,77620,77621],{"class":211},"  \u002F\u002F3\n",[133,77623,77625],{"className":77524,"code":77624,"language":77526,"meta":31,"style":31},"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",[139,77626,77627,77654,77665,77676],{"__ignoreMap":31},[142,77628,77629,77631,77634,77636,77638,77640,77642,77644,77646,77648,77650,77652],{"class":144,"line":145},[142,77630,6821],{"class":148},[142,77632,77633],{"class":152}," [a, b, c] ",[142,77635,198],{"class":148},[142,77637,52255],{"class":152},[142,77639,370],{"class":201},[142,77641,12464],{"class":152},[142,77643,230],{"class":201},[142,77645,77547],{"class":152},[142,77647,224],{"class":201},[142,77649,12464],{"class":152},[142,77651,446],{"class":201},[142,77653,77556],{"class":152},[142,77655,77656,77658,77660,77663],{"class":144,"line":64},[142,77657,77561],{"class":152},[142,77659,58276],{"class":1991},[142,77661,77662],{"class":152},"(a)",[142,77664,77572],{"class":211},[142,77666,77667,77669,77671,77674],{"class":144,"line":1208},[142,77668,77561],{"class":152},[142,77670,58276],{"class":1991},[142,77672,77673],{"class":152},"(b)",[142,77675,77587],{"class":211},[142,77677,77678,77680,77682,77685],{"class":144,"line":1223},[142,77679,77561],{"class":152},[142,77681,58276],{"class":1991},[142,77683,77684],{"class":152},"(c)",[142,77686,77602],{"class":211},[133,77688,77690],{"className":77524,"code":77689,"language":77526,"meta":31,"style":31},"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",[139,77691,77692,77719,77729,77739,77749],{"__ignoreMap":31},[142,77693,77694,77696,77699,77701,77703,77705,77707,77709,77711,77713,77715,77717],{"class":144,"line":145},[142,77695,6821],{"class":148},[142,77697,77698],{"class":152}," [a, b, [c, d]] ",[142,77700,198],{"class":148},[142,77702,52255],{"class":152},[142,77704,370],{"class":201},[142,77706,12464],{"class":152},[142,77708,230],{"class":201},[142,77710,77547],{"class":152},[142,77712,224],{"class":201},[142,77714,12464],{"class":152},[142,77716,446],{"class":201},[142,77718,77556],{"class":152},[142,77720,77721,77723,77725,77727],{"class":144,"line":64},[142,77722,77561],{"class":152},[142,77724,58276],{"class":1991},[142,77726,77662],{"class":152},[142,77728,77572],{"class":211},[142,77730,77731,77733,77735,77737],{"class":144,"line":1208},[142,77732,77561],{"class":152},[142,77734,58276],{"class":1991},[142,77736,77673],{"class":152},[142,77738,77587],{"class":211},[142,77740,77741,77743,77745,77747],{"class":144,"line":1223},[142,77742,77561],{"class":152},[142,77744,58276],{"class":1991},[142,77746,77684],{"class":152},[142,77748,77621],{"class":211},[142,77750,77751,77753,77755,77758],{"class":144,"line":1229},[142,77752,77561],{"class":152},[142,77754,58276],{"class":1991},[142,77756,77757],{"class":152},"(d)",[142,77759,77760],{"class":211},"  \u002F\u002F4\n",[113,77762,77764],{"id":77763},"_462-对象解构","4.6.2 对象解构",[14,77766,77767],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77769,77770],{},"用的非常非常多！！！！！！",[22027,77772,77774],{"id":77773},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77776,77777],{},"基本语法：",[96,77779,77780,77783,77786,77789],{},[99,77781,77782],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[99,77784,77785],{},"对象属性的值将被赋值给与属性名相同的变量",[99,77787,77788],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[99,77790,77791],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[133,77793,77795],{"className":50662,"code":77794,"language":50664,"meta":31,"style":31},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[139,77796,77797,77802,77807,77812,77816],{"__ignoreMap":31},[142,77798,77799],{"class":144,"line":145},[142,77800,77801],{"class":152},"const obj = {\n",[142,77803,77804],{"class":144,"line":64},[142,77805,77806],{"class":152},"   uname: 'pink老师',\n",[142,77808,77809],{"class":144,"line":1208},[142,77810,77811],{"class":152},"   age: 18,\n",[142,77813,77814],{"class":144,"line":1223},[142,77815,1593],{"class":152},[142,77817,77818],{"class":144,"line":1229},[142,77819,77820],{"class":152},"const { uname, age } = obj\n",[14,77822,77823],{},"上方代码这样写等价于：",[14,77825,77826],{},"const uname等价于obj.uname",[14,77828,77829],{},"变量名可以重新改名：",[14,77831,77832],{},"const uname='red老师'",[14,77834,77835],{},"const user={",[14,77837,77838],{},"  uname:'pink老师',",[14,77840,77841],{},"  age:18",[14,77843,1099],{},[14,77845,77846],{},"const {uname,age}=user",[14,77848,77849],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77851,77852],{},"const {旧变量名：新变量名}=对象",[14,77854,77855],{},"const {uname:username,age}=user",[22027,77857,77859],{"id":77858},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77861,77862],{},[29,77863],{"alt":31,"src":77864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22027,77866,77868],{"id":77867},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77870,77871],{},[29,77872],{"alt":31,"src":77873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[133,77875,77877],{"className":53096,"code":77876,"language":53098,"meta":31,"style":31},"  \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",[139,77878,77879,77887,77892,77897,77902,77907,77912,77917,77922,77927,77931,77936,77941],{"__ignoreMap":31},[142,77880,77881,77883,77885],{"class":144,"line":145},[142,77882,52173],{"class":152},[142,77884,51842],{"class":51329},[142,77886,51336],{"class":152},[142,77888,77889],{"class":144,"line":64},[142,77890,77891],{"class":152},"    const pig = {\n",[142,77893,77894],{"class":144,"line":1208},[142,77895,77896],{"class":152},"      name: '佩奇',\n",[142,77898,77899],{"class":144,"line":1223},[142,77900,77901],{"class":152},"      family: {\n",[142,77903,77904],{"class":144,"line":1229},[142,77905,77906],{"class":152},"        mother: '猪妈妈',\n",[142,77908,77909],{"class":144,"line":1243},[142,77910,77911],{"class":152},"        father: '猪爸爸',\n",[142,77913,77914],{"class":144,"line":1249},[142,77915,77916],{"class":152},"        sister: '乔治'\n",[142,77918,77919],{"class":144,"line":1340},[142,77920,77921],{"class":152},"      },\n",[142,77923,77924],{"class":144,"line":1346},[142,77925,77926],{"class":152},"      age: 6\n",[142,77928,77929],{"class":144,"line":1358},[142,77930,2215],{"class":152},[142,77932,77933],{"class":144,"line":1640},[142,77934,77935],{"class":152},"    \u002F\u002F 多级对象解构\n",[142,77937,77938],{"class":144,"line":1645},[142,77939,77940],{"class":152},"    const { name, family: { mother, father, sister }, age } = pig\n",[142,77942,77943,77945,77947],{"class":144,"line":1651},[142,77944,52446],{"class":152},[142,77946,51842],{"class":51329},[142,77948,51336],{"class":152},[14,77950,77951],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[133,77953,77956],{"className":77954,"code":77955,"language":76476,"meta":31,"style":31},"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",[139,77957,77958,77963,77974,77986,77998,78007,78011,78022,78034,78044,78049,78053,78063,78074,78083,78087,78091,78102,78113,78122,78126,78131],{"__ignoreMap":31},[142,77959,77960],{"class":144,"line":145},[142,77961,77962],{"class":211},"    \u002F\u002F 这是后台传递过来的数据\n",[142,77964,77965,77967,77970,77972],{"class":144,"line":64},[142,77966,11250],{"class":148},[142,77968,77969],{"class":152}," msg ",[142,77971,198],{"class":148},[142,77973,15601],{"class":152},[142,77975,77976,77979,77981,77984],{"class":144,"line":1208},[142,77977,77978],{"class":257},"      \"code\"",[142,77980,1012],{"class":148},[142,77982,77983],{"class":201}," 200",[142,77985,31495],{"class":152},[142,77987,77988,77991,77993,77996],{"class":144,"line":1223},[142,77989,77990],{"class":257},"      \"msg\"",[142,77992,1012],{"class":148},[142,77994,77995],{"class":257}," \"获取新闻列表成功\"",[142,77997,31495],{"class":152},[142,77999,78000,78003,78005],{"class":144,"line":1229},[142,78001,78002],{"class":257},"      \"data\"",[142,78004,1012],{"class":148},[142,78006,55476],{"class":152},[142,78008,78009],{"class":144,"line":1243},[142,78010,2538],{"class":152},[142,78012,78013,78016,78018,78020],{"class":144,"line":1249},[142,78014,78015],{"class":257},"          \"id\"",[142,78017,1012],{"class":148},[142,78019,25147],{"class":201},[142,78021,31495],{"class":152},[142,78023,78024,78027,78029,78032],{"class":144,"line":1340},[142,78025,78026],{"class":257},"          \"title\"",[142,78028,1012],{"class":148},[142,78030,78031],{"class":257}," \"5G商用自己，三大运用商收入下降\"",[142,78033,31495],{"class":152},[142,78035,78036,78039,78041],{"class":144,"line":1346},[142,78037,78038],{"class":257},"          \"count\"",[142,78040,1012],{"class":148},[142,78042,78043],{"class":201}," 58\n",[142,78045,78046],{"class":144,"line":1358},[142,78047,78048],{"class":152},"        },\n",[142,78050,78051],{"class":144,"line":1640},[142,78052,2538],{"class":152},[142,78054,78055,78057,78059,78061],{"class":144,"line":1645},[142,78056,78015],{"class":257},[142,78058,1012],{"class":148},[142,78060,14784],{"class":201},[142,78062,31495],{"class":152},[142,78064,78065,78067,78069,78072],{"class":144,"line":1651},[142,78066,78026],{"class":257},[142,78068,1012],{"class":148},[142,78070,78071],{"class":257}," \"国际媒体头条速览\"",[142,78073,31495],{"class":152},[142,78075,78076,78078,78080],{"class":144,"line":1656},[142,78077,78038],{"class":257},[142,78079,1012],{"class":148},[142,78081,78082],{"class":201}," 56\n",[142,78084,78085],{"class":144,"line":1670},[142,78086,78048],{"class":152},[142,78088,78089],{"class":144,"line":1675},[142,78090,2538],{"class":152},[142,78092,78093,78095,78097,78100],{"class":144,"line":1681},[142,78094,78015],{"class":257},[142,78096,1012],{"class":148},[142,78098,78099],{"class":201}," 3",[142,78101,31495],{"class":152},[142,78103,78104,78106,78108,78111],{"class":144,"line":1702},[142,78105,78026],{"class":257},[142,78107,1012],{"class":148},[142,78109,78110],{"class":257}," \"乌克兰和俄罗斯持续冲突\"",[142,78112,31495],{"class":152},[142,78114,78115,78117,78119],{"class":144,"line":1707},[142,78116,78038],{"class":257},[142,78118,1012],{"class":148},[142,78120,78121],{"class":201}," 1669\n",[142,78123,78124],{"class":144,"line":1721},[142,78125,78048],{"class":152},[142,78127,78128],{"class":144,"line":1726},[142,78129,78130],{"class":152},"      ]\n",[142,78132,78133],{"class":144,"line":1755},[142,78134,2215],{"class":152},[14,78136,78137],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78139,78140],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78142,78143],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[14,78145,78146],{},"function({data}) {",[14,78148,78149],{},"console.log(data)",[14,78151,1099],{},[14,78153,78154],{},"render(msg)",[14,78156,78157],{},"实参传递给形参的时候解构了",[14,78159,78160],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78162,78163],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78165,78166],{},"function render({data:mydata}) {",[14,78168,78169],{},"  console.log(data)",[14,78171,1099],{},[113,78173,78175],{"id":78174},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78177,78178],{},"有两种情况：一个是数组结构，一个是立即执行函数",[96,78180,78181],{},[99,78182,78183],{},"如果对一个数组进行遍历，有两种方式：",[14,78185,78186],{},"①法1",[14,78188,78189],{},"const arr=[1,2,3]",[14,78191,78192],{},"arr.map(function(item,index) {",[14,78194,78195],{},"  console.log(item)",[14,78197,52493],{},[14,78199,78200],{},[29,78201],{"alt":31,"src":78202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78204,78205],{},"②法2",[14,78207,78208],{},"const str='pink'",[14,78210,78211],{},"[1,2,3].map(function(item,index) {",[14,78213,78214],{},"console.log(item)",[14,78216,52493],{},[14,78218,78219],{},[29,78220],{"alt":31,"src":78221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78223,78224],{},"此时会报错",[14,78226,78227],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78229,78214],{},[14,78231,52493],{},[14,78233,78234],{},"内部会当成这样处理，所以我们用分号进行隔开",[84,78236,78238],{"id":78237},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78240,78241],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78243,78244],{},"可以理解为加强版的for循环",[14,78246,78247],{},[29,78248],{"alt":31,"src":78249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78251,78252],{},"里边不写return，不返回数组，只遍历不返回",[14,78254,78255],{},"map是返回数组",[14,78257,78258],{},"forEach主要用于遍历数组对象",[133,78260,78262],{"className":53096,"code":78261,"language":53098,"meta":31,"style":31},"  \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",[139,78263,78264,78272,78277,78282,78287,78292,78296,78301],{"__ignoreMap":31},[142,78265,78266,78268,78270],{"class":144,"line":145},[142,78267,52173],{"class":152},[142,78269,51842],{"class":51329},[142,78271,51336],{"class":152},[142,78273,78274],{"class":144,"line":64},[142,78275,78276],{"class":152},"    const arr = ['red', 'green', 'pink']\n",[142,78278,78279],{"class":144,"line":1208},[142,78280,78281],{"class":152},"    const result = arr.forEach(function (item, index) {\n",[142,78283,78284],{"class":144,"line":1223},[142,78285,78286],{"class":152},"      console.log(item)\n",[142,78288,78289],{"class":144,"line":1229},[142,78290,78291],{"class":152},"      console.log(index)\n",[142,78293,78294],{"class":144,"line":1243},[142,78295,33490],{"class":152},[142,78297,78298],{"class":144,"line":1249},[142,78299,78300],{"class":152},"    console.log(result)\n",[142,78302,78303,78305,78307],{"class":144,"line":1340},[142,78304,52446],{"class":152},[142,78306,51842],{"class":51329},[142,78308,51336],{"class":152},[14,78310,78311],{},[29,78312],{"alt":31,"src":78313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[84,78315,78317],{"id":78316},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78319,78320],{},[29,78321],{"alt":31,"src":78322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78324,78325],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[133,78327,78329],{"className":53096,"code":78328,"language":53098,"meta":31,"style":31},"\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",[139,78330,78331,78339,78347,78352,78357,78361,78365,78370,78374,78379,78387],{"__ignoreMap":31},[142,78332,78333,78335,78337],{"class":144,"line":145},[142,78334,1063],{"class":152},[142,78336,51829],{"class":51329},[142,78338,51336],{"class":152},[142,78340,78341,78343,78345],{"class":144,"line":64},[142,78342,52173],{"class":152},[142,78344,51842],{"class":51329},[142,78346,51336],{"class":152},[142,78348,78349],{"class":144,"line":1208},[142,78350,78351],{"class":152},"    const arr = [10, 20, 30]\n",[142,78353,78354],{"class":144,"line":1223},[142,78355,78356],{"class":152},"    const newArr = arr.filter(function (item, index) {\n",[142,78358,78359],{"class":144,"line":1229},[142,78360,78286],{"class":152},[142,78362,78363],{"class":144,"line":1243},[142,78364,78291],{"class":152},[142,78366,78367],{"class":144,"line":1249},[142,78368,78369],{"class":152},"      return item >= 20\n",[142,78371,78372],{"class":144,"line":1340},[142,78373,33490],{"class":152},[142,78375,78376],{"class":144,"line":1346},[142,78377,78378],{"class":152},"    console.log(newArr)\n",[142,78380,78381,78383,78385],{"class":144,"line":1358},[142,78382,52446],{"class":152},[142,78384,51842],{"class":51329},[142,78386,51336],{"class":152},[142,78388,78389,78391,78393],{"class":144,"line":1640},[142,78390,51814],{"class":152},[142,78392,51829],{"class":51329},[142,78394,51336],{"class":152},[14,78396,78397],{},"这个也可以写成箭头函数：",[133,78399,78401],{"className":50662,"code":78400,"language":50664,"meta":31,"style":31},"const newArr = arr.filter(item => item >= 20)\n",[139,78402,78403],{"__ignoreMap":31},[142,78404,78405],{"class":144,"line":145},[142,78406,78400],{"class":152},[84,78408,78410],{"id":78409},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78412,78413],{},[29,78414],{"alt":31,"src":78415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78417,78418],{},"步骤：",[14,78420,78421],{},"①：渲染页面模块",[1160,78423,78424,78427],{},[99,78425,78426],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[99,78428,78429],{},"用forEach+字符串的形式",[14,78431,78432],{},"②：点击不同需求，显示不同页面内容",[1160,78434,78435,78438,78441,78444,78447],{},[99,78436,78437],{},"点击采取事件委托方式 .filter",[99,78439,78440],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[99,78442,78443],{},"筛选条件是根据点击的 data-index 来判断",[99,78445,78446],{},"可以使用对象解构，把事件对象解构",[99,78448,78449],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[133,78451,78453],{"className":50662,"code":78452,"language":50664,"meta":31,"style":31},"\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",[139,78454,78455,78465,78479,78483,78491,78505,78525,78537,78545,78551,78561,78571,78581,78585,78589,78595,78608,78620,78630,78642,78646,78650,78657,78670,78682,78699,78717,78730,78734,78738,78750,78760,78764,78768,78775,78816,78843,78853,78857,78861,78869,78881,78885,78889,78897,78909,78921,78932,78936,78940,78949,78961,78972,78976,78980,78989,79001,79013,79017,79021,79028,79038,79050,79062,79077,79081,79085,79093,79109,79119,79129,79139,79151,79155,79159,79169,79180,79190,79194,79202,79210,79214,79222,79237,79263,79288,79313,79332,79340,79354,79359,79364,79369,79374,79379,79387,79395,79400,79411,79416,79426,79436,79446,79456,79460,79464,79473,79482,79491,79500,79504,79508,79517,79526,79535,79544,79548,79552,79561,79570,79579,79588,79592,79596,79605,79614,79623,79632,79636,79640,79649,79658,79667,79676,79680,79684,79693,79702,79711,79720,79724,79728,79737,79746,79754,79763,79767,79771,79775,79780,79792,79797,79809,79813,79830,79858,79867,79872,79882,79892,79901,79906,79911,79915,79920,79937,79941,79946,79954,79959,79986,79991,80011,80016,80028,80033,80038,80043,80054,80068,80105,80123,80156,80173,80197,80201,80206,80212,80216,80220,80224,80232,80240,80244],{"__ignoreMap":31},[142,78456,78457,78459,78461,78463],{"class":144,"line":145},[142,78458,51326],{"class":152},[142,78460,51330],{"class":51329},[142,78462,51333],{"class":1991},[142,78464,51336],{"class":152},[142,78466,78467,78469,78471,78473,78475,78477],{"class":144,"line":64},[142,78468,1063],{"class":152},[142,78470,50664],{"class":51329},[142,78472,51345],{"class":1991},[142,78474,198],{"class":152},[142,78476,51350],{"class":257},[142,78478,51336],{"class":152},[142,78480,78481],{"class":144,"line":1208},[142,78482,2428],{"emptyLinePlaceholder":69},[142,78484,78485,78487,78489],{"class":144,"line":1223},[142,78486,1063],{"class":152},[142,78488,51363],{"class":51329},[142,78490,51336],{"class":152},[142,78492,78493,78495,78497,78499,78501,78503],{"class":144,"line":1229},[142,78494,52173],{"class":152},[142,78496,51373],{"class":51329},[142,78498,51376],{"class":1991},[142,78500,198],{"class":152},[142,78502,51381],{"class":257},[142,78504,51336],{"class":152},[142,78506,78507,78509,78511,78513,78515,78517,78519,78521,78523],{"class":144,"line":1243},[142,78508,52173],{"class":152},[142,78510,51373],{"class":51329},[142,78512,14949],{"class":1991},[142,78514,198],{"class":152},[142,78516,51420],{"class":257},[142,78518,51400],{"class":1991},[142,78520,198],{"class":152},[142,78522,51427],{"class":257},[142,78524,51336],{"class":152},[142,78526,78527,78529,78531,78533,78535],{"class":144,"line":1249},[142,78528,52173],{"class":152},[142,78530,51436],{"class":51329},[142,78532,51439],{"class":152},[142,78534,51436],{"class":51329},[142,78536,51336],{"class":152},[142,78538,78539,78541,78543],{"class":144,"line":1340},[142,78540,52173],{"class":152},[142,78542,5155],{"class":51329},[142,78544,51336],{"class":152},[142,78546,78547,78549],{"class":144,"line":1346},[142,78548,6432],{"class":51329},[142,78550,15601],{"class":152},[142,78552,78553,78555,78557,78559],{"class":144,"line":1358},[142,78554,54724],{"class":201},[142,78556,51466],{"class":152},[142,78558,344],{"class":201},[142,78560,1319],{"class":152},[142,78562,78563,78565,78567,78569],{"class":144,"line":1640},[142,78564,54735],{"class":201},[142,78566,51466],{"class":152},[142,78568,344],{"class":201},[142,78570,1319],{"class":152},[142,78572,78573,78575,78577,78579],{"class":144,"line":1645},[142,78574,72625],{"class":201},[142,78576,51466],{"class":152},[142,78578,60534],{"class":201},[142,78580,1319],{"class":152},[142,78582,78583],{"class":144,"line":1651},[142,78584,2215],{"class":152},[142,78586,78587],{"class":144,"line":1656},[142,78588,2428],{"emptyLinePlaceholder":69},[142,78590,78591,78593],{"class":144,"line":1670},[142,78592,62152],{"class":1991},[142,78594,15601],{"class":152},[142,78596,78597,78599,78601,78604,78606],{"class":144,"line":1675},[142,78598,54800],{"class":201},[142,78600,51466],{"class":152},[142,78602,78603],{"class":201},"990",[142,78605,51521],{"class":148},[142,78607,1319],{"class":152},[142,78609,78610,78612,78614,78616,78618],{"class":144,"line":1681},[142,78611,54735],{"class":201},[142,78613,51466],{"class":152},[142,78615,344],{"class":201},[142,78617,51585],{"class":201},[142,78619,1319],{"class":152},[142,78621,78622,78624,78626,78628],{"class":144,"line":1702},[142,78623,55038],{"class":201},[142,78625,51466],{"class":152},[142,78627,51506],{"class":201},[142,78629,1319],{"class":152},[142,78631,78632,78635,78637,78640],{"class":144,"line":1707},[142,78633,78634],{"class":201},"      flex-wrap",[142,78636,51466],{"class":152},[142,78638,78639],{"class":201},"wrap",[142,78641,1319],{"class":152},[142,78643,78644],{"class":144,"line":1721},[142,78645,2215],{"class":152},[142,78647,78648],{"class":144,"line":1726},[142,78649,2428],{"emptyLinePlaceholder":69},[142,78651,78652,78655],{"class":144,"line":1755},[142,78653,78654],{"class":1991},"    .item",[142,78656,15601],{"class":152},[142,78658,78659,78661,78663,78666,78668],{"class":144,"line":1760},[142,78660,54800],{"class":201},[142,78662,51466],{"class":152},[142,78664,78665],{"class":201},"240",[142,78667,51521],{"class":148},[142,78669,1319],{"class":152},[142,78671,78672,78674,78676,78678,78680],{"class":144,"line":1777},[142,78673,62029],{"class":201},[142,78675,51466],{"class":152},[142,78677,599],{"class":201},[142,78679,51521],{"class":148},[142,78681,1319],{"class":152},[142,78683,78684,78686,78688,78690,78692,78695,78697],{"class":144,"line":1782},[142,78685,54724],{"class":201},[142,78687,51466],{"class":152},[142,78689,853],{"class":201},[142,78691,51521],{"class":148},[142,78693,78694],{"class":201}," 30",[142,78696,51521],{"class":148},[142,78698,1319],{"class":152},[142,78700,78701,78703,78705,78707,78710,78713,78715],{"class":144,"line":1787},[142,78702,61889],{"class":201},[142,78704,51466],{"class":152},[142,78706,28150],{"class":201},[142,78708,78709],{"class":201}," ease",[142,78711,78712],{"class":201}," .5",[142,78714,848],{"class":148},[142,78716,1319],{"class":152},[142,78718,78719,78722,78724,78726,78728],{"class":144,"line":1792},[142,78720,78721],{"class":201},"      margin-bottom",[142,78723,51466],{"class":152},[142,78725,853],{"class":201},[142,78727,51521],{"class":148},[142,78729,1319],{"class":152},[142,78731,78732],{"class":144,"line":1806},[142,78733,2215],{"class":152},[142,78735,78736],{"class":144,"line":1811},[142,78737,2428],{"emptyLinePlaceholder":69},[142,78739,78740,78743,78745,78748],{"class":144,"line":2605},[142,78741,78742],{"class":1991},"    .item:nth-child",[142,78744,153],{"class":152},[142,78746,78747],{"class":201},"4n",[142,78749,12471],{"class":152},[142,78751,78752,78754,78756,78758],{"class":144,"line":2619},[142,78753,62029],{"class":201},[142,78755,51466],{"class":152},[142,78757,344],{"class":201},[142,78759,1319],{"class":152},[142,78761,78762],{"class":144,"line":2627},[142,78763,2215],{"class":152},[142,78765,78766],{"class":144,"line":2632},[142,78767,2428],{"emptyLinePlaceholder":69},[142,78769,78770,78773],{"class":144,"line":2638},[142,78771,78772],{"class":1991},"    .item:hover",[142,78774,15601],{"class":152},[142,78776,78777,78780,78782,78784,78786,78788,78790,78792,78794,78797,78799,78801,78803,78805,78807,78809,78811,78814],{"class":144,"line":2644},[142,78778,78779],{"class":201},"      box-shadow",[142,78781,51466],{"class":152},[142,78783,344],{"class":201},[142,78785,51521],{"class":148},[142,78787,4121],{"class":201},[142,78789,51521],{"class":148},[142,78791,2176],{"class":201},[142,78793,51521],{"class":148},[142,78795,78796],{"class":201}," rgba",[142,78798,153],{"class":152},[142,78800,344],{"class":201},[142,78802,12464],{"class":152},[142,78804,344],{"class":201},[142,78806,12464],{"class":152},[142,78808,344],{"class":201},[142,78810,12464],{"class":152},[142,78812,78813],{"class":201},".2",[142,78815,2747],{"class":152},[142,78817,78818,78821,78823,78826,78828,78830,78832,78835,78837,78839,78841],{"class":144,"line":2649},[142,78819,78820],{"class":201},"      transform",[142,78822,51466],{"class":152},[142,78824,78825],{"class":201},"translate3d",[142,78827,153],{"class":152},[142,78829,344],{"class":201},[142,78831,12464],{"class":152},[142,78833,78834],{"class":201},"-4",[142,78836,51521],{"class":148},[142,78838,12464],{"class":152},[142,78840,344],{"class":201},[142,78842,2747],{"class":152},[142,78844,78845,78847,78849,78851],{"class":144,"line":7977},[142,78846,62054],{"class":201},[142,78848,51466],{"class":152},[142,78850,62059],{"class":201},[142,78852,1319],{"class":152},[142,78854,78855],{"class":144,"line":8001},[142,78856,2215],{"class":152},[142,78858,78859],{"class":144,"line":8006},[142,78860,2428],{"emptyLinePlaceholder":69},[142,78862,78863,78865,78867],{"class":144,"line":8012},[142,78864,78654],{"class":1991},[142,78866,55644],{"class":51329},[142,78868,15601],{"class":152},[142,78870,78871,78873,78875,78877,78879],{"class":144,"line":8039},[142,78872,54800],{"class":201},[142,78874,51466],{"class":152},[142,78876,464],{"class":201},[142,78878,481],{"class":148},[142,78880,1319],{"class":152},[142,78882,78883],{"class":144,"line":8044},[142,78884,2215],{"class":152},[142,78886,78887],{"class":144,"line":8050},[142,78888,2428],{"emptyLinePlaceholder":69},[142,78890,78891,78893,78895],{"class":144,"line":8062},[142,78892,78654],{"class":1991},[142,78894,62333],{"class":1991},[142,78896,15601],{"class":152},[142,78898,78899,78901,78903,78905,78907],{"class":144,"line":8074},[142,78900,54951],{"class":201},[142,78902,51466],{"class":152},[142,78904,803],{"class":201},[142,78906,51521],{"class":148},[142,78908,1319],{"class":152},[142,78910,78911,78913,78915,78917,78919],{"class":144,"line":8086},[142,78912,78721],{"class":201},[142,78914,51466],{"class":152},[142,78916,599],{"class":201},[142,78918,51521],{"class":148},[142,78920,1319],{"class":152},[142,78922,78923,78925,78927,78930],{"class":144,"line":9745},[142,78924,57445],{"class":201},[142,78926,51466],{"class":152},[142,78928,78929],{"class":201},"#666",[142,78931,1319],{"class":152},[142,78933,78934],{"class":144,"line":9770},[142,78935,2215],{"class":152},[142,78937,78938],{"class":144,"line":9793},[142,78939,2428],{"emptyLinePlaceholder":69},[142,78941,78942,78944,78947],{"class":144,"line":9817},[142,78943,78654],{"class":1991},[142,78945,78946],{"class":1991}," .price",[142,78948,15601],{"class":152},[142,78950,78951,78953,78955,78957,78959],{"class":144,"line":9822},[142,78952,54951],{"class":201},[142,78954,51466],{"class":152},[142,78956,903],{"class":201},[142,78958,51521],{"class":148},[142,78960,1319],{"class":152},[142,78962,78963,78965,78967,78970],{"class":144,"line":9827},[142,78964,57445],{"class":201},[142,78966,51466],{"class":152},[142,78968,78969],{"class":201},"firebrick",[142,78971,1319],{"class":152},[142,78973,78974],{"class":144,"line":9832},[142,78975,2215],{"class":152},[142,78977,78978],{"class":144,"line":9841},[142,78979,2428],{"emptyLinePlaceholder":69},[142,78981,78982,78984,78987],{"class":144,"line":9846},[142,78983,78654],{"class":1991},[142,78985,78986],{"class":1991}," .price::before",[142,78988,15601],{"class":152},[142,78990,78991,78994,78996,78999],{"class":144,"line":9852},[142,78992,78993],{"class":201},"      content",[142,78995,51466],{"class":152},[142,78997,78998],{"class":257},"'￥'",[142,79000,1319],{"class":152},[142,79002,79003,79005,79007,79009,79011],{"class":144,"line":9873},[142,79004,54951],{"class":201},[142,79006,51466],{"class":152},[142,79008,702],{"class":201},[142,79010,51521],{"class":148},[142,79012,1319],{"class":152},[142,79014,79015],{"class":144,"line":9879},[142,79016,2215],{"class":152},[142,79018,79019],{"class":144,"line":9893},[142,79020,2428],{"emptyLinePlaceholder":69},[142,79022,79023,79026],{"class":144,"line":9899},[142,79024,79025],{"class":1991},"    .filter",[142,79027,15601],{"class":152},[142,79029,79030,79032,79034,79036],{"class":144,"line":9926},[142,79031,55038],{"class":201},[142,79033,51466],{"class":152},[142,79035,51506],{"class":201},[142,79037,1319],{"class":152},[142,79039,79040,79042,79044,79046,79048],{"class":144,"line":9935},[142,79041,54800],{"class":201},[142,79043,51466],{"class":152},[142,79045,78603],{"class":201},[142,79047,51521],{"class":148},[142,79049,1319],{"class":152},[142,79051,79052,79054,79056,79058,79060],{"class":144,"line":9941},[142,79053,54735],{"class":201},[142,79055,51466],{"class":152},[142,79057,344],{"class":201},[142,79059,51585],{"class":201},[142,79061,1319],{"class":152},[142,79063,79064,79066,79068,79070,79072,79074],{"class":144,"line":9949},[142,79065,54724],{"class":201},[142,79067,51466],{"class":152},[142,79069,809],{"class":201},[142,79071,51521],{"class":148},[142,79073,78694],{"class":201},[142,79075,79076],{"class":148},"px\n",[142,79078,79079],{"class":144,"line":9954},[142,79080,2215],{"class":152},[142,79082,79083],{"class":144,"line":16633},[142,79084,2428],{"emptyLinePlaceholder":69},[142,79086,79087,79089,79091],{"class":144,"line":16639},[142,79088,79025],{"class":1991},[142,79090,1427],{"class":51329},[142,79092,15601],{"class":152},[142,79094,79095,79097,79099,79101,79103,79105,79107],{"class":144,"line":16662},[142,79096,54724],{"class":201},[142,79098,51466],{"class":152},[142,79100,599],{"class":201},[142,79102,51521],{"class":148},[142,79104,8979],{"class":201},[142,79106,51521],{"class":148},[142,79108,1319],{"class":152},[142,79110,79111,79113,79115,79117],{"class":144,"line":16668},[142,79112,61750],{"class":201},[142,79114,51466],{"class":152},[142,79116,61847],{"class":201},[142,79118,1319],{"class":152},[142,79120,79121,79123,79125,79127],{"class":144,"line":16691},[142,79122,57445],{"class":201},[142,79124,51466],{"class":152},[142,79126,78929],{"class":201},[142,79128,1319],{"class":152},[142,79130,79131,79133,79135,79137],{"class":144,"line":16705},[142,79132,63999],{"class":201},[142,79134,51466],{"class":152},[142,79136,54766],{"class":201},[142,79138,1319],{"class":152},[142,79140,79141,79143,79145,79147,79149],{"class":144,"line":16725},[142,79142,61779],{"class":201},[142,79144,51466],{"class":152},[142,79146,853],{"class":201},[142,79148,51521],{"class":148},[142,79150,1319],{"class":152},[142,79152,79153],{"class":144,"line":16731},[142,79154,2215],{"class":152},[142,79156,79157],{"class":144,"line":16742},[142,79158,2428],{"emptyLinePlaceholder":69},[142,79160,79161,79163,79165,79167],{"class":144,"line":16765},[142,79162,79025],{"class":1991},[142,79164,1427],{"class":51329},[142,79166,61929],{"class":1991},[142,79168,15601],{"class":152},[142,79170,79171,79173,79175,79178],{"class":144,"line":16787},[142,79172,54913],{"class":201},[142,79174,51466],{"class":152},[142,79176,79177],{"class":201},"#05943c",[142,79179,1319],{"class":152},[142,79181,79182,79184,79186,79188],{"class":144,"line":16792},[142,79183,57445],{"class":201},[142,79185,51466],{"class":152},[142,79187,60871],{"class":201},[142,79189,1319],{"class":152},[142,79191,79192],{"class":144,"line":16798},[142,79193,2215],{"class":152},[142,79195,79196,79198,79200],{"class":144,"line":16812},[142,79197,52446],{"class":152},[142,79199,5155],{"class":51329},[142,79201,51336],{"class":152},[142,79203,79204,79206,79208],{"class":144,"line":16825},[142,79205,51814],{"class":152},[142,79207,51363],{"class":51329},[142,79209,51336],{"class":152},[142,79211,79212],{"class":144,"line":16830},[142,79213,2428],{"emptyLinePlaceholder":69},[142,79215,79216,79218,79220],{"class":144,"line":16844},[142,79217,1063],{"class":152},[142,79219,51829],{"class":51329},[142,79221,51336],{"class":152},[142,79223,79224,79226,79228,79230,79232,79235],{"class":144,"line":16849},[142,79225,52173],{"class":152},[142,79227,51640],{"class":51329},[142,79229,53515],{"class":1991},[142,79231,198],{"class":152},[142,79233,79234],{"class":257},"\"filter\"",[142,79236,51336],{"class":152},[142,79238,79239,79241,79243,79245,79247,79249,79252,79254,79256,79259,79261],{"class":144,"line":16855},[142,79240,51370],{"class":152},[142,79242,391],{"class":51329},[142,79244,61086],{"class":1991},[142,79246,198],{"class":152},[142,79248,61091],{"class":257},[142,79250,79251],{"class":1991}," data-index",[142,79253,198],{"class":152},[142,79255,3706],{"class":257},[142,79257,79258],{"class":152},">0-100元\u003C\u002F",[142,79260,391],{"class":51329},[142,79262,51336],{"class":152},[142,79264,79265,79267,79269,79271,79273,79275,79277,79279,79281,79284,79286],{"class":144,"line":16860},[142,79266,51370],{"class":152},[142,79268,391],{"class":51329},[142,79270,61086],{"class":1991},[142,79272,198],{"class":152},[142,79274,61091],{"class":257},[142,79276,79251],{"class":1991},[142,79278,198],{"class":152},[142,79280,3729],{"class":257},[142,79282,79283],{"class":152},">100-300元\u003C\u002F",[142,79285,391],{"class":51329},[142,79287,51336],{"class":152},[142,79289,79290,79292,79294,79296,79298,79300,79302,79304,79306,79309,79311],{"class":144,"line":16874},[142,79291,51370],{"class":152},[142,79293,391],{"class":51329},[142,79295,61086],{"class":1991},[142,79297,198],{"class":152},[142,79299,61091],{"class":257},[142,79301,79251],{"class":1991},[142,79303,198],{"class":152},[142,79305,3742],{"class":257},[142,79307,79308],{"class":152},">300元以上\u003C\u002F",[142,79310,391],{"class":51329},[142,79312,51336],{"class":152},[142,79314,79315,79317,79319,79321,79323,79325,79328,79330],{"class":144,"line":16879},[142,79316,51370],{"class":152},[142,79318,391],{"class":51329},[142,79320,61086],{"class":1991},[142,79322,198],{"class":152},[142,79324,61091],{"class":257},[142,79326,79327],{"class":152},">全部区间\u003C\u002F",[142,79329,391],{"class":51329},[142,79331,51336],{"class":152},[142,79333,79334,79336,79338],{"class":144,"line":16884},[142,79335,52446],{"class":152},[142,79337,51640],{"class":51329},[142,79339,51336],{"class":152},[142,79341,79342,79344,79346,79348,79350,79352],{"class":144,"line":16898},[142,79343,52173],{"class":152},[142,79345,51640],{"class":51329},[142,79347,53515],{"class":1991},[142,79349,198],{"class":152},[142,79351,62637],{"class":257},[142,79353,51336],{"class":152},[142,79355,79356],{"class":144,"line":16910},[142,79357,79358],{"class":211},"    \u003C!-- \u003Cdiv class=\"item\">\n",[142,79360,79361],{"class":144,"line":16915},[142,79362,79363],{"class":211},"      \u003Cimg src=\"\" alt=\"\">\n",[142,79365,79366],{"class":144,"line":16928},[142,79367,79368],{"class":211},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[142,79370,79371],{"class":144,"line":16933},[142,79372,79373],{"class":211},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[142,79375,79376],{"class":144,"line":16938},[142,79377,79378],{"class":211},"    \u003C\u002Fdiv> -->\n",[142,79380,79381,79383,79385],{"class":144,"line":16943},[142,79382,52446],{"class":152},[142,79384,51640],{"class":51329},[142,79386,51336],{"class":152},[142,79388,79389,79391,79393],{"class":144,"line":16956},[142,79390,52173],{"class":152},[142,79392,51842],{"class":51329},[142,79394,51336],{"class":152},[142,79396,79397],{"class":144,"line":16961},[142,79398,79399],{"class":211},"    \u002F\u002F 2. 初始化数据\n",[142,79401,79402,79404,79407,79409],{"class":144,"line":32662},[142,79403,11250],{"class":148},[142,79405,79406],{"class":201}," goodsList",[142,79408,13593],{"class":148},[142,79410,55476],{"class":152},[142,79412,79413],{"class":144,"line":32668},[142,79414,79415],{"class":152},"      {\n",[142,79417,79418,79421,79424],{"class":144,"line":32674},[142,79419,79420],{"class":152},"        id: ",[142,79422,79423],{"class":257},"'4001172'",[142,79425,31495],{"class":152},[142,79427,79428,79431,79434],{"class":144,"line":32680},[142,79429,79430],{"class":152},"        name: ",[142,79432,79433],{"class":257},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[142,79435,31495],{"class":152},[142,79437,79438,79441,79444],{"class":144,"line":32686},[142,79439,79440],{"class":152},"        price: ",[142,79442,79443],{"class":257},"'289.00'",[142,79445,31495],{"class":152},[142,79447,79448,79451,79454],{"class":144,"line":32697},[142,79449,79450],{"class":152},"        picture: ",[142,79452,79453],{"class":257},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[142,79455,31495],{"class":152},[142,79457,79458],{"class":144,"line":32703},[142,79459,77921],{"class":152},[142,79461,79462],{"class":144,"line":32723},[142,79463,79415],{"class":152},[142,79465,79466,79468,79471],{"class":144,"line":32729},[142,79467,79420],{"class":152},[142,79469,79470],{"class":257},"'4001594'",[142,79472,31495],{"class":152},[142,79474,79475,79477,79480],{"class":144,"line":32740},[142,79476,79430],{"class":152},[142,79478,79479],{"class":257},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[142,79481,31495],{"class":152},[142,79483,79484,79486,79489],{"class":144,"line":32746},[142,79485,79440],{"class":152},[142,79487,79488],{"class":257},"'288.00'",[142,79490,31495],{"class":152},[142,79492,79493,79495,79498],{"class":144,"line":32752},[142,79494,79450],{"class":152},[142,79496,79497],{"class":257},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[142,79499,31495],{"class":152},[142,79501,79502],{"class":144,"line":32758},[142,79503,77921],{"class":152},[142,79505,79506],{"class":144,"line":32764},[142,79507,79415],{"class":152},[142,79509,79510,79512,79515],{"class":144,"line":32770},[142,79511,79420],{"class":152},[142,79513,79514],{"class":257},"'4001009'",[142,79516,31495],{"class":152},[142,79518,79519,79521,79524],{"class":144,"line":32776},[142,79520,79430],{"class":152},[142,79522,79523],{"class":257},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[142,79525,31495],{"class":152},[142,79527,79528,79530,79533],{"class":144,"line":32782},[142,79529,79440],{"class":152},[142,79531,79532],{"class":257},"'109.00'",[142,79534,31495],{"class":152},[142,79536,79537,79539,79542],{"class":144,"line":32802},[142,79538,79450],{"class":152},[142,79540,79541],{"class":257},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[142,79543,31495],{"class":152},[142,79545,79546],{"class":144,"line":32808},[142,79547,77921],{"class":152},[142,79549,79550],{"class":144,"line":32824},[142,79551,79415],{"class":152},[142,79553,79554,79556,79559],{"class":144,"line":32830},[142,79555,79420],{"class":152},[142,79557,79558],{"class":257},"'4001874'",[142,79560,31495],{"class":152},[142,79562,79563,79565,79568],{"class":144,"line":32844},[142,79564,79430],{"class":152},[142,79566,79567],{"class":257},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[142,79569,31495],{"class":152},[142,79571,79572,79574,79577],{"class":144,"line":32850},[142,79573,79440],{"class":152},[142,79575,79576],{"class":257},"'488.00'",[142,79578,31495],{"class":152},[142,79580,79581,79583,79586],{"class":144,"line":32865},[142,79582,79450],{"class":152},[142,79584,79585],{"class":257},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[142,79587,31495],{"class":152},[142,79589,79590],{"class":144,"line":32871},[142,79591,77921],{"class":152},[142,79593,79594],{"class":144,"line":32880},[142,79595,79415],{"class":152},[142,79597,79598,79600,79603],{"class":144,"line":32886},[142,79599,79420],{"class":152},[142,79601,79602],{"class":257},"'4001649'",[142,79604,31495],{"class":152},[142,79606,79607,79609,79612],{"class":144,"line":32895},[142,79608,79430],{"class":152},[142,79610,79611],{"class":257},"'大师监制龙泉青瓷茶叶罐'",[142,79613,31495],{"class":152},[142,79615,79616,79618,79621],{"class":144,"line":32901},[142,79617,79440],{"class":152},[142,79619,79620],{"class":257},"'139.00'",[142,79622,31495],{"class":152},[142,79624,79625,79627,79630],{"class":144,"line":32907},[142,79626,79450],{"class":152},[142,79628,79629],{"class":257},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[142,79631,31495],{"class":152},[142,79633,79634],{"class":144,"line":32916},[142,79635,77921],{"class":152},[142,79637,79638],{"class":144,"line":32922},[142,79639,79415],{"class":152},[142,79641,79642,79644,79647],{"class":144,"line":32933},[142,79643,79420],{"class":152},[142,79645,79646],{"class":257},"'3997185'",[142,79648,31495],{"class":152},[142,79650,79651,79653,79656],{"class":144,"line":32939},[142,79652,79430],{"class":152},[142,79654,79655],{"class":257},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[142,79657,31495],{"class":152},[142,79659,79660,79662,79665],{"class":144,"line":32958},[142,79661,79440],{"class":152},[142,79663,79664],{"class":257},"'108.00'",[142,79666,31495],{"class":152},[142,79668,79669,79671,79674],{"class":144,"line":32964},[142,79670,79450],{"class":152},[142,79672,79673],{"class":257},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[142,79675,31495],{"class":152},[142,79677,79678],{"class":144,"line":32975},[142,79679,77921],{"class":152},[142,79681,79682],{"class":144,"line":32981},[142,79683,79415],{"class":152},[142,79685,79686,79688,79691],{"class":144,"line":33001},[142,79687,79420],{"class":152},[142,79689,79690],{"class":257},"'3997403'",[142,79692,31495],{"class":152},[142,79694,79695,79697,79700],{"class":144,"line":33017},[142,79696,79430],{"class":152},[142,79698,79699],{"class":257},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[142,79701,31495],{"class":152},[142,79703,79704,79706,79709],{"class":144,"line":33023},[142,79705,79440],{"class":152},[142,79707,79708],{"class":257},"'100.00'",[142,79710,31495],{"class":152},[142,79712,79713,79715,79718],{"class":144,"line":33037},[142,79714,79450],{"class":152},[142,79716,79717],{"class":257},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[142,79719,31495],{"class":152},[142,79721,79722],{"class":144,"line":33043},[142,79723,77921],{"class":152},[142,79725,79726],{"class":144,"line":33049},[142,79727,79415],{"class":152},[142,79729,79730,79732,79735],{"class":144,"line":33060},[142,79731,79420],{"class":152},[142,79733,79734],{"class":257},"'3998274'",[142,79736,31495],{"class":152},[142,79738,79739,79741,79744],{"class":144,"line":33066},[142,79740,79430],{"class":152},[142,79742,79743],{"class":257},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[142,79745,31495],{"class":152},[142,79747,79748,79750,79752],{"class":144,"line":33072},[142,79749,79440],{"class":152},[142,79751,79620],{"class":257},[142,79753,31495],{"class":152},[142,79755,79756,79758,79761],{"class":144,"line":33082},[142,79757,79450],{"class":152},[142,79759,79760],{"class":257},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[142,79762,31495],{"class":152},[142,79764,79765],{"class":144,"line":33088},[142,79766,77921],{"class":152},[142,79768,79769],{"class":144,"line":33099},[142,79770,53138],{"class":152},[142,79772,79773],{"class":144,"line":33105},[142,79774,2428],{"emptyLinePlaceholder":69},[142,79776,79777],{"class":144,"line":33115},[142,79778,79779],{"class":211},"    \u002F\u002F 1.渲染函数\n",[142,79781,79782,79784,79786,79788,79790],{"class":144,"line":33120},[142,79783,70113],{"class":148},[142,79785,70116],{"class":1991},[142,79787,153],{"class":152},[142,79789,3908],{"class":5245},[142,79791,12471],{"class":152},[142,79793,79794],{"class":144,"line":33126},[142,79795,79796],{"class":211},"      \u002F\u002F 声明空字符串\n",[142,79798,79799,79802,79805,79807],{"class":144,"line":33175},[142,79800,79801],{"class":148},"      let",[142,79803,79804],{"class":152}," str ",[142,79806,198],{"class":148},[142,79808,70133],{"class":257},[142,79810,79811],{"class":144,"line":33222},[142,79812,70138],{"class":211},[142,79814,79815,79817,79820,79822,79825,79828],{"class":144,"line":33227},[142,79816,58036],{"class":152},[142,79818,79819],{"class":1991},"forEach",[142,79821,153],{"class":152},[142,79823,79824],{"class":5245},"item",[142,79826,79827],{"class":148}," =>",[142,79829,15601],{"class":152},[142,79831,79832,79834,79837,79840,79842,79845,79847,79850,79853,79855],{"class":144,"line":33233},[142,79833,61299],{"class":148},[142,79835,79836],{"class":152}," { ",[142,79838,79839],{"class":201},"name",[142,79841,12464],{"class":152},[142,79843,79844],{"class":201},"price",[142,79846,12464],{"class":152},[142,79848,79849],{"class":201},"picture",[142,79851,79852],{"class":152}," } ",[142,79854,198],{"class":148},[142,79856,79857],{"class":152}," item\n",[142,79859,79860,79863,79865],{"class":144,"line":33252},[142,79861,79862],{"class":152},"        str ",[142,79864,9506],{"class":148},[142,79866,70197],{"class":257},[142,79868,79869],{"class":144,"line":33258},[142,79870,79871],{"class":257},"          \u003Cdiv class=\"item\">\n",[142,79873,79874,79877,79879],{"class":144,"line":33278},[142,79875,79876],{"class":257},"            \u003Cimg src=\"${",[142,79878,79849],{"class":152},[142,79880,79881],{"class":257},"}\" alt=\"\">\n",[142,79883,79884,79887,79889],{"class":144,"line":33284},[142,79885,79886],{"class":257},"            \u003Cp class=\"name\">${",[142,79888,79839],{"class":152},[142,79890,79891],{"class":257},"}\u003C\u002Fp>\n",[142,79893,79894,79897,79899],{"class":144,"line":33290},[142,79895,79896],{"class":257},"            \u003Cp class=\"price\">${",[142,79898,79844],{"class":152},[142,79900,79891],{"class":257},[142,79902,79903],{"class":144,"line":33300},[142,79904,79905],{"class":257},"          \u003C\u002Fdiv>\n",[142,79907,79908],{"class":144,"line":33305},[142,79909,79910],{"class":257},"        `\n",[142,79912,79913],{"class":144,"line":33311},[142,79914,64844],{"class":152},[142,79916,79917],{"class":144,"line":33327},[142,79918,79919],{"class":211},"      \u002F\u002F 追加给List\n",[142,79921,79922,79924,79926,79928,79931,79933,79935],{"class":144,"line":33372},[142,79923,55800],{"class":152},[142,79925,54428],{"class":1991},[142,79927,153],{"class":152},[142,79929,79930],{"class":257},"'.list'",[142,79932,74278],{"class":152},[142,79934,198],{"class":148},[142,79936,74014],{"class":152},[142,79938,79939],{"class":144,"line":33378},[142,79940,2215],{"class":152},[142,79942,79943],{"class":144,"line":33384},[142,79944,79945],{"class":211},"    \u002F\u002F 页面一打开就需要渲染\n",[142,79947,79948,79951],{"class":144,"line":33390},[142,79949,79950],{"class":1991},"    render",[142,79952,79953],{"class":152},"(goodsList)\n",[142,79955,79956],{"class":144,"line":33401},[142,79957,79958],{"class":211},"    \u002F\u002F 2.过滤筛选\n",[142,79960,79961,79963,79965,79967,79970,79972,79974,79976,79978,79980,79982,79984],{"class":144,"line":33407},[142,79962,52436],{"class":152},[142,79964,54428],{"class":1991},[142,79966,153],{"class":152},[142,79968,79969],{"class":257},"'.filter'",[142,79971,30855],{"class":152},[142,79973,57842],{"class":1991},[142,79975,153],{"class":152},[142,79977,57847],{"class":257},[142,79979,12464],{"class":152},[142,79981,227],{"class":5245},[142,79983,79827],{"class":148},[142,79985,15601],{"class":152},[142,79987,79988],{"class":144,"line":33413},[142,79989,79990],{"class":211},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[142,79992,79993,79995,79997,80000,80002,80004,80006,80008],{"class":144,"line":33419},[142,79994,58257],{"class":148},[142,79996,79836],{"class":152},[142,79998,79999],{"class":201},"tagName",[142,80001,12464],{"class":152},[142,80003,31566],{"class":201},[142,80005,79852],{"class":152},[142,80007,198],{"class":148},[142,80009,80010],{"class":152}," e.target\n",[142,80012,80013],{"class":144,"line":33437},[142,80014,80015],{"class":211},"      \u002F\u002F 判断\n",[142,80017,80018,80020,80022,80024,80026],{"class":144,"line":33451},[142,80019,54509],{"class":148},[142,80021,67063],{"class":152},[142,80023,54515],{"class":148},[142,80025,68285],{"class":257},[142,80027,12471],{"class":152},[142,80029,80030],{"class":144,"line":33460},[142,80031,80032],{"class":211},"        \u002F\u002F console.log(11)\n",[142,80034,80035],{"class":144,"line":33469},[142,80036,80037],{"class":211},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[142,80039,80040],{"class":144,"line":33478},[142,80041,80042],{"class":211},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[142,80044,80045,80047,80049,80051],{"class":144,"line":33487},[142,80046,51859],{"class":148},[142,80048,51862],{"class":152},[142,80050,198],{"class":148},[142,80052,80053],{"class":152}," goodsList\n",[142,80055,80056,80058,80061,80063,80066],{"class":144,"line":33493},[142,80057,2525],{"class":148},[142,80059,80060],{"class":152}," (dataset.index ",[142,80062,54515],{"class":148},[142,80064,80065],{"class":257}," '1'",[142,80067,12471],{"class":152},[142,80069,80070,80073,80075,80078,80081,80083,80085,80087,80090,80092,80094,80097,80099,80101,80103],{"class":144,"line":33499},[142,80071,80072],{"class":152},"          arr ",[142,80074,198],{"class":148},[142,80076,80077],{"class":152}," goodsList.",[142,80079,80080],{"class":1991},"filter",[142,80082,153],{"class":152},[142,80084,79824],{"class":5245},[142,80086,79827],{"class":148},[142,80088,80089],{"class":152}," item.price ",[142,80091,1738],{"class":148},[142,80093,4121],{"class":201},[142,80095,80096],{"class":148}," &&",[142,80098,80089],{"class":152},[142,80100,1616],{"class":148},[142,80102,5783],{"class":201},[142,80104,159],{"class":152},[142,80106,80107,80110,80112,80114,80116,80118,80121],{"class":144,"line":33507},[142,80108,80109],{"class":152},"        } ",[142,80111,1729],{"class":148},[142,80113,1732],{"class":148},[142,80115,80060],{"class":152},[142,80117,54515],{"class":148},[142,80119,80120],{"class":257}," '2'",[142,80122,12471],{"class":152},[142,80124,80125,80127,80129,80131,80133,80135,80137,80139,80141,80143,80145,80147,80149,80151,80154],{"class":144,"line":33512},[142,80126,80072],{"class":152},[142,80128,198],{"class":148},[142,80130,80077],{"class":152},[142,80132,80080],{"class":1991},[142,80134,153],{"class":152},[142,80136,79824],{"class":5245},[142,80138,79827],{"class":148},[142,80140,80089],{"class":152},[142,80142,1738],{"class":148},[142,80144,5783],{"class":201},[142,80146,80096],{"class":148},[142,80148,80089],{"class":152},[142,80150,1616],{"class":148},[142,80152,80153],{"class":201}," 300",[142,80155,159],{"class":152},[142,80157,80158,80160,80162,80164,80166,80168,80171],{"class":144,"line":33518},[142,80159,80109],{"class":152},[142,80161,1729],{"class":148},[142,80163,1732],{"class":148},[142,80165,80060],{"class":152},[142,80167,54515],{"class":148},[142,80169,80170],{"class":257}," '3'",[142,80172,12471],{"class":152},[142,80174,80175,80177,80179,80181,80183,80185,80187,80189,80191,80193,80195],{"class":144,"line":33529},[142,80176,80072],{"class":152},[142,80178,198],{"class":148},[142,80180,80077],{"class":152},[142,80182,80080],{"class":1991},[142,80184,153],{"class":152},[142,80186,79824],{"class":5245},[142,80188,79827],{"class":148},[142,80190,80089],{"class":152},[142,80192,1738],{"class":148},[142,80194,80153],{"class":201},[142,80196,159],{"class":152},[142,80198,80199],{"class":144,"line":33535},[142,80200,2557],{"class":152},[142,80202,80203],{"class":144,"line":33555},[142,80204,80205],{"class":211},"        \u002F\u002F 渲染函数\n",[142,80207,80208,80210],{"class":144,"line":33561},[142,80209,70437],{"class":1991},[142,80211,52441],{"class":152},[142,80213,80214],{"class":144,"line":33567},[142,80215,52427],{"class":152},[142,80217,80218],{"class":144,"line":33573},[142,80219,2428],{"emptyLinePlaceholder":69},[142,80221,80222],{"class":144,"line":33590},[142,80223,33490],{"class":152},[142,80225,80226,80228,80230],{"class":144,"line":33596},[142,80227,52446],{"class":152},[142,80229,51842],{"class":51329},[142,80231,51336],{"class":152},[142,80233,80234,80236,80238],{"class":144,"line":33602},[142,80235,51814],{"class":152},[142,80237,51829],{"class":51329},[142,80239,51336],{"class":152},[142,80241,80242],{"class":144,"line":33608},[142,80243,2428],{"emptyLinePlaceholder":69},[142,80245,80246,80248,80250],{"class":144,"line":33614},[142,80247,51814],{"class":152},[142,80249,50664],{"class":51329},[142,80251,51336],{"class":152},[84,80253,80255],{"id":80254},"_410-深入了解对象","4.10 深入了解对象",[113,80257,80259],{"id":80258},"_4101-创建对象","4.10.1 创建对象",[14,80261,80262],{},[29,80263],{"alt":31,"src":80264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80266,80267],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[113,80269,80271],{"id":80270},"_4102-构造函数","4.10.2 构造函数",[14,80273,80274,80277],{},[302,80275,80276],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80279,80280,80283],{},[302,80281,80282],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[133,80285,80287],{"className":50662,"code":80286,"language":50664,"meta":31,"style":31},"\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",[139,80288,80289,80297,80302,80323,80336,80348,80360,80364,80369,80396,80401,80428],{"__ignoreMap":31},[142,80290,80291,80293,80295],{"class":144,"line":145},[142,80292,1063],{"class":152},[142,80294,51842],{"class":51329},[142,80296,51336],{"class":152},[142,80298,80299],{"class":144,"line":64},[142,80300,80301],{"class":211},"\u002F\u002F例：\n",[142,80303,80304,80306,80309,80311,80313,80315,80317,80319,80321],{"class":144,"line":1208},[142,80305,54478],{"class":148},[142,80307,80308],{"class":1991}," Pig",[142,80310,153],{"class":152},[142,80312,79839],{"class":5245},[142,80314,531],{"class":152},[142,80316,70250],{"class":5245},[142,80318,531],{"class":152},[142,80320,70267],{"class":5245},[142,80322,12471],{"class":152},[142,80324,80325,80328,80331,80333],{"class":144,"line":1223},[142,80326,80327],{"class":201},"    this",[142,80329,80330],{"class":152},".name",[142,80332,198],{"class":148},[142,80334,80335],{"class":152},"name\n",[142,80337,80338,80340,80343,80345],{"class":144,"line":1229},[142,80339,80327],{"class":201},[142,80341,80342],{"class":152},".age",[142,80344,198],{"class":148},[142,80346,80347],{"class":152},"age\n",[142,80349,80350,80352,80355,80357],{"class":144,"line":1243},[142,80351,80327],{"class":201},[142,80353,80354],{"class":152},".gender",[142,80356,198],{"class":148},[142,80358,80359],{"class":152},"gender    \n",[142,80361,80362],{"class":144,"line":1249},[142,80363,1593],{"class":152},[142,80365,80366],{"class":144,"line":1340},[142,80367,80368],{"class":211},"\u002F\u002F创建佩奇对象\n",[142,80370,80371,80373,80376,80378,80380,80382,80385,80387,80389,80391,80394],{"class":144,"line":1346},[142,80372,6821],{"class":148},[142,80374,80375],{"class":201}," Peppa",[142,80377,11746],{"class":148},[142,80379,80308],{"class":1991},[142,80381,153],{"class":152},[142,80383,80384],{"class":257},"'佩奇'",[142,80386,531],{"class":152},[142,80388,497],{"class":201},[142,80390,531],{"class":152},[142,80392,80393],{"class":257},"'女'",[142,80395,159],{"class":152},[142,80397,80398],{"class":144,"line":1358},[142,80399,80400],{"class":211},"\u002F\u002F创建乔治对象\n",[142,80402,80403,80405,80408,80410,80412,80414,80417,80419,80421,80423,80426],{"class":144,"line":1640},[142,80404,6821],{"class":148},[142,80406,80407],{"class":201}," George",[142,80409,11746],{"class":148},[142,80411,80308],{"class":1991},[142,80413,153],{"class":152},[142,80415,80416],{"class":257},"'乔治'",[142,80418,531],{"class":152},[142,80420,224],{"class":201},[142,80422,531],{"class":152},[142,80424,80425],{"class":257},"'男'",[142,80427,159],{"class":152},[142,80429,80430,80432,80434],{"class":144,"line":1645},[142,80431,51814],{"class":152},[142,80433,51842],{"class":51329},[142,80435,51336],{"class":152},[14,80437,80438],{},[29,80439],{"alt":31,"src":80440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80442,80443],{},[29,80444],{"alt":31,"src":80445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80447,80448],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80450,80451],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80453,80454],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80456,80457],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80459,80460],{},"这里用等号是因为：对象.属性=值",[14,80462,80463],{},"①利用对象字面量创建对象",[14,80465,80466],{},"const o={",[14,80468,80469],{},"name:'pink'",[14,80471,80472],{},"} ②利用new Object创建对象",[14,80474,80475],{},"const o=new Object({name:'pink'})",[14,80477,80478],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80480,80481],{},"构造函数创建对象的执行过程：",[14,80483,80484],{},[29,80485],{"alt":31,"src":80486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[113,80488,80490],{"id":80489},"_4103-实例成员","4.10.3 实例成员",[14,80492,80493],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[96,80495,80496,80499,80502],{},[99,80497,80498],{},"实例对象的属性和方法即为实例成员",[99,80500,80501],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[99,80503,80504],{},"构造函数创建的实例对象彼此独立互不影响",[113,80506,80508],{"id":80507},"_4104-静态成员","4.10.4 静态成员",[14,80510,80511],{},[29,80512],{"alt":31,"src":80513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80515,80516],{},"静态成员有Date.now() Math.PI Math.random()",[14,80518,80519],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80521,80522],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80524,80525],{},"function Pig(name) n {",[14,80527,80528],{},"this.name=name",[14,80530,1099],{},[14,80532,80533],{},"Pig.eyes=2",[14,80535,80536],{},"Pig.sayHai=function () { console.log(this) }",[14,80538,80539],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80541,80542],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80544,11361],{},[96,80546,80547,80550,80553,80556,80559],{},[99,80548,80549],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[99,80551,80552],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[99,80554,80555],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[99,80557,80558],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[99,80560,80561],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80563,80564],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[113,80566,80568],{"id":80567},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80570,80571],{},"内置构造函数包含：",[14,80573,80574],{},[29,80575],{"alt":31,"src":80576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80578,80579],{},[29,80580],{"alt":31,"src":80581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80583,80584],{},"这些基本数据类型，js对他们进行了包装",[51842,80586,80587],{},"\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",[22027,80589,80591],{"id":80590},"_41051-object","4.10.5.1 Object",[14,80593,80594],{},"Object 是内置的构造函数，用于创建普通对象",[14,80596,80597],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[133,80599,80601],{"className":50662,"code":80600,"language":50664,"meta":31,"style":31},"const user=new Object({name:'小明',age:15})\n",[139,80602,80603],{"__ignoreMap":31},[142,80604,80605],{"class":144,"line":145},[142,80606,80600],{"class":152},[14,80608,80609],{},"三个常用的静态方法：",[22939,80611,80613],{"id":80612},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80615,80616],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80618,80619],{},[29,80620],{"alt":31,"src":80621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80623,80624],{},[29,80625],{"alt":31,"src":80626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[133,80628,80630],{"className":53096,"code":80629,"language":53098,"meta":31,"style":31},"\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",[139,80631,80632,80640,80648,80653,80658,80663,80668,80673,80678,80686],{"__ignoreMap":31},[142,80633,80634,80636,80638],{"class":144,"line":145},[142,80635,1063],{"class":152},[142,80637,51829],{"class":51329},[142,80639,51336],{"class":152},[142,80641,80642,80644,80646],{"class":144,"line":64},[142,80643,52173],{"class":152},[142,80645,51842],{"class":51329},[142,80647,51336],{"class":152},[142,80649,80650],{"class":144,"line":1208},[142,80651,80652],{"class":152},"    const o = { name: 'pink', age: 6 }\n",[142,80654,80655],{"class":144,"line":1223},[142,80656,80657],{"class":152},"    \u002F\u002F 获得所有属性名\n",[142,80659,80660],{"class":144,"line":1229},[142,80661,80662],{"class":152},"    const arr = Object.keys(o)\n",[142,80664,80665],{"class":144,"line":1243},[142,80666,80667],{"class":152},"    console.log(arr)\n",[142,80669,80670],{"class":144,"line":1249},[142,80671,80672],{"class":152},"    \u002F\u002F 获得所有属性值\n",[142,80674,80675],{"class":144,"line":1340},[142,80676,80677],{"class":152},"    console.log(Object.values(o))\n",[142,80679,80680,80682,80684],{"class":144,"line":1346},[142,80681,52446],{"class":152},[142,80683,51842],{"class":51329},[142,80685,51336],{"class":152},[142,80687,80688,80690,80692],{"class":144,"line":1358},[142,80689,51814],{"class":152},[142,80691,51829],{"class":51329},[142,80693,51336],{"class":152},[22939,80695,80697],{"id":80696},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80699,80700],{},"Object.assign(oo,o)",[14,80702,80703],{},"后的东西添加给前 是追加",[14,80705,80706],{},[29,80707],{"alt":31,"src":80708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80710,80711],{},[29,80712],{"alt":31,"src":80713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[133,80715,80717],{"className":53096,"code":80716,"language":53098,"meta":31,"style":31},"\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",[139,80718,80719,80727,80735,80739,80743,80747,80751,80755,80759,80764,80769,80774,80779,80784,80792],{"__ignoreMap":31},[142,80720,80721,80723,80725],{"class":144,"line":145},[142,80722,1063],{"class":152},[142,80724,51829],{"class":51329},[142,80726,51336],{"class":152},[142,80728,80729,80731,80733],{"class":144,"line":64},[142,80730,52173],{"class":152},[142,80732,51842],{"class":51329},[142,80734,51336],{"class":152},[142,80736,80737],{"class":144,"line":1208},[142,80738,80652],{"class":152},[142,80740,80741],{"class":144,"line":1223},[142,80742,80657],{"class":152},[142,80744,80745],{"class":144,"line":1229},[142,80746,80662],{"class":152},[142,80748,80749],{"class":144,"line":1243},[142,80750,80667],{"class":152},[142,80752,80753],{"class":144,"line":1249},[142,80754,80672],{"class":152},[142,80756,80757],{"class":144,"line":1340},[142,80758,80677],{"class":152},[142,80760,80761],{"class":144,"line":1346},[142,80762,80763],{"class":152},"    const oo = {}\n",[142,80765,80766],{"class":144,"line":1358},[142,80767,80768],{"class":152},"    Object.assign(oo, o)\n",[142,80770,80771],{"class":144,"line":1640},[142,80772,80773],{"class":152},"    console.log(oo)\n",[142,80775,80776],{"class":144,"line":1645},[142,80777,80778],{"class":152},"    Object.assign(o, { gender: '女' })\n",[142,80780,80781],{"class":144,"line":1651},[142,80782,80783],{"class":152},"    console.log(o)\n",[142,80785,80786,80788,80790],{"class":144,"line":1656},[142,80787,52446],{"class":152},[142,80789,51842],{"class":51329},[142,80791,51336],{"class":152},[142,80793,80794,80796,80798],{"class":144,"line":1670},[142,80795,51814],{"class":152},[142,80797,51829],{"class":51329},[142,80799,51336],{"class":152},[14,80801,80802],{},[29,80803],{"alt":31,"src":80804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22027,80806,80808],{"id":80807},"_41052-array","4.10.5.2 Array",[14,80810,80811],{},"Array 是内置的构造函数，用于创建数组",[14,80813,80814],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[133,80816,80818],{"className":50662,"code":80817,"language":50664,"meta":31,"style":31},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[139,80819,80820,80825],{"__ignoreMap":31},[142,80821,80822],{"class":144,"line":145},[142,80823,80824],{"class":152},"const arr=new Array(3,5)\n",[142,80826,80827],{"class":144,"line":64},[142,80828,80829],{"class":152},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80831,80832],{},"Array的实例方法，这个方法是实例成员",[14,80834,80835],{},[29,80836],{"alt":31,"src":80837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22939,80839,80841],{"id":80840},"_410521-reduce","4.10.5.2.1 reduce",[14,80843,80844],{},[29,80845],{"alt":31,"src":80846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[133,80848,80850],{"className":53096,"code":80849,"language":53098,"meta":31,"style":31},"\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",[139,80851,80852,80860,80868,80873,80878,80883,80888,80892,80897,80902,80907,80911,80916,80921,80925,80930,80935,80940,80948],{"__ignoreMap":31},[142,80853,80854,80856,80858],{"class":144,"line":145},[142,80855,1063],{"class":152},[142,80857,51829],{"class":51329},[142,80859,51336],{"class":152},[142,80861,80862,80864,80866],{"class":144,"line":64},[142,80863,52173],{"class":152},[142,80865,51842],{"class":51329},[142,80867,51336],{"class":152},[142,80869,80870],{"class":144,"line":1208},[142,80871,80872],{"class":152},"    const arr = [1, 5, 8]\n",[142,80874,80875],{"class":144,"line":1223},[142,80876,80877],{"class":152},"    \u002F\u002F 1.没有初始值\n",[142,80879,80880],{"class":144,"line":1229},[142,80881,80882],{"class":152},"    const total = arr.reduce(function (prev, current) {\n",[142,80884,80885],{"class":144,"line":1243},[142,80886,80887],{"class":152},"      return prev + current\n",[142,80889,80890],{"class":144,"line":1249},[142,80891,33490],{"class":152},[142,80893,80894],{"class":144,"line":1340},[142,80895,80896],{"class":152},"    console.log(total)   \u002F\u002F14\n",[142,80898,80899],{"class":144,"line":1346},[142,80900,80901],{"class":152},"    \u002F\u002F 2.有初始值\n",[142,80903,80904],{"class":144,"line":1358},[142,80905,80906],{"class":152},"    const total1 = arr.reduce(function (prev, current) {\n",[142,80908,80909],{"class":144,"line":1640},[142,80910,80887],{"class":152},[142,80912,80913],{"class":144,"line":1645},[142,80914,80915],{"class":152},"    }, 10)\n",[142,80917,80918],{"class":144,"line":1651},[142,80919,80920],{"class":152},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[142,80922,80923],{"class":144,"line":1656},[142,80924,2428],{"emptyLinePlaceholder":69},[142,80926,80927],{"class":144,"line":1670},[142,80928,80929],{"class":152},"    \u002F\u002F 3.箭头函数写法\n",[142,80931,80932],{"class":144,"line":1675},[142,80933,80934],{"class":152},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[142,80936,80937],{"class":144,"line":1681},[142,80938,80939],{"class":152},"    console.log(total2)   \u002F\u002F24\n",[142,80941,80942,80944,80946],{"class":144,"line":1702},[142,80943,52446],{"class":152},[142,80945,51842],{"class":51329},[142,80947,51336],{"class":152},[142,80949,80950,80952,80954],{"class":144,"line":1707},[142,80951,51814],{"class":152},[142,80953,51829],{"class":51329},[142,80955,51336],{"class":152},[14,80957,80958],{},"执行过程：",[96,80960,80961,80964,80967],{},[99,80962,80963],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[99,80965,80966],{},"每一次循环，把返回值给作为下一次循环的上一次值",[99,80968,80969],{},"如果有起始值，则起始值作为上一次值",[133,80971,80973],{"className":53096,"code":80972,"language":53098,"meta":31,"style":31},"\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",[139,80974,80975,80983,80991,80995,80999,81003,81007,81011,81015,81020,81025,81030,81035,81040,81044,81048,81052,81056,81060,81064,81069,81073,81078,81082,81087,81092,81096,81100,81104,81112],{"__ignoreMap":31},[142,80976,80977,80979,80981],{"class":144,"line":145},[142,80978,1063],{"class":152},[142,80980,51829],{"class":51329},[142,80982,51336],{"class":152},[142,80984,80985,80987,80989],{"class":144,"line":64},[142,80986,52173],{"class":152},[142,80988,51842],{"class":51329},[142,80990,51336],{"class":152},[142,80992,80993],{"class":144,"line":1208},[142,80994,80872],{"class":152},[142,80996,80997],{"class":144,"line":1223},[142,80998,80877],{"class":152},[142,81000,81001],{"class":144,"line":1229},[142,81002,80882],{"class":152},[142,81004,81005],{"class":144,"line":1243},[142,81006,80887],{"class":152},[142,81008,81009],{"class":144,"line":1249},[142,81010,33490],{"class":152},[142,81012,81013],{"class":144,"line":1340},[142,81014,80896],{"class":152},[142,81016,81017],{"class":144,"line":1346},[142,81018,81019],{"class":152},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[142,81021,81022],{"class":144,"line":1358},[142,81023,81024],{"class":152},"    \u002F\u002F     1              5                    6\n",[142,81026,81027],{"class":144,"line":1640},[142,81028,81029],{"class":152},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[142,81031,81032],{"class":144,"line":1645},[142,81033,81034],{"class":152},"    \u002F\u002F     6              8                    14\n",[142,81036,81037],{"class":144,"line":1651},[142,81038,81039],{"class":152},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[142,81041,81042],{"class":144,"line":1656},[142,81043,80901],{"class":152},[142,81045,81046],{"class":144,"line":1670},[142,81047,80906],{"class":152},[142,81049,81050],{"class":144,"line":1675},[142,81051,80887],{"class":152},[142,81053,81054],{"class":144,"line":1681},[142,81055,80915],{"class":152},[142,81057,81058],{"class":144,"line":1702},[142,81059,80920],{"class":152},[142,81061,81062],{"class":144,"line":1707},[142,81063,81019],{"class":152},[142,81065,81066],{"class":144,"line":1721},[142,81067,81068],{"class":152},"    \u002F\u002F     10             1                     11\n",[142,81070,81071],{"class":144,"line":1726},[142,81072,81029],{"class":152},[142,81074,81075],{"class":144,"line":1755},[142,81076,81077],{"class":152},"    \u002F\u002F     11             5                    16\n",[142,81079,81080],{"class":144,"line":1760},[142,81081,81029],{"class":152},[142,81083,81084],{"class":144,"line":1777},[142,81085,81086],{"class":152},"    \u002F\u002F     16             8                    24\n",[142,81088,81089],{"class":144,"line":1782},[142,81090,81091],{"class":152},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[142,81093,81094],{"class":144,"line":1787},[142,81095,80929],{"class":152},[142,81097,81098],{"class":144,"line":1792},[142,81099,80934],{"class":152},[142,81101,81102],{"class":144,"line":1806},[142,81103,80939],{"class":152},[142,81105,81106,81108,81110],{"class":144,"line":1811},[142,81107,52446],{"class":152},[142,81109,51842],{"class":51329},[142,81111,51336],{"class":152},[142,81113,81114,81116,81118],{"class":144,"line":2605},[142,81115,51814],{"class":152},[142,81117,51829],{"class":51329},[142,81119,51336],{"class":152},[22939,81121,81123],{"id":81122},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81125,81126],{},[29,81127],{"alt":31,"src":81128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[133,81130,81132],{"className":53096,"code":81131,"language":53098,"meta":31,"style":31},"\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",[139,81133,81134,81142,81150,81155,81160,81165,81170,81174,81179,81184,81189,81194,81199,81204,81208,81213,81217,81222,81230],{"__ignoreMap":31},[142,81135,81136,81138,81140],{"class":144,"line":145},[142,81137,1063],{"class":152},[142,81139,51829],{"class":51329},[142,81141,51336],{"class":152},[142,81143,81144,81146,81148],{"class":144,"line":64},[142,81145,52173],{"class":152},[142,81147,51842],{"class":51329},[142,81149,51336],{"class":152},[142,81151,81152],{"class":144,"line":1208},[142,81153,81154],{"class":152},"    const arr = [\n",[142,81156,81157],{"class":144,"line":1223},[142,81158,81159],{"class":152},"      { name: '张三', salary: 10000 },\n",[142,81161,81162],{"class":144,"line":1229},[142,81163,81164],{"class":152},"      { name: '李四', salary: 10000 },\n",[142,81166,81167],{"class":144,"line":1243},[142,81168,81169],{"class":152},"      { name: '王五', salary: 10000 }\n",[142,81171,81172],{"class":144,"line":1249},[142,81173,53138],{"class":152},[142,81175,81176],{"class":144,"line":1340},[142,81177,81178],{"class":152},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[142,81180,81181],{"class":144,"line":1346},[142,81182,81183],{"class":152},"    \u002F\u002F prev是累计值\n",[142,81185,81186],{"class":144,"line":1358},[142,81187,81188],{"class":152},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[142,81190,81191],{"class":144,"line":1640},[142,81192,81193],{"class":152},"    console.log(total)\n",[142,81195,81196],{"class":144,"line":1645},[142,81197,81198],{"class":152},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[142,81200,81201],{"class":144,"line":1651},[142,81202,81203],{"class":152},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[142,81205,81206],{"class":144,"line":1656},[142,81207,81198],{"class":152},[142,81209,81210],{"class":144,"line":1670},[142,81211,81212],{"class":152},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[142,81214,81215],{"class":144,"line":1675},[142,81216,81198],{"class":152},[142,81218,81219],{"class":144,"line":1681},[142,81220,81221],{"class":152},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[142,81223,81224,81226,81228],{"class":144,"line":1702},[142,81225,52446],{"class":152},[142,81227,51842],{"class":51329},[142,81229,51336],{"class":152},[142,81231,81232,81234,81236],{"class":144,"line":1707},[142,81233,51814],{"class":152},[142,81235,51829],{"class":51329},[142,81237,51336],{"class":152},[22939,81239,81241],{"id":81240},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81243,81244],{},[29,81245],{"alt":31,"src":81246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81248,81249],{},[29,81250],{"alt":31,"src":81251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[96,81253,81254],{},[99,81255,81256],{},"find()",[14,81258,81259],{},"循环查找，找到第一个就ok",[14,81261,81262],{},[391,81263,81266],{"href":81264,"rel":81265},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23894],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[133,81268,81270],{"className":50662,"code":81269,"language":50664,"meta":31,"style":31},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[139,81271,81272,81277,81282],{"__ignoreMap":31},[142,81273,81274],{"class":144,"line":145},[142,81275,81276],{"class":152},"const array1 = [5, 12, 8, 130, 44]\n",[142,81278,81279],{"class":144,"line":64},[142,81280,81281],{"class":152},"const found = array1.find((element) => element > 10)\n",[142,81283,81284],{"class":144,"line":1208},[142,81285,81286],{"class":152},"console.log(found)  \u002F\u002F12\n",[14,81288,81289,81291,81292,81297,81298,81301,81302,81304,81305,81310,81311,81313,81314,81316,81317,81319,81320],{},[139,81290,81256],{}," 方法是一个",[391,81293,81296],{"href":81294,"rel":81295},"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",[23894],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[139,81299,81300],{},"callbackFn"," 函数，直到 ",[139,81303,81300],{}," 返回一个",[391,81306,81309],{"href":81307,"rel":81308},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23894],"真值","。然后 ",[139,81312,81256],{}," 返回该元素并停止迭代数组。如果 ",[139,81315,81300],{}," 从未返回真值，则 ",[139,81318,81256],{}," 返回 ",[139,81321,81322],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[133,81324,81326],{"className":53096,"code":81325,"language":53098,"meta":31,"style":31},"\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",[139,81327,81328,81336,81344,81349,81354,81359,81363,81368,81373,81377,81382,81387,81391,81395,81400,81405,81409,81413,81418,81423,81428,81433,81438,81442,81447,81452,81457,81462,81466,81471,81479],{"__ignoreMap":31},[142,81329,81330,81332,81334],{"class":144,"line":145},[142,81331,1063],{"class":152},[142,81333,51829],{"class":51329},[142,81335,51336],{"class":152},[142,81337,81338,81340,81342],{"class":144,"line":64},[142,81339,52173],{"class":152},[142,81341,51842],{"class":51329},[142,81343,51336],{"class":152},[142,81345,81346],{"class":144,"line":1208},[142,81347,81348],{"class":152},"    const arr = ['red', 'blue', 'green']\n",[142,81350,81351],{"class":144,"line":1223},[142,81352,81353],{"class":152},"    const found = arr.find(item => item === 'pink')\n",[142,81355,81356],{"class":144,"line":1229},[142,81357,81358],{"class":152},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[142,81360,81361],{"class":144,"line":1243},[142,81362,2428],{"emptyLinePlaceholder":69},[142,81364,81365],{"class":144,"line":1249},[142,81366,81367],{"class":152},"    \u002F\u002F 使用场景，用于查找数据\n",[142,81369,81370],{"class":144,"line":1340},[142,81371,81372],{"class":152},"    const arr1 = [\n",[142,81374,81375],{"class":144,"line":1346},[142,81376,79415],{"class":152},[142,81378,81379],{"class":144,"line":1358},[142,81380,81381],{"class":152},"        name: '小米',\n",[142,81383,81384],{"class":144,"line":1640},[142,81385,81386],{"class":152},"        price: 1999\n",[142,81388,81389],{"class":144,"line":1645},[142,81390,77921],{"class":152},[142,81392,81393],{"class":144,"line":1651},[142,81394,79415],{"class":152},[142,81396,81397],{"class":144,"line":1656},[142,81398,81399],{"class":152},"        name: '华为',\n",[142,81401,81402],{"class":144,"line":1670},[142,81403,81404],{"class":152},"        price: 3999\n",[142,81406,81407],{"class":144,"line":1675},[142,81408,52427],{"class":152},[142,81410,81411],{"class":144,"line":1681},[142,81412,53138],{"class":152},[142,81414,81415],{"class":144,"line":1702},[142,81416,81417],{"class":152},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[142,81419,81420],{"class":144,"line":1707},[142,81421,81422],{"class":152},"    \u002F\u002F const found1 = arr1.find(item => {\n",[142,81424,81425],{"class":144,"line":1721},[142,81426,81427],{"class":152},"    \u002F\u002F   if (item.name === '小米') {\n",[142,81429,81430],{"class":144,"line":1726},[142,81431,81432],{"class":152},"    \u002F\u002F     return item\n",[142,81434,81435],{"class":144,"line":1755},[142,81436,81437],{"class":152},"    \u002F\u002F   }\n",[142,81439,81440],{"class":144,"line":1760},[142,81441,63319],{"class":152},[142,81443,81444],{"class":144,"line":1777},[142,81445,81446],{"class":152},"    \u002F\u002F 另一种写法\n",[142,81448,81449],{"class":144,"line":1782},[142,81450,81451],{"class":152},"    const found1 = arr1.find(item => {\n",[142,81453,81454],{"class":144,"line":1787},[142,81455,81456],{"class":152},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[142,81458,81459],{"class":144,"line":1792},[142,81460,81461],{"class":152},"      return item.name = '小米'\n",[142,81463,81464],{"class":144,"line":1806},[142,81465,33490],{"class":152},[142,81467,81468],{"class":144,"line":1811},[142,81469,81470],{"class":152},"    console.log(found1)\n",[142,81472,81473,81475,81477],{"class":144,"line":2605},[142,81474,52446],{"class":152},[142,81476,51842],{"class":51329},[142,81478,51336],{"class":152},[142,81480,81481,81483,81485],{"class":144,"line":2619},[142,81482,51814],{"class":152},[142,81484,51829],{"class":51329},[142,81486,51336],{"class":152},[14,81488,81489],{},[29,81490],{"alt":31,"src":81491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81493,81494],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[96,81496,81497],{"start":64},[99,81498,81499],{},"every()返回的是布尔值",[14,81501,81502],{},[391,81503,81506],{"href":81504,"rel":81505},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23894],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81508,81509],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81511,81512],{},"some是只有有一个就没问题",[14,81514,81515],{},"every是必须全是才行",[133,81517,81521],{"className":81518,"code":81519,"language":81520,"meta":31,"style":31},"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",[139,81522,81523,81539,81553,81557,81566],{"__ignoreMap":31},[142,81524,81525,81527,81530,81532,81534,81537],{"class":144,"line":145},[142,81526,54478],{"class":148},[142,81528,81529],{"class":152}," isBigEnough(element, ",[142,81531,74087],{"class":148},[142,81533,12464],{"class":152},[142,81535,81536],{"class":148},"array",[142,81538,12471],{"class":152},[142,81540,81541,81544,81547,81549,81551],{"class":144,"line":64},[142,81542,81543],{"class":148},"  return",[142,81545,81546],{"class":152}," element ",[142,81548,1738],{"class":148},[142,81550,2066],{"class":201},[142,81552,1319],{"class":152},[142,81554,81555],{"class":144,"line":1208},[142,81556,1593],{"class":152},[142,81558,81559,81562,81564],{"class":144,"line":1223},[142,81560,81561],{"class":152},"[12, 5, 8, 130, 44].every(isBigEnough); ",[142,81563,33358],{"class":148},[142,81565,54545],{"class":152},[142,81567,81568,81571,81573],{"class":144,"line":1229},[142,81569,81570],{"class":152},"[12, 54, 18, 130, 44].every(isBigEnough); ",[142,81572,33358],{"class":148},[142,81574,57969],{"class":152},[133,81576,81578],{"className":53096,"code":81577,"language":53098,"meta":31,"style":31},"\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",[139,81579,81580,81588,81596,81601,81605,81610,81615,81623],{"__ignoreMap":31},[142,81581,81582,81584,81586],{"class":144,"line":145},[142,81583,1063],{"class":152},[142,81585,51829],{"class":51329},[142,81587,51336],{"class":152},[142,81589,81590,81592,81594],{"class":144,"line":64},[142,81591,52173],{"class":152},[142,81593,51842],{"class":51329},[142,81595,51336],{"class":152},[142,81597,81598],{"class":144,"line":1208},[142,81599,81600],{"class":152},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[142,81602,81603],{"class":144,"line":1223},[142,81604,78351],{"class":152},[142,81606,81607],{"class":144,"line":1229},[142,81608,81609],{"class":152},"    const flag = arr.every(item => item >= 10)\n",[142,81611,81612],{"class":144,"line":1243},[142,81613,81614],{"class":152},"    console.log(flag)    \u002F\u002Ftrue\n",[142,81616,81617,81619,81621],{"class":144,"line":1249},[142,81618,52446],{"class":152},[142,81620,51842],{"class":51329},[142,81622,51336],{"class":152},[142,81624,81625,81627,81629],{"class":144,"line":1340},[142,81626,51814],{"class":152},[142,81628,51829],{"class":51329},[142,81630,51336],{"class":152},[133,81632,81634],{"className":53096,"code":81633,"language":53098,"meta":31,"style":31},"\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",[139,81635,81636,81644,81652,81656,81661,81666,81671,81679],{"__ignoreMap":31},[142,81637,81638,81640,81642],{"class":144,"line":145},[142,81639,1063],{"class":152},[142,81641,51829],{"class":51329},[142,81643,51336],{"class":152},[142,81645,81646,81648,81650],{"class":144,"line":64},[142,81647,52173],{"class":152},[142,81649,51842],{"class":51329},[142,81651,51336],{"class":152},[142,81653,81654],{"class":144,"line":1208},[142,81655,81600],{"class":152},[142,81657,81658],{"class":144,"line":1223},[142,81659,81660],{"class":152},"    const arr = [10, 0, 5]\n",[142,81662,81663],{"class":144,"line":1229},[142,81664,81665],{"class":152},"    const flag = arr.some(item => item >= 10)\n",[142,81667,81668],{"class":144,"line":1243},[142,81669,81670],{"class":152},"    console.log(flag)   \u002F\u002Ftrue\n",[142,81672,81673,81675,81677],{"class":144,"line":1249},[142,81674,52446],{"class":152},[142,81676,51842],{"class":51329},[142,81678,51336],{"class":152},[142,81680,81681,81683,81685],{"class":144,"line":1340},[142,81682,51814],{"class":152},[142,81684,51829],{"class":51329},[142,81686,51336],{"class":152},[22939,81688,81690],{"id":81689},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81692,81693],{},[29,81694],{"alt":31,"src":81695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[133,81697,81699],{"className":50662,"code":81698,"language":50664,"meta":31,"style":31},"\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",[139,81700,81701,81711,81725,81729,81737,81751,81771,81783,81791,81798,81810,81822,81834,81846,81856,81866,81870,81878,81886,81890,81898,81910,81918,81940,81945,81950,81983,81991,81999,82003],{"__ignoreMap":31},[142,81702,81703,81705,81707,81709],{"class":144,"line":145},[142,81704,51326],{"class":152},[142,81706,51330],{"class":51329},[142,81708,51333],{"class":1991},[142,81710,51336],{"class":152},[142,81712,81713,81715,81717,81719,81721,81723],{"class":144,"line":64},[142,81714,1063],{"class":152},[142,81716,50664],{"class":51329},[142,81718,51345],{"class":1991},[142,81720,198],{"class":152},[142,81722,51350],{"class":257},[142,81724,51336],{"class":152},[142,81726,81727],{"class":144,"line":1208},[142,81728,2428],{"emptyLinePlaceholder":69},[142,81730,81731,81733,81735],{"class":144,"line":1223},[142,81732,1063],{"class":152},[142,81734,51363],{"class":51329},[142,81736,51336],{"class":152},[142,81738,81739,81741,81743,81745,81747,81749],{"class":144,"line":1229},[142,81740,52173],{"class":152},[142,81742,51373],{"class":51329},[142,81744,51376],{"class":1991},[142,81746,198],{"class":152},[142,81748,51381],{"class":257},[142,81750,51336],{"class":152},[142,81752,81753,81755,81757,81759,81761,81763,81765,81767,81769],{"class":144,"line":1243},[142,81754,52173],{"class":152},[142,81756,51373],{"class":51329},[142,81758,14949],{"class":1991},[142,81760,198],{"class":152},[142,81762,51420],{"class":257},[142,81764,51400],{"class":1991},[142,81766,198],{"class":152},[142,81768,51427],{"class":257},[142,81770,51336],{"class":152},[142,81772,81773,81775,81777,81779,81781],{"class":144,"line":1249},[142,81774,52173],{"class":152},[142,81776,51436],{"class":51329},[142,81778,51439],{"class":152},[142,81780,51436],{"class":51329},[142,81782,51336],{"class":152},[142,81784,81785,81787,81789],{"class":144,"line":1340},[142,81786,52173],{"class":152},[142,81788,5155],{"class":51329},[142,81790,51336],{"class":152},[142,81792,81793,81796],{"class":144,"line":1346},[142,81794,81795],{"class":51329},"    div",[142,81797,15601],{"class":152},[142,81799,81800,81802,81804,81806,81808],{"class":144,"line":1358},[142,81801,54800],{"class":201},[142,81803,51466],{"class":152},[142,81805,1750],{"class":201},[142,81807,51521],{"class":148},[142,81809,1319],{"class":152},[142,81811,81812,81814,81816,81818,81820],{"class":144,"line":1640},[142,81813,54814],{"class":201},[142,81815,51466],{"class":152},[142,81817,554],{"class":201},[142,81819,51521],{"class":148},[142,81821,1319],{"class":152},[142,81823,81824,81826,81828,81830,81832],{"class":144,"line":1645},[142,81825,57388],{"class":201},[142,81827,51466],{"class":152},[142,81829,554],{"class":201},[142,81831,51521],{"class":148},[142,81833,1319],{"class":152},[142,81835,81836,81838,81840,81842,81844],{"class":144,"line":1651},[142,81837,65162],{"class":201},[142,81839,51466],{"class":152},[142,81841,651],{"class":201},[142,81843,51521],{"class":148},[142,81845,1319],{"class":152},[142,81847,81848,81850,81852,81854],{"class":144,"line":1656},[142,81849,57315],{"class":201},[142,81851,51466],{"class":152},[142,81853,51621],{"class":201},[142,81855,1319],{"class":152},[142,81857,81858,81860,81862,81864],{"class":144,"line":1670},[142,81859,54913],{"class":201},[142,81861,51466],{"class":152},[142,81863,51674],{"class":201},[142,81865,1319],{"class":152},[142,81867,81868],{"class":144,"line":1675},[142,81869,2215],{"class":152},[142,81871,81872,81874,81876],{"class":144,"line":1681},[142,81873,52446],{"class":152},[142,81875,5155],{"class":51329},[142,81877,51336],{"class":152},[142,81879,81880,81882,81884],{"class":144,"line":1702},[142,81881,51814],{"class":152},[142,81883,51363],{"class":51329},[142,81885,51336],{"class":152},[142,81887,81888],{"class":144,"line":1707},[142,81889,2428],{"emptyLinePlaceholder":69},[142,81891,81892,81894,81896],{"class":144,"line":1721},[142,81893,1063],{"class":152},[142,81895,51829],{"class":51329},[142,81897,51336],{"class":152},[142,81899,81900,81902,81904,81906,81908],{"class":144,"line":1726},[142,81901,52173],{"class":152},[142,81903,51640],{"class":51329},[142,81905,55343],{"class":152},[142,81907,51640],{"class":51329},[142,81909,51336],{"class":152},[142,81911,81912,81914,81916],{"class":144,"line":1755},[142,81913,52173],{"class":152},[142,81915,51842],{"class":51329},[142,81917,51336],{"class":152},[142,81919,81920,81922,81925,81927,81930,81933,81935,81938],{"class":144,"line":1760},[142,81921,11250],{"class":148},[142,81923,81924],{"class":201}," spec",[142,81926,13593],{"class":148},[142,81928,81929],{"class":152}," { size: ",[142,81931,81932],{"class":257},"'40cm*40cm'",[142,81934,55493],{"class":152},[142,81936,81937],{"class":257},"'黑色'",[142,81939,55633],{"class":152},[142,81941,81942],{"class":144,"line":1777},[142,81943,81944],{"class":211},"    \u002F\u002F const arr = Object.values(spec)\n",[142,81946,81947],{"class":144,"line":1782},[142,81948,81949],{"class":211},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[142,81951,81952,81954,81956,81958,81961,81963,81965,81968,81971,81974,81976,81978,81981],{"class":144,"line":1787},[142,81953,52436],{"class":152},[142,81955,54428],{"class":1991},[142,81957,153],{"class":152},[142,81959,81960],{"class":257},"'div'",[142,81962,74278],{"class":152},[142,81964,198],{"class":148},[142,81966,81967],{"class":152}," Object.",[142,81969,81970],{"class":1991},"values",[142,81972,81973],{"class":152},"(spec).",[142,81975,74252],{"class":1991},[142,81977,153],{"class":152},[142,81979,81980],{"class":257},"'\u002F'",[142,81982,159],{"class":152},[142,81984,81985,81987,81989],{"class":144,"line":1792},[142,81986,52446],{"class":152},[142,81988,51842],{"class":51329},[142,81990,51336],{"class":152},[142,81992,81993,81995,81997],{"class":144,"line":1806},[142,81994,51814],{"class":152},[142,81996,51829],{"class":51329},[142,81998,51336],{"class":152},[142,82000,82001],{"class":144,"line":1811},[142,82002,2428],{"emptyLinePlaceholder":69},[142,82004,82005,82007,82009],{"class":144,"line":2605},[142,82006,51814],{"class":152},[142,82008,50664],{"class":51329},[142,82010,51336],{"class":152},[14,82012,82013],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22939,82015,82017],{"id":82016},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82019,82020],{},"静态方法，将伪数组转换为真数组",[14,82022,82023],{},[29,82024],{"alt":31,"src":82025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[133,82027,82029],{"className":53096,"code":82028,"language":53098,"meta":31,"style":31},"\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",[139,82030,82031,82039,82047,82059,82071,82083,82091,82099,82104,82109,82114,82119,82127],{"__ignoreMap":31},[142,82032,82033,82035,82037],{"class":144,"line":145},[142,82034,1063],{"class":152},[142,82036,51829],{"class":51329},[142,82038,51336],{"class":152},[142,82040,82041,82043,82045],{"class":144,"line":64},[142,82042,52173],{"class":152},[142,82044,1160],{"class":51329},[142,82046,51336],{"class":152},[142,82048,82049,82051,82053,82055,82057],{"class":144,"line":1208},[142,82050,51370],{"class":152},[142,82052,99],{"class":51329},[142,82054,55343],{"class":152},[142,82056,99],{"class":51329},[142,82058,51336],{"class":152},[142,82060,82061,82063,82065,82067,82069],{"class":144,"line":1223},[142,82062,51370],{"class":152},[142,82064,99],{"class":51329},[142,82066,55343],{"class":152},[142,82068,99],{"class":51329},[142,82070,51336],{"class":152},[142,82072,82073,82075,82077,82079,82081],{"class":144,"line":1229},[142,82074,51370],{"class":152},[142,82076,99],{"class":51329},[142,82078,55343],{"class":152},[142,82080,99],{"class":51329},[142,82082,51336],{"class":152},[142,82084,82085,82087,82089],{"class":144,"line":1243},[142,82086,52446],{"class":152},[142,82088,1160],{"class":51329},[142,82090,51336],{"class":152},[142,82092,82093,82095,82097],{"class":144,"line":1249},[142,82094,52173],{"class":152},[142,82096,51842],{"class":51329},[142,82098,51336],{"class":152},[142,82100,82101],{"class":144,"line":1340},[142,82102,82103],{"class":152},"    const lis = document.querySelectorAll('li')\n",[142,82105,82106],{"class":144,"line":1346},[142,82107,82108],{"class":152},"    const liss = Array.from(lis)\n",[142,82110,82111],{"class":144,"line":1358},[142,82112,82113],{"class":152},"    liss.pop()\n",[142,82115,82116],{"class":144,"line":1640},[142,82117,82118],{"class":152},"    console.log(liss)\n",[142,82120,82121,82123,82125],{"class":144,"line":1645},[142,82122,52446],{"class":152},[142,82124,51842],{"class":51329},[142,82126,51336],{"class":152},[142,82128,82129,82131,82133],{"class":144,"line":1651},[142,82130,51814],{"class":152},[142,82132,51829],{"class":51329},[142,82134,51336],{"class":152},[14,82136,82137],{},[29,82138],{"alt":31,"src":82139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22027,82141,82143],{"id":82142},"_41053-string","4.10.5.3 String",[14,82145,82146],{},[29,82147],{"alt":31,"src":82148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22939,82150,82152],{"id":82151},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[133,82154,82156],{"className":53096,"code":82155,"language":53098,"meta":31,"style":31},"\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",[139,82157,82158,82166,82174,82179,82184,82189,82193,82198,82203,82208,82216],{"__ignoreMap":31},[142,82159,82160,82162,82164],{"class":144,"line":145},[142,82161,1063],{"class":152},[142,82163,51829],{"class":51329},[142,82165,51336],{"class":152},[142,82167,82168,82170,82172],{"class":144,"line":64},[142,82169,52173],{"class":152},[142,82171,51842],{"class":51329},[142,82173,51336],{"class":152},[142,82175,82176],{"class":144,"line":1208},[142,82177,82178],{"class":152},"    \u002F\u002F 把字符串转化为数组\n",[142,82180,82181],{"class":144,"line":1223},[142,82182,82183],{"class":152},"    const str = 'pink,red'\n",[142,82185,82186],{"class":144,"line":1229},[142,82187,82188],{"class":152},"    const arr = str.split(',')\n",[142,82190,82191],{"class":144,"line":1243},[142,82192,80667],{"class":152},[142,82194,82195],{"class":144,"line":1249},[142,82196,82197],{"class":152},"    const str1 = '2025-8-25'\n",[142,82199,82200],{"class":144,"line":1340},[142,82201,82202],{"class":152},"    const arr1 = str1.split('-')\n",[142,82204,82205],{"class":144,"line":1346},[142,82206,82207],{"class":152},"    console.log(arr1)\n",[142,82209,82210,82212,82214],{"class":144,"line":1358},[142,82211,52446],{"class":152},[142,82213,51842],{"class":51329},[142,82215,51336],{"class":152},[142,82217,82218,82220,82222],{"class":144,"line":1640},[142,82219,51814],{"class":152},[142,82221,51829],{"class":51329},[142,82223,51336],{"class":152},[22939,82225,82227],{"id":82226},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82229,5210],{},[14,82231,82232],{},"substring(indexStart)",[14,82234,82235],{},"substring(indexStart, indexEnd)",[1160,82237,82238,82249,82261,82271],{},[99,82239,82240,82241,82244,82245,82248],{},"如果省略了 ",[139,82242,82243],{},"indexEnd","，则 ",[139,82246,82247],{},"substring()"," 提取字符直到字符串的末尾",[99,82250,82251,82252,82255,82256,82244,82258,82260],{},"如果 ",[139,82253,82254],{},"indexStart"," 等于 ",[139,82257,82243],{},[139,82259,82247],{}," 返回一个空字符串",[99,82262,82251,82263,82265,82266,82244,82268,82270],{},[139,82264,82254],{}," 大于 ",[139,82267,82243],{},[139,82269,82247],{}," 的效果就像交换了这两个参数一样",[99,82272,82273],{},"结束的索引号不包含想要截取的部分",[133,82275,82277],{"className":81518,"code":82276,"language":81520,"meta":31,"style":31},"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",[139,82278,82279,82291,82295,82329,82359,82363,82394,82398,82425,82455,82485,82489,82520],{"__ignoreMap":31},[142,82280,82281,82284,82286,82289],{"class":144,"line":145},[142,82282,82283],{"class":152},"const anyString ",[142,82285,198],{"class":148},[142,82287,82288],{"class":257}," \"Mozilla\"",[142,82290,1319],{"class":152},[142,82292,82293],{"class":144,"line":64},[142,82294,2428],{"emptyLinePlaceholder":69},[142,82296,82297,82300,82302,82304,82306,82309,82311,82314,82316,82318,82320,82322,82324,82326],{"class":144,"line":1208},[142,82298,82299],{"class":201},"console",[142,82301,711],{"class":152},[142,82303,58276],{"class":201},[142,82305,153],{"class":152},[142,82307,82308],{"class":201},"anyString",[142,82310,711],{"class":152},[142,82312,82313],{"class":201},"substring",[142,82315,153],{"class":152},[142,82317,344],{"class":201},[142,82319,12464],{"class":152},[142,82321,370],{"class":201},[142,82323,75282],{"class":152},[142,82325,33358],{"class":148},[142,82327,82328],{"class":257}," 'M'\n",[142,82330,82331,82333,82335,82337,82339,82341,82343,82345,82347,82349,82351,82353,82355,82357],{"class":144,"line":1223},[142,82332,82299],{"class":201},[142,82334,711],{"class":152},[142,82336,58276],{"class":201},[142,82338,153],{"class":152},[142,82340,82308],{"class":201},[142,82342,711],{"class":152},[142,82344,82313],{"class":201},[142,82346,153],{"class":152},[142,82348,370],{"class":201},[142,82350,12464],{"class":152},[142,82352,344],{"class":201},[142,82354,75282],{"class":152},[142,82356,33358],{"class":148},[142,82358,82328],{"class":257},[142,82360,82361],{"class":144,"line":1229},[142,82362,2428],{"emptyLinePlaceholder":69},[142,82364,82365,82367,82369,82371,82373,82375,82377,82379,82381,82383,82385,82387,82389,82391],{"class":144,"line":1243},[142,82366,82299],{"class":201},[142,82368,711],{"class":152},[142,82370,58276],{"class":201},[142,82372,153],{"class":152},[142,82374,82308],{"class":201},[142,82376,711],{"class":152},[142,82378,82313],{"class":201},[142,82380,153],{"class":152},[142,82382,344],{"class":201},[142,82384,12464],{"class":152},[142,82386,497],{"class":201},[142,82388,75282],{"class":152},[142,82390,33358],{"class":148},[142,82392,82393],{"class":257}," 'Mozill'\n",[142,82395,82396],{"class":144,"line":1249},[142,82397,2428],{"emptyLinePlaceholder":69},[142,82399,82400,82402,82404,82406,82408,82410,82412,82414,82416,82418,82420,82422],{"class":144,"line":1340},[142,82401,82299],{"class":201},[142,82403,711],{"class":152},[142,82405,58276],{"class":201},[142,82407,153],{"class":152},[142,82409,82308],{"class":201},[142,82411,711],{"class":152},[142,82413,82313],{"class":201},[142,82415,153],{"class":152},[142,82417,446],{"class":201},[142,82419,75282],{"class":152},[142,82421,33358],{"class":148},[142,82423,82424],{"class":257}," 'lla'\n",[142,82426,82427,82429,82431,82433,82435,82437,82439,82441,82443,82445,82447,82449,82451,82453],{"class":144,"line":1346},[142,82428,82299],{"class":201},[142,82430,711],{"class":152},[142,82432,58276],{"class":201},[142,82434,153],{"class":152},[142,82436,82308],{"class":201},[142,82438,711],{"class":152},[142,82440,82313],{"class":201},[142,82442,153],{"class":152},[142,82444,446],{"class":201},[142,82446,12464],{"class":152},[142,82448,522],{"class":201},[142,82450,75338],{"class":152},[142,82452,33358],{"class":148},[142,82454,82424],{"class":257},[142,82456,82457,82459,82461,82463,82465,82467,82469,82471,82473,82475,82477,82479,82481,82483],{"class":144,"line":1358},[142,82458,82299],{"class":201},[142,82460,711],{"class":152},[142,82462,58276],{"class":201},[142,82464,153],{"class":152},[142,82466,82308],{"class":201},[142,82468,711],{"class":152},[142,82470,82313],{"class":201},[142,82472,153],{"class":152},[142,82474,522],{"class":201},[142,82476,12464],{"class":152},[142,82478,446],{"class":201},[142,82480,75282],{"class":152},[142,82482,33358],{"class":148},[142,82484,82424],{"class":257},[142,82486,82487],{"class":144,"line":1640},[142,82488,2428],{"emptyLinePlaceholder":69},[142,82490,82491,82493,82495,82497,82499,82501,82503,82505,82507,82509,82511,82513,82515,82517],{"class":144,"line":1645},[142,82492,82299],{"class":201},[142,82494,711],{"class":152},[142,82496,58276],{"class":201},[142,82498,153],{"class":152},[142,82500,82308],{"class":201},[142,82502,711],{"class":152},[142,82504,82313],{"class":201},[142,82506,153],{"class":152},[142,82508,344],{"class":201},[142,82510,12464],{"class":152},[142,82512,522],{"class":201},[142,82514,75282],{"class":152},[142,82516,33358],{"class":148},[142,82518,82519],{"class":257}," 'Mozilla'\n",[142,82521,82522,82524,82526,82528,82530,82532,82534,82536,82538,82540,82542,82544,82546,82548],{"class":144,"line":1651},[142,82523,82299],{"class":201},[142,82525,711],{"class":152},[142,82527,58276],{"class":201},[142,82529,153],{"class":152},[142,82531,82308],{"class":201},[142,82533,711],{"class":152},[142,82535,82313],{"class":201},[142,82537,153],{"class":152},[142,82539,344],{"class":201},[142,82541,12464],{"class":152},[142,82543,599],{"class":201},[142,82545,75282],{"class":152},[142,82547,33358],{"class":148},[142,82549,82519],{"class":257},[22939,82551,82553],{"id":82552},"_410533-startswith","4.10.5.3.3 startsWith",[14,82555,82556,82559,82560,82565,82566,82568,82569],{},[139,82557,82558],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[302,82561,82562],{},[139,82563,82564],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[139,82567,1391],{}," 或 ",[139,82570,66049],{},[133,82572,82574],{"className":77524,"code":82573,"language":77526,"meta":31,"style":31},"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",[139,82575,82576,82588,82607,82612,82632],{"__ignoreMap":31},[142,82577,82578,82580,82583,82585],{"class":144,"line":145},[142,82579,6821],{"class":148},[142,82581,82582],{"class":152}," str1 ",[142,82584,198],{"class":148},[142,82586,82587],{"class":257}," \"Saturday night plans\"\n",[142,82589,82590,82592,82594,82597,82600,82602,82605],{"class":144,"line":64},[142,82591,77561],{"class":152},[142,82593,58276],{"class":1991},[142,82595,82596],{"class":152},"(str1.",[142,82598,82599],{"class":1991},"startsWith",[142,82601,153],{"class":152},[142,82603,82604],{"class":257},"\"Sat\"",[142,82606,30526],{"class":152},[142,82608,82609],{"class":144,"line":1208},[142,82610,82611],{"class":211},"\u002F\u002F Expected output: true\n",[142,82613,82614,82616,82618,82620,82622,82624,82626,82628,82630],{"class":144,"line":1223},[142,82615,77561],{"class":152},[142,82617,58276],{"class":1991},[142,82619,82596],{"class":152},[142,82621,82599],{"class":1991},[142,82623,153],{"class":152},[142,82625,82604],{"class":257},[142,82627,12464],{"class":152},[142,82629,224],{"class":201},[142,82631,30526],{"class":152},[142,82633,82634],{"class":144,"line":1229},[142,82635,82636],{"class":211},"\u002F\u002F Expected output: false\n",[133,82638,82640],{"className":50662,"code":82639,"language":50664,"meta":31,"style":31},"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",[139,82641,82642,82647,82652,82656,82661,82666],{"__ignoreMap":31},[142,82643,82644],{"class":144,"line":145},[142,82645,82646],{"class":152},"startsWith(searchString)\n",[142,82648,82649],{"class":144,"line":64},[142,82650,82651],{"class":152},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[142,82653,82654],{"class":144,"line":1208},[142,82655,2428],{"emptyLinePlaceholder":69},[142,82657,82658],{"class":144,"line":1223},[142,82659,82660],{"class":152},"const str3 = 'pink老师上课中'\n",[142,82662,82663],{"class":144,"line":1229},[142,82664,82665],{"class":152},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[142,82667,82668],{"class":144,"line":1243},[142,82669,82670],{"class":152},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22939,82672,82674],{"id":82673},"_410534-includes","4.10.5.3.4 includes",[14,82676,82677],{},"includes(searchString) includes(searchString, position)",[96,82679,82680],{},[99,82681,82682],{},"searchString:",[14,82684,82685,82686,82688,82689,82694,82695,82700,82701,21529,82704,82707,82708,82711],{},"一个要在 ",[139,82687,1328],{}," 中查找的字符串。",[391,82690,82693],{"href":82691,"rel":82692},"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",[23894],"不能是正则表达式","。所有非正则表达式的值都会被",[391,82696,82699],{"href":82697,"rel":82698},"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",[23894],"强制转换为字符串","，因此如果该参数被省略或传入 ",[139,82702,82703],{},"undefined",[139,82705,82706],{},"includes()"," 方法会在字符串中搜索 ",[139,82709,82710],{},"\"undefined\"","，这通常不是你想要的",[96,82713,82714],{"start":64},[99,82715,82716,1012],{},[139,82717,82718],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82720,82721,82722,82725,82726],{},"在字符串中开始搜索 ",[139,82723,82724],{},"searchString"," 的位置。默认值为 ",[139,82727,344],{},[96,82729,82730],{"start":1208},[99,82731,82732],{},"返回值：",[14,82734,82735,82736,82738,82739,82743,82744],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[139,82737,82724],{}," 为空字符串的情况），则返回 ",[302,82740,82741],{},[139,82742,1391],{}," ，否则返回 ",[302,82745,82746],{},[139,82747,66049],{},[96,82749,82750],{"start":1223},[99,82751,82752],{},"异常：",[14,82754,82251,82755,13824,82757,82761],{},[139,82756,82724],{},[391,82758,82760],{"href":82691,"rel":82759},[23894],"是一个正则表达式","，则会抛出",[14,82763,82764],{},"只要是有就是true，不需要非得以谁开头结尾",[133,82766,82768],{"className":77524,"code":82767,"language":77526,"meta":31,"style":31},"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",[139,82769,82770,82781,82804,82823,82843,82865,82884],{"__ignoreMap":31},[142,82771,82772,82774,82776,82778],{"class":144,"line":145},[142,82773,6821],{"class":148},[142,82775,79804],{"class":152},[142,82777,198],{"class":148},[142,82779,82780],{"class":257}," \"To be, or not to be, that is the question.\"\n",[142,82782,82783,82785,82787,82790,82793,82795,82798,82801],{"class":144,"line":64},[142,82784,77561],{"class":152},[142,82786,58276],{"class":1991},[142,82788,82789],{"class":152},"(str.",[142,82791,82792],{"class":1991},"includes",[142,82794,153],{"class":152},[142,82796,82797],{"class":257},"\"To be\"",[142,82799,82800],{"class":152},"))",[142,82802,82803],{"class":211},"  \u002F\u002F true\n",[142,82805,82806,82808,82810,82812,82814,82816,82819,82821],{"class":144,"line":1208},[142,82807,77561],{"class":152},[142,82809,58276],{"class":1991},[142,82811,82789],{"class":152},[142,82813,82792],{"class":1991},[142,82815,153],{"class":152},[142,82817,82818],{"class":257},"\"question\"",[142,82820,82800],{"class":152},[142,82822,82803],{"class":211},[142,82824,82825,82827,82829,82831,82833,82835,82838,82840],{"class":144,"line":1223},[142,82826,77561],{"class":152},[142,82828,58276],{"class":1991},[142,82830,82789],{"class":152},[142,82832,82792],{"class":1991},[142,82834,153],{"class":152},[142,82836,82837],{"class":257},"\"nonexistent\"",[142,82839,82800],{"class":152},[142,82841,82842],{"class":211},"  \u002F\u002F false\n",[142,82844,82845,82847,82849,82851,82853,82855,82857,82859,82861,82863],{"class":144,"line":1229},[142,82846,77561],{"class":152},[142,82848,58276],{"class":1991},[142,82850,82789],{"class":152},[142,82852,82792],{"class":1991},[142,82854,153],{"class":152},[142,82856,82797],{"class":257},[142,82858,12464],{"class":152},[142,82860,370],{"class":201},[142,82862,82800],{"class":152},[142,82864,82842],{"class":211},[142,82866,82867,82869,82871,82873,82875,82877,82880,82882],{"class":144,"line":1243},[142,82868,77561],{"class":152},[142,82870,58276],{"class":1991},[142,82872,82789],{"class":152},[142,82874,82792],{"class":1991},[142,82876,153],{"class":152},[142,82878,82879],{"class":257},"\"TO BE\"",[142,82881,82800],{"class":152},[142,82883,82842],{"class":211},[142,82885,82886,82888,82890,82892,82894,82896,82898,82900],{"class":144,"line":1249},[142,82887,77561],{"class":152},[142,82889,58276],{"class":1991},[142,82891,82789],{"class":152},[142,82893,82792],{"class":1991},[142,82895,153],{"class":152},[142,82897,7681],{"class":257},[142,82899,82800],{"class":152},[142,82901,82803],{"class":211},[22939,82903,82905],{"id":82904},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[133,82907,82909],{"className":53096,"code":82908,"language":53098,"meta":31,"style":31},"\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",[139,82910,82911,82919,82927,82932,82937,82942,82947,82952,82960],{"__ignoreMap":31},[142,82912,82913,82915,82917],{"class":144,"line":145},[142,82914,1063],{"class":152},[142,82916,51829],{"class":51329},[142,82918,51336],{"class":152},[142,82920,82921,82923,82925],{"class":144,"line":64},[142,82922,52173],{"class":152},[142,82924,51842],{"class":51329},[142,82926,51336],{"class":152},[142,82928,82929],{"class":144,"line":1208},[142,82930,82931],{"class":152},"    const num = 10\n",[142,82933,82934],{"class":144,"line":1223},[142,82935,82936],{"class":152},"    \u002F\u002F 强制转换\n",[142,82938,82939],{"class":144,"line":1229},[142,82940,82941],{"class":152},"    console.log(String(num))\n",[142,82943,82944],{"class":144,"line":1243},[142,82945,82946],{"class":152},"    \u002F\u002F toString()方法转换\n",[142,82948,82949],{"class":144,"line":1249},[142,82950,82951],{"class":152},"    console.log(num.toString())\n",[142,82953,82954,82956,82958],{"class":144,"line":1340},[142,82955,52446],{"class":152},[142,82957,51842],{"class":51329},[142,82959,51336],{"class":152},[142,82961,82962,82964,82966],{"class":144,"line":1346},[142,82963,51814],{"class":152},[142,82965,51829],{"class":51329},[142,82967,51336],{"class":152},[22939,82969,82971],{"id":82970},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82973,82974],{},[29,82975],{"alt":31,"src":82976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[133,82978,82980],{"className":50662,"code":82979,"language":50664,"meta":31,"style":31},"\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",[139,82981,82982,82992,83006,83010,83018,83032,83052,83064,83072,83076,83084,83096,83104,83116,83121,83126,83131,83178,83194,83202,83210,83214],{"__ignoreMap":31},[142,82983,82984,82986,82988,82990],{"class":144,"line":145},[142,82985,51326],{"class":152},[142,82987,51330],{"class":51329},[142,82989,51333],{"class":1991},[142,82991,51336],{"class":152},[142,82993,82994,82996,82998,83000,83002,83004],{"class":144,"line":64},[142,82995,1063],{"class":152},[142,82997,50664],{"class":51329},[142,82999,51345],{"class":1991},[142,83001,198],{"class":152},[142,83003,51350],{"class":257},[142,83005,51336],{"class":152},[142,83007,83008],{"class":144,"line":1208},[142,83009,2428],{"emptyLinePlaceholder":69},[142,83011,83012,83014,83016],{"class":144,"line":1223},[142,83013,1063],{"class":152},[142,83015,51363],{"class":51329},[142,83017,51336],{"class":152},[142,83019,83020,83022,83024,83026,83028,83030],{"class":144,"line":1229},[142,83021,52173],{"class":152},[142,83023,51373],{"class":51329},[142,83025,51376],{"class":1991},[142,83027,198],{"class":152},[142,83029,51381],{"class":257},[142,83031,51336],{"class":152},[142,83033,83034,83036,83038,83040,83042,83044,83046,83048,83050],{"class":144,"line":1243},[142,83035,52173],{"class":152},[142,83037,51373],{"class":51329},[142,83039,14949],{"class":1991},[142,83041,198],{"class":152},[142,83043,51420],{"class":257},[142,83045,51400],{"class":1991},[142,83047,198],{"class":152},[142,83049,51427],{"class":257},[142,83051,51336],{"class":152},[142,83053,83054,83056,83058,83060,83062],{"class":144,"line":1249},[142,83055,52173],{"class":152},[142,83057,51436],{"class":51329},[142,83059,51439],{"class":152},[142,83061,51436],{"class":51329},[142,83063,51336],{"class":152},[142,83065,83066,83068,83070],{"class":144,"line":1340},[142,83067,51814],{"class":152},[142,83069,51363],{"class":51329},[142,83071,51336],{"class":152},[142,83073,83074],{"class":144,"line":1346},[142,83075,2428],{"emptyLinePlaceholder":69},[142,83077,83078,83080,83082],{"class":144,"line":1358},[142,83079,1063],{"class":152},[142,83081,51829],{"class":51329},[142,83083,51336],{"class":152},[142,83085,83086,83088,83090,83092,83094],{"class":144,"line":1640},[142,83087,52173],{"class":152},[142,83089,51640],{"class":51329},[142,83091,55343],{"class":152},[142,83093,51640],{"class":51329},[142,83095,51336],{"class":152},[142,83097,83098,83100,83102],{"class":144,"line":1645},[142,83099,52173],{"class":152},[142,83101,51842],{"class":51329},[142,83103,51336],{"class":152},[142,83105,83106,83108,83111,83113],{"class":144,"line":1651},[142,83107,11250],{"class":148},[142,83109,83110],{"class":201}," gift",[142,83112,13593],{"class":148},[142,83114,83115],{"class":257}," '50g的茶叶，清洗球'\n",[142,83117,83118],{"class":144,"line":1656},[142,83119,83120],{"class":211},"    \u002F\u002F 1.把字符串拆分为数组\n",[142,83122,83123],{"class":144,"line":1670},[142,83124,83125],{"class":211},"    \u002F\u002F console.log(gift.split(','))\n",[142,83127,83128],{"class":144,"line":1675},[142,83129,83130],{"class":211},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[142,83132,83133,83135,83137,83139,83142,83145,83147,83150,83152,83154,83156,83158,83160,83163,83165,83168,83170,83172,83174,83176],{"class":144,"line":1681},[142,83134,11250],{"class":148},[142,83136,73948],{"class":201},[142,83138,13593],{"class":148},[142,83140,83141],{"class":152}," gift.",[142,83143,83144],{"class":1991},"split",[142,83146,153],{"class":152},[142,83148,83149],{"class":257},"'，'",[142,83151,30855],{"class":152},[142,83153,74073],{"class":1991},[142,83155,153],{"class":152},[142,83157,79824],{"class":5245},[142,83159,79827],{"class":148},[142,83161,83162],{"class":257}," `\u003Cspan>【赠品】${",[142,83164,79824],{"class":152},[142,83166,83167],{"class":257},"}\u003C\u002Fspan>\u003Cbr>`",[142,83169,30855],{"class":152},[142,83171,74252],{"class":1991},[142,83173,153],{"class":152},[142,83175,74257],{"class":257},[142,83177,159],{"class":152},[142,83179,83180,83182,83184,83186,83188,83190,83192],{"class":144,"line":1702},[142,83181,52436],{"class":152},[142,83183,54428],{"class":1991},[142,83185,153],{"class":152},[142,83187,81960],{"class":257},[142,83189,74278],{"class":152},[142,83191,198],{"class":148},[142,83193,74014],{"class":152},[142,83195,83196,83198,83200],{"class":144,"line":1707},[142,83197,52446],{"class":152},[142,83199,51842],{"class":51329},[142,83201,51336],{"class":152},[142,83203,83204,83206,83208],{"class":144,"line":1721},[142,83205,51814],{"class":152},[142,83207,51829],{"class":51329},[142,83209,51336],{"class":152},[142,83211,83212],{"class":144,"line":1726},[142,83213,2428],{"emptyLinePlaceholder":69},[142,83215,83216,83218,83220],{"class":144,"line":1755},[142,83217,51814],{"class":152},[142,83219,50664],{"class":51329},[142,83221,51336],{"class":152},[22027,83223,83225],{"id":83224},"_41054-number","4.10.5.4 Number",[14,83227,83228],{},[29,83229],{"alt":31,"src":83230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83232,83233],{},"整数也可以进行toFixed来保留小数",[14,83235,83236],{},"比如：",[14,83238,83239],{},"const price=10",[14,83241,83242],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22027,83244,83246],{"id":83245},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83248,83249],{},[29,83250],{"alt":31,"src":83251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[133,83253,83255],{"className":50662,"code":83254,"language":50664,"meta":31,"style":31},"\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",[139,83256,83257,83267,83281,83285,83293,83307,83327,83339,83347,83353,83363,83373,83383,83387,83391,83397,83409,83423,83427,83431,83437,83449,83465,83475,83491,83495,83499,83505,83515,83525,83529,83533,83541,83553,83565,83577,83581,83585,83593,83605,83609,83613,83624,83634,83646,83658,83668,83672,83676,83684,83693,83705,83715,83725,83729,83733,83741,83750,83757,83767,83779,83783,83787,83796,83806,83817,83829,83841,83845,83849,83858,83868,83879,83883,83887,83893,83905,83917,83927,83937,83955,83967,83971,83975,83984,83996,84006,84016,84028,84032,84040,84048,84052,84060,84074,84082,84096,84124,84132,84140,84150,84154,84162,84170,84179,84187,84196,84206,84210,84214,84222,84230,84239,84247,84255,84268,84272,84276,84284,84292,84301,84309,84317,84332,84336,84340,84348,84356,84365,84373,84381,84395,84403,84407,84411,84416,84442,84447,84484,84489,84512,84517,84571,84576,84612,84616,84622,84627,84636,84650,84659,84678,84687,84697,84702,84707,84720,84725,84779,84805,84813,84821,84825],{"__ignoreMap":31},[142,83258,83259,83261,83263,83265],{"class":144,"line":145},[142,83260,51326],{"class":152},[142,83262,51330],{"class":51329},[142,83264,51333],{"class":1991},[142,83266,51336],{"class":152},[142,83268,83269,83271,83273,83275,83277,83279],{"class":144,"line":64},[142,83270,1063],{"class":152},[142,83272,50664],{"class":51329},[142,83274,51345],{"class":1991},[142,83276,198],{"class":152},[142,83278,51350],{"class":257},[142,83280,51336],{"class":152},[142,83282,83283],{"class":144,"line":1208},[142,83284,2428],{"emptyLinePlaceholder":69},[142,83286,83287,83289,83291],{"class":144,"line":1223},[142,83288,1063],{"class":152},[142,83290,51363],{"class":51329},[142,83292,51336],{"class":152},[142,83294,83295,83297,83299,83301,83303,83305],{"class":144,"line":1229},[142,83296,52173],{"class":152},[142,83298,51373],{"class":51329},[142,83300,51376],{"class":1991},[142,83302,198],{"class":152},[142,83304,51381],{"class":257},[142,83306,51336],{"class":152},[142,83308,83309,83311,83313,83315,83317,83319,83321,83323,83325],{"class":144,"line":1243},[142,83310,52173],{"class":152},[142,83312,51373],{"class":51329},[142,83314,14949],{"class":1991},[142,83316,198],{"class":152},[142,83318,51420],{"class":257},[142,83320,51400],{"class":1991},[142,83322,198],{"class":152},[142,83324,51427],{"class":257},[142,83326,51336],{"class":152},[142,83328,83329,83331,83333,83335,83337],{"class":144,"line":1249},[142,83330,52173],{"class":152},[142,83332,51436],{"class":51329},[142,83334,51439],{"class":152},[142,83336,51436],{"class":51329},[142,83338,51336],{"class":152},[142,83340,83341,83343,83345],{"class":144,"line":1340},[142,83342,52173],{"class":152},[142,83344,5155],{"class":51329},[142,83346,51336],{"class":152},[142,83348,83349,83351],{"class":144,"line":1346},[142,83350,6432],{"class":51329},[142,83352,15601],{"class":152},[142,83354,83355,83357,83359,83361],{"class":144,"line":1358},[142,83356,54724],{"class":201},[142,83358,51466],{"class":152},[142,83360,344],{"class":201},[142,83362,1319],{"class":152},[142,83364,83365,83367,83369,83371],{"class":144,"line":1640},[142,83366,54735],{"class":201},[142,83368,51466],{"class":152},[142,83370,344],{"class":201},[142,83372,1319],{"class":152},[142,83374,83375,83377,83379,83381],{"class":144,"line":1645},[142,83376,72625],{"class":201},[142,83378,51466],{"class":152},[142,83380,60534],{"class":201},[142,83382,1319],{"class":152},[142,83384,83385],{"class":144,"line":1651},[142,83386,2215],{"class":152},[142,83388,83389],{"class":144,"line":1656},[142,83390,2428],{"emptyLinePlaceholder":69},[142,83392,83393,83395],{"class":144,"line":1670},[142,83394,62152],{"class":1991},[142,83396,15601],{"class":152},[142,83398,83399,83401,83403,83405,83407],{"class":144,"line":1675},[142,83400,54800],{"class":201},[142,83402,51466],{"class":152},[142,83404,78603],{"class":201},[142,83406,51521],{"class":148},[142,83408,1319],{"class":152},[142,83410,83411,83413,83415,83417,83419,83421],{"class":144,"line":1681},[142,83412,54735],{"class":201},[142,83414,51466],{"class":152},[142,83416,464],{"class":201},[142,83418,51521],{"class":148},[142,83420,51585],{"class":201},[142,83422,1319],{"class":152},[142,83424,83425],{"class":144,"line":1702},[142,83426,2215],{"class":152},[142,83428,83429],{"class":144,"line":1707},[142,83430,2428],{"emptyLinePlaceholder":69},[142,83432,83433,83435],{"class":144,"line":1721},[142,83434,78654],{"class":1991},[142,83436,15601],{"class":152},[142,83438,83439,83441,83443,83445,83447],{"class":144,"line":1726},[142,83440,54724],{"class":201},[142,83442,51466],{"class":152},[142,83444,728],{"class":201},[142,83446,51521],{"class":148},[142,83448,1319],{"class":152},[142,83450,83451,83453,83455,83457,83459,83461,83463],{"class":144,"line":1755},[142,83452,61889],{"class":201},[142,83454,51466],{"class":152},[142,83456,28150],{"class":201},[142,83458,78709],{"class":201},[142,83460,78712],{"class":201},[142,83462,848],{"class":148},[142,83464,1319],{"class":152},[142,83466,83467,83469,83471,83473],{"class":144,"line":1760},[142,83468,55038],{"class":201},[142,83470,51466],{"class":152},[142,83472,51506],{"class":201},[142,83474,1319],{"class":152},[142,83476,83477,83479,83481,83483,83485,83487,83489],{"class":144,"line":1777},[142,83478,62006],{"class":201},[142,83480,51466],{"class":152},[142,83482,370],{"class":201},[142,83484,51521],{"class":148},[142,83486,51550],{"class":201},[142,83488,62273],{"class":201},[142,83490,1319],{"class":152},[142,83492,83493],{"class":144,"line":1782},[142,83494,2215],{"class":152},[142,83496,83497],{"class":144,"line":1787},[142,83498,2428],{"emptyLinePlaceholder":69},[142,83500,83501,83503],{"class":144,"line":1792},[142,83502,78772],{"class":1991},[142,83504,15601],{"class":152},[142,83506,83507,83509,83511,83513],{"class":144,"line":1806},[142,83508,62054],{"class":201},[142,83510,51466],{"class":152},[142,83512,62059],{"class":201},[142,83514,1319],{"class":152},[142,83516,83517,83519,83521,83523],{"class":144,"line":1811},[142,83518,54913],{"class":201},[142,83520,51466],{"class":152},[142,83522,61847],{"class":201},[142,83524,1319],{"class":152},[142,83526,83527],{"class":144,"line":2605},[142,83528,2215],{"class":152},[142,83530,83531],{"class":144,"line":2619},[142,83532,2428],{"emptyLinePlaceholder":69},[142,83534,83535,83537,83539],{"class":144,"line":2627},[142,83536,78654],{"class":1991},[142,83538,55644],{"class":51329},[142,83540,15601],{"class":152},[142,83542,83543,83545,83547,83549,83551],{"class":144,"line":2632},[142,83544,54800],{"class":201},[142,83546,51466],{"class":152},[142,83548,765],{"class":201},[142,83550,51521],{"class":148},[142,83552,1319],{"class":152},[142,83554,83555,83557,83559,83561,83563],{"class":144,"line":2638},[142,83556,54814],{"class":201},[142,83558,51466],{"class":152},[142,83560,765],{"class":201},[142,83562,51521],{"class":148},[142,83564,1319],{"class":152},[142,83566,83567,83569,83571,83573,83575],{"class":144,"line":2644},[142,83568,61779],{"class":201},[142,83570,51466],{"class":152},[142,83572,472],{"class":201},[142,83574,51521],{"class":148},[142,83576,1319],{"class":152},[142,83578,83579],{"class":144,"line":2649},[142,83580,2215],{"class":152},[142,83582,83583],{"class":144,"line":7977},[142,83584,2428],{"emptyLinePlaceholder":69},[142,83586,83587,83589,83591],{"class":144,"line":8001},[142,83588,78654],{"class":1991},[142,83590,62333],{"class":1991},[142,83592,15601],{"class":152},[142,83594,83595,83597,83599,83601,83603],{"class":144,"line":8006},[142,83596,54800],{"class":201},[142,83598,51466],{"class":152},[142,83600,1750],{"class":201},[142,83602,51521],{"class":148},[142,83604,1319],{"class":152},[142,83606,83607],{"class":144,"line":8012},[142,83608,2215],{"class":152},[142,83610,83611],{"class":144,"line":8039},[142,83612,2428],{"emptyLinePlaceholder":69},[142,83614,83615,83617,83619,83622],{"class":144,"line":8044},[142,83616,78654],{"class":1991},[142,83618,62333],{"class":1991},[142,83620,83621],{"class":1991}," .tag",[142,83623,15601],{"class":152},[142,83625,83626,83628,83630,83632],{"class":144,"line":8050},[142,83627,55038],{"class":201},[142,83629,51466],{"class":152},[142,83631,60898],{"class":201},[142,83633,1319],{"class":152},[142,83635,83636,83638,83640,83642,83644],{"class":144,"line":8062},[142,83637,54724],{"class":201},[142,83639,51466],{"class":152},[142,83641,230],{"class":201},[142,83643,51521],{"class":148},[142,83645,1319],{"class":152},[142,83647,83648,83650,83652,83654,83656],{"class":144,"line":8074},[142,83649,54951],{"class":201},[142,83651,51466],{"class":152},[142,83653,651],{"class":201},[142,83655,51521],{"class":148},[142,83657,1319],{"class":152},[142,83659,83660,83662,83664,83666],{"class":144,"line":8086},[142,83661,57445],{"class":201},[142,83663,51466],{"class":152},[142,83665,62099],{"class":201},[142,83667,1319],{"class":152},[142,83669,83670],{"class":144,"line":9745},[142,83671,2215],{"class":152},[142,83673,83674],{"class":144,"line":9770},[142,83675,2428],{"emptyLinePlaceholder":69},[142,83677,83678,83680,83682],{"class":144,"line":9793},[142,83679,78654],{"class":1991},[142,83681,78946],{"class":1991},[142,83683,31495],{"class":152},[142,83685,83686,83688,83691],{"class":144,"line":9817},[142,83687,78654],{"class":1991},[142,83689,83690],{"class":1991}," .sub-total",[142,83692,15601],{"class":152},[142,83694,83695,83697,83699,83701,83703],{"class":144,"line":9822},[142,83696,54951],{"class":201},[142,83698,51466],{"class":152},[142,83700,803],{"class":201},[142,83702,51521],{"class":148},[142,83704,1319],{"class":152},[142,83706,83707,83709,83711,83713],{"class":144,"line":9827},[142,83708,57445],{"class":201},[142,83710,51466],{"class":152},[142,83712,78969],{"class":201},[142,83714,1319],{"class":152},[142,83716,83717,83719,83721,83723],{"class":144,"line":9832},[142,83718,61866],{"class":201},[142,83720,51466],{"class":152},[142,83722,370],{"class":201},[142,83724,1319],{"class":152},[142,83726,83727],{"class":144,"line":9841},[142,83728,2215],{"class":152},[142,83730,83731],{"class":144,"line":9846},[142,83732,2428],{"emptyLinePlaceholder":69},[142,83734,83735,83737,83739],{"class":144,"line":9852},[142,83736,78654],{"class":1991},[142,83738,78986],{"class":1991},[142,83740,31495],{"class":152},[142,83742,83743,83745,83748],{"class":144,"line":9873},[142,83744,78654],{"class":1991},[142,83746,83747],{"class":1991}," .sub-total::before",[142,83749,31495],{"class":152},[142,83751,83752,83755],{"class":144,"line":9879},[142,83753,83754],{"class":1991},"    .amount::before",[142,83756,15601],{"class":152},[142,83758,83759,83761,83763,83765],{"class":144,"line":9893},[142,83760,78993],{"class":201},[142,83762,51466],{"class":152},[142,83764,78998],{"class":257},[142,83766,1319],{"class":152},[142,83768,83769,83771,83773,83775,83777],{"class":144,"line":9899},[142,83770,54951],{"class":201},[142,83772,51466],{"class":152},[142,83774,651],{"class":201},[142,83776,51521],{"class":148},[142,83778,1319],{"class":152},[142,83780,83781],{"class":144,"line":9926},[142,83782,2215],{"class":152},[142,83784,83785],{"class":144,"line":9935},[142,83786,2428],{"emptyLinePlaceholder":69},[142,83788,83789,83791,83794],{"class":144,"line":9941},[142,83790,78654],{"class":1991},[142,83792,83793],{"class":1991}," .spec",[142,83795,15601],{"class":152},[142,83797,83798,83800,83802,83804],{"class":144,"line":9949},[142,83799,61866],{"class":201},[142,83801,51466],{"class":152},[142,83803,230],{"class":201},[142,83805,1319],{"class":152},[142,83807,83808,83810,83812,83815],{"class":144,"line":9954},[142,83809,57445],{"class":201},[142,83811,51466],{"class":152},[142,83813,83814],{"class":201},"#888",[142,83816,1319],{"class":152},[142,83818,83819,83821,83823,83825,83827],{"class":144,"line":16633},[142,83820,54951],{"class":201},[142,83822,51466],{"class":152},[142,83824,702],{"class":201},[142,83826,51521],{"class":148},[142,83828,1319],{"class":152},[142,83830,83831,83833,83835,83837,83839],{"class":144,"line":16639},[142,83832,62029],{"class":201},[142,83834,51466],{"class":152},[142,83836,853],{"class":201},[142,83838,51521],{"class":148},[142,83840,1319],{"class":152},[142,83842,83843],{"class":144,"line":16662},[142,83844,2215],{"class":152},[142,83846,83847],{"class":144,"line":16668},[142,83848,2428],{"emptyLinePlaceholder":69},[142,83850,83851,83853,83856],{"class":144,"line":16691},[142,83852,78654],{"class":1991},[142,83854,83855],{"class":1991}," .count",[142,83857,15601],{"class":152},[142,83859,83860,83862,83864,83866],{"class":144,"line":16705},[142,83861,61866],{"class":201},[142,83863,51466],{"class":152},[142,83865,370],{"class":201},[142,83867,1319],{"class":152},[142,83869,83870,83872,83874,83877],{"class":144,"line":16725},[142,83871,57445],{"class":201},[142,83873,51466],{"class":152},[142,83875,83876],{"class":201},"#aaa",[142,83878,1319],{"class":152},[142,83880,83881],{"class":144,"line":16731},[142,83882,2215],{"class":152},[142,83884,83885],{"class":144,"line":16742},[142,83886,2428],{"emptyLinePlaceholder":69},[142,83888,83889,83891],{"class":144,"line":16765},[142,83890,72504],{"class":1991},[142,83892,15601],{"class":152},[142,83894,83895,83897,83899,83901,83903],{"class":144,"line":16787},[142,83896,54800],{"class":201},[142,83898,51466],{"class":152},[142,83900,78603],{"class":201},[142,83902,51521],{"class":148},[142,83904,1319],{"class":152},[142,83906,83907,83909,83911,83913,83915],{"class":144,"line":16792},[142,83908,54735],{"class":201},[142,83910,51466],{"class":152},[142,83912,344],{"class":201},[142,83914,51585],{"class":201},[142,83916,1319],{"class":152},[142,83918,83919,83921,83923,83925],{"class":144,"line":16798},[142,83920,55038],{"class":201},[142,83922,51466],{"class":152},[142,83924,51506],{"class":201},[142,83926,1319],{"class":152},[142,83928,83929,83931,83933,83935],{"class":144,"line":16812},[142,83930,55049],{"class":201},[142,83932,51466],{"class":152},[142,83934,51609],{"class":201},[142,83936,1319],{"class":152},[142,83938,83939,83942,83944,83946,83948,83950,83953],{"class":144,"line":16825},[142,83940,83941],{"class":201},"      border-top",[142,83943,51466],{"class":152},[142,83945,370],{"class":201},[142,83947,51521],{"class":148},[142,83949,51550],{"class":201},[142,83951,83952],{"class":201}," #4e4e4e",[142,83954,1319],{"class":152},[142,83956,83957,83959,83961,83963,83965],{"class":144,"line":16830},[142,83958,54724],{"class":201},[142,83960,51466],{"class":152},[142,83962,853],{"class":201},[142,83964,51521],{"class":148},[142,83966,1319],{"class":152},[142,83968,83969],{"class":144,"line":16844},[142,83970,2215],{"class":152},[142,83972,83973],{"class":144,"line":16849},[142,83974,2428],{"emptyLinePlaceholder":69},[142,83976,83977,83979,83982],{"class":144,"line":16855},[142,83978,72504],{"class":1991},[142,83980,83981],{"class":1991}," .amount",[142,83983,15601],{"class":152},[142,83985,83986,83988,83990,83992,83994],{"class":144,"line":16860},[142,83987,54951],{"class":201},[142,83989,51466],{"class":152},[142,83991,803],{"class":201},[142,83993,51521],{"class":148},[142,83995,1319],{"class":152},[142,83997,83998,84000,84002,84004],{"class":144,"line":16874},[142,83999,57445],{"class":201},[142,84001,51466],{"class":152},[142,84003,78969],{"class":201},[142,84005,1319],{"class":152},[142,84007,84008,84010,84012,84014],{"class":144,"line":16879},[142,84009,62363],{"class":201},[142,84011,51466],{"class":152},[142,84013,51518],{"class":201},[142,84015,1319],{"class":152},[142,84017,84018,84020,84022,84024,84026],{"class":144,"line":16884},[142,84019,61779],{"class":201},[142,84021,51466],{"class":152},[142,84023,809],{"class":201},[142,84025,51521],{"class":148},[142,84027,1319],{"class":152},[142,84029,84030],{"class":144,"line":16898},[142,84031,2215],{"class":152},[142,84033,84034,84036,84038],{"class":144,"line":16910},[142,84035,52446],{"class":152},[142,84037,5155],{"class":51329},[142,84039,51336],{"class":152},[142,84041,84042,84044,84046],{"class":144,"line":16915},[142,84043,51814],{"class":152},[142,84045,51363],{"class":51329},[142,84047,51336],{"class":152},[142,84049,84050],{"class":144,"line":16928},[142,84051,2428],{"emptyLinePlaceholder":69},[142,84053,84054,84056,84058],{"class":144,"line":16933},[142,84055,1063],{"class":152},[142,84057,51829],{"class":51329},[142,84059,51336],{"class":152},[142,84061,84062,84064,84066,84068,84070,84072],{"class":144,"line":16938},[142,84063,52173],{"class":152},[142,84065,51640],{"class":51329},[142,84067,53515],{"class":1991},[142,84069,198],{"class":152},[142,84071,62637],{"class":257},[142,84073,51336],{"class":152},[142,84075,84076,84078,84080],{"class":144,"line":16943},[142,84077,52446],{"class":152},[142,84079,51640],{"class":51329},[142,84081,51336],{"class":152},[142,84083,84084,84086,84088,84090,84092,84094],{"class":144,"line":16956},[142,84085,52173],{"class":152},[142,84087,51640],{"class":51329},[142,84089,53515],{"class":1991},[142,84091,198],{"class":152},[142,84093,62609],{"class":257},[142,84095,51336],{"class":152},[142,84097,84098,84100,84102,84105,84107,84109,84111,84114,84116,84118,84120,84122],{"class":144,"line":16961},[142,84099,51370],{"class":152},[142,84101,51640],{"class":51329},[142,84103,84104],{"class":152},">合计：\u003C",[142,84106,142],{"class":51329},[142,84108,53515],{"class":1991},[142,84110,198],{"class":152},[142,84112,84113],{"class":257},"\"amount\"",[142,84115,55343],{"class":152},[142,84117,142],{"class":51329},[142,84119,55343],{"class":152},[142,84121,51640],{"class":51329},[142,84123,51336],{"class":152},[142,84125,84126,84128,84130],{"class":144,"line":32662},[142,84127,52446],{"class":152},[142,84129,51640],{"class":51329},[142,84131,51336],{"class":152},[142,84133,84134,84136,84138],{"class":144,"line":32668},[142,84135,52173],{"class":152},[142,84137,51842],{"class":51329},[142,84139,51336],{"class":152},[142,84141,84142,84144,84146,84148],{"class":144,"line":32674},[142,84143,11250],{"class":148},[142,84145,79406],{"class":201},[142,84147,13593],{"class":148},[142,84149,55476],{"class":152},[142,84151,84152],{"class":144,"line":32680},[142,84153,79415],{"class":152},[142,84155,84156,84158,84160],{"class":144,"line":32686},[142,84157,79420],{"class":152},[142,84159,79423],{"class":257},[142,84161,31495],{"class":152},[142,84163,84164,84166,84168],{"class":144,"line":32697},[142,84165,79430],{"class":152},[142,84167,79433],{"class":257},[142,84169,31495],{"class":152},[142,84171,84172,84174,84177],{"class":144,"line":32703},[142,84173,79440],{"class":152},[142,84175,84176],{"class":201},"289.9",[142,84178,31495],{"class":152},[142,84180,84181,84183,84185],{"class":144,"line":32723},[142,84182,79450],{"class":152},[142,84184,79453],{"class":257},[142,84186,31495],{"class":152},[142,84188,84189,84192,84194],{"class":144,"line":32729},[142,84190,84191],{"class":152},"        count: ",[142,84193,230],{"class":201},[142,84195,31495],{"class":152},[142,84197,84198,84201,84204],{"class":144,"line":32740},[142,84199,84200],{"class":152},"        spec: { color: ",[142,84202,84203],{"class":257},"'白色'",[142,84205,55633],{"class":152},[142,84207,84208],{"class":144,"line":32746},[142,84209,77921],{"class":152},[142,84211,84212],{"class":144,"line":32752},[142,84213,79415],{"class":152},[142,84215,84216,84218,84220],{"class":144,"line":32758},[142,84217,79420],{"class":152},[142,84219,79514],{"class":257},[142,84221,31495],{"class":152},[142,84223,84224,84226,84228],{"class":144,"line":32764},[142,84225,79430],{"class":152},[142,84227,79523],{"class":257},[142,84229,31495],{"class":152},[142,84231,84232,84234,84237],{"class":144,"line":32770},[142,84233,79440],{"class":152},[142,84235,84236],{"class":201},"109.8",[142,84238,31495],{"class":152},[142,84240,84241,84243,84245],{"class":144,"line":32776},[142,84242,79450],{"class":152},[142,84244,79541],{"class":257},[142,84246,31495],{"class":152},[142,84248,84249,84251,84253],{"class":144,"line":32782},[142,84250,84191],{"class":152},[142,84252,224],{"class":201},[142,84254,31495],{"class":152},[142,84256,84257,84260,84262,84264,84266],{"class":144,"line":32802},[142,84258,84259],{"class":152},"        spec: { size: ",[142,84261,81932],{"class":257},[142,84263,55493],{"class":152},[142,84265,81937],{"class":257},[142,84267,55633],{"class":152},[142,84269,84270],{"class":144,"line":32808},[142,84271,77921],{"class":152},[142,84273,84274],{"class":144,"line":32824},[142,84275,79415],{"class":152},[142,84277,84278,84280,84282],{"class":144,"line":32830},[142,84279,79420],{"class":152},[142,84281,79558],{"class":257},[142,84283,31495],{"class":152},[142,84285,84286,84288,84290],{"class":144,"line":32844},[142,84287,79430],{"class":152},[142,84289,79567],{"class":257},[142,84291,31495],{"class":152},[142,84293,84294,84296,84299],{"class":144,"line":32850},[142,84295,79440],{"class":152},[142,84297,84298],{"class":201},"488",[142,84300,31495],{"class":152},[142,84302,84303,84305,84307],{"class":144,"line":32865},[142,84304,79450],{"class":152},[142,84306,79585],{"class":257},[142,84308,31495],{"class":152},[142,84310,84311,84313,84315],{"class":144,"line":32871},[142,84312,84191],{"class":152},[142,84314,370],{"class":201},[142,84316,31495],{"class":152},[142,84318,84319,84321,84324,84327,84330],{"class":144,"line":32880},[142,84320,84200],{"class":152},[142,84322,84323],{"class":257},"'青色'",[142,84325,84326],{"class":152},", sum: ",[142,84328,84329],{"class":257},"'一大四小'",[142,84331,55633],{"class":152},[142,84333,84334],{"class":144,"line":32886},[142,84335,77921],{"class":152},[142,84337,84338],{"class":144,"line":32895},[142,84339,79415],{"class":152},[142,84341,84342,84344,84346],{"class":144,"line":32901},[142,84343,79420],{"class":152},[142,84345,79602],{"class":257},[142,84347,31495],{"class":152},[142,84349,84350,84352,84354],{"class":144,"line":32907},[142,84351,79430],{"class":152},[142,84353,79611],{"class":257},[142,84355,31495],{"class":152},[142,84357,84358,84360,84363],{"class":144,"line":32916},[142,84359,79440],{"class":152},[142,84361,84362],{"class":201},"139",[142,84364,31495],{"class":152},[142,84366,84367,84369,84371],{"class":144,"line":32922},[142,84368,79450],{"class":152},[142,84370,79629],{"class":257},[142,84372,31495],{"class":152},[142,84374,84375,84377,84379],{"class":144,"line":32933},[142,84376,84191],{"class":152},[142,84378,370],{"class":201},[142,84380,31495],{"class":152},[142,84382,84383,84385,84388,84390,84393],{"class":144,"line":32939},[142,84384,84259],{"class":152},[142,84386,84387],{"class":257},"'小号'",[142,84389,55493],{"class":152},[142,84391,84392],{"class":257},"'紫色'",[142,84394,55499],{"class":152},[142,84396,84397,84400],{"class":144,"line":32958},[142,84398,84399],{"class":152},"        gift: ",[142,84401,84402],{"class":257},"'50g茶叶,清洗球'\n",[142,84404,84405],{"class":144,"line":32964},[142,84406,52427],{"class":152},[142,84408,84409],{"class":144,"line":32975},[142,84410,53138],{"class":152},[142,84412,84413],{"class":144,"line":32981},[142,84414,84415],{"class":211},"    \u002F\u002F  1.根据数据渲染页面\n",[142,84417,84418,84420,84422,84424,84426,84428,84430,84432,84434,84436,84438,84440],{"class":144,"line":33001},[142,84419,52436],{"class":152},[142,84421,54428],{"class":1991},[142,84423,153],{"class":152},[142,84425,79930],{"class":257},[142,84427,74278],{"class":152},[142,84429,198],{"class":148},[142,84431,80077],{"class":152},[142,84433,74073],{"class":1991},[142,84435,153],{"class":152},[142,84437,79824],{"class":5245},[142,84439,79827],{"class":148},[142,84441,15601],{"class":152},[142,84443,84444],{"class":144,"line":33017},[142,84445,84446],{"class":211},"      \u002F\u002F 对象解构\n",[142,84448,84449,84451,84453,84455,84457,84459,84461,84464,84466,84468,84470,84473,84475,84478,84480,84482],{"class":144,"line":33023},[142,84450,58257],{"class":148},[142,84452,79836],{"class":152},[142,84454,79849],{"class":201},[142,84456,12464],{"class":152},[142,84458,79839],{"class":201},[142,84460,12464],{"class":152},[142,84462,84463],{"class":201},"count",[142,84465,12464],{"class":152},[142,84467,79844],{"class":201},[142,84469,12464],{"class":152},[142,84471,84472],{"class":201},"spec",[142,84474,12464],{"class":152},[142,84476,84477],{"class":201},"gift",[142,84479,79852],{"class":152},[142,84481,198],{"class":148},[142,84483,79857],{"class":152},[142,84485,84486],{"class":144,"line":33037},[142,84487,84488],{"class":211},"      \u002F\u002F 规格文字模块处理\n",[142,84490,84491,84493,84496,84498,84500,84502,84504,84506,84508,84510],{"class":144,"line":33043},[142,84492,58257],{"class":148},[142,84494,84495],{"class":201}," text",[142,84497,13593],{"class":148},[142,84499,81967],{"class":152},[142,84501,81970],{"class":1991},[142,84503,81973],{"class":152},[142,84505,74252],{"class":1991},[142,84507,153],{"class":152},[142,84509,81980],{"class":257},[142,84511,159],{"class":152},[142,84513,84514],{"class":144,"line":33049},[142,84515,84516],{"class":211},"      \u002F\u002F 处理赠品模块\n",[142,84518,84519,84521,84523,84525,84528,84530,84532,84534,84536,84539,84541,84543,84545,84547,84549,84552,84554,84557,84559,84561,84563,84565,84567,84569],{"class":144,"line":33060},[142,84520,58257],{"class":148},[142,84522,73948],{"class":201},[142,84524,13593],{"class":148},[142,84526,84527],{"class":152}," gift ",[142,84529,1139],{"class":148},[142,84531,83141],{"class":152},[142,84533,83144],{"class":1991},[142,84535,153],{"class":152},[142,84537,84538],{"class":257},"','",[142,84540,30855],{"class":152},[142,84542,74073],{"class":1991},[142,84544,153],{"class":152},[142,84546,79824],{"class":5245},[142,84548,79827],{"class":148},[142,84550,84551],{"class":257}," `\u003Cspan class=\"tag\">【赠品】${",[142,84553,79824],{"class":152},[142,84555,84556],{"class":257},"}\u003C\u002Fspan>`",[142,84558,30855],{"class":152},[142,84560,74252],{"class":1991},[142,84562,153],{"class":152},[142,84564,74257],{"class":257},[142,84566,13743],{"class":152},[142,84568,1012],{"class":148},[142,84570,70133],{"class":257},[142,84572,84573],{"class":144,"line":33066},[142,84574,84575],{"class":211},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[142,84577,84578,84580,84583,84585,84588,84590,84592,84594,84597,84599,84601,84603,84606,84608,84610],{"class":144,"line":33072},[142,84579,58257],{"class":148},[142,84581,84582],{"class":201}," subtotal",[142,84584,13593],{"class":148},[142,84586,84587],{"class":152}," ((price ",[142,84589,608],{"class":148},[142,84591,5783],{"class":201},[142,84593,6547],{"class":148},[142,84595,84596],{"class":152}," count) ",[142,84598,737],{"class":148},[142,84600,5783],{"class":201},[142,84602,30855],{"class":152},[142,84604,84605],{"class":1991},"toFixed",[142,84607,153],{"class":152},[142,84609,230],{"class":201},[142,84611,159],{"class":152},[142,84613,84614],{"class":144,"line":33082},[142,84615,2428],{"emptyLinePlaceholder":69},[142,84617,84618,84620],{"class":144,"line":33088},[142,84619,74011],{"class":148},[142,84621,70197],{"class":257},[142,84623,84624],{"class":144,"line":33099},[142,84625,84626],{"class":257},"        \u003Cdiv class=\"item\">\n",[142,84628,84629,84632,84634],{"class":144,"line":33105},[142,84630,84631],{"class":257},"          \u003Cimg src=\"${",[142,84633,79849],{"class":152},[142,84635,79881],{"class":257},[142,84637,84638,84641,84643,84646,84648],{"class":144,"line":33115},[142,84639,84640],{"class":257},"          \u003Cp class=\"name\">${",[142,84642,79839],{"class":152},[142,84644,84645],{"class":257},"}${",[142,84647,1328],{"class":152},[142,84649,79891],{"class":257},[142,84651,84652,84655,84657],{"class":144,"line":33120},[142,84653,84654],{"class":257},"          \u003Cp class=\"spec\">${",[142,84656,5216],{"class":152},[142,84658,79891],{"class":257},[142,84660,84661,84664,84666,84668,84670,84672,84674,84676],{"class":144,"line":33126},[142,84662,84663],{"class":257},"          \u003Cp class=\"price\">${",[142,84665,79844],{"class":152},[142,84667,711],{"class":257},[142,84669,84605],{"class":1991},[142,84671,153],{"class":257},[142,84673,230],{"class":201},[142,84675,582],{"class":257},[142,84677,79891],{"class":257},[142,84679,84680,84683,84685],{"class":144,"line":33175},[142,84681,84682],{"class":257},"          \u003Cp class=\"count\">x${",[142,84684,84463],{"class":152},[142,84686,79891],{"class":257},[142,84688,84689,84692,84695],{"class":144,"line":33222},[142,84690,84691],{"class":257},"          \u003Cp class=\"sub-total\">${",[142,84693,84694],{"class":152},"subtotal",[142,84696,79891],{"class":257},[142,84698,84699],{"class":144,"line":33227},[142,84700,84701],{"class":257},"        \u003C\u002Fdiv> \n",[142,84703,84704],{"class":144,"line":33233},[142,84705,84706],{"class":257},"             `\n",[142,84708,84709,84712,84714,84716,84718],{"class":144,"line":33252},[142,84710,84711],{"class":152},"    }).",[142,84713,74252],{"class":1991},[142,84715,153],{"class":152},[142,84717,74257],{"class":257},[142,84719,159],{"class":152},[142,84721,84722],{"class":144,"line":33258},[142,84723,84724],{"class":211},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[142,84726,84727,84729,84731,84733,84735,84738,84740,84743,84745,84747,84749,84752,84755,84757,84760,84762,84764,84766,84769,84771,84773,84775,84777],{"class":144,"line":33278},[142,84728,11250],{"class":148},[142,84730,62814],{"class":201},[142,84732,13593],{"class":148},[142,84734,80077],{"class":152},[142,84736,84737],{"class":1991},"reduce",[142,84739,2404],{"class":152},[142,84741,84742],{"class":5245},"prev",[142,84744,12464],{"class":152},[142,84746,79824],{"class":5245},[142,84748,13743],{"class":152},[142,84750,84751],{"class":148},"=>",[142,84753,84754],{"class":152}," prev ",[142,84756,634],{"class":148},[142,84758,84759],{"class":152}," (item.price ",[142,84761,608],{"class":148},[142,84763,5783],{"class":201},[142,84765,6547],{"class":148},[142,84767,84768],{"class":152}," item.count) ",[142,84770,737],{"class":148},[142,84772,5783],{"class":201},[142,84774,12464],{"class":152},[142,84776,344],{"class":201},[142,84778,159],{"class":152},[142,84780,84781,84783,84785,84787,84790,84792,84794,84797,84799,84801,84803],{"class":144,"line":33284},[142,84782,52436],{"class":152},[142,84784,54428],{"class":1991},[142,84786,153],{"class":152},[142,84788,84789],{"class":257},"'.amount'",[142,84791,74278],{"class":152},[142,84793,198],{"class":148},[142,84795,84796],{"class":152}," total.",[142,84798,84605],{"class":1991},[142,84800,153],{"class":152},[142,84802,230],{"class":201},[142,84804,159],{"class":152},[142,84806,84807,84809,84811],{"class":144,"line":33290},[142,84808,52446],{"class":152},[142,84810,51842],{"class":51329},[142,84812,51336],{"class":152},[142,84814,84815,84817,84819],{"class":144,"line":33300},[142,84816,51814],{"class":152},[142,84818,51829],{"class":51329},[142,84820,51336],{"class":152},[142,84822,84823],{"class":144,"line":33305},[142,84824,2428],{"emptyLinePlaceholder":69},[142,84826,84827,84829,84831],{"class":144,"line":33311},[142,84828,51814],{"class":152},[142,84830,50664],{"class":51329},[142,84832,51336],{"class":152},[84,84834,84836],{"id":84835},"_411-编程思想","4.11 编程思想",[113,84838,84840],{"id":84839},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84842,84843,84846],{},[302,84844,84845],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84848,84849],{},"调用就可以了",[14,84851,84852],{},[29,84853],{"alt":31,"src":84854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[113,84856,84858],{"id":84857},"_4112-面向对象","4.11.2 面向对象",[14,84860,84861],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84863,84864],{},[29,84865],{"alt":31,"src":84866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84868,84869],{},"面向对象的特性：",[1160,84871,84872,84875,84878],{},[99,84873,84874],{},"封装性",[99,84876,84877],{},"继承性",[99,84879,84880],{},"多态性",[113,84882,84884],{"id":84883},"_4113-两者比较","4.11.3 两者比较",[14,84886,84887],{},[29,84888],{"alt":31,"src":84889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[84,84891,84893],{"id":84892},"_412-构造函数回顾","4.12 构造函数回顾",[14,84895,84896],{},[29,84897],{"alt":31,"src":84898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84900,84901],{},[29,84902],{"alt":31,"src":84903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84905,84906],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84908,84909],{},[29,84910],{"alt":31,"src":84911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[84,84913,84915],{"id":84914},"_413-原型","4.13 原型",[113,84917,84919],{"id":84918},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84921,84922],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84924,84925],{},[29,84926],{"alt":31,"src":84927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84929,84930],{},[29,84931],{"alt":31,"src":84932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84934,84935],{},"原型是构造函数的属性，它也是一个对象",[14,84937,84938],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84940,84941],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[133,84943,84945],{"className":53096,"code":84944,"language":53098,"meta":31,"style":31},"\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",[139,84946,84947,84955,84960,84968,84973,84978,84983,84988,84993,84997,85001,85005,85010,85015,85019,85024,85029,85034,85039,85044,85048,85056],{"__ignoreMap":31},[142,84948,84949,84951,84953],{"class":144,"line":145},[142,84950,1063],{"class":152},[142,84952,51829],{"class":51329},[142,84954,51336],{"class":152},[142,84956,84957],{"class":144,"line":64},[142,84958,84959],{"class":211},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[142,84961,84962,84964,84966],{"class":144,"line":1208},[142,84963,52173],{"class":152},[142,84965,51842],{"class":51329},[142,84967,51336],{"class":152},[142,84969,84970],{"class":144,"line":1223},[142,84971,84972],{"class":152},"    function Star(uname, age) {\n",[142,84974,84975],{"class":144,"line":1229},[142,84976,84977],{"class":152},"      this.uname = uname,\n",[142,84979,84980],{"class":144,"line":1243},[142,84981,84982],{"class":152},"        this.age = age\n",[142,84984,84985],{"class":144,"line":1249},[142,84986,84987],{"class":152},"      \u002F\u002F this.sing = function () {\n",[142,84989,84990],{"class":144,"line":1340},[142,84991,84992],{"class":152},"      \u002F\u002F   console.log('唱歌')\n",[142,84994,84995],{"class":144,"line":1346},[142,84996,2428],{"emptyLinePlaceholder":69},[142,84998,84999],{"class":144,"line":1358},[142,85000,60066],{"class":152},[142,85002,85003],{"class":144,"line":1640},[142,85004,2215],{"class":152},[142,85006,85007],{"class":144,"line":1645},[142,85008,85009],{"class":152},"    Star.prototype.sing = function () {\n",[142,85011,85012],{"class":144,"line":1651},[142,85013,85014],{"class":152},"      console.log('唱歌')\n",[142,85016,85017],{"class":144,"line":1656},[142,85018,2215],{"class":152},[142,85020,85021],{"class":144,"line":1670},[142,85022,85023],{"class":152},"    \u002F\u002F console.dir(Star.prototype)\n",[142,85025,85026],{"class":144,"line":1675},[142,85027,85028],{"class":152},"    const pink = new Star('pink', 18)\n",[142,85030,85031],{"class":144,"line":1681},[142,85032,85033],{"class":152},"    const red = new Star('red', 20)\n",[142,85035,85036],{"class":144,"line":1702},[142,85037,85038],{"class":152},"    pink.sing()\n",[142,85040,85041],{"class":144,"line":1707},[142,85042,85043],{"class":152},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[142,85045,85046],{"class":144,"line":1721},[142,85047,2428],{"emptyLinePlaceholder":69},[142,85049,85050,85052,85054],{"class":144,"line":1726},[142,85051,52446],{"class":152},[142,85053,51842],{"class":51329},[142,85055,51336],{"class":152},[142,85057,85058,85060,85062],{"class":144,"line":1755},[142,85059,51814],{"class":152},[142,85061,51829],{"class":51329},[142,85063,51336],{"class":152},[14,85065,85066],{},[29,85067],{"alt":31,"src":85068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[133,85070,85072],{"className":53096,"code":85071,"language":53098,"meta":31,"style":31},"\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",[139,85073,85074,85082,85090,85095,85100,85105,85110,85114,85119,85124,85129,85133,85138,85142,85146,85151,85155,85163],{"__ignoreMap":31},[142,85075,85076,85078,85080],{"class":144,"line":145},[142,85077,1063],{"class":152},[142,85079,51829],{"class":51329},[142,85081,51336],{"class":152},[142,85083,85084,85086,85088],{"class":144,"line":64},[142,85085,52173],{"class":152},[142,85087,51842],{"class":51329},[142,85089,51336],{"class":152},[142,85091,85092],{"class":144,"line":1208},[142,85093,85094],{"class":152},"    let that\n",[142,85096,85097],{"class":144,"line":1223},[142,85098,85099],{"class":152},"    function Star(uname) {\n",[142,85101,85102],{"class":144,"line":1229},[142,85103,85104],{"class":152},"      this.uname = uname\n",[142,85106,85107],{"class":144,"line":1243},[142,85108,85109],{"class":152},"      that = this\n",[142,85111,85112],{"class":144,"line":1249},[142,85113,2215],{"class":152},[142,85115,85116],{"class":144,"line":1340},[142,85117,85118],{"class":152},"    \u002F\u002F 实例对象是 ldh\n",[142,85120,85121],{"class":144,"line":1346},[142,85122,85123],{"class":152},"    const ldh = new Star('刘德华')\n",[142,85125,85126],{"class":144,"line":1358},[142,85127,85128],{"class":152},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[142,85130,85131],{"class":144,"line":1640},[142,85132,2428],{"emptyLinePlaceholder":69},[142,85134,85135],{"class":144,"line":1645},[142,85136,85137],{"class":152},"    Star.sing = function () {\n",[142,85139,85140],{"class":144,"line":1651},[142,85141,85014],{"class":152},[142,85143,85144],{"class":144,"line":1656},[142,85145,2215],{"class":152},[142,85147,85148],{"class":144,"line":1670},[142,85149,85150],{"class":152},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[142,85152,85153],{"class":144,"line":1675},[142,85154,2428],{"emptyLinePlaceholder":69},[142,85156,85157,85159,85161],{"class":144,"line":1681},[142,85158,52446],{"class":152},[142,85160,51842],{"class":51329},[142,85162,51336],{"class":152},[142,85164,85165,85167,85169],{"class":144,"line":1702},[142,85166,51814],{"class":152},[142,85168,51829],{"class":51329},[142,85170,51336],{"class":152},[14,85172,85173],{},"构造函数的this指向的是实例对象；",[14,85175,85176],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[113,85178,85180],{"id":85179},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85182,85183],{},[29,85184],{"alt":31,"src":85185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[133,85187,85189],{"className":53096,"code":85188,"language":53098,"meta":31,"style":31},"\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",[139,85190,85191,85199,85207,85212,85217,85222,85227,85232,85237,85242,85247,85252,85257,85261,85266,85271,85276,85281,85285,85290,85295,85300,85305,85309,85314,85319,85324,85329,85333,85338,85342,85350],{"__ignoreMap":31},[142,85192,85193,85195,85197],{"class":144,"line":145},[142,85194,1063],{"class":152},[142,85196,51829],{"class":51329},[142,85198,51336],{"class":152},[142,85200,85201,85203,85205],{"class":144,"line":64},[142,85202,52173],{"class":152},[142,85204,51842],{"class":51329},[142,85206,51336],{"class":152},[142,85208,85209],{"class":144,"line":1208},[142,85210,85211],{"class":152},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[142,85213,85214],{"class":144,"line":1223},[142,85215,85216],{"class":152},"    const arr = [1, 2, 3]\n",[142,85218,85219],{"class":144,"line":1229},[142,85220,85221],{"class":152},"    \u002F\u002F 自己定义数组的扩展方法\n",[142,85223,85224],{"class":144,"line":1243},[142,85225,85226],{"class":152},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[142,85228,85229],{"class":144,"line":1249},[142,85230,85231],{"class":152},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[142,85233,85234],{"class":144,"line":1340},[142,85235,85236],{"class":152},"    \u002F\u002F ①.最大值\n",[142,85238,85239],{"class":144,"line":1346},[142,85240,85241],{"class":152},"    Array.prototype.max = function () {\n",[142,85243,85244],{"class":144,"line":1358},[142,85245,85246],{"class":152},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[142,85248,85249],{"class":144,"line":1640},[142,85250,85251],{"class":152},"      return Math.max(...this)\n",[142,85253,85254],{"class":144,"line":1645},[142,85255,85256],{"class":152},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[142,85258,85259],{"class":144,"line":1651},[142,85260,2215],{"class":152},[142,85262,85263],{"class":144,"line":1656},[142,85264,85265],{"class":152},"    console.log(arr.max())\n",[142,85267,85268],{"class":144,"line":1670},[142,85269,85270],{"class":152},"    \u002F\u002F ②最小值\n",[142,85272,85273],{"class":144,"line":1675},[142,85274,85275],{"class":152},"    Array.prototype.min = function () {\n",[142,85277,85278],{"class":144,"line":1681},[142,85279,85280],{"class":152},"      return Math.min(...this)\n",[142,85282,85283],{"class":144,"line":1702},[142,85284,2215],{"class":152},[142,85286,85287],{"class":144,"line":1707},[142,85288,85289],{"class":152},"    console.log(arr.min())\n",[142,85291,85292],{"class":144,"line":1721},[142,85293,85294],{"class":152},"    \u002F\u002F③求和\n",[142,85296,85297],{"class":144,"line":1726},[142,85298,85299],{"class":152},"    Array.prototype.sum = function () {\n",[142,85301,85302],{"class":144,"line":1755},[142,85303,85304],{"class":152},"      return this.reduce((prev, current) => prev + current, 0)\n",[142,85306,85307],{"class":144,"line":1760},[142,85308,2215],{"class":152},[142,85310,85311],{"class":144,"line":1777},[142,85312,85313],{"class":152},"    console.log(arr.sum())\n",[142,85315,85316],{"class":144,"line":1782},[142,85317,85318],{"class":152},"    \u002F\u002F ③排序\n",[142,85320,85321],{"class":144,"line":1787},[142,85322,85323],{"class":152},"    Array.prototype.rever = function () {\n",[142,85325,85326],{"class":144,"line":1792},[142,85327,85328],{"class":152},"      return this.reverse()\n",[142,85330,85331],{"class":144,"line":1806},[142,85332,2215],{"class":152},[142,85334,85335],{"class":144,"line":1811},[142,85336,85337],{"class":152},"    console.log(arr.rever())\n",[142,85339,85340],{"class":144,"line":2605},[142,85341,2428],{"emptyLinePlaceholder":69},[142,85343,85344,85346,85348],{"class":144,"line":2619},[142,85345,52446],{"class":152},[142,85347,51842],{"class":51329},[142,85349,51336],{"class":152},[142,85351,85352,85354,85356],{"class":144,"line":2627},[142,85353,51814],{"class":152},[142,85355,51829],{"class":51329},[142,85357,51336],{"class":152},[14,85359,85360],{},[29,85361],{"alt":31,"src":85362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[113,85364,85366],{"id":85365},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85368,85369],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85371,85372],{},[29,85373],{"alt":31,"src":85374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[133,85376,85378],{"className":53096,"code":85377,"language":53098,"meta":31,"style":31},"\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",[139,85379,85380,85388,85396,85401,85406,85410,85415,85420,85425,85433],{"__ignoreMap":31},[142,85381,85382,85384,85386],{"class":144,"line":145},[142,85383,1063],{"class":152},[142,85385,51829],{"class":51329},[142,85387,51336],{"class":152},[142,85389,85390,85392,85394],{"class":144,"line":64},[142,85391,52173],{"class":152},[142,85393,51842],{"class":51329},[142,85395,51336],{"class":152},[142,85397,85398],{"class":144,"line":1208},[142,85399,85400],{"class":152},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[142,85402,85403],{"class":144,"line":1223},[142,85404,85405],{"class":152},"    function Star() {\n",[142,85407,85408],{"class":144,"line":1229},[142,85409,2215],{"class":152},[142,85411,85412],{"class":144,"line":1243},[142,85413,85414],{"class":152},"    const ldh = new Star()\n",[142,85416,85417],{"class":144,"line":1249},[142,85418,85419],{"class":152},"    console.log(Star.prototype)\n",[142,85421,85422],{"class":144,"line":1340},[142,85423,85424],{"class":152},"    console.log(Star.prototype.constructor === Star)\n",[142,85426,85427,85429,85431],{"class":144,"line":1346},[142,85428,52446],{"class":152},[142,85430,51842],{"class":51329},[142,85432,51336],{"class":152},[142,85434,85435,85437,85439],{"class":144,"line":1358},[142,85436,51814],{"class":152},[142,85438,51829],{"class":51329},[142,85440,51336],{"class":152},[14,85442,85443],{},[29,85444],{"alt":31,"src":85445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85447,85448],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[133,85450,85452],{"className":53096,"code":85451,"language":53098,"meta":31,"style":31},"  \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",[139,85453,85454,85462,85466,85470,85474,85479,85484,85489,85493,85498,85503,85508,85513,85518,85523,85527,85531,85536,85541,85546,85550,85555,85560,85564,85568,85572],{"__ignoreMap":31},[142,85455,85456,85458,85460],{"class":144,"line":145},[142,85457,52173],{"class":152},[142,85459,51842],{"class":51329},[142,85461,51336],{"class":152},[142,85463,85464],{"class":144,"line":64},[142,85465,85400],{"class":152},[142,85467,85468],{"class":144,"line":1208},[142,85469,85405],{"class":152},[142,85471,85472],{"class":144,"line":1223},[142,85473,2215],{"class":152},[142,85475,85476],{"class":144,"line":1229},[142,85477,85478],{"class":152},"    \u002F\u002F const ldh = new Star()\n",[142,85480,85481],{"class":144,"line":1243},[142,85482,85483],{"class":152},"    \u002F\u002F console.log(Star.prototype)\n",[142,85485,85486],{"class":144,"line":1249},[142,85487,85488],{"class":152},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[142,85490,85491],{"class":144,"line":1340},[142,85492,2428],{"emptyLinePlaceholder":69},[142,85494,85495],{"class":144,"line":1346},[142,85496,85497],{"class":152},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[142,85499,85500],{"class":144,"line":1358},[142,85501,85502],{"class":152},"    \u002F\u002F Star.prototype.sing = function () {\n",[142,85504,85505],{"class":144,"line":1640},[142,85506,85507],{"class":152},"    \u002F\u002F   console.log('唱歌')\n",[142,85509,85510],{"class":144,"line":1645},[142,85511,85512],{"class":152},"    \u002F\u002F }\n",[142,85514,85515],{"class":144,"line":1651},[142,85516,85517],{"class":152},"    \u002F\u002F Star.prototype.dance = function () {\n",[142,85519,85520],{"class":144,"line":1656},[142,85521,85522],{"class":152},"    \u002F\u002F   console.log('跳舞')\n",[142,85524,85525],{"class":144,"line":1670},[142,85526,85512],{"class":152},[142,85528,85529],{"class":144,"line":1675},[142,85530,85419],{"class":152},[142,85532,85533],{"class":144,"line":1681},[142,85534,85535],{"class":152},"    Star.prototype = {\n",[142,85537,85538],{"class":144,"line":1702},[142,85539,85540],{"class":152},"      sing: function () {\n",[142,85542,85543],{"class":144,"line":1707},[142,85544,85545],{"class":152},"        console.log('唱歌')\n",[142,85547,85548],{"class":144,"line":1721},[142,85549,77921],{"class":152},[142,85551,85552],{"class":144,"line":1726},[142,85553,85554],{"class":152},"      dance: function () {\n",[142,85556,85557],{"class":144,"line":1755},[142,85558,85559],{"class":152},"        console.log('跳舞')\n",[142,85561,85562],{"class":144,"line":1760},[142,85563,52427],{"class":152},[142,85565,85566],{"class":144,"line":1777},[142,85567,2215],{"class":152},[142,85569,85570],{"class":144,"line":1782},[142,85571,85419],{"class":152},[142,85573,85574,85576,85578],{"class":144,"line":1787},[142,85575,52446],{"class":152},[142,85577,51842],{"class":51329},[142,85579,51336],{"class":152},[14,85581,85582],{},"进行输出结果后会发现：",[14,85584,85585],{},[29,85586],{"alt":31,"src":85587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85589,85590],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85592,85593],{},"所以，要重新指回创造这个原型对象的构造函数",[133,85595,85597],{"className":71242,"code":85596,"language":71244,"meta":31,"style":31},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[139,85598,85599,85613,85618,85623,85634,85647,85652,85663,85677,85681],{"__ignoreMap":31},[142,85600,85601,85604,85606,85609,85611],{"class":144,"line":145},[142,85602,85603],{"class":201},"Star",[142,85605,711],{"class":152},[142,85607,85608],{"class":201},"prototype",[142,85610,13593],{"class":148},[142,85612,15601],{"class":152},[142,85614,85615],{"class":144,"line":64},[142,85616,85617],{"class":211},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[142,85619,85620],{"class":144,"line":1208},[142,85621,85622],{"class":152},"  constructor: Star,\n",[142,85624,85625,85628,85630,85632],{"class":144,"line":1223},[142,85626,85627],{"class":1991},"  sing",[142,85629,51466],{"class":152},[142,85631,54478],{"class":148},[142,85633,54481],{"class":152},[142,85635,85636,85638,85640,85642,85645],{"class":144,"line":1229},[142,85637,73782],{"class":152},[142,85639,58276],{"class":1991},[142,85641,153],{"class":152},[142,85643,85644],{"class":257},"'唱歌'",[142,85646,159],{"class":152},[142,85648,85649],{"class":144,"line":1243},[142,85650,85651],{"class":152},"   },\n",[142,85653,85654,85657,85659,85661],{"class":144,"line":1249},[142,85655,85656],{"class":1991},"   dance",[142,85658,51466],{"class":152},[142,85660,54478],{"class":148},[142,85662,54481],{"class":152},[142,85664,85665,85668,85670,85672,85675],{"class":144,"line":1340},[142,85666,85667],{"class":152},"     console.",[142,85669,58276],{"class":1991},[142,85671,153],{"class":152},[142,85673,85674],{"class":257},"'跳舞'",[142,85676,159],{"class":152},[142,85678,85679],{"class":144,"line":1346},[142,85680,4337],{"class":152},[142,85682,85683],{"class":144,"line":1358},[142,85684,1593],{"class":152},[14,85686,85687],{},[29,85688],{"alt":31,"src":85689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85691,85692],{},"总结1：",[14,85694,85695],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85697,85698],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85700,85701],{},"constructor指的是他的来源",[14,85703,85704],{},[29,85705],{"alt":31,"src":85706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85708,85709],{},[29,85710],{"alt":31,"src":85711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85713,85714],{},"总结2：",[14,85716,85717],{},[29,85718],{"alt":31,"src":85719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85721,85722],{},[29,85723],{"alt":31,"src":85724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85726,85727],{},[29,85728],{"alt":31,"src":85729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[113,85731,85733],{"id":85732},"_4134-对象原型","4.13.4 对象原型",[14,85735,85736],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85738,85739],{},"对象原型就是__proto__这个属性",[14,85741,85742],{},[29,85743],{"alt":31,"src":85744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85746,85747],{},[29,85748],{"alt":31,"src":85749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85751,85752],{},[29,85753],{"alt":31,"src":85754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85756,85757],{},[29,85758],{"alt":31,"src":85759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[133,85761,85763],{"className":53096,"code":85762,"language":53098,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[139,85764,85765,85773,85781,85785,85789,85793,85798,85806],{"__ignoreMap":31},[142,85766,85767,85769,85771],{"class":144,"line":145},[142,85768,1063],{"class":152},[142,85770,51829],{"class":51329},[142,85772,51336],{"class":152},[142,85774,85775,85777,85779],{"class":144,"line":64},[142,85776,52173],{"class":152},[142,85778,51842],{"class":51329},[142,85780,51336],{"class":152},[142,85782,85783],{"class":144,"line":1208},[142,85784,85405],{"class":152},[142,85786,85787],{"class":144,"line":1223},[142,85788,2215],{"class":152},[142,85790,85791],{"class":144,"line":1229},[142,85792,85414],{"class":152},[142,85794,85795],{"class":144,"line":1243},[142,85796,85797],{"class":152},"    console.log(ldh)\n",[142,85799,85800,85802,85804],{"class":144,"line":1249},[142,85801,52446],{"class":152},[142,85803,51842],{"class":51329},[142,85805,51336],{"class":152},[142,85807,85808,85810,85812],{"class":144,"line":1340},[142,85809,51814],{"class":152},[142,85811,51829],{"class":51329},[142,85813,51336],{"class":152},[14,85815,85816],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85818,85819],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85821,85822],{},[29,85823],{"alt":31,"src":85824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85826,85827],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85829,85830],{},"对象原型指向原型对象",[14,85832,85833],{},[29,85834],{"alt":31,"src":85835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85837,85838],{},[29,85839],{"alt":31,"src":85840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85842,85843],{},[29,85844],{"alt":31,"src":85845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[113,85847,85849],{"id":85848},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85851,85852],{},[29,85853],{"alt":31,"src":85854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[96,85856,85857,85860,85863,85866],{},[99,85858,85859],{},"构造函数通过new的形式实例化得到实例对象",[99,85861,85862],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[99,85864,85865],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[99,85867,85868],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85870,85871],{},[29,85872],{"alt":31,"src":85873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85875,85876],{},"题目梳理：",[14,85878,85879],{},[29,85880],{"alt":31,"src":85881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[113,85883,85885],{"id":85884},"_4136-原型继承","4.13.6 原型继承",[14,85887,85888],{},[29,85889],{"alt":31,"src":85890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85892,85893],{},[29,85894],{"alt":31,"src":85895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85897,85898],{},[29,85899],{"alt":31,"src":85900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85902,85903],{},[29,85904],{"alt":31,"src":85905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85907,85908],{},[29,85909],{"alt":31,"src":85910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85912,85913],{},[29,85914],{"alt":31,"src":85915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85917,85918],{},[29,85919],{"alt":31,"src":85920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85922,85923],{},[29,85924],{"alt":31,"src":85925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85927,85928],{},"回顾：构造函数每次new得到对象都是不同的",[113,85930,85932],{"id":85931},"_4137-原型链","4.13.7 原型链",[14,85934,85935],{},[29,85936],{"alt":31,"src":85937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85939,85940],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85942,85943],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85945,85946],{},"大哥是Object",[14,85948,85949],{},[29,85950],{"alt":31,"src":85951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85953,85954],{},[29,85955],{"alt":31,"src":85956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85958,85959],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85961,85962],{},"万物皆对象",[113,85964,85966],{"id":85965},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85968,85969],{},"模态框",[14,85971,85972],{},"以后遇见这个效果直接使用这个就行",[14,85974,85975],{},[29,85976],{"alt":31,"src":85977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,85979,85980],{},[29,85981],{"alt":31,"src":85982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,85984,85985],{},[29,85986],{"alt":31,"src":85987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,85989,85990],{},[29,85991],{"alt":31,"src":85992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,85994,85995],{},"补充知识点：",[96,85997,85998],{},[99,85999,86000],{},"append()",[14,86002,86003],{},[29,86004],{"alt":31,"src":86005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[133,86007,86009],{"className":50662,"code":86008,"language":50664,"meta":31,"style":31},"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",[139,86010,86011,86016,86021,86026,86030,86034,86038,86043,86048,86053,86057],{"__ignoreMap":31},[142,86012,86013],{"class":144,"line":145},[142,86014,86015],{"class":152},"append(param1)\n",[142,86017,86018],{"class":144,"line":64},[142,86019,86020],{"class":152},"append(param1, param2)\n",[142,86022,86023],{"class":144,"line":1208},[142,86024,86025],{"class":152},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[142,86027,86028],{"class":144,"line":1223},[142,86029,2428],{"emptyLinePlaceholder":69},[142,86031,86032],{"class":144,"line":1229},[142,86033,2428],{"emptyLinePlaceholder":69},[142,86035,86036],{"class":144,"line":1243},[142,86037,2428],{"emptyLinePlaceholder":69},[142,86039,86040],{"class":144,"line":1249},[142,86041,86042],{"class":152},"let div = document.createElement(\"div\");\n",[142,86044,86045],{"class":144,"line":1340},[142,86046,86047],{"class":152},"let p = document.createElement(\"p\");\n",[142,86049,86050],{"class":144,"line":1346},[142,86051,86052],{"class":152},"div.append(p);\n",[142,86054,86055],{"class":144,"line":1358},[142,86056,2428],{"emptyLinePlaceholder":69},[142,86058,86059,86062,86064],{"class":144,"line":1640},[142,86060,86061],{"class":152},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[142,86063,14],{"class":51329},[142,86065,86066],{"class":152},"> ]\n",[96,86068,86069],{"start":64},[99,86070,86071],{},"remove()",[14,86073,86074],{},"自己删自己",[14,86076,86077],{},[29,86078],{"alt":31,"src":86079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[133,86081,86083],{"className":50662,"code":86082,"language":50664,"meta":31,"style":31},"\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",[139,86084,86085,86095,86109,86113,86121,86135,86155,86167,86175,86182,86194,86207,86242,86254,86265,86277,86289,86301,86328,86338,86342,86346,86355,86367,86381,86391,86403,86407,86411,86421,86432,86442,86452,86465,86478,86488,86492,86496,86505,86515,86527,86531,86535,86544,86554,86564,86576,86580,86584,86594,86610,86621,86631,86641,86653,86665,86677,86681,86685,86698,86709,86713,86721,86729,86733,86741,86761,86781,86789,86794,86820,86825,86830,86849,86854,86866,86871,86882,86892,86902,86907,86912,86916,86921,86926,86931,86951,86956,86976,86981,86995,87000,87005,87010,87026,87030,87035,87064,87069,87074,87079,87090,87094,87098,87102,87107,87132,87137,87162,87167,87176,87180,87185,87210,87214,87239,87243,87252,87256,87261,87279,87289,87293,87301,87309,87313],{"__ignoreMap":31},[142,86086,86087,86089,86091,86093],{"class":144,"line":145},[142,86088,51326],{"class":152},[142,86090,51330],{"class":51329},[142,86092,51333],{"class":1991},[142,86094,51336],{"class":152},[142,86096,86097,86099,86101,86103,86105,86107],{"class":144,"line":64},[142,86098,1063],{"class":152},[142,86100,50664],{"class":51329},[142,86102,51345],{"class":1991},[142,86104,198],{"class":152},[142,86106,51350],{"class":257},[142,86108,51336],{"class":152},[142,86110,86111],{"class":144,"line":1208},[142,86112,2428],{"emptyLinePlaceholder":69},[142,86114,86115,86117,86119],{"class":144,"line":1223},[142,86116,1063],{"class":152},[142,86118,51363],{"class":51329},[142,86120,51336],{"class":152},[142,86122,86123,86125,86127,86129,86131,86133],{"class":144,"line":1229},[142,86124,52173],{"class":152},[142,86126,51373],{"class":51329},[142,86128,51376],{"class":1991},[142,86130,198],{"class":152},[142,86132,51381],{"class":257},[142,86134,51336],{"class":152},[142,86136,86137,86139,86141,86143,86145,86147,86149,86151,86153],{"class":144,"line":1243},[142,86138,52173],{"class":152},[142,86140,51373],{"class":51329},[142,86142,14949],{"class":1991},[142,86144,198],{"class":152},[142,86146,51420],{"class":257},[142,86148,51400],{"class":1991},[142,86150,198],{"class":152},[142,86152,51427],{"class":257},[142,86154,51336],{"class":152},[142,86156,86157,86159,86161,86163,86165],{"class":144,"line":1249},[142,86158,52173],{"class":152},[142,86160,51436],{"class":51329},[142,86162,51439],{"class":152},[142,86164,51436],{"class":51329},[142,86166,51336],{"class":152},[142,86168,86169,86171,86173],{"class":144,"line":1340},[142,86170,52173],{"class":152},[142,86172,5155],{"class":51329},[142,86174,51336],{"class":152},[142,86176,86177,86180],{"class":144,"line":1346},[142,86178,86179],{"class":1991},"    .modal",[142,86181,15601],{"class":152},[142,86183,86184,86186,86188,86190,86192],{"class":144,"line":1358},[142,86185,54800],{"class":201},[142,86187,51466],{"class":152},[142,86189,4001],{"class":201},[142,86191,51521],{"class":148},[142,86193,1319],{"class":152},[142,86195,86196,86199,86201,86203,86205],{"class":144,"line":1640},[142,86197,86198],{"class":201},"      min-height",[142,86200,51466],{"class":152},[142,86202,464],{"class":201},[142,86204,51521],{"class":148},[142,86206,1319],{"class":152},[142,86208,86209,86211,86213,86215,86217,86219,86221,86223,86225,86227,86229,86231,86233,86235,86237,86240],{"class":144,"line":1645},[142,86210,78779],{"class":201},[142,86212,51466],{"class":152},[142,86214,344],{"class":201},[142,86216,4121],{"class":201},[142,86218,2066],{"class":201},[142,86220,51521],{"class":148},[142,86222,78796],{"class":201},[142,86224,153],{"class":152},[142,86226,344],{"class":201},[142,86228,12464],{"class":152},[142,86230,344],{"class":201},[142,86232,12464],{"class":152},[142,86234,344],{"class":201},[142,86236,12464],{"class":152},[142,86238,86239],{"class":201},"0.1",[142,86241,2747],{"class":152},[142,86243,86244,86246,86248,86250,86252],{"class":144,"line":1651},[142,86245,55163],{"class":201},[142,86247,51466],{"class":152},[142,86249,446],{"class":201},[142,86251,51521],{"class":148},[142,86253,1319],{"class":152},[142,86255,86256,86258,86260,86263],{"class":144,"line":1656},[142,86257,54788],{"class":201},[142,86259,51466],{"class":152},[142,86261,86262],{"class":201},"fixed",[142,86264,1319],{"class":152},[142,86266,86267,86270,86272,86275],{"class":144,"line":1670},[142,86268,86269],{"class":201},"      z-index",[142,86271,51466],{"class":152},[142,86273,86274],{"class":201},"999",[142,86276,1319],{"class":152},[142,86278,86279,86281,86283,86285,86287],{"class":144,"line":1675},[142,86280,54867],{"class":201},[142,86282,51466],{"class":152},[142,86284,809],{"class":201},[142,86286,481],{"class":148},[142,86288,1319],{"class":152},[142,86290,86291,86293,86295,86297,86299],{"class":144,"line":1681},[142,86292,54976],{"class":201},[142,86294,51466],{"class":152},[142,86296,809],{"class":201},[142,86298,481],{"class":148},[142,86300,1319],{"class":152},[142,86302,86303,86305,86307,86309,86311,86314,86316,86318,86320,86322,86324,86326],{"class":144,"line":1702},[142,86304,78820],{"class":201},[142,86306,51466],{"class":152},[142,86308,78825],{"class":201},[142,86310,153],{"class":152},[142,86312,86313],{"class":201},"-50",[142,86315,481],{"class":148},[142,86317,12464],{"class":152},[142,86319,86313],{"class":201},[142,86321,481],{"class":148},[142,86323,12464],{"class":152},[142,86325,344],{"class":201},[142,86327,2747],{"class":152},[142,86329,86330,86332,86334,86336],{"class":144,"line":1707},[142,86331,54913],{"class":201},[142,86333,51466],{"class":152},[142,86335,60871],{"class":201},[142,86337,1319],{"class":152},[142,86339,86340],{"class":144,"line":1721},[142,86341,2215],{"class":152},[142,86343,86344],{"class":144,"line":1726},[142,86345,2428],{"emptyLinePlaceholder":69},[142,86347,86348,86350,86353],{"class":144,"line":1755},[142,86349,86179],{"class":1991},[142,86351,86352],{"class":1991}," .header",[142,86354,15601],{"class":152},[142,86356,86357,86359,86361,86363,86365],{"class":144,"line":1760},[142,86358,57388],{"class":201},[142,86360,51466],{"class":152},[142,86362,554],{"class":201},[142,86364,51521],{"class":148},[142,86366,1319],{"class":152},[142,86368,86369,86371,86373,86375,86377,86379],{"class":144,"line":1777},[142,86370,54724],{"class":201},[142,86372,51466],{"class":152},[142,86374,344],{"class":201},[142,86376,2066],{"class":201},[142,86378,51521],{"class":148},[142,86380,1319],{"class":152},[142,86382,86383,86385,86387,86389],{"class":144,"line":1782},[142,86384,54788],{"class":201},[142,86386,51466],{"class":152},[142,86388,54793],{"class":201},[142,86390,1319],{"class":152},[142,86392,86393,86395,86397,86399,86401],{"class":144,"line":1787},[142,86394,54951],{"class":201},[142,86396,51466],{"class":152},[142,86398,853],{"class":201},[142,86400,51521],{"class":148},[142,86402,1319],{"class":152},[142,86404,86405],{"class":144,"line":1792},[142,86406,2215],{"class":152},[142,86408,86409],{"class":144,"line":1806},[142,86410,2428],{"emptyLinePlaceholder":69},[142,86412,86413,86415,86417,86419],{"class":144,"line":1811},[142,86414,86179],{"class":1991},[142,86416,86352],{"class":1991},[142,86418,3060],{"class":51329},[142,86420,15601],{"class":152},[142,86422,86423,86426,86428,86430],{"class":144,"line":2605},[142,86424,86425],{"class":201},"      font-style",[142,86427,51466],{"class":152},[142,86429,63870],{"class":201},[142,86431,1319],{"class":152},[142,86433,86434,86436,86438,86440],{"class":144,"line":2619},[142,86435,57445],{"class":201},[142,86437,51466],{"class":152},[142,86439,62099],{"class":201},[142,86441,1319],{"class":152},[142,86443,86444,86446,86448,86450],{"class":144,"line":2627},[142,86445,54788],{"class":201},[142,86447,51466],{"class":152},[142,86449,54860],{"class":201},[142,86451,1319],{"class":152},[142,86453,86454,86457,86459,86461,86463],{"class":144,"line":2632},[142,86455,86456],{"class":201},"      right",[142,86458,51466],{"class":152},[142,86460,728],{"class":201},[142,86462,51521],{"class":148},[142,86464,1319],{"class":152},[142,86466,86467,86469,86471,86474,86476],{"class":144,"line":2638},[142,86468,54976],{"class":201},[142,86470,51466],{"class":152},[142,86472,86473],{"class":201},"-2",[142,86475,51521],{"class":148},[142,86477,1319],{"class":152},[142,86479,86480,86482,86484,86486],{"class":144,"line":2644},[142,86481,62054],{"class":201},[142,86483,51466],{"class":152},[142,86485,62059],{"class":201},[142,86487,1319],{"class":152},[142,86489,86490],{"class":144,"line":2649},[142,86491,2215],{"class":152},[142,86493,86494],{"class":144,"line":7977},[142,86495,2428],{"emptyLinePlaceholder":69},[142,86497,86498,86500,86503],{"class":144,"line":8001},[142,86499,86179],{"class":1991},[142,86501,86502],{"class":1991}," .body",[142,86504,15601],{"class":152},[142,86506,86507,86509,86511,86513],{"class":144,"line":8006},[142,86508,57315],{"class":201},[142,86510,51466],{"class":152},[142,86512,51621],{"class":201},[142,86514,1319],{"class":152},[142,86516,86517,86519,86521,86523,86525],{"class":144,"line":8012},[142,86518,54724],{"class":201},[142,86520,51466],{"class":152},[142,86522,599],{"class":201},[142,86524,51521],{"class":148},[142,86526,1319],{"class":152},[142,86528,86529],{"class":144,"line":8039},[142,86530,2215],{"class":152},[142,86532,86533],{"class":144,"line":8044},[142,86534,2428],{"emptyLinePlaceholder":69},[142,86536,86537,86539,86542],{"class":144,"line":8050},[142,86538,86179],{"class":1991},[142,86540,86541],{"class":1991}," .footer",[142,86543,15601],{"class":152},[142,86545,86546,86548,86550,86552],{"class":144,"line":8062},[142,86547,55038],{"class":201},[142,86549,51466],{"class":152},[142,86551,51506],{"class":201},[142,86553,1319],{"class":152},[142,86555,86556,86558,86560,86562],{"class":144,"line":8074},[142,86557,55049],{"class":201},[142,86559,51466],{"class":152},[142,86561,51609],{"class":201},[142,86563,1319],{"class":152},[142,86565,86566,86568,86570,86572,86574],{"class":144,"line":8086},[142,86567,54724],{"class":201},[142,86569,51466],{"class":152},[142,86571,599],{"class":201},[142,86573,51521],{"class":148},[142,86575,1319],{"class":152},[142,86577,86578],{"class":144,"line":9745},[142,86579,2215],{"class":152},[142,86581,86582],{"class":144,"line":9770},[142,86583,2428],{"emptyLinePlaceholder":69},[142,86585,86586,86588,86590,86592],{"class":144,"line":9793},[142,86587,86179],{"class":1991},[142,86589,86541],{"class":1991},[142,86591,1427],{"class":51329},[142,86593,15601],{"class":152},[142,86595,86596,86598,86600,86602,86604,86606,86608],{"class":144,"line":9817},[142,86597,54724],{"class":201},[142,86599,51466],{"class":152},[142,86601,224],{"class":201},[142,86603,51521],{"class":148},[142,86605,2111],{"class":201},[142,86607,51521],{"class":148},[142,86609,1319],{"class":152},[142,86611,86612,86614,86616,86619],{"class":144,"line":9822},[142,86613,61750],{"class":201},[142,86615,51466],{"class":152},[142,86617,86618],{"class":201},"#ccc",[142,86620,1319],{"class":152},[142,86622,86623,86625,86627,86629],{"class":144,"line":9827},[142,86624,63999],{"class":201},[142,86626,51466],{"class":152},[142,86628,54766],{"class":201},[142,86630,1319],{"class":152},[142,86632,86633,86635,86637,86639],{"class":144,"line":9832},[142,86634,57445],{"class":201},[142,86636,51466],{"class":152},[142,86638,60871],{"class":201},[142,86640,1319],{"class":152},[142,86642,86643,86645,86647,86649,86651],{"class":144,"line":9841},[142,86644,55163],{"class":201},[142,86646,51466],{"class":152},[142,86648,230],{"class":201},[142,86650,51521],{"class":148},[142,86652,1319],{"class":152},[142,86654,86655,86657,86659,86661,86663],{"class":144,"line":9846},[142,86656,61779],{"class":201},[142,86658,51466],{"class":152},[142,86660,599],{"class":201},[142,86662,51521],{"class":148},[142,86664,1319],{"class":152},[142,86666,86667,86669,86671,86673,86675],{"class":144,"line":9852},[142,86668,54951],{"class":201},[142,86670,51466],{"class":152},[142,86672,702],{"class":201},[142,86674,51521],{"class":148},[142,86676,1319],{"class":152},[142,86678,86679],{"class":144,"line":9873},[142,86680,2215],{"class":152},[142,86682,86683],{"class":144,"line":9879},[142,86684,2428],{"emptyLinePlaceholder":69},[142,86686,86687,86689,86691,86693,86696],{"class":144,"line":9893},[142,86688,86179],{"class":1991},[142,86690,86541],{"class":1991},[142,86692,1427],{"class":51329},[142,86694,86695],{"class":1991},".submit",[142,86697,15601],{"class":152},[142,86699,86700,86702,86704,86707],{"class":144,"line":9899},[142,86701,54913],{"class":201},[142,86703,51466],{"class":152},[142,86705,86706],{"class":201},"#369",[142,86708,1319],{"class":152},[142,86710,86711],{"class":144,"line":9926},[142,86712,2215],{"class":152},[142,86714,86715,86717,86719],{"class":144,"line":9935},[142,86716,52446],{"class":152},[142,86718,5155],{"class":51329},[142,86720,51336],{"class":152},[142,86722,86723,86725,86727],{"class":144,"line":9941},[142,86724,51814],{"class":152},[142,86726,51363],{"class":51329},[142,86728,51336],{"class":152},[142,86730,86731],{"class":144,"line":9949},[142,86732,2428],{"emptyLinePlaceholder":69},[142,86734,86735,86737,86739],{"class":144,"line":9954},[142,86736,1063],{"class":152},[142,86738,51829],{"class":51329},[142,86740,51336],{"class":152},[142,86742,86743,86745,86747,86749,86751,86754,86757,86759],{"class":144,"line":16633},[142,86744,52173],{"class":152},[142,86746,53916],{"class":51329},[142,86748,14988],{"class":1991},[142,86750,198],{"class":152},[142,86752,86753],{"class":257},"\"delete\"",[142,86755,86756],{"class":152},">删除\u003C\u002F",[142,86758,53916],{"class":51329},[142,86760,51336],{"class":152},[142,86762,86763,86765,86767,86769,86771,86774,86777,86779],{"class":144,"line":16639},[142,86764,52173],{"class":152},[142,86766,53916],{"class":51329},[142,86768,14988],{"class":1991},[142,86770,198],{"class":152},[142,86772,86773],{"class":257},"\"login\"",[142,86775,86776],{"class":152},">登录\u003C\u002F",[142,86778,53916],{"class":51329},[142,86780,51336],{"class":152},[142,86782,86783,86785,86787],{"class":144,"line":16662},[142,86784,52173],{"class":152},[142,86786,51842],{"class":51329},[142,86788,51336],{"class":152},[142,86790,86791],{"class":144,"line":16668},[142,86792,86793],{"class":211},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[142,86795,86796,86798,86801,86803,86805,86807,86809,86811,86814,86816,86818],{"class":144,"line":16691},[142,86797,70113],{"class":148},[142,86799,86800],{"class":1991}," Modal",[142,86802,153],{"class":152},[142,86804,51436],{"class":5245},[142,86806,13593],{"class":148},[142,86808,69959],{"class":257},[142,86810,12464],{"class":152},[142,86812,86813],{"class":5245},"message",[142,86815,13593],{"class":148},[142,86817,69959],{"class":257},[142,86819,12471],{"class":152},[142,86821,86822],{"class":144,"line":16705},[142,86823,86824],{"class":211},"      \u002F\u002F 创建Model 模态框盒子\n",[142,86826,86827],{"class":144,"line":16725},[142,86828,86829],{"class":211},"      \u002F\u002F 1.1 创建div标签\n",[142,86831,86832,86834,86837,86839,86841,86843,86845,86847],{"class":144,"line":16731},[142,86833,70080],{"class":201},[142,86835,86836],{"class":152},".modalBox ",[142,86838,198],{"class":148},[142,86840,54425],{"class":152},[142,86842,70180],{"class":1991},[142,86844,153],{"class":152},[142,86846,81960],{"class":257},[142,86848,159],{"class":152},[142,86850,86851],{"class":144,"line":16742},[142,86852,86853],{"class":211},"      \u002F\u002F 1.2 给div 添加类名为model\n",[142,86855,86856,86858,86861,86863],{"class":144,"line":16765},[142,86857,70080],{"class":201},[142,86859,86860],{"class":152},".modalBox.className ",[142,86862,198],{"class":148},[142,86864,86865],{"class":257}," 'modal'\n",[142,86867,86868],{"class":144,"line":16787},[142,86869,86870],{"class":211},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[142,86872,86873,86875,86878,86880],{"class":144,"line":16792},[142,86874,70080],{"class":201},[142,86876,86877],{"class":152},".modalBox.innerHTML ",[142,86879,198],{"class":148},[142,86881,70197],{"class":257},[142,86883,86884,86887,86889],{"class":144,"line":16798},[142,86885,86886],{"class":257},"        \u003Cdiv class=\"header\">${",[142,86888,51436],{"class":152},[142,86890,86891],{"class":257},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[142,86893,86894,86897,86899],{"class":144,"line":16812},[142,86895,86896],{"class":257},"        \u003Cdiv class=\"body\">${",[142,86898,86813],{"class":152},[142,86900,86901],{"class":257},"}\u003C\u002Fdiv>\n",[142,86903,86904],{"class":144,"line":16825},[142,86905,86906],{"class":257},"      `\n",[142,86908,86909],{"class":144,"line":16830},[142,86910,86911],{"class":211},"      \u002F\u002F console.log(this.modalBox)\n",[142,86913,86914],{"class":144,"line":16844},[142,86915,2215],{"class":152},[142,86917,86918],{"class":144,"line":16849},[142,86919,86920],{"class":211},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[142,86922,86923],{"class":144,"line":16855},[142,86924,86925],{"class":211},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[142,86927,86928],{"class":144,"line":16860},[142,86929,86930],{"class":211},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[142,86932,86933,86936,86938,86940,86942,86945,86947,86949],{"class":144,"line":16874},[142,86934,86935],{"class":201},"    Modal",[142,86937,711],{"class":152},[142,86939,85608],{"class":201},[142,86941,711],{"class":152},[142,86943,86944],{"class":1991},"open",[142,86946,13593],{"class":148},[142,86948,58947],{"class":148},[142,86950,54481],{"class":152},[142,86952,86953],{"class":144,"line":16879},[142,86954,86955],{"class":211},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[142,86957,86958,86960,86963,86965,86967,86969,86971,86974],{"class":144,"line":16884},[142,86959,58257],{"class":148},[142,86961,86962],{"class":201}," box",[142,86964,13593],{"class":148},[142,86966,54425],{"class":152},[142,86968,54428],{"class":1991},[142,86970,153],{"class":152},[142,86972,86973],{"class":257},"'.modal'",[142,86975,159],{"class":152},[142,86977,86978],{"class":144,"line":16898},[142,86979,86980],{"class":211},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[142,86982,86983,86986,86988,86991,86993],{"class":144,"line":16910},[142,86984,86985],{"class":152},"      box ",[142,86987,1743],{"class":148},[142,86989,86990],{"class":152}," box.",[142,86992,57035],{"class":1991},[142,86994,2004],{"class":152},[142,86996,86997],{"class":144,"line":16915},[142,86998,86999],{"class":211},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[142,87001,87002],{"class":144,"line":16928},[142,87003,87004],{"class":211},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[142,87006,87007],{"class":144,"line":16933},[142,87008,87009],{"class":211},"      \u002F\u002F append可以增加对象\n",[142,87011,87012,87015,87018,87020,87023],{"class":144,"line":16938},[142,87013,87014],{"class":152},"      document.body.",[142,87016,87017],{"class":1991},"append",[142,87019,153],{"class":152},[142,87021,87022],{"class":201},"this",[142,87024,87025],{"class":152},".modalBox)\n",[142,87027,87028],{"class":144,"line":16943},[142,87029,2428],{"emptyLinePlaceholder":69},[142,87031,87032],{"class":144,"line":16956},[142,87033,87034],{"class":211},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[142,87036,87037,87039,87042,87044,87046,87049,87051,87053,87055,87057,87060,87062],{"class":144,"line":16961},[142,87038,70080],{"class":201},[142,87040,87041],{"class":152},".modalBox.",[142,87043,54428],{"class":1991},[142,87045,153],{"class":152},[142,87047,87048],{"class":257},"'i'",[142,87050,30855],{"class":152},[142,87052,57842],{"class":1991},[142,87054,153],{"class":152},[142,87056,57847],{"class":257},[142,87058,87059],{"class":152},", () ",[142,87061,84751],{"class":148},[142,87063,15601],{"class":152},[142,87065,87066],{"class":144,"line":32662},[142,87067,87068],{"class":211},"        \u002F\u002F 这个地方需要用到箭头函数\n",[142,87070,87071],{"class":144,"line":32668},[142,87072,87073],{"class":211},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[142,87075,87076],{"class":144,"line":32674},[142,87077,87078],{"class":211},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[142,87080,87081,87083,87085,87088],{"class":144,"line":32680},[142,87082,64755],{"class":201},[142,87084,711],{"class":152},[142,87086,87087],{"class":1991},"close",[142,87089,2004],{"class":152},[142,87091,87092],{"class":144,"line":32686},[142,87093,64844],{"class":152},[142,87095,87096],{"class":144,"line":32697},[142,87097,2215],{"class":152},[142,87099,87100],{"class":144,"line":32703},[142,87101,2428],{"emptyLinePlaceholder":69},[142,87103,87104],{"class":144,"line":32723},[142,87105,87106],{"class":211},"    \u002F\u002F 测试一下 点击 删除按钮\n",[142,87108,87109,87111,87113,87115,87118,87120,87122,87124,87126,87128,87130],{"class":144,"line":32729},[142,87110,52436],{"class":152},[142,87112,54428],{"class":1991},[142,87114,153],{"class":152},[142,87116,87117],{"class":257},"'#delete'",[142,87119,30855],{"class":152},[142,87121,57842],{"class":1991},[142,87123,153],{"class":152},[142,87125,57847],{"class":257},[142,87127,87059],{"class":152},[142,87129,84751],{"class":148},[142,87131,15601],{"class":152},[142,87133,87134],{"class":144,"line":32740},[142,87135,87136],{"class":211},"      \u002F\u002F 先调用Model构造函数\n",[142,87138,87139,87141,87144,87146,87148,87150,87152,87155,87157,87160],{"class":144,"line":32746},[142,87140,58257],{"class":148},[142,87142,87143],{"class":201}," del",[142,87145,13593],{"class":148},[142,87147,11607],{"class":148},[142,87149,86800],{"class":1991},[142,87151,153],{"class":152},[142,87153,87154],{"class":257},"'温馨的提示'",[142,87156,12464],{"class":152},[142,87158,87159],{"class":257},"'您没有删除权限操作'",[142,87161,159],{"class":152},[142,87163,87164],{"class":144,"line":32752},[142,87165,87166],{"class":211},"      \u002F\u002F 实例对象调用open方法\n",[142,87168,87169,87172,87174],{"class":144,"line":32758},[142,87170,87171],{"class":152},"      del.",[142,87173,86944],{"class":1991},[142,87175,2004],{"class":152},[142,87177,87178],{"class":144,"line":32764},[142,87179,33490],{"class":152},[142,87181,87182],{"class":144,"line":32770},[142,87183,87184],{"class":211},"    \u002F\u002F 测试一下 点击 登录按钮\n",[142,87186,87187,87189,87191,87193,87196,87198,87200,87202,87204,87206,87208],{"class":144,"line":32776},[142,87188,52436],{"class":152},[142,87190,54428],{"class":1991},[142,87192,153],{"class":152},[142,87194,87195],{"class":257},"'#login'",[142,87197,30855],{"class":152},[142,87199,57842],{"class":1991},[142,87201,153],{"class":152},[142,87203,57847],{"class":257},[142,87205,87059],{"class":152},[142,87207,84751],{"class":148},[142,87209,15601],{"class":152},[142,87211,87212],{"class":144,"line":32782},[142,87213,87136],{"class":211},[142,87215,87216,87218,87221,87223,87225,87227,87229,87232,87234,87237],{"class":144,"line":32802},[142,87217,58257],{"class":148},[142,87219,87220],{"class":201}," log",[142,87222,13593],{"class":148},[142,87224,11607],{"class":148},[142,87226,86800],{"class":1991},[142,87228,153],{"class":152},[142,87230,87231],{"class":257},"'友情提示'",[142,87233,12464],{"class":152},[142,87235,87236],{"class":257},"'您还没有登录呢'",[142,87238,159],{"class":152},[142,87240,87241],{"class":144,"line":32808},[142,87242,87166],{"class":211},[142,87244,87245,87248,87250],{"class":144,"line":32824},[142,87246,87247],{"class":152},"      log.",[142,87249,86944],{"class":1991},[142,87251,2004],{"class":152},[142,87253,87254],{"class":144,"line":32830},[142,87255,33490],{"class":152},[142,87257,87258],{"class":144,"line":32844},[142,87259,87260],{"class":211},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[142,87262,87263,87265,87267,87269,87271,87273,87275,87277],{"class":144,"line":32850},[142,87264,86935],{"class":201},[142,87266,711],{"class":152},[142,87268,85608],{"class":201},[142,87270,711],{"class":152},[142,87272,87087],{"class":1991},[142,87274,13593],{"class":148},[142,87276,58947],{"class":148},[142,87278,54481],{"class":152},[142,87280,87281,87283,87285,87287],{"class":144,"line":32865},[142,87282,70080],{"class":201},[142,87284,87041],{"class":152},[142,87286,57035],{"class":1991},[142,87288,2004],{"class":152},[142,87290,87291],{"class":144,"line":32871},[142,87292,2215],{"class":152},[142,87294,87295,87297,87299],{"class":144,"line":32880},[142,87296,52446],{"class":152},[142,87298,51842],{"class":51329},[142,87300,51336],{"class":152},[142,87302,87303,87305,87307],{"class":144,"line":32886},[142,87304,51814],{"class":152},[142,87306,51829],{"class":51329},[142,87308,51336],{"class":152},[142,87310,87311],{"class":144,"line":32895},[142,87312,2428],{"emptyLinePlaceholder":69},[142,87314,87315,87317,87319],{"class":144,"line":32901},[142,87316,51814],{"class":152},[142,87318,50664],{"class":51329},[142,87320,51336],{"class":152},[14,87322,87323],{},[29,87324],{"alt":31,"src":87325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[84,87327,87329],{"id":87328},"_414-深浅拷贝","4.14 深浅拷贝",[113,87331,87333],{"id":87332},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87335,87336],{},[29,87337],{"alt":31,"src":87338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87340,87341],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87343,87344],{},[29,87345],{"alt":31,"src":87346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87348,87349],{},[29,87350],{"alt":31,"src":87351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87353,87354],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87356,87357],{},[29,87358],{"alt":31,"src":87359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87361,11361],{},[14,87363,87364],{},[29,87365],{"alt":31,"src":87366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[113,87368,87370],{"id":87369},"_4142-深拷贝","4.14.2 深拷贝",[14,87372,87373],{},"深拷贝：拷贝的是对象，不是地址",[14,87375,87376],{},"常用的三种方法：",[96,87378,87379,87382,87385],{},[99,87380,87381],{},"通过递归实现深拷贝",[99,87383,87384],{},"lodash\u002FcloneDeep",[99,87386,87387],{},"通过JSON.stringify()实现",[22027,87389,87391],{"id":87390},"_41421-递归函数","4.14.2.1 递归函数",[14,87393,87394],{},[29,87395],{"alt":31,"src":87396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[96,87398,87399],{},[99,87400,87401],{},"死递归占溢出：",[133,87403,87405],{"className":53096,"code":87404,"language":53098,"meta":31,"style":31},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[139,87406,87407,87415,87423,87427,87432,87436,87441,87449],{"__ignoreMap":31},[142,87408,87409,87411,87413],{"class":144,"line":145},[142,87410,1063],{"class":152},[142,87412,51829],{"class":51329},[142,87414,51336],{"class":152},[142,87416,87417,87419,87421],{"class":144,"line":64},[142,87418,52173],{"class":152},[142,87420,51842],{"class":51329},[142,87422,51336],{"class":152},[142,87424,87425],{"class":144,"line":1208},[142,87426,77172],{"class":152},[142,87428,87429],{"class":144,"line":1223},[142,87430,87431],{"class":152},"      fn()\n",[142,87433,87434],{"class":144,"line":1229},[142,87435,2215],{"class":152},[142,87437,87438],{"class":144,"line":1243},[142,87439,87440],{"class":152},"    fn()\n",[142,87442,87443,87445,87447],{"class":144,"line":1249},[142,87444,52446],{"class":152},[142,87446,51842],{"class":51329},[142,87448,51336],{"class":152},[142,87450,87451,87453,87455],{"class":144,"line":1340},[142,87452,51814],{"class":152},[142,87454,51829],{"class":51329},[142,87456,51336],{"class":152},[96,87458,87459],{"start":64},[99,87460,87461],{},"递归函数要加判断条件：",[14,87463,87464],{},[29,87465],{"alt":31,"src":87466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[96,87468,87469],{"start":1208},[99,87470,87471],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[133,87473,87475],{"className":50662,"code":87474,"language":50664,"meta":31,"style":31},"\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",[139,87476,87477,87487,87501,87505,87513,87527,87547,87559,87567,87571,87579,87591,87599,87607,87632,87644,87648,87655,87663,87671,87675],{"__ignoreMap":31},[142,87478,87479,87481,87483,87485],{"class":144,"line":145},[142,87480,51326],{"class":152},[142,87482,51330],{"class":51329},[142,87484,51333],{"class":1991},[142,87486,51336],{"class":152},[142,87488,87489,87491,87493,87495,87497,87499],{"class":144,"line":64},[142,87490,1063],{"class":152},[142,87492,50664],{"class":51329},[142,87494,51345],{"class":1991},[142,87496,198],{"class":152},[142,87498,51350],{"class":257},[142,87500,51336],{"class":152},[142,87502,87503],{"class":144,"line":1208},[142,87504,2428],{"emptyLinePlaceholder":69},[142,87506,87507,87509,87511],{"class":144,"line":1223},[142,87508,1063],{"class":152},[142,87510,51363],{"class":51329},[142,87512,51336],{"class":152},[142,87514,87515,87517,87519,87521,87523,87525],{"class":144,"line":1229},[142,87516,52173],{"class":152},[142,87518,51373],{"class":51329},[142,87520,51376],{"class":1991},[142,87522,198],{"class":152},[142,87524,51381],{"class":257},[142,87526,51336],{"class":152},[142,87528,87529,87531,87533,87535,87537,87539,87541,87543,87545],{"class":144,"line":1243},[142,87530,52173],{"class":152},[142,87532,51373],{"class":51329},[142,87534,14949],{"class":1991},[142,87536,198],{"class":152},[142,87538,51420],{"class":257},[142,87540,51400],{"class":1991},[142,87542,198],{"class":152},[142,87544,51427],{"class":257},[142,87546,51336],{"class":152},[142,87548,87549,87551,87553,87555,87557],{"class":144,"line":1249},[142,87550,52173],{"class":152},[142,87552,51436],{"class":51329},[142,87554,51439],{"class":152},[142,87556,51436],{"class":51329},[142,87558,51336],{"class":152},[142,87560,87561,87563,87565],{"class":144,"line":1340},[142,87562,51814],{"class":152},[142,87564,51363],{"class":51329},[142,87566,51336],{"class":152},[142,87568,87569],{"class":144,"line":1346},[142,87570,2428],{"emptyLinePlaceholder":69},[142,87572,87573,87575,87577],{"class":144,"line":1358},[142,87574,1063],{"class":152},[142,87576,51829],{"class":51329},[142,87578,51336],{"class":152},[142,87580,87581,87583,87585,87587,87589],{"class":144,"line":1640},[142,87582,52173],{"class":152},[142,87584,51640],{"class":51329},[142,87586,55343],{"class":152},[142,87588,51640],{"class":51329},[142,87590,51336],{"class":152},[142,87592,87593,87595,87597],{"class":144,"line":1645},[142,87594,52173],{"class":152},[142,87596,51842],{"class":51329},[142,87598,51336],{"class":152},[142,87600,87601,87603,87605],{"class":144,"line":1651},[142,87602,70113],{"class":148},[142,87604,73802],{"class":1991},[142,87606,10882],{"class":152},[142,87608,87609,87611,87613,87615,87617,87619,87621,87623,87625,87627,87630],{"class":144,"line":1656},[142,87610,55800],{"class":152},[142,87612,54428],{"class":1991},[142,87614,153],{"class":152},[142,87616,81960],{"class":257},[142,87618,74278],{"class":152},[142,87620,198],{"class":148},[142,87622,11607],{"class":148},[142,87624,73818],{"class":1991},[142,87626,17290],{"class":152},[142,87628,87629],{"class":1991},"toLocaleString",[142,87631,2004],{"class":152},[142,87633,87634,87637,87640,87642],{"class":144,"line":1670},[142,87635,87636],{"class":1991},"      setTimeout",[142,87638,87639],{"class":152},"(getTime, ",[142,87641,6439],{"class":201},[142,87643,159],{"class":152},[142,87645,87646],{"class":144,"line":1675},[142,87647,2215],{"class":152},[142,87649,87650,87653],{"class":144,"line":1681},[142,87651,87652],{"class":1991},"    getTime",[142,87654,2004],{"class":152},[142,87656,87657,87659,87661],{"class":144,"line":1702},[142,87658,52446],{"class":152},[142,87660,51842],{"class":51329},[142,87662,51336],{"class":152},[142,87664,87665,87667,87669],{"class":144,"line":1707},[142,87666,51814],{"class":152},[142,87668,51829],{"class":51329},[142,87670,51336],{"class":152},[142,87672,87673],{"class":144,"line":1721},[142,87674,2428],{"emptyLinePlaceholder":69},[142,87676,87677,87679,87681],{"class":144,"line":1726},[142,87678,51814],{"class":152},[142,87680,50664],{"class":51329},[142,87682,51336],{"class":152},[14,87684,87685],{},[29,87686],{"alt":31,"src":87687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[96,87689,87690],{"start":1223},[99,87691,87381],{},[14,87693,87694],{},[29,87695],{"alt":31,"src":87696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87698,87699],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87701,39218],{},[14,87703,87704],{},"这个是简易版的递归函数深拷贝",[14,87706,87707],{},"一定要注意先数组再对象，因为万物皆可对象",[133,87709,87711],{"className":50662,"code":87710,"language":50664,"meta":31,"style":31},"\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",[139,87712,87713,87723,87737,87741,87749,87763,87783,87795,87803,87807,87815,87823,87833,87842,87850,87866,87870,87878,87882,87886,87898,87903,87922,87938,87943,87948,87953,87968,87973,87978,87987,87995,88012,88020,88026,88034,88039,88044,88053,88057,88061,88065,88076,88085,88095,88109,88119,88127,88135,88143,88147],{"__ignoreMap":31},[142,87714,87715,87717,87719,87721],{"class":144,"line":145},[142,87716,51326],{"class":152},[142,87718,51330],{"class":51329},[142,87720,51333],{"class":1991},[142,87722,51336],{"class":152},[142,87724,87725,87727,87729,87731,87733,87735],{"class":144,"line":64},[142,87726,1063],{"class":152},[142,87728,50664],{"class":51329},[142,87730,51345],{"class":1991},[142,87732,198],{"class":152},[142,87734,51350],{"class":257},[142,87736,51336],{"class":152},[142,87738,87739],{"class":144,"line":1208},[142,87740,2428],{"emptyLinePlaceholder":69},[142,87742,87743,87745,87747],{"class":144,"line":1223},[142,87744,1063],{"class":152},[142,87746,51363],{"class":51329},[142,87748,51336],{"class":152},[142,87750,87751,87753,87755,87757,87759,87761],{"class":144,"line":1229},[142,87752,52173],{"class":152},[142,87754,51373],{"class":51329},[142,87756,51376],{"class":1991},[142,87758,198],{"class":152},[142,87760,51381],{"class":257},[142,87762,51336],{"class":152},[142,87764,87765,87767,87769,87771,87773,87775,87777,87779,87781],{"class":144,"line":1243},[142,87766,52173],{"class":152},[142,87768,51373],{"class":51329},[142,87770,14949],{"class":1991},[142,87772,198],{"class":152},[142,87774,51420],{"class":257},[142,87776,51400],{"class":1991},[142,87778,198],{"class":152},[142,87780,51427],{"class":257},[142,87782,51336],{"class":152},[142,87784,87785,87787,87789,87791,87793],{"class":144,"line":1249},[142,87786,52173],{"class":152},[142,87788,51436],{"class":51329},[142,87790,51439],{"class":152},[142,87792,51436],{"class":51329},[142,87794,51336],{"class":152},[142,87796,87797,87799,87801],{"class":144,"line":1340},[142,87798,51814],{"class":152},[142,87800,51363],{"class":51329},[142,87802,51336],{"class":152},[142,87804,87805],{"class":144,"line":1346},[142,87806,2428],{"emptyLinePlaceholder":69},[142,87808,87809,87811,87813],{"class":144,"line":1358},[142,87810,1063],{"class":152},[142,87812,51829],{"class":51329},[142,87814,51336],{"class":152},[142,87816,87817,87819,87821],{"class":144,"line":1640},[142,87818,52173],{"class":152},[142,87820,51842],{"class":51329},[142,87822,51336],{"class":152},[142,87824,87825,87827,87829,87831],{"class":144,"line":1645},[142,87826,11250],{"class":148},[142,87828,70000],{"class":201},[142,87830,13593],{"class":148},[142,87832,15601],{"class":152},[142,87834,87835,87837,87840],{"class":144,"line":1651},[142,87836,71645],{"class":152},[142,87838,87839],{"class":257},"'pink'",[142,87841,31495],{"class":152},[142,87843,87844,87846,87848],{"class":144,"line":1656},[142,87845,71655],{"class":152},[142,87847,803],{"class":201},[142,87849,31495],{"class":152},[142,87851,87852,87855,87858,87860,87863],{"class":144,"line":1670},[142,87853,87854],{"class":152},"      hobby: [",[142,87856,87857],{"class":257},"'乒乓球'",[142,87859,12464],{"class":152},[142,87861,87862],{"class":257},"'足球'",[142,87864,87865],{"class":152},"],\n",[142,87867,87868],{"class":144,"line":1675},[142,87869,77901],{"class":152},[142,87871,87872,87875],{"class":144,"line":1681},[142,87873,87874],{"class":152},"        baby: ",[142,87876,87877],{"class":257},"'小pink'\n",[142,87879,87880],{"class":144,"line":1702},[142,87881,52427],{"class":152},[142,87883,87884],{"class":144,"line":1707},[142,87885,2215],{"class":152},[142,87887,87888,87890,87893,87895],{"class":144,"line":1721},[142,87889,11250],{"class":148},[142,87891,87892],{"class":201}," o",[142,87894,13593],{"class":148},[142,87896,87897],{"class":152}," {}\n",[142,87899,87900],{"class":144,"line":1726},[142,87901,87902],{"class":211},"    \u002F\u002F 拷贝函数\n",[142,87904,87905,87907,87910,87912,87915,87917,87920],{"class":144,"line":1755},[142,87906,70113],{"class":148},[142,87908,87909],{"class":1991}," deepCopy",[142,87911,153],{"class":152},[142,87913,87914],{"class":5245},"newObj",[142,87916,12464],{"class":152},[142,87918,87919],{"class":5245},"oldObj",[142,87921,12471],{"class":152},[142,87923,87924,87926,87928,87930,87933,87935],{"class":144,"line":1760},[142,87925,52313],{"class":148},[142,87927,1686],{"class":152},[142,87929,51876],{"class":148},[142,87931,87932],{"class":152}," k ",[142,87934,26072],{"class":148},[142,87936,87937],{"class":152}," oldObj) {\n",[142,87939,87940],{"class":144,"line":1777},[142,87941,87942],{"class":211},"        \u002F\u002F 处理数组的问题\n",[142,87944,87945],{"class":144,"line":1782},[142,87946,87947],{"class":211},"        \u002F\u002F 判断是否属于数组\n",[142,87949,87950],{"class":144,"line":1787},[142,87951,87952],{"class":211},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[142,87954,87955,87957,87960,87963,87966],{"class":144,"line":1792},[142,87956,2525],{"class":148},[142,87958,87959],{"class":152}," (oldObj[k] ",[142,87961,87962],{"class":148},"instanceof",[142,87964,87965],{"class":1991}," Array",[142,87967,12471],{"class":152},[142,87969,87970],{"class":144,"line":1806},[142,87971,87972],{"class":211},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[142,87974,87975],{"class":144,"line":1811},[142,87976,87977],{"class":211},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[142,87979,87980,87983,87985],{"class":144,"line":2605},[142,87981,87982],{"class":152},"          newObj[k] ",[142,87984,198],{"class":148},[142,87986,51867],{"class":152},[142,87988,87989,87992],{"class":144,"line":2619},[142,87990,87991],{"class":1991},"          deepCopy",[142,87993,87994],{"class":152},"(newObj[k], oldObj[k])\n",[142,87996,87997,87999,88001,88003,88005,88007,88010],{"class":144,"line":2627},[142,87998,80109],{"class":152},[142,88000,1729],{"class":148},[142,88002,1732],{"class":148},[142,88004,87959],{"class":152},[142,88006,87962],{"class":148},[142,88008,88009],{"class":1991}," Object",[142,88011,12471],{"class":152},[142,88013,88014,88016,88018],{"class":144,"line":2632},[142,88015,87982],{"class":152},[142,88017,198],{"class":148},[142,88019,87897],{"class":152},[142,88021,88022,88024],{"class":144,"line":2638},[142,88023,87991],{"class":1991},[142,88025,87994],{"class":152},[142,88027,88028,88030,88032],{"class":144,"line":2644},[142,88029,80109],{"class":152},[142,88031,1729],{"class":148},[142,88033,15601],{"class":152},[142,88035,88036],{"class":144,"line":2649},[142,88037,88038],{"class":211},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[142,88040,88041],{"class":144,"line":7977},[142,88042,88043],{"class":211},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[142,88045,88046,88048,88050],{"class":144,"line":8001},[142,88047,87982],{"class":152},[142,88049,198],{"class":148},[142,88051,88052],{"class":152}," oldObj[k]\n",[142,88054,88055],{"class":144,"line":8006},[142,88056,2557],{"class":152},[142,88058,88059],{"class":144,"line":8012},[142,88060,52427],{"class":152},[142,88062,88063],{"class":144,"line":8039},[142,88064,2215],{"class":152},[142,88066,88067,88070,88073],{"class":144,"line":8044},[142,88068,88069],{"class":1991},"    deepCopy",[142,88071,88072],{"class":152},"(o, obj) ",[142,88074,88075],{"class":211},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[142,88077,88078,88080,88082],{"class":144,"line":8050},[142,88079,73782],{"class":152},[142,88081,58276],{"class":1991},[142,88083,88084],{"class":152},"(o)\n",[142,88086,88087,88090,88092],{"class":144,"line":8062},[142,88088,88089],{"class":152},"    o.age ",[142,88091,198],{"class":148},[142,88093,88094],{"class":201}," 20\n",[142,88096,88097,88100,88102,88104,88106],{"class":144,"line":8074},[142,88098,88099],{"class":152},"    o.hobby[",[142,88101,344],{"class":201},[142,88103,4471],{"class":152},[142,88105,198],{"class":148},[142,88107,88108],{"class":257}," '篮球'\n",[142,88110,88111,88114,88116],{"class":144,"line":8086},[142,88112,88113],{"class":152},"    o.family ",[142,88115,198],{"class":148},[142,88117,88118],{"class":257}," '老pink'\n",[142,88120,88121,88123,88125],{"class":144,"line":9745},[142,88122,73782],{"class":152},[142,88124,58276],{"class":1991},[142,88126,70065],{"class":152},[142,88128,88129,88131,88133],{"class":144,"line":9770},[142,88130,52446],{"class":152},[142,88132,51842],{"class":51329},[142,88134,51336],{"class":152},[142,88136,88137,88139,88141],{"class":144,"line":9793},[142,88138,51814],{"class":152},[142,88140,51829],{"class":51329},[142,88142,51336],{"class":152},[142,88144,88145],{"class":144,"line":9817},[142,88146,2428],{"emptyLinePlaceholder":69},[142,88148,88149,88151,88153],{"class":144,"line":9822},[142,88150,51814],{"class":152},[142,88152,50664],{"class":51329},[142,88154,51336],{"class":152},[14,88156,88157],{},[29,88158],{"alt":31,"src":88159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22027,88161,88163,88164],{"id":88162},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[302,88165,88166],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88168,88169],{},[391,88170,88171],{"href":88171,"rel":88172},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23894],[14,88174,88175],{},"lodash里边的方法都要加上一个下划线_",[14,88177,88178],{},"_.cloneDeep()",[133,88180,88182],{"className":50662,"code":88181,"language":50664,"meta":31,"style":31},"\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",[139,88183,88184,88194,88208,88212,88220,88234,88254,88266,88274,88278,88286,88291,88310,88318,88328,88336,88344,88356,88360,88366,88370,88374,88390,88398,88407,88415,88423,88431,88435],{"__ignoreMap":31},[142,88185,88186,88188,88190,88192],{"class":144,"line":145},[142,88187,51326],{"class":152},[142,88189,51330],{"class":51329},[142,88191,51333],{"class":1991},[142,88193,51336],{"class":152},[142,88195,88196,88198,88200,88202,88204,88206],{"class":144,"line":64},[142,88197,1063],{"class":152},[142,88199,50664],{"class":51329},[142,88201,51345],{"class":1991},[142,88203,198],{"class":152},[142,88205,51350],{"class":257},[142,88207,51336],{"class":152},[142,88209,88210],{"class":144,"line":1208},[142,88211,2428],{"emptyLinePlaceholder":69},[142,88213,88214,88216,88218],{"class":144,"line":1223},[142,88215,1063],{"class":152},[142,88217,51363],{"class":51329},[142,88219,51336],{"class":152},[142,88221,88222,88224,88226,88228,88230,88232],{"class":144,"line":1229},[142,88223,52173],{"class":152},[142,88225,51373],{"class":51329},[142,88227,51376],{"class":1991},[142,88229,198],{"class":152},[142,88231,51381],{"class":257},[142,88233,51336],{"class":152},[142,88235,88236,88238,88240,88242,88244,88246,88248,88250,88252],{"class":144,"line":1243},[142,88237,52173],{"class":152},[142,88239,51373],{"class":51329},[142,88241,14949],{"class":1991},[142,88243,198],{"class":152},[142,88245,51420],{"class":257},[142,88247,51400],{"class":1991},[142,88249,198],{"class":152},[142,88251,51427],{"class":257},[142,88253,51336],{"class":152},[142,88255,88256,88258,88260,88262,88264],{"class":144,"line":1249},[142,88257,52173],{"class":152},[142,88259,51436],{"class":51329},[142,88261,51439],{"class":152},[142,88263,51436],{"class":51329},[142,88265,51336],{"class":152},[142,88267,88268,88270,88272],{"class":144,"line":1340},[142,88269,51814],{"class":152},[142,88271,51363],{"class":51329},[142,88273,51336],{"class":152},[142,88275,88276],{"class":144,"line":1346},[142,88277,2428],{"emptyLinePlaceholder":69},[142,88279,88280,88282,88284],{"class":144,"line":1358},[142,88281,1063],{"class":152},[142,88283,51829],{"class":51329},[142,88285,51336],{"class":152},[142,88287,88288],{"class":144,"line":1640},[142,88289,88290],{"class":211},"  \u003C!-- 先引用这个库 -->\n",[142,88292,88293,88295,88297,88299,88301,88304,88306,88308],{"class":144,"line":1645},[142,88294,52173],{"class":152},[142,88296,51842],{"class":51329},[142,88298,55268],{"class":1991},[142,88300,198],{"class":152},[142,88302,88303],{"class":257},"\"lodash.min.js\"",[142,88305,55343],{"class":152},[142,88307,51842],{"class":51329},[142,88309,51336],{"class":152},[142,88311,88312,88314,88316],{"class":144,"line":1651},[142,88313,52173],{"class":152},[142,88315,51842],{"class":51329},[142,88317,51336],{"class":152},[142,88319,88320,88322,88324,88326],{"class":144,"line":1656},[142,88321,11250],{"class":148},[142,88323,70000],{"class":201},[142,88325,13593],{"class":148},[142,88327,15601],{"class":152},[142,88329,88330,88332,88334],{"class":144,"line":1670},[142,88331,71645],{"class":152},[142,88333,87839],{"class":257},[142,88335,31495],{"class":152},[142,88337,88338,88340,88342],{"class":144,"line":1675},[142,88339,71655],{"class":152},[142,88341,803],{"class":201},[142,88343,31495],{"class":152},[142,88345,88346,88348,88350,88352,88354],{"class":144,"line":1681},[142,88347,87854],{"class":152},[142,88349,87857],{"class":257},[142,88351,12464],{"class":152},[142,88353,87862],{"class":257},[142,88355,87865],{"class":152},[142,88357,88358],{"class":144,"line":1702},[142,88359,77901],{"class":152},[142,88361,88362,88364],{"class":144,"line":1707},[142,88363,87874],{"class":152},[142,88365,87877],{"class":257},[142,88367,88368],{"class":144,"line":1721},[142,88369,52427],{"class":152},[142,88371,88372],{"class":144,"line":1726},[142,88373,2215],{"class":152},[142,88375,88376,88378,88380,88382,88385,88388],{"class":144,"line":1755},[142,88377,11250],{"class":148},[142,88379,87892],{"class":201},[142,88381,13593],{"class":148},[142,88383,88384],{"class":152}," _.",[142,88386,88387],{"class":1991},"cloneDeep",[142,88389,70065],{"class":152},[142,88391,88392,88394,88396],{"class":144,"line":1760},[142,88393,73782],{"class":152},[142,88395,58276],{"class":1991},[142,88397,88084],{"class":152},[142,88399,88400,88403,88405],{"class":144,"line":1777},[142,88401,88402],{"class":152},"    o.family.baby ",[142,88404,198],{"class":148},[142,88406,88118],{"class":257},[142,88408,88409,88411,88413],{"class":144,"line":1782},[142,88410,73782],{"class":152},[142,88412,58276],{"class":1991},[142,88414,70065],{"class":152},[142,88416,88417,88419,88421],{"class":144,"line":1787},[142,88418,52446],{"class":152},[142,88420,51842],{"class":51329},[142,88422,51336],{"class":152},[142,88424,88425,88427,88429],{"class":144,"line":1792},[142,88426,51814],{"class":152},[142,88428,51829],{"class":51329},[142,88430,51336],{"class":152},[142,88432,88433],{"class":144,"line":1806},[142,88434,2428],{"emptyLinePlaceholder":69},[142,88436,88437,88439,88441],{"class":144,"line":1811},[142,88438,51814],{"class":152},[142,88440,50664],{"class":51329},[142,88442,51336],{"class":152},[14,88444,88445],{},[29,88446],{"alt":31,"src":88447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22027,88449,88451],{"id":88450},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[133,88453,88455],{"className":50662,"code":88454,"language":50664,"meta":31,"style":31},"\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",[139,88456,88457,88467,88481,88485,88493,88507,88527,88539,88547,88551,88559,88567,88577,88585,88593,88605,88609,88615,88619,88623,88628,88633,88638,88664,88672,88681,88689,88697,88705,88709],{"__ignoreMap":31},[142,88458,88459,88461,88463,88465],{"class":144,"line":145},[142,88460,51326],{"class":152},[142,88462,51330],{"class":51329},[142,88464,51333],{"class":1991},[142,88466,51336],{"class":152},[142,88468,88469,88471,88473,88475,88477,88479],{"class":144,"line":64},[142,88470,1063],{"class":152},[142,88472,50664],{"class":51329},[142,88474,51345],{"class":1991},[142,88476,198],{"class":152},[142,88478,51350],{"class":257},[142,88480,51336],{"class":152},[142,88482,88483],{"class":144,"line":1208},[142,88484,2428],{"emptyLinePlaceholder":69},[142,88486,88487,88489,88491],{"class":144,"line":1223},[142,88488,1063],{"class":152},[142,88490,51363],{"class":51329},[142,88492,51336],{"class":152},[142,88494,88495,88497,88499,88501,88503,88505],{"class":144,"line":1229},[142,88496,52173],{"class":152},[142,88498,51373],{"class":51329},[142,88500,51376],{"class":1991},[142,88502,198],{"class":152},[142,88504,51381],{"class":257},[142,88506,51336],{"class":152},[142,88508,88509,88511,88513,88515,88517,88519,88521,88523,88525],{"class":144,"line":1243},[142,88510,52173],{"class":152},[142,88512,51373],{"class":51329},[142,88514,14949],{"class":1991},[142,88516,198],{"class":152},[142,88518,51420],{"class":257},[142,88520,51400],{"class":1991},[142,88522,198],{"class":152},[142,88524,51427],{"class":257},[142,88526,51336],{"class":152},[142,88528,88529,88531,88533,88535,88537],{"class":144,"line":1249},[142,88530,52173],{"class":152},[142,88532,51436],{"class":51329},[142,88534,51439],{"class":152},[142,88536,51436],{"class":51329},[142,88538,51336],{"class":152},[142,88540,88541,88543,88545],{"class":144,"line":1340},[142,88542,51814],{"class":152},[142,88544,51363],{"class":51329},[142,88546,51336],{"class":152},[142,88548,88549],{"class":144,"line":1346},[142,88550,2428],{"emptyLinePlaceholder":69},[142,88552,88553,88555,88557],{"class":144,"line":1358},[142,88554,1063],{"class":152},[142,88556,51829],{"class":51329},[142,88558,51336],{"class":152},[142,88560,88561,88563,88565],{"class":144,"line":1640},[142,88562,52173],{"class":152},[142,88564,51842],{"class":51329},[142,88566,51336],{"class":152},[142,88568,88569,88571,88573,88575],{"class":144,"line":1645},[142,88570,11250],{"class":148},[142,88572,70000],{"class":201},[142,88574,13593],{"class":148},[142,88576,15601],{"class":152},[142,88578,88579,88581,88583],{"class":144,"line":1651},[142,88580,71645],{"class":152},[142,88582,87839],{"class":257},[142,88584,31495],{"class":152},[142,88586,88587,88589,88591],{"class":144,"line":1656},[142,88588,71655],{"class":152},[142,88590,803],{"class":201},[142,88592,31495],{"class":152},[142,88594,88595,88597,88599,88601,88603],{"class":144,"line":1670},[142,88596,87854],{"class":152},[142,88598,87857],{"class":257},[142,88600,12464],{"class":152},[142,88602,87862],{"class":257},[142,88604,87865],{"class":152},[142,88606,88607],{"class":144,"line":1675},[142,88608,77901],{"class":152},[142,88610,88611,88613],{"class":144,"line":1681},[142,88612,87874],{"class":152},[142,88614,87877],{"class":257},[142,88616,88617],{"class":144,"line":1702},[142,88618,52427],{"class":152},[142,88620,88621],{"class":144,"line":1707},[142,88622,2215],{"class":152},[142,88624,88625],{"class":144,"line":1721},[142,88626,88627],{"class":211},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[142,88629,88630],{"class":144,"line":1726},[142,88631,88632],{"class":211},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[142,88634,88635],{"class":144,"line":1755},[142,88636,88637],{"class":211},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[142,88639,88640,88642,88644,88646,88649,88651,88654,88656,88658,88660,88662],{"class":144,"line":1760},[142,88641,11250],{"class":148},[142,88643,87892],{"class":201},[142,88645,13593],{"class":148},[142,88647,88648],{"class":201}," JSON",[142,88650,711],{"class":152},[142,88652,88653],{"class":1991},"parse",[142,88655,153],{"class":152},[142,88657,71693],{"class":201},[142,88659,711],{"class":152},[142,88661,71698],{"class":1991},[142,88663,71701],{"class":152},[142,88665,88666,88668,88670],{"class":144,"line":1777},[142,88667,73782],{"class":152},[142,88669,58276],{"class":1991},[142,88671,88084],{"class":152},[142,88673,88674,88676,88678],{"class":144,"line":1782},[142,88675,88402],{"class":152},[142,88677,198],{"class":148},[142,88679,88680],{"class":257}," '123'\n",[142,88682,88683,88685,88687],{"class":144,"line":1787},[142,88684,73782],{"class":152},[142,88686,58276],{"class":1991},[142,88688,70065],{"class":152},[142,88690,88691,88693,88695],{"class":144,"line":1792},[142,88692,52446],{"class":152},[142,88694,51842],{"class":51329},[142,88696,51336],{"class":152},[142,88698,88699,88701,88703],{"class":144,"line":1806},[142,88700,51814],{"class":152},[142,88702,51829],{"class":51329},[142,88704,51336],{"class":152},[142,88706,88707],{"class":144,"line":1811},[142,88708,2428],{"emptyLinePlaceholder":69},[142,88710,88711,88713,88715],{"class":144,"line":2605},[142,88712,51814],{"class":152},[142,88714,50664],{"class":51329},[142,88716,51336],{"class":152},[14,88718,88719],{},[29,88720],{"alt":31,"src":88721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[84,88723,88725],{"id":88724},"_415-异常处理","4.15 异常处理",[96,88727,88728],{},[99,88729,88730],{},"throw抛异常",[14,88732,88733],{},[29,88734],{"alt":31,"src":88735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[96,88737,88738],{"start":64},[99,88739,88740],{},"try\u002Fcatch 捕获错误信息",[14,88742,88743],{},[29,88744],{"alt":31,"src":88745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[133,88747,88749],{"className":50662,"code":88748,"language":50664,"meta":31,"style":31},"\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",[139,88750,88751,88761,88775,88779,88787,88801,88821,88833,88841,88845,88853,88865,88873,88882,88889,88894,88913,88922,88933,88938,88948,88953,88958,88963,88980,88984,88989,88996,89008,89012,89024,89028,89032,89037,89042,89049,89057,89065,89069],{"__ignoreMap":31},[142,88752,88753,88755,88757,88759],{"class":144,"line":145},[142,88754,51326],{"class":152},[142,88756,51330],{"class":51329},[142,88758,51333],{"class":1991},[142,88760,51336],{"class":152},[142,88762,88763,88765,88767,88769,88771,88773],{"class":144,"line":64},[142,88764,1063],{"class":152},[142,88766,50664],{"class":51329},[142,88768,51345],{"class":1991},[142,88770,198],{"class":152},[142,88772,51350],{"class":257},[142,88774,51336],{"class":152},[142,88776,88777],{"class":144,"line":1208},[142,88778,2428],{"emptyLinePlaceholder":69},[142,88780,88781,88783,88785],{"class":144,"line":1223},[142,88782,1063],{"class":152},[142,88784,51363],{"class":51329},[142,88786,51336],{"class":152},[142,88788,88789,88791,88793,88795,88797,88799],{"class":144,"line":1229},[142,88790,52173],{"class":152},[142,88792,51373],{"class":51329},[142,88794,51376],{"class":1991},[142,88796,198],{"class":152},[142,88798,51381],{"class":257},[142,88800,51336],{"class":152},[142,88802,88803,88805,88807,88809,88811,88813,88815,88817,88819],{"class":144,"line":1243},[142,88804,52173],{"class":152},[142,88806,51373],{"class":51329},[142,88808,14949],{"class":1991},[142,88810,198],{"class":152},[142,88812,51420],{"class":257},[142,88814,51400],{"class":1991},[142,88816,198],{"class":152},[142,88818,51427],{"class":257},[142,88820,51336],{"class":152},[142,88822,88823,88825,88827,88829,88831],{"class":144,"line":1249},[142,88824,52173],{"class":152},[142,88826,51436],{"class":51329},[142,88828,51439],{"class":152},[142,88830,51436],{"class":51329},[142,88832,51336],{"class":152},[142,88834,88835,88837,88839],{"class":144,"line":1340},[142,88836,51814],{"class":152},[142,88838,51363],{"class":51329},[142,88840,51336],{"class":152},[142,88842,88843],{"class":144,"line":1346},[142,88844,2428],{"emptyLinePlaceholder":69},[142,88846,88847,88849,88851],{"class":144,"line":1358},[142,88848,1063],{"class":152},[142,88850,51829],{"class":51329},[142,88852,51336],{"class":152},[142,88854,88855,88857,88859,88861,88863],{"class":144,"line":1640},[142,88856,52173],{"class":152},[142,88858,14],{"class":51329},[142,88860,53523],{"class":152},[142,88862,14],{"class":51329},[142,88864,51336],{"class":152},[142,88866,88867,88869,88871],{"class":144,"line":1645},[142,88868,52173],{"class":152},[142,88870,51842],{"class":51329},[142,88872,51336],{"class":152},[142,88874,88875,88877,88880],{"class":144,"line":1651},[142,88876,70113],{"class":148},[142,88878,88879],{"class":1991}," fn",[142,88881,10882],{"class":152},[142,88883,88884,88887],{"class":144,"line":1656},[142,88885,88886],{"class":148},"      try",[142,88888,15601],{"class":152},[142,88890,88891],{"class":144,"line":1670},[142,88892,88893],{"class":211},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[142,88895,88896,88898,88900,88902,88904,88906,88908,88911],{"class":144,"line":1675},[142,88897,61299],{"class":148},[142,88899,6854],{"class":201},[142,88901,13593],{"class":148},[142,88903,54425],{"class":152},[142,88905,54428],{"class":1991},[142,88907,153],{"class":152},[142,88909,88910],{"class":257},"'.p'",[142,88912,159],{"class":152},[142,88914,88915,88918,88920],{"class":144,"line":1681},[142,88916,88917],{"class":152},"        p.style.color ",[142,88919,198],{"class":148},[142,88921,67080],{"class":257},[142,88923,88924,88927,88930],{"class":144,"line":1702},[142,88925,88926],{"class":152},"      } ",[142,88928,88929],{"class":148},"catch",[142,88931,88932],{"class":152}," (err) {\n",[142,88934,88935],{"class":144,"line":1707},[142,88936,88937],{"class":211},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[142,88939,88940,88943,88945],{"class":144,"line":1721},[142,88941,88942],{"class":152},"        console.",[142,88944,58276],{"class":1991},[142,88946,88947],{"class":152},"(err.message)\n",[142,88949,88950],{"class":144,"line":1726},[142,88951,88952],{"class":211},"        \u002F\u002F 想要中断程序，需要加return\n",[142,88954,88955],{"class":144,"line":1755},[142,88956,88957],{"class":211},"        \u002F\u002F return\n",[142,88959,88960],{"class":144,"line":1760},[142,88961,88962],{"class":211},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[142,88964,88965,88968,88970,88973,88975,88978],{"class":144,"line":1777},[142,88966,88967],{"class":148},"        throw",[142,88969,11607],{"class":148},[142,88971,88972],{"class":1991}," Error",[142,88974,153],{"class":152},[142,88976,88977],{"class":257},"'你看看，选择器错误了吧'",[142,88979,159],{"class":152},[142,88981,88982],{"class":144,"line":1782},[142,88983,52427],{"class":152},[142,88985,88986],{"class":144,"line":1787},[142,88987,88988],{"class":211},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[142,88990,88991,88994],{"class":144,"line":1792},[142,88992,88993],{"class":148},"      finally",[142,88995,15601],{"class":152},[142,88997,88998,89001,89003,89006],{"class":144,"line":1806},[142,88999,89000],{"class":1991},"        alert",[142,89002,153],{"class":152},[142,89004,89005],{"class":257},"'弹出对话框'",[142,89007,159],{"class":152},[142,89009,89010],{"class":144,"line":1811},[142,89011,52427],{"class":152},[142,89013,89014,89016,89018,89020,89022],{"class":144,"line":2605},[142,89015,58273],{"class":152},[142,89017,58276],{"class":1991},[142,89019,153],{"class":152},[142,89021,625],{"class":201},[142,89023,159],{"class":152},[142,89025,89026],{"class":144,"line":2619},[142,89027,2428],{"emptyLinePlaceholder":69},[142,89029,89030],{"class":144,"line":2627},[142,89031,2215],{"class":152},[142,89033,89034],{"class":144,"line":2632},[142,89035,89036],{"class":211},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[142,89038,89039],{"class":144,"line":2638},[142,89040,89041],{"class":211},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[142,89043,89044,89047],{"class":144,"line":2644},[142,89045,89046],{"class":1991},"    fn",[142,89048,2004],{"class":152},[142,89050,89051,89053,89055],{"class":144,"line":2649},[142,89052,52446],{"class":152},[142,89054,51842],{"class":51329},[142,89056,51336],{"class":152},[142,89058,89059,89061,89063],{"class":144,"line":7977},[142,89060,51814],{"class":152},[142,89062,51829],{"class":51329},[142,89064,51336],{"class":152},[142,89066,89067],{"class":144,"line":8001},[142,89068,2428],{"emptyLinePlaceholder":69},[142,89070,89071,89073,89075],{"class":144,"line":8006},[142,89072,51814],{"class":152},[142,89074,50664],{"class":51329},[142,89076,51336],{"class":152},[14,89078,89079],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[96,89081,89082],{"start":1208},[99,89083,89084],{},"debugger",[14,89086,89087],{},[29,89088],{"alt":31,"src":89089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89091,89092],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[84,89094,89096],{"id":89095},"_416-处理this","4.16 处理this",[113,89098,89100],{"id":89099},"_4161-this的指向","4.16.1 this的指向",[96,89102,89103],{},[99,89104,89105],{},"普通函数的this",[14,89107,89108],{},[29,89109],{"alt":31,"src":89110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[96,89112,89113],{"start":64},[99,89114,89115],{},"箭头函数的this",[14,89117,89118],{},[29,89119],{"alt":31,"src":89120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89122,89123],{},[29,89124],{"alt":31,"src":89125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89127,89128],{},[29,89129],{"alt":31,"src":89130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[113,89132,89134],{"id":89133},"_4162-this的改变","4.16.2 this的改变",[14,89136,89137],{},"call() apply() bind()",[96,89139,89140],{},[99,89141,89142],{},"call()",[14,89144,89145],{},[29,89146],{"alt":31,"src":89147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89149,89150],{},"两个作用：①调用函数；②改变this指向",[133,89152,89154],{"className":53096,"code":89153,"language":53098,"meta":31,"style":31},"\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",[139,89155,89156,89164,89172,89176,89181,89185,89190,89195,89200,89204,89209,89217],{"__ignoreMap":31},[142,89157,89158,89160,89162],{"class":144,"line":145},[142,89159,1063],{"class":152},[142,89161,51829],{"class":51329},[142,89163,51336],{"class":152},[142,89165,89166,89168,89170],{"class":144,"line":64},[142,89167,52173],{"class":152},[142,89169,51842],{"class":51329},[142,89171,51336],{"class":152},[142,89173,89174],{"class":144,"line":1208},[142,89175,71552],{"class":152},[142,89177,89178],{"class":144,"line":1223},[142,89179,89180],{"class":152},"      uname: 'pink'\n",[142,89182,89183],{"class":144,"line":1229},[142,89184,2215],{"class":152},[142,89186,89187],{"class":144,"line":1243},[142,89188,89189],{"class":152},"    function fn(x, y) {\n",[142,89191,89192],{"class":144,"line":1249},[142,89193,89194],{"class":152},"      console.log(this)  \u002F\u002Fwindow\n",[142,89196,89197],{"class":144,"line":1340},[142,89198,89199],{"class":152},"      console.log(x + y)\n",[142,89201,89202],{"class":144,"line":1346},[142,89203,2215],{"class":152},[142,89205,89206],{"class":144,"line":1358},[142,89207,89208],{"class":152},"    fn.call(obj, 1, 2)\n",[142,89210,89211,89213,89215],{"class":144,"line":1640},[142,89212,52446],{"class":152},[142,89214,51842],{"class":51329},[142,89216,51336],{"class":152},[142,89218,89219,89221,89223],{"class":144,"line":1645},[142,89220,51814],{"class":152},[142,89222,51829],{"class":51329},[142,89224,51336],{"class":152},[14,89226,89227],{},[29,89228],{"alt":31,"src":89229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[96,89231,89232],{"start":64},[99,89233,89234],{},"apply()",[14,89236,89237],{},[29,89238],{"alt":31,"src":89239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89241,89150],{},[14,89243,89244],{},"call传递的是普通参数，而apply必须传递的是数组",[133,89246,89248],{"className":50662,"code":89247,"language":50664,"meta":31,"style":31},"\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",[139,89249,89250,89260,89274,89278,89286,89300,89320,89332,89340,89344,89352,89360,89370,89377,89381,89386,89402,89414,89428,89432,89437,89456,89461,89465,89470,89475,89483,89488,89510,89515,89531,89547,89559,89563,89568,89587,89595,89603,89607],{"__ignoreMap":31},[142,89251,89252,89254,89256,89258],{"class":144,"line":145},[142,89253,51326],{"class":152},[142,89255,51330],{"class":51329},[142,89257,51333],{"class":1991},[142,89259,51336],{"class":152},[142,89261,89262,89264,89266,89268,89270,89272],{"class":144,"line":64},[142,89263,1063],{"class":152},[142,89265,50664],{"class":51329},[142,89267,51345],{"class":1991},[142,89269,198],{"class":152},[142,89271,51350],{"class":257},[142,89273,51336],{"class":152},[142,89275,89276],{"class":144,"line":1208},[142,89277,2428],{"emptyLinePlaceholder":69},[142,89279,89280,89282,89284],{"class":144,"line":1223},[142,89281,1063],{"class":152},[142,89283,51363],{"class":51329},[142,89285,51336],{"class":152},[142,89287,89288,89290,89292,89294,89296,89298],{"class":144,"line":1229},[142,89289,52173],{"class":152},[142,89291,51373],{"class":51329},[142,89293,51376],{"class":1991},[142,89295,198],{"class":152},[142,89297,51381],{"class":257},[142,89299,51336],{"class":152},[142,89301,89302,89304,89306,89308,89310,89312,89314,89316,89318],{"class":144,"line":1243},[142,89303,52173],{"class":152},[142,89305,51373],{"class":51329},[142,89307,14949],{"class":1991},[142,89309,198],{"class":152},[142,89311,51420],{"class":257},[142,89313,51400],{"class":1991},[142,89315,198],{"class":152},[142,89317,51427],{"class":257},[142,89319,51336],{"class":152},[142,89321,89322,89324,89326,89328,89330],{"class":144,"line":1249},[142,89323,52173],{"class":152},[142,89325,51436],{"class":51329},[142,89327,51439],{"class":152},[142,89329,51436],{"class":51329},[142,89331,51336],{"class":152},[142,89333,89334,89336,89338],{"class":144,"line":1340},[142,89335,51814],{"class":152},[142,89337,51363],{"class":51329},[142,89339,51336],{"class":152},[142,89341,89342],{"class":144,"line":1346},[142,89343,2428],{"emptyLinePlaceholder":69},[142,89345,89346,89348,89350],{"class":144,"line":1358},[142,89347,1063],{"class":152},[142,89349,51829],{"class":51329},[142,89351,51336],{"class":152},[142,89353,89354,89356,89358],{"class":144,"line":1640},[142,89355,52173],{"class":152},[142,89357,51842],{"class":51329},[142,89359,51336],{"class":152},[142,89361,89362,89364,89366,89368],{"class":144,"line":1645},[142,89363,11250],{"class":148},[142,89365,70000],{"class":201},[142,89367,13593],{"class":148},[142,89369,15601],{"class":152},[142,89371,89372,89374],{"class":144,"line":1651},[142,89373,71655],{"class":152},[142,89375,89376],{"class":201},"18\n",[142,89378,89379],{"class":144,"line":1656},[142,89380,2215],{"class":152},[142,89382,89383],{"class":144,"line":1670},[142,89384,89385],{"class":211},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[142,89387,89388,89390,89392,89394,89396,89398,89400],{"class":144,"line":1675},[142,89389,70113],{"class":148},[142,89391,88879],{"class":1991},[142,89393,153],{"class":152},[142,89395,973],{"class":5245},[142,89397,12464],{"class":152},[142,89399,998],{"class":5245},[142,89401,12471],{"class":152},[142,89403,89404,89406,89408,89410,89412],{"class":144,"line":1681},[142,89405,58273],{"class":152},[142,89407,58276],{"class":1991},[142,89409,153],{"class":152},[142,89411,87022],{"class":201},[142,89413,159],{"class":152},[142,89415,89416,89418,89420,89423,89425],{"class":144,"line":1702},[142,89417,58273],{"class":152},[142,89419,58276],{"class":1991},[142,89421,89422],{"class":152},"(x ",[142,89424,634],{"class":148},[142,89426,89427],{"class":152}," y)\n",[142,89429,89430],{"class":144,"line":1707},[142,89431,2215],{"class":152},[142,89433,89434],{"class":144,"line":1721},[142,89435,89436],{"class":211},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[142,89438,89439,89442,89445,89448,89450,89452,89454],{"class":144,"line":1726},[142,89440,89441],{"class":152},"    fn.",[142,89443,89444],{"class":1991},"apply",[142,89446,89447],{"class":152},"(obj, [",[142,89449,370],{"class":201},[142,89451,12464],{"class":152},[142,89453,230],{"class":201},[142,89455,4685],{"class":152},[142,89457,89458],{"class":144,"line":1755},[142,89459,89460],{"class":211},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[142,89462,89463],{"class":144,"line":1760},[142,89464,2428],{"emptyLinePlaceholder":69},[142,89466,89467],{"class":144,"line":1777},[142,89468,89469],{"class":211},"    \u002F\u002F 使用场景：求数组最大值\n",[142,89471,89472],{"class":144,"line":1782},[142,89473,89474],{"class":211},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[142,89476,89477,89480],{"class":144,"line":1787},[142,89478,89479],{"class":211},"    \u002F\u002F console.log(max)",[142,89481,89482],{"class":211},"   \u002F\u002F3\n",[142,89484,89485],{"class":144,"line":1792},[142,89486,89487],{"class":211},"    \u002F\u002F 指向空或者Math都是可以的\n",[142,89489,89490,89492,89494,89496,89498,89500,89502,89504,89506,89508],{"class":144,"line":1806},[142,89491,11250],{"class":148},[142,89493,57724],{"class":201},[142,89495,13593],{"class":148},[142,89497,52255],{"class":152},[142,89499,464],{"class":201},[142,89501,12464],{"class":152},[142,89503,657],{"class":201},[142,89505,12464],{"class":152},[142,89507,688],{"class":201},[142,89509,33275],{"class":152},[142,89511,89512],{"class":144,"line":1811},[142,89513,89514],{"class":211},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[142,89516,89517,89519,89521,89523,89526,89528],{"class":144,"line":2605},[142,89518,11250],{"class":148},[142,89520,5980],{"class":201},[142,89522,13593],{"class":148},[142,89524,89525],{"class":152}," Math.max.",[142,89527,89444],{"class":1991},[142,89529,89530],{"class":152},"(Math, arr)\n",[142,89532,89533,89535,89538,89540,89543,89545],{"class":144,"line":2619},[142,89534,11250],{"class":148},[142,89536,89537],{"class":201}," min",[142,89539,13593],{"class":148},[142,89541,89542],{"class":152}," Math.min.",[142,89544,89444],{"class":1991},[142,89546,89530],{"class":152},[142,89548,89549,89551,89553,89556],{"class":144,"line":2627},[142,89550,73782],{"class":152},[142,89552,58276],{"class":1991},[142,89554,89555],{"class":152},"(max, min)     ",[142,89557,89558],{"class":211},"\u002F\u002F100,4\n",[142,89560,89561],{"class":144,"line":2632},[142,89562,2428],{"emptyLinePlaceholder":69},[142,89564,89565],{"class":144,"line":2638},[142,89566,89567],{"class":211},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[142,89569,89570,89572,89574,89577,89579,89581,89584],{"class":144,"line":2644},[142,89571,73782],{"class":152},[142,89573,58276],{"class":1991},[142,89575,89576],{"class":152},"(Max.",[142,89578,6044],{"class":1991},[142,89580,153],{"class":152},[142,89582,89583],{"class":148},"...",[142,89585,89586],{"class":152},"arr))\n",[142,89588,89589,89591,89593],{"class":144,"line":2649},[142,89590,52446],{"class":152},[142,89592,51842],{"class":51329},[142,89594,51336],{"class":152},[142,89596,89597,89599,89601],{"class":144,"line":7977},[142,89598,51814],{"class":152},[142,89600,51829],{"class":51329},[142,89602,51336],{"class":152},[142,89604,89605],{"class":144,"line":8001},[142,89606,2428],{"emptyLinePlaceholder":69},[142,89608,89609,89611,89613],{"class":144,"line":8006},[142,89610,51814],{"class":152},[142,89612,50664],{"class":51329},[142,89614,51336],{"class":152},[14,89616,89617],{},[29,89618],{"alt":31,"src":89619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[96,89621,89622],{"start":1208},[99,89623,89624],{},"bind()",[14,89626,89627],{},[29,89628],{"alt":31,"src":89629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89631,89632],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89634,89635],{},"bind的语法跟call很相似",[133,89637,89639],{"className":53096,"code":89638,"language":53098,"meta":31,"style":31},"\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",[139,89640,89641,89649,89657,89661,89666,89670,89674,89679,89683,89688,89693,89698,89703,89708,89713,89718,89722,89730],{"__ignoreMap":31},[142,89642,89643,89645,89647],{"class":144,"line":145},[142,89644,1063],{"class":152},[142,89646,51829],{"class":51329},[142,89648,51336],{"class":152},[142,89650,89651,89653,89655],{"class":144,"line":64},[142,89652,52173],{"class":152},[142,89654,51842],{"class":51329},[142,89656,51336],{"class":152},[142,89658,89659],{"class":144,"line":1208},[142,89660,71552],{"class":152},[142,89662,89663],{"class":144,"line":1223},[142,89664,89665],{"class":152},"      age: 18\n",[142,89667,89668],{"class":144,"line":1229},[142,89669,2215],{"class":152},[142,89671,89672],{"class":144,"line":1243},[142,89673,77172],{"class":152},[142,89675,89676],{"class":144,"line":1249},[142,89677,89678],{"class":152},"      console.log(this)\n",[142,89680,89681],{"class":144,"line":1340},[142,89682,2215],{"class":152},[142,89684,89685],{"class":144,"line":1346},[142,89686,89687],{"class":152},"    \u002F\u002F 1.bind 不会调用函数\n",[142,89689,89690],{"class":144,"line":1358},[142,89691,89692],{"class":152},"    \u002F\u002F 2.bind能改变this的指向\n",[142,89694,89695],{"class":144,"line":1640},[142,89696,89697],{"class":152},"    fn.bind()\n",[142,89699,89700],{"class":144,"line":1645},[142,89701,89702],{"class":152},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[142,89704,89705],{"class":144,"line":1651},[142,89706,89707],{"class":152},"    const fun = fn.bind(obj)\n",[142,89709,89710],{"class":144,"line":1656},[142,89711,89712],{"class":152},"    \u002F\u002F console.log(fun)\n",[142,89714,89715],{"class":144,"line":1670},[142,89716,89717],{"class":152},"    \u002F\u002F 调用,查看this的指向\n",[142,89719,89720],{"class":144,"line":1675},[142,89721,52680],{"class":152},[142,89723,89724,89726,89728],{"class":144,"line":1681},[142,89725,52446],{"class":152},[142,89727,51842],{"class":51329},[142,89729,51336],{"class":152},[142,89731,89732,89734,89736],{"class":144,"line":1702},[142,89733,51814],{"class":152},[142,89735,51829],{"class":51329},[142,89737,51336],{"class":152},[14,89739,89740],{},[29,89741],{"alt":31,"src":89742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[96,89744,89745],{"start":1223},[99,89746,89747],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[133,89749,89751],{"className":53096,"code":89750,"language":53098,"meta":31,"style":31},"\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",[139,89752,89753,89761,89774,89782,89787,89791,89796,89801,89806,89811,89816,89821,89826,89831,89835,89843],{"__ignoreMap":31},[142,89754,89755,89757,89759],{"class":144,"line":145},[142,89756,1063],{"class":152},[142,89758,51829],{"class":51329},[142,89760,51336],{"class":152},[142,89762,89763,89765,89767,89770,89772],{"class":144,"line":64},[142,89764,52173],{"class":152},[142,89766,53916],{"class":51329},[142,89768,89769],{"class":152},">禁用\u003C\u002F",[142,89771,53916],{"class":51329},[142,89773,51336],{"class":152},[142,89775,89776,89778,89780],{"class":144,"line":1208},[142,89777,52173],{"class":152},[142,89779,51842],{"class":51329},[142,89781,51336],{"class":152},[142,89783,89784],{"class":144,"line":1223},[142,89785,89786],{"class":152},"    const btn = document.querySelector('button')\n",[142,89788,89789],{"class":144,"line":1229},[142,89790,59045],{"class":152},[142,89792,89793],{"class":144,"line":1243},[142,89794,89795],{"class":152},"      this.disabled = true\n",[142,89797,89798],{"class":144,"line":1249},[142,89799,89800],{"class":152},"      \u002F\u002F 定时器是window进行调用的\n",[142,89802,89803],{"class":144,"line":1340},[142,89804,89805],{"class":152},"      setTimeout(function () {\n",[142,89807,89808],{"class":144,"line":1346},[142,89809,89810],{"class":152},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[142,89812,89813],{"class":144,"line":1358},[142,89814,89815],{"class":152},"        this.disabled = false\n",[142,89817,89818],{"class":144,"line":1640},[142,89819,89820],{"class":152},"      }.bind(this), 2000)\n",[142,89822,89823],{"class":144,"line":1645},[142,89824,89825],{"class":152},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[142,89827,89828],{"class":144,"line":1651},[142,89829,89830],{"class":152},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[142,89832,89833],{"class":144,"line":1656},[142,89834,33490],{"class":152},[142,89836,89837,89839,89841],{"class":144,"line":1670},[142,89838,52446],{"class":152},[142,89840,51842],{"class":51329},[142,89842,51336],{"class":152},[142,89844,89845,89847,89849],{"class":144,"line":1675},[142,89846,51814],{"class":152},[142,89848,51829],{"class":51329},[142,89850,51336],{"class":152},[96,89852,89853],{"start":1229},[99,89854,21982],{},[14,89856,89857],{},[29,89858],{"alt":31,"src":89859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[84,89861,89863],{"id":89862},"_417-性能优化","4.17 性能优化",[113,89865,89867],{"id":89866},"_4171-防抖","4.17.1 防抖",[14,89869,89870],{},[29,89871],{"alt":31,"src":89872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89874,89875],{},[302,89876,89877],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89879,89880],{},"防抖实现方式：",[1160,89882,89883],{},[99,89884,89885],{},"lodash 提供了防抖处理",[14,89887,89888],{},"_.debounce(func,[wait=0],[options={}])",[14,89890,89891],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[133,89893,89895],{"className":50662,"code":89894,"language":50664,"meta":31,"style":31},"\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",[139,89896,89897,89907,89921,89925,89933,89947,89967,89979,89987,89993,90003,90015,90027,90038,90050,90060,90070,90083,90087,90095,90103,90107,90115,90133,90151,90159,90178,90188,90197,90208,90213,90217,90222,90227,90232,90257,90265,90273,90277],{"__ignoreMap":31},[142,89898,89899,89901,89903,89905],{"class":144,"line":145},[142,89900,51326],{"class":152},[142,89902,51330],{"class":51329},[142,89904,51333],{"class":1991},[142,89906,51336],{"class":152},[142,89908,89909,89911,89913,89915,89917,89919],{"class":144,"line":64},[142,89910,1063],{"class":152},[142,89912,50664],{"class":51329},[142,89914,51345],{"class":1991},[142,89916,198],{"class":152},[142,89918,51350],{"class":257},[142,89920,51336],{"class":152},[142,89922,89923],{"class":144,"line":1208},[142,89924,2428],{"emptyLinePlaceholder":69},[142,89926,89927,89929,89931],{"class":144,"line":1223},[142,89928,1063],{"class":152},[142,89930,51363],{"class":51329},[142,89932,51336],{"class":152},[142,89934,89935,89937,89939,89941,89943,89945],{"class":144,"line":1229},[142,89936,52173],{"class":152},[142,89938,51373],{"class":51329},[142,89940,51376],{"class":1991},[142,89942,198],{"class":152},[142,89944,51381],{"class":257},[142,89946,51336],{"class":152},[142,89948,89949,89951,89953,89955,89957,89959,89961,89963,89965],{"class":144,"line":1243},[142,89950,52173],{"class":152},[142,89952,51373],{"class":51329},[142,89954,14949],{"class":1991},[142,89956,198],{"class":152},[142,89958,51420],{"class":257},[142,89960,51400],{"class":1991},[142,89962,198],{"class":152},[142,89964,51427],{"class":257},[142,89966,51336],{"class":152},[142,89968,89969,89971,89973,89975,89977],{"class":144,"line":1249},[142,89970,52173],{"class":152},[142,89972,51436],{"class":51329},[142,89974,51439],{"class":152},[142,89976,51436],{"class":51329},[142,89978,51336],{"class":152},[142,89980,89981,89983,89985],{"class":144,"line":1340},[142,89982,52173],{"class":152},[142,89984,5155],{"class":51329},[142,89986,51336],{"class":152},[142,89988,89989,89991],{"class":144,"line":1346},[142,89990,54781],{"class":1991},[142,89992,15601],{"class":152},[142,89994,89995,89997,89999,90001],{"class":144,"line":1358},[142,89996,72625],{"class":201},[142,89998,51466],{"class":152},[142,90000,60534],{"class":201},[142,90002,1319],{"class":152},[142,90004,90005,90007,90009,90011,90013],{"class":144,"line":1640},[142,90006,54800],{"class":201},[142,90008,51466],{"class":152},[142,90010,1750],{"class":201},[142,90012,51521],{"class":148},[142,90014,1319],{"class":152},[142,90016,90017,90019,90021,90023,90025],{"class":144,"line":1645},[142,90018,54814],{"class":201},[142,90020,51466],{"class":152},[142,90022,1750],{"class":201},[142,90024,51521],{"class":148},[142,90026,1319],{"class":152},[142,90028,90029,90031,90033,90036],{"class":144,"line":1651},[142,90030,54913],{"class":201},[142,90032,51466],{"class":152},[142,90034,90035],{"class":201},"gray",[142,90037,1319],{"class":152},[142,90039,90040,90042,90044,90046,90048],{"class":144,"line":1656},[142,90041,54951],{"class":201},[142,90043,51466],{"class":152},[142,90045,978],{"class":201},[142,90047,51521],{"class":148},[142,90049,1319],{"class":152},[142,90051,90052,90054,90056,90058],{"class":144,"line":1670},[142,90053,57445],{"class":201},[142,90055,51466],{"class":152},[142,90057,60871],{"class":201},[142,90059,1319],{"class":152},[142,90061,90062,90064,90066,90068],{"class":144,"line":1675},[142,90063,57315],{"class":201},[142,90065,51466],{"class":152},[142,90067,51621],{"class":201},[142,90069,1319],{"class":152},[142,90071,90072,90075,90077,90079,90081],{"class":144,"line":1681},[142,90073,90074],{"class":201},"      padding-top",[142,90076,51466],{"class":152},[142,90078,472],{"class":201},[142,90080,51521],{"class":148},[142,90082,1319],{"class":152},[142,90084,90085],{"class":144,"line":1702},[142,90086,2215],{"class":152},[142,90088,90089,90091,90093],{"class":144,"line":1707},[142,90090,52446],{"class":152},[142,90092,5155],{"class":51329},[142,90094,51336],{"class":152},[142,90096,90097,90099,90101],{"class":144,"line":1721},[142,90098,51814],{"class":152},[142,90100,51363],{"class":51329},[142,90102,51336],{"class":152},[142,90104,90105],{"class":144,"line":1726},[142,90106,2428],{"emptyLinePlaceholder":69},[142,90108,90109,90111,90113],{"class":144,"line":1755},[142,90110,1063],{"class":152},[142,90112,51829],{"class":51329},[142,90114,51336],{"class":152},[142,90116,90117,90119,90121,90123,90125,90127,90129,90131],{"class":144,"line":1760},[142,90118,52173],{"class":152},[142,90120,51640],{"class":51329},[142,90122,53515],{"class":1991},[142,90124,198],{"class":152},[142,90126,53520],{"class":257},[142,90128,55343],{"class":152},[142,90130,51640],{"class":51329},[142,90132,51336],{"class":152},[142,90134,90135,90137,90139,90141,90143,90145,90147,90149],{"class":144,"line":1777},[142,90136,52173],{"class":152},[142,90138,51842],{"class":51329},[142,90140,55268],{"class":1991},[142,90142,198],{"class":152},[142,90144,88303],{"class":257},[142,90146,55343],{"class":152},[142,90148,51842],{"class":51329},[142,90150,51336],{"class":152},[142,90152,90153,90155,90157],{"class":144,"line":1782},[142,90154,52173],{"class":152},[142,90156,51842],{"class":51329},[142,90158,51336],{"class":152},[142,90160,90161,90163,90165,90167,90169,90171,90173,90176],{"class":144,"line":1787},[142,90162,11250],{"class":148},[142,90164,86962],{"class":201},[142,90166,13593],{"class":148},[142,90168,54425],{"class":152},[142,90170,54428],{"class":1991},[142,90172,153],{"class":152},[142,90174,90175],{"class":257},"'.box'",[142,90177,159],{"class":152},[142,90179,90180,90182,90184,90186],{"class":144,"line":1792},[142,90181,52248],{"class":148},[142,90183,9467],{"class":152},[142,90185,198],{"class":148},[142,90187,47362],{"class":201},[142,90189,90190,90192,90195],{"class":144,"line":1806},[142,90191,70113],{"class":148},[142,90193,90194],{"class":1991}," mouseMove",[142,90196,10882],{"class":152},[142,90198,90199,90202,90204,90206],{"class":144,"line":1811},[142,90200,90201],{"class":152},"      box.innerHTML ",[142,90203,198],{"class":148},[142,90205,3060],{"class":152},[142,90207,2730],{"class":148},[142,90209,90210],{"class":144,"line":2605},[142,90211,90212],{"class":211},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[142,90214,90215],{"class":144,"line":2619},[142,90216,2215],{"class":152},[142,90218,90219],{"class":144,"line":2627},[142,90220,90221],{"class":211},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[142,90223,90224],{"class":144,"line":2632},[142,90225,90226],{"class":211},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[142,90228,90229],{"class":144,"line":2638},[142,90230,90231],{"class":211},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[142,90233,90234,90237,90239,90241,90244,90247,90250,90253,90255],{"class":144,"line":2644},[142,90235,90236],{"class":152},"    box.",[142,90238,57842],{"class":1991},[142,90240,153],{"class":152},[142,90242,90243],{"class":257},"'mousemove'",[142,90245,90246],{"class":152},", _.",[142,90248,90249],{"class":1991},"debounce",[142,90251,90252],{"class":152},"(mouseMove, ",[142,90254,65103],{"class":201},[142,90256,30526],{"class":152},[142,90258,90259,90261,90263],{"class":144,"line":2649},[142,90260,52446],{"class":152},[142,90262,51842],{"class":51329},[142,90264,51336],{"class":152},[142,90266,90267,90269,90271],{"class":144,"line":7977},[142,90268,51814],{"class":152},[142,90270,51829],{"class":51329},[142,90272,51336],{"class":152},[142,90274,90275],{"class":144,"line":8001},[142,90276,2428],{"emptyLinePlaceholder":69},[142,90278,90279,90281,90283],{"class":144,"line":8006},[142,90280,51814],{"class":152},[142,90282,50664],{"class":51329},[142,90284,51336],{"class":152},[1160,90286,90287],{},[99,90288,90289],{},"手写一个防抖函数来处理",[14,90291,90292],{},"防抖的核心就是利用定时器来实现的：",[14,90294,90295],{},"①声明一个定时器变量",[14,90297,90298],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90300,90301],{},"③如果没有定时器则开启定时器，记得存到变量里面",[133,90303,90305],{"className":50662,"code":90304,"language":50664,"meta":31,"style":31},"\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",[139,90306,90307,90317,90331,90335,90343,90357,90377,90389,90397,90403,90413,90425,90437,90447,90459,90469,90479,90491,90495,90503,90511,90515,90523,90541,90559,90567,90585,90595,90603,90613,90617,90621,90625,90630,90635,90640,90645,90650,90655,90673,90680,90685,90693,90698,90711,90727,90737,90742,90746,90750,90770,90774,90779,90784,90789,90794,90802,90810,90814],{"__ignoreMap":31},[142,90308,90309,90311,90313,90315],{"class":144,"line":145},[142,90310,51326],{"class":152},[142,90312,51330],{"class":51329},[142,90314,51333],{"class":1991},[142,90316,51336],{"class":152},[142,90318,90319,90321,90323,90325,90327,90329],{"class":144,"line":64},[142,90320,1063],{"class":152},[142,90322,50664],{"class":51329},[142,90324,51345],{"class":1991},[142,90326,198],{"class":152},[142,90328,51350],{"class":257},[142,90330,51336],{"class":152},[142,90332,90333],{"class":144,"line":1208},[142,90334,2428],{"emptyLinePlaceholder":69},[142,90336,90337,90339,90341],{"class":144,"line":1223},[142,90338,1063],{"class":152},[142,90340,51363],{"class":51329},[142,90342,51336],{"class":152},[142,90344,90345,90347,90349,90351,90353,90355],{"class":144,"line":1229},[142,90346,52173],{"class":152},[142,90348,51373],{"class":51329},[142,90350,51376],{"class":1991},[142,90352,198],{"class":152},[142,90354,51381],{"class":257},[142,90356,51336],{"class":152},[142,90358,90359,90361,90363,90365,90367,90369,90371,90373,90375],{"class":144,"line":1243},[142,90360,52173],{"class":152},[142,90362,51373],{"class":51329},[142,90364,14949],{"class":1991},[142,90366,198],{"class":152},[142,90368,51420],{"class":257},[142,90370,51400],{"class":1991},[142,90372,198],{"class":152},[142,90374,51427],{"class":257},[142,90376,51336],{"class":152},[142,90378,90379,90381,90383,90385,90387],{"class":144,"line":1249},[142,90380,52173],{"class":152},[142,90382,51436],{"class":51329},[142,90384,51439],{"class":152},[142,90386,51436],{"class":51329},[142,90388,51336],{"class":152},[142,90390,90391,90393,90395],{"class":144,"line":1340},[142,90392,52173],{"class":152},[142,90394,5155],{"class":51329},[142,90396,51336],{"class":152},[142,90398,90399,90401],{"class":144,"line":1346},[142,90400,54781],{"class":1991},[142,90402,15601],{"class":152},[142,90404,90405,90407,90409,90411],{"class":144,"line":1358},[142,90406,72625],{"class":201},[142,90408,51466],{"class":152},[142,90410,60534],{"class":201},[142,90412,1319],{"class":152},[142,90414,90415,90417,90419,90421,90423],{"class":144,"line":1640},[142,90416,54800],{"class":201},[142,90418,51466],{"class":152},[142,90420,1750],{"class":201},[142,90422,51521],{"class":148},[142,90424,1319],{"class":152},[142,90426,90427,90429,90431,90433,90435],{"class":144,"line":1645},[142,90428,54814],{"class":201},[142,90430,51466],{"class":152},[142,90432,1750],{"class":201},[142,90434,51521],{"class":148},[142,90436,1319],{"class":152},[142,90438,90439,90441,90443,90445],{"class":144,"line":1651},[142,90440,54913],{"class":201},[142,90442,51466],{"class":152},[142,90444,90035],{"class":201},[142,90446,1319],{"class":152},[142,90448,90449,90451,90453,90455,90457],{"class":144,"line":1656},[142,90450,54951],{"class":201},[142,90452,51466],{"class":152},[142,90454,978],{"class":201},[142,90456,51521],{"class":148},[142,90458,1319],{"class":152},[142,90460,90461,90463,90465,90467],{"class":144,"line":1670},[142,90462,57445],{"class":201},[142,90464,51466],{"class":152},[142,90466,60871],{"class":201},[142,90468,1319],{"class":152},[142,90470,90471,90473,90475,90477],{"class":144,"line":1675},[142,90472,57315],{"class":201},[142,90474,51466],{"class":152},[142,90476,51621],{"class":201},[142,90478,1319],{"class":152},[142,90480,90481,90483,90485,90487,90489],{"class":144,"line":1681},[142,90482,90074],{"class":201},[142,90484,51466],{"class":152},[142,90486,472],{"class":201},[142,90488,51521],{"class":148},[142,90490,1319],{"class":152},[142,90492,90493],{"class":144,"line":1702},[142,90494,2215],{"class":152},[142,90496,90497,90499,90501],{"class":144,"line":1707},[142,90498,52446],{"class":152},[142,90500,5155],{"class":51329},[142,90502,51336],{"class":152},[142,90504,90505,90507,90509],{"class":144,"line":1721},[142,90506,51814],{"class":152},[142,90508,51363],{"class":51329},[142,90510,51336],{"class":152},[142,90512,90513],{"class":144,"line":1726},[142,90514,2428],{"emptyLinePlaceholder":69},[142,90516,90517,90519,90521],{"class":144,"line":1755},[142,90518,1063],{"class":152},[142,90520,51829],{"class":51329},[142,90522,51336],{"class":152},[142,90524,90525,90527,90529,90531,90533,90535,90537,90539],{"class":144,"line":1760},[142,90526,52173],{"class":152},[142,90528,51640],{"class":51329},[142,90530,53515],{"class":1991},[142,90532,198],{"class":152},[142,90534,53520],{"class":257},[142,90536,55343],{"class":152},[142,90538,51640],{"class":51329},[142,90540,51336],{"class":152},[142,90542,90543,90545,90547,90549,90551,90553,90555,90557],{"class":144,"line":1777},[142,90544,52173],{"class":152},[142,90546,51842],{"class":51329},[142,90548,55268],{"class":1991},[142,90550,198],{"class":152},[142,90552,88303],{"class":257},[142,90554,55343],{"class":152},[142,90556,51842],{"class":51329},[142,90558,51336],{"class":152},[142,90560,90561,90563,90565],{"class":144,"line":1782},[142,90562,52173],{"class":152},[142,90564,51842],{"class":51329},[142,90566,51336],{"class":152},[142,90568,90569,90571,90573,90575,90577,90579,90581,90583],{"class":144,"line":1787},[142,90570,11250],{"class":148},[142,90572,86962],{"class":201},[142,90574,13593],{"class":148},[142,90576,54425],{"class":152},[142,90578,54428],{"class":1991},[142,90580,153],{"class":152},[142,90582,90175],{"class":257},[142,90584,159],{"class":152},[142,90586,90587,90589,90591,90593],{"class":144,"line":1792},[142,90588,52248],{"class":148},[142,90590,9467],{"class":152},[142,90592,198],{"class":148},[142,90594,47362],{"class":201},[142,90596,90597,90599,90601],{"class":144,"line":1806},[142,90598,70113],{"class":148},[142,90600,90194],{"class":1991},[142,90602,10882],{"class":152},[142,90604,90605,90607,90609,90611],{"class":144,"line":1811},[142,90606,90201],{"class":152},[142,90608,198],{"class":148},[142,90610,3060],{"class":152},[142,90612,2730],{"class":148},[142,90614,90615],{"class":144,"line":2605},[142,90616,90212],{"class":211},[142,90618,90619],{"class":144,"line":2619},[142,90620,2215],{"class":152},[142,90622,90623],{"class":144,"line":2627},[142,90624,90221],{"class":211},[142,90626,90627],{"class":144,"line":2632},[142,90628,90629],{"class":211},"    \u002F\u002F 手写防抖函数\n",[142,90631,90632],{"class":144,"line":2638},[142,90633,90634],{"class":211},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[142,90636,90637],{"class":144,"line":2644},[142,90638,90639],{"class":211},"    \u002F\u002F 1.声明定时器变量\n",[142,90641,90642],{"class":144,"line":2649},[142,90643,90644],{"class":211},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[142,90646,90647],{"class":144,"line":7977},[142,90648,90649],{"class":211},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[142,90651,90652],{"class":144,"line":8001},[142,90653,90654],{"class":211},"    \u002F\u002F 4.定时器里面写函数调用\n",[142,90656,90657,90659,90662,90664,90667,90669,90671],{"class":144,"line":8006},[142,90658,70113],{"class":148},[142,90660,90661],{"class":1991}," debounce",[142,90663,153],{"class":152},[142,90665,90666],{"class":5245},"fn",[142,90668,12464],{"class":152},[142,90670,873],{"class":5245},[142,90672,12471],{"class":152},[142,90674,90675,90677],{"class":144,"line":8012},[142,90676,79801],{"class":148},[142,90678,90679],{"class":152}," timer\n",[142,90681,90682],{"class":144,"line":8039},[142,90683,90684],{"class":211},"      \u002F\u002F return 返回一个匿名函数\n",[142,90686,90687,90689,90691],{"class":144,"line":8044},[142,90688,74011],{"class":148},[142,90690,58947],{"class":148},[142,90692,54481],{"class":152},[142,90694,90695],{"class":144,"line":8050},[142,90696,90697],{"class":211},"        \u002F\u002F 这里边写第二三四步\n",[142,90699,90700,90702,90705,90708],{"class":144,"line":8062},[142,90701,2525],{"class":148},[142,90703,90704],{"class":152}," (timer) ",[142,90706,90707],{"class":1991},"clearTimeout",[142,90709,90710],{"class":152},"(timer)\n",[142,90712,90713,90716,90718,90721,90723,90725],{"class":144,"line":8074},[142,90714,90715],{"class":152},"        timer ",[142,90717,198],{"class":148},[142,90719,90720],{"class":1991}," setTimeout",[142,90722,153],{"class":152},[142,90724,54478],{"class":148},[142,90726,54481],{"class":152},[142,90728,90729,90732,90734],{"class":144,"line":8086},[142,90730,90731],{"class":1991},"          fn",[142,90733,13079],{"class":152},[142,90735,90736],{"class":211},"\u002F\u002F加小括号调用fn }, t)\n",[142,90738,90739],{"class":144,"line":9745},[142,90740,90741],{"class":152},"        }, t)\n",[142,90743,90744],{"class":144,"line":9770},[142,90745,52427],{"class":152},[142,90747,90748],{"class":144,"line":9793},[142,90749,2215],{"class":152},[142,90751,90752,90754,90756,90758,90760,90762,90764,90766,90768],{"class":144,"line":9817},[142,90753,90236],{"class":152},[142,90755,57842],{"class":1991},[142,90757,153],{"class":152},[142,90759,90243],{"class":257},[142,90761,12464],{"class":152},[142,90763,90249],{"class":1991},[142,90765,90252],{"class":152},[142,90767,65103],{"class":201},[142,90769,30526],{"class":152},[142,90771,90772],{"class":144,"line":9822},[142,90773,2428],{"emptyLinePlaceholder":69},[142,90775,90776],{"class":144,"line":9827},[142,90777,90778],{"class":211},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[142,90780,90781],{"class":144,"line":9832},[142,90782,90783],{"class":211},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[142,90785,90786],{"class":144,"line":9841},[142,90787,90788],{"class":211},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[142,90790,90791],{"class":144,"line":9846},[142,90792,90793],{"class":211},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[142,90795,90796,90798,90800],{"class":144,"line":9852},[142,90797,52446],{"class":152},[142,90799,51842],{"class":51329},[142,90801,51336],{"class":152},[142,90803,90804,90806,90808],{"class":144,"line":9873},[142,90805,51814],{"class":152},[142,90807,51829],{"class":51329},[142,90809,51336],{"class":152},[142,90811,90812],{"class":144,"line":9879},[142,90813,2428],{"emptyLinePlaceholder":69},[142,90815,90816,90818,90820],{"class":144,"line":9893},[142,90817,51814],{"class":152},[142,90819,50664],{"class":51329},[142,90821,51336],{"class":152},[113,90823,90825],{"id":90824},"_4172-节流","4.17.2 节流",[14,90827,90828],{},[29,90829],{"alt":31,"src":90830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90832,90833],{},[29,90834],{"alt":31,"src":90835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90837,90838],{},[302,90839,90840],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90842,90843],{},"实现方式：",[1160,90845,90846],{},[99,90847,90848],{},"lodash 提供的节流函数来处理",[14,90850,90851],{},"_.throttle(func,[wait=0],[options=])",[14,90853,90854],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[133,90856,90858],{"className":50662,"code":90857,"language":50664,"meta":31,"style":31},"\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",[139,90859,90860,90870,90884,90888,90896,90910,90930,90942,90950,90956,90966,90978,90990,91000,91012,91022,91032,91044,91048,91056,91064,91068,91076,91094,91112,91120,91138,91148,91156,91166,91170,91174,91178,91183,91188,91209,91217,91225,91229],{"__ignoreMap":31},[142,90861,90862,90864,90866,90868],{"class":144,"line":145},[142,90863,51326],{"class":152},[142,90865,51330],{"class":51329},[142,90867,51333],{"class":1991},[142,90869,51336],{"class":152},[142,90871,90872,90874,90876,90878,90880,90882],{"class":144,"line":64},[142,90873,1063],{"class":152},[142,90875,50664],{"class":51329},[142,90877,51345],{"class":1991},[142,90879,198],{"class":152},[142,90881,51350],{"class":257},[142,90883,51336],{"class":152},[142,90885,90886],{"class":144,"line":1208},[142,90887,2428],{"emptyLinePlaceholder":69},[142,90889,90890,90892,90894],{"class":144,"line":1223},[142,90891,1063],{"class":152},[142,90893,51363],{"class":51329},[142,90895,51336],{"class":152},[142,90897,90898,90900,90902,90904,90906,90908],{"class":144,"line":1229},[142,90899,52173],{"class":152},[142,90901,51373],{"class":51329},[142,90903,51376],{"class":1991},[142,90905,198],{"class":152},[142,90907,51381],{"class":257},[142,90909,51336],{"class":152},[142,90911,90912,90914,90916,90918,90920,90922,90924,90926,90928],{"class":144,"line":1243},[142,90913,52173],{"class":152},[142,90915,51373],{"class":51329},[142,90917,14949],{"class":1991},[142,90919,198],{"class":152},[142,90921,51420],{"class":257},[142,90923,51400],{"class":1991},[142,90925,198],{"class":152},[142,90927,51427],{"class":257},[142,90929,51336],{"class":152},[142,90931,90932,90934,90936,90938,90940],{"class":144,"line":1249},[142,90933,52173],{"class":152},[142,90935,51436],{"class":51329},[142,90937,51439],{"class":152},[142,90939,51436],{"class":51329},[142,90941,51336],{"class":152},[142,90943,90944,90946,90948],{"class":144,"line":1340},[142,90945,52173],{"class":152},[142,90947,5155],{"class":51329},[142,90949,51336],{"class":152},[142,90951,90952,90954],{"class":144,"line":1346},[142,90953,54781],{"class":1991},[142,90955,15601],{"class":152},[142,90957,90958,90960,90962,90964],{"class":144,"line":1358},[142,90959,72625],{"class":201},[142,90961,51466],{"class":152},[142,90963,60534],{"class":201},[142,90965,1319],{"class":152},[142,90967,90968,90970,90972,90974,90976],{"class":144,"line":1640},[142,90969,54800],{"class":201},[142,90971,51466],{"class":152},[142,90973,1750],{"class":201},[142,90975,51521],{"class":148},[142,90977,1319],{"class":152},[142,90979,90980,90982,90984,90986,90988],{"class":144,"line":1645},[142,90981,54814],{"class":201},[142,90983,51466],{"class":152},[142,90985,1750],{"class":201},[142,90987,51521],{"class":148},[142,90989,1319],{"class":152},[142,90991,90992,90994,90996,90998],{"class":144,"line":1651},[142,90993,54913],{"class":201},[142,90995,51466],{"class":152},[142,90997,90035],{"class":201},[142,90999,1319],{"class":152},[142,91001,91002,91004,91006,91008,91010],{"class":144,"line":1656},[142,91003,54951],{"class":201},[142,91005,51466],{"class":152},[142,91007,978],{"class":201},[142,91009,51521],{"class":148},[142,91011,1319],{"class":152},[142,91013,91014,91016,91018,91020],{"class":144,"line":1670},[142,91015,57445],{"class":201},[142,91017,51466],{"class":152},[142,91019,60871],{"class":201},[142,91021,1319],{"class":152},[142,91023,91024,91026,91028,91030],{"class":144,"line":1675},[142,91025,57315],{"class":201},[142,91027,51466],{"class":152},[142,91029,51621],{"class":201},[142,91031,1319],{"class":152},[142,91033,91034,91036,91038,91040,91042],{"class":144,"line":1681},[142,91035,90074],{"class":201},[142,91037,51466],{"class":152},[142,91039,472],{"class":201},[142,91041,51521],{"class":148},[142,91043,1319],{"class":152},[142,91045,91046],{"class":144,"line":1702},[142,91047,2215],{"class":152},[142,91049,91050,91052,91054],{"class":144,"line":1707},[142,91051,52446],{"class":152},[142,91053,5155],{"class":51329},[142,91055,51336],{"class":152},[142,91057,91058,91060,91062],{"class":144,"line":1721},[142,91059,51814],{"class":152},[142,91061,51363],{"class":51329},[142,91063,51336],{"class":152},[142,91065,91066],{"class":144,"line":1726},[142,91067,2428],{"emptyLinePlaceholder":69},[142,91069,91070,91072,91074],{"class":144,"line":1755},[142,91071,1063],{"class":152},[142,91073,51829],{"class":51329},[142,91075,51336],{"class":152},[142,91077,91078,91080,91082,91084,91086,91088,91090,91092],{"class":144,"line":1760},[142,91079,52173],{"class":152},[142,91081,51640],{"class":51329},[142,91083,53515],{"class":1991},[142,91085,198],{"class":152},[142,91087,53520],{"class":257},[142,91089,55343],{"class":152},[142,91091,51640],{"class":51329},[142,91093,51336],{"class":152},[142,91095,91096,91098,91100,91102,91104,91106,91108,91110],{"class":144,"line":1777},[142,91097,52173],{"class":152},[142,91099,51842],{"class":51329},[142,91101,55268],{"class":1991},[142,91103,198],{"class":152},[142,91105,88303],{"class":257},[142,91107,55343],{"class":152},[142,91109,51842],{"class":51329},[142,91111,51336],{"class":152},[142,91113,91114,91116,91118],{"class":144,"line":1782},[142,91115,52173],{"class":152},[142,91117,51842],{"class":51329},[142,91119,51336],{"class":152},[142,91121,91122,91124,91126,91128,91130,91132,91134,91136],{"class":144,"line":1787},[142,91123,11250],{"class":148},[142,91125,86962],{"class":201},[142,91127,13593],{"class":148},[142,91129,54425],{"class":152},[142,91131,54428],{"class":1991},[142,91133,153],{"class":152},[142,91135,90175],{"class":257},[142,91137,159],{"class":152},[142,91139,91140,91142,91144,91146],{"class":144,"line":1792},[142,91141,52248],{"class":148},[142,91143,9467],{"class":152},[142,91145,198],{"class":148},[142,91147,47362],{"class":201},[142,91149,91150,91152,91154],{"class":144,"line":1806},[142,91151,70113],{"class":148},[142,91153,90194],{"class":1991},[142,91155,10882],{"class":152},[142,91157,91158,91160,91162,91164],{"class":144,"line":1811},[142,91159,90201],{"class":152},[142,91161,198],{"class":148},[142,91163,3060],{"class":152},[142,91165,2730],{"class":148},[142,91167,91168],{"class":144,"line":2605},[142,91169,90212],{"class":211},[142,91171,91172],{"class":144,"line":2619},[142,91173,2215],{"class":152},[142,91175,91176],{"class":144,"line":2627},[142,91177,90221],{"class":211},[142,91179,91180],{"class":144,"line":2632},[142,91181,91182],{"class":211},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[142,91184,91185],{"class":144,"line":2638},[142,91186,91187],{"class":211},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[142,91189,91190,91192,91194,91196,91198,91200,91203,91205,91207],{"class":144,"line":2644},[142,91191,90236],{"class":152},[142,91193,57842],{"class":1991},[142,91195,153],{"class":152},[142,91197,90243],{"class":257},[142,91199,90246],{"class":152},[142,91201,91202],{"class":1991},"throttle",[142,91204,90252],{"class":152},[142,91206,65103],{"class":201},[142,91208,30526],{"class":152},[142,91210,91211,91213,91215],{"class":144,"line":2649},[142,91212,52446],{"class":152},[142,91214,51842],{"class":51329},[142,91216,51336],{"class":152},[142,91218,91219,91221,91223],{"class":144,"line":7977},[142,91220,51814],{"class":152},[142,91222,51829],{"class":51329},[142,91224,51336],{"class":152},[142,91226,91227],{"class":144,"line":8001},[142,91228,2428],{"emptyLinePlaceholder":69},[142,91230,91231,91233,91235],{"class":144,"line":8006},[142,91232,51814],{"class":152},[142,91234,50664],{"class":51329},[142,91236,51336],{"class":152},[1160,91238,91239],{},[99,91240,91241],{},"手写一个节流函数来处理",[14,91243,70981],{},[14,91245,90295],{},[14,91247,91248],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91250,91251],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[133,91253,91255],{"className":50662,"code":91254,"language":50664,"meta":31,"style":31},"\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",[139,91256,91257,91267,91281,91285,91293,91307,91327,91339,91347,91353,91363,91375,91387,91397,91409,91419,91429,91441,91445,91453,91461,91465,91473,91491,91509,91517,91535,91545,91553,91563,91567,91571,91575,91580,91585,91590,91595,91600,91605,91622,91628,91636,91647,91662,91669,91674,91679,91689,91694,91699,91704,91708,91712,91716,91736,91744,91752,91756],{"__ignoreMap":31},[142,91258,91259,91261,91263,91265],{"class":144,"line":145},[142,91260,51326],{"class":152},[142,91262,51330],{"class":51329},[142,91264,51333],{"class":1991},[142,91266,51336],{"class":152},[142,91268,91269,91271,91273,91275,91277,91279],{"class":144,"line":64},[142,91270,1063],{"class":152},[142,91272,50664],{"class":51329},[142,91274,51345],{"class":1991},[142,91276,198],{"class":152},[142,91278,51350],{"class":257},[142,91280,51336],{"class":152},[142,91282,91283],{"class":144,"line":1208},[142,91284,2428],{"emptyLinePlaceholder":69},[142,91286,91287,91289,91291],{"class":144,"line":1223},[142,91288,1063],{"class":152},[142,91290,51363],{"class":51329},[142,91292,51336],{"class":152},[142,91294,91295,91297,91299,91301,91303,91305],{"class":144,"line":1229},[142,91296,52173],{"class":152},[142,91298,51373],{"class":51329},[142,91300,51376],{"class":1991},[142,91302,198],{"class":152},[142,91304,51381],{"class":257},[142,91306,51336],{"class":152},[142,91308,91309,91311,91313,91315,91317,91319,91321,91323,91325],{"class":144,"line":1243},[142,91310,52173],{"class":152},[142,91312,51373],{"class":51329},[142,91314,14949],{"class":1991},[142,91316,198],{"class":152},[142,91318,51420],{"class":257},[142,91320,51400],{"class":1991},[142,91322,198],{"class":152},[142,91324,51427],{"class":257},[142,91326,51336],{"class":152},[142,91328,91329,91331,91333,91335,91337],{"class":144,"line":1249},[142,91330,52173],{"class":152},[142,91332,51436],{"class":51329},[142,91334,51439],{"class":152},[142,91336,51436],{"class":51329},[142,91338,51336],{"class":152},[142,91340,91341,91343,91345],{"class":144,"line":1340},[142,91342,52173],{"class":152},[142,91344,5155],{"class":51329},[142,91346,51336],{"class":152},[142,91348,91349,91351],{"class":144,"line":1346},[142,91350,54781],{"class":1991},[142,91352,15601],{"class":152},[142,91354,91355,91357,91359,91361],{"class":144,"line":1358},[142,91356,72625],{"class":201},[142,91358,51466],{"class":152},[142,91360,60534],{"class":201},[142,91362,1319],{"class":152},[142,91364,91365,91367,91369,91371,91373],{"class":144,"line":1640},[142,91366,54800],{"class":201},[142,91368,51466],{"class":152},[142,91370,1750],{"class":201},[142,91372,51521],{"class":148},[142,91374,1319],{"class":152},[142,91376,91377,91379,91381,91383,91385],{"class":144,"line":1645},[142,91378,54814],{"class":201},[142,91380,51466],{"class":152},[142,91382,1750],{"class":201},[142,91384,51521],{"class":148},[142,91386,1319],{"class":152},[142,91388,91389,91391,91393,91395],{"class":144,"line":1651},[142,91390,54913],{"class":201},[142,91392,51466],{"class":152},[142,91394,90035],{"class":201},[142,91396,1319],{"class":152},[142,91398,91399,91401,91403,91405,91407],{"class":144,"line":1656},[142,91400,54951],{"class":201},[142,91402,51466],{"class":152},[142,91404,978],{"class":201},[142,91406,51521],{"class":148},[142,91408,1319],{"class":152},[142,91410,91411,91413,91415,91417],{"class":144,"line":1670},[142,91412,57445],{"class":201},[142,91414,51466],{"class":152},[142,91416,60871],{"class":201},[142,91418,1319],{"class":152},[142,91420,91421,91423,91425,91427],{"class":144,"line":1675},[142,91422,57315],{"class":201},[142,91424,51466],{"class":152},[142,91426,51621],{"class":201},[142,91428,1319],{"class":152},[142,91430,91431,91433,91435,91437,91439],{"class":144,"line":1681},[142,91432,90074],{"class":201},[142,91434,51466],{"class":152},[142,91436,472],{"class":201},[142,91438,51521],{"class":148},[142,91440,1319],{"class":152},[142,91442,91443],{"class":144,"line":1702},[142,91444,2215],{"class":152},[142,91446,91447,91449,91451],{"class":144,"line":1707},[142,91448,52446],{"class":152},[142,91450,5155],{"class":51329},[142,91452,51336],{"class":152},[142,91454,91455,91457,91459],{"class":144,"line":1721},[142,91456,51814],{"class":152},[142,91458,51363],{"class":51329},[142,91460,51336],{"class":152},[142,91462,91463],{"class":144,"line":1726},[142,91464,2428],{"emptyLinePlaceholder":69},[142,91466,91467,91469,91471],{"class":144,"line":1755},[142,91468,1063],{"class":152},[142,91470,51829],{"class":51329},[142,91472,51336],{"class":152},[142,91474,91475,91477,91479,91481,91483,91485,91487,91489],{"class":144,"line":1760},[142,91476,52173],{"class":152},[142,91478,51640],{"class":51329},[142,91480,53515],{"class":1991},[142,91482,198],{"class":152},[142,91484,53520],{"class":257},[142,91486,55343],{"class":152},[142,91488,51640],{"class":51329},[142,91490,51336],{"class":152},[142,91492,91493,91495,91497,91499,91501,91503,91505,91507],{"class":144,"line":1777},[142,91494,52173],{"class":152},[142,91496,51842],{"class":51329},[142,91498,55268],{"class":1991},[142,91500,198],{"class":152},[142,91502,88303],{"class":257},[142,91504,55343],{"class":152},[142,91506,51842],{"class":51329},[142,91508,51336],{"class":152},[142,91510,91511,91513,91515],{"class":144,"line":1782},[142,91512,52173],{"class":152},[142,91514,51842],{"class":51329},[142,91516,51336],{"class":152},[142,91518,91519,91521,91523,91525,91527,91529,91531,91533],{"class":144,"line":1787},[142,91520,11250],{"class":148},[142,91522,86962],{"class":201},[142,91524,13593],{"class":148},[142,91526,54425],{"class":152},[142,91528,54428],{"class":1991},[142,91530,153],{"class":152},[142,91532,90175],{"class":257},[142,91534,159],{"class":152},[142,91536,91537,91539,91541,91543],{"class":144,"line":1792},[142,91538,52248],{"class":148},[142,91540,9467],{"class":152},[142,91542,198],{"class":148},[142,91544,47362],{"class":201},[142,91546,91547,91549,91551],{"class":144,"line":1806},[142,91548,70113],{"class":148},[142,91550,90194],{"class":1991},[142,91552,10882],{"class":152},[142,91554,91555,91557,91559,91561],{"class":144,"line":1811},[142,91556,90201],{"class":152},[142,91558,198],{"class":148},[142,91560,3060],{"class":152},[142,91562,2730],{"class":148},[142,91564,91565],{"class":144,"line":2605},[142,91566,90212],{"class":211},[142,91568,91569],{"class":144,"line":2619},[142,91570,2215],{"class":152},[142,91572,91573],{"class":144,"line":2627},[142,91574,90221],{"class":211},[142,91576,91577],{"class":144,"line":2632},[142,91578,91579],{"class":211},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[142,91581,91582],{"class":144,"line":2638},[142,91583,91584],{"class":211},"    \u002F\u002F 1.声明一个定时器变量\n",[142,91586,91587],{"class":144,"line":2644},[142,91588,91589],{"class":211},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[142,91591,91592],{"class":144,"line":2649},[142,91593,91594],{"class":211},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[142,91596,91597],{"class":144,"line":7977},[142,91598,91599],{"class":211},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[142,91601,91602],{"class":144,"line":8001},[142,91603,91604],{"class":211},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[142,91606,91607,91609,91612,91614,91616,91618,91620],{"class":144,"line":8006},[142,91608,70113],{"class":148},[142,91610,91611],{"class":1991}," throttle",[142,91613,153],{"class":152},[142,91615,90666],{"class":5245},[142,91617,12464],{"class":152},[142,91619,873],{"class":5245},[142,91621,12471],{"class":152},[142,91623,91624,91626],{"class":144,"line":8012},[142,91625,79801],{"class":148},[142,91627,90679],{"class":152},[142,91629,91630,91632,91634],{"class":144,"line":8039},[142,91631,74011],{"class":148},[142,91633,58947],{"class":148},[142,91635,54481],{"class":152},[142,91637,91638,91640,91642,91644],{"class":144,"line":8044},[142,91639,2525],{"class":148},[142,91641,1686],{"class":152},[142,91643,379],{"class":148},[142,91645,91646],{"class":152},"timer) {\n",[142,91648,91649,91652,91654,91656,91658,91660],{"class":144,"line":8050},[142,91650,91651],{"class":152},"          timer ",[142,91653,198],{"class":148},[142,91655,90720],{"class":1991},[142,91657,153],{"class":152},[142,91659,54478],{"class":148},[142,91661,54481],{"class":152},[142,91663,91664,91667],{"class":144,"line":8062},[142,91665,91666],{"class":1991},"            fn",[142,91668,2004],{"class":152},[142,91670,91671],{"class":144,"line":8074},[142,91672,91673],{"class":211},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[142,91675,91676],{"class":144,"line":8086},[142,91677,91678],{"class":211},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[142,91680,91681,91684,91686],{"class":144,"line":9745},[142,91682,91683],{"class":152},"            timer ",[142,91685,198],{"class":148},[142,91687,91688],{"class":201}," null\n",[142,91690,91691],{"class":144,"line":9770},[142,91692,91693],{"class":211},"            \u002F\u002F 不能用clearTimeout(timer)\n",[142,91695,91696],{"class":144,"line":9793},[142,91697,91698],{"class":211},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[142,91700,91701],{"class":144,"line":9817},[142,91702,91703],{"class":152},"          }, t)\n",[142,91705,91706],{"class":144,"line":9822},[142,91707,2557],{"class":152},[142,91709,91710],{"class":144,"line":9827},[142,91711,52427],{"class":152},[142,91713,91714],{"class":144,"line":9832},[142,91715,2215],{"class":152},[142,91717,91718,91720,91722,91724,91726,91728,91730,91732,91734],{"class":144,"line":9841},[142,91719,90236],{"class":152},[142,91721,57842],{"class":1991},[142,91723,153],{"class":152},[142,91725,90243],{"class":257},[142,91727,12464],{"class":152},[142,91729,91202],{"class":1991},[142,91731,90252],{"class":152},[142,91733,65103],{"class":201},[142,91735,30526],{"class":152},[142,91737,91738,91740,91742],{"class":144,"line":9846},[142,91739,52446],{"class":152},[142,91741,51842],{"class":51329},[142,91743,51336],{"class":152},[142,91745,91746,91748,91750],{"class":144,"line":9852},[142,91747,51814],{"class":152},[142,91749,51829],{"class":51329},[142,91751,51336],{"class":152},[142,91753,91754],{"class":144,"line":9873},[142,91755,2428],{"emptyLinePlaceholder":69},[142,91757,91758,91760,91762],{"class":144,"line":9879},[142,91759,51814],{"class":152},[142,91761,50664],{"class":51329},[142,91763,51336],{"class":152},[113,91765,91767],{"id":91766},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[133,91769,91771],{"className":53096,"code":91770,"language":53098,"meta":31,"style":31},"\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",[139,91772,91773,91781,91789,91794,91799,91804,91809,91813,91821],{"__ignoreMap":31},[142,91774,91775,91777,91779],{"class":144,"line":145},[142,91776,1063],{"class":152},[142,91778,51829],{"class":51329},[142,91780,51336],{"class":152},[142,91782,91783,91785,91787],{"class":144,"line":64},[142,91784,52173],{"class":152},[142,91786,51842],{"class":51329},[142,91788,51336],{"class":152},[142,91790,91791],{"class":144,"line":1208},[142,91792,91793],{"class":152},"    let timer = null\n",[142,91795,91796],{"class":144,"line":1223},[142,91797,91798],{"class":152},"    timer = setTimeout(() => {\n",[142,91800,91801],{"class":144,"line":1229},[142,91802,91803],{"class":152},"      clearTimeout(timer)\n",[142,91805,91806],{"class":144,"line":1243},[142,91807,91808],{"class":152},"      console.log(timer)\n",[142,91810,91811],{"class":144,"line":1249},[142,91812,60254],{"class":152},[142,91814,91815,91817,91819],{"class":144,"line":1340},[142,91816,52446],{"class":152},[142,91818,51842],{"class":51329},[142,91820,51336],{"class":152},[142,91822,91823,91825,91827],{"class":144,"line":1346},[142,91824,51814],{"class":152},[142,91826,51829],{"class":51329},[142,91828,51336],{"class":152},[14,91830,91831],{},"输出为1",[14,91833,91834],{},"在开启的定时器里边写清除定时器",[14,91836,91837],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[113,91839,91841],{"id":91840},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91843,91844],{},"页面打开，可以记录上一次的视频播放位置",[14,91846,91847],{},[29,91848],{"alt":31,"src":91849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91851,91852],{},[29,91853],{"alt":31,"src":91854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[133,91856,91858],{"className":50662,"code":91857,"language":50664,"meta":31,"style":31},"\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",[139,91859,91860,91870,91884,91888,91896,91910,91930,91950,91972,91985,91993,91999,92009,92019,92029,92033,92037,92044,92057,92069,92073,92077,92087,92099,92113,92117,92121,92128,92138,92151,92163,92173,92183,92199,92211,92215,92219,92227,92237,92249,92259,92269,92279,92283,92287,92297,92308,92312,92320,92328,92332,92340,92355,92370,92385,92406,92414,92422,92437,92459,92467,92482,92508,92534,92560,92568,92576,92595,92603,92608,92627,92632,92650,92655,92660,92668,92673,92687,92695,92700,92717,92721,92726,92748,92752,92760,92768,92772],{"__ignoreMap":31},[142,91861,91862,91864,91866,91868],{"class":144,"line":145},[142,91863,51326],{"class":152},[142,91865,51330],{"class":51329},[142,91867,51333],{"class":1991},[142,91869,51336],{"class":152},[142,91871,91872,91874,91876,91878,91880,91882],{"class":144,"line":64},[142,91873,1063],{"class":152},[142,91875,50664],{"class":51329},[142,91877,51345],{"class":1991},[142,91879,198],{"class":152},[142,91881,51350],{"class":257},[142,91883,51336],{"class":152},[142,91885,91886],{"class":144,"line":1208},[142,91887,2428],{"emptyLinePlaceholder":69},[142,91889,91890,91892,91894],{"class":144,"line":1223},[142,91891,1063],{"class":152},[142,91893,51363],{"class":51329},[142,91895,51336],{"class":152},[142,91897,91898,91900,91902,91904,91906,91908],{"class":144,"line":1229},[142,91899,52173],{"class":152},[142,91901,51373],{"class":51329},[142,91903,51376],{"class":1991},[142,91905,198],{"class":152},[142,91907,51381],{"class":257},[142,91909,59156],{"class":152},[142,91911,91912,91914,91916,91918,91920,91922,91924,91926,91928],{"class":144,"line":1243},[142,91913,52173],{"class":152},[142,91915,51373],{"class":51329},[142,91917,51392],{"class":1991},[142,91919,198],{"class":152},[142,91921,51397],{"class":257},[142,91923,51400],{"class":1991},[142,91925,198],{"class":152},[142,91927,51405],{"class":257},[142,91929,59156],{"class":152},[142,91931,91932,91934,91936,91938,91940,91942,91944,91946,91948],{"class":144,"line":1249},[142,91933,52173],{"class":152},[142,91935,51373],{"class":51329},[142,91937,14949],{"class":1991},[142,91939,198],{"class":152},[142,91941,51420],{"class":257},[142,91943,51400],{"class":1991},[142,91945,198],{"class":152},[142,91947,51427],{"class":257},[142,91949,59156],{"class":152},[142,91951,91952,91954,91956,91958,91960,91963,91965,91967,91970],{"class":144,"line":1340},[142,91953,52173],{"class":152},[142,91955,51373],{"class":51329},[142,91957,14949],{"class":1991},[142,91959,198],{"class":152},[142,91961,91962],{"class":257},"\"referrer\"",[142,91964,51400],{"class":1991},[142,91966,198],{"class":152},[142,91968,91969],{"class":257},"\"never\"",[142,91971,59156],{"class":152},[142,91973,91974,91976,91978,91981,91983],{"class":144,"line":1346},[142,91975,52173],{"class":152},[142,91977,51436],{"class":51329},[142,91979,91980],{"class":152},">综合案例\u003C\u002F",[142,91982,51436],{"class":51329},[142,91984,51336],{"class":152},[142,91986,91987,91989,91991],{"class":144,"line":1358},[142,91988,52173],{"class":152},[142,91990,5155],{"class":51329},[142,91992,51336],{"class":152},[142,91994,91995,91997],{"class":144,"line":1640},[142,91996,6432],{"class":51329},[142,91998,15601],{"class":152},[142,92000,92001,92003,92005,92007],{"class":144,"line":1645},[142,92002,54724],{"class":201},[142,92004,51466],{"class":152},[142,92006,344],{"class":201},[142,92008,1319],{"class":152},[142,92010,92011,92013,92015,92017],{"class":144,"line":1651},[142,92012,54735],{"class":201},[142,92014,51466],{"class":152},[142,92016,344],{"class":201},[142,92018,1319],{"class":152},[142,92020,92021,92023,92025,92027],{"class":144,"line":1656},[142,92022,72625],{"class":201},[142,92024,51466],{"class":152},[142,92026,60534],{"class":201},[142,92028,1319],{"class":152},[142,92030,92031],{"class":144,"line":1670},[142,92032,2215],{"class":152},[142,92034,92035],{"class":144,"line":1675},[142,92036,2428],{"emptyLinePlaceholder":69},[142,92038,92039,92042],{"class":144,"line":1681},[142,92040,92041],{"class":1991},"    .container",[142,92043,15601],{"class":152},[142,92045,92046,92048,92050,92053,92055],{"class":144,"line":1702},[142,92047,54800],{"class":201},[142,92049,51466],{"class":152},[142,92051,92052],{"class":201},"1200",[142,92054,51521],{"class":148},[142,92056,1319],{"class":152},[142,92058,92059,92061,92063,92065,92067],{"class":144,"line":1707},[142,92060,54735],{"class":201},[142,92062,51466],{"class":152},[142,92064,344],{"class":201},[142,92066,51585],{"class":201},[142,92068,1319],{"class":152},[142,92070,92071],{"class":144,"line":1721},[142,92072,2215],{"class":152},[142,92074,92075],{"class":144,"line":1726},[142,92076,2428],{"emptyLinePlaceholder":69},[142,92078,92079,92082,92085],{"class":144,"line":1755},[142,92080,92081],{"class":1991},"    .video",[142,92083,92084],{"class":51329}," video",[142,92086,15601],{"class":152},[142,92088,92089,92091,92093,92095,92097],{"class":144,"line":1760},[142,92090,54800],{"class":201},[142,92092,51466],{"class":152},[142,92094,464],{"class":201},[142,92096,481],{"class":148},[142,92098,1319],{"class":152},[142,92100,92101,92103,92105,92107,92109,92111],{"class":144,"line":1777},[142,92102,54724],{"class":201},[142,92104,51466],{"class":152},[142,92106,853],{"class":201},[142,92108,51521],{"class":148},[142,92110,4121],{"class":201},[142,92112,1319],{"class":152},[142,92114,92115],{"class":144,"line":1782},[142,92116,2215],{"class":152},[142,92118,92119],{"class":144,"line":1787},[142,92120,2428],{"emptyLinePlaceholder":69},[142,92122,92123,92126],{"class":144,"line":1792},[142,92124,92125],{"class":1991},"    .elevator",[142,92127,15601],{"class":152},[142,92129,92130,92132,92134,92136],{"class":144,"line":1806},[142,92131,54788],{"class":201},[142,92133,51466],{"class":152},[142,92135,86262],{"class":201},[142,92137,1319],{"class":152},[142,92139,92140,92142,92144,92147,92149],{"class":144,"line":1811},[142,92141,54976],{"class":201},[142,92143,51466],{"class":152},[142,92145,92146],{"class":201},"280",[142,92148,51521],{"class":148},[142,92150,1319],{"class":152},[142,92152,92153,92155,92157,92159,92161],{"class":144,"line":2605},[142,92154,86456],{"class":201},[142,92156,51466],{"class":152},[142,92158,853],{"class":201},[142,92160,51521],{"class":148},[142,92162,1319],{"class":152},[142,92164,92165,92167,92169,92171],{"class":144,"line":2619},[142,92166,86269],{"class":201},[142,92168,51466],{"class":152},[142,92170,86274],{"class":201},[142,92172,1319],{"class":152},[142,92174,92175,92177,92179,92181],{"class":144,"line":2627},[142,92176,61750],{"class":201},[142,92178,51466],{"class":152},[142,92180,60871],{"class":201},[142,92182,1319],{"class":152},[142,92184,92185,92187,92189,92191,92193,92195,92197],{"class":144,"line":2632},[142,92186,62006],{"class":201},[142,92188,51466],{"class":152},[142,92190,370],{"class":201},[142,92192,51521],{"class":148},[142,92194,51550],{"class":201},[142,92196,62273],{"class":201},[142,92198,1319],{"class":152},[142,92200,92201,92203,92205,92207,92209],{"class":144,"line":2638},[142,92202,54800],{"class":201},[142,92204,51466],{"class":152},[142,92206,1060],{"class":201},[142,92208,51521],{"class":148},[142,92210,1319],{"class":152},[142,92212,92213],{"class":144,"line":2644},[142,92214,2215],{"class":152},[142,92216,92217],{"class":144,"line":2649},[142,92218,2428],{"emptyLinePlaceholder":69},[142,92220,92221,92223,92225],{"class":144,"line":7977},[142,92222,92125],{"class":1991},[142,92224,1427],{"class":51329},[142,92226,15601],{"class":152},[142,92228,92229,92231,92233,92235],{"class":144,"line":8001},[142,92230,55038],{"class":201},[142,92232,51466],{"class":152},[142,92234,60898],{"class":201},[142,92236,1319],{"class":152},[142,92238,92239,92241,92243,92245,92247],{"class":144,"line":8006},[142,92240,54724],{"class":201},[142,92242,51466],{"class":152},[142,92244,599],{"class":201},[142,92246,51521],{"class":148},[142,92248,1319],{"class":152},[142,92250,92251,92253,92255,92257],{"class":144,"line":8012},[142,92252,63999],{"class":201},[142,92254,51466],{"class":152},[142,92256,54766],{"class":201},[142,92258,1319],{"class":152},[142,92260,92261,92263,92265,92267],{"class":144,"line":8039},[142,92262,57315],{"class":201},[142,92264,51466],{"class":152},[142,92266,51621],{"class":201},[142,92268,1319],{"class":152},[142,92270,92271,92273,92275,92277],{"class":144,"line":8044},[142,92272,57445],{"class":201},[142,92274,51466],{"class":152},[142,92276,62099],{"class":201},[142,92278,1319],{"class":152},[142,92280,92281],{"class":144,"line":8050},[142,92282,2215],{"class":152},[142,92284,92285],{"class":144,"line":8062},[142,92286,2428],{"emptyLinePlaceholder":69},[142,92288,92289,92291,92293,92295],{"class":144,"line":8074},[142,92290,92125],{"class":1991},[142,92292,1427],{"class":51329},[142,92294,64053],{"class":1991},[142,92296,15601],{"class":152},[142,92298,92299,92301,92303,92306],{"class":144,"line":8086},[142,92300,57445],{"class":201},[142,92302,51466],{"class":152},[142,92304,92305],{"class":201},"#1286ff",[142,92307,1319],{"class":152},[142,92309,92310],{"class":144,"line":9745},[142,92311,2215],{"class":152},[142,92313,92314,92316,92318],{"class":144,"line":9770},[142,92315,52446],{"class":152},[142,92317,5155],{"class":51329},[142,92319,51336],{"class":152},[142,92321,92322,92324,92326],{"class":144,"line":9793},[142,92323,51814],{"class":152},[142,92325,51363],{"class":51329},[142,92327,51336],{"class":152},[142,92329,92330],{"class":144,"line":9817},[142,92331,2428],{"emptyLinePlaceholder":69},[142,92333,92334,92336,92338],{"class":144,"line":9822},[142,92335,1063],{"class":152},[142,92337,51829],{"class":51329},[142,92339,51336],{"class":152},[142,92341,92342,92344,92346,92348,92350,92353],{"class":144,"line":9827},[142,92343,52173],{"class":152},[142,92345,51640],{"class":51329},[142,92347,53515],{"class":1991},[142,92349,198],{"class":152},[142,92351,92352],{"class":257},"\"container\"",[142,92354,51336],{"class":152},[142,92356,92357,92359,92361,92363,92365,92368],{"class":144,"line":9832},[142,92358,51370],{"class":152},[142,92360,51640],{"class":51329},[142,92362,53515],{"class":1991},[142,92364,198],{"class":152},[142,92366,92367],{"class":257},"\"header\"",[142,92369,51336],{"class":152},[142,92371,92372,92374,92376,92378,92380,92383],{"class":144,"line":9841},[142,92373,55263],{"class":152},[142,92375,391],{"class":51329},[142,92377,61086],{"class":1991},[142,92379,198],{"class":152},[142,92381,92382],{"class":257},"\"http:\u002F\u002Fpip.itcast.cn\"",[142,92384,51336],{"class":152},[142,92386,92387,92389,92391,92393,92395,92398,92400,92402,92404],{"class":144,"line":9846},[142,92388,55331],{"class":152},[142,92390,29],{"class":51329},[142,92392,55268],{"class":1991},[142,92394,198],{"class":152},[142,92396,92397],{"class":257},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[142,92399,55276],{"class":1991},[142,92401,198],{"class":152},[142,92403,7681],{"class":257},[142,92405,59156],{"class":152},[142,92407,92408,92410,92412],{"class":144,"line":9852},[142,92409,55436],{"class":152},[142,92411,391],{"class":51329},[142,92413,51336],{"class":152},[142,92415,92416,92418,92420],{"class":144,"line":9873},[142,92417,51805],{"class":152},[142,92419,51640],{"class":51329},[142,92421,51336],{"class":152},[142,92423,92424,92426,92428,92430,92432,92435],{"class":144,"line":9879},[142,92425,51370],{"class":152},[142,92427,51640],{"class":51329},[142,92429,53515],{"class":1991},[142,92431,198],{"class":152},[142,92433,92434],{"class":257},"\"video\"",[142,92436,51336],{"class":152},[142,92438,92439,92441,92443,92445,92447,92450,92453,92455,92457],{"class":144,"line":9893},[142,92440,55263],{"class":152},[142,92442,28212],{"class":51329},[142,92444,55268],{"class":1991},[142,92446,198],{"class":152},[142,92448,92449],{"class":257},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[142,92451,92452],{"class":1991}," controls",[142,92454,55343],{"class":152},[142,92456,28212],{"class":51329},[142,92458,51336],{"class":152},[142,92460,92461,92463,92465],{"class":144,"line":9899},[142,92462,51805],{"class":152},[142,92464,51640],{"class":51329},[142,92466,51336],{"class":152},[142,92468,92469,92471,92473,92475,92477,92480],{"class":144,"line":9926},[142,92470,51370],{"class":152},[142,92472,51640],{"class":51329},[142,92474,53515],{"class":1991},[142,92476,198],{"class":152},[142,92478,92479],{"class":257},"\"elevator\"",[142,92481,51336],{"class":152},[142,92483,92484,92486,92488,92490,92492,92494,92497,92499,92501,92504,92506],{"class":144,"line":9935},[142,92485,55263],{"class":152},[142,92487,391],{"class":51329},[142,92489,61086],{"class":1991},[142,92491,198],{"class":152},[142,92493,64265],{"class":257},[142,92495,92496],{"class":1991}," data-ref",[142,92498,198],{"class":152},[142,92500,92434],{"class":257},[142,92502,92503],{"class":152},">视频介绍\u003C\u002F",[142,92505,391],{"class":51329},[142,92507,51336],{"class":152},[142,92509,92510,92512,92514,92516,92518,92520,92522,92524,92527,92530,92532],{"class":144,"line":9941},[142,92511,55263],{"class":152},[142,92513,391],{"class":51329},[142,92515,61086],{"class":1991},[142,92517,198],{"class":152},[142,92519,64265],{"class":257},[142,92521,92496],{"class":1991},[142,92523,198],{"class":152},[142,92525,92526],{"class":257},"\"intro\"",[142,92528,92529],{"class":152},">课程简介\u003C\u002F",[142,92531,391],{"class":51329},[142,92533,51336],{"class":152},[142,92535,92536,92538,92540,92542,92544,92546,92548,92550,92553,92556,92558],{"class":144,"line":9949},[142,92537,55263],{"class":152},[142,92539,391],{"class":51329},[142,92541,61086],{"class":1991},[142,92543,198],{"class":152},[142,92545,64265],{"class":257},[142,92547,92496],{"class":1991},[142,92549,198],{"class":152},[142,92551,92552],{"class":257},"\"outline\"",[142,92554,92555],{"class":152},">评论列表\u003C\u002F",[142,92557,391],{"class":51329},[142,92559,51336],{"class":152},[142,92561,92562,92564,92566],{"class":144,"line":9954},[142,92563,51805],{"class":152},[142,92565,51640],{"class":51329},[142,92567,51336],{"class":152},[142,92569,92570,92572,92574],{"class":144,"line":16633},[142,92571,52446],{"class":152},[142,92573,51640],{"class":51329},[142,92575,51336],{"class":152},[142,92577,92578,92580,92582,92584,92586,92589,92591,92593],{"class":144,"line":16639},[142,92579,52173],{"class":152},[142,92581,51842],{"class":51329},[142,92583,55268],{"class":1991},[142,92585,198],{"class":152},[142,92587,92588],{"class":257},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[142,92590,55343],{"class":152},[142,92592,51842],{"class":51329},[142,92594,51336],{"class":152},[142,92596,92597,92599,92601],{"class":144,"line":16662},[142,92598,52173],{"class":152},[142,92600,51842],{"class":51329},[142,92602,51336],{"class":152},[142,92604,92605],{"class":144,"line":16668},[142,92606,92607],{"class":211},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[142,92609,92610,92612,92614,92616,92618,92620,92622,92625],{"class":144,"line":16691},[142,92611,11250],{"class":148},[142,92613,92084],{"class":201},[142,92615,13593],{"class":148},[142,92617,54425],{"class":152},[142,92619,54428],{"class":1991},[142,92621,153],{"class":152},[142,92623,92624],{"class":257},"'video'",[142,92626,159],{"class":152},[142,92628,92629],{"class":144,"line":16705},[142,92630,92631],{"class":211},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[142,92633,92634,92637,92639,92641,92643,92646,92648],{"class":144,"line":16725},[142,92635,92636],{"class":152},"    video.ontimeupdate ",[142,92638,198],{"class":148},[142,92640,88384],{"class":152},[142,92642,91202],{"class":1991},[142,92644,92645],{"class":152},"(() ",[142,92647,84751],{"class":148},[142,92649,15601],{"class":152},[142,92651,92652],{"class":144,"line":16731},[142,92653,92654],{"class":211},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[142,92656,92657],{"class":144,"line":16742},[142,92658,92659],{"class":211},"      \u002F\u002F 控制台输出当前的时间\n",[142,92661,92662,92665],{"class":144,"line":16765},[142,92663,92664],{"class":211},"      \u002F\u002F console.log(video.currentTime)",[142,92666,92667],{"class":211},"  \u002F\u002F获得当前的视频时间\n",[142,92669,92670],{"class":144,"line":16787},[142,92671,92672],{"class":211},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[142,92674,92675,92677,92679,92681,92684],{"class":144,"line":16792},[142,92676,74712],{"class":152},[142,92678,71683],{"class":1991},[142,92680,153],{"class":152},[142,92682,92683],{"class":257},"'currentTime'",[142,92685,92686],{"class":152},", video.currentTime)\n",[142,92688,92689,92691,92693],{"class":144,"line":16798},[142,92690,54564],{"class":152},[142,92692,6439],{"class":201},[142,92694,159],{"class":152},[142,92696,92697],{"class":144,"line":16812},[142,92698,92699],{"class":211},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[142,92701,92702,92705,92708,92710,92713,92715],{"class":144,"line":16825},[142,92703,92704],{"class":152},"    video.",[142,92706,92707],{"class":1991},"onloadeddata",[142,92709,13593],{"class":148},[142,92711,92712],{"class":152}," () ",[142,92714,84751],{"class":148},[142,92716,15601],{"class":152},[142,92718,92719],{"class":144,"line":16830},[142,92720,60041],{"class":211},[142,92722,92723],{"class":144,"line":16844},[142,92724,92725],{"class":211},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[142,92727,92728,92731,92733,92736,92738,92740,92742,92744,92746],{"class":144,"line":16849},[142,92729,92730],{"class":152},"      video.currentTime ",[142,92732,198],{"class":148},[142,92734,92735],{"class":152}," localStorage.",[142,92737,71714],{"class":1991},[142,92739,153],{"class":152},[142,92741,92683],{"class":257},[142,92743,13743],{"class":152},[142,92745,71386],{"class":148},[142,92747,47362],{"class":201},[142,92749,92750],{"class":144,"line":16855},[142,92751,2215],{"class":152},[142,92753,92754,92756,92758],{"class":144,"line":16860},[142,92755,52446],{"class":152},[142,92757,51842],{"class":51329},[142,92759,51336],{"class":152},[142,92761,92762,92764,92766],{"class":144,"line":16874},[142,92763,51814],{"class":152},[142,92765,51829],{"class":51329},[142,92767,51336],{"class":152},[142,92769,92770],{"class":144,"line":16879},[142,92771,2428],{"emptyLinePlaceholder":69},[142,92773,92774,92776,92778],{"class":144,"line":16884},[142,92775,51814],{"class":152},[142,92777,50664],{"class":51329},[142,92779,51336],{"class":152},[5155,92781,92782],{},"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":31,"searchDepth":64,"depth":64,"links":92784},[92785,92790,92794,92795,92796,92801,92806,92807,92808,92809,92816,92821,92822,92832,92836,92837,92841],{"id":76720,"depth":64,"text":76721,"children":92786},[92787,92788,92789],{"id":76724,"depth":1208,"text":76725},{"id":76749,"depth":1208,"text":76750},{"id":76761,"depth":1208,"text":76762},{"id":76773,"depth":64,"text":76774,"children":92791},[92792,92793],{"id":76777,"depth":1208,"text":76778},{"id":76792,"depth":1208,"text":76793},{"id":76844,"depth":64,"text":76845},{"id":76888,"depth":64,"text":76889},{"id":76905,"depth":64,"text":76906,"children":92797},[92798,92799,92800],{"id":76909,"depth":1208,"text":76910},{"id":76922,"depth":1208,"text":76923},{"id":77027,"depth":1208,"text":77028},{"id":77316,"depth":64,"text":77317,"children":92802},[92803,92804,92805],{"id":77320,"depth":1208,"text":77321},{"id":77763,"depth":1208,"text":77764},{"id":78174,"depth":1208,"text":78175},{"id":78237,"depth":64,"text":78238},{"id":78316,"depth":64,"text":78317},{"id":78409,"depth":64,"text":78410},{"id":80254,"depth":64,"text":80255,"children":92810},[92811,92812,92813,92814,92815],{"id":80258,"depth":1208,"text":80259},{"id":80270,"depth":1208,"text":80271},{"id":80489,"depth":1208,"text":80490},{"id":80507,"depth":1208,"text":80508},{"id":80567,"depth":1208,"text":80568},{"id":84835,"depth":64,"text":84836,"children":92817},[92818,92819,92820],{"id":84839,"depth":1208,"text":84840},{"id":84857,"depth":1208,"text":84858},{"id":84883,"depth":1208,"text":84884},{"id":84892,"depth":64,"text":84893},{"id":84914,"depth":64,"text":84915,"children":92823},[92824,92825,92826,92827,92828,92829,92830,92831],{"id":84918,"depth":1208,"text":84919},{"id":85179,"depth":1208,"text":85180},{"id":85365,"depth":1208,"text":85366},{"id":85732,"depth":1208,"text":85733},{"id":85848,"depth":1208,"text":85849},{"id":85884,"depth":1208,"text":85885},{"id":85931,"depth":1208,"text":85932},{"id":85965,"depth":1208,"text":85966},{"id":87328,"depth":64,"text":87329,"children":92833},[92834,92835],{"id":87332,"depth":1208,"text":87333},{"id":87369,"depth":1208,"text":87370},{"id":88724,"depth":64,"text":88725},{"id":89095,"depth":64,"text":89096,"children":92838},[92839,92840],{"id":89099,"depth":1208,"text":89100},{"id":89133,"depth":1208,"text":89134},{"id":89862,"depth":64,"text":89863,"children":92842},[92843,92844,92845,92846],{"id":89866,"depth":1208,"text":89867},{"id":90824,"depth":1208,"text":90825},{"id":91766,"depth":1208,"text":91767},{"id":91840,"depth":1208,"text":91841},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76709,"description":66},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92853,"title":92854,"body":92855,"description":92866,"extension":67,"meta":92867,"navigation":69,"path":92869,"seo":92870,"stem":92871,"__hash__":92872},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92856,"toc":92864},[92857],[14,92858,92859,92860],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[391,92861,92862],{"href":92862,"rel":92863},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23894],{"title":31,"searchDepth":64,"depth":64,"links":92865},[],"三件套第三套学习",{"category":92868},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92854,"description":92866},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92874,"title":92875,"body":92876,"description":66,"extension":67,"meta":92981,"navigation":69,"path":92982,"seo":92983,"stem":92984,"__hash__":92985},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92877,"toc":92976},[92878,92885,92888,92891,92894,92898,92907,92910,92913,92917,92926,92929,92933,92936,92956,92959,92973],[14,92879,92880],{},[391,92881,92884],{"href":92882,"rel":92883},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23894],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92886,92875],{"id":92887},"_1安装",[14,92889,92890],{},"numpy是科学计算基础库,底层是C语言",[14,92892,92893],{},"三种方式：",[84,92895,92897],{"id":92896},"_11-通过pip安装","1.1 通过pip安装",[133,92899,92901],{"className":30407,"code":92900,"language":30409,"meta":31,"style":31},"pip install numpy\n",[139,92902,92903],{"__ignoreMap":31},[142,92904,92905],{"class":144,"line":145},[142,92906,92900],{"class":152},[14,92908,92909],{},"首选方式，自动处理依赖项",[14,92911,92912],{},"在提示系统命令符中使用cmd",[84,92914,92916],{"id":92915},"_12-通过anaconda安装","1.2 通过Anaconda安装",[133,92918,92920],{"className":30407,"code":92919,"language":30409,"meta":31,"style":31},"conda install numpy\n",[139,92921,92922],{"__ignoreMap":31},[142,92923,92924],{"class":144,"line":145},[142,92925,92919],{"class":152},[14,92927,92928],{},"自动解决环境依赖",[84,92930,92932],{"id":92931},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92934,92935],{},"对于Debian\u002FUbuntu",[133,92937,92939],{"className":30407,"code":92938,"language":30409,"meta":31,"style":31},"sudo apt-get install python3-numpy\n",[139,92940,92941],{"__ignoreMap":31},[142,92942,92943,92946,92948,92951,92953],{"class":144,"line":145},[142,92944,92945],{"class":152},"sudo apt",[142,92947,685],{"class":148},[142,92949,92950],{"class":152},"get install python3",[142,92952,685],{"class":148},[142,92954,92955],{"class":152},"numpy\n",[14,92957,92958],{},"对于Fedora:",[133,92960,92962],{"className":30407,"code":92961,"language":30409,"meta":31,"style":31},"sudo dnf install python3-numpy\n",[139,92963,92964],{"__ignoreMap":31},[142,92965,92966,92969,92971],{"class":144,"line":145},[142,92967,92968],{"class":152},"sudo dnf install python3",[142,92970,685],{"class":148},[142,92972,92955],{"class":152},[5155,92974,92975],{},"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":31,"searchDepth":64,"depth":64,"links":92977},[92978,92979,92980],{"id":92896,"depth":64,"text":92897},{"id":92915,"depth":64,"text":92916},{"id":92931,"depth":64,"text":92932},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92875,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92987,"title":92988,"body":92989,"description":66,"extension":67,"meta":93102,"navigation":69,"path":93103,"seo":93104,"stem":93105,"__hash__":93106},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92990,"toc":93100},[92991,92994,92997,93000,93003,93006,93009,93012,93015,93018,93094,93097],[10,92992,92988],{"id":92993},"_10算数函数",[14,92995,92996],{},"加减乘除运算跟python基础语法没区别",[14,92998,92999],{},"除了python那种方法外还可以使用函数",[14,93001,93002],{},"加：np.add(a,b)",[14,93004,93005],{},"减：np.subtract(a,b)",[14,93007,93008],{},"乘：np.multiply(a,b)",[14,93010,93011],{},"除：np.divide(a,b) == a\u002Fb",[14,93013,93014],{},"取余：np.mod(a,b) == a%b",[14,93016,93017],{},"必须会的用法：",[133,93019,93021],{"className":30407,"code":93020,"language":30409,"meta":31,"style":31},"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",[139,93022,93023,93045,93066,93076,93089],{"__ignoreMap":31},[142,93024,93025,93027,93029,93032,93034,93037,93039,93041,93043],{"class":144,"line":145},[142,93026,391],{"class":152},[142,93028,198],{"class":148},[142,93030,93031],{"class":152},"np.arange(",[142,93033,573],{"class":201},[142,93035,93036],{"class":152},").reshape(",[142,93038,224],{"class":201},[142,93040,531],{"class":152},[142,93042,224],{"class":201},[142,93044,159],{"class":152},[142,93046,93047,93049,93051,93054,93056,93058,93060,93062,93064],{"class":144,"line":64},[142,93048,416],{"class":152},[142,93050,198],{"class":148},[142,93052,93053],{"class":152},"np.array([",[142,93055,599],{"class":201},[142,93057,531],{"class":152},[142,93059,599],{"class":201},[142,93061,531],{"class":152},[142,93063,599],{"class":201},[142,93065,4685],{"class":152},[142,93067,93068,93071,93073],{"class":144,"line":1208},[142,93069,93070],{"class":152},"result",[142,93072,198],{"class":148},[142,93074,93075],{"class":152},"np.empty_like(a)\n",[142,93077,93078,93081,93084,93086],{"class":144,"line":1223},[142,93079,93080],{"class":152},"np.add(a,b,",[142,93082,93083],{"class":5245},"out",[142,93085,198],{"class":148},[142,93087,93088],{"class":152},"result)\n",[142,93090,93091],{"class":144,"line":1229},[142,93092,93093],{"class":152},"result\n",[14,93095,93096],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5155,93098,93099],{},"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":31,"searchDepth":64,"depth":64,"links":93101},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92988,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93108,"title":93109,"body":93110,"description":66,"extension":67,"meta":93872,"navigation":69,"path":93873,"seo":93874,"stem":93875,"__hash__":93876},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93111,"toc":93859},[93112,93115,93118,93121,93125,93164,93168,93212,93272,93276,93279,93318,93321,93366,93370,93406,93410,93479,93483,93547,93551,93554,93557,93560,93563,93599,93603,93643,93647,93719,93722,93726,93789,93793,93856],[10,93113,93109],{"id":93114},"_11统计函数",[14,93116,93117],{},"sum max min mean",[14,93119,93120],{},"这些有axis参数，可以指定方向",[84,93122,93124],{"id":93123},"_111-sum求和函数","11.1 sum()求和函数",[133,93126,93128],{"className":30407,"code":93127,"language":30409,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[139,93129,93130,93135,93156],{"__ignoreMap":31},[142,93131,93132],{"class":144,"line":145},[142,93133,93134],{"class":211},"#创建一维数组\n",[142,93136,93137,93139,93141,93144,93146,93148,93150,93152,93154],{"class":144,"line":64},[142,93138,391],{"class":152},[142,93140,198],{"class":148},[142,93142,93143],{"class":152},"np.random.randint(",[142,93145,370],{"class":201},[142,93147,531],{"class":152},[142,93149,464],{"class":201},[142,93151,531],{"class":152},[142,93153,853],{"class":201},[142,93155,159],{"class":152},[142,93157,93158,93161],{"class":144,"line":1208},[142,93159,93160],{"class":152},"np.sum(a)",[142,93162,93163],{"class":211},"#求和\n",[84,93165,93167],{"id":93166},"_112-max求最大值函数","11.2 max()求最大值函数",[133,93169,93171],{"className":30407,"code":93170,"language":30409,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[139,93172,93173,93177,93197,93202,93207],{"__ignoreMap":31},[142,93174,93175],{"class":144,"line":145},[142,93176,93134],{"class":211},[142,93178,93179,93181,93183,93185,93187,93189,93191,93193,93195],{"class":144,"line":64},[142,93180,391],{"class":152},[142,93182,198],{"class":148},[142,93184,93143],{"class":152},[142,93186,370],{"class":201},[142,93188,531],{"class":152},[142,93190,464],{"class":201},[142,93192,531],{"class":152},[142,93194,853],{"class":201},[142,93196,159],{"class":152},[142,93198,93199],{"class":144,"line":1208},[142,93200,93201],{"class":152},"np.max(a)\n",[142,93203,93204],{"class":144,"line":1223},[142,93205,93206],{"class":211},"#最大索引(求最大元素的索引)arg\n",[142,93208,93209],{"class":144,"line":1229},[142,93210,93211],{"class":152},"np.argmax(a)\n",[133,93213,93215],{"className":30407,"code":93214,"language":30409,"meta":31,"style":31},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[139,93216,93217,93238,93258,93262],{"__ignoreMap":31},[142,93218,93219,93221,93223,93226,93228,93230,93232,93234,93236],{"class":144,"line":145},[142,93220,10948],{"class":152},[142,93222,198],{"class":148},[142,93224,93225],{"class":152}," np.array([",[142,93227,370],{"class":201},[142,93229,12464],{"class":152},[142,93231,472],{"class":201},[142,93233,12464],{"class":152},[142,93235,224],{"class":201},[142,93237,4685],{"class":152},[142,93239,93240,93242,93244,93246,93248,93250,93252,93254,93256],{"class":144,"line":64},[142,93241,10974],{"class":152},[142,93243,198],{"class":148},[142,93245,93225],{"class":152},[142,93247,224],{"class":201},[142,93249,12464],{"class":152},[142,93251,230],{"class":201},[142,93253,12464],{"class":152},[142,93255,446],{"class":201},[142,93257,4685],{"class":152},[142,93259,93260],{"class":144,"line":1208},[142,93261,2428],{"emptyLinePlaceholder":69},[142,93263,93264,93266,93269],{"class":144,"line":1223},[142,93265,30444],{"class":201},[142,93267,93268],{"class":152},"(np.maximum(a, b))   ",[142,93270,93271],{"class":211},"# [3 5 4]，每个位置上取较大值\n",[84,93273,93275],{"id":93274},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93277,93278],{},"①一维数组：",[133,93280,93282],{"className":30407,"code":93281,"language":30409,"meta":31,"style":31},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[139,93283,93284,93288,93308,93313],{"__ignoreMap":31},[142,93285,93286],{"class":144,"line":145},[142,93287,93134],{"class":211},[142,93289,93290,93292,93294,93296,93298,93300,93302,93304,93306],{"class":144,"line":64},[142,93291,391],{"class":152},[142,93293,198],{"class":148},[142,93295,93143],{"class":152},[142,93297,370],{"class":201},[142,93299,531],{"class":152},[142,93301,464],{"class":201},[142,93303,531],{"class":152},[142,93305,853],{"class":201},[142,93307,159],{"class":152},[142,93309,93310],{"class":144,"line":1208},[142,93311,93312],{"class":211},"#求平均值\n",[142,93314,93315],{"class":144,"line":1223},[142,93316,93317],{"class":152},"np.mean(a)\n",[14,93319,93320],{},"②二维数组",[133,93322,93324],{"className":30407,"code":93323,"language":30409,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[139,93325,93326,93331,93356,93361],{"__ignoreMap":31},[142,93327,93328],{"class":144,"line":145},[142,93329,93330],{"class":211},"#二维数组\n",[142,93332,93333,93336,93338,93340,93342,93344,93346,93348,93350,93352,93354],{"class":144,"line":64},[142,93334,93335],{"class":152},"aa",[142,93337,198],{"class":148},[142,93339,93031],{"class":152},[142,93341,370],{"class":201},[142,93343,531],{"class":152},[142,93345,676],{"class":201},[142,93347,93036],{"class":152},[142,93349,224],{"class":201},[142,93351,531],{"class":152},[142,93353,446],{"class":201},[142,93355,159],{"class":152},[142,93357,93358],{"class":144,"line":1208},[142,93359,93360],{"class":211},"#对数组中的所有数求平均\n",[142,93362,93363],{"class":144,"line":1223},[142,93364,93365],{"class":152},"np.mean(aa)\n",[84,93367,93369],{"id":93368},"_114-median求中位数函数","11.4 median()求中位数函数",[133,93371,93373],{"className":30407,"code":93372,"language":30409,"meta":31,"style":31},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[139,93374,93375,93380,93396,93401],{"__ignoreMap":31},[142,93376,93377],{"class":144,"line":145},[142,93378,93379],{"class":211},"#求中位数\n",[142,93381,93382,93384,93386,93388,93390,93392,93394],{"class":144,"line":64},[142,93383,416],{"class":152},[142,93385,198],{"class":148},[142,93387,93031],{"class":152},[142,93389,370],{"class":201},[142,93391,531],{"class":152},[142,93393,599],{"class":201},[142,93395,159],{"class":152},[142,93397,93398],{"class":144,"line":1208},[142,93399,93400],{"class":152},"np.median(b)\n",[142,93402,93403],{"class":144,"line":1223},[142,93404,93405],{"class":211},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[84,93407,93409],{"id":93408},"_115-power求幂运算函数","11.5 power()求幂运算函数",[133,93411,93413],{"className":30407,"code":93412,"language":30409,"meta":31,"style":31},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[139,93414,93415,93431,93436,93441,93450,93455,93464],{"__ignoreMap":31},[142,93416,93417,93419,93421,93423,93425,93427,93429],{"class":144,"line":145},[142,93418,416],{"class":152},[142,93420,198],{"class":148},[142,93422,93031],{"class":152},[142,93424,370],{"class":201},[142,93426,531],{"class":152},[142,93428,599],{"class":201},[142,93430,159],{"class":152},[142,93432,93433],{"class":144,"line":64},[142,93434,93435],{"class":211},"#幂运算\n",[142,93437,93438],{"class":144,"line":1208},[142,93439,93440],{"class":211},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[142,93442,93443,93446,93448],{"class":144,"line":1223},[142,93444,93445],{"class":152},"np.power(b,",[142,93447,230],{"class":201},[142,93449,159],{"class":152},[142,93451,93452],{"class":144,"line":1229},[142,93453,93454],{"class":211},"#或者以下代码，将数据存储起来\n",[142,93456,93457,93459,93461],{"class":144,"line":1243},[142,93458,998],{"class":152},[142,93460,198],{"class":148},[142,93462,93463],{"class":152},"np.empty_like(b)\n",[142,93465,93466,93468,93470,93472,93474,93476],{"class":144,"line":1249},[142,93467,93445],{"class":152},[142,93469,230],{"class":201},[142,93471,531],{"class":152},[142,93473,93083],{"class":5245},[142,93475,198],{"class":148},[142,93477,93478],{"class":152},"y)\n",[84,93480,93482],{"id":93481},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[133,93484,93486],{"className":30407,"code":93485,"language":30409,"meta":31,"style":31},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[139,93487,93488,93504,93509,93514,93518,93536],{"__ignoreMap":31},[142,93489,93490,93492,93494,93496,93498,93500,93502],{"class":144,"line":145},[142,93491,416],{"class":152},[142,93493,198],{"class":148},[142,93495,93031],{"class":152},[142,93497,370],{"class":201},[142,93499,531],{"class":152},[142,93501,599],{"class":201},[142,93503,159],{"class":152},[142,93505,93506],{"class":144,"line":64},[142,93507,93508],{"class":211},"#开方\n",[142,93510,93511],{"class":144,"line":1208},[142,93512,93513],{"class":152},"np.sqrt(b)\n",[142,93515,93516],{"class":144,"line":1223},[142,93517,93454],{"class":211},[142,93519,93520,93522,93524,93527,93530,93532,93534],{"class":144,"line":1229},[142,93521,998],{"class":152},[142,93523,198],{"class":148},[142,93525,93526],{"class":152},"np.empty_like(b,",[142,93528,93529],{"class":5245},"dtype",[142,93531,198],{"class":148},[142,93533,192],{"class":201},[142,93535,159],{"class":152},[142,93537,93538,93541,93543,93545],{"class":144,"line":1243},[142,93539,93540],{"class":152},"np.sqrt(b,",[142,93542,93083],{"class":5245},[142,93544,198],{"class":148},[142,93546,93478],{"class":152},[84,93548,93550],{"id":93549},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93552,93553],{},"对数组中的元素累计求和，可指定轴",[14,93555,93556],{},"#累计求和的意思是：",[14,93558,93559],{},"a = np.array([1, 2, 3, 4])",[14,93561,93562],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[133,93564,93566],{"className":30407,"code":93565,"language":30409,"meta":31,"style":31},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[139,93567,93568,93584,93589,93594],{"__ignoreMap":31},[142,93569,93570,93572,93574,93576,93578,93580,93582],{"class":144,"line":145},[142,93571,416],{"class":152},[142,93573,198],{"class":148},[142,93575,93031],{"class":152},[142,93577,370],{"class":201},[142,93579,531],{"class":152},[142,93581,599],{"class":201},[142,93583,159],{"class":152},[142,93585,93586],{"class":144,"line":64},[142,93587,93588],{"class":152},"np.cumsum(b)\n",[142,93590,93591],{"class":144,"line":1208},[142,93592,93593],{"class":211},"#结果：\n",[142,93595,93596],{"class":144,"line":1223},[142,93597,93598],{"class":211},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[84,93600,93602],{"id":93601},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[133,93604,93606],{"className":30407,"code":93605,"language":30409,"meta":31,"style":31},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[139,93607,93608,93624,93629,93634,93638],{"__ignoreMap":31},[142,93609,93610,93612,93614,93616,93618,93620,93622],{"class":144,"line":145},[142,93611,416],{"class":152},[142,93613,198],{"class":148},[142,93615,93031],{"class":152},[142,93617,370],{"class":201},[142,93619,531],{"class":152},[142,93621,599],{"class":201},[142,93623,159],{"class":152},[142,93625,93626],{"class":144,"line":64},[142,93627,93628],{"class":211},"#对数组中的元素累计求积，可指定轴\n",[142,93630,93631],{"class":144,"line":1208},[142,93632,93633],{"class":152},"np.cumprod(b)\n",[142,93635,93636],{"class":144,"line":1223},[142,93637,93593],{"class":211},[142,93639,93640],{"class":144,"line":1229},[142,93641,93642],{"class":211},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[84,93644,93646],{"id":93645},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[133,93648,93650],{"className":30407,"code":93649,"language":30409,"meta":31,"style":31},"#删除数组中的重复数据，并对数据进行排序\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",[139,93651,93652,93657,93705,93710,93714],{"__ignoreMap":31},[142,93653,93654],{"class":144,"line":145},[142,93655,93656],{"class":211},"#删除数组中的重复数据，并对数据进行排序\n",[142,93658,93659,93661,93663,93665,93667,93669,93671,93673,93675,93677,93679,93681,93683,93685,93687,93689,93691,93693,93695,93697,93699,93701,93703],{"class":144,"line":64},[142,93660,391],{"class":152},[142,93662,198],{"class":148},[142,93664,93053],{"class":152},[142,93666,370],{"class":201},[142,93668,531],{"class":152},[142,93670,230],{"class":201},[142,93672,531],{"class":152},[142,93674,224],{"class":201},[142,93676,531],{"class":152},[142,93678,651],{"class":201},[142,93680,531],{"class":152},[142,93682,224],{"class":201},[142,93684,531],{"class":152},[142,93686,599],{"class":201},[142,93688,531],{"class":152},[142,93690,350],{"class":201},[142,93692,531],{"class":152},[142,93694,344],{"class":201},[142,93696,531],{"class":152},[142,93698,928],{"class":201},[142,93700,531],{"class":152},[142,93702,446],{"class":201},[142,93704,4685],{"class":152},[142,93706,93707],{"class":144,"line":1208},[142,93708,93709],{"class":152},"np.unique(a)\n",[142,93711,93712],{"class":144,"line":1223},[142,93713,93593],{"class":211},[142,93715,93716],{"class":144,"line":1229},[142,93717,93718],{"class":211},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93720,93721],{},"升序形式排序",[84,93723,93725],{"id":93724},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[133,93727,93729],{"className":30407,"code":93728,"language":30409,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[139,93730,93731,93779,93784],{"__ignoreMap":31},[142,93732,93733,93735,93737,93739,93741,93743,93745,93747,93749,93751,93753,93755,93757,93759,93761,93763,93765,93767,93769,93771,93773,93775,93777],{"class":144,"line":145},[142,93734,391],{"class":152},[142,93736,198],{"class":148},[142,93738,93053],{"class":152},[142,93740,370],{"class":201},[142,93742,531],{"class":152},[142,93744,230],{"class":201},[142,93746,531],{"class":152},[142,93748,224],{"class":201},[142,93750,531],{"class":152},[142,93752,651],{"class":201},[142,93754,531],{"class":152},[142,93756,224],{"class":201},[142,93758,531],{"class":152},[142,93760,599],{"class":201},[142,93762,531],{"class":152},[142,93764,350],{"class":201},[142,93766,531],{"class":152},[142,93768,344],{"class":201},[142,93770,531],{"class":152},[142,93772,928],{"class":201},[142,93774,531],{"class":152},[142,93776,446],{"class":201},[142,93778,4685],{"class":152},[142,93780,93781],{"class":144,"line":64},[142,93782,93783],{"class":211},"#返回数组中非零元素的索引\n",[142,93785,93786],{"class":144,"line":1208},[142,93787,93788],{"class":152},"np.nonzero(a)\n",[84,93790,93792],{"id":93791},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[133,93794,93796],{"className":30407,"code":93795,"language":30409,"meta":31,"style":31},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[139,93797,93798,93846,93851],{"__ignoreMap":31},[142,93799,93800,93802,93804,93806,93808,93810,93812,93814,93816,93818,93820,93822,93824,93826,93828,93830,93832,93834,93836,93838,93840,93842,93844],{"class":144,"line":145},[142,93801,391],{"class":152},[142,93803,198],{"class":148},[142,93805,93053],{"class":152},[142,93807,370],{"class":201},[142,93809,531],{"class":152},[142,93811,230],{"class":201},[142,93813,531],{"class":152},[142,93815,224],{"class":201},[142,93817,531],{"class":152},[142,93819,651],{"class":201},[142,93821,531],{"class":152},[142,93823,224],{"class":201},[142,93825,531],{"class":152},[142,93827,599],{"class":201},[142,93829,531],{"class":152},[142,93831,350],{"class":201},[142,93833,531],{"class":152},[142,93835,344],{"class":201},[142,93837,531],{"class":152},[142,93839,928],{"class":201},[142,93841,531],{"class":152},[142,93843,446],{"class":201},[142,93845,4685],{"class":152},[142,93847,93848],{"class":144,"line":64},[142,93849,93850],{"class":211},"#计算一组数中最大值与最小值的差，可指定轴\n",[142,93852,93853],{"class":144,"line":1208},[142,93854,93855],{"class":152},"np.ptp(a)\n",[5155,93857,93858],{},"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":31,"searchDepth":64,"depth":64,"links":93860},[93861,93862,93863,93864,93865,93866,93867,93868,93869,93870,93871],{"id":93123,"depth":64,"text":93124},{"id":93166,"depth":64,"text":93167},{"id":93274,"depth":64,"text":93275},{"id":93368,"depth":64,"text":93369},{"id":93408,"depth":64,"text":93409},{"id":93481,"depth":64,"text":93482},{"id":93549,"depth":64,"text":93550},{"id":93601,"depth":64,"text":93602},{"id":93645,"depth":64,"text":93646},{"id":93724,"depth":64,"text":93725},{"id":93791,"depth":64,"text":93792},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93109,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93878,"title":93879,"body":93880,"description":66,"extension":67,"meta":94535,"navigation":69,"path":94536,"seo":94537,"stem":94538,"__hash__":94539},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93881,"toc":94523},[93882,93885,93889,93892,94108,94112,94115,94324,94328,94394,94399,94403,94406,94409,94447,94451,94454,94459,94463,94466,94469,94474,94478,94481,94485,94488,94491,94496,94500,94503,94506,94511,94515,94520],[10,93883,93879],{"id":93884},"_12其他常用函数",[84,93886,93888],{"id":93887},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93890,93891],{},"将数组的数据按照行列复制扩展",[133,93893,93895],{"className":30407,"code":93894,"language":30409,"meta":31,"style":31},"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",[139,93896,93897,93913,93922,93926,93931,93936,93949,93953,93958,93963,93968,93972,93977,94001,94013,94017,94021,94026,94031,94036,94041,94045,94058,94062,94066,94071,94076,94081,94086,94091,94095,94099,94104],{"__ignoreMap":31},[142,93898,93899,93901,93903,93905,93907,93909,93911],{"class":144,"line":145},[142,93900,391],{"class":152},[142,93902,198],{"class":148},[142,93904,93031],{"class":152},[142,93906,370],{"class":201},[142,93908,531],{"class":152},[142,93910,472],{"class":201},[142,93912,159],{"class":152},[142,93914,93915,93918,93920],{"class":144,"line":64},[142,93916,93917],{"class":152},"np.tile(a,",[142,93919,230],{"class":201},[142,93921,159],{"class":152},[142,93923,93924],{"class":144,"line":1208},[142,93925,93593],{"class":211},[142,93927,93928],{"class":144,"line":1223},[142,93929,93930],{"class":211},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[142,93932,93933],{"class":144,"line":1229},[142,93934,93935],{"class":211},"#行复制两次，列复制三次\n",[142,93937,93938,93941,93943,93945,93947],{"class":144,"line":1243},[142,93939,93940],{"class":152},"np.tile(a,(",[142,93942,230],{"class":201},[142,93944,531],{"class":152},[142,93946,224],{"class":201},[142,93948,30526],{"class":152},[142,93950,93951],{"class":144,"line":1249},[142,93952,93593],{"class":211},[142,93954,93955],{"class":144,"line":1340},[142,93956,93957],{"class":257},"'''\n",[142,93959,93960],{"class":144,"line":1346},[142,93961,93962],{"class":257},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[142,93964,93965],{"class":144,"line":1358},[142,93966,93967],{"class":257},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[142,93969,93970],{"class":144,"line":1640},[142,93971,93957],{"class":257},[142,93973,93974],{"class":144,"line":1645},[142,93975,93976],{"class":211},"#创建二维数组\n",[142,93978,93979,93981,93983,93985,93987,93989,93991,93993,93995,93997,93999],{"class":144,"line":1651},[142,93980,93335],{"class":152},[142,93982,198],{"class":148},[142,93984,93031],{"class":152},[142,93986,370],{"class":201},[142,93988,531],{"class":152},[142,93990,676],{"class":201},[142,93992,93036],{"class":152},[142,93994,446],{"class":201},[142,93996,531],{"class":152},[142,93998,224],{"class":201},[142,94000,159],{"class":152},[142,94002,94003,94006,94008,94010],{"class":144,"line":1656},[142,94004,94005],{"class":152},"np.tile(aa,",[142,94007,230],{"class":201},[142,94009,582],{"class":152},[142,94011,94012],{"class":211},"#一个数的时候就是行\n",[142,94014,94015],{"class":144,"line":1670},[142,94016,93593],{"class":211},[142,94018,94019],{"class":144,"line":1675},[142,94020,93957],{"class":257},[142,94022,94023],{"class":144,"line":1681},[142,94024,94025],{"class":257},"array([[ 1,  2,  3,  1,  2,  3],\n",[142,94027,94028],{"class":144,"line":1702},[142,94029,94030],{"class":257},"       [ 4,  5,  6,  4,  5,  6],\n",[142,94032,94033],{"class":144,"line":1707},[142,94034,94035],{"class":257},"       [ 7,  8,  9,  7,  8,  9],\n",[142,94037,94038],{"class":144,"line":1721},[142,94039,94040],{"class":257},"       [10, 11, 12, 10, 11, 12]])\n",[142,94042,94043],{"class":144,"line":1726},[142,94044,93957],{"class":257},[142,94046,94047,94050,94052,94054,94056],{"class":144,"line":1755},[142,94048,94049],{"class":152},"np.tile(aa,(",[142,94051,230],{"class":201},[142,94053,531],{"class":152},[142,94055,224],{"class":201},[142,94057,30526],{"class":152},[142,94059,94060],{"class":144,"line":1760},[142,94061,93593],{"class":211},[142,94063,94064],{"class":144,"line":1777},[142,94065,93957],{"class":257},[142,94067,94068],{"class":144,"line":1782},[142,94069,94070],{"class":257},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[142,94072,94073],{"class":144,"line":1787},[142,94074,94075],{"class":257},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[142,94077,94078],{"class":144,"line":1792},[142,94079,94080],{"class":257},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[142,94082,94083],{"class":144,"line":1806},[142,94084,94085],{"class":257},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[142,94087,94088],{"class":144,"line":1811},[142,94089,94090],{"class":257},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[142,94092,94093],{"class":144,"line":2605},[142,94094,94075],{"class":257},[142,94096,94097],{"class":144,"line":2619},[142,94098,94080],{"class":257},[142,94100,94101],{"class":144,"line":2627},[142,94102,94103],{"class":257},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[142,94105,94106],{"class":144,"line":2632},[142,94107,93957],{"class":257},[84,94109,94111],{"id":94110},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94113,94114],{},"repeat()将数组中的每个元素重复若干次",[133,94116,94118],{"className":30407,"code":94117,"language":30409,"meta":31,"style":31},"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",[139,94119,94120,94136,94145,94149,94154,94178,94183,94192,94196,94201,94205,94210,94226,94230,94234,94239,94244,94249,94253,94258,94262,94267,94272,94276,94292,94296,94300,94305,94310,94315,94320],{"__ignoreMap":31},[142,94121,94122,94124,94126,94128,94130,94132,94134],{"class":144,"line":145},[142,94123,391],{"class":152},[142,94125,198],{"class":148},[142,94127,93031],{"class":152},[142,94129,370],{"class":201},[142,94131,531],{"class":152},[142,94133,472],{"class":201},[142,94135,159],{"class":152},[142,94137,94138,94141,94143],{"class":144,"line":64},[142,94139,94140],{"class":152},"np.repeat(a,",[142,94142,224],{"class":201},[142,94144,159],{"class":152},[142,94146,94147],{"class":144,"line":1208},[142,94148,93593],{"class":211},[142,94150,94151],{"class":144,"line":1223},[142,94152,94153],{"class":211},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[142,94155,94156,94158,94160,94162,94164,94166,94168,94170,94172,94174,94176],{"class":144,"line":1229},[142,94157,93335],{"class":152},[142,94159,198],{"class":148},[142,94161,93031],{"class":152},[142,94163,370],{"class":201},[142,94165,531],{"class":152},[142,94167,676],{"class":201},[142,94169,93036],{"class":152},[142,94171,446],{"class":201},[142,94173,531],{"class":152},[142,94175,224],{"class":201},[142,94177,159],{"class":152},[142,94179,94180],{"class":144,"line":1243},[142,94181,94182],{"class":211},"#这个重复之后二维变成一维\n",[142,94184,94185,94188,94190],{"class":144,"line":1249},[142,94186,94187],{"class":152},"np.repeat(aa,",[142,94189,230],{"class":201},[142,94191,159],{"class":152},[142,94193,94194],{"class":144,"line":1340},[142,94195,93957],{"class":257},[142,94197,94198],{"class":144,"line":1346},[142,94199,94200],{"class":257},"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",[142,94202,94203],{"class":144,"line":1358},[142,94204,93957],{"class":257},[142,94206,94207],{"class":144,"line":1640},[142,94208,94209],{"class":211},"#指定axis\n",[142,94211,94212,94214,94216,94218,94220,94222,94224],{"class":144,"line":1645},[142,94213,94187],{"class":152},[142,94215,230],{"class":201},[142,94217,531],{"class":152},[142,94219,47543],{"class":5245},[142,94221,198],{"class":148},[142,94223,344],{"class":201},[142,94225,159],{"class":152},[142,94227,94228],{"class":144,"line":1651},[142,94229,93593],{"class":211},[142,94231,94232],{"class":144,"line":1656},[142,94233,93957],{"class":257},[142,94235,94236],{"class":144,"line":1670},[142,94237,94238],{"class":257},"array([[ 1,  2,  3],\n",[142,94240,94241],{"class":144,"line":1675},[142,94242,94243],{"class":257},"       [ 1,  2,  3],\n",[142,94245,94246],{"class":144,"line":1681},[142,94247,94248],{"class":257},"       [ 4,  5,  6],\n",[142,94250,94251],{"class":144,"line":1702},[142,94252,94248],{"class":257},[142,94254,94255],{"class":144,"line":1707},[142,94256,94257],{"class":257},"       [ 7,  8,  9],\n",[142,94259,94260],{"class":144,"line":1721},[142,94261,94257],{"class":257},[142,94263,94264],{"class":144,"line":1726},[142,94265,94266],{"class":257},"       [10, 11, 12],\n",[142,94268,94269],{"class":144,"line":1755},[142,94270,94271],{"class":257},"       [10, 11, 12]])\n",[142,94273,94274],{"class":144,"line":1760},[142,94275,93957],{"class":257},[142,94277,94278,94280,94282,94284,94286,94288,94290],{"class":144,"line":1777},[142,94279,94187],{"class":152},[142,94281,230],{"class":201},[142,94283,531],{"class":152},[142,94285,47543],{"class":5245},[142,94287,198],{"class":148},[142,94289,370],{"class":201},[142,94291,159],{"class":152},[142,94293,94294],{"class":144,"line":1782},[142,94295,93593],{"class":211},[142,94297,94298],{"class":144,"line":1787},[142,94299,93957],{"class":257},[142,94301,94302],{"class":144,"line":1792},[142,94303,94304],{"class":257},"array([[ 1,  1,  2,  2,  3,  3],\n",[142,94306,94307],{"class":144,"line":1806},[142,94308,94309],{"class":257},"       [ 4,  4,  5,  5,  6,  6],\n",[142,94311,94312],{"class":144,"line":1811},[142,94313,94314],{"class":257},"       [ 7,  7,  8,  8,  9,  9],\n",[142,94316,94317],{"class":144,"line":2605},[142,94318,94319],{"class":257},"       [10, 10, 11, 11, 12, 12]])\n",[142,94321,94322],{"class":144,"line":2619},[142,94323,93957],{"class":257},[84,94325,94327],{"id":94326},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[133,94329,94331],{"className":30407,"code":94330,"language":30409,"meta":31,"style":31},"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",[139,94332,94333,94349,94354,94366,94370,94375,94385,94389],{"__ignoreMap":31},[142,94334,94335,94337,94339,94341,94343,94345,94347],{"class":144,"line":145},[142,94336,391],{"class":152},[142,94338,198],{"class":148},[142,94340,93031],{"class":152},[142,94342,370],{"class":201},[142,94344,531],{"class":152},[142,94346,472],{"class":201},[142,94348,159],{"class":152},[142,94350,94351],{"class":144,"line":64},[142,94352,94353],{"class":211},"#array([，2，3，4])\n",[142,94355,94356,94359,94361,94363],{"class":144,"line":1208},[142,94357,94358],{"class":152},"np.roll(a,",[142,94360,230],{"class":201},[142,94362,582],{"class":152},[142,94364,94365],{"class":211},"#传正数向后调多少位，传负数向前调多少位\n",[142,94367,94368],{"class":144,"line":1223},[142,94369,93593],{"class":211},[142,94371,94372],{"class":144,"line":1229},[142,94373,94374],{"class":211},"#array([3, 4, 1, 2])\n",[142,94376,94377,94379,94381,94383],{"class":144,"line":1243},[142,94378,94358],{"class":152},[142,94380,685],{"class":148},[142,94382,370],{"class":201},[142,94384,159],{"class":152},[142,94386,94387],{"class":144,"line":1249},[142,94388,93593],{"class":211},[142,94390,94391],{"class":144,"line":1340},[142,94392,94393],{"class":211},"#array([2, 3, 4, 1])\n",[14,94395,94396],{},[29,94397],{"alt":31,"src":94398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[84,94400,94402],{"id":94401},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94404,94405],{},"resize()重新调整数组的大小",[14,94407,94408],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[133,94410,94412],{"className":30407,"code":94411,"language":30409,"meta":31,"style":31},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[139,94413,94414,94419,94432],{"__ignoreMap":31},[142,94415,94416],{"class":144,"line":145},[142,94417,94418],{"class":211},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[142,94420,94421,94424,94426,94428,94430],{"class":144,"line":64},[142,94422,94423],{"class":152},"np.resize(aa,(",[142,94425,230],{"class":201},[142,94427,531],{"class":152},[142,94429,497],{"class":201},[142,94431,30526],{"class":152},[142,94433,94434,94436,94438,94440,94442,94444],{"class":144,"line":1208},[142,94435,94423],{"class":152},[142,94437,230],{"class":201},[142,94439,531],{"class":152},[142,94441,573],{"class":201},[142,94443,82800],{"class":152},[142,94445,94446],{"class":211},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[84,94448,94450],{"id":94449},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94452,94453],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94455,94456],{},[29,94457],{"alt":31,"src":94458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[84,94460,94462],{"id":94461},"_126-保存加载文件","12.6 保存加载文件",[14,94464,94465],{},"savetxt():将数据保存到txt文件中",[14,94467,94468],{},"loadtxt():从文件加载数据",[14,94470,94471],{},[29,94472],{"alt":31,"src":94473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[84,94475,94477],{"id":94476},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94479,94480],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[84,94482,94484],{"id":94483},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94486,94487],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94489,94490],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94492,94493],{},[29,94494],{"alt":31,"src":94495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[84,94497,94499],{"id":94498},"_129-where语句","12.9 where语句",[14,94501,94502],{},"np.where(条件,x,y)",[14,94504,94505],{},"如果条件为True,对应值为x,否则对应值为y",[14,94507,94508],{},[29,94509],{"alt":31,"src":94510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[84,94512,94514],{"id":94513},"_1210-dot矩阵","12.10 dot()矩阵",[14,94516,94517],{},[29,94518],{"alt":31,"src":94519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5155,94521,94522],{},"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":31,"searchDepth":64,"depth":64,"links":94524},[94525,94526,94527,94528,94529,94530,94531,94532,94533,94534],{"id":93887,"depth":64,"text":93888},{"id":94110,"depth":64,"text":94111},{"id":94326,"depth":64,"text":94327},{"id":94401,"depth":64,"text":94402},{"id":94449,"depth":64,"text":94450},{"id":94461,"depth":64,"text":94462},{"id":94476,"depth":64,"text":94477},{"id":94483,"depth":64,"text":94484},{"id":94498,"depth":64,"text":94499},{"id":94513,"depth":64,"text":94514},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93879,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94541,"title":94542,"body":94543,"description":66,"extension":67,"meta":94896,"navigation":69,"path":94897,"seo":94898,"stem":94899,"__hash__":94900},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94544,"toc":94894},[94545,94548,94551,94554,94557,94560,94625,94627,94891],[10,94546,94542],{"id":94547},"_13数组排序",[14,94549,94550],{},"排序主要用到的方法是np.sort和np.argsort",[14,94552,94553],{},"其中np.sort()对数组直接排序",[14,94555,94556],{},"而np.argsort()是返回排序后的原始索引",[14,94558,94559],{},"①一维数组",[133,94561,94563],{"className":30407,"code":94562,"language":30409,"meta":31,"style":31},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[139,94564,94565,94569,94609,94617],{"__ignoreMap":31},[142,94566,94567],{"class":144,"line":145},[142,94568,93134],{"class":211},[142,94570,94571,94573,94575,94577,94579,94581,94583,94585,94587,94589,94591,94593,94595,94597,94599,94601,94603,94605,94607],{"class":144,"line":64},[142,94572,391],{"class":152},[142,94574,198],{"class":148},[142,94576,93053],{"class":152},[142,94578,224],{"class":201},[142,94580,531],{"class":152},[142,94582,651],{"class":201},[142,94584,531],{"class":152},[142,94586,548],{"class":201},[142,94588,531],{"class":152},[142,94590,928],{"class":201},[142,94592,531],{"class":152},[142,94594,432],{"class":201},[142,94596,531],{"class":152},[142,94598,1046],{"class":201},[142,94600,531],{"class":152},[142,94602,497],{"class":201},[142,94604,531],{"class":152},[142,94606,599],{"class":201},[142,94608,4685],{"class":152},[142,94610,94611,94614],{"class":144,"line":1208},[142,94612,94613],{"class":152},"np.sort(a)",[142,94615,94616],{"class":211},"#升序排序\n",[142,94618,94619,94622],{"class":144,"line":1223},[142,94620,94621],{"class":152},"np.argsort(a)",[142,94623,94624],{"class":211},"#按照元素大小来索引排序\n",[14,94626,93320],{},[133,94628,94630],{"className":30407,"code":94629,"language":30409,"meta":31,"style":31},"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",[139,94631,94632,94644,94670,94675,94679,94684,94689,94694,94699,94703,94711,94715,94720,94725,94730,94735,94739,94744,94757,94761,94766,94771,94776,94781,94785,94790,94802,94806,94810,94814,94818,94822,94826,94831,94846,94851,94860,94865,94869,94873,94878,94882,94887],{"__ignoreMap":31},[142,94633,94634,94637,94639,94641],{"class":144,"line":145},[142,94635,94636],{"class":152},"np.random.seed(",[142,94638,344],{"class":201},[142,94640,582],{"class":152},[142,94642,94643],{"class":211},"#保证每次值一样\n",[142,94645,94646,94648,94650,94652,94654,94656,94658,94660,94662,94664,94666,94668],{"class":144,"line":64},[142,94647,93335],{"class":152},[142,94649,198],{"class":148},[142,94651,93143],{"class":152},[142,94653,464],{"class":201},[142,94655,531],{"class":152},[142,94657,31525],{"class":5245},[142,94659,198],{"class":148},[142,94661,153],{"class":152},[142,94663,446],{"class":201},[142,94665,531],{"class":152},[142,94667,497],{"class":201},[142,94669,30526],{"class":152},[142,94671,94672],{"class":144,"line":1208},[142,94673,94674],{"class":211},"#原数组：\n",[142,94676,94677],{"class":144,"line":1223},[142,94678,93957],{"class":257},[142,94680,94681],{"class":144,"line":1229},[142,94682,94683],{"class":257},"array([[44, 47, 64, 67, 67,  9],\n",[142,94685,94686],{"class":144,"line":1243},[142,94687,94688],{"class":257},"       [83, 21, 36, 87, 70, 88],\n",[142,94690,94691],{"class":144,"line":1249},[142,94692,94693],{"class":257},"       [88, 12, 58, 65, 39, 87],\n",[142,94695,94696],{"class":144,"line":1340},[142,94697,94698],{"class":257},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[142,94700,94701],{"class":144,"line":1346},[142,94702,93957],{"class":257},[142,94704,94705,94708],{"class":144,"line":1358},[142,94706,94707],{"class":152},"np.sort(aa)",[142,94709,94710],{"class":211},"#每行进行了排序\n",[142,94712,94713],{"class":144,"line":1640},[142,94714,93957],{"class":257},[142,94716,94717],{"class":144,"line":1645},[142,94718,94719],{"class":257},"array([[ 9, 44, 47, 64, 67, 67],\n",[142,94721,94722],{"class":144,"line":1651},[142,94723,94724],{"class":257},"       [21, 36, 70, 83, 87, 88],\n",[142,94726,94727],{"class":144,"line":1656},[142,94728,94729],{"class":257},"       [12, 39, 58, 65, 87, 88],\n",[142,94731,94732],{"class":144,"line":1670},[142,94733,94734],{"class":257},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[142,94736,94737],{"class":144,"line":1675},[142,94738,93957],{"class":257},[142,94740,94741],{"class":144,"line":1681},[142,94742,94743],{"class":211},"#axis=0时\n",[142,94745,94746,94749,94751,94753,94755],{"class":144,"line":1702},[142,94747,94748],{"class":152},"np.sort(aa,",[142,94750,47543],{"class":5245},[142,94752,198],{"class":148},[142,94754,344],{"class":201},[142,94756,159],{"class":152},[142,94758,94759],{"class":144,"line":1707},[142,94760,93957],{"class":257},[142,94762,94763],{"class":144,"line":1721},[142,94764,94765],{"class":257},"array([[44, 12, 36, 37, 25,  9],\n",[142,94767,94768],{"class":144,"line":1726},[142,94769,94770],{"class":257},"       [46, 21, 58, 65, 39, 77],\n",[142,94772,94773],{"class":144,"line":1755},[142,94774,94775],{"class":257},"       [83, 47, 64, 67, 67, 87],\n",[142,94777,94778],{"class":144,"line":1760},[142,94779,94780],{"class":257},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[142,94782,94783],{"class":144,"line":1777},[142,94784,93957],{"class":257},[142,94786,94787],{"class":144,"line":1782},[142,94788,94789],{"class":211},"#axis=1时,为默认值\n",[142,94791,94792,94794,94796,94798,94800],{"class":144,"line":1787},[142,94793,94748],{"class":152},[142,94795,47543],{"class":5245},[142,94797,198],{"class":148},[142,94799,370],{"class":201},[142,94801,159],{"class":152},[142,94803,94804],{"class":144,"line":1792},[142,94805,93957],{"class":257},[142,94807,94808],{"class":144,"line":1806},[142,94809,94719],{"class":257},[142,94811,94812],{"class":144,"line":1811},[142,94813,94724],{"class":257},[142,94815,94816],{"class":144,"line":2605},[142,94817,94729],{"class":257},[142,94819,94820],{"class":144,"line":2619},[142,94821,94734],{"class":257},[142,94823,94824],{"class":144,"line":2627},[142,94825,93957],{"class":257},[142,94827,94828],{"class":144,"line":2632},[142,94829,94830],{"class":211},"#按最后一列排序\n",[142,94832,94833,94835,94837,94840,94842,94844],{"class":144,"line":2638},[142,94834,416],{"class":152},[142,94836,198],{"class":148},[142,94838,94839],{"class":152},"aa[:,",[142,94841,685],{"class":148},[142,94843,370],{"class":201},[142,94845,33275],{"class":152},[142,94847,94848],{"class":144,"line":2644},[142,94849,94850],{"class":211},"#获取最后一列排好序的索引\n",[142,94852,94853,94855,94857],{"class":144,"line":2649},[142,94854,74087],{"class":152},[142,94856,198],{"class":148},[142,94858,94859],{"class":152},"np.argsort(b)\n",[142,94861,94862],{"class":144,"line":7977},[142,94863,94864],{"class":152},"aa[index]\n",[142,94866,94867],{"class":144,"line":8001},[142,94868,93957],{"class":257},[142,94870,94871],{"class":144,"line":8006},[142,94872,94683],{"class":257},[142,94874,94875],{"class":144,"line":8012},[142,94876,94877],{"class":257},"       [46, 88, 81, 37, 25, 77],\n",[142,94879,94880],{"class":144,"line":8039},[142,94881,94693],{"class":257},[142,94883,94884],{"class":144,"line":8044},[142,94885,94886],{"class":257},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[142,94888,94889],{"class":144,"line":8050},[142,94890,93957],{"class":257},[5155,94892,94893],{},"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":31,"searchDepth":64,"depth":64,"links":94895},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94542,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94902,"title":94903,"body":94904,"description":66,"extension":67,"meta":94934,"navigation":69,"path":94935,"seo":94936,"stem":94937,"__hash__":94938},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94905,"toc":94932},[94906,94909,94912,94915,94918,94921,94924,94927],[10,94907,94903],{"id":94908},"_14广播机制",[14,94910,94911],{},"广播的规则：",[14,94913,94914],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94916,94917],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94919,94920],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94922,94923],{},"3.如果没有维度形状为1，则会引发异常",[14,94925,94926],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94928,94929],{},[29,94930],{"alt":31,"src":94931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":31,"searchDepth":64,"depth":64,"links":94933},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94903,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94940,"title":94941,"body":94942,"description":66,"extension":67,"meta":95040,"navigation":69,"path":95041,"seo":95042,"stem":95043,"__hash__":95044},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94943,"toc":95038},[94944,94947,94950,95035],[10,94945,94941],{"id":94946},"_15比较掩码",[14,94948,94949],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[133,94951,94953],{"className":30407,"code":94952,"language":30409,"meta":31,"style":31},"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",[139,94954,94955,95001,95012,95026,95030],{"__ignoreMap":31},[142,94956,94957,94959,94961,94964,94966,94968,94970,94972,94974,94976,94978,94980,94982,94984,94986,94988,94990,94992,94994,94996,94998],{"class":144,"line":145},[142,94958,391],{"class":152},[142,94960,198],{"class":148},[142,94962,94963],{"class":152},"np.array([[",[142,94965,370],{"class":201},[142,94967,531],{"class":152},[142,94969,230],{"class":201},[142,94971,531],{"class":152},[142,94973,224],{"class":201},[142,94975,48059],{"class":152},[142,94977,625],{"class":201},[142,94979,531],{"class":152},[142,94981,651],{"class":201},[142,94983,531],{"class":152},[142,94985,676],{"class":201},[142,94987,48059],{"class":152},[142,94989,878],{"class":201},[142,94991,531],{"class":152},[142,94993,903],{"class":201},[142,94995,531],{"class":152},[142,94997,928],{"class":201},[142,94999,95000],{"class":152},"]])\n",[142,95002,95003,95005,95007,95009],{"class":144,"line":64},[142,95004,391],{"class":152},[142,95006,1063],{"class":148},[142,95008,853],{"class":201},[142,95010,95011],{"class":211},"#结果是一个由True,False组成的数组\n",[142,95013,95014,95017,95019,95021,95023],{"class":144,"line":1208},[142,95015,95016],{"class":152},"a[a",[142,95018,1063],{"class":148},[142,95020,853],{"class":201},[142,95022,1093],{"class":152},[142,95024,95025],{"class":211},"#小于20的元素会存到这个数组中\n",[142,95027,95028],{"class":144,"line":1223},[142,95029,93593],{"class":211},[142,95031,95032],{"class":144,"line":1229},[142,95033,95034],{"class":211},"#array([ 1,  2,  3, 11, 12, 13])\n",[5155,95036,95037],{},"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":31,"searchDepth":64,"depth":64,"links":95039},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94941,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95046,"title":95047,"body":95048,"description":66,"extension":67,"meta":95140,"navigation":69,"path":95141,"seo":95142,"stem":95143,"__hash__":95144},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95049,"toc":95138},[95050,95053,95056,95059,95062,95065,95130,95135],[10,95051,95047],{"id":95052},"_16魔法命令time",[14,95054,95055],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95057,95058],{},"%:行模式",[14,95060,95061],{},"%%:单元格模式",[14,95063,95064],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[133,95066,95068],{"className":30407,"code":95067,"language":30409,"meta":31,"style":31},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[139,95069,95070,95075,95082,95087,95096,95109,95113,95121],{"__ignoreMap":31},[142,95071,95072],{"class":144,"line":145},[142,95073,95074],{"class":211},"#程序执行时间\n",[142,95076,95077,95079],{"class":144,"line":64},[142,95078,30421],{"class":148},[142,95080,95081],{"class":152}," time \n",[142,95083,95084],{"class":144,"line":1208},[142,95085,95086],{"class":211},"#获取时间\n",[142,95088,95089,95092,95094],{"class":144,"line":1223},[142,95090,95091],{"class":152},"start",[142,95093,198],{"class":148},[142,95095,32447],{"class":152},[142,95097,95098,95101,95104,95106],{"class":144,"line":1229},[142,95099,95100],{"class":152},"time.sleep(",[142,95102,95103],{"class":201},"0.4",[142,95105,582],{"class":152},[142,95107,95108],{"class":211},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[142,95110,95111],{"class":144,"line":1243},[142,95112,95086],{"class":211},[142,95114,95115,95117,95119],{"class":144,"line":1249},[142,95116,45830],{"class":152},[142,95118,198],{"class":148},[142,95120,32447],{"class":152},[142,95122,95123,95125,95127],{"class":144,"line":1340},[142,95124,45830],{"class":152},[142,95126,685],{"class":148},[142,95128,95129],{"class":152},"start\n",[14,95131,95132],{},[29,95133],{"alt":31,"src":95134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5155,95136,95137],{},"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":31,"searchDepth":64,"depth":64,"links":95139},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95047,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95146,"title":95147,"body":95148,"description":66,"extension":67,"meta":95183,"navigation":69,"path":95184,"seo":95185,"stem":95186,"__hash__":95187},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95149,"toc":95181},[95150,95153,95156,95159,95162,95165,95168,95171,95176],[10,95151,95147],{"id":95152},"_17魔法命令timeit",[14,95154,95155],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95157,95158],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95160,95161],{},"单元格模式：",[14,95163,95164],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95166,95167],{},"初始化语句执行次数由轮数来决定",[14,95169,95170],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95172,95173],{},[29,95174],{"alt":31,"src":95175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95177,95178],{},[29,95179],{"alt":31,"src":95180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":31,"searchDepth":64,"depth":64,"links":95182},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95147,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95189,"title":95190,"body":95191,"description":66,"extension":67,"meta":95209,"navigation":69,"path":95210,"seo":95211,"stem":95212,"__hash__":95213},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95192,"toc":95207},[95193,95196,95199,95202],[10,95194,95190],{"id":95195},"_18魔法命令writefile和run",[14,95197,95198],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95200,95201],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95203,95204],{},[29,95205],{"alt":31,"src":95206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":31,"searchDepth":64,"depth":64,"links":95208},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95190,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":4,"title":5,"body":95215,"description":66,"extension":67,"meta":95253,"navigation":69,"path":70,"seo":95254,"stem":72,"__hash__":73},{"type":7,"value":95216,"toc":95251},[95217,95219,95221,95223,95225,95227,95231,95233,95235,95237,95239,95241,95243,95245,95247,95249],[10,95218,5],{"id":12},[14,95220,16],{},[14,95222,19],{},[14,95224,22],{},[14,95226,25],{},[14,95228,95229],{},[29,95230],{"alt":31,"src":32},[14,95232,35],{},[14,95234,38],{},[14,95236,41],{},[14,95238,44],{},[14,95240,47],{},[14,95242,50],{},[14,95244,53],{},[14,95246,56],{},[14,95248,59],{},[14,95250,62],{},{"title":31,"searchDepth":64,"depth":64,"links":95252},[],{},{"title":5,"description":66},{"id":95256,"title":95257,"body":95258,"description":66,"extension":67,"meta":96904,"navigation":69,"path":96905,"seo":96906,"stem":96907,"__hash__":96908},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95259,"toc":96874},[95260,95263,95267,95271,95332,95335,95340,95344,95349,95354,95359,95364,95367,95372,95376,95380,95413,95416,95419,95422,95474,95477,95513,95516,95558,95562,95583,95585,95622,95624,95629,95631,95636,95640,95643,95671,95675,95679,95732,95736,95828,95832,95836,95839,95844,95848,95873,95878,95882,95885,95888,95891,95894,95897,95900,95903,95915,95919,95923,95926,95958,95961,95984,95987,96013,96016,96042,96045,96079,96082,96144,96148,96151,96155,96158,96184,96187,96190,96195,96198,96267,96269,96274,96335,96338,96349,96355,96360,96364,96367,96380,96384,96399,96401,96424,96426,96452,96455,96458,96461,96509,96511,96516,96520,96524,96551,96555,96582,96585,96590,96595,96685,96689,96747,96752,96755,96758,96800,96804,96860,96865,96868,96871],[10,95261,95257],{"id":95262},"_2创建数组",[84,95264,95266],{"id":95265},"_21-array函数创建数组","2.1 array()函数创建数组",[113,95268,95270],{"id":95269},"_221-函数语句","2.2.1 函数语句",[133,95272,95274],{"className":30407,"code":95273,"language":30409,"meta":31,"style":31},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[139,95275,95276],{"__ignoreMap":31},[142,95277,95278,95281,95284,95286,95288,95290,95292,95294,95297,95299,95302,95304,95307,95309,95311,95313,95316,95318,95321,95323,95326,95328,95330],{"class":144,"line":145},[142,95279,95280],{"class":152},"numpy.array(",[142,95282,95283],{"class":201},"object",[142,95285,12464],{"class":152},[142,95287,93529],{"class":5245},[142,95289,13593],{"class":148},[142,95291,38962],{"class":201},[142,95293,12464],{"class":152},[142,95295,95296],{"class":5245},"copy",[142,95298,13593],{"class":148},[142,95300,95301],{"class":201}," True",[142,95303,12464],{"class":152},[142,95305,95306],{"class":5245},"order",[142,95308,13593],{"class":148},[142,95310,38962],{"class":201},[142,95312,12464],{"class":152},[142,95314,95315],{"class":5245},"subok",[142,95317,13593],{"class":148},[142,95319,95320],{"class":201}," False",[142,95322,12464],{"class":152},[142,95324,95325],{"class":5245},"ndmin",[142,95327,13593],{"class":148},[142,95329,4121],{"class":201},[142,95331,159],{"class":152},[14,95333,95334],{},"参数：",[14,95336,95337],{},[29,95338],{"alt":31,"src":95339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[113,95341,95343],{"id":95342},"_222-实例","2.2.2 实例",[14,95345,95346],{},[29,95347],{"alt":31,"src":95348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95350,95351],{},[29,95352],{"alt":31,"src":95353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95355,95356],{},[29,95357],{"alt":31,"src":95358},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95360,95361],{},[29,95362],{"alt":31,"src":95363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95365,95366],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95368,95369],{},[29,95370],{"alt":31,"src":95371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[84,95373,95375],{"id":95374},"_22-随机数创建数组","2.2 随机数创建数组",[113,95377,95379],{"id":95378},"_221-random语句","2.2.1 random语句",[133,95381,95383],{"className":30407,"code":95382,"language":30409,"meta":31,"style":31},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[139,95384,95385,95390,95395,95403,95408],{"__ignoreMap":31},[142,95386,95387],{"class":144,"line":145},[142,95388,95389],{"class":211},"#random.random()\n",[142,95391,95392],{"class":144,"line":64},[142,95393,95394],{"class":211},"#确定随机种子,就是每次运行结果是相同的\n",[142,95396,95397,95399,95401],{"class":144,"line":1208},[142,95398,94636],{"class":152},[142,95400,344],{"class":201},[142,95402,159],{"class":152},[142,95404,95405],{"class":144,"line":1223},[142,95406,95407],{"class":152},"np.random.random()\n",[142,95409,95410],{"class":144,"line":1229},[142,95411,95412],{"class":211},"#生成一个随机的数目\n",[14,95414,95415],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95417,95418],{},"可以指定数组形状 size",[14,95420,95421],{},"①生成一维数组",[133,95423,95425],{"className":30407,"code":95424,"language":30409,"meta":31,"style":31},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[139,95426,95427,95432,95445,95450,95466],{"__ignoreMap":31},[142,95428,95429],{"class":144,"line":145},[142,95430,95431],{"class":211},"#random.random(size())\n",[142,95433,95434,95437,95439,95441,95443],{"class":144,"line":64},[142,95435,95436],{"class":152},"np.random.random(",[142,95438,31525],{"class":5245},[142,95440,198],{"class":148},[142,95442,472],{"class":201},[142,95444,159],{"class":152},[142,95446,95447],{"class":144,"line":1208},[142,95448,95449],{"class":211},"#生成一位的五个元素\n",[142,95451,95452,95454,95456,95458,95460,95462,95464],{"class":144,"line":1223},[142,95453,391],{"class":152},[142,95455,198],{"class":148},[142,95457,95436],{"class":152},[142,95459,31525],{"class":5245},[142,95461,198],{"class":148},[142,95463,446],{"class":201},[142,95465,159],{"class":152},[142,95467,95468,95471],{"class":144,"line":1229},[142,95469,95470],{"class":152},"a.shape ",[142,95472,95473],{"class":211},"#输出数组形状\n",[14,95475,95476],{},"②生成二维数组",[133,95478,95480],{"className":30407,"code":95479,"language":30409,"meta":31,"style":31},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[139,95481,95482,95486,95508],{"__ignoreMap":31},[142,95483,95484],{"class":144,"line":145},[142,95485,93330],{"class":211},[142,95487,95488,95490,95492,95494,95496,95498,95500,95502,95504,95506],{"class":144,"line":64},[142,95489,93335],{"class":152},[142,95491,198],{"class":148},[142,95493,95436],{"class":152},[142,95495,31525],{"class":5245},[142,95497,198],{"class":148},[142,95499,153],{"class":152},[142,95501,446],{"class":201},[142,95503,531],{"class":152},[142,95505,472],{"class":201},[142,95507,30526],{"class":152},[142,95509,95510],{"class":144,"line":1208},[142,95511,95512],{"class":211},"#生成四行五列的数组\n",[14,95514,95515],{},"③生成三维数组",[133,95517,95519],{"className":30407,"code":95518,"language":30409,"meta":31,"style":31},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[139,95520,95521,95526,95553],{"__ignoreMap":31},[142,95522,95523],{"class":144,"line":145},[142,95524,95525],{"class":211},"#三维数组\n",[142,95527,95528,95531,95533,95535,95537,95539,95541,95543,95545,95547,95549,95551],{"class":144,"line":64},[142,95529,95530],{"class":152},"aaa",[142,95532,198],{"class":148},[142,95534,95436],{"class":152},[142,95536,31525],{"class":5245},[142,95538,198],{"class":148},[142,95540,153],{"class":152},[142,95542,230],{"class":201},[142,95544,531],{"class":152},[142,95546,224],{"class":201},[142,95548,531],{"class":152},[142,95550,446],{"class":201},[142,95552,30526],{"class":152},[142,95554,95555],{"class":144,"line":1208},[142,95556,95557],{"class":152},"aaa.shape\n",[113,95559,95561],{"id":95560},"_222-randint语句","2.2.2 randint语句",[133,95563,95565],{"className":30407,"code":95564,"language":30409,"meta":31,"style":31},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[139,95566,95567,95572],{"__ignoreMap":31},[142,95568,95569],{"class":144,"line":145},[142,95570,95571],{"class":211},"#生成随机的整数 random.randint(low,high,size)\n",[142,95573,95574,95576,95578,95580],{"class":144,"line":64},[142,95575,93143],{"class":152},[142,95577,472],{"class":201},[142,95579,13743],{"class":152},[142,95581,95582],{"class":211},"#0~5中的随机一个数\n",[14,95584,95421],{},[133,95586,95588],{"className":30407,"code":95587,"language":30409,"meta":31,"style":31},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[139,95589,95590,95595,95617],{"__ignoreMap":31},[142,95591,95592],{"class":144,"line":145},[142,95593,95594],{"class":211},"#一维\n",[142,95596,95597,95599,95601,95603,95605,95607,95609,95611,95613,95615],{"class":144,"line":64},[142,95598,93143],{"class":152},[142,95600,370],{"class":201},[142,95602,531],{"class":152},[142,95604,625],{"class":201},[142,95606,531],{"class":152},[142,95608,31525],{"class":5245},[142,95610,198],{"class":148},[142,95612,153],{"class":152},[142,95614,599],{"class":201},[142,95616,30526],{"class":152},[142,95618,95619],{"class":144,"line":1208},[142,95620,95621],{"class":211},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95623,95476],{},[14,95625,95626],{},[29,95627],{"alt":31,"src":95628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95630,95515],{},[14,95632,95633],{},[29,95634],{"alt":31,"src":95635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[113,95637,95639],{"id":95638},"_222-rand语句","2.2.2 rand语句",[14,95641,95642],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[133,95644,95646],{"className":30407,"code":95645,"language":30409,"meta":31,"style":31},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[139,95647,95648,95661,95666],{"__ignoreMap":31},[142,95649,95650,95653,95655,95657,95659],{"class":144,"line":145},[142,95651,95652],{"class":152},"np.random.rand(",[142,95654,464],{"class":201},[142,95656,531],{"class":152},[142,95658,599],{"class":201},[142,95660,159],{"class":152},[142,95662,95663],{"class":144,"line":64},[142,95664,95665],{"class":211},"#第一个参数100：行数，表示有100个样本\n",[142,95667,95668],{"class":144,"line":1208},[142,95669,95670],{"class":211},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[84,95672,95674],{"id":95673},"_23-arange创建数组","2.3 arange()创建数组",[113,95676,95678],{"id":95677},"_231-函数语句","2.3.1 函数语句",[133,95680,95682],{"className":30407,"code":95681,"language":30409,"meta":31,"style":31},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[139,95683,95684,95698,95703,95708,95713,95718,95723,95728],{"__ignoreMap":31},[142,95685,95686,95689,95691,95693,95696],{"class":144,"line":145},[142,95687,95688],{"class":152},"numpy.arange([start,] stop[, step], ",[142,95690,93529],{"class":5245},[142,95692,198],{"class":148},[142,95694,95695],{"class":201},"None",[142,95697,159],{"class":152},[142,95699,95700],{"class":144,"line":64},[142,95701,95702],{"class":211},"#参数\n",[142,95704,95705],{"class":144,"line":1208},[142,95706,95707],{"class":257},"\"\"\"\n",[142,95709,95710],{"class":144,"line":1223},[142,95711,95712],{"class":257},"start:起始值，可选，默认从 0 开始。\n",[142,95714,95715],{"class":144,"line":1229},[142,95716,95717],{"class":257},"stop:结束值（不包含该值）。\n",[142,95719,95720],{"class":144,"line":1243},[142,95721,95722],{"class":257},"step:步长，可选，默认是 1。可以为浮点数。\n",[142,95724,95725],{"class":144,"line":1249},[142,95726,95727],{"class":257},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[142,95729,95730],{"class":144,"line":1340},[142,95731,95707],{"class":257},[113,95733,95735],{"id":95734},"_232-实例","2.3.2 实例",[133,95737,95739],{"className":30407,"code":95738,"language":30409,"meta":31,"style":31},"#创建一维数组\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",[139,95740,95741,95745,95769,95774,95779,95783,95806,95810,95814,95819,95824],{"__ignoreMap":31},[142,95742,95743],{"class":144,"line":145},[142,95744,93134],{"class":211},[142,95746,95747,95749,95751,95753,95755,95757,95759,95761,95763,95765,95767],{"class":144,"line":64},[142,95748,93031],{"class":152},[142,95750,370],{"class":201},[142,95752,531],{"class":152},[142,95754,878],{"class":201},[142,95756,531],{"class":152},[142,95758,370],{"class":201},[142,95760,531],{"class":152},[142,95762,93529],{"class":5245},[142,95764,198],{"class":148},[142,95766,156],{"class":201},[142,95768,159],{"class":152},[142,95770,95771],{"class":144,"line":1208},[142,95772,95773],{"class":211},"#输出结果：\n",[142,95775,95776],{"class":144,"line":1223},[142,95777,95778],{"class":211},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[142,95780,95781],{"class":144,"line":1229},[142,95782,93976],{"class":211},[142,95784,95785,95788,95790,95792,95794,95797,95799,95801,95803],{"class":144,"line":1243},[142,95786,95787],{"class":152},"np.array([np.arange(",[142,95789,370],{"class":201},[142,95791,531],{"class":152},[142,95793,446],{"class":201},[142,95795,95796],{"class":152},"),np.arange(",[142,95798,446],{"class":201},[142,95800,531],{"class":152},[142,95802,522],{"class":201},[142,95804,95805],{"class":152},")])\n",[142,95807,95808],{"class":144,"line":1249},[142,95809,93593],{"class":211},[142,95811,95812],{"class":144,"line":1340},[142,95813,95707],{"class":257},[142,95815,95816],{"class":144,"line":1346},[142,95817,95818],{"class":257},"array([[1, 2, 3],\n",[142,95820,95821],{"class":144,"line":1358},[142,95822,95823],{"class":257},"       [4, 5, 6]])\n",[142,95825,95826],{"class":144,"line":1640},[142,95827,95707],{"class":257},[84,95829,95831],{"id":95830},"_24-生态分布","2.4 生态分布",[113,95833,95835],{"id":95834},"_241-标准正态分布","2.4.1 标准正态分布",[14,95837,95838],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95840,95841],{},[29,95842],{"alt":31,"src":95843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[113,95845,95847],{"id":95846},"_242-常规正态分布","2.4.2 常规正态分布",[133,95849,95851],{"className":30407,"code":95850,"language":30409,"meta":31,"style":31},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[139,95852,95853,95858,95863,95868],{"__ignoreMap":31},[142,95854,95855],{"class":144,"line":145},[142,95856,95857],{"class":152},"random.normal(loc,scale,size)也可以生成正态分布\n",[142,95859,95860],{"class":144,"line":64},[142,95861,95862],{"class":211},"#loc:期望\n",[142,95864,95865],{"class":144,"line":1208},[142,95866,95867],{"class":211},"#scale:方差\n",[142,95869,95870],{"class":144,"line":1223},[142,95871,95872],{"class":211},"#size:用于确定是几维的数列\n",[14,95874,95875],{},[29,95876],{"alt":31,"src":95877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[84,95879,95881],{"id":95880},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95883,95884],{},"ndim:秩，维度个数",[14,95886,95887],{},"size:数组元素的个数",[14,95889,95890],{},"shape:数组的形状",[14,95892,95893],{},"dtype:数组元素的类型",[14,95895,95896],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95898,95899],{},"他们都是属性，通过数组.属性的形式来确定",[14,95901,95902],{},"如果需要输出多个可以通过以下方式：",[133,95904,95906],{"className":30407,"code":95905,"language":30409,"meta":31,"style":31},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[139,95907,95908],{"__ignoreMap":31},[142,95909,95910,95912],{"class":144,"line":145},[142,95911,30444],{"class":201},[142,95913,95914],{"class":152},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[84,95916,95918],{"id":95917},"_26-其他方式创建数组","2.6 其他方式创建数组",[113,95920,95922],{"id":95921},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95924,95925],{},"①创建一维数组",[133,95927,95929],{"className":30407,"code":95928,"language":30409,"meta":31,"style":31},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[139,95930,95931,95940,95944,95949,95954],{"__ignoreMap":31},[142,95932,95933,95936,95938],{"class":144,"line":145},[142,95934,95935],{"class":152},"np.zeros(",[142,95937,599],{"class":201},[142,95939,159],{"class":152},[142,95941,95942],{"class":144,"line":64},[142,95943,95707],{"class":257},[142,95945,95946],{"class":144,"line":1208},[142,95947,95948],{"class":257},"输出结果：\n",[142,95950,95951],{"class":144,"line":1223},[142,95952,95953],{"class":257},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[142,95955,95956],{"class":144,"line":1229},[142,95957,95707],{"class":257},[14,95959,95960],{},"上方代码等价于：",[133,95962,95964],{"className":30407,"code":95963,"language":30409,"meta":31,"style":31},"np.zeros(shape=(10))#创建10个元素的0数组\n",[139,95965,95966],{"__ignoreMap":31},[142,95967,95968,95970,95973,95975,95977,95979,95981],{"class":144,"line":145},[142,95969,95935],{"class":152},[142,95971,95972],{"class":5245},"shape",[142,95974,198],{"class":148},[142,95976,153],{"class":152},[142,95978,599],{"class":201},[142,95980,82800],{"class":152},[142,95982,95983],{"class":211},"#创建10个元素的0数组\n",[14,95985,95986],{},"也可以指定类型",[133,95988,95990],{"className":30407,"code":95989,"language":30409,"meta":31,"style":31},"#指定类型\nnp.zeros(5,dtype=int)\n",[139,95991,95992,95997],{"__ignoreMap":31},[142,95993,95994],{"class":144,"line":145},[142,95995,95996],{"class":211},"#指定类型\n",[142,95998,95999,96001,96003,96005,96007,96009,96011],{"class":144,"line":64},[142,96000,95935],{"class":152},[142,96002,472],{"class":201},[142,96004,531],{"class":152},[142,96006,93529],{"class":5245},[142,96008,198],{"class":148},[142,96010,156],{"class":201},[142,96012,159],{"class":152},[14,96014,96015],{},"②创建二维数组",[133,96017,96019],{"className":30407,"code":96018,"language":30409,"meta":31,"style":31},"np.zeros((3,4),dtype=int)\n",[139,96020,96021],{"__ignoreMap":31},[142,96022,96023,96026,96028,96030,96032,96034,96036,96038,96040],{"class":144,"line":145},[142,96024,96025],{"class":152},"np.zeros((",[142,96027,224],{"class":201},[142,96029,531],{"class":152},[142,96031,446],{"class":201},[142,96033,42285],{"class":152},[142,96035,93529],{"class":5245},[142,96037,198],{"class":148},[142,96039,156],{"class":201},[142,96041,159],{"class":152},[14,96043,96044],{},"③创建三维数组",[133,96046,96048],{"className":30407,"code":96047,"language":30409,"meta":31,"style":31},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[139,96049,96050,96055],{"__ignoreMap":31},[142,96051,96052],{"class":144,"line":145},[142,96053,96054],{"class":211},"#创建三维数组\n",[142,96056,96057,96059,96061,96063,96065,96067,96069,96071,96073,96075,96077],{"class":144,"line":64},[142,96058,96025],{"class":152},[142,96060,224],{"class":201},[142,96062,531],{"class":152},[142,96064,446],{"class":201},[142,96066,531],{"class":152},[142,96068,472],{"class":201},[142,96070,42285],{"class":152},[142,96072,93529],{"class":5245},[142,96074,198],{"class":148},[142,96076,156],{"class":201},[142,96078,159],{"class":152},[14,96080,96081],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[133,96083,96085],{"className":30407,"code":96084,"language":30409,"meta":31,"style":31},"#使用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",[139,96086,96087,96092,96107,96112,96117,96139],{"__ignoreMap":31},[142,96088,96089],{"class":144,"line":145},[142,96090,96091],{"class":211},"#使用zeros_like将创建的一维数组变成全0的数组\n",[142,96093,96094,96096,96098,96100,96102,96104],{"class":144,"line":64},[142,96095,391],{"class":152},[142,96097,198],{"class":148},[142,96099,93031],{"class":152},[142,96101,446],{"class":201},[142,96103,582],{"class":152},[142,96105,96106],{"class":211},"#这个得到的结果：一维数组0，1，2，3\n",[142,96108,96109],{"class":144,"line":1208},[142,96110,96111],{"class":152},"np.zeros_like(a)\n",[142,96113,96114],{"class":144,"line":1223},[142,96115,96116],{"class":211},"#使用zeros_like将创建的二维数组变成全0的数组\n",[142,96118,96119,96121,96123,96125,96127,96129,96131,96133,96135,96137],{"class":144,"line":1229},[142,96120,93335],{"class":152},[142,96122,198],{"class":148},[142,96124,95436],{"class":152},[142,96126,31525],{"class":5245},[142,96128,198],{"class":148},[142,96130,153],{"class":152},[142,96132,446],{"class":201},[142,96134,531],{"class":152},[142,96136,472],{"class":201},[142,96138,30526],{"class":152},[142,96140,96141],{"class":144,"line":1243},[142,96142,96143],{"class":152},"np.zeros_like(aa)\n",[113,96145,96147],{"id":96146},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96149,96150],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[113,96152,96154],{"id":96153},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96156,96157],{},"①empty()用法",[133,96159,96161],{"className":30407,"code":96160,"language":30409,"meta":31,"style":31},"numpy.empty(shape,dtype=float,order='c')\n",[139,96162,96163],{"__ignoreMap":31},[142,96164,96165,96168,96170,96172,96174,96176,96178,96180,96182],{"class":144,"line":145},[142,96166,96167],{"class":152},"numpy.empty(shape,",[142,96169,93529],{"class":5245},[142,96171,198],{"class":148},[142,96173,192],{"class":201},[142,96175,531],{"class":152},[142,96177,95306],{"class":5245},[142,96179,198],{"class":148},[142,96181,76057],{"class":257},[142,96183,159],{"class":152},[14,96185,96186],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96188,96189],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96191,96192],{},[29,96193],{"alt":31,"src":96194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96196,96197],{},"②empty()用法",[133,96199,96201],{"className":30407,"code":96200,"language":30409,"meta":31,"style":31},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[139,96202,96203,96224,96236,96257,96262],{"__ignoreMap":31},[142,96204,96205,96207,96209,96212,96214,96216,96218,96220,96222],{"class":144,"line":145},[142,96206,998],{"class":152},[142,96208,198],{"class":148},[142,96210,96211],{"class":152},"np.empty(",[142,96213,599],{"class":201},[142,96215,531],{"class":152},[142,96217,93529],{"class":5245},[142,96219,198],{"class":148},[142,96221,156],{"class":201},[142,96223,159],{"class":152},[142,96225,96226,96228,96230,96232,96234],{"class":144,"line":64},[142,96227,973],{"class":152},[142,96229,198],{"class":148},[142,96231,93031],{"class":152},[142,96233,472],{"class":201},[142,96235,159],{"class":152},[142,96237,96238,96241,96243,96246,96248,96250,96253,96255],{"class":144,"line":1208},[142,96239,96240],{"class":152},"np.add(",[142,96242,230],{"class":201},[142,96244,96245],{"class":152},",x,",[142,96247,93083],{"class":5245},[142,96249,198],{"class":148},[142,96251,96252],{"class":152},"y[:",[142,96254,472],{"class":201},[142,96256,4685],{"class":152},[142,96258,96259],{"class":144,"line":1223},[142,96260,96261],{"class":211},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[142,96263,96264],{"class":144,"line":1229},[142,96265,96266],{"class":152},"y\n",[14,96268,11543],{},[14,96270,96271],{},[29,96272],{"alt":31,"src":96273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[133,96275,96277],{"className":30407,"code":96276,"language":30409,"meta":31,"style":31},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[139,96278,96279,96295,96315,96330],{"__ignoreMap":31},[142,96280,96281,96283,96285,96287,96289,96291,96293],{"class":144,"line":145},[142,96282,973],{"class":152},[142,96284,198],{"class":148},[142,96286,93031],{"class":152},[142,96288,370],{"class":201},[142,96290,531],{"class":152},[142,96292,497],{"class":201},[142,96294,159],{"class":152},[142,96296,96297,96299,96301,96303,96305,96307,96309,96311,96313],{"class":144,"line":64},[142,96298,998],{"class":152},[142,96300,198],{"class":148},[142,96302,96211],{"class":152},[142,96304,472],{"class":201},[142,96306,531],{"class":152},[142,96308,93529],{"class":5245},[142,96310,198],{"class":148},[142,96312,156],{"class":201},[142,96314,159],{"class":152},[142,96316,96317,96320,96322,96324,96326,96328],{"class":144,"line":1208},[142,96318,96319],{"class":152},"np.add(x,",[142,96321,230],{"class":201},[142,96323,531],{"class":152},[142,96325,93083],{"class":5245},[142,96327,198],{"class":148},[142,96329,93478],{"class":152},[142,96331,96332],{"class":144,"line":1223},[142,96333,96334],{"class":211},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96336,96337],{},"③empty_like()",[14,96339,96340],{},[302,96341,96342,96343,96348],{},"创建一个",[302,96344,96345],{},[302,96346,96347],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96350,96351,96354],{},[139,96352,96353],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96356,96357],{},[29,96358],{"alt":31,"src":96359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[113,96361,96363],{"id":96362},"_264-用法","2.6.4 ？？用法",[14,96365,96366],{},"当想查看一个函数的参数时，可以通过？？来实现",[133,96368,96370],{"className":30407,"code":96369,"language":30409,"meta":31,"style":31},"np.full??\n",[139,96371,96372],{"__ignoreMap":31},[142,96373,96374,96377],{"class":144,"line":145},[142,96375,96376],{"class":152},"np.full",[142,96378,96379],{"class":77432},"??\n",[113,96381,96383],{"id":96382},"_265-full创建数组","2.6.5 full()创建数组",[133,96385,96387],{"className":30407,"code":96386,"language":30409,"meta":31,"style":31},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[139,96388,96389,96394],{"__ignoreMap":31},[142,96390,96391],{"class":144,"line":145},[142,96392,96393],{"class":152},"full(shape,fill_value)\n",[142,96395,96396],{"class":144,"line":64},[142,96397,96398],{"class":152},"创建全为某个指定值的数组\n",[14,96400,94559],{},[133,96402,96404],{"className":30407,"code":96403,"language":30409,"meta":31,"style":31},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[139,96405,96406,96411],{"__ignoreMap":31},[142,96407,96408],{"class":144,"line":145},[142,96409,96410],{"class":211},"#创建一个一维数组,以20进行填充\n",[142,96412,96413,96416,96418,96420,96422],{"class":144,"line":64},[142,96414,96415],{"class":152},"np.full(",[142,96417,599],{"class":201},[142,96419,531],{"class":152},[142,96421,853],{"class":201},[142,96423,159],{"class":152},[14,96425,93320],{},[133,96427,96429],{"className":30407,"code":96428,"language":30409,"meta":31,"style":31},"#创建二维数组\nnp.full((3,5),11)\n",[139,96430,96431,96435],{"__ignoreMap":31},[142,96432,96433],{"class":144,"line":145},[142,96434,93976],{"class":211},[142,96436,96437,96440,96442,96444,96446,96448,96450],{"class":144,"line":64},[142,96438,96439],{"class":152},"np.full((",[142,96441,224],{"class":201},[142,96443,531],{"class":152},[142,96445,472],{"class":201},[142,96447,42285],{"class":152},[142,96449,625],{"class":201},[142,96451,159],{"class":152},[14,96453,96454],{},"③full_like用法",[14,96456,96457],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96459,96460],{},"这里是指定填充而已",[133,96462,96464],{"className":30407,"code":96463,"language":30409,"meta":31,"style":31},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[139,96465,96466,96471,96495,96500],{"__ignoreMap":31},[142,96467,96468],{"class":144,"line":145},[142,96469,96470],{"class":211},"#创建一个指定形状数组\n",[142,96472,96473,96475,96477,96479,96481,96483,96485,96487,96489,96491,96493],{"class":144,"line":64},[142,96474,391],{"class":152},[142,96476,198],{"class":148},[142,96478,93031],{"class":152},[142,96480,370],{"class":201},[142,96482,531],{"class":152},[142,96484,478],{"class":201},[142,96486,93036],{"class":152},[142,96488,446],{"class":201},[142,96490,531],{"class":152},[142,96492,573],{"class":201},[142,96494,159],{"class":152},[142,96496,96497],{"class":144,"line":1208},[142,96498,96499],{"class":211},"#进行指定填充\n",[142,96501,96502,96505,96507],{"class":144,"line":1223},[142,96503,96504],{"class":152},"np.full_like(a,",[142,96506,599],{"class":201},[142,96508,159],{"class":152},[14,96510,11543],{},[14,96512,96513],{},[29,96514],{"alt":31,"src":96515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[113,96517,96519],{"id":96518},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22027,96521,96523],{"id":96522},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[133,96525,96527],{"className":30407,"code":96526,"language":30409,"meta":31,"style":31},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[139,96528,96529,96546],{"__ignoreMap":31},[142,96530,96531,96534,96536,96538,96540,96542,96544],{"class":144,"line":145},[142,96532,96533],{"class":152},"np.eye(",[142,96535,446],{"class":201},[142,96537,531],{"class":152},[142,96539,93529],{"class":5245},[142,96541,198],{"class":148},[142,96543,156],{"class":201},[142,96545,159],{"class":152},[142,96547,96548],{"class":144,"line":64},[142,96549,96550],{"class":211},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22027,96552,96554],{"id":96553},"_2662-法2identity","2.6.6.2 法2：identity()",[133,96556,96558],{"className":30407,"code":96557,"language":30409,"meta":31,"style":31},"#identity()\nnp.identity(5,dtype=int)\n",[139,96559,96560,96565],{"__ignoreMap":31},[142,96561,96562],{"class":144,"line":145},[142,96563,96564],{"class":211},"#identity()\n",[142,96566,96567,96570,96572,96574,96576,96578,96580],{"class":144,"line":64},[142,96568,96569],{"class":152},"np.identity(",[142,96571,472],{"class":201},[142,96573,531],{"class":152},[142,96575,93529],{"class":5245},[142,96577,198],{"class":148},[142,96579,156],{"class":201},[142,96581,159],{"class":152},[14,96583,96584],{},"两个函数是有区别的",[14,96586,96587],{},[29,96588],{"alt":31,"src":96589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96591,96592],{},[29,96593],{"alt":31,"src":96594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[133,96596,96598],{"className":30407,"code":96597,"language":30409,"meta":31,"style":31},"# 创建一个 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",[139,96599,96600,96605,96617,96622,96627,96632,96637,96641,96646,96666,96670,96675,96680],{"__ignoreMap":31},[142,96601,96602],{"class":144,"line":145},[142,96603,96604],{"class":211},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[142,96606,96607,96609,96611,96613,96615],{"class":144,"line":64},[142,96608,96533],{"class":152},[142,96610,224],{"class":201},[142,96612,12464],{"class":152},[142,96614,446],{"class":201},[142,96616,159],{"class":152},[142,96618,96619],{"class":144,"line":1208},[142,96620,96621],{"class":211},"# 输出:\n",[142,96623,96624],{"class":144,"line":1223},[142,96625,96626],{"class":211},"# [[1. 0. 0. 0.]\n",[142,96628,96629],{"class":144,"line":1229},[142,96630,96631],{"class":211},"#  [0. 1. 0. 0.]\n",[142,96633,96634],{"class":144,"line":1243},[142,96635,96636],{"class":211},"#  [0. 0. 1. 0.]]\n",[142,96638,96639],{"class":144,"line":1249},[142,96640,2428],{"emptyLinePlaceholder":69},[142,96642,96643],{"class":144,"line":1340},[142,96644,96645],{"class":211},"# 对角线向上偏移1\n",[142,96647,96648,96650,96652,96654,96656,96658,96660,96662,96664],{"class":144,"line":1346},[142,96649,96533],{"class":152},[142,96651,224],{"class":201},[142,96653,12464],{"class":152},[142,96655,446],{"class":201},[142,96657,12464],{"class":152},[142,96659,646],{"class":5245},[142,96661,198],{"class":148},[142,96663,370],{"class":201},[142,96665,159],{"class":152},[142,96667,96668],{"class":144,"line":1358},[142,96669,96621],{"class":211},[142,96671,96672],{"class":144,"line":1640},[142,96673,96674],{"class":211},"# [[0. 1. 0. 0.]\n",[142,96676,96677],{"class":144,"line":1645},[142,96678,96679],{"class":211},"#  [0. 0. 1. 0.]\n",[142,96681,96682],{"class":144,"line":1651},[142,96683,96684],{"class":211},"#  [0. 0. 0. 1.]]\n",[113,96686,96688],{"id":96687},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[133,96690,96692],{"className":30407,"code":96691,"language":30409,"meta":31,"style":31},"#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",[139,96693,96694,96699,96703,96708,96713,96718,96723,96728,96733,96738,96743],{"__ignoreMap":31},[142,96695,96696],{"class":144,"line":145},[142,96697,96698],{"class":211},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[142,96700,96701],{"class":144,"line":64},[142,96702,95707],{"class":257},[142,96704,96705],{"class":144,"line":1208},[142,96706,96707],{"class":257},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[142,96709,96710],{"class":144,"line":1223},[142,96711,96712],{"class":257},"参数介绍：\n",[142,96714,96715],{"class":144,"line":1229},[142,96716,96717],{"class":257},"start：序列的起始值\n",[142,96719,96720],{"class":144,"line":1243},[142,96721,96722],{"class":257},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[142,96724,96725],{"class":144,"line":1249},[142,96726,96727],{"class":257},"num：要生长的等步长的样本数量，默认为50\n",[142,96729,96730],{"class":144,"line":1340},[142,96731,96732],{"class":257},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[142,96734,96735],{"class":144,"line":1346},[142,96736,96737],{"class":257},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[142,96739,96740],{"class":144,"line":1358},[142,96741,96742],{"class":257},"dtype：ndarry的数据类型\n",[142,96744,96745],{"class":144,"line":1640},[142,96746,95707],{"class":257},[14,96748,96749],{},[29,96750],{"alt":31,"src":96751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96753,96754],{},"这里num=是可以省略的",[14,96756,96757],{},"也就是下方两行代码结果是一模一样的",[133,96759,96761],{"className":30407,"code":96760,"language":30409,"meta":31,"style":31},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[139,96762,96763,96780],{"__ignoreMap":31},[142,96764,96765,96768,96770,96772,96774,96776,96778],{"class":144,"line":145},[142,96766,96767],{"class":152},"np.linspace(",[142,96769,370],{"class":201},[142,96771,531],{"class":152},[142,96773,472],{"class":201},[142,96775,531],{"class":152},[142,96777,472],{"class":201},[142,96779,159],{"class":152},[142,96781,96782,96784,96786,96788,96790,96792,96794,96796,96798],{"class":144,"line":64},[142,96783,96767],{"class":152},[142,96785,370],{"class":201},[142,96787,531],{"class":152},[142,96789,472],{"class":201},[142,96791,531],{"class":152},[142,96793,1693],{"class":5245},[142,96795,198],{"class":148},[142,96797,472],{"class":201},[142,96799,159],{"class":152},[113,96801,96803],{"id":96802},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[133,96805,96807],{"className":30407,"code":96806,"language":30409,"meta":31,"style":31},"#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",[139,96808,96809,96814,96818,96823,96828,96833,96838,96842,96847,96852,96856],{"__ignoreMap":31},[142,96810,96811],{"class":144,"line":145},[142,96812,96813],{"class":211},"#logspace函数用于创建一个等比数列，格式如下：\n",[142,96815,96816],{"class":144,"line":64},[142,96817,95707],{"class":257},[142,96819,96820],{"class":144,"line":1208},[142,96821,96822],{"class":257},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[142,96824,96825],{"class":144,"line":1223},[142,96826,96827],{"class":257},"参数为：\n",[142,96829,96830],{"class":144,"line":1229},[142,96831,96832],{"class":257},"start:序列的起始位置为：base**start\n",[142,96834,96835],{"class":144,"line":1243},[142,96836,96837],{"class":257},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[142,96839,96840],{"class":144,"line":1249},[142,96841,96727],{"class":257},[142,96843,96844],{"class":144,"line":1340},[142,96845,96846],{"class":257},"endpoint：是否包含 stop 这个值，默认是 True\n",[142,96848,96849],{"class":144,"line":1346},[142,96850,96851],{"class":257},"base：对数的底数，默认是 10（常见对数）\n",[142,96853,96854],{"class":144,"line":1358},[142,96855,96742],{"class":257},[142,96857,96858],{"class":144,"line":1640},[142,96859,95707],{"class":257},[14,96861,96862],{},[29,96863],{"alt":31,"src":96864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96866,96867],{},"logspace()函数中的num参数也是可以不写num=的",[14,96869,96870],{},"endpoint是不可以省略的",[5155,96872,96873],{},"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":31,"searchDepth":64,"depth":64,"links":96875},[96876,96880,96885,96889,96893,96894],{"id":95265,"depth":64,"text":95266,"children":96877},[96878,96879],{"id":95269,"depth":1208,"text":95270},{"id":95342,"depth":1208,"text":95343},{"id":95374,"depth":64,"text":95375,"children":96881},[96882,96883,96884],{"id":95378,"depth":1208,"text":95379},{"id":95560,"depth":1208,"text":95561},{"id":95638,"depth":1208,"text":95639},{"id":95673,"depth":64,"text":95674,"children":96886},[96887,96888],{"id":95677,"depth":1208,"text":95678},{"id":95734,"depth":1208,"text":95735},{"id":95830,"depth":64,"text":95831,"children":96890},[96891,96892],{"id":95834,"depth":1208,"text":95835},{"id":95846,"depth":1208,"text":95847},{"id":95880,"depth":64,"text":95881},{"id":95917,"depth":64,"text":95918,"children":96895},[96896,96897,96898,96899,96900,96901,96902,96903],{"id":95921,"depth":1208,"text":95922},{"id":96146,"depth":1208,"text":96147},{"id":96153,"depth":1208,"text":96154},{"id":96362,"depth":1208,"text":96363},{"id":96382,"depth":1208,"text":96383},{"id":96518,"depth":1208,"text":96519},{"id":96687,"depth":1208,"text":96688},{"id":96802,"depth":1208,"text":96803},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95257,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96910,"title":96911,"body":96912,"description":66,"extension":67,"meta":97005,"navigation":69,"path":97006,"seo":97007,"stem":97008,"__hash__":97009},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96913,"toc":97003},[96914,96917,96920,96923,96926,96929,96932,96935,96938,96941,96944,96947,96949,96952,96955,96960,96963,96966,97000],[10,96915,96911],{"id":96916},"_20魔法命令mprun",[14,96918,96919],{},"逐行分析数据内存的使用情况",[14,96921,96922],{},"语法格式：",[14,96924,96925],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96927,96928],{},"分析结果列如下：",[14,96930,96931],{},"Line行号",[14,96933,96934],{},"Mem usage内存使用大小",[14,96936,96937],{},"increment内存增量",[14,96939,96940],{},"Line content代码内容",[14,96942,96943],{},"补充说明：",[14,96945,96946],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96948,25],{},[14,96950,96951],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96953,96954],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96956,96957],{},[29,96958],{"alt":31,"src":96959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96961,96962],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,96964,96965],{},"这时候需要重新加载模块",[133,96967,96969],{"className":30407,"code":96968,"language":30409,"meta":31,"style":31},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[139,96970,96971,96976,96983,96988],{"__ignoreMap":31},[142,96972,96973],{"class":144,"line":145},[142,96974,96975],{"class":211},"#重新加载模块\n",[142,96977,96978,96980],{"class":144,"line":64},[142,96979,30421],{"class":148},[142,96981,96982],{"class":152}," importlib\n",[142,96984,96985],{"class":144,"line":1208},[142,96986,96987],{"class":152},"importlib.reload(mprun_test)\n",[142,96989,96990,96992,96995,96997],{"class":144,"line":1223},[142,96991,481],{"class":148},[142,96993,96994],{"class":152},"mprun ",[142,96996,685],{"class":148},[142,96998,96999],{"class":152},"f mprun_test.fun_test mprun_test.fun_test()\n",[5155,97001,97002],{},"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":31,"searchDepth":64,"depth":64,"links":97004},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96911,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97011,"title":97012,"body":97013,"description":66,"extension":67,"meta":97030,"navigation":69,"path":97031,"seo":97032,"stem":97033,"__hash__":97034},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97014,"toc":97028},[97015,97018,97023],[10,97016,97012],{"id":97017},"_3一维数组的索引和切片",[14,97019,97020],{},[29,97021],{"alt":31,"src":97022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97024,97025],{},[29,97026],{"alt":31,"src":97027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":31,"searchDepth":64,"depth":64,"links":97029},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97012,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97036,"title":97037,"body":97038,"description":66,"extension":67,"meta":97521,"navigation":69,"path":97522,"seo":97523,"stem":97524,"__hash__":97525},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97039,"toc":97519},[97040,97043,97046,97051,97084,97087,97125,97128,97162,97165,97270,97273,97310,97313,97414,97417,97468,97471,97513,97516],[10,97041,97037],{"id":97042},"_4二维数组的索引与切片",[14,97044,97045],{},"①获取指定单个元素",[14,97047,97048],{},[29,97049],{"alt":31,"src":97050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[133,97052,97054],{"className":30407,"code":97053,"language":30409,"meta":31,"style":31},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[139,97055,97056,97061,97066,97071],{"__ignoreMap":31},[142,97057,97058],{"class":144,"line":145},[142,97059,97060],{"class":211},"#获取元素9\n",[142,97062,97063],{"class":144,"line":64},[142,97064,97065],{"class":211},"#先获取所在行，再获取所在列\n",[142,97067,97068],{"class":144,"line":1208},[142,97069,97070],{"class":211},"#数组[行索引号，列索引号]\n",[142,97072,97073,97076,97078,97080,97082],{"class":144,"line":1223},[142,97074,97075],{"class":152},"a[",[142,97077,370],{"class":201},[142,97079,531],{"class":152},[142,97081,230],{"class":201},[142,97083,33275],{"class":152},[14,97085,97086],{},"②获取整行元素",[133,97088,97090],{"className":30407,"code":97089,"language":30409,"meta":31,"style":31},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[139,97091,97092,97097,97102,97110,97115],{"__ignoreMap":31},[142,97093,97094],{"class":144,"line":145},[142,97095,97096],{"class":211},"#获取整行 数组[行索引号]\n",[142,97098,97099],{"class":144,"line":64},[142,97100,97101],{"class":211},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[142,97103,97104,97106,97108],{"class":144,"line":1208},[142,97105,97075],{"class":152},[142,97107,230],{"class":201},[142,97109,33275],{"class":152},[142,97111,97112],{"class":144,"line":1223},[142,97113,97114],{"class":211},"#也可以负索引获取一行\n",[142,97116,97117,97119,97121,97123],{"class":144,"line":1229},[142,97118,97075],{"class":152},[142,97120,685],{"class":148},[142,97122,370],{"class":201},[142,97124,33275],{"class":152},[14,97126,97127],{},"③获取整列元素",[133,97129,97131],{"className":30407,"code":97130,"language":30409,"meta":31,"style":31},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[139,97132,97133,97138,97147,97152],{"__ignoreMap":31},[142,97134,97135],{"class":144,"line":145},[142,97136,97137],{"class":211},"#获取整列 数组名[:,列索引]\n",[142,97139,97140,97143,97145],{"class":144,"line":64},[142,97141,97142],{"class":152},"a[:,",[142,97144,230],{"class":201},[142,97146,33275],{"class":152},[142,97148,97149],{"class":144,"line":1208},[142,97150,97151],{"class":211},"#也可以负索引获取一列\n",[142,97153,97154,97156,97158,97160],{"class":144,"line":1223},[142,97155,97142],{"class":152},[142,97157,685],{"class":148},[142,97159,370],{"class":201},[142,97161,33275],{"class":152},[14,97163,97164],{},"④部分行部分列的元素",[133,97166,97168],{"className":30407,"code":97167,"language":30409,"meta":31,"style":31},"#部分行部分列 数组名[行切片，列切片]\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",[139,97169,97170,97175,97185,97189,97193,97198,97203,97207,97219,97223,97227,97232,97237,97242,97247,97251,97256],{"__ignoreMap":31},[142,97171,97172],{"class":144,"line":145},[142,97173,97174],{"class":211},"#部分行部分列 数组名[行切片，列切片]\n",[142,97176,97177,97180,97182],{"class":144,"line":64},[142,97178,97179],{"class":152},"a[:",[142,97181,230],{"class":201},[142,97183,97184],{"class":152},",:]\n",[142,97186,97187],{"class":144,"line":1208},[142,97188,93593],{"class":211},[142,97190,97191],{"class":144,"line":1223},[142,97192,93957],{"class":257},[142,97194,97195],{"class":144,"line":1229},[142,97196,97197],{"class":257},"array([[ 1,  2,  3,  4,  5,  6],\n",[142,97199,97200],{"class":144,"line":1243},[142,97201,97202],{"class":257},"       [ 7,  8,  9, 10, 11, 12]])\n",[142,97204,97205],{"class":144,"line":1249},[142,97206,93957],{"class":257},[142,97208,97209,97211,97213,97215,97217],{"class":144,"line":1340},[142,97210,97142],{"class":152},[142,97212,370],{"class":201},[142,97214,1012],{"class":152},[142,97216,446],{"class":201},[142,97218,33275],{"class":152},[142,97220,97221],{"class":144,"line":1346},[142,97222,93593],{"class":211},[142,97224,97225],{"class":144,"line":1358},[142,97226,93957],{"class":257},[142,97228,97229],{"class":144,"line":1640},[142,97230,97231],{"class":257},"array([[ 2,  3,  4],\n",[142,97233,97234],{"class":144,"line":1645},[142,97235,97236],{"class":257},"       [ 8,  9, 10],\n",[142,97238,97239],{"class":144,"line":1651},[142,97240,97241],{"class":257},"       [14, 15, 16],\n",[142,97243,97244],{"class":144,"line":1656},[142,97245,97246],{"class":257},"       [20, 21, 22]])\n",[142,97248,97249],{"class":144,"line":1670},[142,97250,93957],{"class":257},[142,97252,97253],{"class":144,"line":1675},[142,97254,97255],{"class":211},"#对列行同时进行切片，使用了step参数\n",[142,97257,97258,97261,97263,97266,97268],{"class":144,"line":1681},[142,97259,97260],{"class":152},"a[::",[142,97262,230],{"class":201},[142,97264,97265],{"class":152},",::",[142,97267,230],{"class":201},[142,97269,33275],{"class":152},[14,97271,97272],{},"⑤同时获取两个元素",[133,97274,97276],{"className":30407,"code":97275,"language":30409,"meta":31,"style":31},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[139,97277,97278,97283,97288],{"__ignoreMap":31},[142,97279,97280],{"class":144,"line":145},[142,97281,97282],{"class":211},"#同时获取第三行第二列，第四行第一列\n",[142,97284,97285],{"class":144,"line":64},[142,97286,97287],{"class":211},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[142,97289,97290,97293,97295,97297,97299,97301,97303,97305,97307],{"class":144,"line":1208},[142,97291,97292],{"class":152},"a[(",[142,97294,230],{"class":201},[142,97296,531],{"class":152},[142,97298,224],{"class":201},[142,97300,42276],{"class":152},[142,97302,370],{"class":201},[142,97304,531],{"class":152},[142,97306,344],{"class":201},[142,97308,97309],{"class":152},")]\n",[14,97311,97312],{},"⑥切片，对行进行反向获取",[133,97314,97316],{"className":30407,"code":97315,"language":30409,"meta":31,"style":31},"#切片 对所有行进行反向获取\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",[139,97317,97318,97323,97333,97337,97341,97346,97351,97356,97361,97365,97370,97386,97390,97395,97400,97405,97410],{"__ignoreMap":31},[142,97319,97320],{"class":144,"line":145},[142,97321,97322],{"class":211},"#切片 对所有行进行反向获取\n",[142,97324,97325,97327,97329,97331],{"class":144,"line":64},[142,97326,97260],{"class":152},[142,97328,685],{"class":148},[142,97330,370],{"class":201},[142,97332,33275],{"class":152},[142,97334,97335],{"class":144,"line":1208},[142,97336,93593],{"class":211},[142,97338,97339],{"class":144,"line":1223},[142,97340,93957],{"class":257},[142,97342,97343],{"class":144,"line":1229},[142,97344,97345],{"class":257},"array([[19, 20, 21, 22, 23, 24],\n",[142,97347,97348],{"class":144,"line":1243},[142,97349,97350],{"class":257},"       [13, 14, 15, 16, 17, 18],\n",[142,97352,97353],{"class":144,"line":1249},[142,97354,97355],{"class":257},"       [ 7,  8,  9, 10, 11, 12],\n",[142,97357,97358],{"class":144,"line":1340},[142,97359,97360],{"class":257},"       [ 1,  2,  3,  4,  5,  6]])\n",[142,97362,97363],{"class":144,"line":1346},[142,97364,93957],{"class":257},[142,97366,97367],{"class":144,"line":1358},[142,97368,97369],{"class":211},"#对行列都进行反向切片获取\n",[142,97371,97372,97374,97376,97378,97380,97382,97384],{"class":144,"line":1640},[142,97373,97260],{"class":152},[142,97375,685],{"class":148},[142,97377,370],{"class":201},[142,97379,97265],{"class":152},[142,97381,685],{"class":148},[142,97383,370],{"class":201},[142,97385,33275],{"class":152},[142,97387,97388],{"class":144,"line":1645},[142,97389,93957],{"class":257},[142,97391,97392],{"class":144,"line":1651},[142,97393,97394],{"class":257},"array([[24, 23, 22, 21, 20, 19],\n",[142,97396,97397],{"class":144,"line":1656},[142,97398,97399],{"class":257},"       [18, 17, 16, 15, 14, 13],\n",[142,97401,97402],{"class":144,"line":1670},[142,97403,97404],{"class":257},"       [12, 11, 10,  9,  8,  7],\n",[142,97406,97407],{"class":144,"line":1675},[142,97408,97409],{"class":257},"       [ 6,  5,  4,  3,  2,  1]])\n",[142,97411,97412],{"class":144,"line":1681},[142,97413,93957],{"class":257},[14,97415,97416],{},"⑦修改元素",[133,97418,97420],{"className":30407,"code":97419,"language":30409,"meta":31,"style":31},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[139,97421,97422,97427,97445,97450],{"__ignoreMap":31},[142,97423,97424],{"class":144,"line":145},[142,97425,97426],{"class":211},"#获取前两行和前两列\n",[142,97428,97429,97432,97434,97436,97438,97441,97443],{"class":144,"line":64},[142,97430,97431],{"class":152},"sub_a",[142,97433,198],{"class":148},[142,97435,97179],{"class":152},[142,97437,230],{"class":201},[142,97439,97440],{"class":152},",:",[142,97442,230],{"class":201},[142,97444,33275],{"class":152},[142,97446,97447],{"class":144,"line":1208},[142,97448,97449],{"class":211},"#修改sub_a第一个元素的值\n",[142,97451,97452,97455,97457,97459,97461,97463,97465],{"class":144,"line":1223},[142,97453,97454],{"class":152},"sub_a[",[142,97456,344],{"class":201},[142,97458,531],{"class":152},[142,97460,344],{"class":201},[142,97462,1093],{"class":152},[142,97464,198],{"class":148},[142,97466,97467],{"class":201},"100\n",[14,97469,97470],{},"⑧数组复制copy()",[133,97472,97474],{"className":30407,"code":97473,"language":30409,"meta":31,"style":31},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[139,97475,97476,97481,97491,97496],{"__ignoreMap":31},[142,97477,97478],{"class":144,"line":145},[142,97479,97480],{"class":211},"#数组复制\n",[142,97482,97483,97486,97488],{"class":144,"line":64},[142,97484,97485],{"class":152},"copy_a",[142,97487,198],{"class":148},[142,97489,97490],{"class":152},"np.copy(sub_a)\n",[142,97492,97493],{"class":144,"line":1208},[142,97494,97495],{"class":211},"#修改copy_a后不影响原数组\n",[142,97497,97498,97501,97503,97505,97507,97509,97511],{"class":144,"line":1223},[142,97499,97500],{"class":152},"copy_a[",[142,97502,344],{"class":201},[142,97504,531],{"class":152},[142,97506,344],{"class":201},[142,97508,1093],{"class":152},[142,97510,198],{"class":148},[142,97512,97467],{"class":201},[14,97514,97515],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5155,97517,97518],{},"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":31,"searchDepth":64,"depth":64,"links":97520},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97037,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97527,"title":97528,"body":97529,"description":66,"extension":67,"meta":98021,"navigation":69,"path":98022,"seo":98023,"stem":98024,"__hash__":98025},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97530,"toc":98013},[97531,97534,97538,97541,97544,97597,97600,97625,97628,97647,97667,97670,97686,97690,97736,97740,97782,97786,97789,97792,97795,97798,97801,97863,97923,97927,97930,97987,97991,97996,98005,98010],[10,97532,97528],{"id":97533},"_5改变数组的维度",[84,97535,97537],{"id":97536},"_51-使用reshape","5.1 使用reshape()",[14,97539,97540],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97542,97543],{},"①一维数组转换为二维数组",[133,97545,97547],{"className":30407,"code":97546,"language":30409,"meta":31,"style":31},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[139,97548,97549,97565,97570,97575,97580],{"__ignoreMap":31},[142,97550,97551,97553,97555,97557,97559,97561,97563],{"class":144,"line":145},[142,97552,391],{"class":152},[142,97554,198],{"class":148},[142,97556,93031],{"class":152},[142,97558,370],{"class":201},[142,97560,531],{"class":152},[142,97562,676],{"class":201},[142,97564,159],{"class":152},[142,97566,97567],{"class":144,"line":64},[142,97568,97569],{"class":211},"#将一维数组进行转换\n",[142,97571,97572],{"class":144,"line":1208},[142,97573,97574],{"class":211},"#注意点：元素个数不可以变\n",[142,97576,97577],{"class":144,"line":1223},[142,97578,97579],{"class":211},"#转换维度要保持一致，不一致就异常！！！\n",[142,97581,97582,97584,97586,97589,97591,97593,97595],{"class":144,"line":1229},[142,97583,93335],{"class":152},[142,97585,198],{"class":148},[142,97587,97588],{"class":152},"a.reshape(",[142,97590,230],{"class":201},[142,97592,531],{"class":152},[142,97594,497],{"class":201},[142,97596,159],{"class":152},[14,97598,97599],{},"②一维数组转换为三维数组",[133,97601,97603],{"className":30407,"code":97602,"language":30409,"meta":31,"style":31},"aaa=a.reshape(2,3,2)\n",[139,97604,97605],{"__ignoreMap":31},[142,97606,97607,97609,97611,97613,97615,97617,97619,97621,97623],{"class":144,"line":145},[142,97608,95530],{"class":152},[142,97610,198],{"class":148},[142,97612,97588],{"class":152},[142,97614,230],{"class":201},[142,97616,531],{"class":152},[142,97618,224],{"class":201},[142,97620,531],{"class":152},[142,97622,230],{"class":201},[142,97624,159],{"class":152},[14,97626,97627],{},"③二维数组转化为一维数组",[133,97629,97631],{"className":30407,"code":97630,"language":30409,"meta":31,"style":31},"#知道元素个数：\naa.reshape(12)\n",[139,97632,97633,97638],{"__ignoreMap":31},[142,97634,97635],{"class":144,"line":145},[142,97636,97637],{"class":211},"#知道元素个数：\n",[142,97639,97640,97643,97645],{"class":144,"line":64},[142,97641,97642],{"class":152},"aa.reshape(",[142,97644,651],{"class":201},[142,97646,159],{"class":152},[133,97648,97650],{"className":30407,"code":97649,"language":30409,"meta":31,"style":31},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[139,97651,97652,97657],{"__ignoreMap":31},[142,97653,97654],{"class":144,"line":145},[142,97655,97656],{"class":211},"#不知道元素个数，参数传递-1\n",[142,97658,97659,97661,97663,97665],{"class":144,"line":64},[142,97660,97642],{"class":152},[142,97662,685],{"class":148},[142,97664,370],{"class":201},[142,97666,159],{"class":152},[14,97668,97669],{},"④三维数组转换为一维数组",[133,97671,97673],{"className":30407,"code":97672,"language":30409,"meta":31,"style":31},"aaa.reshape(-1)\n",[139,97674,97675],{"__ignoreMap":31},[142,97676,97677,97680,97682,97684],{"class":144,"line":145},[142,97678,97679],{"class":152},"aaa.reshape(",[142,97681,685],{"class":148},[142,97683,370],{"class":201},[142,97685,159],{"class":152},[84,97687,97689],{"id":97688},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[133,97691,97693],{"className":30407,"code":97692,"language":30409,"meta":31,"style":31},"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",[139,97694,97695,97722,97727,97731],{"__ignoreMap":31},[142,97696,97697,97699,97701,97703,97705,97707,97709,97711,97713,97715,97717,97719],{"class":144,"line":145},[142,97698,93335],{"class":152},[142,97700,198],{"class":148},[142,97702,93031],{"class":152},[142,97704,370],{"class":201},[142,97706,531],{"class":152},[142,97708,676],{"class":201},[142,97710,93036],{"class":152},[142,97712,230],{"class":201},[142,97714,531],{"class":152},[142,97716,497],{"class":201},[142,97718,582],{"class":152},[142,97720,97721],{"class":211},"#转换为2行6列的数组\n",[142,97723,97724],{"class":144,"line":64},[142,97725,97726],{"class":152},"aa.revel()\n",[142,97728,97729],{"class":144,"line":1208},[142,97730,93593],{"class":211},[142,97732,97733],{"class":144,"line":1223},[142,97734,97735],{"class":211},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[84,97737,97739],{"id":97738},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[133,97741,97743],{"className":30407,"code":97742,"language":30409,"meta":31,"style":31},"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",[139,97744,97745,97769,97774,97778],{"__ignoreMap":31},[142,97746,97747,97749,97751,97753,97755,97757,97759,97761,97763,97765,97767],{"class":144,"line":145},[142,97748,93335],{"class":152},[142,97750,198],{"class":148},[142,97752,93031],{"class":152},[142,97754,370],{"class":201},[142,97756,531],{"class":152},[142,97758,676],{"class":201},[142,97760,93036],{"class":152},[142,97762,230],{"class":201},[142,97764,531],{"class":152},[142,97766,497],{"class":201},[142,97768,159],{"class":152},[142,97770,97771],{"class":144,"line":64},[142,97772,97773],{"class":152},"aa.flatten()\n",[142,97775,97776],{"class":144,"line":1208},[142,97777,93593],{"class":211},[142,97779,97780],{"class":144,"line":1223},[142,97781,97735],{"class":211},[84,97783,97785],{"id":97784},"_54-使用resize","5.4 使用resize()",[14,97787,97788],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97790,97791],{},"通过resize方法可以改变数组的维度",[14,97793,97794],{},"#resize修改数组维度",[14,97796,97797],{},"#以元组的形式指定形状",[14,97799,97800],{},"#改变的是原数组",[133,97802,97804],{"className":30407,"code":97803,"language":30409,"meta":31,"style":31},"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",[139,97805,97806,97822,97842,97855,97859],{"__ignoreMap":31},[142,97807,97808,97810,97812,97814,97816,97818,97820],{"class":144,"line":145},[142,97809,391],{"class":152},[142,97811,198],{"class":148},[142,97813,93031],{"class":152},[142,97815,370],{"class":201},[142,97817,531],{"class":152},[142,97819,676],{"class":201},[142,97821,159],{"class":152},[142,97823,97824,97827,97829,97831,97833,97835,97837,97839],{"class":144,"line":64},[142,97825,97826],{"class":152},"a.shape",[142,97828,198],{"class":148},[142,97830,153],{"class":152},[142,97832,230],{"class":201},[142,97834,531],{"class":152},[142,97836,497],{"class":201},[142,97838,582],{"class":152},[142,97840,97841],{"class":211},"#改变了原数组\n",[142,97843,97844,97846,97848,97851,97853],{"class":144,"line":1208},[142,97845,391],{"class":152},[142,97847,198],{"class":148},[142,97849,97850],{"class":152},"resize((",[142,97852,651],{"class":201},[142,97854,30526],{"class":152},[142,97856,97857],{"class":144,"line":1223},[142,97858,93593],{"class":211},[142,97860,97861],{"class":144,"line":1229},[142,97862,97735],{"class":211},[133,97864,97866],{"className":30407,"code":97865,"language":30409,"meta":31,"style":31},"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",[139,97867,97868,97881,97885,97889,97894,97899,97904,97909,97914,97919],{"__ignoreMap":31},[142,97869,97870,97873,97875,97877,97879],{"class":144,"line":145},[142,97871,97872],{"class":152},"a.resize((",[142,97874,497],{"class":201},[142,97876,531],{"class":152},[142,97878,230],{"class":201},[142,97880,30526],{"class":152},[142,97882,97883],{"class":144,"line":64},[142,97884,93593],{"class":211},[142,97886,97887],{"class":144,"line":1208},[142,97888,93957],{"class":257},[142,97890,97891],{"class":144,"line":1223},[142,97892,97893],{"class":257},"array([[ 1,  2],\n",[142,97895,97896],{"class":144,"line":1229},[142,97897,97898],{"class":257},"       [ 3,  4],\n",[142,97900,97901],{"class":144,"line":1243},[142,97902,97903],{"class":257},"       [ 5,  6],\n",[142,97905,97906],{"class":144,"line":1249},[142,97907,97908],{"class":257},"       [ 7,  8],\n",[142,97910,97911],{"class":144,"line":1340},[142,97912,97913],{"class":257},"       [ 9, 10],\n",[142,97915,97916],{"class":144,"line":1346},[142,97917,97918],{"class":257},"       [11, 12]])\n",[142,97920,97921],{"class":144,"line":1358},[142,97922,93957],{"class":257},[84,97924,97926],{"id":97925},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97928,97929],{},"改变了原数组",[133,97931,97933],{"className":30407,"code":97932,"language":30409,"meta":31,"style":31},"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",[139,97934,97935,97951,97967,97971,97975,97979,97983],{"__ignoreMap":31},[142,97936,97937,97939,97941,97943,97945,97947,97949],{"class":144,"line":145},[142,97938,391],{"class":152},[142,97940,198],{"class":148},[142,97942,93031],{"class":152},[142,97944,370],{"class":201},[142,97946,531],{"class":152},[142,97948,676],{"class":201},[142,97950,159],{"class":152},[142,97952,97953,97955,97957,97959,97961,97963,97965],{"class":144,"line":64},[142,97954,97826],{"class":152},[142,97956,198],{"class":148},[142,97958,153],{"class":152},[142,97960,230],{"class":201},[142,97962,531],{"class":152},[142,97964,497],{"class":201},[142,97966,159],{"class":152},[142,97968,97969],{"class":144,"line":1208},[142,97970,93593],{"class":211},[142,97972,97973],{"class":144,"line":1223},[142,97974,93957],{"class":257},[142,97976,97977],{"class":144,"line":1229},[142,97978,97197],{"class":257},[142,97980,97981],{"class":144,"line":1243},[142,97982,97202],{"class":257},[142,97984,97985],{"class":144,"line":1249},[142,97986,93957],{"class":257},[84,97988,97990],{"id":97989},"_56-重要比较","5.6 重要比较：",[14,97992,97993],{},[29,97994],{"alt":31,"src":97995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,97997,97998,97999,98001,98002,98004],{},"口诀：NumPy 函数要么用 ",[139,98000,95972],{},"，要么用 ",[139,98003,31525],{},"，创建结构用 shape，造数据用 size",[14,98006,98007],{},[29,98008],{"alt":31,"src":98009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5155,98011,98012],{},"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":31,"searchDepth":64,"depth":64,"links":98014},[98015,98016,98017,98018,98019,98020],{"id":97536,"depth":64,"text":97537},{"id":97688,"depth":64,"text":97689},{"id":97738,"depth":64,"text":97739},{"id":97784,"depth":64,"text":97785},{"id":97925,"depth":64,"text":97926},{"id":97989,"depth":64,"text":97990},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97528,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98027,"title":98028,"body":98029,"description":66,"extension":67,"meta":99101,"navigation":69,"path":99102,"seo":99103,"stem":99104,"__hash__":99105},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98030,"toc":99095},[98031,98034,98038,98041,98044,98047,98112,98115,98155,98158,98240,98243,98248,98270,98272,98277,98282,98285,98288,98443,98446,98648,98652,98655,98658,98726,98728,98733,98736,98739,98819,98823,98826,98828,98901,98903,98908,98910,98990,98994,98997,99000,99003,99006,99009,99012,99092],[10,98032,98028],{"id":98033},"_6数组的拼接",[84,98035,98037],{"id":98036},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98039,98040],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98042,98043],{},"函数内部传两个数列构成的数列或者元组",[14,98045,98046],{},"①一维数组的拼接",[133,98048,98050],{"className":30407,"code":98049,"language":30409,"meta":31,"style":31},"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",[139,98051,98052,98072,98092,98097,98102,98107],{"__ignoreMap":31},[142,98053,98054,98056,98058,98060,98062,98064,98066,98068,98070],{"class":144,"line":145},[142,98055,391],{"class":152},[142,98057,198],{"class":148},[142,98059,93053],{"class":152},[142,98061,370],{"class":201},[142,98063,531],{"class":152},[142,98065,230],{"class":201},[142,98067,531],{"class":152},[142,98069,224],{"class":201},[142,98071,4685],{"class":152},[142,98073,98074,98076,98078,98080,98082,98084,98086,98088,98090],{"class":144,"line":64},[142,98075,416],{"class":152},[142,98077,198],{"class":148},[142,98079,93053],{"class":152},[142,98081,446],{"class":201},[142,98083,531],{"class":152},[142,98085,472],{"class":201},[142,98087,531],{"class":152},[142,98089,497],{"class":201},[142,98091,4685],{"class":152},[142,98093,98094],{"class":144,"line":1208},[142,98095,98096],{"class":211},"#调用concatenate进行数组拼接\n",[142,98098,98099],{"class":144,"line":1223},[142,98100,98101],{"class":152},"np.concatenate((a,b))\n",[142,98103,98104],{"class":144,"line":1229},[142,98105,98106],{"class":211},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[142,98108,98109],{"class":144,"line":1243},[142,98110,98111],{"class":211},"#np.concatenate([a,b])\n",[14,98113,98114],{},"②一维多个数组拼接",[133,98116,98118],{"className":30407,"code":98117,"language":30409,"meta":31,"style":31},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[139,98119,98120,98125,98145,98150],{"__ignoreMap":31},[142,98121,98122],{"class":144,"line":145},[142,98123,98124],{"class":211},"#也可以多个数组进行拼接\n",[142,98126,98127,98129,98131,98133,98135,98137,98139,98141,98143],{"class":144,"line":64},[142,98128,441],{"class":152},[142,98130,198],{"class":148},[142,98132,93053],{"class":152},[142,98134,599],{"class":201},[142,98136,531],{"class":152},[142,98138,625],{"class":201},[142,98140,531],{"class":152},[142,98142,676],{"class":201},[142,98144,4685],{"class":152},[142,98146,98147],{"class":144,"line":1208},[142,98148,98149],{"class":152},"c\n",[142,98151,98152],{"class":144,"line":1223},[142,98153,98154],{"class":152},"np.concatenate((a,b,c))\n",[14,98156,98157],{},"③二维数组拼接",[133,98159,98161],{"className":30407,"code":98160,"language":30409,"meta":31,"style":31},"#二维数组使用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",[139,98162,98163,98168,98192,98217,98222,98227],{"__ignoreMap":31},[142,98164,98165],{"class":144,"line":145},[142,98166,98167],{"class":211},"#二维数组使用concatenate进行拼接\n",[142,98169,98170,98172,98174,98176,98178,98180,98182,98184,98186,98188,98190],{"class":144,"line":64},[142,98171,93335],{"class":152},[142,98173,198],{"class":148},[142,98175,93031],{"class":152},[142,98177,370],{"class":201},[142,98179,531],{"class":152},[142,98181,676],{"class":201},[142,98183,93036],{"class":152},[142,98185,224],{"class":201},[142,98187,531],{"class":152},[142,98189,446],{"class":201},[142,98191,159],{"class":152},[142,98193,98194,98197,98199,98201,98203,98205,98207,98209,98211,98213,98215],{"class":144,"line":1208},[142,98195,98196],{"class":152},"bb",[142,98198,198],{"class":148},[142,98200,93031],{"class":152},[142,98202,490],{"class":201},[142,98204,531],{"class":152},[142,98206,795],{"class":201},[142,98208,93036],{"class":152},[142,98210,224],{"class":201},[142,98212,531],{"class":152},[142,98214,446],{"class":201},[142,98216,159],{"class":152},[142,98218,98219],{"class":144,"line":1223},[142,98220,98221],{"class":211},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[142,98223,98224],{"class":144,"line":1229},[142,98225,98226],{"class":211},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[142,98228,98229,98232,98234,98236,98238],{"class":144,"line":1243},[142,98230,98231],{"class":152},"np.concatenate((aa,bb),",[142,98233,47543],{"class":5245},[142,98235,198],{"class":148},[142,98237,344],{"class":201},[142,98239,159],{"class":152},[14,98241,98242],{},"结果：",[14,98244,98245],{},[29,98246],{"alt":31,"src":98247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[133,98249,98251],{"className":30407,"code":98250,"language":30409,"meta":31,"style":31},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[139,98252,98253,98258],{"__ignoreMap":31},[142,98254,98255],{"class":144,"line":145},[142,98256,98257],{"class":211},"#指定axis为1进行拼接\n",[142,98259,98260,98262,98264,98266,98268],{"class":144,"line":64},[142,98261,98231],{"class":152},[142,98263,47543],{"class":5245},[142,98265,198],{"class":148},[142,98267,370],{"class":201},[142,98269,159],{"class":152},[14,98271,98242],{},[14,98273,98274],{},[29,98275],{"alt":31,"src":98276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98278,98279],{},[302,98280,98281],{},"二维数组总结：0竖着方向，1横着方向",[14,98283,98284],{},"④三维数组拼接",[14,98286,98287],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[133,98289,98291],{"className":30407,"code":98290,"language":30409,"meta":31,"style":31},"#两个三行六列\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",[139,98292,98293,98298,98326,98356,98361,98378,98383,98388,98393,98410,98415,98420,98425,98438],{"__ignoreMap":31},[142,98294,98295],{"class":144,"line":145},[142,98296,98297],{"class":211},"#两个三行六列\n",[142,98299,98300,98302,98304,98306,98308,98310,98312,98314,98316,98318,98320,98322,98324],{"class":144,"line":64},[142,98301,95530],{"class":152},[142,98303,198],{"class":148},[142,98305,93031],{"class":152},[142,98307,370],{"class":201},[142,98309,531],{"class":152},[142,98311,478],{"class":201},[142,98313,93036],{"class":152},[142,98315,230],{"class":201},[142,98317,531],{"class":152},[142,98319,224],{"class":201},[142,98321,531],{"class":152},[142,98323,497],{"class":201},[142,98325,159],{"class":152},[142,98327,98328,98331,98333,98335,98337,98339,98342,98344,98346,98348,98350,98352,98354],{"class":144,"line":1208},[142,98329,98330],{"class":152},"bbb",[142,98332,198],{"class":148},[142,98334,93031],{"class":152},[142,98336,490],{"class":201},[142,98338,531],{"class":152},[142,98340,98341],{"class":201},"137",[142,98343,93036],{"class":152},[142,98345,230],{"class":201},[142,98347,531],{"class":152},[142,98349,224],{"class":201},[142,98351,531],{"class":152},[142,98353,497],{"class":201},[142,98355,159],{"class":152},[142,98357,98358],{"class":144,"line":1223},[142,98359,98360],{"class":211},"#axis=0\n",[142,98362,98363,98365,98367,98370,98372,98374,98376],{"class":144,"line":1229},[142,98364,848],{"class":152},[142,98366,198],{"class":148},[142,98368,98369],{"class":152},"np.concatenate((aaa,bbb),",[142,98371,47543],{"class":5245},[142,98373,198],{"class":148},[142,98375,344],{"class":201},[142,98377,159],{"class":152},[142,98379,98380],{"class":144,"line":1243},[142,98381,98382],{"class":152},"s.shape\n",[142,98384,98385],{"class":144,"line":1249},[142,98386,98387],{"class":211},"#输出：(4,3,6)\n",[142,98389,98390],{"class":144,"line":1340},[142,98391,98392],{"class":211},"#axis=1\n",[142,98394,98395,98398,98400,98402,98404,98406,98408],{"class":144,"line":1346},[142,98396,98397],{"class":152},"ss",[142,98399,198],{"class":148},[142,98401,98369],{"class":152},[142,98403,47543],{"class":5245},[142,98405,198],{"class":148},[142,98407,370],{"class":201},[142,98409,159],{"class":152},[142,98411,98412],{"class":144,"line":1358},[142,98413,98414],{"class":152},"ss.shape\n",[142,98416,98417],{"class":144,"line":1640},[142,98418,98419],{"class":211},"#输出：(2,6,6)\n",[142,98421,98422],{"class":144,"line":1645},[142,98423,98424],{"class":211},"#axis=2\n",[142,98426,98427,98429,98431,98433,98435],{"class":144,"line":1651},[142,98428,98369],{"class":152},[142,98430,47543],{"class":5245},[142,98432,198],{"class":148},[142,98434,230],{"class":201},[142,98436,98437],{"class":152},").shape\n",[142,98439,98440],{"class":144,"line":1656},[142,98441,98442],{"class":211},"#输出：（2，3，12）\n",[14,98444,98445],{},"⑤四维数组拼接",[133,98447,98449],{"className":30407,"code":98448,"language":30409,"meta":31,"style":31},"#两个三行六列\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",[139,98450,98451,98455,98483,98511,98536,98562,98566,98579,98584,98588,98600,98605,98609,98621,98626,98631,98643],{"__ignoreMap":31},[142,98452,98453],{"class":144,"line":145},[142,98454,98297],{"class":211},[142,98456,98457,98459,98461,98463,98465,98467,98469,98471,98473,98475,98477,98479,98481],{"class":144,"line":64},[142,98458,95530],{"class":152},[142,98460,198],{"class":148},[142,98462,93031],{"class":152},[142,98464,370],{"class":201},[142,98466,531],{"class":152},[142,98468,478],{"class":201},[142,98470,93036],{"class":152},[142,98472,230],{"class":201},[142,98474,531],{"class":152},[142,98476,224],{"class":201},[142,98478,531],{"class":152},[142,98480,497],{"class":201},[142,98482,159],{"class":152},[142,98484,98485,98487,98489,98491,98493,98495,98497,98499,98501,98503,98505,98507,98509],{"class":144,"line":1208},[142,98486,98330],{"class":152},[142,98488,198],{"class":148},[142,98490,93031],{"class":152},[142,98492,490],{"class":201},[142,98494,531],{"class":152},[142,98496,98341],{"class":201},[142,98498,93036],{"class":152},[142,98500,230],{"class":201},[142,98502,531],{"class":152},[142,98504,224],{"class":201},[142,98506,531],{"class":152},[142,98508,497],{"class":201},[142,98510,159],{"class":152},[142,98512,98513,98516,98518,98520,98522,98524,98526,98528,98530,98532,98534],{"class":144,"line":1223},[142,98514,98515],{"class":152},"aaaa",[142,98517,198],{"class":148},[142,98519,97679],{"class":152},[142,98521,230],{"class":201},[142,98523,531],{"class":152},[142,98525,224],{"class":201},[142,98527,531],{"class":152},[142,98529,224],{"class":201},[142,98531,531],{"class":152},[142,98533,230],{"class":201},[142,98535,159],{"class":152},[142,98537,98538,98541,98543,98546,98548,98550,98552,98554,98556,98558,98560],{"class":144,"line":1229},[142,98539,98540],{"class":152},"bbbb",[142,98542,198],{"class":148},[142,98544,98545],{"class":152},"bbb.reshape(",[142,98547,230],{"class":201},[142,98549,531],{"class":152},[142,98551,224],{"class":201},[142,98553,531],{"class":152},[142,98555,224],{"class":201},[142,98557,531],{"class":152},[142,98559,230],{"class":201},[142,98561,159],{"class":152},[142,98563,98564],{"class":144,"line":1243},[142,98565,98360],{"class":211},[142,98567,98568,98571,98573,98575,98577],{"class":144,"line":1249},[142,98569,98570],{"class":152},"np.concatenate((aaaa,bbbb),",[142,98572,47543],{"class":5245},[142,98574,198],{"class":148},[142,98576,344],{"class":201},[142,98578,98437],{"class":152},[142,98580,98581],{"class":144,"line":1340},[142,98582,98583],{"class":211},"#结果：（4，3，3，2）\n",[142,98585,98586],{"class":144,"line":1346},[142,98587,98392],{"class":211},[142,98589,98590,98592,98594,98596,98598],{"class":144,"line":1358},[142,98591,98570],{"class":152},[142,98593,47543],{"class":5245},[142,98595,198],{"class":148},[142,98597,370],{"class":201},[142,98599,98437],{"class":152},[142,98601,98602],{"class":144,"line":1640},[142,98603,98604],{"class":211},"#结果：（2，6，3，2）\n",[142,98606,98607],{"class":144,"line":1645},[142,98608,98424],{"class":211},[142,98610,98611,98613,98615,98617,98619],{"class":144,"line":1651},[142,98612,98570],{"class":152},[142,98614,47543],{"class":5245},[142,98616,198],{"class":148},[142,98618,230],{"class":201},[142,98620,98437],{"class":152},[142,98622,98623],{"class":144,"line":1656},[142,98624,98625],{"class":211},"#结果：（2，3，6，2）\n",[142,98627,98628],{"class":144,"line":1670},[142,98629,98630],{"class":211},"#axis=3\n",[142,98632,98633,98635,98637,98639,98641],{"class":144,"line":1675},[142,98634,98570],{"class":152},[142,98636,47543],{"class":5245},[142,98638,198],{"class":148},[142,98640,224],{"class":201},[142,98642,98437],{"class":152},[142,98644,98645],{"class":144,"line":1681},[142,98646,98647],{"class":211},"#结果：（2，3，3，4）\n",[84,98649,98651],{"id":98650},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98653,98654],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98656,98657],{},"①二维数组",[133,98659,98661],{"className":30407,"code":98660,"language":30409,"meta":31,"style":31},"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",[139,98662,98663,98687,98711,98716,98721],{"__ignoreMap":31},[142,98664,98665,98667,98669,98671,98673,98675,98677,98679,98681,98683,98685],{"class":144,"line":145},[142,98666,93335],{"class":152},[142,98668,198],{"class":148},[142,98670,93031],{"class":152},[142,98672,370],{"class":201},[142,98674,531],{"class":152},[142,98676,676],{"class":201},[142,98678,93036],{"class":152},[142,98680,224],{"class":201},[142,98682,531],{"class":152},[142,98684,446],{"class":201},[142,98686,159],{"class":152},[142,98688,98689,98691,98693,98695,98697,98699,98701,98703,98705,98707,98709],{"class":144,"line":64},[142,98690,98196],{"class":152},[142,98692,198],{"class":148},[142,98694,93031],{"class":152},[142,98696,490],{"class":201},[142,98698,531],{"class":152},[142,98700,795],{"class":201},[142,98702,93036],{"class":152},[142,98704,224],{"class":201},[142,98706,531],{"class":152},[142,98708,446],{"class":201},[142,98710,159],{"class":152},[142,98712,98713],{"class":144,"line":1208},[142,98714,98715],{"class":152},"np.hstack((aa,bb))\n",[142,98717,98718],{"class":144,"line":1223},[142,98719,98720],{"class":211},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[142,98722,98723],{"class":144,"line":1229},[142,98724,98725],{"class":211},"#np.hstack([aa,bb])\n",[14,98727,98242],{},[14,98729,98730],{},[29,98731],{"alt":31,"src":98732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98734,98735],{},"等效于concatenate()函数中axis=1时的情况",[14,98737,98738],{},"②三维数组",[133,98740,98742],{"className":30407,"code":98741,"language":30409,"meta":31,"style":31},"#两个三行六列\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",[139,98743,98744,98748,98776,98804,98809,98814],{"__ignoreMap":31},[142,98745,98746],{"class":144,"line":145},[142,98747,98297],{"class":211},[142,98749,98750,98752,98754,98756,98758,98760,98762,98764,98766,98768,98770,98772,98774],{"class":144,"line":64},[142,98751,95530],{"class":152},[142,98753,198],{"class":148},[142,98755,93031],{"class":152},[142,98757,370],{"class":201},[142,98759,531],{"class":152},[142,98761,478],{"class":201},[142,98763,93036],{"class":152},[142,98765,230],{"class":201},[142,98767,531],{"class":152},[142,98769,224],{"class":201},[142,98771,531],{"class":152},[142,98773,497],{"class":201},[142,98775,159],{"class":152},[142,98777,98778,98780,98782,98784,98786,98788,98790,98792,98794,98796,98798,98800,98802],{"class":144,"line":1208},[142,98779,98330],{"class":152},[142,98781,198],{"class":148},[142,98783,93031],{"class":152},[142,98785,490],{"class":201},[142,98787,531],{"class":152},[142,98789,98341],{"class":201},[142,98791,93036],{"class":152},[142,98793,230],{"class":201},[142,98795,531],{"class":152},[142,98797,224],{"class":201},[142,98799,531],{"class":152},[142,98801,497],{"class":201},[142,98803,159],{"class":152},[142,98805,98806],{"class":144,"line":1223},[142,98807,98808],{"class":211},"#使用hstack\n",[142,98810,98811],{"class":144,"line":1229},[142,98812,98813],{"class":152},"np.hstack((aaa,bbb)).shape\n",[142,98815,98816],{"class":144,"line":1243},[142,98817,98818],{"class":211},"#输出：（2，6，6）\n",[84,98820,98822],{"id":98821},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98824,98825],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98827,98657],{},[133,98829,98831],{"className":30407,"code":98830,"language":30409,"meta":31,"style":31},"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",[139,98832,98833,98857,98881,98886,98891,98896],{"__ignoreMap":31},[142,98834,98835,98837,98839,98841,98843,98845,98847,98849,98851,98853,98855],{"class":144,"line":145},[142,98836,93335],{"class":152},[142,98838,198],{"class":148},[142,98840,93031],{"class":152},[142,98842,370],{"class":201},[142,98844,531],{"class":152},[142,98846,676],{"class":201},[142,98848,93036],{"class":152},[142,98850,224],{"class":201},[142,98852,531],{"class":152},[142,98854,446],{"class":201},[142,98856,159],{"class":152},[142,98858,98859,98861,98863,98865,98867,98869,98871,98873,98875,98877,98879],{"class":144,"line":64},[142,98860,98196],{"class":152},[142,98862,198],{"class":148},[142,98864,93031],{"class":152},[142,98866,490],{"class":201},[142,98868,531],{"class":152},[142,98870,795],{"class":201},[142,98872,93036],{"class":152},[142,98874,224],{"class":201},[142,98876,531],{"class":152},[142,98878,446],{"class":201},[142,98880,159],{"class":152},[142,98882,98883],{"class":144,"line":1208},[142,98884,98885],{"class":211},"#vstack 垂直方向进行堆叠\n",[142,98887,98888],{"class":144,"line":1223},[142,98889,98890],{"class":152},"np.vstack((aa,bb))\n",[142,98892,98893],{"class":144,"line":1229},[142,98894,98895],{"class":211},"#与hstack传的参数类似，等价于：\n",[142,98897,98898],{"class":144,"line":1243},[142,98899,98900],{"class":152},"np.vstack([aa,bb])\n",[14,98902,98242],{},[14,98904,98905],{},[29,98906],{"alt":31,"src":98907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98909,98738],{},[133,98911,98913],{"className":30407,"code":98912,"language":30409,"meta":31,"style":31},"#两个三行六列\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",[139,98914,98915,98919,98947,98975,98980,98985],{"__ignoreMap":31},[142,98916,98917],{"class":144,"line":145},[142,98918,98297],{"class":211},[142,98920,98921,98923,98925,98927,98929,98931,98933,98935,98937,98939,98941,98943,98945],{"class":144,"line":64},[142,98922,95530],{"class":152},[142,98924,198],{"class":148},[142,98926,93031],{"class":152},[142,98928,370],{"class":201},[142,98930,531],{"class":152},[142,98932,478],{"class":201},[142,98934,93036],{"class":152},[142,98936,230],{"class":201},[142,98938,531],{"class":152},[142,98940,224],{"class":201},[142,98942,531],{"class":152},[142,98944,497],{"class":201},[142,98946,159],{"class":152},[142,98948,98949,98951,98953,98955,98957,98959,98961,98963,98965,98967,98969,98971,98973],{"class":144,"line":1208},[142,98950,98330],{"class":152},[142,98952,198],{"class":148},[142,98954,93031],{"class":152},[142,98956,490],{"class":201},[142,98958,531],{"class":152},[142,98960,98341],{"class":201},[142,98962,93036],{"class":152},[142,98964,230],{"class":201},[142,98966,531],{"class":152},[142,98968,224],{"class":201},[142,98970,531],{"class":152},[142,98972,497],{"class":201},[142,98974,159],{"class":152},[142,98976,98977],{"class":144,"line":1223},[142,98978,98979],{"class":211},"#使用vstack\n",[142,98981,98982],{"class":144,"line":1229},[142,98983,98984],{"class":152},"np.vstack((aaa,bbb)).shape\n",[142,98986,98987],{"class":144,"line":1243},[142,98988,98989],{"class":211},"#输出：（4，3，6）\n",[84,98991,98993],{"id":98992},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,98995,98996],{},"该方法是三维数组特有的方法",[14,98998,98999],{},"也就是说",[14,99001,99002],{},"一维数组拼接方法用：concatenate()",[14,99004,99005],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99007,99008],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99010,99011],{},"四维数组及多维数组只能用concatenate进行拼接",[133,99013,99015],{"className":30407,"code":99014,"language":30409,"meta":31,"style":31},"#两个三行六列\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",[139,99016,99017,99021,99049,99077,99082,99087],{"__ignoreMap":31},[142,99018,99019],{"class":144,"line":145},[142,99020,98297],{"class":211},[142,99022,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045,99047],{"class":144,"line":64},[142,99024,95530],{"class":152},[142,99026,198],{"class":148},[142,99028,93031],{"class":152},[142,99030,370],{"class":201},[142,99032,531],{"class":152},[142,99034,478],{"class":201},[142,99036,93036],{"class":152},[142,99038,230],{"class":201},[142,99040,531],{"class":152},[142,99042,224],{"class":201},[142,99044,531],{"class":152},[142,99046,497],{"class":201},[142,99048,159],{"class":152},[142,99050,99051,99053,99055,99057,99059,99061,99063,99065,99067,99069,99071,99073,99075],{"class":144,"line":1208},[142,99052,98330],{"class":152},[142,99054,198],{"class":148},[142,99056,93031],{"class":152},[142,99058,490],{"class":201},[142,99060,531],{"class":152},[142,99062,98341],{"class":201},[142,99064,93036],{"class":152},[142,99066,230],{"class":201},[142,99068,531],{"class":152},[142,99070,224],{"class":201},[142,99072,531],{"class":152},[142,99074,497],{"class":201},[142,99076,159],{"class":152},[142,99078,99079],{"class":144,"line":1223},[142,99080,99081],{"class":211},"#使用dstack\n",[142,99083,99084],{"class":144,"line":1229},[142,99085,99086],{"class":152},"np.dstack((aaa,bbb)).shape\n",[142,99088,99089],{"class":144,"line":1243},[142,99090,99091],{"class":211},"#结果：（2，3，12）\n",[5155,99093,99094],{},"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":31,"searchDepth":64,"depth":64,"links":99096},[99097,99098,99099,99100],{"id":98036,"depth":64,"text":98037},{"id":98650,"depth":64,"text":98651},{"id":98821,"depth":64,"text":98822},{"id":98992,"depth":64,"text":98993},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98028,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99107,"title":99108,"body":99109,"description":66,"extension":67,"meta":99384,"navigation":69,"path":99385,"seo":99386,"stem":99387,"__hash__":99388},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99110,"toc":99382},[99111,99114,99117,99211,99214,99217,99220,99223,99226,99229,99232,99235,99379],[10,99112,99108],{"id":99113},"_7数组转置",[14,99115,99116],{},"使用transpose()函数",[133,99118,99120],{"className":30407,"code":99119,"language":30409,"meta":31,"style":31},"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",[139,99121,99122,99132,99156,99161,99166,99171,99176,99184,99188,99192,99197,99202,99207],{"__ignoreMap":31},[142,99123,99124,99126,99128,99130],{"class":144,"line":145},[142,99125,30421],{"class":148},[142,99127,31409],{"class":152},[142,99129,31412],{"class":148},[142,99131,31415],{"class":152},[142,99133,99134,99136,99138,99140,99142,99144,99146,99148,99150,99152,99154],{"class":144,"line":64},[142,99135,391],{"class":152},[142,99137,198],{"class":148},[142,99139,31746],{"class":152},[142,99141,370],{"class":201},[142,99143,531],{"class":152},[142,99145,676],{"class":201},[142,99147,93036],{"class":152},[142,99149,446],{"class":201},[142,99151,531],{"class":152},[142,99153,224],{"class":201},[142,99155,159],{"class":152},[142,99157,99158],{"class":144,"line":1208},[142,99159,99160],{"class":211},"#二维数组转置\n",[142,99162,99163],{"class":144,"line":1223},[142,99164,99165],{"class":211},"#调用transpose()函数\n",[142,99167,99168],{"class":144,"line":1229},[142,99169,99170],{"class":152},"a.transpose()\n",[142,99172,99173],{"class":144,"line":1243},[142,99174,99175],{"class":211},"#对于二维数组也可以采用.T来实现\n",[142,99177,99178,99181],{"class":144,"line":1249},[142,99179,99180],{"class":152},"a.T",[142,99182,99183],{"class":211},"#与上述代码一样\n",[142,99185,99186],{"class":144,"line":1340},[142,99187,93593],{"class":211},[142,99189,99190],{"class":144,"line":1346},[142,99191,93957],{"class":257},[142,99193,99194],{"class":144,"line":1358},[142,99195,99196],{"class":257},"array([[ 1,  4,  7, 10],\n",[142,99198,99199],{"class":144,"line":1640},[142,99200,99201],{"class":257},"       [ 2,  5,  8, 11],\n",[142,99203,99204],{"class":144,"line":1645},[142,99205,99206],{"class":257},"       [ 3,  6,  9, 12]])\n",[142,99208,99209],{"class":144,"line":1651},[142,99210,93957],{"class":257},[14,99212,99213],{},"也可以使用np.transpose()的形式",[14,99215,99216],{},"#多维数组进行转置 np.transpose()",[14,99218,99219],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99221,99222],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99224,99225],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99227,99228],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99230,99231],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99233,99234],{},"四维及以上的数组也是一样的道理",[133,99236,99238],{"className":30407,"code":99237,"language":30409,"meta":31,"style":31},"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",[139,99239,99240,99268,99273,99278,99283,99301,99306,99338,99343,99348,99353,99374],{"__ignoreMap":31},[142,99241,99242,99244,99246,99248,99250,99252,99254,99256,99258,99260,99262,99264,99266],{"class":144,"line":145},[142,99243,973],{"class":152},[142,99245,198],{"class":148},[142,99247,93031],{"class":152},[142,99249,370],{"class":201},[142,99251,531],{"class":152},[142,99253,478],{"class":201},[142,99255,93036],{"class":152},[142,99257,224],{"class":201},[142,99259,531],{"class":152},[142,99261,497],{"class":201},[142,99263,531],{"class":152},[142,99265,230],{"class":201},[142,99267,159],{"class":152},[142,99269,99270],{"class":144,"line":64},[142,99271,99272],{"class":152},"x.shape\n",[142,99274,99275],{"class":144,"line":1208},[142,99276,99277],{"class":211},"#结果：（3,6,2）\n",[142,99279,99280],{"class":144,"line":1223},[142,99281,99282],{"class":211},"#使用np.transpose()进行转置 变为(2,6,3)\n",[142,99284,99285,99288,99290,99292,99294,99296,99298],{"class":144,"line":1229},[142,99286,99287],{"class":152},"np.transpose(x,(",[142,99289,230],{"class":201},[142,99291,531],{"class":152},[142,99293,370],{"class":201},[142,99295,531],{"class":152},[142,99297,344],{"class":201},[142,99299,99300],{"class":152},")).shape\n",[142,99302,99303],{"class":144,"line":1243},[142,99304,99305],{"class":211},"#结果：(2,6,3)\n",[142,99307,99308,99310,99312,99314,99316,99318,99320,99322,99324,99326,99328,99330,99332,99334,99336],{"class":144,"line":1249},[142,99309,98515],{"class":152},[142,99311,198],{"class":148},[142,99313,93031],{"class":152},[142,99315,370],{"class":201},[142,99317,531],{"class":152},[142,99319,478],{"class":201},[142,99321,93036],{"class":152},[142,99323,224],{"class":201},[142,99325,531],{"class":152},[142,99327,230],{"class":201},[142,99329,531],{"class":152},[142,99331,370],{"class":201},[142,99333,531],{"class":152},[142,99335,497],{"class":201},[142,99337,159],{"class":152},[142,99339,99340],{"class":144,"line":1340},[142,99341,99342],{"class":152},"aaaa.shape\n",[142,99344,99345],{"class":144,"line":1346},[142,99346,99347],{"class":211},"#结果：（3，2，1，6）\n",[142,99349,99350],{"class":144,"line":1358},[142,99351,99352],{"class":211},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[142,99354,99355,99358,99360,99362,99364,99366,99368,99370,99372],{"class":144,"line":1640},[142,99356,99357],{"class":152},"np.transpose(aaaa,(",[142,99359,370],{"class":201},[142,99361,531],{"class":152},[142,99363,230],{"class":201},[142,99365,531],{"class":152},[142,99367,344],{"class":201},[142,99369,531],{"class":152},[142,99371,224],{"class":201},[142,99373,99300],{"class":152},[142,99375,99376],{"class":144,"line":1645},[142,99377,99378],{"class":211},"#结果：(2,1,3,6)\n",[5155,99380,99381],{},"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":31,"searchDepth":64,"depth":64,"links":99383},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99108,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99390,"title":99391,"body":99392,"description":66,"extension":67,"meta":100126,"navigation":69,"path":100127,"seo":100128,"stem":100129,"__hash__":100130},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99393,"toc":100124},[99394,99397,99400,99403,99406,99409,99412,99415,99418,99527,99530,99533,100121],[10,99395,99391],{"id":99396},"_8数组分割",[14,99398,99399],{},"split分割",[14,99401,99402],{},"numpy.split(ary,indics_or_sections,axis)",[14,99404,99405],{},"解释：",[14,99407,99408],{},"ary:被分割的数组",[14,99410,99411],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99413,99414],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99416,99417],{},"①一维数组的分割",[133,99419,99421],{"className":30407,"code":99420,"language":30409,"meta":31,"style":31},"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",[139,99422,99423,99439,99444,99453,99457,99462,99470,99474,99479,99484,99497,99501,99506,99518,99522],{"__ignoreMap":31},[142,99424,99425,99427,99429,99431,99433,99435,99437],{"class":144,"line":145},[142,99426,391],{"class":152},[142,99428,198],{"class":148},[142,99430,93031],{"class":152},[142,99432,370],{"class":201},[142,99434,531],{"class":152},[142,99436,573],{"class":201},[142,99438,159],{"class":152},[142,99440,99441],{"class":144,"line":64},[142,99442,99443],{"class":211},"#如果传入整数，必须能够平分，否则会报错\n",[142,99445,99446,99449,99451],{"class":144,"line":1208},[142,99447,99448],{"class":152},"np.split(a,",[142,99450,230],{"class":201},[142,99452,159],{"class":152},[142,99454,99455],{"class":144,"line":1223},[142,99456,93593],{"class":211},[142,99458,99459],{"class":144,"line":1229},[142,99460,99461],{"class":211},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[142,99463,99464,99466,99468],{"class":144,"line":1243},[142,99465,99448],{"class":152},[142,99467,446],{"class":201},[142,99469,159],{"class":152},[142,99471,99472],{"class":144,"line":1249},[142,99473,93593],{"class":211},[142,99475,99476],{"class":144,"line":1340},[142,99477,99478],{"class":211},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[142,99480,99481],{"class":144,"line":1346},[142,99482,99483],{"class":211},"#传入数组\n",[142,99485,99486,99489,99491,99493,99495],{"class":144,"line":1358},[142,99487,99488],{"class":152},"np.split(a,[",[142,99490,224],{"class":201},[142,99492,531],{"class":152},[142,99494,472],{"class":201},[142,99496,4685],{"class":152},[142,99498,99499],{"class":144,"line":1640},[142,99500,93593],{"class":211},[142,99502,99503],{"class":144,"line":1645},[142,99504,99505],{"class":211},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[142,99507,99508,99510,99512,99514,99516],{"class":144,"line":1651},[142,99509,99488],{"class":152},[142,99511,472],{"class":201},[142,99513,531],{"class":152},[142,99515,522],{"class":201},[142,99517,4685],{"class":152},[142,99519,99520],{"class":144,"line":1656},[142,99521,93593],{"class":211},[142,99523,99524],{"class":144,"line":1670},[142,99525,99526],{"class":211},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99528,99529],{},"②二维数组的分割",[14,99531,99532],{},"使用split()",[133,99534,99536],{"className":30407,"code":99535,"language":30409,"meta":31,"style":31},"#二维数组分割\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",[139,99537,99538,99543,99567,99572,99581,99585,99589,99594,99599,99604,99609,99614,99619,99624,99628,99641,99645,99649,99653,99657,99661,99666,99671,99676,99680,99685,99701,99705,99709,99714,99719,99724,99729,99734,99739,99744,99749,99754,99759,99764,99769,99774,99779,99784,99789,99794,99799,99803,99807,99827,99831,99835,99840,99845,99850,99855,99860,99865,99870,99875,99880,99885,99890,99895,99900,99905,99910,99915,99920,99925,99929,99934,99943,99947,99951,99955,99959,99963,99967,99971,99975,99979,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100036,100040,100044,100048,100052,100056,100060,100064,100068,100072,100085,100089,100093,100097,100101,100105,100109,100113,100117],{"__ignoreMap":31},[142,99539,99540],{"class":144,"line":145},[142,99541,99542],{"class":211},"#二维数组分割\n",[142,99544,99545,99547,99549,99551,99553,99555,99557,99559,99561,99563,99565],{"class":144,"line":64},[142,99546,93335],{"class":152},[142,99548,198],{"class":148},[142,99550,93031],{"class":152},[142,99552,370],{"class":201},[142,99554,531],{"class":152},[142,99556,478],{"class":201},[142,99558,93036],{"class":152},[142,99560,497],{"class":201},[142,99562,531],{"class":152},[142,99564,497],{"class":201},[142,99566,159],{"class":152},[142,99568,99569],{"class":144,"line":1208},[142,99570,99571],{"class":211},"#默认axis=0  传入整数平均分,按行来的\n",[142,99573,99574,99577,99579],{"class":144,"line":1223},[142,99575,99576],{"class":152},"np.split(aa,",[142,99578,224],{"class":201},[142,99580,159],{"class":152},[142,99582,99583],{"class":144,"line":1229},[142,99584,95773],{"class":211},[142,99586,99587],{"class":144,"line":1243},[142,99588,93957],{"class":257},[142,99590,99591],{"class":144,"line":1249},[142,99592,99593],{"class":257},"[array([[ 1,  2,  3,  4,  5,  6],\n",[142,99595,99596],{"class":144,"line":1340},[142,99597,99598],{"class":257},"        [ 7,  8,  9, 10, 11, 12]]),\n",[142,99600,99601],{"class":144,"line":1346},[142,99602,99603],{"class":257}," array([[13, 14, 15, 16, 17, 18],\n",[142,99605,99606],{"class":144,"line":1358},[142,99607,99608],{"class":257},"        [19, 20, 21, 22, 23, 24]]),\n",[142,99610,99611],{"class":144,"line":1640},[142,99612,99613],{"class":257}," array([[25, 26, 27, 28, 29, 30],\n",[142,99615,99616],{"class":144,"line":1645},[142,99617,99618],{"class":257},"        [31, 32, 33, 34, 35, 36]])]\n",[142,99620,99621],{"class":144,"line":1651},[142,99622,99623],{"class":257}," '''\n",[142,99625,99626],{"class":144,"line":1656},[142,99627,99483],{"class":211},[142,99629,99630,99633,99635,99637,99639],{"class":144,"line":1670},[142,99631,99632],{"class":152},"np.split(aa,[",[142,99634,230],{"class":201},[142,99636,531],{"class":152},[142,99638,472],{"class":201},[142,99640,4685],{"class":152},[142,99642,99643],{"class":144,"line":1675},[142,99644,95773],{"class":211},[142,99646,99647],{"class":144,"line":1681},[142,99648,93957],{"class":257},[142,99650,99651],{"class":144,"line":1702},[142,99652,99593],{"class":257},[142,99654,99655],{"class":144,"line":1707},[142,99656,99598],{"class":257},[142,99658,99659],{"class":144,"line":1721},[142,99660,99603],{"class":257},[142,99662,99663],{"class":144,"line":1726},[142,99664,99665],{"class":257},"        [19, 20, 21, 22, 23, 24],\n",[142,99667,99668],{"class":144,"line":1755},[142,99669,99670],{"class":257},"        [25, 26, 27, 28, 29, 30]]),\n",[142,99672,99673],{"class":144,"line":1760},[142,99674,99675],{"class":257}," array([[31, 32, 33, 34, 35, 36]])]\n",[142,99677,99678],{"class":144,"line":1777},[142,99679,93957],{"class":257},[142,99681,99682],{"class":144,"line":1782},[142,99683,99684],{"class":211},"#axis=1 按照列来分\n",[142,99686,99687,99689,99691,99693,99695,99697,99699],{"class":144,"line":1787},[142,99688,99576],{"class":152},[142,99690,224],{"class":201},[142,99692,531],{"class":152},[142,99694,47543],{"class":5245},[142,99696,198],{"class":148},[142,99698,370],{"class":201},[142,99700,159],{"class":152},[142,99702,99703],{"class":144,"line":1792},[142,99704,95773],{"class":211},[142,99706,99707],{"class":144,"line":1806},[142,99708,93957],{"class":257},[142,99710,99711],{"class":144,"line":1811},[142,99712,99713],{"class":257},"[array([[ 1,  2],\n",[142,99715,99716],{"class":144,"line":2605},[142,99717,99718],{"class":257},"        [ 7,  8],\n",[142,99720,99721],{"class":144,"line":2619},[142,99722,99723],{"class":257},"        [13, 14],\n",[142,99725,99726],{"class":144,"line":2627},[142,99727,99728],{"class":257},"        [19, 20],\n",[142,99730,99731],{"class":144,"line":2632},[142,99732,99733],{"class":257},"        [25, 26],\n",[142,99735,99736],{"class":144,"line":2638},[142,99737,99738],{"class":257},"        [31, 32]]),\n",[142,99740,99741],{"class":144,"line":2644},[142,99742,99743],{"class":257}," array([[ 3,  4],\n",[142,99745,99746],{"class":144,"line":2649},[142,99747,99748],{"class":257},"        [ 9, 10],\n",[142,99750,99751],{"class":144,"line":7977},[142,99752,99753],{"class":257},"        [15, 16],\n",[142,99755,99756],{"class":144,"line":8001},[142,99757,99758],{"class":257},"        [21, 22],\n",[142,99760,99761],{"class":144,"line":8006},[142,99762,99763],{"class":257},"        [27, 28],\n",[142,99765,99766],{"class":144,"line":8012},[142,99767,99768],{"class":257},"        [33, 34]]),\n",[142,99770,99771],{"class":144,"line":8039},[142,99772,99773],{"class":257}," array([[ 5,  6],\n",[142,99775,99776],{"class":144,"line":8044},[142,99777,99778],{"class":257},"        [11, 12],\n",[142,99780,99781],{"class":144,"line":8050},[142,99782,99783],{"class":257},"        [17, 18],\n",[142,99785,99786],{"class":144,"line":8062},[142,99787,99788],{"class":257},"        [23, 24],\n",[142,99790,99791],{"class":144,"line":8074},[142,99792,99793],{"class":257},"        [29, 30],\n",[142,99795,99796],{"class":144,"line":8086},[142,99797,99798],{"class":257},"        [35, 36]])]\n",[142,99800,99801],{"class":144,"line":9745},[142,99802,99623],{"class":257},[142,99804,99805],{"class":144,"line":9770},[142,99806,99483],{"class":211},[142,99808,99809,99811,99813,99815,99817,99819,99821,99823,99825],{"class":144,"line":9793},[142,99810,99632],{"class":152},[142,99812,370],{"class":201},[142,99814,531],{"class":152},[142,99816,230],{"class":201},[142,99818,41638],{"class":152},[142,99820,47543],{"class":5245},[142,99822,198],{"class":148},[142,99824,370],{"class":201},[142,99826,159],{"class":152},[142,99828,99829],{"class":144,"line":9817},[142,99830,93593],{"class":211},[142,99832,99833],{"class":144,"line":9822},[142,99834,93957],{"class":257},[142,99836,99837],{"class":144,"line":9827},[142,99838,99839],{"class":257},"[array([[ 1],\n",[142,99841,99842],{"class":144,"line":9832},[142,99843,99844],{"class":257},"        [ 7],\n",[142,99846,99847],{"class":144,"line":9841},[142,99848,99849],{"class":257},"        [13],\n",[142,99851,99852],{"class":144,"line":9846},[142,99853,99854],{"class":257},"        [19],\n",[142,99856,99857],{"class":144,"line":9852},[142,99858,99859],{"class":257},"        [25],\n",[142,99861,99862],{"class":144,"line":9873},[142,99863,99864],{"class":257},"        [31]]),\n",[142,99866,99867],{"class":144,"line":9879},[142,99868,99869],{"class":257}," array([[ 2],\n",[142,99871,99872],{"class":144,"line":9893},[142,99873,99874],{"class":257},"        [ 8],\n",[142,99876,99877],{"class":144,"line":9899},[142,99878,99879],{"class":257},"        [14],\n",[142,99881,99882],{"class":144,"line":9926},[142,99883,99884],{"class":257},"        [20],\n",[142,99886,99887],{"class":144,"line":9935},[142,99888,99889],{"class":257},"        [26],\n",[142,99891,99892],{"class":144,"line":9941},[142,99893,99894],{"class":257},"        [32]]),\n",[142,99896,99897],{"class":144,"line":9949},[142,99898,99899],{"class":257}," array([[ 3,  4,  5,  6],\n",[142,99901,99902],{"class":144,"line":9954},[142,99903,99904],{"class":257},"        [ 9, 10, 11, 12],\n",[142,99906,99907],{"class":144,"line":16633},[142,99908,99909],{"class":257},"        [15, 16, 17, 18],\n",[142,99911,99912],{"class":144,"line":16639},[142,99913,99914],{"class":257},"        [21, 22, 23, 24],\n",[142,99916,99917],{"class":144,"line":16662},[142,99918,99919],{"class":257},"        [27, 28, 29, 30],\n",[142,99921,99922],{"class":144,"line":16668},[142,99923,99924],{"class":257},"        [33, 34, 35, 36]])]\n",[142,99926,99927],{"class":144,"line":16691},[142,99928,93957],{"class":257},[142,99930,99931],{"class":144,"line":16705},[142,99932,99933],{"class":211},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[142,99935,99936,99939,99941],{"class":144,"line":16725},[142,99937,99938],{"class":152},"np.vsplit(aa,",[142,99940,224],{"class":201},[142,99942,159],{"class":152},[142,99944,99945],{"class":144,"line":16731},[142,99946,93593],{"class":211},[142,99948,99949],{"class":144,"line":16742},[142,99950,93957],{"class":257},[142,99952,99953],{"class":144,"line":16765},[142,99954,99593],{"class":257},[142,99956,99957],{"class":144,"line":16787},[142,99958,99598],{"class":257},[142,99960,99961],{"class":144,"line":16792},[142,99962,99603],{"class":257},[142,99964,99965],{"class":144,"line":16798},[142,99966,99608],{"class":257},[142,99968,99969],{"class":144,"line":16812},[142,99970,99613],{"class":257},[142,99972,99973],{"class":144,"line":16825},[142,99974,99618],{"class":257},[142,99976,99977],{"class":144,"line":16830},[142,99978,93957],{"class":257},[142,99980,99981,99984,99986],{"class":144,"line":16844},[142,99982,99983],{"class":152},"np.hsplit(aa,",[142,99985,224],{"class":201},[142,99987,159],{"class":152},[142,99989,99990],{"class":144,"line":16849},[142,99991,93593],{"class":211},[142,99993,99994],{"class":144,"line":16855},[142,99995,93957],{"class":257},[142,99997,99998],{"class":144,"line":16860},[142,99999,99713],{"class":257},[142,100001,100002],{"class":144,"line":16874},[142,100003,99718],{"class":257},[142,100005,100006],{"class":144,"line":16879},[142,100007,99723],{"class":257},[142,100009,100010],{"class":144,"line":16884},[142,100011,99728],{"class":257},[142,100013,100014],{"class":144,"line":16898},[142,100015,99733],{"class":257},[142,100017,100018],{"class":144,"line":16910},[142,100019,99738],{"class":257},[142,100021,100022],{"class":144,"line":16915},[142,100023,99743],{"class":257},[142,100025,100026],{"class":144,"line":16928},[142,100027,99748],{"class":257},[142,100029,100030],{"class":144,"line":16933},[142,100031,99753],{"class":257},[142,100033,100034],{"class":144,"line":16938},[142,100035,99758],{"class":257},[142,100037,100038],{"class":144,"line":16943},[142,100039,99763],{"class":257},[142,100041,100042],{"class":144,"line":16956},[142,100043,99768],{"class":257},[142,100045,100046],{"class":144,"line":16961},[142,100047,99773],{"class":257},[142,100049,100050],{"class":144,"line":32662},[142,100051,99778],{"class":257},[142,100053,100054],{"class":144,"line":32668},[142,100055,99783],{"class":257},[142,100057,100058],{"class":144,"line":32674},[142,100059,99788],{"class":257},[142,100061,100062],{"class":144,"line":32680},[142,100063,99793],{"class":257},[142,100065,100066],{"class":144,"line":32686},[142,100067,99798],{"class":257},[142,100069,100070],{"class":144,"line":32697},[142,100071,93957],{"class":257},[142,100073,100074,100077,100079,100081,100083],{"class":144,"line":32703},[142,100075,100076],{"class":152},"np.vsplit(aa,[",[142,100078,230],{"class":201},[142,100080,531],{"class":152},[142,100082,472],{"class":201},[142,100084,4685],{"class":152},[142,100086,100087],{"class":144,"line":32723},[142,100088,93593],{"class":211},[142,100090,100091],{"class":144,"line":32729},[142,100092,93957],{"class":257},[142,100094,100095],{"class":144,"line":32740},[142,100096,99593],{"class":257},[142,100098,100099],{"class":144,"line":32746},[142,100100,99598],{"class":257},[142,100102,100103],{"class":144,"line":32752},[142,100104,99603],{"class":257},[142,100106,100107],{"class":144,"line":32758},[142,100108,99665],{"class":257},[142,100110,100111],{"class":144,"line":32764},[142,100112,99670],{"class":257},[142,100114,100115],{"class":144,"line":32770},[142,100116,99675],{"class":257},[142,100118,100119],{"class":144,"line":32776},[142,100120,99623],{"class":257},[5155,100122,100123],{},"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":31,"searchDepth":64,"depth":64,"links":100125},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99391,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100132,"title":100133,"body":100134,"description":66,"extension":67,"meta":100628,"navigation":69,"path":100629,"seo":100630,"stem":100631,"__hash__":100632},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100135,"toc":100619},[100136,100139,100142,100167,100171,100230,100282,100286,100288,100324,100378,100380,100418,100489,100493,100498,100502,100505,100538,100541,100545,100548,100551,100554,100557,100562,100566,100569,100572,100575,100578,100583,100587,100592,100595,100616],[10,100137,100133],{"id":100138},"_9数学函数",[14,100140,100141],{},"补充回顾：python的列表推导式",[133,100143,100145],{"className":30407,"code":100144,"language":30409,"meta":31,"style":31},"[1\u002Fi for i in a]\n",[139,100146,100147],{"__ignoreMap":31},[142,100148,100149,100151,100153,100155,100158,100160,100162,100164],{"class":144,"line":145},[142,100150,1043],{"class":152},[142,100152,370],{"class":201},[142,100154,737],{"class":148},[142,100156,100157],{"class":152},"i ",[142,100159,3053],{"class":148},[142,100161,9467],{"class":152},[142,100163,26072],{"class":148},[142,100165,100166],{"class":152}," a]\n",[84,100168,100170],{"id":100169},"_91-求倒数","9.1 求倒数",[133,100172,100174],{"className":30407,"code":100173,"language":30409,"meta":31,"style":31},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[139,100175,100176,100181,100209,100221],{"__ignoreMap":31},[142,100177,100178],{"class":144,"line":145},[142,100179,100180],{"class":211},"#数组求倒数\n",[142,100182,100183,100185,100187,100189,100191,100193,100195,100197,100199,100201,100203,100205,100207],{"class":144,"line":64},[142,100184,391],{"class":152},[142,100186,198],{"class":148},[142,100188,1043],{"class":152},[142,100190,370],{"class":201},[142,100192,531],{"class":152},[142,100194,230],{"class":201},[142,100196,531],{"class":152},[142,100198,224],{"class":201},[142,100200,531],{"class":152},[142,100202,446],{"class":201},[142,100204,531],{"class":152},[142,100206,472],{"class":201},[142,100208,33275],{"class":152},[142,100210,100211,100213,100215,100218],{"class":144,"line":1208},[142,100212,416],{"class":152},[142,100214,198],{"class":148},[142,100216,100217],{"class":152},"np.array(a)",[142,100219,100220],{"class":211},"#将列表转换为数组\n",[142,100222,100223,100225,100227],{"class":144,"line":1223},[142,100224,370],{"class":201},[142,100226,737],{"class":148},[142,100228,100229],{"class":152},"b\n",[133,100231,100233],{"className":30407,"code":100232,"language":30409,"meta":31,"style":31},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[139,100234,100235,100263,100272,100277],{"__ignoreMap":31},[142,100236,100237,100239,100241,100243,100245,100247,100249,100251,100253,100255,100257,100259,100261],{"class":144,"line":145},[142,100238,391],{"class":152},[142,100240,198],{"class":148},[142,100242,1043],{"class":152},[142,100244,370],{"class":201},[142,100246,531],{"class":152},[142,100248,230],{"class":201},[142,100250,531],{"class":152},[142,100252,224],{"class":201},[142,100254,531],{"class":152},[142,100256,446],{"class":201},[142,100258,531],{"class":152},[142,100260,472],{"class":201},[142,100262,33275],{"class":152},[142,100264,100265,100267,100269],{"class":144,"line":64},[142,100266,416],{"class":152},[142,100268,198],{"class":148},[142,100270,100271],{"class":152},"np.array(a)\n",[142,100273,100274],{"class":144,"line":1208},[142,100275,100276],{"class":211},"#调用numpy中的函数reciprocal()\n",[142,100278,100279],{"class":144,"line":1223},[142,100280,100281],{"class":152},"np.reciprocal(b)\n",[84,100283,100285],{"id":100284},"_92-求平方","9.2 求平方",[14,100287,94559],{},[133,100289,100291],{"className":30407,"code":100290,"language":30409,"meta":31,"style":31},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[139,100292,100293,100298,100303,100319],{"__ignoreMap":31},[142,100294,100295],{"class":144,"line":145},[142,100296,100297],{"class":211},"#square()，求平方\n",[142,100299,100300],{"class":144,"line":64},[142,100301,100302],{"class":211},"#一维数组\n",[142,100304,100305,100307,100309,100311,100313,100315,100317],{"class":144,"line":1208},[142,100306,391],{"class":152},[142,100308,198],{"class":148},[142,100310,93031],{"class":152},[142,100312,370],{"class":201},[142,100314,531],{"class":152},[142,100316,599],{"class":201},[142,100318,159],{"class":152},[142,100320,100321],{"class":144,"line":1223},[142,100322,100323],{"class":152},"np.square(a)\n",[133,100325,100327],{"className":30407,"code":100326,"language":30409,"meta":31,"style":31},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[139,100328,100329,100334,100339,100360],{"__ignoreMap":31},[142,100330,100331],{"class":144,"line":145},[142,100332,100333],{"class":211},"#或者通过循环遍历的形式来计算\n",[142,100335,100336],{"class":144,"line":64},[142,100337,100338],{"class":211},"#这是一个列表\n",[142,100340,100341,100344,100346,100348,100350,100352,100354,100357],{"class":144,"line":1208},[142,100342,100343],{"class":152},"[i",[142,100345,608],{"class":148},[142,100347,100157],{"class":152},[142,100349,3053],{"class":148},[142,100351,9467],{"class":152},[142,100353,26072],{"class":148},[142,100355,100356],{"class":152}," a]",[142,100358,100359],{"class":211},"#这个求完之后在数列当中\n",[142,100361,100362,100365,100367,100369,100371,100373,100375],{"class":144,"line":1223},[142,100363,100364],{"class":152},"np.array([i",[142,100366,608],{"class":148},[142,100368,100157],{"class":152},[142,100370,3053],{"class":148},[142,100372,9467],{"class":152},[142,100374,26072],{"class":148},[142,100376,100377],{"class":152}," a])\n",[14,100379,93320],{},[133,100381,100383],{"className":30407,"code":100382,"language":30409,"meta":31,"style":31},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[139,100384,100385,100389,100413],{"__ignoreMap":31},[142,100386,100387],{"class":144,"line":145},[142,100388,93330],{"class":211},[142,100390,100391,100393,100395,100397,100399,100401,100403,100405,100407,100409,100411],{"class":144,"line":64},[142,100392,93335],{"class":152},[142,100394,198],{"class":148},[142,100396,93031],{"class":152},[142,100398,370],{"class":201},[142,100400,531],{"class":152},[142,100402,676],{"class":201},[142,100404,93036],{"class":152},[142,100406,446],{"class":201},[142,100408,531],{"class":152},[142,100410,224],{"class":201},[142,100412,159],{"class":152},[142,100414,100415],{"class":144,"line":1208},[142,100416,100417],{"class":152},"np.square(aa)\n",[133,100419,100421],{"className":30407,"code":100420,"language":30409,"meta":31,"style":31},"#传统的方式\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",[139,100422,100423,100428,100437,100453,100469,100484],{"__ignoreMap":31},[142,100424,100425],{"class":144,"line":145},[142,100426,100427],{"class":211},"#传统的方式\n",[142,100429,100430,100432,100434],{"class":144,"line":64},[142,100431,98196],{"class":152},[142,100433,198],{"class":148},[142,100435,100436],{"class":152},"np.empty_like(aa)\n",[142,100438,100439,100441,100443,100445,100447,100449,100451],{"class":144,"line":1208},[142,100440,3053],{"class":148},[142,100442,9467],{"class":152},[142,100444,26072],{"class":148},[142,100446,32472],{"class":201},[142,100448,153],{"class":152},[142,100450,446],{"class":201},[142,100452,30815],{"class":152},[142,100454,100455,100457,100459,100461,100463,100465,100467],{"class":144,"line":1223},[142,100456,3229],{"class":148},[142,100458,9529],{"class":152},[142,100460,26072],{"class":148},[142,100462,32472],{"class":201},[142,100464,153],{"class":152},[142,100466,224],{"class":201},[142,100468,30815],{"class":152},[142,100470,100471,100474,100476,100479,100481],{"class":144,"line":1229},[142,100472,100473],{"class":152},"        bb[i,j]",[142,100475,198],{"class":148},[142,100477,100478],{"class":152},"aa[i,j]",[142,100480,608],{"class":148},[142,100482,100483],{"class":152},"aa[i,j]\n",[142,100485,100486],{"class":144,"line":1243},[142,100487,100488],{"class":152},"bb\n",[84,100490,100492],{"id":100491},"_93-求各元素的符号","9.3 求各元素的符号",[14,100494,100495],{},[29,100496],{"alt":31,"src":100497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[84,100499,100501],{"id":100500},"_94-modf函数","9.4 modf函数",[14,100503,100504],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[133,100506,100508],{"className":30407,"code":100507,"language":30409,"meta":31,"style":31},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[139,100509,100510,100533],{"__ignoreMap":31},[142,100511,100512,100514,100516,100518,100520,100522,100524,100526,100528,100531],{"class":144,"line":145},[142,100513,391],{"class":152},[142,100515,198],{"class":148},[142,100517,93031],{"class":152},[142,100519,685],{"class":148},[142,100521,599],{"class":201},[142,100523,531],{"class":152},[142,100525,599],{"class":201},[142,100527,531],{"class":152},[142,100529,100530],{"class":201},"0.3",[142,100532,159],{"class":152},[142,100534,100535],{"class":144,"line":64},[142,100536,100537],{"class":152},"np.modf(a)\n",[14,100539,100540],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[84,100542,100544],{"id":100543},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100546,100547],{},"np.cell()",[14,100549,100550],{},"np.floor()",[14,100552,100553],{},"np.rint()",[14,100555,100556],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100558,100559],{},[29,100560],{"alt":31,"src":100561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[84,100563,100565],{"id":100564},"_96-around函数","9.6 around()函数",[14,100567,100568],{},"around()函数也可以实现对数的小数位数进行操作",[14,100570,100571],{},"其中的参数：",[14,100573,100574],{},"1.要传的数组",[14,100576,100577],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100579,100580],{},[29,100581],{"alt":31,"src":100582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[84,100584,100586],{"id":100585},"_97-三角函数","9.7 三角函数",[14,100588,100589],{},[29,100590],{"alt":31,"src":100591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100593,100594],{},"引入图像模块非常重要",[133,100596,100598],{"className":30407,"code":100597,"language":30409,"meta":31,"style":31},"from matplotlib import pyplot as plt\n",[139,100599,100600],{"__ignoreMap":31},[142,100601,100602,100604,100607,100609,100612,100614],{"class":144,"line":145},[142,100603,30766],{"class":148},[142,100605,100606],{"class":152}," matplotlib ",[142,100608,30421],{"class":148},[142,100610,100611],{"class":152}," pyplot ",[142,100613,31412],{"class":148},[142,100615,31466],{"class":152},[5155,100617,100618],{},"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":31,"searchDepth":64,"depth":64,"links":100620},[100621,100622,100623,100624,100625,100626,100627],{"id":100169,"depth":64,"text":100170},{"id":100284,"depth":64,"text":100285},{"id":100491,"depth":64,"text":100492},{"id":100500,"depth":64,"text":100501},{"id":100543,"depth":64,"text":100544},{"id":100564,"depth":64,"text":100565},{"id":100585,"depth":64,"text":100586},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100133,"description":66},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100634,"title":100635,"body":100636,"description":66,"extension":67,"meta":100640,"navigation":69,"path":100641,"seo":100642,"stem":100643,"__hash__":100644},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100637,"toc":100638},[],{"title":31,"searchDepth":64,"depth":64,"links":100639},[],{"category":50449},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100635,"description":66},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100646,"title":100647,"body":100648,"description":31,"extension":67,"meta":102656,"navigation":69,"path":102657,"seo":102658,"stem":102659,"__hash__":102660},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100649,"toc":102632},[100650,100653,100657,100660,100663,100669,100672,100695,100698,100732,100735,100776,100780,100783,100876,100879,100923,100926,100943,100946,100960,100963,100966,101011,101014,101051,101055,101058,101064,101069,101089,101093,101096,101162,101165,101183,101187,101190,101219,101229,101235,101239,101242,101248,101259,101263,101266,101296,101299,101579,101582,101585,101596,101599,101602,101624,101631,101634,101652,101655,101658,101672,101680,101683,101709,101715,101718,101721,101731,101743,101763,101772,101792,101802,101826,101839,101853,101858,101899,101916,101941,101953,101973,101979,102024,102043,102060,102073,102089,102096,102108,102117,102152,102173,102198,102211,102235,102250,102275,102278,102299,102308,102311,102322,102326,102329,102335,102347,102354,102358,102361,102373,102376,102390,102393,102403,102413,102416,102456,102459,102463,102469,102472,102486,102490,102493,102526,102530,102533,102556,102564,102567,102573,102579,102582,102585,102613,102617,102620,102626,102629],[10,100651,100647],{"id":100652},"_1环境安装与第一个-mujoco-程序",[84,100654,100656],{"id":100655},"_1目标说明","1.目标说明",[14,100658,100659],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100661,100662],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[133,100664,100667],{"className":100665,"code":100666,"language":5216,"meta":31},[5214],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[139,100668,100666],{"__ignoreMap":31},[14,100670,100671],{},"需要掌握:",[96,100673,100674,100677,100680,100685,100690],{},[99,100675,100676],{},"Fedora 44 下 MuJoCo 的系统依赖",[99,100678,100679],{},"Python 虚拟环境创建",[99,100681,100682],{},[139,100683,100684],{},"mujoco.MjModel",[99,100686,100687],{},[139,100688,100689],{},"mujoco.MjData",[99,100691,100692],{},[139,100693,100694],{},"mujoco.mj_step(model, data)",[14,100696,100697],{},"MuJoCo 中最重要的两个对象:",[290,100699,100700,100710],{},[293,100701,100702],{},[296,100703,100704,100707],{},[299,100705,100706],{"align":23765},"对象",[299,100708,100709],{"align":23765},"含义",[337,100711,100712,100722],{},[296,100713,100714,100719],{},[342,100715,100716],{"align":23765},[139,100717,100718],{},"MjModel",[342,100720,100721],{"align":23765},"模型结构，来自 XML，基本不随时间变化",[296,100723,100724,100729],{},[342,100725,100726],{"align":23765},[139,100727,100728],{},"MjData",[342,100730,100731],{"align":23765},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100733,100734],{},"可以先用一个类比理解：",[290,100736,100737,100747],{},[293,100738,100739],{},[296,100740,100741,100744],{},[299,100742,100743],{"align":23765},"类比",[299,100745,100746],{"align":23765},"MuJoCo 对象",[337,100748,100749,100758,100767],{},[296,100750,100751,100754],{},[342,100752,100753],{"align":23765},"游戏地图和角色配置",[342,100755,100756],{"align":23765},[139,100757,100718],{},[296,100759,100760,100763],{},[342,100761,100762],{"align":23765},"游戏运行到当前帧的状态",[342,100764,100765],{"align":23765},[139,100766,100728],{},[296,100768,100769,100772],{},[342,100770,100771],{"align":23765},"前进一帧",[342,100773,100774],{"align":23765},[139,100775,100694],{},[84,100777,100779],{"id":100778},"_2环境与依赖安装","2.环境与依赖安装",[14,100781,100782],{},"Fedora 44 系统依赖:",[133,100784,100786],{"className":23851,"code":100785,"language":23853,"meta":31,"style":31},"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",[139,100787,100788,100800,100813,100826,100836,100846,100865],{"__ignoreMap":31},[142,100789,100790,100792,100794,100796,100798],{"class":144,"line":145},[142,100791,24606],{"class":1991},[142,100793,26344],{"class":257},[142,100795,23863],{"class":257},[142,100797,26429],{"class":201},[142,100799,24707],{"class":201},[142,100801,100802,100805,100808,100811],{"class":144,"line":64},[142,100803,100804],{"class":257},"  python3",[142,100806,100807],{"class":257}," python3-pip",[142,100809,100810],{"class":257}," python3-virtualenv",[142,100812,24707],{"class":201},[142,100814,100815,100818,100821,100824],{"class":144,"line":1208},[142,100816,100817],{"class":257},"  mesa-libGL",[142,100819,100820],{"class":257}," mesa-libGLU",[142,100822,100823],{"class":257}," mesa-dri-drivers",[142,100825,24707],{"class":201},[142,100827,100828,100831,100834],{"class":144,"line":1223},[142,100829,100830],{"class":257},"  libglvnd-glx",[142,100832,100833],{"class":257}," libglvnd-opengl",[142,100835,24707],{"class":201},[142,100837,100838,100841,100844],{"class":144,"line":1229},[142,100839,100840],{"class":257},"  glfw",[142,100842,100843],{"class":257}," glfw-devel",[142,100845,24707],{"class":201},[142,100847,100848,100851,100854,100857,100860,100863],{"class":144,"line":1243},[142,100849,100850],{"class":257},"  libX11",[142,100852,100853],{"class":257}," libXcursor",[142,100855,100856],{"class":257}," libXi",[142,100858,100859],{"class":257}," libXinerama",[142,100861,100862],{"class":257}," libXrandr",[142,100864,24707],{"class":201},[142,100866,100867,100870,100873],{"class":144,"line":1249},[142,100868,100869],{"class":257},"  gcc",[142,100871,100872],{"class":257}," gcc-c++",[142,100874,100875],{"class":257}," make\n",[14,100877,100878],{},"创建 Python 环境:",[133,100880,100882],{"className":23851,"code":100881,"language":23853,"meta":31,"style":31},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[139,100883,100884,100898,100906],{"__ignoreMap":31},[142,100885,100886,100889,100892,100895],{"class":144,"line":145},[142,100887,100888],{"class":1991},"python3",[142,100890,100891],{"class":201}," -m",[142,100893,100894],{"class":257}," venv",[142,100896,100897],{"class":257}," .venv\n",[142,100899,100900,100903],{"class":144,"line":64},[142,100901,100902],{"class":201},"source",[142,100904,100905],{"class":257}," .venv\u002Fbin\u002Factivate\n",[142,100907,100908,100910,100912,100915,100917,100920],{"class":144,"line":1208},[142,100909,30409],{"class":1991},[142,100911,100891],{"class":201},[142,100913,100914],{"class":257}," pip",[142,100916,23863],{"class":257},[142,100918,100919],{"class":201}," --upgrade",[142,100921,100922],{"class":257}," pip\n",[14,100924,100925],{},"pip 安装:",[133,100927,100929],{"className":23851,"code":100928,"language":23853,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy\n",[139,100930,100931],{"__ignoreMap":31},[142,100932,100933,100935,100937,100940],{"class":144,"line":145},[142,100934,23860],{"class":1991},[142,100936,23863],{"class":257},[142,100938,100939],{"class":257}," \"mujoco>=2.3\"",[142,100941,100942],{"class":257}," numpy\n",[14,100944,100945],{},"安装完成后，先做最小检查：",[133,100947,100949],{"className":23851,"code":100948,"language":23853,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[139,100950,100951],{"__ignoreMap":31},[142,100952,100953,100955,100957],{"class":144,"line":145},[142,100954,30409],{"class":1991},[142,100956,30387],{"class":201},[142,100958,100959],{"class":257}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100961,100962],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100964,100965],{},"conda 安装:",[133,100967,100969],{"className":23851,"code":100968,"language":23853,"meta":31,"style":31},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[139,100970,100971,100991,101001],{"__ignoreMap":31},[142,100972,100973,100975,100977,100979,100982,100985,100988],{"class":144,"line":145},[142,100974,30359],{"class":1991},[142,100976,29205],{"class":257},[142,100978,25144],{"class":201},[142,100980,100981],{"class":257}," mujoco-study",[142,100983,100984],{"class":257}," python=",[142,100986,100987],{"class":201},"3.10",[142,100989,100990],{"class":201}," -y\n",[142,100992,100993,100995,100998],{"class":144,"line":64},[142,100994,30359],{"class":1991},[142,100996,100997],{"class":257}," activate",[142,100999,101000],{"class":257}," mujoco-study\n",[142,101002,101003,101005,101007,101009],{"class":144,"line":1208},[142,101004,23860],{"class":1991},[142,101006,23863],{"class":257},[142,101008,100939],{"class":257},[142,101010,100942],{"class":257},[14,101012,101013],{},"版本冲突说明:",[96,101015,101016,101022,101032,101041],{},[99,101017,101018,101019,28414],{},"不要安装 ",[139,101020,101021],{},"mujoco-py",[99,101023,101024,101025,101027,101028,101031],{},"如果旧项目里同时安装了 ",[139,101026,101021],{}," 和 ",[139,101029,101030],{},"mujoco","，建议新建干净虚拟环境。",[99,101033,101034,101037,101038,28414],{},[139,101035,101036],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[139,101039,101040],{},"~\u002F.mujoco\u002Fmujoco210",[99,101042,101043,101044,82568,101047,101050],{},"离屏渲染可能涉及 OpenGL 后端，",[139,101045,101046],{},"MUJOCO_GL=egl",[139,101048,101049],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[84,101052,101054],{"id":101053},"_3核心概念解释","3.核心概念解释",[14,101056,101057],{},"MuJoCo 的基本执行流程:",[133,101059,101062],{"className":101060,"code":101061,"language":5216,"meta":31},[5214],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[139,101063,101061],{"__ignoreMap":31},[14,101065,101066,101068],{},[139,101067,100718],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101070,101071,101073,101074,365,101077,365,101080,365,101083,365,101086,28414],{},[139,101072,100728],{}," 存放仿真运行时状态，例如 ",[139,101075,101076],{},"data.time",[139,101078,101079],{},"data.qpos",[139,101081,101082],{},"data.qvel",[139,101084,101085],{},"data.ctrl",[139,101087,101088],{},"data.xpos",[113,101090,101092],{"id":101091},"xml-是什么","XML 是什么",[14,101094,101095],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[133,101097,101099],{"className":53096,"code":101098,"language":53098,"meta":31,"style":31},"\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",[139,101100,101101,101123,101154],{"__ignoreMap":31},[142,101102,101103,101105,101107,101109,101111,101113,101116,101118,101121],{"class":144,"line":145},[142,101104,1063],{"class":152},[142,101106,51829],{"class":51329},[142,101108,14949],{"class":1991},[142,101110,198],{"class":152},[142,101112,53520],{"class":257},[142,101114,101115],{"class":1991}," pos",[142,101117,198],{"class":152},[142,101119,101120],{"class":257},"\"0 0 1\"",[142,101122,51336],{"class":152},[142,101124,101125,101127,101130,101132,101134,101137,101139,101141,101143,101146,101148,101151],{"class":144,"line":64},[142,101126,52173],{"class":152},[142,101128,101129],{"class":51329},"geom",[142,101131,14949],{"class":1991},[142,101133,198],{"class":152},[142,101135,101136],{"class":257},"\"box_geom\"",[142,101138,53853],{"class":1991},[142,101140,198],{"class":152},[142,101142,53520],{"class":257},[142,101144,101145],{"class":1991}," size",[142,101147,198],{"class":152},[142,101149,101150],{"class":257},"\"0.1 0.1 0.1\"",[142,101152,101153],{"class":152},"\u002F>\n",[142,101155,101156,101158,101160],{"class":144,"line":1208},[142,101157,51814],{"class":152},[142,101159,51829],{"class":51329},[142,101161,51336],{"class":152},[14,101163,101164],{},"这段意思是：",[96,101166,101167,101173,101180],{},[99,101168,101169,101170,101172],{},"创建一个叫 ",[139,101171,53743],{}," 的刚体。",[99,101174,101175,101176,101179],{},"它初始放在 ",[139,101177,101178],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[99,101181,101182],{},"它里面有一个盒子形状的几何体。",[113,101184,101186],{"id":101185},"timestep-是什么","timestep 是什么",[14,101188,101189],{},"XML 里的：",[133,101191,101193],{"className":53096,"code":101192,"language":53098,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[139,101194,101195],{"__ignoreMap":31},[142,101196,101197,101199,101201,101204,101206,101209,101212,101214,101217],{"class":144,"line":145},[142,101198,1063],{"class":152},[142,101200,69195],{"class":51329},[142,101202,101203],{"class":1991}," timestep",[142,101205,198],{"class":152},[142,101207,101208],{"class":257},"\"0.01\"",[142,101210,101211],{"class":1991}," gravity",[142,101213,198],{"class":152},[142,101215,101216],{"class":257},"\"0 0 -9.81\"",[142,101218,101153],{"class":152},[14,101220,101221,101222,101225,101226,101228],{},"表示每调用一次 ",[139,101223,101224],{},"mj_step","，仿真时间前进 ",[139,101227,39015],{}," 秒。循环 100 次，大约就是 1 秒：",[133,101230,101233],{"className":101231,"code":101232,"language":5216,"meta":31},[5214],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[139,101234,101232],{"__ignoreMap":31},[113,101236,101238],{"id":101237},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101240,101241],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[133,101243,101246],{"className":101244,"code":101245,"language":5216,"meta":31},[5214],"x y z qw qx qy qz\n",[139,101247,101245],{"__ignoreMap":31},[14,101249,101250,101251,101254,101255,101258],{},"表示一个自由刚体的位置和姿态。其中 ",[139,101252,101253],{},"x y z"," 是位置，",[139,101256,101257],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[84,101260,101262],{"id":101261},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101264,101265],{},"新建文件:",[133,101267,101269],{"className":23851,"code":101268,"language":23853,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[139,101270,101271,101281,101288],{"__ignoreMap":31},[142,101272,101273,101276,101278],{"class":144,"line":145},[142,101274,101275],{"class":1991},"mkdir",[142,101277,29245],{"class":201},[142,101279,101280],{"class":257}," mujoco_tutorial\n",[142,101282,101283,101286],{"class":144,"line":64},[142,101284,101285],{"class":201},"cd",[142,101287,101280],{"class":257},[142,101289,101290,101293],{"class":144,"line":1208},[142,101291,101292],{"class":1991},"touch",[142,101294,101295],{"class":257}," ch1_first_sim.py\n",[14,101297,101298],{},"写入:",[133,101300,101302],{"className":30407,"code":101301,"language":30409,"meta":31,"style":31},"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",[139,101303,101304,101311,101315,101319,101329,101334,101339,101343,101348,101353,101357,101362,101367,101372,101377,101382,101387,101391,101395,101399,101412,101426,101436,101440,101452,101464,101476,101488,101500,101504,101521,101526,101530,101541,101552,101556,101560,101574],{"__ignoreMap":31},[142,101305,101306,101308],{"class":144,"line":145},[142,101307,30421],{"class":148},[142,101309,101310],{"class":152}," mujoco\n",[142,101312,101313],{"class":144,"line":64},[142,101314,2428],{"emptyLinePlaceholder":69},[142,101316,101317],{"class":144,"line":1208},[142,101318,2428],{"emptyLinePlaceholder":69},[142,101320,101321,101324,101326],{"class":144,"line":1223},[142,101322,101323],{"class":201},"XML",[142,101325,13593],{"class":148},[142,101327,101328],{"class":257}," \"\"\"\n",[142,101330,101331],{"class":144,"line":1229},[142,101332,101333],{"class":257},"\u003Cmujoco model=\"first_sim\">\n",[142,101335,101336],{"class":144,"line":1243},[142,101337,101338],{"class":257},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[142,101340,101341],{"class":144,"line":1249},[142,101342,2428],{"emptyLinePlaceholder":69},[142,101344,101345],{"class":144,"line":1340},[142,101346,101347],{"class":257},"  \u003Cworldbody>\n",[142,101349,101350],{"class":144,"line":1346},[142,101351,101352],{"class":257},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[142,101354,101355],{"class":144,"line":1358},[142,101356,2428],{"emptyLinePlaceholder":69},[142,101358,101359],{"class":144,"line":1640},[142,101360,101361],{"class":257},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[142,101363,101364],{"class":144,"line":1645},[142,101365,101366],{"class":257},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[142,101368,101369],{"class":144,"line":1651},[142,101370,101371],{"class":257},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[142,101373,101374],{"class":144,"line":1656},[142,101375,101376],{"class":257},"    \u003C\u002Fbody>\n",[142,101378,101379],{"class":144,"line":1670},[142,101380,101381],{"class":257},"  \u003C\u002Fworldbody>\n",[142,101383,101384],{"class":144,"line":1675},[142,101385,101386],{"class":257},"\u003C\u002Fmujoco>\n",[142,101388,101389],{"class":144,"line":1681},[142,101390,95707],{"class":257},[142,101392,101393],{"class":144,"line":1702},[142,101394,2428],{"emptyLinePlaceholder":69},[142,101396,101397],{"class":144,"line":1707},[142,101398,2428],{"emptyLinePlaceholder":69},[142,101400,101401,101403,101405,101408,101410],{"class":144,"line":1721},[142,101402,31976],{"class":148},[142,101404,2001],{"class":1991},[142,101406,101407],{"class":152},"() -> ",[142,101409,95695],{"class":201},[142,101411,3767],{"class":152},[142,101413,101414,101417,101419,101422,101424],{"class":144,"line":1726},[142,101415,101416],{"class":152},"    model ",[142,101418,198],{"class":148},[142,101420,101421],{"class":152}," mujoco.MjModel.from_xml_string(",[142,101423,101323],{"class":201},[142,101425,159],{"class":152},[142,101427,101428,101431,101433],{"class":144,"line":1755},[142,101429,101430],{"class":152},"    data ",[142,101432,198],{"class":148},[142,101434,101435],{"class":152}," mujoco.MjData(model)\n",[142,101437,101438],{"class":144,"line":1760},[142,101439,2428],{"emptyLinePlaceholder":69},[142,101441,101442,101444,101446,101449],{"class":144,"line":1777},[142,101443,31328],{"class":201},[142,101445,153],{"class":152},[142,101447,101448],{"class":257},"\"nq:\"",[142,101450,101451],{"class":152},", model.nq)\n",[142,101453,101454,101456,101458,101461],{"class":144,"line":1782},[142,101455,31328],{"class":201},[142,101457,153],{"class":152},[142,101459,101460],{"class":257},"\"nv:\"",[142,101462,101463],{"class":152},", model.nv)\n",[142,101465,101466,101468,101470,101473],{"class":144,"line":1787},[142,101467,31328],{"class":201},[142,101469,153],{"class":152},[142,101471,101472],{"class":257},"\"nu:\"",[142,101474,101475],{"class":152},", model.nu)\n",[142,101477,101478,101480,101482,101485],{"class":144,"line":1792},[142,101479,31328],{"class":201},[142,101481,153],{"class":152},[142,101483,101484],{"class":257},"\"initial time:\"",[142,101486,101487],{"class":152},", data.time)\n",[142,101489,101490,101492,101494,101497],{"class":144,"line":1806},[142,101491,31328],{"class":201},[142,101493,153],{"class":152},[142,101495,101496],{"class":257},"\"initial qpos:\"",[142,101498,101499],{"class":152},", data.qpos.copy())\n",[142,101501,101502],{"class":144,"line":1811},[142,101503,2428],{"emptyLinePlaceholder":69},[142,101505,101506,101508,101511,101513,101515,101517,101519],{"class":144,"line":2605},[142,101507,3229],{"class":148},[142,101509,101510],{"class":152}," _ ",[142,101512,26072],{"class":148},[142,101514,32472],{"class":201},[142,101516,153],{"class":152},[142,101518,464],{"class":201},[142,101520,30815],{"class":152},[142,101522,101523],{"class":144,"line":2619},[142,101524,101525],{"class":152},"        mujoco.mj_step(model, data)\n",[142,101527,101528],{"class":144,"line":2627},[142,101529,2428],{"emptyLinePlaceholder":69},[142,101531,101532,101534,101536,101539],{"class":144,"line":2632},[142,101533,31328],{"class":201},[142,101535,153],{"class":152},[142,101537,101538],{"class":257},"\"final time:\"",[142,101540,101487],{"class":152},[142,101542,101543,101545,101547,101550],{"class":144,"line":2638},[142,101544,31328],{"class":201},[142,101546,153],{"class":152},[142,101548,101549],{"class":257},"\"final qpos:\"",[142,101551,101499],{"class":152},[142,101553,101554],{"class":144,"line":2644},[142,101555,2428],{"emptyLinePlaceholder":69},[142,101557,101558],{"class":144,"line":2649},[142,101559,2428],{"emptyLinePlaceholder":69},[142,101561,101562,101564,101566,101569,101572],{"class":144,"line":7977},[142,101563,1559],{"class":148},[142,101565,31249],{"class":201},[142,101567,101568],{"class":148}," ==",[142,101570,101571],{"class":257}," \"__main__\"",[142,101573,3767],{"class":152},[142,101575,101576],{"class":144,"line":8001},[142,101577,101578],{"class":152},"    main()\n",[113,101580,101581],{"id":101581},"代码逐段解释",[14,101583,101584],{},"导入库：",[133,101586,101588],{"className":30407,"code":101587,"language":30409,"meta":31,"style":31},"import mujoco\n",[139,101589,101590],{"__ignoreMap":31},[142,101591,101592,101594],{"class":144,"line":145},[142,101593,30421],{"class":148},[142,101595,101310],{"class":152},[14,101597,101598],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101600,101601],{},"定义 XML：",[133,101603,101605],{"className":30407,"code":101604,"language":30409,"meta":31,"style":31},"XML = \"\"\"\n...\n\"\"\"\n",[139,101606,101607,101615,101620],{"__ignoreMap":31},[142,101608,101609,101611,101613],{"class":144,"line":145},[142,101610,101323],{"class":201},[142,101612,13593],{"class":148},[142,101614,101328],{"class":257},[142,101616,101617],{"class":144,"line":64},[142,101618,101619],{"class":257},"...\n",[142,101621,101622],{"class":144,"line":1208},[142,101623,95707],{"class":257},[14,101625,101626,101627,101630],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[139,101628,101629],{},"freejoint"," 的方块。",[14,101632,101633],{},"编译模型：",[133,101635,101637],{"className":30407,"code":101636,"language":30409,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\n",[139,101638,101639],{"__ignoreMap":31},[142,101640,101641,101644,101646,101648,101650],{"class":144,"line":145},[142,101642,101643],{"class":152},"model ",[142,101645,198],{"class":148},[142,101647,101421],{"class":152},[142,101649,101323],{"class":201},[142,101651,159],{"class":152},[14,101653,101654],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101656,101657],{},"创建数据：",[133,101659,101661],{"className":30407,"code":101660,"language":30409,"meta":31,"style":31},"data = mujoco.MjData(model)\n",[139,101662,101663],{"__ignoreMap":31},[142,101664,101665,101668,101670],{"class":144,"line":145},[142,101666,101667],{"class":152},"data ",[142,101669,198],{"class":148},[142,101671,101435],{"class":152},[14,101673,101674,101676,101677,101679],{},[139,101675,33430],{}," 会保存仿真当前状态。刚创建时，时间是 ",[139,101678,344],{},"，方块还在初始位置。",[14,101681,101682],{},"推进仿真：",[133,101684,101686],{"className":30407,"code":101685,"language":30409,"meta":31,"style":31},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[139,101687,101688,101704],{"__ignoreMap":31},[142,101689,101690,101692,101694,101696,101698,101700,101702],{"class":144,"line":145},[142,101691,3053],{"class":148},[142,101693,101510],{"class":152},[142,101695,26072],{"class":148},[142,101697,32472],{"class":201},[142,101699,153],{"class":152},[142,101701,464],{"class":201},[142,101703,30815],{"class":152},[142,101705,101706],{"class":144,"line":64},[142,101707,101708],{"class":152},"    mujoco.mj_step(model, data)\n",[14,101710,101711,101712,101714],{},"每次 ",[139,101713,101224],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[113,101716,101717],{"id":101717},"代码逐行细讲",[14,101719,101720],{},"下面把完整代码按新手视角拆开讲。",[133,101722,101723],{"className":30407,"code":101587,"language":30409,"meta":31,"style":31},[139,101724,101725],{"__ignoreMap":31},[142,101726,101727,101729],{"class":144,"line":145},[142,101728,30421],{"class":148},[142,101730,101310],{"class":152},[14,101732,101733,101735,101736,365,101738,365,101740,28414],{},[139,101734,30421],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[139,101737,100684],{},[139,101739,100689],{},[139,101741,101742],{},"mujoco.mj_step",[133,101744,101745],{"className":30407,"code":101604,"language":30409,"meta":31,"style":31},[139,101746,101747,101755,101759],{"__ignoreMap":31},[142,101748,101749,101751,101753],{"class":144,"line":145},[142,101750,101323],{"class":201},[142,101752,13593],{"class":148},[142,101754,101328],{"class":257},[142,101756,101757],{"class":144,"line":64},[142,101758,101619],{"class":257},[142,101760,101761],{"class":144,"line":1208},[142,101762,95707],{"class":257},[14,101764,101765,101767,101768,101771],{},[139,101766,101323],{}," 是一个变量名。右边的三引号 ",[139,101769,101770],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[133,101773,101774],{"className":53096,"code":101333,"language":53098,"meta":31,"style":31},[139,101775,101776],{"__ignoreMap":31},[142,101777,101778,101780,101782,101785,101787,101790],{"class":144,"line":145},[142,101779,1063],{"class":152},[142,101781,101030],{"class":51329},[142,101783,101784],{"class":1991}," model",[142,101786,198],{"class":152},[142,101788,101789],{"class":257},"\"first_sim\"",[142,101791,51336],{"class":152},[14,101793,101794,101795,101798,101799,28414],{},"这是 XML 的根标签。",[139,101796,101797],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[139,101800,101801],{},"first_sim",[133,101803,101804],{"className":53096,"code":101192,"language":53098,"meta":31,"style":31},[139,101805,101806],{"__ignoreMap":31},[142,101807,101808,101810,101812,101814,101816,101818,101820,101822,101824],{"class":144,"line":145},[142,101809,1063],{"class":152},[142,101811,69195],{"class":51329},[142,101813,101203],{"class":1991},[142,101815,198],{"class":152},[142,101817,101208],{"class":257},[142,101819,101211],{"class":1991},[142,101821,198],{"class":152},[142,101823,101216],{"class":257},[142,101825,101153],{"class":152},[14,101827,101828,101830,101831,101834,101835,101838],{},[139,101829,69195],{}," 用来设置仿真参数。",[139,101832,101833],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[139,101836,101837],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[133,101840,101842],{"className":53096,"code":101841,"language":53098,"meta":31,"style":31},"\u003Cworldbody>\n",[139,101843,101844],{"__ignoreMap":31},[142,101845,101846,101848,101851],{"class":144,"line":145},[142,101847,1063],{"class":152},[142,101849,101850],{"class":51329},"worldbody",[142,101852,51336],{"class":152},[14,101854,101855,101857],{},[139,101856,101850],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[133,101859,101861],{"className":53096,"code":101860,"language":53098,"meta":31,"style":31},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[139,101862,101863],{"__ignoreMap":31},[142,101864,101865,101867,101869,101871,101873,101876,101878,101880,101883,101885,101887,101890,101892,101894,101897],{"class":144,"line":145},[142,101866,1063],{"class":152},[142,101868,101129],{"class":51329},[142,101870,14949],{"class":1991},[142,101872,198],{"class":152},[142,101874,101875],{"class":257},"\"floor\"",[142,101877,53853],{"class":1991},[142,101879,198],{"class":152},[142,101881,101882],{"class":257},"\"plane\"",[142,101884,101145],{"class":1991},[142,101886,198],{"class":152},[142,101888,101889],{"class":257},"\"2 2 0.1\"",[142,101891,78796],{"class":1991},[142,101893,198],{"class":152},[142,101895,101896],{"class":257},"\"0.8 0.8 0.8 1\"",[142,101898,101153],{"class":152},[14,101900,101901,101902,101904,101905,101908,101909,101912,101913,101915],{},"这行创建地面。",[139,101903,101129],{}," 是几何体。",[139,101906,101907],{},"name=\"floor\""," 是名字。",[139,101910,101911],{},"type=\"plane\""," 表示平面。",[139,101914,55139],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[133,101917,101919],{"className":53096,"code":101918,"language":53098,"meta":31,"style":31},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[139,101920,101921],{"__ignoreMap":31},[142,101922,101923,101925,101927,101929,101931,101933,101935,101937,101939],{"class":144,"line":145},[142,101924,1063],{"class":152},[142,101926,51829],{"class":51329},[142,101928,14949],{"class":1991},[142,101930,198],{"class":152},[142,101932,53520],{"class":257},[142,101934,101115],{"class":1991},[142,101936,198],{"class":152},[142,101938,101120],{"class":257},[142,101940,51336],{"class":152},[14,101942,101943,101944,28414,101946,101949,101950,101952],{},"这行创建一个刚体，名字叫 ",[139,101945,53743],{},[139,101947,101948],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[139,101951,101178],{},"，也就是离地面 1 米高。",[133,101954,101956],{"className":53096,"code":101955,"language":53098,"meta":31,"style":31},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[139,101957,101958],{"__ignoreMap":31},[142,101959,101960,101962,101964,101966,101968,101971],{"class":144,"line":145},[142,101961,1063],{"class":152},[142,101963,101629],{"class":51329},[142,101965,14949],{"class":1991},[142,101967,198],{"class":152},[142,101969,101970],{"class":257},"\"box_free\"",[142,101972,101153],{"class":152},[14,101974,101975,101976,101978],{},"这行很重要。",[139,101977,101629],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[133,101980,101982],{"className":53096,"code":101981,"language":53098,"meta":31,"style":31},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[139,101983,101984],{"__ignoreMap":31},[142,101985,101986,101988,101990,101992,101994,101996,101998,102000,102002,102004,102006,102008,102011,102013,102015,102017,102019,102022],{"class":144,"line":145},[142,101987,1063],{"class":152},[142,101989,101129],{"class":51329},[142,101991,14949],{"class":1991},[142,101993,198],{"class":152},[142,101995,101136],{"class":257},[142,101997,53853],{"class":1991},[142,101999,198],{"class":152},[142,102001,53520],{"class":257},[142,102003,101145],{"class":1991},[142,102005,198],{"class":152},[142,102007,101150],{"class":257},[142,102009,102010],{"class":1991}," mass",[142,102012,198],{"class":152},[142,102014,3706],{"class":257},[142,102016,78796],{"class":1991},[142,102018,198],{"class":152},[142,102020,102021],{"class":257},"\"1 0 0 1\"",[142,102023,101153],{"class":152},[14,102025,102026,102027,102030,102031,102034,102035,102038,102039,102042],{},"这行给 box body 添加一个盒子形状。",[139,102028,102029],{},"type=\"box\""," 表示形状是盒子。",[139,102032,102033],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[139,102036,102037],{},"mass=\"1\""," 表示质量是 1。",[139,102040,102041],{},"rgba=\"1 0 0 1\""," 表示红色。",[133,102044,102046],{"className":30407,"code":102045,"language":30409,"meta":31,"style":31},"def main() -> None:\n",[139,102047,102048],{"__ignoreMap":31},[142,102049,102050,102052,102054,102056,102058],{"class":144,"line":145},[142,102051,31976],{"class":148},[142,102053,2001],{"class":1991},[142,102055,101407],{"class":152},[142,102057,95695],{"class":201},[142,102059,3767],{"class":152},[14,102061,102062,102064,102065,102068,102069,102072],{},[139,102063,31976],{}," 用来定义函数。这里定义了一个叫 ",[139,102066,102067],{},"main"," 的函数。",[139,102070,102071],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[133,102074,102075],{"className":30407,"code":101636,"language":30409,"meta":31,"style":31},[139,102076,102077],{"__ignoreMap":31},[142,102078,102079,102081,102083,102085,102087],{"class":144,"line":145},[142,102080,101643],{"class":152},[142,102082,198],{"class":148},[142,102084,101421],{"class":152},[142,102086,101323],{"class":201},[142,102088,159],{"class":152},[14,102090,102091,102092,102095],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[139,102093,102094],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[133,102097,102098],{"className":30407,"code":101660,"language":30409,"meta":31,"style":31},[139,102099,102100],{"__ignoreMap":31},[142,102101,102102,102104,102106],{"class":144,"line":145},[142,102103,101667],{"class":152},[142,102105,198],{"class":148},[142,102107,101435],{"class":152},[14,102109,102110,102111,102113,102114,102116],{},"这行创建仿真数据。",[139,102112,33430],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[139,102115,33430],{}," 都会变化。",[133,102118,102120],{"className":30407,"code":102119,"language":30409,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[139,102121,102122,102132,102142],{"__ignoreMap":31},[142,102123,102124,102126,102128,102130],{"class":144,"line":145},[142,102125,30444],{"class":201},[142,102127,153],{"class":152},[142,102129,101448],{"class":257},[142,102131,101451],{"class":152},[142,102133,102134,102136,102138,102140],{"class":144,"line":64},[142,102135,30444],{"class":201},[142,102137,153],{"class":152},[142,102139,101460],{"class":257},[142,102141,101463],{"class":152},[142,102143,102144,102146,102148,102150],{"class":144,"line":1208},[142,102145,30444],{"class":201},[142,102147,153],{"class":152},[142,102149,101472],{"class":257},[142,102151,101475],{"class":152},[14,102153,102154,102156,102157,102160,102161,102164,102165,102168,102169,102172],{},[139,102155,30444],{}," 用来输出信息。",[139,102158,102159],{},"model.nq"," 是位置变量数量，",[139,102162,102163],{},"model.nv"," 是速度变量数量，",[139,102166,102167],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[139,102170,102171],{},"nu"," 是 0。",[133,102174,102176],{"className":30407,"code":102175,"language":30409,"meta":31,"style":31},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[139,102177,102178,102188],{"__ignoreMap":31},[142,102179,102180,102182,102184,102186],{"class":144,"line":145},[142,102181,30444],{"class":201},[142,102183,153],{"class":152},[142,102185,101484],{"class":257},[142,102187,101487],{"class":152},[142,102189,102190,102192,102194,102196],{"class":144,"line":64},[142,102191,30444],{"class":201},[142,102193,153],{"class":152},[142,102195,101496],{"class":257},[142,102197,101499],{"class":152},[14,102199,102200,102201,102203,102204,102206,102207,102210],{},"这里打印初始时间和初始位置。",[139,102202,101076],{}," 一开始是 0。",[139,102205,101079],{}," 是位置数组。",[139,102208,102209],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[133,102212,102213],{"className":30407,"code":101685,"language":30409,"meta":31,"style":31},[139,102214,102215,102231],{"__ignoreMap":31},[142,102216,102217,102219,102221,102223,102225,102227,102229],{"class":144,"line":145},[142,102218,3053],{"class":148},[142,102220,101510],{"class":152},[142,102222,26072],{"class":148},[142,102224,32472],{"class":201},[142,102226,153],{"class":152},[142,102228,464],{"class":201},[142,102230,30815],{"class":152},[142,102232,102233],{"class":144,"line":64},[142,102234,101708],{"class":152},[14,102236,102237,102239,102240,102243,102244,102246,102247,102249],{},[139,102238,3053],{}," 是循环。",[139,102241,102242],{},"range(100)"," 表示循环 100 次。",[139,102245,1145],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[139,102248,101224],{},"，仿真就前进一步。",[133,102251,102253],{"className":30407,"code":102252,"language":30409,"meta":31,"style":31},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[139,102254,102255,102265],{"__ignoreMap":31},[142,102256,102257,102259,102261,102263],{"class":144,"line":145},[142,102258,30444],{"class":201},[142,102260,153],{"class":152},[142,102262,101538],{"class":257},[142,102264,101487],{"class":152},[142,102266,102267,102269,102271,102273],{"class":144,"line":64},[142,102268,30444],{"class":201},[142,102270,153],{"class":152},[142,102272,101549],{"class":257},[142,102274,101499],{"class":152},[14,102276,102277],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[133,102279,102281],{"className":30407,"code":102280,"language":30409,"meta":31,"style":31},"if __name__ == \"__main__\":\n    main()\n",[139,102282,102283,102295],{"__ignoreMap":31},[142,102284,102285,102287,102289,102291,102293],{"class":144,"line":145},[142,102286,1559],{"class":148},[142,102288,31249],{"class":201},[142,102290,101568],{"class":148},[142,102292,101571],{"class":257},[142,102294,3767],{"class":152},[142,102296,102297],{"class":144,"line":64},[142,102298,101578],{"class":152},[14,102300,102301,102302,102305,102306,28414],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[139,102303,102304],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[139,102307,102304],{},[14,102309,102310],{},"运行:",[133,102312,102314],{"className":23851,"code":102313,"language":23853,"meta":31,"style":31},"python ch1_first_sim.py\n",[139,102315,102316],{"__ignoreMap":31},[142,102317,102318,102320],{"class":144,"line":145},[142,102319,30409],{"class":1991},[142,102321,101295],{"class":257},[84,102323,102325],{"id":102324},"_5运行结果说明","5.运行结果说明",[14,102327,102328],{},"你应该看到类似输出:",[133,102330,102333],{"className":102331,"code":102332,"language":5216,"meta":31},[5214],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[139,102334,102332],{"__ignoreMap":31},[14,102336,102337,102339,102340,102343,102344,28414],{},[139,102338,101629],{}," 有 7 个位置变量: ",[139,102341,102342],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[139,102345,102346],{},"vx vy vz wx wy wz",[14,102348,102349,102350,102353],{},"你还会看到 ",[139,102351,102352],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[84,102355,102357],{"id":102356},"_6验证步骤","6.验证步骤",[14,102359,102360],{},"确认版本:",[133,102362,102363],{"className":23851,"code":100948,"language":23853,"meta":31,"style":31},[139,102364,102365],{"__ignoreMap":31},[142,102366,102367,102369,102371],{"class":144,"line":145},[142,102368,30409],{"class":1991},[142,102370,30387],{"class":201},[142,102372,100959],{"class":257},[14,102374,102375],{},"确认导入的是官方 bindings:",[133,102377,102379],{"className":23851,"code":102378,"language":23853,"meta":31,"style":31},"python -c \"import mujoco; print(mujoco)\"\n",[139,102380,102381],{"__ignoreMap":31},[142,102382,102383,102385,102387],{"class":144,"line":145},[142,102384,30409],{"class":1991},[142,102386,30387],{"class":201},[142,102388,102389],{"class":257}," \"import mujoco; print(mujoco)\"\n",[14,102391,102392],{},"运行程序:",[133,102394,102395],{"className":23851,"code":102313,"language":23853,"meta":31,"style":31},[139,102396,102397],{"__ignoreMap":31},[142,102398,102399,102401],{"class":144,"line":145},[142,102400,30409],{"class":1991},[142,102402,101295],{"class":257},[14,102404,102405,102406,102409,102410,28414],{},"检查 ",[139,102407,102408],{},"final time"," 是否约等于 ",[139,102411,102412],{},"1.0",[14,102414,102415],{},"再做几个小实验：",[96,102417,102418,102428,102436,102449],{},[99,102419,102420,102421,102423,102424,102427],{},"把 ",[139,102422,101948],{}," 改成 ",[139,102425,102426],{},"pos=\"0 0 2\"","，观察初始高度变化。",[99,102429,102420,102430,102423,102432,102435],{},[139,102431,101837],{},[139,102433,102434],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[99,102437,102420,102438,102423,102440,102443,102444,102446,102447,28414],{},[139,102439,101833],{},[139,102441,102442],{},"timestep=\"0.005\"","，观察 100 步后的 ",[139,102445,102408],{}," 是否变成约 ",[139,102448,35358],{},[99,102450,102451,102452,102455],{},"删除 ",[139,102453,102454],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102457,102458],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[84,102460,102462],{"id":102461},"_7常见错误与解决方案","7.常见错误与解决方案",[113,102464,102466],{"id":102465},"modulenotfounderror-no-module-named-mujoco",[139,102467,102468],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102470,102471],{},"解决:",[133,102473,102475],{"className":23851,"code":102474,"language":23853,"meta":31,"style":31},"pip install \"mujoco>=2.3\"\n",[139,102476,102477],{"__ignoreMap":31},[142,102478,102479,102481,102483],{"class":144,"line":145},[142,102480,23860],{"class":1991},[142,102482,23863],{"class":257},[142,102484,102485],{"class":257}," \"mujoco>=2.3\"\n",[113,102487,102489],{"id":102488},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102491,102492],{},"先安装系统依赖:",[133,102494,102496],{"className":23851,"code":102495,"language":23853,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[139,102497,102498],{"__ignoreMap":31},[142,102499,102500,102502,102504,102506,102508,102511,102513,102516,102518,102521,102523],{"class":144,"line":145},[142,102501,24606],{"class":1991},[142,102503,26344],{"class":257},[142,102505,23863],{"class":257},[142,102507,26429],{"class":201},[142,102509,102510],{"class":257}," mesa-libGL",[142,102512,100823],{"class":257},[142,102514,102515],{"class":257}," glfw",[142,102517,100843],{"class":257},[142,102519,102520],{"class":257}," libX11",[142,102522,100856],{"class":257},[142,102524,102525],{"class":257}," libXrandr\n",[113,102527,102529],{"id":102528},"xml-解析失败","XML 解析失败",[14,102531,102532],{},"检查:",[96,102534,102535,102538,102541,102547],{},[99,102536,102537],{},"标签是否闭合",[99,102539,102540],{},"属性是否带引号",[99,102542,102543,102544],{},"根节点是否是 ",[139,102545,102546],{},"\u003Cmujoco>",[99,102548,102549,102551,102552,102555],{},[139,102550,51829],{}," 是否放在 ",[139,102553,102554],{},"\u003Cworldbody>"," 内部",[113,102557,102559,102561,102562],{"id":102558},"final-time-不是严格等于-10",[139,102560,102408],{}," 不是严格等于 ",[139,102563,102412],{},[14,102565,102566],{},"这通常不是错误。浮点数计算可能得到：",[133,102568,102571],{"className":102569,"code":102570,"language":5216,"meta":31},[5214],"1.0000000000000007\n",[139,102572,102570],{"__ignoreMap":31},[14,102574,102575,102576,102578],{},"只要接近 ",[139,102577,102412],{}," 就正常。",[113,102580,102581],{"id":102581},"方块没有掉下来",[14,102583,102584],{},"检查：",[96,102586,102587,102593,102599,102604],{},[99,102588,102589,102590],{},"方块 body 里是否有 ",[139,102591,102592],{},"\u003Cfreejoint\u002F>",[99,102594,102595,102596],{},"重力是否是 ",[139,102597,102598],{},"0 0 -9.81",[99,102600,102601,102602],{},"是否真的调用了 ",[139,102603,100694],{},[99,102605,102606,102607,102609,102610],{},"你看的是否是 ",[139,102608,102352],{},"，不是 ",[139,102611,102612],{},"initial qpos",[84,102614,102616],{"id":102615},"_8本章小结","8.本章小结",[14,102618,102619],{},"本章你已经完成了 MuJoCo 的最小闭环：",[133,102621,102624],{"className":102622,"code":102623,"language":5216,"meta":31},[5214],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[139,102625,102623],{"__ignoreMap":31},[14,102627,102628],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5155,102630,102631],{},"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":31,"searchDepth":64,"depth":64,"links":102633},[102634,102635,102636,102641,102645,102646,102647,102655],{"id":100655,"depth":64,"text":100656},{"id":100778,"depth":64,"text":100779},{"id":101053,"depth":64,"text":101054,"children":102637},[102638,102639,102640],{"id":101091,"depth":1208,"text":101092},{"id":101185,"depth":1208,"text":101186},{"id":101237,"depth":1208,"text":101238},{"id":101261,"depth":64,"text":101262,"children":102642},[102643,102644],{"id":101581,"depth":1208,"text":101581},{"id":101717,"depth":1208,"text":101717},{"id":102324,"depth":64,"text":102325},{"id":102356,"depth":64,"text":102357},{"id":102461,"depth":64,"text":102462,"children":102648},[102649,102650,102651,102652,102654],{"id":102465,"depth":1208,"text":102468},{"id":102488,"depth":1208,"text":102489},{"id":102528,"depth":1208,"text":102529},{"id":102558,"depth":1208,"text":102653},"final time 不是严格等于 1.0",{"id":102581,"depth":1208,"text":102581},{"id":102615,"depth":64,"text":102616},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100647,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102662,"title":102663,"body":102664,"description":31,"extension":67,"meta":104320,"navigation":69,"path":104321,"seo":104322,"stem":104323,"__hash__":104324},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102665,"toc":104296},[102666,102669,102671,102674,102677,102694,102789,102792,102798,102800,102802,102826,102829,102843,102846,102887,102889,102902,102904,102907,102955,102967,102970,102973,102979,102992,103059,103062,103081,103084,103087,103093,103095,103104,103107,103111,103120,103202,103211,103215,103221,103235,103245,103247,103577,103580,103592,103594,103605,103607,103610,103628,103631,103634,103652,103663,103666,103681,103691,103693,103714,103731,103751,103757,103797,103813,103829,103835,103838,103862,103878,103883,103913,103930,103955,103958,103973,103982,103997,104006,104021,104028,104030,104040,104053,104060,104063,104102,104109,104111,104163,104165,104171,104174,104181,104188,104191,104193,104211,104214,104217,104251,104263,104265,104268,104290,104293],[10,102667,102663],{"id":102668},"_2xml-与-mjcf-物理建模基础",[84,102670,100656],{"id":100655},[14,102672,102673],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102675,102676],{},"本章结束后，你应该能看懂一个简单模型里：",[96,102678,102679,102682,102685,102688,102691],{},[99,102680,102681],{},"地面在哪里。",[99,102683,102684],{},"物体初始位置在哪里。",[99,102686,102687],{},"几何体是什么形状。",[99,102689,102690],{},"哪些 body 可以自由运动。",[99,102692,102693],{},"如何用名字在 Python 里找到 XML 中的对象。",[290,102695,102696,102706],{},[293,102697,102698],{},[296,102699,102700,102703],{},[299,102701,102702],{"align":23765},"标签",[299,102704,102705],{"align":23765},"作用",[337,102707,102708,102717,102727,102736,102746,102756,102769,102779],{},[296,102709,102710,102714],{},[342,102711,102712],{"align":23765},[139,102713,102546],{},[342,102715,102716],{"align":23765},"根节点",[296,102718,102719,102724],{},[342,102720,102721],{"align":23765},[139,102722,102723],{},"\u003Coption>",[342,102725,102726],{"align":23765},"仿真参数",[296,102728,102729,102733],{},[342,102730,102731],{"align":23765},[139,102732,102554],{},[342,102734,102735],{"align":23765},"世界中的物体",[296,102737,102738,102743],{},[342,102739,102740],{"align":23765},[139,102741,102742],{},"\u003Cbody>",[342,102744,102745],{"align":23765},"刚体",[296,102747,102748,102753],{},[342,102749,102750],{"align":23765},[139,102751,102752],{},"\u003Cgeom>",[342,102754,102755],{"align":23765},"几何体、碰撞体、可视体",[296,102757,102758,102766],{},[342,102759,102760,25007,102763],{"align":23765},[139,102761,102762],{},"\u003Cjoint>",[139,102764,102765],{},"\u003Cfreejoint>",[342,102767,102768],{"align":23765},"关节",[296,102770,102771,102776],{},[342,102772,102773],{"align":23765},[139,102774,102775],{},"\u003Csite>",[342,102777,102778],{"align":23765},"标记点",[296,102780,102781,102786],{},[342,102782,102783],{"align":23765},[139,102784,102785],{},"\u003Cactuator>",[342,102787,102788],{"align":23765},"控制器",[14,102790,102791],{},"初学时可以先记住：",[133,102793,102796],{"className":102794,"code":102795,"language":5216,"meta":31},[5214],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[139,102797,102795],{"__ignoreMap":31},[84,102799,100779],{"id":100778},[14,102801,100782],{},[133,102803,102805],{"className":23851,"code":102804,"language":23853,"meta":31,"style":31},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[139,102806,102807],{"__ignoreMap":31},[142,102808,102809,102811,102813,102815,102817,102819,102821,102823],{"class":144,"line":145},[142,102810,24606],{"class":1991},[142,102812,26344],{"class":257},[142,102814,23863],{"class":257},[142,102816,26429],{"class":201},[142,102818,102510],{"class":257},[142,102820,100823],{"class":257},[142,102822,102515],{"class":257},[142,102824,102825],{"class":257}," glfw-devel\n",[14,102827,102828],{},"pip:",[133,102830,102831],{"className":23851,"code":100928,"language":23853,"meta":31,"style":31},[139,102832,102833],{"__ignoreMap":31},[142,102834,102835,102837,102839,102841],{"class":144,"line":145},[142,102836,23860],{"class":1991},[142,102838,23863],{"class":257},[142,102840,100939],{"class":257},[142,102842,100942],{"class":257},[14,102844,102845],{},"conda:",[133,102847,102849],{"className":23851,"code":102848,"language":23853,"meta":31,"style":31},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[139,102850,102851,102868,102877],{"__ignoreMap":31},[142,102852,102853,102855,102857,102859,102862,102864,102866],{"class":144,"line":145},[142,102854,30359],{"class":1991},[142,102856,29205],{"class":257},[142,102858,25144],{"class":201},[142,102860,102861],{"class":257}," mujoco-xml",[142,102863,100984],{"class":257},[142,102865,100987],{"class":201},[142,102867,100990],{"class":201},[142,102869,102870,102872,102874],{"class":144,"line":64},[142,102871,30359],{"class":1991},[142,102873,100997],{"class":257},[142,102875,102876],{"class":257}," mujoco-xml\n",[142,102878,102879,102881,102883,102885],{"class":144,"line":1208},[142,102880,23860],{"class":1991},[142,102882,23863],{"class":257},[142,102884,100939],{"class":257},[142,102886,100942],{"class":257},[14,102888,101013],{},[96,102890,102891,102894,102899],{},[99,102892,102893],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[99,102895,102896,102897,28414],{},"本章使用基础标签，适用于 ",[139,102898,101036],{},[99,102900,102901],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[84,102903,101054],{"id":101053},[14,102905,102906],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[133,102908,102910],{"className":53096,"code":102909,"language":53098,"meta":31,"style":31},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[139,102911,102912,102926,102934,102939,102947],{"__ignoreMap":31},[142,102913,102914,102916,102918,102920,102922,102924],{"class":144,"line":145},[142,102915,1063],{"class":152},[142,102917,101030],{"class":51329},[142,102919,101784],{"class":1991},[142,102921,198],{"class":152},[142,102923,62708],{"class":257},[142,102925,51336],{"class":152},[142,102927,102928,102930,102932],{"class":144,"line":64},[142,102929,52173],{"class":152},[142,102931,101850],{"class":51329},[142,102933,51336],{"class":152},[142,102935,102936],{"class":144,"line":1208},[142,102937,102938],{"class":152},"    ...\n",[142,102940,102941,102943,102945],{"class":144,"line":1223},[142,102942,52446],{"class":152},[142,102944,101850],{"class":51329},[142,102946,51336],{"class":152},[142,102948,102949,102951,102953],{"class":144,"line":1229},[142,102950,51814],{"class":152},[142,102952,101030],{"class":51329},[142,102954,51336],{"class":152},[14,102956,102957,102959,102960,102962,102963,102966],{},[139,102958,51829],{}," 表示刚体。",[139,102961,101129],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[139,102964,102965],{},"joint"," 表示刚体相对父刚体如何运动。",[113,102968,102969],{"id":102969},"层级结构非常重要",[14,102971,102972],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[133,102974,102977],{"className":102975,"code":102976,"language":5216,"meta":31},[5214],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[139,102978,102976],{"__ignoreMap":31},[14,102980,102981,101027,102984,102987,102988,102991],{},[139,102982,102983],{},"red_box_geom",[139,102985,102986],{},"box_center"," 都属于 ",[139,102989,102990],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[133,102993,102995],{"className":53096,"code":102994,"language":53098,"meta":31,"style":31},"\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",[139,102996,102997,103017,103031,103051],{"__ignoreMap":31},[142,102998,102999,103001,103003,103005,103007,103009,103011,103013,103015],{"class":144,"line":145},[142,103000,1063],{"class":152},[142,103002,51829],{"class":51329},[142,103004,14949],{"class":1991},[142,103006,198],{"class":152},[142,103008,53520],{"class":257},[142,103010,101115],{"class":1991},[142,103012,198],{"class":152},[142,103014,101120],{"class":257},[142,103016,51336],{"class":152},[142,103018,103019,103021,103023,103025,103027,103029],{"class":144,"line":64},[142,103020,52173],{"class":152},[142,103022,101629],{"class":51329},[142,103024,14949],{"class":1991},[142,103026,198],{"class":152},[142,103028,101970],{"class":257},[142,103030,101153],{"class":152},[142,103032,103033,103035,103037,103039,103041,103043,103045,103047,103049],{"class":144,"line":1208},[142,103034,52173],{"class":152},[142,103036,101129],{"class":51329},[142,103038,53853],{"class":1991},[142,103040,198],{"class":152},[142,103042,53520],{"class":257},[142,103044,101145],{"class":1991},[142,103046,198],{"class":152},[142,103048,101150],{"class":257},[142,103050,101153],{"class":152},[142,103052,103053,103055,103057],{"class":144,"line":1223},[142,103054,51814],{"class":152},[142,103056,51829],{"class":51329},[142,103058,51336],{"class":152},[14,103060,103061],{},"含义:",[96,103063,103064,103070,103075,103078],{},[99,103065,103066,103067,103069],{},"创建名为 ",[139,103068,53743],{}," 的刚体",[99,103071,103072,103073],{},"初始位置在世界坐标 ",[139,103074,101178],{},[99,103076,103077],{},"它有一个自由关节",[99,103079,103080],{},"它有一个盒子几何体",[113,103082,103083],{"id":103083},"坐标怎么理解",[14,103085,103086],{},"MuJoCo 默认使用三维坐标：",[133,103088,103091],{"className":103089,"code":103090,"language":5216,"meta":31},[5214],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[139,103092,103090],{"__ignoreMap":31},[14,103094,14662],{},[133,103096,103098],{"className":53096,"code":103097,"language":53098,"meta":31,"style":31},"pos=\"0 0 1\"\n",[139,103099,103100],{"__ignoreMap":31},[142,103101,103102],{"class":144,"line":145},[142,103103,103097],{"class":152},[14,103105,103106],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[113,103108,103110],{"id":103109},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103112,103113,103114,82559,103117,103119],{},"不同 ",[139,103115,103116],{},"type",[139,103118,31525],{}," 含义不同：",[290,103121,103122,103137],{},[293,103123,103124],{},[296,103125,103126,103130,103135],{},[299,103127,103128],{"align":23765},[139,103129,103116],{},[299,103131,103132,103134],{"align":23765},[139,103133,31525],{}," 示例",[299,103136,100709],{"align":23765},[337,103138,103139,103153,103168,103187],{},[296,103140,103141,103145,103150],{},[342,103142,103143],{"align":23765},[139,103144,53743],{},[342,103146,103147],{"align":23765},[139,103148,103149],{},"size=\"0.1 0.2 0.3\"",[342,103151,103152],{"align":23765},"x\u002Fy\u002Fz 半边长，不是完整长度",[296,103154,103155,103160,103165],{},[342,103156,103157],{"align":23765},[139,103158,103159],{},"sphere",[342,103161,103162],{"align":23765},[139,103163,103164],{},"size=\"0.1\"",[342,103166,103167],{"align":23765},"球半径",[296,103169,103170,103175,103180],{},[342,103171,103172],{"align":23765},[139,103173,103174],{},"capsule",[342,103176,103177],{"align":23765},[139,103178,103179],{},"size=\"0.03\"",[342,103181,103182,103183,103186],{"align":23765},"胶囊半径，长度常用 ",[139,103184,103185],{},"fromto"," 指定",[296,103188,103189,103194,103199],{},[342,103190,103191],{"align":23765},[139,103192,103193],{},"plane",[342,103195,103196],{"align":23765},[139,103197,103198],{},"size=\"3 3 0.1\"",[342,103200,103201],{"align":23765},"可视平面大小，通常当地面",[14,103203,103204,103205,103207,103208,103210],{},"最容易踩坑的是 box：",[139,103206,102033],{}," 表示边长大约是 ",[139,103209,32066],{},"，因为 MuJoCo 用的是半边长。",[113,103212,103214],{"id":103213},"site-是什么","site 是什么",[14,103216,103217,103220],{},[139,103218,103219],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[96,103222,103223,103226,103229,103232],{},[99,103224,103225],{},"标记机械臂末端。",[99,103227,103228],{},"标记目标位置。",[99,103230,103231],{},"放传感器或相机参考点。",[99,103233,103234],{},"在 Python 中读取某个关键点的世界坐标。",[14,103236,103237,103238,101027,103241,103244],{},"在后面的 Reacher 任务中，",[139,103239,103240],{},"tip",[139,103242,103243],{},"target"," 就会用 site 表示。",[84,103246,101262],{"id":101261},[133,103248,103250],{"className":30407,"code":103249,"language":30409,"meta":31,"style":31},"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",[139,103251,103252,103258,103268,103272,103276,103284,103289,103293,103297,103301,103306,103310,103315,103320,103325,103330,103334,103338,103342,103346,103350,103354,103366,103378,103386,103390,103405,103420,103424,103437,103452,103465,103478,103482,103498,103502,103506,103517,103529,103541,103553,103557,103561,103573],{"__ignoreMap":31},[142,103253,103254,103256],{"class":144,"line":145},[142,103255,30421],{"class":148},[142,103257,101310],{"class":152},[142,103259,103260,103262,103264,103266],{"class":144,"line":64},[142,103261,30421],{"class":148},[142,103263,31409],{"class":152},[142,103265,31412],{"class":148},[142,103267,31415],{"class":152},[142,103269,103270],{"class":144,"line":1208},[142,103271,2428],{"emptyLinePlaceholder":69},[142,103273,103274],{"class":144,"line":1223},[142,103275,2428],{"emptyLinePlaceholder":69},[142,103277,103278,103280,103282],{"class":144,"line":1229},[142,103279,101323],{"class":201},[142,103281,13593],{"class":148},[142,103283,101328],{"class":257},[142,103285,103286],{"class":144,"line":1243},[142,103287,103288],{"class":257},"\u003Cmujoco model=\"xml_basic\">\n",[142,103290,103291],{"class":144,"line":1249},[142,103292,101338],{"class":257},[142,103294,103295],{"class":144,"line":1340},[142,103296,2428],{"emptyLinePlaceholder":69},[142,103298,103299],{"class":144,"line":1346},[142,103300,101347],{"class":257},[142,103302,103303],{"class":144,"line":1358},[142,103304,103305],{"class":257},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[142,103307,103308],{"class":144,"line":1640},[142,103309,2428],{"emptyLinePlaceholder":69},[142,103311,103312],{"class":144,"line":1645},[142,103313,103314],{"class":257},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[142,103316,103317],{"class":144,"line":1651},[142,103318,103319],{"class":257},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[142,103321,103322],{"class":144,"line":1656},[142,103323,103324],{"class":257},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[142,103326,103327],{"class":144,"line":1670},[142,103328,103329],{"class":257},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[142,103331,103332],{"class":144,"line":1675},[142,103333,101376],{"class":257},[142,103335,103336],{"class":144,"line":1681},[142,103337,101381],{"class":257},[142,103339,103340],{"class":144,"line":1702},[142,103341,101386],{"class":257},[142,103343,103344],{"class":144,"line":1707},[142,103345,95707],{"class":257},[142,103347,103348],{"class":144,"line":1721},[142,103349,2428],{"emptyLinePlaceholder":69},[142,103351,103352],{"class":144,"line":1726},[142,103353,2428],{"emptyLinePlaceholder":69},[142,103355,103356,103358,103360,103362,103364],{"class":144,"line":1755},[142,103357,31976],{"class":148},[142,103359,2001],{"class":1991},[142,103361,101407],{"class":152},[142,103363,95695],{"class":201},[142,103365,3767],{"class":152},[142,103367,103368,103370,103372,103374,103376],{"class":144,"line":1760},[142,103369,101416],{"class":152},[142,103371,198],{"class":148},[142,103373,101421],{"class":152},[142,103375,101323],{"class":201},[142,103377,159],{"class":152},[142,103379,103380,103382,103384],{"class":144,"line":1777},[142,103381,101430],{"class":152},[142,103383,198],{"class":148},[142,103385,101435],{"class":152},[142,103387,103388],{"class":144,"line":1782},[142,103389,2428],{"emptyLinePlaceholder":69},[142,103391,103392,103395,103397,103400,103403],{"class":144,"line":1787},[142,103393,103394],{"class":152},"    box_body_id ",[142,103396,198],{"class":148},[142,103398,103399],{"class":152}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[142,103401,103402],{"class":257},"\"red_box\"",[142,103404,159],{"class":152},[142,103406,103407,103410,103412,103415,103418],{"class":144,"line":1792},[142,103408,103409],{"class":152},"    site_id ",[142,103411,198],{"class":148},[142,103413,103414],{"class":152}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[142,103416,103417],{"class":257},"\"box_center\"",[142,103419,159],{"class":152},[142,103421,103422],{"class":144,"line":1806},[142,103423,2428],{"emptyLinePlaceholder":69},[142,103425,103426,103428,103431,103433,103435],{"class":144,"line":1811},[142,103427,3129],{"class":148},[142,103429,103430],{"class":152}," box_body_id ",[142,103432,1063],{"class":148},[142,103434,4121],{"class":201},[142,103436,3767],{"class":152},[142,103438,103439,103442,103445,103447,103450],{"class":144,"line":2605},[142,103440,103441],{"class":148},"        raise",[142,103443,103444],{"class":201}," RuntimeError",[142,103446,153],{"class":152},[142,103448,103449],{"class":257},"\"body red_box not found\"",[142,103451,159],{"class":152},[142,103453,103454,103456,103459,103461,103463],{"class":144,"line":2619},[142,103455,3129],{"class":148},[142,103457,103458],{"class":152}," site_id ",[142,103460,1063],{"class":148},[142,103462,4121],{"class":201},[142,103464,3767],{"class":152},[142,103466,103467,103469,103471,103473,103476],{"class":144,"line":2627},[142,103468,103441],{"class":148},[142,103470,103444],{"class":201},[142,103472,153],{"class":152},[142,103474,103475],{"class":257},"\"site box_center not found\"",[142,103477,159],{"class":152},[142,103479,103480],{"class":144,"line":2632},[142,103481,2428],{"emptyLinePlaceholder":69},[142,103483,103484,103486,103488,103490,103492,103494,103496],{"class":144,"line":2638},[142,103485,3229],{"class":148},[142,103487,101510],{"class":152},[142,103489,26072],{"class":148},[142,103491,32472],{"class":201},[142,103493,153],{"class":152},[142,103495,1750],{"class":201},[142,103497,30815],{"class":152},[142,103499,103500],{"class":144,"line":2644},[142,103501,101525],{"class":152},[142,103503,103504],{"class":144,"line":2649},[142,103505,2428],{"emptyLinePlaceholder":69},[142,103507,103508,103510,103512,103515],{"class":144,"line":7977},[142,103509,31328],{"class":201},[142,103511,153],{"class":152},[142,103513,103514],{"class":257},"\"simulation time:\"",[142,103516,101487],{"class":152},[142,103518,103519,103521,103523,103526],{"class":144,"line":8001},[142,103520,31328],{"class":201},[142,103522,153],{"class":152},[142,103524,103525],{"class":257},"\"box body position:\"",[142,103527,103528],{"class":152},", data.xpos[box_body_id].copy())\n",[142,103530,103531,103533,103535,103538],{"class":144,"line":8006},[142,103532,31328],{"class":201},[142,103534,153],{"class":152},[142,103536,103537],{"class":257},"\"site position:\"",[142,103539,103540],{"class":152},", data.site_xpos[site_id].copy())\n",[142,103542,103543,103545,103547,103550],{"class":144,"line":8012},[142,103544,31328],{"class":201},[142,103546,153],{"class":152},[142,103548,103549],{"class":257},"\"box qpos:\"",[142,103551,103552],{"class":152},", np.array(data.qpos))\n",[142,103554,103555],{"class":144,"line":8039},[142,103556,2428],{"emptyLinePlaceholder":69},[142,103558,103559],{"class":144,"line":8044},[142,103560,2428],{"emptyLinePlaceholder":69},[142,103562,103563,103565,103567,103569,103571],{"class":144,"line":8050},[142,103564,1559],{"class":148},[142,103566,31249],{"class":201},[142,103568,101568],{"class":148},[142,103570,101571],{"class":257},[142,103572,3767],{"class":152},[142,103574,103575],{"class":144,"line":8062},[142,103576,101578],{"class":152},[14,103578,103579],{},"保存为：",[133,103581,103583],{"className":23851,"code":103582,"language":23853,"meta":31,"style":31},"touch ch2_xml_basic.py\n",[139,103584,103585],{"__ignoreMap":31},[142,103586,103587,103589],{"class":144,"line":145},[142,103588,101292],{"class":1991},[142,103590,103591],{"class":257}," ch2_xml_basic.py\n",[14,103593,102310],{},[133,103595,103597],{"className":23851,"code":103596,"language":23853,"meta":31,"style":31},"python ch2_xml_basic.py\n",[139,103598,103599],{"__ignoreMap":31},[142,103600,103601,103603],{"class":144,"line":145},[142,103602,30409],{"class":1991},[142,103604,103591],{"class":257},[113,103606,101581],{"id":101581},[14,103608,103609],{},"用名字查找 body：",[133,103611,103613],{"className":30407,"code":103612,"language":30409,"meta":31,"style":31},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[139,103614,103615],{"__ignoreMap":31},[142,103616,103617,103620,103622,103624,103626],{"class":144,"line":145},[142,103618,103619],{"class":152},"box_body_id ",[142,103621,198],{"class":148},[142,103623,103399],{"class":152},[142,103625,103402],{"class":257},[142,103627,159],{"class":152},[14,103629,103630],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103632,103633],{},"用名字查找 site：",[133,103635,103637],{"className":30407,"code":103636,"language":30409,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[139,103638,103639],{"__ignoreMap":31},[142,103640,103641,103644,103646,103648,103650],{"class":144,"line":145},[142,103642,103643],{"class":152},"site_id ",[142,103645,198],{"class":148},[142,103647,103414],{"class":152},[142,103649,103417],{"class":257},[142,103651,159],{"class":152},[14,103653,103654,103655,103658,103659,103662],{},"注意第二个参数是对象类型。查 body 就用 ",[139,103656,103657],{},"mjOBJ_BODY","，查 site 就用 ",[139,103660,103661],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103664,103665],{},"读取世界坐标：",[133,103667,103669],{"className":30407,"code":103668,"language":30409,"meta":31,"style":31},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[139,103670,103671,103676],{"__ignoreMap":31},[142,103672,103673],{"class":144,"line":145},[142,103674,103675],{"class":152},"data.xpos[box_body_id]\n",[142,103677,103678],{"class":144,"line":64},[142,103679,103680],{"class":152},"data.site_xpos[site_id]\n",[14,103682,103683,103686,103687,103690],{},[139,103684,103685],{},"xpos"," 是 body 的世界坐标，",[139,103688,103689],{},"site_xpos"," 是 site 的世界坐标。",[113,103692,101717],{"id":101717},[133,103694,103696],{"className":30407,"code":103695,"language":30409,"meta":31,"style":31},"import mujoco\nimport numpy as np\n",[139,103697,103698,103704],{"__ignoreMap":31},[142,103699,103700,103702],{"class":144,"line":145},[142,103701,30421],{"class":148},[142,103703,101310],{"class":152},[142,103705,103706,103708,103710,103712],{"class":144,"line":64},[142,103707,30421],{"class":148},[142,103709,31409],{"class":152},[142,103711,31412],{"class":148},[142,103713,31415],{"class":152},[14,103715,103716,103717,103720,103721,103724,103725,365,103728,28414],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[139,103718,103719],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[139,103722,103723],{},"as np"," 是习惯写法，后面就可以写 ",[139,103726,103727],{},"np.array(...)",[139,103729,103730],{},"np.round(...)",[133,103732,103733],{"className":30407,"code":101604,"language":30409,"meta":31,"style":31},[139,103734,103735,103743,103747],{"__ignoreMap":31},[142,103736,103737,103739,103741],{"class":144,"line":145},[142,103738,101323],{"class":201},[142,103740,13593],{"class":148},[142,103742,101328],{"class":257},[142,103744,103745],{"class":144,"line":64},[142,103746,101619],{"class":257},[142,103748,103749],{"class":144,"line":1208},[142,103750,95707],{"class":257},[14,103752,103753,103754,28414],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[139,103755,103756],{},"mujoco.MjModel.from_xml_string(XML)",[133,103758,103760],{"className":53096,"code":103759,"language":53098,"meta":31,"style":31},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[139,103761,103762],{"__ignoreMap":31},[142,103763,103764,103766,103768,103770,103772,103774,103776,103778,103781,103783,103785,103788,103790,103792,103795],{"class":144,"line":145},[142,103765,1063],{"class":152},[142,103767,103219],{"class":51329},[142,103769,14949],{"class":1991},[142,103771,198],{"class":152},[142,103773,103417],{"class":257},[142,103775,101115],{"class":1991},[142,103777,198],{"class":152},[142,103779,103780],{"class":257},"\"0 0 0\"",[142,103782,101145],{"class":1991},[142,103784,198],{"class":152},[142,103786,103787],{"class":257},"\"0.03\"",[142,103789,78796],{"class":1991},[142,103791,198],{"class":152},[142,103793,103794],{"class":257},"\"0 1 0 1\"",[142,103796,101153],{"class":152},[14,103798,103799,103801,103802,103805,103806,103808,103809,103812],{},[139,103800,103219],{}," 是标记点。",[139,103803,103804],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[139,103807,103179],{}," 表示显示出来的小球大小。",[139,103810,103811],{},"rgba=\"0 1 0 1\""," 表示绿色。",[133,103814,103815],{"className":30407,"code":103612,"language":30409,"meta":31,"style":31},[139,103816,103817],{"__ignoreMap":31},[142,103818,103819,103821,103823,103825,103827],{"class":144,"line":145},[142,103820,103619],{"class":152},[142,103822,198],{"class":148},[142,103824,103399],{"class":152},[142,103826,103402],{"class":257},[142,103828,159],{"class":152},[14,103830,103831,103832,103834],{},"这行的作用是：根据名字 ",[139,103833,103402],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103836,103837],{},"拆开看：",[96,103839,103840,103846,103851,103857],{},[99,103841,103842,103845],{},[139,103843,103844],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[99,103847,103848,103850],{},[139,103849,102094],{}," 是被查询的模型。",[99,103852,103853,103856],{},[139,103854,103855],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[99,103858,103859,103861],{},[139,103860,103402],{}," 是 XML 里写的名字。",[133,103863,103864],{"className":30407,"code":103636,"language":30409,"meta":31,"style":31},[139,103865,103866],{"__ignoreMap":31},[142,103867,103868,103870,103872,103874,103876],{"class":144,"line":145},[142,103869,103643],{"class":152},[142,103871,198],{"class":148},[142,103873,103414],{"class":152},[142,103875,103417],{"class":257},[142,103877,159],{"class":152},[14,103879,103880,103881,28414],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[139,103882,103417],{},[133,103884,103886],{"className":30407,"code":103885,"language":30409,"meta":31,"style":31},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[139,103887,103888,103900],{"__ignoreMap":31},[142,103889,103890,103892,103894,103896,103898],{"class":144,"line":145},[142,103891,1559],{"class":148},[142,103893,103430],{"class":152},[142,103895,1063],{"class":148},[142,103897,4121],{"class":201},[142,103899,3767],{"class":152},[142,103901,103902,103905,103907,103909,103911],{"class":144,"line":64},[142,103903,103904],{"class":148},"    raise",[142,103906,103444],{"class":201},[142,103908,153],{"class":152},[142,103910,103449],{"class":257},[142,103912,159],{"class":152},[14,103914,103915,103917,103918,103921,103922,103925,103926,103929],{},[139,103916,1559],{}," 是条件判断。",[139,103919,103920],{},"mj_name2id"," 找不到对象时会返回 ",[139,103923,103924],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[139,103927,103928],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[133,103931,103933],{"className":30407,"code":103932,"language":30409,"meta":31,"style":31},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[139,103934,103935,103951],{"__ignoreMap":31},[142,103936,103937,103939,103941,103943,103945,103947,103949],{"class":144,"line":145},[142,103938,3053],{"class":148},[142,103940,101510],{"class":152},[142,103942,26072],{"class":148},[142,103944,32472],{"class":201},[142,103946,153],{"class":152},[142,103948,1750],{"class":201},[142,103950,30815],{"class":152},[142,103952,103953],{"class":144,"line":64},[142,103954,101708],{"class":152},[14,103956,103957],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[133,103959,103961],{"className":30407,"code":103960,"language":30409,"meta":31,"style":31},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[139,103962,103963],{"__ignoreMap":31},[142,103964,103965,103967,103969,103971],{"class":144,"line":145},[142,103966,30444],{"class":201},[142,103968,153],{"class":152},[142,103970,103525],{"class":257},[142,103972,103528],{"class":152},[14,103974,103975,103977,103978,103981],{},[139,103976,101088],{}," 保存所有 body 的世界坐标。",[139,103979,103980],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[133,103983,103985],{"className":30407,"code":103984,"language":30409,"meta":31,"style":31},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[139,103986,103987],{"__ignoreMap":31},[142,103988,103989,103991,103993,103995],{"class":144,"line":145},[142,103990,30444],{"class":201},[142,103992,153],{"class":152},[142,103994,103537],{"class":257},[142,103996,103540],{"class":152},[14,103998,103999,104002,104003,104005],{},[139,104000,104001],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[139,104004,102986],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[133,104007,104009],{"className":30407,"code":104008,"language":30409,"meta":31,"style":31},"print(\"box qpos:\", np.array(data.qpos))\n",[139,104010,104011],{"__ignoreMap":31},[142,104012,104013,104015,104017,104019],{"class":144,"line":145},[142,104014,30444],{"class":201},[142,104016,153],{"class":152},[142,104018,103549],{"class":257},[142,104020,103552],{"class":152},[14,104022,104023,104024,104027],{},"这里打印广义位置数组。",[139,104025,104026],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[84,104029,102325],{"id":102324},[14,104031,104032,104033,104036,104037,28414],{},"程序会输出 ",[139,104034,104035],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[139,104038,104039],{},"qpos",[14,104041,104042,104044,104045,104048,104049,104052],{},[139,104043,103980],{}," 是 body 的世界坐标位置。",[139,104046,104047],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[139,104050,104051],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104054,82251,104055,82559,104057,104059],{},[139,104056,102986],{},[139,104058,103804],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104061,104062],{},"如果你把 site 改成：",[133,104064,104066],{"className":53096,"code":104065,"language":53098,"meta":31,"style":31},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[139,104067,104068],{"__ignoreMap":31},[142,104069,104070,104072,104074,104076,104078,104081,104083,104085,104088,104090,104092,104094,104096,104098,104100],{"class":144,"line":145},[142,104071,1063],{"class":152},[142,104073,103219],{"class":51329},[142,104075,14949],{"class":1991},[142,104077,198],{"class":152},[142,104079,104080],{"class":257},"\"box_top\"",[142,104082,101115],{"class":1991},[142,104084,198],{"class":152},[142,104086,104087],{"class":257},"\"0 0 0.15\"",[142,104089,101145],{"class":1991},[142,104091,198],{"class":152},[142,104093,103787],{"class":257},[142,104095,78796],{"class":1991},[142,104097,198],{"class":152},[142,104099,103794],{"class":257},[142,104101,101153],{"class":152},[14,104103,104104,104105,104108],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[139,104106,104107],{},"site position"," 就会比 body position 的 z 坐标更高。",[84,104110,102357],{"id":102356},[96,104112,104113,104122,104125,104132,104138,104149],{},[99,104114,102420,104115,104117,104118,102423,104120,28414],{},[139,104116,102990],{}," 的初始高度从 ",[139,104119,370],{},[139,104121,230],{},[99,104123,104124],{},"重新运行程序。",[99,104126,104127,104128,104131],{},"观察 ",[139,104129,104130],{},"box qpos"," 和最终位置是否变化。",[99,104133,104134,104135,104137],{},"故意把 ",[139,104136,103219],{}," 名称改错，确认程序能报错。",[99,104139,102420,104140,104142,104143,102423,104145,104148],{},[139,104141,101129],{}," 的颜色 ",[139,104144,102041],{},[139,104146,104147],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[99,104150,102420,104151,82559,104153,102423,104156,104159,104160,104162],{},[139,104152,102986],{},[139,104154,104155],{},"pos",[139,104157,104158],{},"0 0 0.2","，观察 ",[139,104161,104107],{}," 如何变化。",[84,104164,102462],{"id":102461},[113,104166,104168],{"id":104167},"xml-error-schema-violation",[139,104169,104170],{},"XML Error: Schema violation",[14,104172,104173],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[113,104175,104177,81319,104179],{"id":104176},"mj_name2id-返回-1",[139,104178,103920],{},[139,104180,103924],{},[14,104182,104183,104184,104187],{},"说明名字没有找到。检查 XML 中 ",[139,104185,104186],{},"name=\"...\"","，并确认对象类型正确。",[113,104189,104190],{"id":104190},"物体不下落",[14,104192,102532],{},[96,104194,104195,104200,104205],{},[99,104196,104197,104198],{},"body 是否有 ",[139,104199,101629],{},[99,104201,104202,104203],{},"gravity 是否为 ",[139,104204,102598],{},[99,104206,104207,104208,104210],{},"body 是否被固定在 ",[139,104209,101850],{}," 中",[113,104212,104213],{"id":104213},"坐标看起来不符合预期",[14,104215,104216],{},"先区分两种坐标：",[290,104218,104219,104228],{},[293,104220,104221],{},[296,104222,104223,104226],{},[299,104224,104225],{"align":23765},"坐标",[299,104227,100709],{"align":23765},[337,104229,104230,104240],{},[296,104231,104232,104237],{},[342,104233,104234,104235],{"align":23765},"XML 里的 ",[139,104236,104155],{},[342,104238,104239],{"align":23765},"相对父 body 的局部坐标",[296,104241,104242,104248],{},[342,104243,104244,25007,104246],{"align":23765},[139,104245,101088],{},[139,104247,104001],{},[342,104249,104250],{"align":23765},"仿真更新后的世界坐标",[14,104252,104253,104254,104256,104257,82568,104260,104262],{},"如果你修改了 ",[139,104255,101079],{},"，但还没调用 ",[139,104258,104259],{},"mj_forward",[139,104261,101224],{},"，世界坐标可能还没有更新。",[84,104264,102616],{"id":102615},[14,104266,104267],{},"MJCF 建模先掌握四件事：",[96,104269,104270,104275,104280,104285],{},[99,104271,104272,104274],{},[139,104273,51829],{}," 表示刚体层级。",[99,104276,104277,104279],{},[139,104278,101129],{}," 表示形状、碰撞和质量。",[99,104281,104282,104284],{},[139,104283,102965],{}," 决定 body 能不能动、怎么动。",[99,104286,104287,104289],{},[139,104288,103219],{}," 用来标记关键点，方便 Python 读取位置。",[14,104291,104292],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5155,104294,104295],{},"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":31,"searchDepth":64,"depth":64,"links":104297},[104298,104299,104300,104306,104310,104311,104312,104319],{"id":100655,"depth":64,"text":100656},{"id":100778,"depth":64,"text":100779},{"id":101053,"depth":64,"text":101054,"children":104301},[104302,104303,104304,104305],{"id":102969,"depth":1208,"text":102969},{"id":103083,"depth":1208,"text":103083},{"id":103109,"depth":1208,"text":103110},{"id":103213,"depth":1208,"text":103214},{"id":101261,"depth":64,"text":101262,"children":104307},[104308,104309],{"id":101581,"depth":1208,"text":101581},{"id":101717,"depth":1208,"text":101717},{"id":102324,"depth":64,"text":102325},{"id":102356,"depth":64,"text":102357},{"id":102461,"depth":64,"text":102462,"children":104313},[104314,104315,104317,104318],{"id":104167,"depth":1208,"text":104170},{"id":104176,"depth":1208,"text":104316},"mj_name2id 返回 -1",{"id":104190,"depth":1208,"text":104190},{"id":104213,"depth":1208,"text":104213},{"id":102615,"depth":64,"text":102616},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102663,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104326,"title":104327,"body":104328,"description":31,"extension":67,"meta":105823,"navigation":69,"path":105824,"seo":105825,"stem":105826,"__hash__":105827},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104329,"toc":105795},[104330,104333,104335,104338,104341,104379,104382,104388,104391,104393,104395,104422,104424,104438,104440,104481,104483,104507,104509,104512,104521,104530,104533,104542,104550,104559,104562,104572,104575,104627,104634,104640,104648,104696,104699,104718,104721,104729,104733,104742,104775,104777,105125,105127,105139,105141,105152,105154,105157,105178,105184,105187,105212,105222,105225,105233,105236,105239,105260,105271,105273,105293,105296,105317,105326,105345,105351,105376,105379,105393,105400,105424,105427,105435,105444,105460,105472,105480,105489,105491,105494,105518,105523,105526,105548,105550,105589,105591,105598,105600,105608,105611,105614,105626,105667,105674,105685,105692,105695,105744,105747,105750,105756,105758,105763,105789,105792],[10,104331,104327],{"id":104332},"_3python-控制接口读取状态与推进仿真",[84,104334,100656],{"id":100655},[14,104336,104337],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104339,104340],{},"你将学习:",[96,104342,104343,104348,104353,104357,104362,104373],{},[99,104344,104345],{},[139,104346,104347],{},"MjModel.from_xml_string",[99,104349,104350],{},[139,104351,104352],{},"MjData(model)",[99,104354,104355],{},[139,104356,101224],{},[99,104358,104359],{},[139,104360,104361],{},"mj_resetData",[99,104363,104364,104365,365,104367,365,104370],{},"读取 ",[139,104366,104039],{},[139,104368,104369],{},"qvel",[139,104371,104372],{},"ctrl",[99,104374,104375,104376],{},"使用 ",[139,104377,104378],{},"model.opt.timestep",[14,104380,104381],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[133,104383,104386],{"className":104384,"code":104385,"language":5216,"meta":31},[5214],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[139,104387,104385],{"__ignoreMap":31},[14,104389,104390],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[84,104392,100779],{"id":100778},[14,104394,100782],{},[133,104396,104398],{"className":23851,"code":104397,"language":23853,"meta":31,"style":31},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[139,104399,104400],{"__ignoreMap":31},[142,104401,104402,104404,104406,104408,104410,104413,104415,104417,104419],{"class":144,"line":145},[142,104403,24606],{"class":1991},[142,104405,26344],{"class":257},[142,104407,23863],{"class":257},[142,104409,26429],{"class":201},[142,104411,104412],{"class":257}," python3",[142,104414,100807],{"class":257},[142,104416,102510],{"class":257},[142,104418,100823],{"class":257},[142,104420,104421],{"class":257}," glfw\n",[14,104423,102828],{},[133,104425,104426],{"className":23851,"code":100928,"language":23853,"meta":31,"style":31},[139,104427,104428],{"__ignoreMap":31},[142,104429,104430,104432,104434,104436],{"class":144,"line":145},[142,104431,23860],{"class":1991},[142,104433,23863],{"class":257},[142,104435,100939],{"class":257},[142,104437,100942],{"class":257},[14,104439,102845],{},[133,104441,104443],{"className":23851,"code":104442,"language":23853,"meta":31,"style":31},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[139,104444,104445,104462,104471],{"__ignoreMap":31},[142,104446,104447,104449,104451,104453,104456,104458,104460],{"class":144,"line":145},[142,104448,30359],{"class":1991},[142,104450,29205],{"class":257},[142,104452,25144],{"class":201},[142,104454,104455],{"class":257}," mujoco-python-api",[142,104457,100984],{"class":257},[142,104459,100987],{"class":201},[142,104461,100990],{"class":201},[142,104463,104464,104466,104468],{"class":144,"line":64},[142,104465,30359],{"class":1991},[142,104467,100997],{"class":257},[142,104469,104470],{"class":257}," mujoco-python-api\n",[142,104472,104473,104475,104477,104479],{"class":144,"line":1208},[142,104474,23860],{"class":1991},[142,104476,23863],{"class":257},[142,104478,100939],{"class":257},[142,104480,100942],{"class":257},[14,104482,101013],{},[96,104484,104485,104492,104501],{},[99,104486,104487,101027,104489,104491],{},[139,104488,100684],{},[139,104490,100689],{}," 是官方 Python bindings 的类名。",[99,104493,104494,104495,104498,104499,28414],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[139,104496,104497],{},"mjModel"," 在 Python 中是 ",[139,104500,100718],{},[99,104502,104503,104504,28414],{},"不要使用 ",[139,104505,104506],{},"sim = mujoco_py.MjSim(...)",[84,104508,101054],{"id":101053},[14,104510,104511],{},"仿真推进核心代码:",[133,104513,104515],{"className":30407,"code":104514,"language":30409,"meta":31,"style":31},"mujoco.mj_step(model, data)\n",[139,104516,104517],{"__ignoreMap":31},[142,104518,104519],{"class":144,"line":145},[142,104520,104514],{"class":152},[14,104522,104523,104524,365,104526,365,104528,28414],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[139,104525,101079],{},[139,104527,101082],{},[139,104529,101076],{},[14,104531,104532],{},"重置仿真:",[133,104534,104536],{"className":30407,"code":104535,"language":30409,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\n",[139,104537,104538],{"__ignoreMap":31},[142,104539,104540],{"class":144,"line":145},[142,104541,104535],{"class":152},[14,104543,104544,104545,82568,104547,104549],{},"如果手动修改了 ",[139,104546,101079],{},[139,104548,101082],{},"，通常应调用:",[133,104551,104553],{"className":30407,"code":104552,"language":30409,"meta":31,"style":31},"mujoco.mj_forward(model, data)\n",[139,104554,104555],{"__ignoreMap":31},[142,104556,104557],{"class":144,"line":145},[142,104558,104552],{"class":152},[14,104560,104561],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[113,104563,104565,365,104567,365,104569,104571],{"id":104564},"qposqvelctrl-是什么",[139,104566,104039],{},[139,104568,104369],{},[139,104570,104372],{}," 是什么",[14,104573,104574],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[290,104576,104577,104589],{},[293,104578,104579],{},[296,104580,104581,104584,104586],{},[299,104582,104583],{"align":23765},"字段",[299,104585,100709],{"align":23765},[299,104587,104588],{"align":23765},"谁来修改",[337,104590,104591,104603,104615],{},[296,104592,104593,104597,104600],{},[342,104594,104595],{"align":23765},[139,104596,101079],{},[342,104598,104599],{"align":23765},"广义位置，例如小车位置、关节角、自由物体位置姿态",[342,104601,104602],{"align":23765},"MuJoCo 更新，也可以手动设置初始状态",[296,104604,104605,104609,104612],{},[342,104606,104607],{"align":23765},[139,104608,101082],{},[342,104610,104611],{"align":23765},"广义速度，例如小车速度、关节角速度",[342,104613,104614],{"align":23765},"MuJoCo 更新，也可以手动清零",[296,104616,104617,104621,104624],{},[342,104618,104619],{"align":23765},[139,104620,101085],{},[342,104622,104623],{"align":23765},"actuator 的控制输入",[342,104625,104626],{"align":23765},"主要由你的控制代码写入",[14,104628,9054,104629,101027,104631,104633],{},[139,104630,104039],{},[139,104632,104369],{}," 不一定同维。自由刚体就是典型例子：",[133,104635,104638],{"className":104636,"code":104637,"language":5216,"meta":31},[5214],"freejoint: qpos 7 维，qvel 6 维\n",[139,104639,104637],{"__ignoreMap":31},[113,104641,104643,101027,104645,104647],{"id":104642},"mj_step-和-mj_forward-的区别",[139,104644,101224],{},[139,104646,104259],{}," 的区别",[290,104649,104650,104663],{},[293,104651,104652],{},[296,104653,104654,104657,104660],{},[299,104655,104656],{"align":23765},"函数",[299,104658,104659],{"align":23765},"是否推进时间",[299,104661,104662],{"align":23765},"什么时候用",[337,104664,104665,104678],{},[296,104666,104667,104672,104675],{},[342,104668,104669],{"align":23765},[139,104670,104671],{},"mj_step(model, data)",[342,104673,104674],{"align":23765},"是",[342,104676,104677],{"align":23765},"正常仿真循环，每调用一次前进一步",[296,104679,104680,104685,104688],{},[342,104681,104682],{"align":23765},[139,104683,104684],{},"mj_forward(model, data)",[342,104686,104687],{"align":23765},"否",[342,104689,104690,104691,365,104693,104695],{"align":23765},"手动改了 ",[139,104692,104039],{},[139,104694,104369],{}," 后，刷新派生量",[14,104697,104698],{},"例如你写：",[133,104700,104702],{"className":30407,"code":104701,"language":30409,"meta":31,"style":31},"data.qpos[2] = 2.0\n",[139,104703,104704],{"__ignoreMap":31},[142,104705,104706,104709,104711,104713,104715],{"class":144,"line":145},[142,104707,104708],{"class":152},"data.qpos[",[142,104710,230],{"class":201},[142,104712,4471],{"class":152},[142,104714,198],{"class":148},[142,104716,104717],{"class":201}," 2.0\n",[14,104719,104720],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[133,104722,104723],{"className":30407,"code":104552,"language":30409,"meta":31,"style":31},[139,104724,104725],{"__ignoreMap":31},[142,104726,104727],{"class":144,"line":145},[142,104728,104552],{"class":152},[113,104730,104732],{"id":104731},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104734,104735,104738,104739,104741],{},[139,104736,104737],{},"mujoco.mj_resetData(model, data)"," 会把 ",[139,104740,33430],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[133,104743,104745],{"className":30407,"code":104744,"language":30409,"meta":31,"style":31},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[139,104746,104747,104751,104761,104771],{"__ignoreMap":31},[142,104748,104749],{"class":144,"line":145},[142,104750,104535],{"class":152},[142,104752,104753,104756,104758],{"class":144,"line":64},[142,104754,104755],{"class":152},"data.qpos[:] ",[142,104757,198],{"class":148},[142,104759,104760],{"class":152}," random_qpos\n",[142,104762,104763,104766,104768],{"class":144,"line":1208},[142,104764,104765],{"class":152},"data.qvel[:] ",[142,104767,198],{"class":148},[142,104769,104770],{"class":201}," 0.0\n",[142,104772,104773],{"class":144,"line":1223},[142,104774,104552],{"class":152},[84,104776,101262],{"id":101261},[133,104778,104780],{"className":30407,"code":104779,"language":30409,"meta":31,"style":31},"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",[139,104781,104782,104788,104798,104802,104806,104814,104819,104823,104827,104831,104836,104840,104845,104850,104855,104859,104863,104867,104871,104875,104879,104898,104905,104917,104928,104944,104960,104964,104968,104980,104992,105000,105004,105015,105019,105035,105039,105043,105052,105056,105061,105070,105074,105087,105092,105101,105105,105109,105121],{"__ignoreMap":31},[142,104783,104784,104786],{"class":144,"line":145},[142,104785,30421],{"class":148},[142,104787,101310],{"class":152},[142,104789,104790,104792,104794,104796],{"class":144,"line":64},[142,104791,30421],{"class":148},[142,104793,31409],{"class":152},[142,104795,31412],{"class":148},[142,104797,31415],{"class":152},[142,104799,104800],{"class":144,"line":1208},[142,104801,2428],{"emptyLinePlaceholder":69},[142,104803,104804],{"class":144,"line":1223},[142,104805,2428],{"emptyLinePlaceholder":69},[142,104807,104808,104810,104812],{"class":144,"line":1229},[142,104809,101323],{"class":201},[142,104811,13593],{"class":148},[142,104813,101328],{"class":257},[142,104815,104816],{"class":144,"line":1243},[142,104817,104818],{"class":257},"\u003Cmujoco model=\"state_api\">\n",[142,104820,104821],{"class":144,"line":1249},[142,104822,101338],{"class":257},[142,104824,104825],{"class":144,"line":1340},[142,104826,2428],{"emptyLinePlaceholder":69},[142,104828,104829],{"class":144,"line":1346},[142,104830,101347],{"class":257},[142,104832,104833],{"class":144,"line":1358},[142,104834,104835],{"class":257},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[142,104837,104838],{"class":144,"line":1640},[142,104839,2428],{"emptyLinePlaceholder":69},[142,104841,104842],{"class":144,"line":1645},[142,104843,104844],{"class":257},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[142,104846,104847],{"class":144,"line":1651},[142,104848,104849],{"class":257},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[142,104851,104852],{"class":144,"line":1656},[142,104853,104854],{"class":257},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[142,104856,104857],{"class":144,"line":1670},[142,104858,101376],{"class":257},[142,104860,104861],{"class":144,"line":1675},[142,104862,101381],{"class":257},[142,104864,104865],{"class":144,"line":1681},[142,104866,101386],{"class":257},[142,104868,104869],{"class":144,"line":1702},[142,104870,95707],{"class":257},[142,104872,104873],{"class":144,"line":1707},[142,104874,2428],{"emptyLinePlaceholder":69},[142,104876,104877],{"class":144,"line":1721},[142,104878,2428],{"emptyLinePlaceholder":69},[142,104880,104881,104883,104886,104889,104891,104894,104896],{"class":144,"line":1726},[142,104882,31976],{"class":148},[142,104884,104885],{"class":1991}," print_state",[142,104887,104888],{"class":152},"(prefix: ",[142,104890,1328],{"class":201},[142,104892,104893],{"class":152},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[142,104895,95695],{"class":201},[142,104897,3767],{"class":152},[142,104899,104900,104902],{"class":144,"line":1755},[142,104901,31328],{"class":201},[142,104903,104904],{"class":152},"(prefix)\n",[142,104906,104907,104909,104911,104914],{"class":144,"line":1760},[142,104908,31328],{"class":201},[142,104910,153],{"class":152},[142,104912,104913],{"class":257},"\"  timestep:\"",[142,104915,104916],{"class":152},", model.opt.timestep)\n",[142,104918,104919,104921,104923,104926],{"class":144,"line":1777},[142,104920,31328],{"class":201},[142,104922,153],{"class":152},[142,104924,104925],{"class":257},"\"  time:\"",[142,104927,101487],{"class":152},[142,104929,104930,104932,104934,104937,104940,104942],{"class":144,"line":1782},[142,104931,31328],{"class":201},[142,104933,153],{"class":152},[142,104935,104936],{"class":257},"\"  qpos:\"",[142,104938,104939],{"class":152},", np.round(data.qpos.copy(), ",[142,104941,446],{"class":201},[142,104943,30526],{"class":152},[142,104945,104946,104948,104950,104953,104956,104958],{"class":144,"line":1787},[142,104947,31328],{"class":201},[142,104949,153],{"class":152},[142,104951,104952],{"class":257},"\"  qvel:\"",[142,104954,104955],{"class":152},", np.round(data.qvel.copy(), ",[142,104957,446],{"class":201},[142,104959,30526],{"class":152},[142,104961,104962],{"class":144,"line":1792},[142,104963,2428],{"emptyLinePlaceholder":69},[142,104965,104966],{"class":144,"line":1806},[142,104967,2428],{"emptyLinePlaceholder":69},[142,104969,104970,104972,104974,104976,104978],{"class":144,"line":1811},[142,104971,31976],{"class":148},[142,104973,2001],{"class":1991},[142,104975,101407],{"class":152},[142,104977,95695],{"class":201},[142,104979,3767],{"class":152},[142,104981,104982,104984,104986,104988,104990],{"class":144,"line":2605},[142,104983,101416],{"class":152},[142,104985,198],{"class":148},[142,104987,101421],{"class":152},[142,104989,101323],{"class":201},[142,104991,159],{"class":152},[142,104993,104994,104996,104998],{"class":144,"line":2619},[142,104995,101430],{"class":152},[142,104997,198],{"class":148},[142,104999,101435],{"class":152},[142,105001,105002],{"class":144,"line":2627},[142,105003,2428],{"emptyLinePlaceholder":69},[142,105005,105006,105009,105012],{"class":144,"line":2632},[142,105007,105008],{"class":152},"    print_state(",[142,105010,105011],{"class":257},"\"initial\"",[142,105013,105014],{"class":152},", model, data)\n",[142,105016,105017],{"class":144,"line":2638},[142,105018,2428],{"emptyLinePlaceholder":69},[142,105020,105021,105023,105025,105027,105029,105031,105033],{"class":144,"line":2644},[142,105022,3229],{"class":148},[142,105024,101510],{"class":152},[142,105026,26072],{"class":148},[142,105028,32472],{"class":201},[142,105030,153],{"class":152},[142,105032,809],{"class":201},[142,105034,30815],{"class":152},[142,105036,105037],{"class":144,"line":2649},[142,105038,101525],{"class":152},[142,105040,105041],{"class":144,"line":7977},[142,105042,2428],{"emptyLinePlaceholder":69},[142,105044,105045,105047,105050],{"class":144,"line":8001},[142,105046,105008],{"class":152},[142,105048,105049],{"class":257},"\"after 50 steps\"",[142,105051,105014],{"class":152},[142,105053,105054],{"class":144,"line":8006},[142,105055,2428],{"emptyLinePlaceholder":69},[142,105057,105058],{"class":144,"line":8012},[142,105059,105060],{"class":152},"    mujoco.mj_resetData(model, data)\n",[142,105062,105063,105065,105068],{"class":144,"line":8039},[142,105064,105008],{"class":152},[142,105066,105067],{"class":257},"\"after reset\"",[142,105069,105014],{"class":152},[142,105071,105072],{"class":144,"line":8044},[142,105073,2428],{"emptyLinePlaceholder":69},[142,105075,105076,105079,105081,105083,105085],{"class":144,"line":8050},[142,105077,105078],{"class":152},"    data.qpos[",[142,105080,230],{"class":201},[142,105082,4471],{"class":152},[142,105084,198],{"class":148},[142,105086,104717],{"class":201},[142,105088,105089],{"class":144,"line":8062},[142,105090,105091],{"class":152},"    mujoco.mj_forward(model, data)\n",[142,105093,105094,105096,105099],{"class":144,"line":8074},[142,105095,105008],{"class":152},[142,105097,105098],{"class":257},"\"after manual qpos edit\"",[142,105100,105014],{"class":152},[142,105102,105103],{"class":144,"line":8086},[142,105104,2428],{"emptyLinePlaceholder":69},[142,105106,105107],{"class":144,"line":9745},[142,105108,2428],{"emptyLinePlaceholder":69},[142,105110,105111,105113,105115,105117,105119],{"class":144,"line":9770},[142,105112,1559],{"class":148},[142,105114,31249],{"class":201},[142,105116,101568],{"class":148},[142,105118,101571],{"class":257},[142,105120,3767],{"class":152},[142,105122,105123],{"class":144,"line":9793},[142,105124,101578],{"class":152},[14,105126,103579],{},[133,105128,105130],{"className":23851,"code":105129,"language":23853,"meta":31,"style":31},"touch ch3_python_state.py\n",[139,105131,105132],{"__ignoreMap":31},[142,105133,105134,105136],{"class":144,"line":145},[142,105135,101292],{"class":1991},[142,105137,105138],{"class":257}," ch3_python_state.py\n",[14,105140,102310],{},[133,105142,105144],{"className":23851,"code":105143,"language":23853,"meta":31,"style":31},"python ch3_python_state.py\n",[139,105145,105146],{"__ignoreMap":31},[142,105147,105148,105150],{"class":144,"line":145},[142,105149,30409],{"class":1991},[142,105151,105138],{"class":257},[113,105153,101581],{"id":101581},[14,105155,105156],{},"打印状态的函数：",[133,105158,105160],{"className":30407,"code":105159,"language":30409,"meta":31,"style":31},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[139,105161,105162],{"__ignoreMap":31},[142,105163,105164,105166,105168,105170,105172,105174,105176],{"class":144,"line":145},[142,105165,31976],{"class":148},[142,105167,104885],{"class":1991},[142,105169,104888],{"class":152},[142,105171,1328],{"class":201},[142,105173,104893],{"class":152},[142,105175,95695],{"class":201},[142,105177,3767],{"class":152},[14,105179,105180,105181,105183],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[139,105182,33430],{}," 里发生了什么。",[14,105185,105186],{},"推进 50 步：",[133,105188,105190],{"className":30407,"code":105189,"language":30409,"meta":31,"style":31},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[139,105191,105192,105208],{"__ignoreMap":31},[142,105193,105194,105196,105198,105200,105202,105204,105206],{"class":144,"line":145},[142,105195,3053],{"class":148},[142,105197,101510],{"class":152},[142,105199,26072],{"class":148},[142,105201,32472],{"class":201},[142,105203,153],{"class":152},[142,105205,809],{"class":201},[142,105207,30815],{"class":152},[142,105209,105210],{"class":144,"line":64},[142,105211,101708],{"class":152},[14,105213,105214,105215,105218,105219,105221],{},"由于 ",[139,105216,105217],{},"timestep=0.01","，所以 50 步后时间约为 ",[139,105220,35358],{}," 秒。",[14,105223,105224],{},"重置：",[133,105226,105227],{"className":30407,"code":104535,"language":30409,"meta":31,"style":31},[139,105228,105229],{"__ignoreMap":31},[142,105230,105231],{"class":144,"line":145},[142,105232,104535],{"class":152},[14,105234,105235],{},"这会把时间、位置、速度恢复到初始状态。",[14,105237,105238],{},"手动改高度：",[133,105240,105242],{"className":30407,"code":105241,"language":30409,"meta":31,"style":31},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[139,105243,105244,105256],{"__ignoreMap":31},[142,105245,105246,105248,105250,105252,105254],{"class":144,"line":145},[142,105247,104708],{"class":152},[142,105249,230],{"class":201},[142,105251,4471],{"class":152},[142,105253,198],{"class":148},[142,105255,104717],{"class":201},[142,105257,105258],{"class":144,"line":64},[142,105259,104552],{"class":152},[14,105261,105262,105263,105266,105267,105270],{},"这个例子里 ",[139,105264,105265],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[139,105268,105269],{},"2.0"," 表示把小球放到更高的位置。",[113,105272,101717],{"id":101717},[133,105274,105275],{"className":30407,"code":105159,"language":30409,"meta":31,"style":31},[139,105276,105277],{"__ignoreMap":31},[142,105278,105279,105281,105283,105285,105287,105289,105291],{"class":144,"line":145},[142,105280,31976],{"class":148},[142,105282,104885],{"class":1991},[142,105284,104888],{"class":152},[142,105286,1328],{"class":201},[142,105288,104893],{"class":152},[142,105290,95695],{"class":201},[142,105292,3767],{"class":152},[14,105294,105295],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[96,105297,105298,105307,105312],{},[99,105299,105300,105303,105304,105306],{},[139,105301,105302],{},"prefix","：一段文字，比如 ",[139,105305,105011],{},"，用来说明现在打印的是哪个阶段。",[99,105308,105309,105311],{},[139,105310,102094],{},"：MuJoCo 模型。",[99,105313,105314,105316],{},[139,105315,33430],{},"：MuJoCo 当前状态。",[14,105318,105319,365,105322,105325],{},[139,105320,105321],{},"prefix: str",[139,105323,105324],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[133,105327,105329],{"className":30407,"code":105328,"language":30409,"meta":31,"style":31},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[139,105330,105331],{"__ignoreMap":31},[142,105332,105333,105335,105337,105339,105341,105343],{"class":144,"line":145},[142,105334,30444],{"class":201},[142,105336,153],{"class":152},[142,105338,104936],{"class":257},[142,105340,104939],{"class":152},[142,105342,446],{"class":201},[142,105344,30526],{"class":152},[14,105346,105347,105350],{},[139,105348,105349],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[133,105352,105354],{"className":30407,"code":105353,"language":30409,"meta":31,"style":31},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[139,105355,105356,105368],{"__ignoreMap":31},[142,105357,105358,105360,105362,105364,105366],{"class":144,"line":145},[142,105359,101643],{"class":152},[142,105361,198],{"class":148},[142,105363,101421],{"class":152},[142,105365,101323],{"class":201},[142,105367,159],{"class":152},[142,105369,105370,105372,105374],{"class":144,"line":64},[142,105371,101667],{"class":152},[142,105373,198],{"class":148},[142,105375,101435],{"class":152},[14,105377,105378],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[133,105380,105382],{"className":30407,"code":105381,"language":30409,"meta":31,"style":31},"print_state(\"initial\", model, data)\n",[139,105383,105384],{"__ignoreMap":31},[142,105385,105386,105389,105391],{"class":144,"line":145},[142,105387,105388],{"class":152},"print_state(",[142,105390,105011],{"class":257},[142,105392,105014],{"class":152},[14,105394,105395,105396,105399],{},"调用刚才定义的 ",[139,105397,105398],{},"print_state"," 函数，打印初始状态。",[133,105401,105402],{"className":30407,"code":105189,"language":30409,"meta":31,"style":31},[139,105403,105404,105420],{"__ignoreMap":31},[142,105405,105406,105408,105410,105412,105414,105416,105418],{"class":144,"line":145},[142,105407,3053],{"class":148},[142,105409,101510],{"class":152},[142,105411,26072],{"class":148},[142,105413,32472],{"class":201},[142,105415,153],{"class":152},[142,105417,809],{"class":201},[142,105419,30815],{"class":152},[142,105421,105422],{"class":144,"line":64},[142,105423,101708],{"class":152},[14,105425,105426],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[133,105428,105429],{"className":30407,"code":104535,"language":30409,"meta":31,"style":31},[139,105430,105431],{"__ignoreMap":31},[142,105432,105433],{"class":144,"line":145},[142,105434,104535],{"class":152},[14,105436,105437,105438,105440,105441,105443],{},"重置 ",[139,105439,33430],{},"。注意它不会重新创建 ",[139,105442,102094],{},"，因为模型结构没有变，只是状态回到初始值。",[133,105445,105446],{"className":30407,"code":104701,"language":30409,"meta":31,"style":31},[139,105447,105448],{"__ignoreMap":31},[142,105449,105450,105452,105454,105456,105458],{"class":144,"line":145},[142,105451,104708],{"class":152},[142,105453,230],{"class":201},[142,105455,4471],{"class":152},[142,105457,198],{"class":148},[142,105459,104717],{"class":201},[14,105461,105462,105463,365,105466,365,105469,105471],{},"这行是“手动改状态”。在 freejoint 中，",[139,105464,105465],{},"qpos[0]",[139,105467,105468],{},"qpos[1]",[139,105470,105265],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[133,105473,105474],{"className":30407,"code":104552,"language":30409,"meta":31,"style":31},[139,105475,105476],{"__ignoreMap":31},[142,105477,105478],{"class":144,"line":145},[142,105479,104552],{"class":152},[14,105481,105482,105483,105485,105486,105488],{},"手动改完 ",[139,105484,104039],{}," 后，调用 ",[139,105487,104259],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[84,105490,102325],{"id":102324},[14,105492,105493],{},"你会看到:",[96,105495,105496,105501,105506,105509],{},[99,105497,105498,105499],{},"初始时间为 ",[139,105500,344],{},[99,105502,105503,105504],{},"50 步后时间约为 ",[139,105505,35358],{},[99,105507,105508],{},"reset 后状态恢复",[99,105510,105511,105512,105515,105516],{},"手动修改 ",[139,105513,105514],{},"data.qpos[2]"," 后，小球高度变为 ",[139,105517,105269],{},[14,105519,105520,105522],{},[139,105521,105265],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105524,105525],{},"输出里可以重点看三件事：",[96,105527,105528,105536,105541],{},[99,105529,105530,105532,105533,105535],{},[139,105531,2415],{}," 是否随着 ",[139,105534,101224],{}," 增加。",[99,105537,105538,105540],{},[139,105539,104039],{}," 的 z 坐标是否因为下落而变化。",[99,105542,105543,105545,105546,28414],{},[139,105544,104361],{}," 后时间是否回到 ",[139,105547,344],{},[84,105549,102357],{"id":102356},[96,105551,105552,105558,105564,105570,105573,105582],{},[99,105553,105554,105555,28414],{},"修改 timestep 为 ",[139,105556,105557],{},"0.005",[99,105559,105560,105561,28414],{},"重新运行，检查 50 步后时间是否约为 ",[139,105562,105563],{},"0.25",[99,105565,105566,105567,28414],{},"修改重力为 ",[139,105568,105569],{},"0 0 -1.0",[99,105571,105572],{},"观察小球下降速度是否变慢。",[99,105574,102420,105575,102423,105578,105581],{},[139,105576,105577],{},"data.qpos[2] = 2.0",[139,105579,105580],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[99,105583,105584,105585,105588],{},"注释掉 ",[139,105586,105587],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[84,105590,102462],{"id":102461},[113,105592,105594,105595,105597],{"id":105593},"修改-dataqpos-后位置没有更新","修改 ",[139,105596,101079],{}," 后位置没有更新",[14,105599,102471],{},[133,105601,105602],{"className":30407,"code":104552,"language":30409,"meta":31,"style":31},[139,105603,105604],{"__ignoreMap":31},[142,105605,105606],{"class":144,"line":145},[142,105607,104552],{"class":152},[113,105609,105610],{"id":105610},"数组维度看不懂",[14,105612,105613],{},"打印模型维度:",[133,105615,105617],{"className":30407,"code":105616,"language":30409,"meta":31,"style":31},"print(model.nq, model.nv, model.nu)\n",[139,105618,105619],{"__ignoreMap":31},[142,105620,105621,105623],{"class":144,"line":145},[142,105622,30444],{"class":201},[142,105624,105625],{"class":152},"(model.nq, model.nv, model.nu)\n",[290,105627,105628,105636],{},[293,105629,105630],{},[296,105631,105632,105634],{},[299,105633,104583],{"align":23765},[299,105635,100709],{"align":23765},[337,105637,105638,105648,105658],{},[296,105639,105640,105645],{},[342,105641,105642],{"align":23765},[139,105643,105644],{},"nq",[342,105646,105647],{"align":23765},"位置变量数量",[296,105649,105650,105655],{},[342,105651,105652],{"align":23765},[139,105653,105654],{},"nv",[342,105656,105657],{"align":23765},"速度变量数量",[296,105659,105660,105664],{},[342,105661,105662],{"align":23765},[139,105663,102171],{},[342,105665,105666],{"align":23765},"控制输入数量",[113,105668,105670,105671,105673],{"id":105669},"误以为-qpos-一定等于关节数","误以为 ",[139,105672,104039],{}," 一定等于关节数",[14,105675,105676,105677,82559,105679,105681,105682,105684],{},"不是。例如 ",[139,105678,101629],{},[139,105680,104039],{}," 是 7 维，但 ",[139,105683,104369],{}," 是 6 维。",[113,105686,105688,105689,105691],{"id":105687},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[139,105690,104039],{}," 的第几位",[14,105693,105694],{},"初学时可以先打印：",[133,105696,105698],{"className":30407,"code":105697,"language":30409,"meta":31,"style":31},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[139,105699,105700,105710,105720,105732],{"__ignoreMap":31},[142,105701,105702,105704,105706,105708],{"class":144,"line":145},[142,105703,30444],{"class":201},[142,105705,153],{"class":152},[142,105707,101448],{"class":257},[142,105709,101451],{"class":152},[142,105711,105712,105714,105716,105718],{"class":144,"line":64},[142,105713,30444],{"class":201},[142,105715,153],{"class":152},[142,105717,101460],{"class":257},[142,105719,101463],{"class":152},[142,105721,105722,105724,105726,105729],{"class":144,"line":1208},[142,105723,30444],{"class":201},[142,105725,153],{"class":152},[142,105727,105728],{"class":257},"\"qpos:\"",[142,105730,105731],{"class":152},", data.qpos)\n",[142,105733,105734,105736,105738,105741],{"class":144,"line":1223},[142,105735,30444],{"class":201},[142,105737,153],{"class":152},[142,105739,105740],{"class":257},"\"qvel:\"",[142,105742,105743],{"class":152},", data.qvel)\n",[14,105745,105746],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[113,105748,105749],{"id":105749},"仿真结果每次都一样",[14,105751,105752,105753,105755],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[139,105754,104039],{},"、目标点或控制输入。",[84,105757,102616],{"id":102615},[14,105759,105760,105761,24647],{},"Python 控制 MuJoCo 的核心就是读写 ",[139,105762,33430],{},[96,105764,105765,105773,105778,105783],{},[99,105766,105767,105768,101027,105770,105772],{},"用 ",[139,105769,101079],{},[139,105771,101082],{}," 读取状态。",[99,105774,105767,105775,105777],{},[139,105776,101085],{}," 写入控制。",[99,105779,105767,105780,105782],{},[139,105781,101224],{}," 推进时间。",[99,105784,105785,105786,105788],{},"手动改状态后用 ",[139,105787,104259],{}," 刷新派生量。",[14,105790,105791],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5155,105793,105794],{},"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":31,"searchDepth":64,"depth":64,"links":105796},[105797,105798,105799,105806,105810,105811,105812,105822],{"id":100655,"depth":64,"text":100656},{"id":100778,"depth":64,"text":100779},{"id":101053,"depth":64,"text":101054,"children":105800},[105801,105803,105805],{"id":104564,"depth":1208,"text":105802},"qpos、qvel、ctrl 是什么",{"id":104642,"depth":1208,"text":105804},"mj_step 和 mj_forward 的区别",{"id":104731,"depth":1208,"text":104732},{"id":101261,"depth":64,"text":101262,"children":105807},[105808,105809],{"id":101581,"depth":1208,"text":101581},{"id":101717,"depth":1208,"text":101717},{"id":102324,"depth":64,"text":102325},{"id":102356,"depth":64,"text":102357},{"id":102461,"depth":64,"text":102462,"children":105813},[105814,105816,105817,105819,105821],{"id":105593,"depth":1208,"text":105815},"修改 data.qpos 后位置没有更新",{"id":105610,"depth":1208,"text":105610},{"id":105669,"depth":1208,"text":105818},"误以为 qpos 一定等于关节数",{"id":105687,"depth":1208,"text":105820},"不知道某个元素在 qpos 的第几位",{"id":105749,"depth":1208,"text":105749},{"id":102615,"depth":64,"text":102616},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104327,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105829,"title":105830,"body":105831,"description":31,"extension":67,"meta":107521,"navigation":69,"path":107522,"seo":107523,"stem":107524,"__hash__":107525},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105832,"toc":107497},[105833,105836,105838,105841,105843,105868,105871,105890,105893,105895,105897,105921,105923,105937,105939,105980,105982,106006,106008,106011,106045,106047,106060,106063,106131,106140,106144,106147,106181,106187,106190,106194,106233,106236,106256,106260,106303,106305,106334,106337,106343,106346,106348,106742,106744,106756,106758,106769,106771,106774,106803,106811,106814,106849,106852,106854,106862,106865,106867,106878,106888,106908,106911,106947,106959,107007,107026,107068,107081,107109,107114,107135,107145,107163,107166,107200,107203,107223,107226,107245,107251,107253,107256,107262,107268,107278,107281,107287,107296,107298,107344,107346,107352,107358,107361,107364,107384,107387,107393,107399,107401,107424,107427,107430,107439,107442,107480,107482,107485,107491,107494],[10,105834,105830],{"id":105835},"_4关节actuator-与力控制",[84,105837,100656],{"id":100655},[14,105839,105840],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105842,104340],{},[96,105844,105845,105851,105856,105860,105865],{},[99,105846,105847,105850],{},[139,105848,105849],{},"hinge"," 关节",[99,105852,105853],{},[139,105854,105855],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[99,105857,105858],{},[139,105859,101085],{},[99,105861,105862],{},[139,105863,105864],{},"ctrlrange",[99,105866,105867],{},"读取关节角和角速度",[14,105869,105870],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[133,105872,105874],{"className":30407,"code":105873,"language":30409,"meta":31,"style":31},"data.ctrl[0] = ...\n",[139,105875,105876],{"__ignoreMap":31},[142,105877,105878,105881,105883,105885,105887],{"class":144,"line":145},[142,105879,105880],{"class":152},"data.ctrl[",[142,105882,344],{"class":201},[142,105884,4471],{"class":152},[142,105886,198],{"class":148},[142,105888,105889],{"class":201}," ...\n",[14,105891,105892],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[84,105894,100779],{"id":100778},[14,105896,100782],{},[133,105898,105899],{"className":23851,"code":104397,"language":23853,"meta":31,"style":31},[139,105900,105901],{"__ignoreMap":31},[142,105902,105903,105905,105907,105909,105911,105913,105915,105917,105919],{"class":144,"line":145},[142,105904,24606],{"class":1991},[142,105906,26344],{"class":257},[142,105908,23863],{"class":257},[142,105910,26429],{"class":201},[142,105912,104412],{"class":257},[142,105914,100807],{"class":257},[142,105916,102510],{"class":257},[142,105918,100823],{"class":257},[142,105920,104421],{"class":257},[14,105922,102828],{},[133,105924,105925],{"className":23851,"code":100928,"language":23853,"meta":31,"style":31},[139,105926,105927],{"__ignoreMap":31},[142,105928,105929,105931,105933,105935],{"class":144,"line":145},[142,105930,23860],{"class":1991},[142,105932,23863],{"class":257},[142,105934,100939],{"class":257},[142,105936,100942],{"class":257},[14,105938,102845],{},[133,105940,105942],{"className":23851,"code":105941,"language":23853,"meta":31,"style":31},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[139,105943,105944,105961,105970],{"__ignoreMap":31},[142,105945,105946,105948,105950,105952,105955,105957,105959],{"class":144,"line":145},[142,105947,30359],{"class":1991},[142,105949,29205],{"class":257},[142,105951,25144],{"class":201},[142,105953,105954],{"class":257}," mujoco-control",[142,105956,100984],{"class":257},[142,105958,100987],{"class":201},[142,105960,100990],{"class":201},[142,105962,105963,105965,105967],{"class":144,"line":64},[142,105964,30359],{"class":1991},[142,105966,100997],{"class":257},[142,105968,105969],{"class":257}," mujoco-control\n",[142,105971,105972,105974,105976,105978],{"class":144,"line":1208},[142,105973,23860],{"class":1991},[142,105975,23863],{"class":257},[142,105977,100939],{"class":257},[142,105979,100942],{"class":257},[14,105981,101013],{},[96,105983,105984,105990,105997,106003],{},[99,105985,105986,105989],{},[139,105987,105988],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[99,105991,105992,105994,105995,28414],{},[139,105993,101085],{}," 长度等于 ",[139,105996,102167],{},[99,105998,82251,105999,106002],{},[139,106000,106001],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[99,106004,106005],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[84,106007,101054],{"id":101053},[14,106009,106010],{},"关节决定 body 如何运动:",[133,106012,106014],{"className":53096,"code":106013,"language":53098,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[139,106015,106016],{"__ignoreMap":31},[142,106017,106018,106020,106022,106024,106026,106029,106031,106033,106035,106038,106040,106043],{"class":144,"line":145},[142,106019,1063],{"class":152},[142,106021,102965],{"class":51329},[142,106023,14949],{"class":1991},[142,106025,198],{"class":152},[142,106027,106028],{"class":257},"\"hinge\"",[142,106030,53853],{"class":1991},[142,106032,198],{"class":152},[142,106034,106028],{"class":257},[142,106036,106037],{"class":1991}," axis",[142,106039,198],{"class":152},[142,106041,106042],{"class":257},"\"0 1 0\"",[142,106044,101153],{"class":152},[14,106046,103061],{},[96,106048,106049,106054,106057],{},[99,106050,106051,106052],{},"名字是 ",[139,106053,105849],{},[99,106055,106056],{},"类型是旋转关节",[99,106058,106059],{},"绕 y 轴旋转",[14,106061,106062],{},"actuator 决定如何施加控制:",[133,106064,106066],{"className":53096,"code":106065,"language":53098,"meta":31,"style":31},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[139,106067,106068,106077,106123],{"__ignoreMap":31},[142,106069,106070,106072,106075],{"class":144,"line":145},[142,106071,1063],{"class":152},[142,106073,106074],{"class":51329},"actuator",[142,106076,51336],{"class":152},[142,106078,106079,106081,106084,106086,106088,106091,106094,106096,106098,106101,106103,106105,106108,106110,106113,106116,106118,106121],{"class":144,"line":64},[142,106080,52173],{"class":152},[142,106082,106083],{"class":51329},"motor",[142,106085,14949],{"class":1991},[142,106087,198],{"class":152},[142,106089,106090],{"class":257},"\"hinge_motor\"",[142,106092,106093],{"class":1991}," joint",[142,106095,198],{"class":152},[142,106097,106028],{"class":257},[142,106099,106100],{"class":1991}," gear",[142,106102,198],{"class":152},[142,106104,3706],{"class":257},[142,106106,106107],{"class":1991}," ctrlrange",[142,106109,198],{"class":152},[142,106111,106112],{"class":257},"\"-2 2\"",[142,106114,106115],{"class":1991}," ctrllimited",[142,106117,198],{"class":152},[142,106119,106120],{"class":257},"\"true\"",[142,106122,101153],{"class":152},[142,106124,106125,106127,106129],{"class":144,"line":1208},[142,106126,51814],{"class":152},[142,106128,106074],{"class":51329},[142,106130,51336],{"class":152},[14,106132,106133,106136,106137,28414],{},[139,106134,106135],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[139,106138,106139],{},"[-2, 2]",[113,106141,106143],{"id":106142},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106145,106146],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[290,106148,106149,106159],{},[293,106150,106151],{},[296,106152,106153,106155,106157],{},[299,106154,25782],{"align":23765},[299,106156,102705],{"align":23765},[299,106158,100743],{"align":23765},[337,106160,106161,106171],{},[296,106162,106163,106165,106168],{},[342,106164,102965],{"align":23765},[342,106166,106167],{"align":23765},"定义能怎么动",[342,106169,106170],{"align":23765},"门轴允许门旋转",[296,106172,106173,106175,106178],{},[342,106174,106074],{"align":23765},[342,106176,106177],{"align":23765},"定义怎么施力或控制",[342,106179,106180],{"align":23765},"人推门、马达带动门",[14,106182,106183,106184,106186],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[139,106185,101085],{}," 主动控制它。",[14,106188,106189],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[113,106191,106193],{"id":106192},"hinge-joint","hinge joint",[133,106195,106197],{"className":53096,"code":106196,"language":53098,"meta":31,"style":31},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[139,106198,106199],{"__ignoreMap":31},[142,106200,106201,106203,106205,106207,106209,106211,106213,106215,106217,106219,106221,106223,106226,106228,106231],{"class":144,"line":145},[142,106202,1063],{"class":152},[142,106204,102965],{"class":51329},[142,106206,14949],{"class":1991},[142,106208,198],{"class":152},[142,106210,106028],{"class":257},[142,106212,53853],{"class":1991},[142,106214,198],{"class":152},[142,106216,106028],{"class":257},[142,106218,106037],{"class":1991},[142,106220,198],{"class":152},[142,106222,106042],{"class":257},[142,106224,106225],{"class":1991}," damping",[142,106227,198],{"class":152},[142,106229,106230],{"class":257},"\"0.1\"",[142,106232,101153],{"class":152},[14,106234,106235],{},"含义：",[96,106237,106238,106244,106250],{},[99,106239,106240,106243],{},[139,106241,106242],{},"type=\"hinge\"","：只能绕一个轴旋转。",[99,106245,106246,106249],{},[139,106247,106248],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[99,106251,106252,106255],{},[139,106253,106254],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[113,106257,106259],{"id":106258},"motor-actuator","motor actuator",[133,106261,106263],{"className":53096,"code":106262,"language":53098,"meta":31,"style":31},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[139,106264,106265],{"__ignoreMap":31},[142,106266,106267,106269,106271,106273,106275,106277,106279,106281,106283,106285,106287,106289,106291,106293,106295,106297,106299,106301],{"class":144,"line":145},[142,106268,1063],{"class":152},[142,106270,106083],{"class":51329},[142,106272,14949],{"class":1991},[142,106274,198],{"class":152},[142,106276,106090],{"class":257},[142,106278,106093],{"class":1991},[142,106280,198],{"class":152},[142,106282,106028],{"class":257},[142,106284,106100],{"class":1991},[142,106286,198],{"class":152},[142,106288,3706],{"class":257},[142,106290,106107],{"class":1991},[142,106292,198],{"class":152},[142,106294,106112],{"class":257},[142,106296,106115],{"class":1991},[142,106298,198],{"class":152},[142,106300,106120],{"class":257},[142,106302,101153],{"class":152},[14,106304,106235],{},[96,106306,106307,106316,106322,106328],{},[99,106308,106309,106312,106313,106315],{},[139,106310,106311],{},"joint=\"hinge\"","：这个电机作用在名为 ",[139,106314,105849],{}," 的关节上。",[99,106317,106318,106321],{},[139,106319,106320],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[99,106323,106324,106327],{},[139,106325,106326],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[99,106329,106330,106333],{},[139,106331,106332],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106335,106336],{},"简单理解：",[133,106338,106341],{"className":106339,"code":106340,"language":5216,"meta":31},[5214],"实际施加效果 ≈ data.ctrl[0] * gear\n",[139,106342,106340],{"__ignoreMap":31},[14,106344,106345],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[84,106347,101262],{"id":101261},[133,106349,106351],{"className":30407,"code":106350,"language":30409,"meta":31,"style":31},"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",[139,106352,106353,106360,106364,106370,106380,106384,106388,106396,106401,106406,106410,106414,106419,106424,106428,106433,106438,106443,106448,106452,106456,106460,106465,106470,106475,106479,106483,106487,106491,106503,106515,106523,106527,106537,106547,106557,106561,106574,106587,106591,106608,106622,106657,106661,106665,106676,106691,106706,106718,106722,106726,106738],{"__ignoreMap":31},[142,106354,106355,106357],{"class":144,"line":145},[142,106356,30421],{"class":148},[142,106358,106359],{"class":152}," math\n",[142,106361,106362],{"class":144,"line":64},[142,106363,2428],{"emptyLinePlaceholder":69},[142,106365,106366,106368],{"class":144,"line":1208},[142,106367,30421],{"class":148},[142,106369,101310],{"class":152},[142,106371,106372,106374,106376,106378],{"class":144,"line":1223},[142,106373,30421],{"class":148},[142,106375,31409],{"class":152},[142,106377,31412],{"class":148},[142,106379,31415],{"class":152},[142,106381,106382],{"class":144,"line":1229},[142,106383,2428],{"emptyLinePlaceholder":69},[142,106385,106386],{"class":144,"line":1243},[142,106387,2428],{"emptyLinePlaceholder":69},[142,106389,106390,106392,106394],{"class":144,"line":1249},[142,106391,101323],{"class":201},[142,106393,13593],{"class":148},[142,106395,101328],{"class":257},[142,106397,106398],{"class":144,"line":1340},[142,106399,106400],{"class":257},"\u003Cmujoco model=\"one_link_motor\">\n",[142,106402,106403],{"class":144,"line":1346},[142,106404,106405],{"class":257},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[142,106407,106408],{"class":144,"line":1358},[142,106409,2428],{"emptyLinePlaceholder":69},[142,106411,106412],{"class":144,"line":1640},[142,106413,101347],{"class":257},[142,106415,106416],{"class":144,"line":1645},[142,106417,106418],{"class":257},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[142,106420,106421],{"class":144,"line":1651},[142,106422,106423],{"class":257},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[142,106425,106426],{"class":144,"line":1656},[142,106427,2428],{"emptyLinePlaceholder":69},[142,106429,106430],{"class":144,"line":1670},[142,106431,106432],{"class":257},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[142,106434,106435],{"class":144,"line":1675},[142,106436,106437],{"class":257},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[142,106439,106440],{"class":144,"line":1681},[142,106441,106442],{"class":257},"        \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",[142,106444,106445],{"class":144,"line":1702},[142,106446,106447],{"class":257},"      \u003C\u002Fbody>\n",[142,106449,106450],{"class":144,"line":1707},[142,106451,101376],{"class":257},[142,106453,106454],{"class":144,"line":1721},[142,106455,101381],{"class":257},[142,106457,106458],{"class":144,"line":1726},[142,106459,2428],{"emptyLinePlaceholder":69},[142,106461,106462],{"class":144,"line":1755},[142,106463,106464],{"class":257},"  \u003Cactuator>\n",[142,106466,106467],{"class":144,"line":1760},[142,106468,106469],{"class":257},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[142,106471,106472],{"class":144,"line":1777},[142,106473,106474],{"class":257},"  \u003C\u002Factuator>\n",[142,106476,106477],{"class":144,"line":1782},[142,106478,101386],{"class":257},[142,106480,106481],{"class":144,"line":1787},[142,106482,95707],{"class":257},[142,106484,106485],{"class":144,"line":1792},[142,106486,2428],{"emptyLinePlaceholder":69},[142,106488,106489],{"class":144,"line":1806},[142,106490,2428],{"emptyLinePlaceholder":69},[142,106492,106493,106495,106497,106499,106501],{"class":144,"line":1811},[142,106494,31976],{"class":148},[142,106496,2001],{"class":1991},[142,106498,101407],{"class":152},[142,106500,95695],{"class":201},[142,106502,3767],{"class":152},[142,106504,106505,106507,106509,106511,106513],{"class":144,"line":2605},[142,106506,101416],{"class":152},[142,106508,198],{"class":148},[142,106510,101421],{"class":152},[142,106512,101323],{"class":201},[142,106514,159],{"class":152},[142,106516,106517,106519,106521],{"class":144,"line":2619},[142,106518,101430],{"class":152},[142,106520,198],{"class":148},[142,106522,101435],{"class":152},[142,106524,106525],{"class":144,"line":2627},[142,106526,2428],{"emptyLinePlaceholder":69},[142,106528,106529,106531,106533,106535],{"class":144,"line":2632},[142,106530,31328],{"class":201},[142,106532,153],{"class":152},[142,106534,101448],{"class":257},[142,106536,101451],{"class":152},[142,106538,106539,106541,106543,106545],{"class":144,"line":2638},[142,106540,31328],{"class":201},[142,106542,153],{"class":152},[142,106544,101460],{"class":257},[142,106546,101463],{"class":152},[142,106548,106549,106551,106553,106555],{"class":144,"line":2644},[142,106550,31328],{"class":201},[142,106552,153],{"class":152},[142,106554,101472],{"class":257},[142,106556,101475],{"class":152},[142,106558,106559],{"class":144,"line":2649},[142,106560,2428],{"emptyLinePlaceholder":69},[142,106562,106563,106565,106568,106570,106572],{"class":144,"line":7977},[142,106564,3129],{"class":148},[142,106566,106567],{"class":152}," model.nu ",[142,106569,20977],{"class":148},[142,106571,25147],{"class":201},[142,106573,3767],{"class":152},[142,106575,106576,106578,106580,106582,106585],{"class":144,"line":8001},[142,106577,103441],{"class":148},[142,106579,103444],{"class":201},[142,106581,153],{"class":152},[142,106583,106584],{"class":257},"\"expected exactly one actuator\"",[142,106586,159],{"class":152},[142,106588,106589],{"class":144,"line":8006},[142,106590,2428],{"emptyLinePlaceholder":69},[142,106592,106593,106595,106597,106599,106601,106603,106606],{"class":144,"line":8012},[142,106594,3229],{"class":148},[142,106596,31645],{"class":152},[142,106598,26072],{"class":148},[142,106600,32472],{"class":201},[142,106602,153],{"class":152},[142,106604,106605],{"class":201},"2000",[142,106607,30815],{"class":152},[142,106609,106610,106613,106615,106617,106619],{"class":144,"line":8039},[142,106611,106612],{"class":152},"        t ",[142,106614,198],{"class":148},[142,106616,31645],{"class":152},[142,106618,608],{"class":148},[142,106620,106621],{"class":152}," model.opt.timestep\n",[142,106623,106624,106627,106629,106631,106633,106636,106638,106641,106643,106645,106648,106650,106652,106654],{"class":144,"line":8044},[142,106625,106626],{"class":152},"        data.ctrl[",[142,106628,344],{"class":201},[142,106630,4471],{"class":152},[142,106632,198],{"class":148},[142,106634,106635],{"class":201}," 1.5",[142,106637,6547],{"class":148},[142,106639,106640],{"class":152}," math.sin(",[142,106642,105269],{"class":201},[142,106644,6547],{"class":148},[142,106646,106647],{"class":152}," math.pi ",[142,106649,608],{"class":148},[142,106651,61896],{"class":201},[142,106653,6547],{"class":148},[142,106655,106656],{"class":152}," t)\n",[142,106658,106659],{"class":144,"line":8050},[142,106660,101525],{"class":152},[142,106662,106663],{"class":144,"line":8062},[142,106664,2428],{"emptyLinePlaceholder":69},[142,106666,106667,106669,106671,106674],{"class":144,"line":8074},[142,106668,31328],{"class":201},[142,106670,153],{"class":152},[142,106672,106673],{"class":257},"\"time:\"",[142,106675,101487],{"class":152},[142,106677,106678,106680,106682,106685,106687,106689],{"class":144,"line":8086},[142,106679,31328],{"class":201},[142,106681,153],{"class":152},[142,106683,106684],{"class":257},"\"joint qpos:\"",[142,106686,104939],{"class":152},[142,106688,446],{"class":201},[142,106690,30526],{"class":152},[142,106692,106693,106695,106697,106700,106702,106704],{"class":144,"line":9745},[142,106694,31328],{"class":201},[142,106696,153],{"class":152},[142,106698,106699],{"class":257},"\"joint qvel:\"",[142,106701,104955],{"class":152},[142,106703,446],{"class":201},[142,106705,30526],{"class":152},[142,106707,106708,106710,106712,106715],{"class":144,"line":9770},[142,106709,31328],{"class":201},[142,106711,153],{"class":152},[142,106713,106714],{"class":257},"\"last ctrl:\"",[142,106716,106717],{"class":152},", data.ctrl.copy())\n",[142,106719,106720],{"class":144,"line":9793},[142,106721,2428],{"emptyLinePlaceholder":69},[142,106723,106724],{"class":144,"line":9817},[142,106725,2428],{"emptyLinePlaceholder":69},[142,106727,106728,106730,106732,106734,106736],{"class":144,"line":9822},[142,106729,1559],{"class":148},[142,106731,31249],{"class":201},[142,106733,101568],{"class":148},[142,106735,101571],{"class":257},[142,106737,3767],{"class":152},[142,106739,106740],{"class":144,"line":9827},[142,106741,101578],{"class":152},[14,106743,103579],{},[133,106745,106747],{"className":23851,"code":106746,"language":23853,"meta":31,"style":31},"touch ch4_joint_motor.py\n",[139,106748,106749],{"__ignoreMap":31},[142,106750,106751,106753],{"class":144,"line":145},[142,106752,101292],{"class":1991},[142,106754,106755],{"class":257}," ch4_joint_motor.py\n",[14,106757,102310],{},[133,106759,106761],{"className":23851,"code":106760,"language":23853,"meta":31,"style":31},"python ch4_joint_motor.py\n",[139,106762,106763],{"__ignoreMap":31},[142,106764,106765,106767],{"class":144,"line":145},[142,106766,30409],{"class":1991},[142,106768,106755],{"class":257},[113,106770,101581],{"id":101581},[14,106772,106773],{},"检查 actuator 数量：",[133,106775,106777],{"className":30407,"code":106776,"language":30409,"meta":31,"style":31},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[139,106778,106779,106791],{"__ignoreMap":31},[142,106780,106781,106783,106785,106787,106789],{"class":144,"line":145},[142,106782,1559],{"class":148},[142,106784,106567],{"class":152},[142,106786,20977],{"class":148},[142,106788,25147],{"class":201},[142,106790,3767],{"class":152},[142,106792,106793,106795,106797,106799,106801],{"class":144,"line":64},[142,106794,103904],{"class":148},[142,106796,103444],{"class":201},[142,106798,153],{"class":152},[142,106800,106584],{"class":257},[142,106802,159],{"class":152},[14,106804,106805,106807,106808,106810],{},[139,106806,102167],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[139,106809,101085],{}," 长度应该是 1。",[14,106812,106813],{},"产生正弦控制信号：",[133,106815,106817],{"className":30407,"code":106816,"language":30409,"meta":31,"style":31},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[139,106818,106819],{"__ignoreMap":31},[142,106820,106821,106823,106825,106827,106829,106831,106833,106835,106837,106839,106841,106843,106845,106847],{"class":144,"line":145},[142,106822,105880],{"class":152},[142,106824,344],{"class":201},[142,106826,4471],{"class":152},[142,106828,198],{"class":148},[142,106830,106635],{"class":201},[142,106832,6547],{"class":148},[142,106834,106640],{"class":152},[142,106836,105269],{"class":201},[142,106838,6547],{"class":148},[142,106840,106647],{"class":152},[142,106842,608],{"class":148},[142,106844,61896],{"class":201},[142,106846,6547],{"class":148},[142,106848,106656],{"class":152},[14,106850,106851],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106853,101682],{},[133,106855,106856],{"className":30407,"code":104514,"language":30409,"meta":31,"style":31},[139,106857,106858],{"__ignoreMap":31},[142,106859,106860],{"class":144,"line":145},[142,106861,104514],{"class":152},[14,106863,106864],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[113,106866,101717],{"id":101717},[133,106868,106870],{"className":30407,"code":106869,"language":30409,"meta":31,"style":31},"import math\n",[139,106871,106872],{"__ignoreMap":31},[142,106873,106874,106876],{"class":144,"line":145},[142,106875,30421],{"class":148},[142,106877,106359],{"class":152},[14,106879,106880,106881,101027,106884,106887],{},"导入 Python 标准库里的数学模块。后面要用 ",[139,106882,106883],{},"math.sin",[139,106885,106886],{},"math.pi"," 生成周期变化的控制信号。",[133,106889,106890],{"className":30407,"code":103695,"language":30409,"meta":31,"style":31},[139,106891,106892,106898],{"__ignoreMap":31},[142,106893,106894,106896],{"class":144,"line":145},[142,106895,30421],{"class":148},[142,106897,101310],{"class":152},[142,106899,106900,106902,106904,106906],{"class":144,"line":64},[142,106901,30421],{"class":148},[142,106903,31409],{"class":152},[142,106905,31412],{"class":148},[142,106907,31415],{"class":152},[14,106909,106910],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[133,106912,106913],{"className":53096,"code":106196,"language":53098,"meta":31,"style":31},[139,106914,106915],{"__ignoreMap":31},[142,106916,106917,106919,106921,106923,106925,106927,106929,106931,106933,106935,106937,106939,106941,106943,106945],{"class":144,"line":145},[142,106918,1063],{"class":152},[142,106920,102965],{"class":51329},[142,106922,14949],{"class":1991},[142,106924,198],{"class":152},[142,106926,106028],{"class":257},[142,106928,53853],{"class":1991},[142,106930,198],{"class":152},[142,106932,106028],{"class":257},[142,106934,106037],{"class":1991},[142,106936,198],{"class":152},[142,106938,106042],{"class":257},[142,106940,106225],{"class":1991},[142,106942,198],{"class":152},[142,106944,106230],{"class":257},[142,106946,101153],{"class":152},[14,106948,106949,106950,106952,106953,106955,106956,106958],{},"这行定义关节。",[139,106951,105849],{}," 表示旋转关节。",[139,106954,106248],{}," 表示绕 y 轴旋转。",[139,106957,106254],{}," 表示有一点阻尼，运动不会完全无损耗。",[133,106960,106962],{"className":53096,"code":106961,"language":53098,"meta":31,"style":31},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[139,106963,106964],{"__ignoreMap":31},[142,106965,106966,106968,106970,106972,106974,106977,106979,106981,106984,106987,106989,106992,106994,106996,106998,107000,107002,107005],{"class":144,"line":145},[142,106967,1063],{"class":152},[142,106969,101129],{"class":51329},[142,106971,14949],{"class":1991},[142,106973,198],{"class":152},[142,106975,106976],{"class":257},"\"link_geom\"",[142,106978,53853],{"class":1991},[142,106980,198],{"class":152},[142,106982,106983],{"class":257},"\"capsule\"",[142,106985,106986],{"class":1991}," fromto",[142,106988,198],{"class":152},[142,106990,106991],{"class":257},"\"0 0 0 0 0 0.5\"",[142,106993,101145],{"class":1991},[142,106995,198],{"class":152},[142,106997,103787],{"class":257},[142,106999,102010],{"class":1991},[142,107001,198],{"class":152},[142,107003,107004],{"class":257},"\"0.5\"",[142,107006,101153],{"class":152},[14,107008,107009,107010,107012,107013,107015,107016,107019,107020,28414,107023,107025],{},"这行定义摆杆的形状。",[139,107011,103174],{}," 是胶囊体，适合表示杆子。",[139,107014,103185],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[139,107017,107018],{},"(0,0,0)"," 延伸到 ",[139,107021,107022],{},"(0,0,0.5)",[139,107024,103179],{}," 是半径。",[133,107027,107028],{"className":53096,"code":106262,"language":53098,"meta":31,"style":31},[139,107029,107030],{"__ignoreMap":31},[142,107031,107032,107034,107036,107038,107040,107042,107044,107046,107048,107050,107052,107054,107056,107058,107060,107062,107064,107066],{"class":144,"line":145},[142,107033,1063],{"class":152},[142,107035,106083],{"class":51329},[142,107037,14949],{"class":1991},[142,107039,198],{"class":152},[142,107041,106090],{"class":257},[142,107043,106093],{"class":1991},[142,107045,198],{"class":152},[142,107047,106028],{"class":257},[142,107049,106100],{"class":1991},[142,107051,198],{"class":152},[142,107053,3706],{"class":257},[142,107055,106107],{"class":1991},[142,107057,198],{"class":152},[142,107059,106112],{"class":257},[142,107061,106115],{"class":1991},[142,107063,198],{"class":152},[142,107065,106120],{"class":257},[142,107067,101153],{"class":152},[14,107069,107070,107071,107073,107074,107077,107078,107080],{},"这行定义电机。它作用在 ",[139,107072,105849],{}," 关节上。",[139,107075,107076],{},"gear"," 可以理解成放大倍数。",[139,107079,105864],{}," 限制控制输入范围。",[133,107082,107083],{"className":30407,"code":106776,"language":30409,"meta":31,"style":31},[139,107084,107085,107097],{"__ignoreMap":31},[142,107086,107087,107089,107091,107093,107095],{"class":144,"line":145},[142,107088,1559],{"class":148},[142,107090,106567],{"class":152},[142,107092,20977],{"class":148},[142,107094,25147],{"class":201},[142,107096,3767],{"class":152},[142,107098,107099,107101,107103,107105,107107],{"class":144,"line":64},[142,107100,103904],{"class":148},[142,107102,103444],{"class":201},[142,107104,153],{"class":152},[142,107106,106584],{"class":257},[142,107108,159],{"class":152},[14,107110,107111,107113],{},[139,107112,102167],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[133,107115,107117],{"className":30407,"code":107116,"language":30409,"meta":31,"style":31},"for step in range(2000):\n",[139,107118,107119],{"__ignoreMap":31},[142,107120,107121,107123,107125,107127,107129,107131,107133],{"class":144,"line":145},[142,107122,3053],{"class":148},[142,107124,31645],{"class":152},[142,107126,26072],{"class":148},[142,107128,32472],{"class":201},[142,107130,153],{"class":152},[142,107132,106605],{"class":201},[142,107134,30815],{"class":152},[14,107136,107137,107138,107140,107141,107144],{},"循环 2000 步。这里没有用 ",[139,107139,1145],{},"，而是用 ",[139,107142,107143],{},"step","，因为后面要用当前步数计算时间。",[133,107146,107148],{"className":30407,"code":107147,"language":30409,"meta":31,"style":31},"t = step * model.opt.timestep\n",[139,107149,107150],{"__ignoreMap":31},[142,107151,107152,107155,107157,107159,107161],{"class":144,"line":145},[142,107153,107154],{"class":152},"t ",[142,107156,198],{"class":148},[142,107158,31645],{"class":152},[142,107160,608],{"class":148},[142,107162,106621],{"class":152},[14,107164,107165],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[133,107167,107168],{"className":30407,"code":106816,"language":30409,"meta":31,"style":31},[139,107169,107170],{"__ignoreMap":31},[142,107171,107172,107174,107176,107178,107180,107182,107184,107186,107188,107190,107192,107194,107196,107198],{"class":144,"line":145},[142,107173,105880],{"class":152},[142,107175,344],{"class":201},[142,107177,4471],{"class":152},[142,107179,198],{"class":148},[142,107181,106635],{"class":201},[142,107183,6547],{"class":148},[142,107185,106640],{"class":152},[142,107187,105269],{"class":201},[142,107189,6547],{"class":148},[142,107191,106647],{"class":152},[142,107193,608],{"class":148},[142,107195,61896],{"class":201},[142,107197,6547],{"class":148},[142,107199,106656],{"class":152},[14,107201,107202],{},"这行给电机输入一个正弦波。拆开看：",[96,107204,107205,107211,107217],{},[99,107206,107207,107210],{},[139,107208,107209],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[99,107212,107213,107216],{},[139,107214,107215],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[99,107218,107219,107222],{},[139,107220,107221],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107224,107225],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[133,107227,107229],{"className":30407,"code":107228,"language":30409,"meta":31,"style":31},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[139,107230,107231],{"__ignoreMap":31},[142,107232,107233,107235,107237,107239,107241,107243],{"class":144,"line":145},[142,107234,30444],{"class":201},[142,107236,153],{"class":152},[142,107238,106684],{"class":257},[142,107240,104939],{"class":152},[142,107242,446],{"class":201},[142,107244,30526],{"class":152},[14,107246,107247,107248,107250],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[139,107249,101079],{}," 只有一个数。",[84,107252,102325],{"id":102324},[14,107254,107255],{},"输出类似:",[133,107257,107260],{"className":107258,"code":107259,"language":5216,"meta":31},[5214],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[139,107261,107259],{"__ignoreMap":31},[14,107263,107264,107265,107267],{},"这里 ",[139,107266,106135],{}," 是电机输入。",[14,107269,107270,107273,107274,107277],{},[139,107271,107272],{},"joint qpos"," 是关节角度，单位通常是弧度。",[139,107275,107276],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107279,107280],{},"角度单位提示：",[133,107282,107285],{"className":107283,"code":107284,"language":5216,"meta":31},[5214],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[139,107286,107284],{"__ignoreMap":31},[14,107288,107289,107290,107292,107293,107295],{},"如果你看到 ",[139,107291,104039],{}," 是 ",[139,107294,35358],{},"，大约就是 28.6 度。",[84,107297,102357],{"id":102356},[96,107299,107300,107307,107310,107317,107320,107328,107336],{},[99,107301,102420,107302,102423,107304,28414],{},[139,107303,106320],{},[139,107305,107306],{},"gear=\"5\"",[99,107308,107309],{},"重新运行，观察关节运动是否更剧烈。",[99,107311,102420,107312,102423,107314,28414],{},[139,107313,105864],{},[139,107315,107316],{},"-0.2 0.2",[99,107318,107319],{},"重新运行，观察控制能力是否变弱。",[99,107321,107322,107323,107325,107326,28414],{},"去掉 actuator，确认 ",[139,107324,102167],{}," 变成 ",[139,107327,344],{},[99,107329,102420,107330,102423,107332,107335],{},[139,107331,106254],{},[139,107333,107334],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[99,107337,102420,107338,102423,107340,107343],{},[139,107339,106248],{},[139,107341,107342],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[84,107345,102462],{"id":102461},[113,107347,107349],{"id":107348},"indexerror-index-0-is-out-of-bounds",[139,107350,107351],{},"IndexError: index 0 is out of bounds",[14,107353,107354,107355,107357],{},"原因是 ",[139,107356,106001],{},"，没有 actuator。",[113,107359,107360],{"id":107360},"关节几乎不动",[14,107362,107363],{},"可能原因:",[96,107365,107366,107371,107375,107381],{},[99,107367,107368,107370],{},[139,107369,107076],{}," 太小",[99,107372,107373,107370],{},[139,107374,105864],{},[99,107376,107377,107380],{},[139,107378,107379],{},"damping"," 太大",[99,107382,107383],{},"重力方向导致运动不明显",[113,107385,107386],{"id":107386},"模型编译失败",[14,107388,107389,107390,107392],{},"检查 actuator 引用的 ",[139,107391,106311],{}," 是否存在，joint 名称是否拼写一致。",[113,107394,107396,107398],{"id":107395},"datactrl0-写了但没有效果",[139,107397,106135],{}," 写了但没有效果",[14,107400,102584],{},[96,107402,107403,107408,107411,107416,107421],{},[99,107404,107405,107407],{},[139,107406,102167],{}," 是否大于 0。",[99,107409,107410],{},"motor 是否引用了正确 joint。",[99,107412,107413,107415],{},[139,107414,107076],{}," 是否太小。",[99,107417,107418,107420],{},[139,107419,105864],{}," 是否把输入限制得太小。",[99,107422,107423],{},"body 是否真的有可动 joint。",[113,107425,107426],{"id":107426},"控制输入超过范围会怎样",[14,107428,107429],{},"如果设置了：",[133,107431,107433],{"className":53096,"code":107432,"language":53098,"meta":31,"style":31},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[139,107434,107435],{"__ignoreMap":31},[142,107436,107437],{"class":144,"line":145},[142,107438,107432],{"class":152},[14,107440,107441],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[133,107443,107445],{"className":30407,"code":107444,"language":30409,"meta":31,"style":31},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[139,107446,107447,107467],{"__ignoreMap":31},[142,107448,107449,107452,107454,107457,107459,107461,107463,107465],{"class":144,"line":145},[142,107450,107451],{"class":152},"action ",[142,107453,198],{"class":148},[142,107455,107456],{"class":152}," np.clip(action, ",[142,107458,685],{"class":148},[142,107460,105269],{"class":201},[142,107462,12464],{"class":152},[142,107464,105269],{"class":201},[142,107466,159],{"class":152},[142,107468,107469,107471,107473,107475,107477],{"class":144,"line":64},[142,107470,105880],{"class":152},[142,107472,344],{"class":201},[142,107474,4471],{"class":152},[142,107476,198],{"class":148},[142,107478,107479],{"class":152}," action\n",[84,107481,102616],{"id":102615},[14,107483,107484],{},"这一章建立了控制任务的基本形式：",[133,107486,107489],{"className":107487,"code":107488,"language":5216,"meta":31},[5214],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[139,107490,107488],{"__ignoreMap":31},[14,107492,107493],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5155,107495,107496],{},"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":31,"searchDepth":64,"depth":64,"links":107498},[107499,107500,107501,107506,107510,107511,107512,107520],{"id":100655,"depth":64,"text":100656},{"id":100778,"depth":64,"text":100779},{"id":101053,"depth":64,"text":101054,"children":107502},[107503,107504,107505],{"id":106142,"depth":1208,"text":106143},{"id":106192,"depth":1208,"text":106193},{"id":106258,"depth":1208,"text":106259},{"id":101261,"depth":64,"text":101262,"children":107507},[107508,107509],{"id":101581,"depth":1208,"text":101581},{"id":101717,"depth":1208,"text":101717},{"id":102324,"depth":64,"text":102325},{"id":102356,"depth":64,"text":102357},{"id":102461,"depth":64,"text":102462,"children":107513},[107514,107515,107516,107517,107519],{"id":107348,"depth":1208,"text":107351},{"id":107360,"depth":1208,"text":107360},{"id":107386,"depth":1208,"text":107386},{"id":107395,"depth":1208,"text":107518},"data.ctrl[0] 写了但没有效果",{"id":107426,"depth":1208,"text":107426},{"id":102615,"depth":64,"text":102616},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105830,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107527,"title":107528,"body":107529,"description":31,"extension":67,"meta":109438,"navigation":69,"path":109439,"seo":109440,"stem":109441,"__hash__":109442},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107530,"toc":109414},[107531,107534,107536,107539,107547,107550,107567,107570,107595,107598,107644,107646,107648,107703,107705,107724,107726,107769,107772,107789,107792,107808,107818,107825,107827,107830,107833,107867,107870,107918,107922,107925,107939,107948,107952,107955,107980,107983,107987,108000,108003,108009,108012,108027,108029,108032,108292,108294,108306,108309,108621,108623,108635,108637,108640,108655,108660,108663,108685,108688,108691,108725,108728,108732,108743,108746,108763,108766,108780,108787,108807,108814,108828,108831,108843,108858,108878,108881,108903,108906,108910,108925,108936,108951,108954,108984,109000,109029,109037,109061,109064,109082,109092,109104,109111,109120,109126,109135,109138,109140,109149,109152,109167,109169,109172,109183,109186,109197,109200,109218,109220,109237,109240,109268,109270,109274,109277,109307,109313,109316,109320,109328,109331,109333,109354,109357,109360,109376,109379,109395,109397,109400,109411],[10,107532,107528],{"id":107533},"_5viewer-可视化与-renderer-离屏渲染",[84,107535,100656],{"id":100655},[14,107537,107538],{},"本章掌握两类可视化方式:",[96,107540,107541,107544],{},[99,107542,107543],{},"交互式 viewer: 适合人工观察仿真",[99,107545,107546],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107548,107549],{},"使用官方接口:",[133,107551,107553],{"className":30407,"code":107552,"language":30409,"meta":31,"style":31},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[139,107554,107555,107562],{"__ignoreMap":31},[142,107556,107557,107559],{"class":144,"line":145},[142,107558,30421],{"class":148},[142,107560,107561],{"class":152}," mujoco.viewer\n",[142,107563,107564],{"class":144,"line":64},[142,107565,107566],{"class":152},"mujoco.viewer.launch_passive(model, data)\n",[14,107568,107569],{},"以及:",[133,107571,107573],{"className":30407,"code":107572,"language":30409,"meta":31,"style":31},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[139,107574,107575,107585],{"__ignoreMap":31},[142,107576,107577,107580,107582],{"class":144,"line":145},[142,107578,107579],{"class":152},"renderer ",[142,107581,198],{"class":148},[142,107583,107584],{"class":152}," mujoco.Renderer(model)\n",[142,107586,107587,107590,107592],{"class":144,"line":64},[142,107588,107589],{"class":152},"image ",[142,107591,198],{"class":148},[142,107593,107594],{"class":152}," renderer.render()\n",[14,107596,107597],{},"新手建议先理解二者区别：",[290,107599,107600,107616],{},[293,107601,107602],{},[296,107603,107604,107607,107610,107613],{},[299,107605,107606],{"align":23765},"工具",[299,107608,107609],{"align":23765},"用途",[299,107611,107612],{"align":23765},"是否打开窗口",[299,107614,107615],{"align":23765},"常见场景",[337,107617,107618,107631],{},[296,107619,107620,107623,107626,107628],{},[342,107621,107622],{"align":23765},"Viewer",[342,107624,107625],{"align":23765},"人眼实时观察仿真",[342,107627,104674],{"align":23765},[342,107629,107630],{"align":23765},"调试模型、看控制效果",[296,107632,107633,107636,107639,107641],{},[342,107634,107635],{"align":23765},"Renderer",[342,107637,107638],{"align":23765},"生成图像数组",[342,107640,104687],{"align":23765},[342,107642,107643],{"align":23765},"保存图片、训练视觉策略、服务器批量采集",[84,107645,100779],{"id":100778},[14,107647,100782],{},[133,107649,107651],{"className":23851,"code":107650,"language":23853,"meta":31,"style":31},"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",[139,107652,107653,107665,107675,107683,107691],{"__ignoreMap":31},[142,107654,107655,107657,107659,107661,107663],{"class":144,"line":145},[142,107656,24606],{"class":1991},[142,107658,26344],{"class":257},[142,107660,23863],{"class":257},[142,107662,26429],{"class":201},[142,107664,24707],{"class":201},[142,107666,107667,107669,107671,107673],{"class":144,"line":64},[142,107668,100817],{"class":257},[142,107670,100820],{"class":257},[142,107672,100823],{"class":257},[142,107674,24707],{"class":201},[142,107676,107677,107679,107681],{"class":144,"line":1208},[142,107678,100830],{"class":257},[142,107680,100833],{"class":257},[142,107682,24707],{"class":201},[142,107684,107685,107687,107689],{"class":144,"line":1223},[142,107686,100840],{"class":257},[142,107688,100843],{"class":257},[142,107690,24707],{"class":201},[142,107692,107693,107695,107697,107699,107701],{"class":144,"line":1229},[142,107694,100850],{"class":257},[142,107696,100853],{"class":257},[142,107698,100856],{"class":257},[142,107700,100859],{"class":257},[142,107702,102525],{"class":257},[14,107704,102828],{},[133,107706,107708],{"className":23851,"code":107707,"language":23853,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy pillow\n",[139,107709,107710],{"__ignoreMap":31},[142,107711,107712,107714,107716,107718,107721],{"class":144,"line":145},[142,107713,23860],{"class":1991},[142,107715,23863],{"class":257},[142,107717,100939],{"class":257},[142,107719,107720],{"class":257}," numpy",[142,107722,107723],{"class":257}," pillow\n",[14,107725,102845],{},[133,107727,107729],{"className":23851,"code":107728,"language":23853,"meta":31,"style":31},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[139,107730,107731,107748,107757],{"__ignoreMap":31},[142,107732,107733,107735,107737,107739,107742,107744,107746],{"class":144,"line":145},[142,107734,30359],{"class":1991},[142,107736,29205],{"class":257},[142,107738,25144],{"class":201},[142,107740,107741],{"class":257}," mujoco-render",[142,107743,100984],{"class":257},[142,107745,100987],{"class":201},[142,107747,100990],{"class":201},[142,107749,107750,107752,107754],{"class":144,"line":64},[142,107751,30359],{"class":1991},[142,107753,100997],{"class":257},[142,107755,107756],{"class":257}," mujoco-render\n",[142,107758,107759,107761,107763,107765,107767],{"class":144,"line":1208},[142,107760,23860],{"class":1991},[142,107762,23863],{"class":257},[142,107764,100939],{"class":257},[142,107766,107720],{"class":257},[142,107768,107723],{"class":257},[14,107770,107771],{},"离屏渲染后端:",[133,107773,107775],{"className":23851,"code":107774,"language":23853,"meta":31,"style":31},"export MUJOCO_GL=egl\n",[139,107776,107777],{"__ignoreMap":31},[142,107778,107779,107781,107784,107786],{"class":144,"line":145},[142,107780,25071],{"class":148},[142,107782,107783],{"class":152}," MUJOCO_GL",[142,107785,198],{"class":148},[142,107787,107788],{"class":152},"egl\n",[14,107790,107791],{},"或:",[133,107793,107795],{"className":23851,"code":107794,"language":23853,"meta":31,"style":31},"export MUJOCO_GL=osmesa\n",[139,107796,107797],{"__ignoreMap":31},[142,107798,107799,107801,107803,107805],{"class":144,"line":145},[142,107800,25071],{"class":148},[142,107802,107783],{"class":152},[142,107804,198],{"class":148},[142,107806,107807],{"class":152},"osmesa\n",[14,107809,107810,107811,107814,107815,28414],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[139,107812,107813],{},"egl"," 失败，再尝试 ",[139,107816,107817],{},"osmesa",[14,107819,107820,107821,107824],{},"如果你在本机桌面环境运行，通常先不要设置 ",[139,107822,107823],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[84,107826,101054],{"id":101053},[14,107828,107829],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107831,107832],{},"典型 viewer 流程:",[133,107834,107836],{"className":30407,"code":107835,"language":30409,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[139,107837,107838,107851,107858,107862],{"__ignoreMap":31},[142,107839,107840,107843,107846,107848],{"class":144,"line":145},[142,107841,107842],{"class":148},"with",[142,107844,107845],{"class":152}," mujoco.viewer.launch_passive(model, data) ",[142,107847,31412],{"class":148},[142,107849,107850],{"class":152}," viewer:\n",[142,107852,107853,107855],{"class":144,"line":64},[142,107854,2279],{"class":148},[142,107856,107857],{"class":152}," viewer.is_running():\n",[142,107859,107860],{"class":144,"line":1208},[142,107861,101525],{"class":152},[142,107863,107864],{"class":144,"line":1223},[142,107865,107866],{"class":152},"        viewer.sync()\n",[14,107868,107869],{},"典型 renderer 流程:",[133,107871,107873],{"className":30407,"code":107872,"language":30409,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[139,107874,107875,107901,107905,107910],{"__ignoreMap":31},[142,107876,107877,107879,107881,107884,107886,107888,107890,107892,107894,107896,107899],{"class":144,"line":145},[142,107878,107579],{"class":152},[142,107880,198],{"class":148},[142,107882,107883],{"class":152}," mujoco.Renderer(model, ",[142,107885,25010],{"class":5245},[142,107887,198],{"class":148},[142,107889,42371],{"class":201},[142,107891,12464],{"class":152},[142,107893,25006],{"class":5245},[142,107895,198],{"class":148},[142,107897,107898],{"class":201},"640",[142,107900,159],{"class":152},[142,107902,107903],{"class":144,"line":64},[142,107904,104514],{"class":152},[142,107906,107907],{"class":144,"line":1208},[142,107908,107909],{"class":152},"renderer.update_scene(data)\n",[142,107911,107912,107914,107916],{"class":144,"line":1223},[142,107913,107589],{"class":152},[142,107915,198],{"class":148},[142,107917,107594],{"class":152},[113,107919,107921],{"id":107920},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107923,107924],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[133,107926,107928],{"className":30407,"code":107927,"language":30409,"meta":31,"style":31},"mujoco.mj_step(model, data)\nviewer.sync()\n",[139,107929,107930,107934],{"__ignoreMap":31},[142,107931,107932],{"class":144,"line":145},[142,107933,104514],{"class":152},[142,107935,107936],{"class":144,"line":64},[142,107937,107938],{"class":152},"viewer.sync()\n",[14,107940,107941,107943,107944,107947],{},[139,107942,101224],{}," 负责算物理，",[139,107945,107946],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[113,107949,107951],{"id":107950},"为什么要-sleep","为什么要 sleep",[14,107953,107954],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[133,107956,107958],{"className":30407,"code":107957,"language":30409,"meta":31,"style":31},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[139,107959,107960],{"__ignoreMap":31},[142,107961,107962,107965,107967,107970,107972,107975,107977],{"class":144,"line":145},[142,107963,107964],{"class":152},"sleep_time ",[142,107966,198],{"class":148},[142,107968,107969],{"class":152}," model.opt.timestep ",[142,107971,685],{"class":148},[142,107973,107974],{"class":152}," (time.time() ",[142,107976,685],{"class":148},[142,107978,107979],{"class":152}," step_start)\n",[14,107981,107982],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[113,107984,107986],{"id":107985},"renderer-输出是什么","renderer 输出是什么",[133,107988,107990],{"className":30407,"code":107989,"language":30409,"meta":31,"style":31},"image = renderer.render()\n",[139,107991,107992],{"__ignoreMap":31},[142,107993,107994,107996,107998],{"class":144,"line":145},[142,107995,107589],{"class":152},[142,107997,198],{"class":148},[142,107999,107594],{"class":152},[14,108001,108002],{},"得到的是 NumPy 数组，形状通常是：",[133,108004,108007],{"className":108005,"code":108006,"language":5216,"meta":31},[5214],"(height, width, 3)\n",[139,108008,108006],{"__ignoreMap":31},[14,108010,108011],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[133,108013,108015],{"className":30407,"code":108014,"language":30409,"meta":31,"style":31},"Image.fromarray(image).save(\"render_output.png\")\n",[139,108016,108017],{"__ignoreMap":31},[142,108018,108019,108022,108025],{"class":144,"line":145},[142,108020,108021],{"class":152},"Image.fromarray(image).save(",[142,108023,108024],{"class":257},"\"render_output.png\"",[142,108026,159],{"class":152},[84,108028,101262],{"id":101261},[14,108030,108031],{},"交互式 Viewer:",[133,108033,108035],{"className":30407,"code":108034,"language":30409,"meta":31,"style":31},"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",[139,108036,108037,108043,108047,108053,108059,108063,108067,108075,108080,108084,108088,108092,108097,108102,108106,108110,108114,108119,108123,108127,108131,108135,108139,108143,108155,108167,108175,108179,108189,108209,108219,108224,108229,108233,108250,108263,108268,108272,108276,108288],{"__ignoreMap":31},[142,108038,108039,108041],{"class":144,"line":145},[142,108040,30421],{"class":148},[142,108042,31858],{"class":152},[142,108044,108045],{"class":144,"line":64},[142,108046,2428],{"emptyLinePlaceholder":69},[142,108048,108049,108051],{"class":144,"line":1208},[142,108050,30421],{"class":148},[142,108052,101310],{"class":152},[142,108054,108055,108057],{"class":144,"line":1223},[142,108056,30421],{"class":148},[142,108058,107561],{"class":152},[142,108060,108061],{"class":144,"line":1229},[142,108062,2428],{"emptyLinePlaceholder":69},[142,108064,108065],{"class":144,"line":1243},[142,108066,2428],{"emptyLinePlaceholder":69},[142,108068,108069,108071,108073],{"class":144,"line":1249},[142,108070,101323],{"class":201},[142,108072,13593],{"class":148},[142,108074,101328],{"class":257},[142,108076,108077],{"class":144,"line":1340},[142,108078,108079],{"class":257},"\u003Cmujoco model=\"viewer_demo\">\n",[142,108081,108082],{"class":144,"line":1346},[142,108083,101338],{"class":257},[142,108085,108086],{"class":144,"line":1358},[142,108087,2428],{"emptyLinePlaceholder":69},[142,108089,108090],{"class":144,"line":1640},[142,108091,101347],{"class":257},[142,108093,108094],{"class":144,"line":1645},[142,108095,108096],{"class":257},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[142,108098,108099],{"class":144,"line":1651},[142,108100,108101],{"class":257},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[142,108103,108104],{"class":144,"line":1656},[142,108105,2428],{"emptyLinePlaceholder":69},[142,108107,108108],{"class":144,"line":1670},[142,108109,101361],{"class":257},[142,108111,108112],{"class":144,"line":1675},[142,108113,101366],{"class":257},[142,108115,108116],{"class":144,"line":1681},[142,108117,108118],{"class":257},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[142,108120,108121],{"class":144,"line":1702},[142,108122,101376],{"class":257},[142,108124,108125],{"class":144,"line":1707},[142,108126,101381],{"class":257},[142,108128,108129],{"class":144,"line":1721},[142,108130,101386],{"class":257},[142,108132,108133],{"class":144,"line":1726},[142,108134,95707],{"class":257},[142,108136,108137],{"class":144,"line":1755},[142,108138,2428],{"emptyLinePlaceholder":69},[142,108140,108141],{"class":144,"line":1760},[142,108142,2428],{"emptyLinePlaceholder":69},[142,108144,108145,108147,108149,108151,108153],{"class":144,"line":1777},[142,108146,31976],{"class":148},[142,108148,2001],{"class":1991},[142,108150,101407],{"class":152},[142,108152,95695],{"class":201},[142,108154,3767],{"class":152},[142,108156,108157,108159,108161,108163,108165],{"class":144,"line":1782},[142,108158,101416],{"class":152},[142,108160,198],{"class":148},[142,108162,101421],{"class":152},[142,108164,101323],{"class":201},[142,108166,159],{"class":152},[142,108168,108169,108171,108173],{"class":144,"line":1787},[142,108170,101430],{"class":152},[142,108172,198],{"class":148},[142,108174,101435],{"class":152},[142,108176,108177],{"class":144,"line":1792},[142,108178,2428],{"emptyLinePlaceholder":69},[142,108180,108181,108183,108185,108187],{"class":144,"line":1806},[142,108182,34207],{"class":148},[142,108184,107845],{"class":152},[142,108186,31412],{"class":148},[142,108188,107850],{"class":152},[142,108190,108191,108194,108197,108199,108202,108204,108207],{"class":144,"line":1811},[142,108192,108193],{"class":148},"        while",[142,108195,108196],{"class":152}," viewer.is_running() ",[142,108198,30491],{"class":148},[142,108200,108201],{"class":152}," data.time ",[142,108203,1063],{"class":148},[142,108205,108206],{"class":201}," 5.0",[142,108208,3767],{"class":152},[142,108210,108211,108214,108216],{"class":144,"line":2605},[142,108212,108213],{"class":152},"            step_start ",[142,108215,198],{"class":148},[142,108217,108218],{"class":152}," time.time()\n",[142,108220,108221],{"class":144,"line":2619},[142,108222,108223],{"class":152},"            mujoco.mj_step(model, data)\n",[142,108225,108226],{"class":144,"line":2627},[142,108227,108228],{"class":152},"            viewer.sync()\n",[142,108230,108231],{"class":144,"line":2632},[142,108232,2428],{"emptyLinePlaceholder":69},[142,108234,108235,108238,108240,108242,108244,108246,108248],{"class":144,"line":2638},[142,108236,108237],{"class":152},"            sleep_time ",[142,108239,198],{"class":148},[142,108241,107969],{"class":152},[142,108243,685],{"class":148},[142,108245,107974],{"class":152},[142,108247,685],{"class":148},[142,108249,107979],{"class":152},[142,108251,108252,108254,108257,108259,108261],{"class":144,"line":2644},[142,108253,4670],{"class":148},[142,108255,108256],{"class":152}," sleep_time ",[142,108258,1113],{"class":148},[142,108260,4121],{"class":201},[142,108262,3767],{"class":152},[142,108264,108265],{"class":144,"line":2649},[142,108266,108267],{"class":152},"                time.sleep(sleep_time)\n",[142,108269,108270],{"class":144,"line":7977},[142,108271,2428],{"emptyLinePlaceholder":69},[142,108273,108274],{"class":144,"line":8001},[142,108275,2428],{"emptyLinePlaceholder":69},[142,108277,108278,108280,108282,108284,108286],{"class":144,"line":8006},[142,108279,1559],{"class":148},[142,108281,31249],{"class":201},[142,108283,101568],{"class":148},[142,108285,101571],{"class":257},[142,108287,3767],{"class":152},[142,108289,108290],{"class":144,"line":8012},[142,108291,101578],{"class":152},[14,108293,103579],{},[133,108295,108297],{"className":23851,"code":108296,"language":23853,"meta":31,"style":31},"touch ch5_viewer.py\n",[139,108298,108299],{"__ignoreMap":31},[142,108300,108301,108303],{"class":144,"line":145},[142,108302,101292],{"class":1991},[142,108304,108305],{"class":257}," ch5_viewer.py\n",[14,108307,108308],{},"离屏 Renderer 保存图片:",[133,108310,108312],{"className":30407,"code":108311,"language":30409,"meta":31,"style":31},"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",[139,108313,108314,108326,108330,108336,108346,108350,108354,108362,108367,108371,108375,108379,108383,108388,108392,108396,108400,108404,108408,108412,108416,108420,108424,108428,108432,108444,108456,108464,108489,108493,108509,108513,108517,108532,108541,108545,108559,108564,108569,108573,108585,108597,108601,108605,108617],{"__ignoreMap":31},[142,108315,108316,108318,108321,108323],{"class":144,"line":145},[142,108317,30766],{"class":148},[142,108319,108320],{"class":152}," pathlib ",[142,108322,30421],{"class":148},[142,108324,108325],{"class":152}," Path\n",[142,108327,108328],{"class":144,"line":64},[142,108329,2428],{"emptyLinePlaceholder":69},[142,108331,108332,108334],{"class":144,"line":1208},[142,108333,30421],{"class":148},[142,108335,101310],{"class":152},[142,108337,108338,108340,108342,108344],{"class":144,"line":1223},[142,108339,30766],{"class":148},[142,108341,47292],{"class":201},[142,108343,47295],{"class":148},[142,108345,47298],{"class":152},[142,108347,108348],{"class":144,"line":1229},[142,108349,2428],{"emptyLinePlaceholder":69},[142,108351,108352],{"class":144,"line":1243},[142,108353,2428],{"emptyLinePlaceholder":69},[142,108355,108356,108358,108360],{"class":144,"line":1249},[142,108357,101323],{"class":201},[142,108359,13593],{"class":148},[142,108361,101328],{"class":257},[142,108363,108364],{"class":144,"line":1340},[142,108365,108366],{"class":257},"\u003Cmujoco model=\"renderer_demo\">\n",[142,108368,108369],{"class":144,"line":1346},[142,108370,101338],{"class":257},[142,108372,108373],{"class":144,"line":1358},[142,108374,2428],{"emptyLinePlaceholder":69},[142,108376,108377],{"class":144,"line":1640},[142,108378,101347],{"class":257},[142,108380,108381],{"class":144,"line":1645},[142,108382,108096],{"class":257},[142,108384,108385],{"class":144,"line":1651},[142,108386,108387],{"class":257},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[142,108389,108390],{"class":144,"line":1656},[142,108391,108101],{"class":257},[142,108393,108394],{"class":144,"line":1670},[142,108395,2428],{"emptyLinePlaceholder":69},[142,108397,108398],{"class":144,"line":1675},[142,108399,101361],{"class":257},[142,108401,108402],{"class":144,"line":1681},[142,108403,101366],{"class":257},[142,108405,108406],{"class":144,"line":1702},[142,108407,108118],{"class":257},[142,108409,108410],{"class":144,"line":1707},[142,108411,101376],{"class":257},[142,108413,108414],{"class":144,"line":1721},[142,108415,101381],{"class":257},[142,108417,108418],{"class":144,"line":1726},[142,108419,101386],{"class":257},[142,108421,108422],{"class":144,"line":1755},[142,108423,95707],{"class":257},[142,108425,108426],{"class":144,"line":1760},[142,108427,2428],{"emptyLinePlaceholder":69},[142,108429,108430],{"class":144,"line":1777},[142,108431,2428],{"emptyLinePlaceholder":69},[142,108433,108434,108436,108438,108440,108442],{"class":144,"line":1782},[142,108435,31976],{"class":148},[142,108437,2001],{"class":1991},[142,108439,101407],{"class":152},[142,108441,95695],{"class":201},[142,108443,3767],{"class":152},[142,108445,108446,108448,108450,108452,108454],{"class":144,"line":1787},[142,108447,101416],{"class":152},[142,108449,198],{"class":148},[142,108451,101421],{"class":152},[142,108453,101323],{"class":201},[142,108455,159],{"class":152},[142,108457,108458,108460,108462],{"class":144,"line":1792},[142,108459,101430],{"class":152},[142,108461,198],{"class":148},[142,108463,101435],{"class":152},[142,108465,108466,108469,108471,108473,108475,108477,108479,108481,108483,108485,108487],{"class":144,"line":1806},[142,108467,108468],{"class":152},"    renderer ",[142,108470,198],{"class":148},[142,108472,107883],{"class":152},[142,108474,25010],{"class":5245},[142,108476,198],{"class":148},[142,108478,42371],{"class":201},[142,108480,12464],{"class":152},[142,108482,25006],{"class":5245},[142,108484,198],{"class":148},[142,108486,107898],{"class":201},[142,108488,159],{"class":152},[142,108490,108491],{"class":144,"line":1811},[142,108492,2428],{"emptyLinePlaceholder":69},[142,108494,108495,108497,108499,108501,108503,108505,108507],{"class":144,"line":2605},[142,108496,3229],{"class":148},[142,108498,101510],{"class":152},[142,108500,26072],{"class":148},[142,108502,32472],{"class":201},[142,108504,153],{"class":152},[142,108506,464],{"class":201},[142,108508,30815],{"class":152},[142,108510,108511],{"class":144,"line":2619},[142,108512,101525],{"class":152},[142,108514,108515],{"class":144,"line":2627},[142,108516,2428],{"emptyLinePlaceholder":69},[142,108518,108519,108522,108525,108527,108530],{"class":144,"line":2632},[142,108520,108521],{"class":152},"    renderer.update_scene(data, ",[142,108523,108524],{"class":5245},"camera",[142,108526,198],{"class":148},[142,108528,108529],{"class":257},"\"fixed_camera\"",[142,108531,159],{"class":152},[142,108533,108534,108537,108539],{"class":144,"line":2638},[142,108535,108536],{"class":152},"    image ",[142,108538,198],{"class":148},[142,108540,107594],{"class":152},[142,108542,108543],{"class":144,"line":2644},[142,108544,2428],{"emptyLinePlaceholder":69},[142,108546,108547,108550,108552,108555,108557],{"class":144,"line":2649},[142,108548,108549],{"class":152},"    output_path ",[142,108551,198],{"class":148},[142,108553,108554],{"class":152}," Path(",[142,108556,108024],{"class":257},[142,108558,159],{"class":152},[142,108560,108561],{"class":144,"line":7977},[142,108562,108563],{"class":152},"    Image.fromarray(image).save(output_path)\n",[142,108565,108566],{"class":144,"line":8001},[142,108567,108568],{"class":152},"    renderer.close()\n",[142,108570,108571],{"class":144,"line":8006},[142,108572,2428],{"emptyLinePlaceholder":69},[142,108574,108575,108577,108579,108582],{"class":144,"line":8012},[142,108576,31328],{"class":201},[142,108578,153],{"class":152},[142,108580,108581],{"class":257},"\"saved:\"",[142,108583,108584],{"class":152},", output_path.resolve())\n",[142,108586,108587,108589,108591,108594],{"class":144,"line":8039},[142,108588,31328],{"class":201},[142,108590,153],{"class":152},[142,108592,108593],{"class":257},"\"image shape:\"",[142,108595,108596],{"class":152},", image.shape)\n",[142,108598,108599],{"class":144,"line":8044},[142,108600,2428],{"emptyLinePlaceholder":69},[142,108602,108603],{"class":144,"line":8050},[142,108604,2428],{"emptyLinePlaceholder":69},[142,108606,108607,108609,108611,108613,108615],{"class":144,"line":8062},[142,108608,1559],{"class":148},[142,108610,31249],{"class":201},[142,108612,101568],{"class":148},[142,108614,101571],{"class":257},[142,108616,3767],{"class":152},[142,108618,108619],{"class":144,"line":8074},[142,108620,101578],{"class":152},[14,108622,103579],{},[133,108624,108626],{"className":23851,"code":108625,"language":23853,"meta":31,"style":31},"touch ch5_renderer.py\n",[139,108627,108628],{"__ignoreMap":31},[142,108629,108630,108632],{"class":144,"line":145},[142,108631,101292],{"class":1991},[142,108633,108634],{"class":257}," ch5_renderer.py\n",[113,108636,101581],{"id":101581},[14,108638,108639],{},"viewer 上下文：",[133,108641,108643],{"className":30407,"code":108642,"language":30409,"meta":31,"style":31},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[139,108644,108645],{"__ignoreMap":31},[142,108646,108647,108649,108651,108653],{"class":144,"line":145},[142,108648,107842],{"class":148},[142,108650,107845],{"class":152},[142,108652,31412],{"class":148},[142,108654,107850],{"class":152},[14,108656,108657,108659],{},[139,108658,107842],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108661,108662],{},"窗口循环：",[133,108664,108666],{"className":30407,"code":108665,"language":30409,"meta":31,"style":31},"while viewer.is_running() and data.time \u003C 5.0:\n",[139,108667,108668],{"__ignoreMap":31},[142,108669,108670,108673,108675,108677,108679,108681,108683],{"class":144,"line":145},[142,108671,108672],{"class":148},"while",[142,108674,108196],{"class":152},[142,108676,30491],{"class":148},[142,108678,108201],{"class":152},[142,108680,1063],{"class":148},[142,108682,108206],{"class":201},[142,108684,3767],{"class":152},[14,108686,108687],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108689,108690],{},"固定相机：",[133,108692,108694],{"className":53096,"code":108693,"language":53098,"meta":31,"style":31},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[139,108695,108696],{"__ignoreMap":31},[142,108697,108698,108700,108702,108704,108706,108708,108710,108712,108715,108718,108720,108723],{"class":144,"line":145},[142,108699,1063],{"class":152},[142,108701,108524],{"class":51329},[142,108703,14949],{"class":1991},[142,108705,198],{"class":152},[142,108707,108529],{"class":257},[142,108709,101115],{"class":1991},[142,108711,198],{"class":152},[142,108713,108714],{"class":257},"\"1.5 -2.0 1.2\"",[142,108716,108717],{"class":1991}," xyaxes",[142,108719,198],{"class":152},[142,108721,108722],{"class":257},"\"1 0.75 0 0 0 1\"",[142,108724,101153],{"class":152},[14,108726,108727],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[113,108729,108731],{"id":108730},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[133,108733,108735],{"className":30407,"code":108734,"language":30409,"meta":31,"style":31},"import time\n",[139,108736,108737],{"__ignoreMap":31},[142,108738,108739,108741],{"class":144,"line":145},[142,108740,30421],{"class":148},[142,108742,31858],{"class":152},[14,108744,108745],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[133,108747,108749],{"className":30407,"code":108748,"language":30409,"meta":31,"style":31},"import mujoco\nimport mujoco.viewer\n",[139,108750,108751,108757],{"__ignoreMap":31},[142,108752,108753,108755],{"class":144,"line":145},[142,108754,30421],{"class":148},[142,108756,101310],{"class":152},[142,108758,108759,108761],{"class":144,"line":64},[142,108760,30421],{"class":148},[142,108762,107561],{"class":152},[14,108764,108765],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[133,108767,108768],{"className":30407,"code":108642,"language":30409,"meta":31,"style":31},[139,108769,108770],{"__ignoreMap":31},[142,108771,108772,108774,108776,108778],{"class":144,"line":145},[142,108773,107842],{"class":148},[142,108775,107845],{"class":152},[142,108777,31412],{"class":148},[142,108779,107850],{"class":152},[14,108781,108782,108783,108786],{},"打开一个 viewer 窗口。",[139,108784,108785],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[133,108788,108789],{"className":30407,"code":108665,"language":30409,"meta":31,"style":31},[139,108790,108791],{"__ignoreMap":31},[142,108792,108793,108795,108797,108799,108801,108803,108805],{"class":144,"line":145},[142,108794,108672],{"class":148},[142,108796,108196],{"class":152},[142,108798,30491],{"class":148},[142,108800,108201],{"class":152},[142,108802,1063],{"class":148},[142,108804,108206],{"class":201},[142,108806,3767],{"class":152},[14,108808,108809,108810,108813],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[139,108811,108812],{},"viewer.is_running()"," 会变成 false，循环结束。",[133,108815,108817],{"className":30407,"code":108816,"language":30409,"meta":31,"style":31},"step_start = time.time()\n",[139,108818,108819],{"__ignoreMap":31},[142,108820,108821,108824,108826],{"class":144,"line":145},[142,108822,108823],{"class":152},"step_start ",[142,108825,198],{"class":148},[142,108827,108218],{"class":152},[14,108829,108830],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[133,108832,108833],{"className":30407,"code":107927,"language":30409,"meta":31,"style":31},[139,108834,108835,108839],{"__ignoreMap":31},[142,108836,108837],{"class":144,"line":145},[142,108838,104514],{"class":152},[142,108840,108841],{"class":144,"line":64},[142,108842,107938],{"class":152},[14,108844,108845,108847,108848,108850,108851,108853,108854,108857],{},[139,108846,101224],{}," 推进物理仿真。",[139,108849,107946],{}," 把最新的 ",[139,108852,33430],{}," 同步到窗口里显示。没有 ",[139,108855,108856],{},"sync()","，窗口可能看不到最新状态。",[133,108859,108860],{"className":30407,"code":107957,"language":30409,"meta":31,"style":31},[139,108861,108862],{"__ignoreMap":31},[142,108863,108864,108866,108868,108870,108872,108874,108876],{"class":144,"line":145},[142,108865,107964],{"class":152},[142,108867,198],{"class":148},[142,108869,107969],{"class":152},[142,108871,685],{"class":148},[142,108873,107974],{"class":152},[142,108875,685],{"class":148},[142,108877,107979],{"class":152},[14,108879,108880],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[133,108882,108884],{"className":30407,"code":108883,"language":30409,"meta":31,"style":31},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[139,108885,108886,108898],{"__ignoreMap":31},[142,108887,108888,108890,108892,108894,108896],{"class":144,"line":145},[142,108889,1559],{"class":148},[142,108891,108256],{"class":152},[142,108893,1113],{"class":148},[142,108895,4121],{"class":201},[142,108897,3767],{"class":152},[142,108899,108900],{"class":144,"line":64},[142,108901,108902],{"class":152},"    time.sleep(sleep_time)\n",[14,108904,108905],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[113,108907,108909],{"id":108908},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[133,108911,108913],{"className":30407,"code":108912,"language":30409,"meta":31,"style":31},"from pathlib import Path\n",[139,108914,108915],{"__ignoreMap":31},[142,108916,108917,108919,108921,108923],{"class":144,"line":145},[142,108918,30766],{"class":148},[142,108920,108320],{"class":152},[142,108922,30421],{"class":148},[142,108924,108325],{"class":152},[14,108926,108927,108928,108931,108932,108935],{},"导入 ",[139,108929,108930],{},"Path","，用来处理文件路径。相比直接写字符串，",[139,108933,108934],{},"Path(\"render_output.png\")"," 更清晰。",[133,108937,108939],{"className":30407,"code":108938,"language":30409,"meta":31,"style":31},"from PIL import Image\n",[139,108940,108941],{"__ignoreMap":31},[142,108942,108943,108945,108947,108949],{"class":144,"line":145},[142,108944,30766],{"class":148},[142,108946,47292],{"class":201},[142,108948,47295],{"class":148},[142,108950,47298],{"class":152},[14,108952,108953],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[133,108955,108956],{"className":53096,"code":108693,"language":53098,"meta":31,"style":31},[139,108957,108958],{"__ignoreMap":31},[142,108959,108960,108962,108964,108966,108968,108970,108972,108974,108976,108978,108980,108982],{"class":144,"line":145},[142,108961,1063],{"class":152},[142,108963,108524],{"class":51329},[142,108965,14949],{"class":1991},[142,108967,198],{"class":152},[142,108969,108529],{"class":257},[142,108971,101115],{"class":1991},[142,108973,198],{"class":152},[142,108975,108714],{"class":257},[142,108977,108717],{"class":1991},[142,108979,198],{"class":152},[142,108981,108722],{"class":257},[142,108983,101153],{"class":152},[14,108985,108986,108987,108989,108990,108992,108993,108996,108997,108999],{},"定义一个相机。",[139,108988,79839],{}," 是相机名字。",[139,108991,104155],{}," 是相机在世界里的位置。",[139,108994,108995],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[139,108998,104155],{}," 来调视角。",[133,109001,109003],{"className":30407,"code":109002,"language":30409,"meta":31,"style":31},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[139,109004,109005],{"__ignoreMap":31},[142,109006,109007,109009,109011,109013,109015,109017,109019,109021,109023,109025,109027],{"class":144,"line":145},[142,109008,107579],{"class":152},[142,109010,198],{"class":148},[142,109012,107883],{"class":152},[142,109014,25010],{"class":5245},[142,109016,198],{"class":148},[142,109018,42371],{"class":201},[142,109020,12464],{"class":152},[142,109022,25006],{"class":5245},[142,109024,198],{"class":148},[142,109026,107898],{"class":201},[142,109028,159],{"class":152},[14,109030,109031,109032,101027,109034,109036],{},"创建离屏渲染器。",[139,109033,25010],{},[139,109035,25006],{}," 决定输出图片大小。",[133,109038,109039],{"className":30407,"code":101685,"language":30409,"meta":31,"style":31},[139,109040,109041,109057],{"__ignoreMap":31},[142,109042,109043,109045,109047,109049,109051,109053,109055],{"class":144,"line":145},[142,109044,3053],{"class":148},[142,109046,101510],{"class":152},[142,109048,26072],{"class":148},[142,109050,32472],{"class":201},[142,109052,153],{"class":152},[142,109054,464],{"class":201},[142,109056,30815],{"class":152},[142,109058,109059],{"class":144,"line":64},[142,109060,101708],{"class":152},[14,109062,109063],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[133,109065,109067],{"className":30407,"code":109066,"language":30409,"meta":31,"style":31},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[139,109068,109069],{"__ignoreMap":31},[142,109070,109071,109074,109076,109078,109080],{"class":144,"line":145},[142,109072,109073],{"class":152},"renderer.update_scene(data, ",[142,109075,108524],{"class":5245},[142,109077,198],{"class":148},[142,109079,108529],{"class":257},[142,109081,159],{"class":152},[14,109083,109084,109085,109087,109088,109091],{},"告诉 renderer：用当前 ",[139,109086,33430],{}," 的状态更新画面，并使用名为 ",[139,109089,109090],{},"fixed_camera"," 的相机视角。",[133,109093,109094],{"className":30407,"code":107989,"language":30409,"meta":31,"style":31},[139,109095,109096],{"__ignoreMap":31},[142,109097,109098,109100,109102],{"class":144,"line":145},[142,109099,107589],{"class":152},[142,109101,198],{"class":148},[142,109103,107594],{"class":152},[14,109105,109106,109107,109110],{},"真正渲染出图像。",[139,109108,109109],{},"image"," 是一个 NumPy 数组，不是文件。",[133,109112,109114],{"className":30407,"code":109113,"language":30409,"meta":31,"style":31},"Image.fromarray(image).save(output_path)\n",[139,109115,109116],{"__ignoreMap":31},[142,109117,109118],{"class":144,"line":145},[142,109119,109113],{"class":152},[14,109121,109122,109123,28414],{},"把数组转换成图片，并保存到 ",[139,109124,109125],{},"render_output.png",[133,109127,109129],{"className":30407,"code":109128,"language":30409,"meta":31,"style":31},"renderer.close()\n",[139,109130,109131],{"__ignoreMap":31},[142,109132,109133],{"class":144,"line":145},[142,109134,109128],{"class":152},[14,109136,109137],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[84,109139,102325],{"id":102324},[14,109141,109142,109143,109145,109146,28414],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[139,109144,109125],{},"，并输出图像数组形状，例如 ",[139,109147,109148],{},"(480, 640, 3)",[14,109150,109151],{},"如果图片里看不到方块，先检查：",[96,109153,109154,109157,109160],{},[99,109155,109156],{},"方块是否掉到相机视野外。",[99,109158,109159],{},"camera 位置是否合理。",[99,109161,109162,109163,109166],{},"是否在 ",[139,109164,109165],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[84,109168,102357],{"id":102356},[14,109170,109171],{},"运行 viewer:",[133,109173,109175],{"className":23851,"code":109174,"language":23853,"meta":31,"style":31},"python ch5_viewer.py\n",[139,109176,109177],{"__ignoreMap":31},[142,109178,109179,109181],{"class":144,"line":145},[142,109180,30409],{"class":1991},[142,109182,108305],{"class":257},[14,109184,109185],{},"运行 renderer:",[133,109187,109189],{"className":23851,"code":109188,"language":23853,"meta":31,"style":31},"python ch5_renderer.py\n",[139,109190,109191],{"__ignoreMap":31},[142,109192,109193,109195],{"class":144,"line":145},[142,109194,30409],{"class":1991},[142,109196,108634],{"class":257},[14,109198,109199],{},"如果在服务器上运行:",[133,109201,109203],{"className":23851,"code":109202,"language":23853,"meta":31,"style":31},"MUJOCO_GL=egl python ch5_renderer.py\n",[139,109204,109205],{"__ignoreMap":31},[142,109206,109207,109209,109211,109213,109216],{"class":144,"line":145},[142,109208,107823],{"class":152},[142,109210,198],{"class":148},[142,109212,107813],{"class":257},[142,109214,109215],{"class":1991}," python",[142,109217,108634],{"class":257},[14,109219,107791],{},[133,109221,109223],{"className":23851,"code":109222,"language":23853,"meta":31,"style":31},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[139,109224,109225],{"__ignoreMap":31},[142,109226,109227,109229,109231,109233,109235],{"class":144,"line":145},[142,109228,107823],{"class":152},[142,109230,198],{"class":148},[142,109232,107817],{"class":257},[142,109234,109215],{"class":1991},[142,109236,108634],{"class":257},[14,109238,109239],{},"再做几个练习：",[96,109241,109242,109249,109252,109258],{},[99,109243,109244,109245,109248],{},"把 renderer 分辨率改成 ",[139,109246,109247],{},"height=240, width=320","，观察输出 shape。",[99,109250,109251],{},"把方块颜色改成蓝色，重新保存图片。",[99,109253,109254,109255,109257],{},"把相机 ",[139,109256,104155],{}," 改远一点，观察画面中物体是否变小。",[99,109259,109260,109261,102423,109264,109267],{},"把 viewer 示例中的 ",[139,109262,109263],{},"data.time \u003C 5.0",[139,109265,109266],{},"data.time \u003C 20.0","，观察更长时间。",[84,109269,102462],{"id":102461},[113,109271,109273],{"id":109272},"viewer-窗口打不开","viewer 窗口打不开",[14,109275,109276],{},"安装:",[133,109278,109280],{"className":23851,"code":109279,"language":23853,"meta":31,"style":31},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[139,109281,109282],{"__ignoreMap":31},[142,109283,109284,109286,109288,109290,109292,109294,109296,109298,109300,109302,109304],{"class":144,"line":145},[142,109285,24606],{"class":1991},[142,109287,26344],{"class":257},[142,109289,23863],{"class":257},[142,109291,26429],{"class":201},[142,109293,102515],{"class":257},[142,109295,100843],{"class":257},[142,109297,102520],{"class":257},[142,109299,100856],{"class":257},[142,109301,100862],{"class":257},[142,109303,100853],{"class":257},[142,109305,109306],{"class":257}," libXinerama\n",[113,109308,109310],{"id":109309},"glfwerror",[139,109311,109312],{},"GLFWError",[14,109314,109315],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[113,109317,109319],{"id":109318},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109321,109322,109323,82568,109325,109327],{},"尝试 ",[139,109324,101046],{},[139,109326,101049],{},"。可能存在版本差异。",[113,109329,109330],{"id":109330},"保存图片是黑的",[14,109332,102584],{},[96,109334,109335,109338,109341,109351],{},[99,109336,109337],{},"XML 里是否有 light。",[99,109339,109340],{},"相机是否对着模型。",[99,109342,109343,109344,109347,109348,28414],{},"是否先 ",[139,109345,109346],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[139,109349,109350],{},"renderer.render()",[99,109352,109353],{},"物体是否已经掉出视野。",[113,109355,109356],{"id":109356},"远程服务器没有显示器",[14,109358,109359],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[133,109361,109362],{"className":23851,"code":109202,"language":23853,"meta":31,"style":31},[139,109363,109364],{"__ignoreMap":31},[142,109365,109366,109368,109370,109372,109374],{"class":144,"line":145},[142,109367,107823],{"class":152},[142,109369,198],{"class":148},[142,109371,107813],{"class":257},[142,109373,109215],{"class":1991},[142,109375,108634],{"class":257},[14,109377,109378],{},"如果 EGL 不可用，再尝试：",[133,109380,109381],{"className":23851,"code":109222,"language":23853,"meta":31,"style":31},[139,109382,109383],{"__ignoreMap":31},[142,109384,109385,109387,109389,109391,109393],{"class":144,"line":145},[142,109386,107823],{"class":152},[142,109388,198],{"class":148},[142,109390,107817],{"class":257},[142,109392,109215],{"class":1991},[142,109394,108634],{"class":257},[84,109396,102616],{"id":102615},[14,109398,109399],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[96,109401,109402,109405,109408],{},[99,109403,109404],{},"先用 viewer 看模型和控制是否正常。",[99,109406,109407],{},"再用 renderer 保存图片或构造视觉观测。",[99,109409,109410],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5155,109412,109413],{},"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":31,"searchDepth":64,"depth":64,"links":109415},[109416,109417,109418,109423,109428,109429,109430,109437],{"id":100655,"depth":64,"text":100656},{"id":100778,"depth":64,"text":100779},{"id":101053,"depth":64,"text":101054,"children":109419},[109420,109421,109422],{"id":107920,"depth":1208,"text":107921},{"id":107950,"depth":1208,"text":107951},{"id":107985,"depth":1208,"text":107986},{"id":101261,"depth":64,"text":101262,"children":109424},[109425,109426,109427],{"id":101581,"depth":1208,"text":101581},{"id":108730,"depth":1208,"text":108731},{"id":108908,"depth":1208,"text":108909},{"id":102324,"depth":64,"text":102325},{"id":102356,"depth":64,"text":102357},{"id":102461,"depth":64,"text":102462,"children":109431},[109432,109433,109434,109435,109436],{"id":109272,"depth":1208,"text":109273},{"id":109309,"depth":1208,"text":109312},{"id":109318,"depth":1208,"text":109319},{"id":109330,"depth":1208,"text":109330},{"id":109356,"depth":1208,"text":109356},{"id":102615,"depth":64,"text":102616},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107528,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109444,"title":109445,"body":109446,"description":31,"extension":67,"meta":111357,"navigation":69,"path":111358,"seo":111359,"stem":111360,"__hash__":111361},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109447,"toc":111333},[109448,109451,109453,109456,109458,109477,109480,109486,109489,109491,109493,109517,109519,109533,109535,109576,109578,109589,109591,109594,109600,109603,109637,109640,109672,109675,109707,109711,109714,109754,109757,109763,109766,109772,109776,109779,109785,109788,109792,109795,109835,109837,109850,109853,109855,110437,110439,110451,110454,110465,110467,110470,110489,110501,110504,110525,110528,110531,110574,110577,110580,110600,110607,110609,110627,110642,110645,110651,110654,110660,110677,110684,110715,110726,110760,110771,110788,110797,110805,110810,110824,110827,110848,110854,110868,110873,110903,110913,110938,110946,110969,110972,110988,110991,110999,111005,111027,111040,111061,111070,111109,111120,111122,111125,111131,111134,111137,111143,111146,111166,111169,111171,111210,111212,111215,111223,111226,111229,111256,111259,111269,111275,111278,111284,111286,111292,111296,111299,111301,111304,111328,111331],[10,109449,109445],{"id":109450},"_6控制任务cartpole",[84,109452,100656],{"id":100655},[14,109454,109455],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109457,104340],{},[96,109459,109460,109463,109465,109468,109471,109474],{},[99,109461,109462],{},"slide joint",[99,109464,106193],{},[99,109466,109467],{},"cart force actuator",[99,109469,109470],{},"状态观测",[99,109472,109473],{},"简单控制循环",[99,109475,109476],{},"reward 设计雏形",[14,109478,109479],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[133,109481,109484],{"className":109482,"code":109483,"language":5216,"meta":31},[5214],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[139,109485,109483],{"__ignoreMap":31},[14,109487,109488],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[84,109490,100779],{"id":100778},[14,109492,100782],{},[133,109494,109495],{"className":23851,"code":104397,"language":23853,"meta":31,"style":31},[139,109496,109497],{"__ignoreMap":31},[142,109498,109499,109501,109503,109505,109507,109509,109511,109513,109515],{"class":144,"line":145},[142,109500,24606],{"class":1991},[142,109502,26344],{"class":257},[142,109504,23863],{"class":257},[142,109506,26429],{"class":201},[142,109508,104412],{"class":257},[142,109510,100807],{"class":257},[142,109512,102510],{"class":257},[142,109514,100823],{"class":257},[142,109516,104421],{"class":257},[14,109518,102828],{},[133,109520,109521],{"className":23851,"code":100928,"language":23853,"meta":31,"style":31},[139,109522,109523],{"__ignoreMap":31},[142,109524,109525,109527,109529,109531],{"class":144,"line":145},[142,109526,23860],{"class":1991},[142,109528,23863],{"class":257},[142,109530,100939],{"class":257},[142,109532,100942],{"class":257},[14,109534,102845],{},[133,109536,109538],{"className":23851,"code":109537,"language":23853,"meta":31,"style":31},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[139,109539,109540,109557,109566],{"__ignoreMap":31},[142,109541,109542,109544,109546,109548,109551,109553,109555],{"class":144,"line":145},[142,109543,30359],{"class":1991},[142,109545,29205],{"class":257},[142,109547,25144],{"class":201},[142,109549,109550],{"class":257}," mujoco-cartpole",[142,109552,100984],{"class":257},[142,109554,100987],{"class":201},[142,109556,100990],{"class":201},[142,109558,109559,109561,109563],{"class":144,"line":64},[142,109560,30359],{"class":1991},[142,109562,100997],{"class":257},[142,109564,109565],{"class":257}," mujoco-cartpole\n",[142,109567,109568,109570,109572,109574],{"class":144,"line":1208},[142,109569,23860],{"class":1991},[142,109571,23863],{"class":257},[142,109573,100939],{"class":257},[142,109575,100942],{"class":257},[14,109577,101013],{},[96,109579,109580,109583,109586],{},[99,109581,109582],{},"本章不依赖 Gymnasium。",[99,109584,109585],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[99,109587,109588],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[84,109590,101054],{"id":101053},[14,109592,109593],{},"Cartpole 的模型结构:",[133,109595,109598],{"className":109596,"code":109597,"language":5216,"meta":31},[5214],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[139,109599,109597],{"__ignoreMap":31},[14,109601,109602],{},"小车通过 slide joint 左右移动:",[133,109604,109606],{"className":53096,"code":109605,"language":53098,"meta":31,"style":31},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[139,109607,109608],{"__ignoreMap":31},[142,109609,109610,109612,109614,109616,109618,109621,109623,109625,109628,109630,109632,109635],{"class":144,"line":145},[142,109611,1063],{"class":152},[142,109613,102965],{"class":51329},[142,109615,14949],{"class":1991},[142,109617,198],{"class":152},[142,109619,109620],{"class":257},"\"cart_x\"",[142,109622,53853],{"class":1991},[142,109624,198],{"class":152},[142,109626,109627],{"class":257},"\"slide\"",[142,109629,106037],{"class":1991},[142,109631,198],{"class":152},[142,109633,109634],{"class":257},"\"1 0 0\"",[142,109636,101153],{"class":152},[14,109638,109639],{},"杆子通过 hinge joint 旋转:",[133,109641,109643],{"className":53096,"code":109642,"language":53098,"meta":31,"style":31},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[139,109644,109645],{"__ignoreMap":31},[142,109646,109647,109649,109651,109653,109655,109658,109660,109662,109664,109666,109668,109670],{"class":144,"line":145},[142,109648,1063],{"class":152},[142,109650,102965],{"class":51329},[142,109652,14949],{"class":1991},[142,109654,198],{"class":152},[142,109656,109657],{"class":257},"\"pole_hinge\"",[142,109659,53853],{"class":1991},[142,109661,198],{"class":152},[142,109663,106028],{"class":257},[142,109665,106037],{"class":1991},[142,109667,198],{"class":152},[142,109669,106042],{"class":257},[142,109671,101153],{"class":152},[14,109673,109674],{},"控制力作用在小车 slide joint 上:",[133,109676,109678],{"className":53096,"code":109677,"language":53098,"meta":31,"style":31},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[139,109679,109680],{"__ignoreMap":31},[142,109681,109682,109684,109686,109688,109690,109693,109695,109697,109699,109701,109703,109705],{"class":144,"line":145},[142,109683,1063],{"class":152},[142,109685,106083],{"class":51329},[142,109687,14949],{"class":1991},[142,109689,198],{"class":152},[142,109691,109692],{"class":257},"\"cart_motor\"",[142,109694,106093],{"class":1991},[142,109696,198],{"class":152},[142,109698,109620],{"class":257},[142,109700,106100],{"class":1991},[142,109702,198],{"class":152},[142,109704,54345],{"class":257},[142,109706,101153],{"class":152},[113,109708,109710],{"id":109709},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109712,109713],{},"这个简化模型有两个关节：",[290,109715,109716,109727],{},[293,109717,109718],{},[296,109719,109720,109722,109724],{},[299,109721,102768],{"align":23765},[299,109723,23766],{"align":23765},[299,109725,109726],{"align":23765},"对应状态",[337,109728,109729,109742],{},[296,109730,109731,109736,109739],{},[342,109732,109733],{"align":23765},[139,109734,109735],{},"cart_x",[342,109737,109738],{"align":23765},"slide",[342,109740,109741],{"align":23765},"小车 x 位置",[296,109743,109744,109749,109751],{},[342,109745,109746],{"align":23765},[139,109747,109748],{},"pole_hinge",[342,109750,105849],{"align":23765},[342,109752,109753],{"align":23765},"杆子角度",[14,109755,109756],{},"所以：",[133,109758,109761],{"className":109759,"code":109760,"language":5216,"meta":31},[5214],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[139,109762,109760],{"__ignoreMap":31},[14,109764,109765],{},"把它们拼起来就是观测：",[133,109767,109770],{"className":109768,"code":109769,"language":5216,"meta":31},[5214],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[139,109771,109769],{"__ignoreMap":31},[113,109773,109775],{"id":109774},"action-是什么","action 是什么",[14,109777,109778],{},"本章只有一个 actuator：",[133,109780,109783],{"className":109781,"code":109782,"language":5216,"meta":31},[5214],"data.ctrl[0] = action\n",[139,109784,109782],{"__ignoreMap":31},[14,109786,109787],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[113,109789,109791],{"id":109790},"reward-是什么","reward 是什么",[14,109793,109794],{},"奖励函数：",[133,109796,109798],{"className":30407,"code":109797,"language":30409,"meta":31,"style":31},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[139,109799,109800],{"__ignoreMap":31},[142,109801,109802,109804,109807,109809,109811,109813,109816,109818,109821,109823,109825,109827,109830,109832],{"class":144,"line":145},[142,109803,17075],{"class":148},[142,109805,109806],{"class":201}," float",[142,109808,153],{"class":152},[142,109810,102412],{"class":201},[142,109812,52300],{"class":148},[142,109814,109815],{"class":201}," 0.1",[142,109817,6547],{"class":148},[142,109819,109820],{"class":152}," cart_x ",[142,109822,608],{"class":148},[142,109824,109820],{"class":152},[142,109826,685],{"class":148},[142,109828,109829],{"class":152}," pole_angle ",[142,109831,608],{"class":148},[142,109833,109834],{"class":152}," pole_angle)\n",[14,109836,106235],{},[96,109838,109839,109844,109847],{},[99,109840,109841,109842,28414],{},"基础奖励是 ",[139,109843,102412],{},[99,109845,109846],{},"小车离中心越远，扣分越多。",[99,109848,109849],{},"杆子角度越大，扣分越多。",[14,109851,109852],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[84,109854,101262],{"id":101261},[133,109856,109858],{"className":30407,"code":109857,"language":30409,"meta":31,"style":31},"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",[139,109859,109860,109866,109876,109880,109884,109892,109897,109901,109905,109909,109914,109918,109923,109928,109933,109937,109942,109947,109952,109956,109960,109964,109968,109972,109977,109981,109985,109989,109993,109997,110007,110014,110018,110022,110036,110050,110063,110093,110097,110101,110113,110125,110133,110137,110150,110154,110158,110167,110171,110187,110197,110210,110223,110227,110250,110268,110272,110284,110288,110292,110302,110312,110316,110332,110373,110377,110397,110413,110417,110421,110433],{"__ignoreMap":31},[142,109861,109862,109864],{"class":144,"line":145},[142,109863,30421],{"class":148},[142,109865,101310],{"class":152},[142,109867,109868,109870,109872,109874],{"class":144,"line":64},[142,109869,30421],{"class":148},[142,109871,31409],{"class":152},[142,109873,31412],{"class":148},[142,109875,31415],{"class":152},[142,109877,109878],{"class":144,"line":1208},[142,109879,2428],{"emptyLinePlaceholder":69},[142,109881,109882],{"class":144,"line":1223},[142,109883,2428],{"emptyLinePlaceholder":69},[142,109885,109886,109888,109890],{"class":144,"line":1229},[142,109887,101323],{"class":201},[142,109889,13593],{"class":148},[142,109891,101328],{"class":257},[142,109893,109894],{"class":144,"line":1243},[142,109895,109896],{"class":257},"\u003Cmujoco model=\"cartpole\">\n",[142,109898,109899],{"class":144,"line":1249},[142,109900,101338],{"class":257},[142,109902,109903],{"class":144,"line":1340},[142,109904,2428],{"emptyLinePlaceholder":69},[142,109906,109907],{"class":144,"line":1346},[142,109908,101347],{"class":257},[142,109910,109911],{"class":144,"line":1358},[142,109912,109913],{"class":257},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[142,109915,109916],{"class":144,"line":1640},[142,109917,2428],{"emptyLinePlaceholder":69},[142,109919,109920],{"class":144,"line":1645},[142,109921,109922],{"class":257},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[142,109924,109925],{"class":144,"line":1651},[142,109926,109927],{"class":257},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[142,109929,109930],{"class":144,"line":1656},[142,109931,109932],{"class":257},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[142,109934,109935],{"class":144,"line":1670},[142,109936,2428],{"emptyLinePlaceholder":69},[142,109938,109939],{"class":144,"line":1675},[142,109940,109941],{"class":257},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[142,109943,109944],{"class":144,"line":1681},[142,109945,109946],{"class":257},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[142,109948,109949],{"class":144,"line":1702},[142,109950,109951],{"class":257},"        \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",[142,109953,109954],{"class":144,"line":1707},[142,109955,106447],{"class":257},[142,109957,109958],{"class":144,"line":1721},[142,109959,101376],{"class":257},[142,109961,109962],{"class":144,"line":1726},[142,109963,101381],{"class":257},[142,109965,109966],{"class":144,"line":1755},[142,109967,2428],{"emptyLinePlaceholder":69},[142,109969,109970],{"class":144,"line":1760},[142,109971,106464],{"class":257},[142,109973,109974],{"class":144,"line":1777},[142,109975,109976],{"class":257},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[142,109978,109979],{"class":144,"line":1782},[142,109980,106474],{"class":257},[142,109982,109983],{"class":144,"line":1787},[142,109984,101386],{"class":257},[142,109986,109987],{"class":144,"line":1792},[142,109988,95707],{"class":257},[142,109990,109991],{"class":144,"line":1806},[142,109992,2428],{"emptyLinePlaceholder":69},[142,109994,109995],{"class":144,"line":1811},[142,109996,2428],{"emptyLinePlaceholder":69},[142,109998,109999,110001,110004],{"class":144,"line":2605},[142,110000,31976],{"class":148},[142,110002,110003],{"class":1991}," get_observation",[142,110005,110006],{"class":152},"(data: mujoco.MjData) -> np.ndarray:\n",[142,110008,110009,110011],{"class":144,"line":2619},[142,110010,4118],{"class":148},[142,110012,110013],{"class":152}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[142,110015,110016],{"class":144,"line":2627},[142,110017,2428],{"emptyLinePlaceholder":69},[142,110019,110020],{"class":144,"line":2632},[142,110021,2428],{"emptyLinePlaceholder":69},[142,110023,110024,110026,110029,110032,110034],{"class":144,"line":2638},[142,110025,31976],{"class":148},[142,110027,110028],{"class":1991}," compute_reward",[142,110030,110031],{"class":152},"(obs: np.ndarray) -> ",[142,110033,192],{"class":201},[142,110035,3767],{"class":152},[142,110037,110038,110041,110043,110046,110048],{"class":144,"line":2644},[142,110039,110040],{"class":152},"    cart_x ",[142,110042,198],{"class":148},[142,110044,110045],{"class":152}," obs[",[142,110047,344],{"class":201},[142,110049,33275],{"class":152},[142,110051,110052,110055,110057,110059,110061],{"class":144,"line":2649},[142,110053,110054],{"class":152},"    pole_angle ",[142,110056,198],{"class":148},[142,110058,110045],{"class":152},[142,110060,370],{"class":201},[142,110062,33275],{"class":152},[142,110064,110065,110067,110069,110071,110073,110075,110077,110079,110081,110083,110085,110087,110089,110091],{"class":144,"line":7977},[142,110066,4118],{"class":148},[142,110068,109806],{"class":201},[142,110070,153],{"class":152},[142,110072,102412],{"class":201},[142,110074,52300],{"class":148},[142,110076,109815],{"class":201},[142,110078,6547],{"class":148},[142,110080,109820],{"class":152},[142,110082,608],{"class":148},[142,110084,109820],{"class":152},[142,110086,685],{"class":148},[142,110088,109829],{"class":152},[142,110090,608],{"class":148},[142,110092,109834],{"class":152},[142,110094,110095],{"class":144,"line":8001},[142,110096,2428],{"emptyLinePlaceholder":69},[142,110098,110099],{"class":144,"line":8006},[142,110100,2428],{"emptyLinePlaceholder":69},[142,110102,110103,110105,110107,110109,110111],{"class":144,"line":8012},[142,110104,31976],{"class":148},[142,110106,2001],{"class":1991},[142,110108,101407],{"class":152},[142,110110,95695],{"class":201},[142,110112,3767],{"class":152},[142,110114,110115,110117,110119,110121,110123],{"class":144,"line":8039},[142,110116,101416],{"class":152},[142,110118,198],{"class":148},[142,110120,101421],{"class":152},[142,110122,101323],{"class":201},[142,110124,159],{"class":152},[142,110126,110127,110129,110131],{"class":144,"line":8044},[142,110128,101430],{"class":152},[142,110130,198],{"class":148},[142,110132,101435],{"class":152},[142,110134,110135],{"class":144,"line":8050},[142,110136,2428],{"emptyLinePlaceholder":69},[142,110138,110139,110141,110143,110145,110147],{"class":144,"line":8062},[142,110140,105078],{"class":152},[142,110142,370],{"class":201},[142,110144,4471],{"class":152},[142,110146,198],{"class":148},[142,110148,110149],{"class":201}," 0.1\n",[142,110151,110152],{"class":144,"line":8074},[142,110153,105091],{"class":152},[142,110155,110156],{"class":144,"line":8086},[142,110157,2428],{"emptyLinePlaceholder":69},[142,110159,110160,110163,110165],{"class":144,"line":9745},[142,110161,110162],{"class":152},"    total_reward ",[142,110164,198],{"class":148},[142,110166,104770],{"class":201},[142,110168,110169],{"class":144,"line":9770},[142,110170,2428],{"emptyLinePlaceholder":69},[142,110172,110173,110175,110177,110179,110181,110183,110185],{"class":144,"line":9793},[142,110174,3229],{"class":148},[142,110176,31645],{"class":152},[142,110178,26072],{"class":148},[142,110180,32472],{"class":201},[142,110182,153],{"class":152},[142,110184,6439],{"class":201},[142,110186,30815],{"class":152},[142,110188,110189,110192,110194],{"class":144,"line":9817},[142,110190,110191],{"class":152},"        obs ",[142,110193,198],{"class":148},[142,110195,110196],{"class":152}," get_observation(data)\n",[142,110198,110199,110202,110204,110206,110208],{"class":144,"line":9822},[142,110200,110201],{"class":152},"        pole_angle ",[142,110203,198],{"class":148},[142,110205,110045],{"class":152},[142,110207,370],{"class":201},[142,110209,33275],{"class":152},[142,110211,110212,110215,110217,110219,110221],{"class":144,"line":9827},[142,110213,110214],{"class":152},"        pole_angular_velocity ",[142,110216,198],{"class":148},[142,110218,110045],{"class":152},[142,110220,224],{"class":201},[142,110222,33275],{"class":152},[142,110224,110225],{"class":144,"line":9832},[142,110226,2428],{"emptyLinePlaceholder":69},[142,110228,110229,110232,110234,110237,110239,110241,110243,110245,110247],{"class":144,"line":9841},[142,110230,110231],{"class":152},"        action ",[142,110233,198],{"class":148},[142,110235,110236],{"class":201}," 2.0",[142,110238,6547],{"class":148},[142,110240,109829],{"class":152},[142,110242,634],{"class":148},[142,110244,61896],{"class":201},[142,110246,6547],{"class":148},[142,110248,110249],{"class":152}," pole_angular_velocity\n",[142,110251,110252,110254,110256,110258,110260,110262,110264,110266],{"class":144,"line":9846},[142,110253,110231],{"class":152},[142,110255,198],{"class":148},[142,110257,107456],{"class":152},[142,110259,685],{"class":148},[142,110261,102412],{"class":201},[142,110263,12464],{"class":152},[142,110265,102412],{"class":201},[142,110267,159],{"class":152},[142,110269,110270],{"class":144,"line":9852},[142,110271,2428],{"emptyLinePlaceholder":69},[142,110273,110274,110276,110278,110280,110282],{"class":144,"line":9873},[142,110275,106626],{"class":152},[142,110277,344],{"class":201},[142,110279,4471],{"class":152},[142,110281,198],{"class":148},[142,110283,107479],{"class":152},[142,110285,110286],{"class":144,"line":9879},[142,110287,101525],{"class":152},[142,110289,110290],{"class":144,"line":9893},[142,110291,2428],{"emptyLinePlaceholder":69},[142,110293,110294,110297,110299],{"class":144,"line":9899},[142,110295,110296],{"class":152},"        reward ",[142,110298,198],{"class":148},[142,110300,110301],{"class":152}," compute_reward(get_observation(data))\n",[142,110303,110304,110307,110309],{"class":144,"line":9926},[142,110305,110306],{"class":152},"        total_reward ",[142,110308,9506],{"class":148},[142,110310,110311],{"class":152}," reward\n",[142,110313,110314],{"class":144,"line":9935},[142,110315,2428],{"emptyLinePlaceholder":69},[142,110317,110318,110320,110322,110324,110326,110328,110330],{"class":144,"line":9941},[142,110319,2525],{"class":148},[142,110321,31645],{"class":152},[142,110323,481],{"class":148},[142,110325,5783],{"class":201},[142,110327,101568],{"class":148},[142,110329,4121],{"class":201},[142,110331,3767],{"class":152},[142,110333,110334,110336,110338,110341,110344,110347,110350,110352,110355,110358,110360,110362,110364,110366,110369,110371],{"class":144,"line":9949},[142,110335,34679],{"class":201},[142,110337,153],{"class":152},[142,110339,110340],{"class":257},"\"step:\"",[142,110342,110343],{"class":152},", step, ",[142,110345,110346],{"class":257},"\"obs:\"",[142,110348,110349],{"class":152},", np.round(obs, ",[142,110351,224],{"class":201},[142,110353,110354],{"class":152},"), ",[142,110356,110357],{"class":257},"\"action:\"",[142,110359,12464],{"class":152},[142,110361,32047],{"class":201},[142,110363,153],{"class":152},[142,110365,192],{"class":201},[142,110367,110368],{"class":152},"(action), ",[142,110370,224],{"class":201},[142,110372,30526],{"class":152},[142,110374,110375],{"class":144,"line":9954},[142,110376,2428],{"emptyLinePlaceholder":69},[142,110378,110379,110381,110383,110386,110388,110390,110393,110395],{"class":144,"line":16633},[142,110380,31328],{"class":201},[142,110382,153],{"class":152},[142,110384,110385],{"class":257},"\"total_reward:\"",[142,110387,12464],{"class":152},[142,110389,32047],{"class":201},[142,110391,110392],{"class":152},"(total_reward, ",[142,110394,224],{"class":201},[142,110396,30526],{"class":152},[142,110398,110399,110401,110403,110406,110409,110411],{"class":144,"line":16639},[142,110400,31328],{"class":201},[142,110402,153],{"class":152},[142,110404,110405],{"class":257},"\"final obs:\"",[142,110407,110408],{"class":152},", np.round(get_observation(data), ",[142,110410,224],{"class":201},[142,110412,30526],{"class":152},[142,110414,110415],{"class":144,"line":16662},[142,110416,2428],{"emptyLinePlaceholder":69},[142,110418,110419],{"class":144,"line":16668},[142,110420,2428],{"emptyLinePlaceholder":69},[142,110422,110423,110425,110427,110429,110431],{"class":144,"line":16691},[142,110424,1559],{"class":148},[142,110426,31249],{"class":201},[142,110428,101568],{"class":148},[142,110430,101571],{"class":257},[142,110432,3767],{"class":152},[142,110434,110435],{"class":144,"line":16705},[142,110436,101578],{"class":152},[14,110438,103579],{},[133,110440,110442],{"className":23851,"code":110441,"language":23853,"meta":31,"style":31},"touch ch6_cartpole.py\n",[139,110443,110444],{"__ignoreMap":31},[142,110445,110446,110448],{"class":144,"line":145},[142,110447,101292],{"class":1991},[142,110449,110450],{"class":257}," ch6_cartpole.py\n",[14,110452,110453],{},"运行：",[133,110455,110457],{"className":23851,"code":110456,"language":23853,"meta":31,"style":31},"python ch6_cartpole.py\n",[139,110458,110459],{"__ignoreMap":31},[142,110460,110461,110463],{"class":144,"line":145},[142,110462,30409],{"class":1991},[142,110464,110450],{"class":257},[113,110466,101581],{"id":101581},[14,110468,110469],{},"构造观测：",[133,110471,110473],{"className":30407,"code":110472,"language":30409,"meta":31,"style":31},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[139,110474,110475,110483],{"__ignoreMap":31},[142,110476,110477,110479,110481],{"class":144,"line":145},[142,110478,31976],{"class":148},[142,110480,110003],{"class":1991},[142,110482,110006],{"class":152},[142,110484,110485,110487],{"class":144,"line":64},[142,110486,4118],{"class":148},[142,110488,110013],{"class":152},[14,110490,110491,110494,110495,110497,110498,110500],{},[139,110492,110493],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[139,110496,104039],{}," 2 维，",[139,110499,104369],{}," 2 维，所以 obs 是 4 维。",[14,110502,110503],{},"设置初始角度：",[133,110505,110507],{"className":30407,"code":110506,"language":30409,"meta":31,"style":31},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[139,110508,110509,110521],{"__ignoreMap":31},[142,110510,110511,110513,110515,110517,110519],{"class":144,"line":145},[142,110512,104708],{"class":152},[142,110514,370],{"class":201},[142,110516,4471],{"class":152},[142,110518,198],{"class":148},[142,110520,110149],{"class":201},[142,110522,110523],{"class":144,"line":64},[142,110524,104552],{"class":152},[14,110526,110527],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110529,110530],{},"简单反馈控制：",[133,110532,110534],{"className":30407,"code":110533,"language":30409,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[139,110535,110536,110556],{"__ignoreMap":31},[142,110537,110538,110540,110542,110544,110546,110548,110550,110552,110554],{"class":144,"line":145},[142,110539,107451],{"class":152},[142,110541,198],{"class":148},[142,110543,110236],{"class":201},[142,110545,6547],{"class":148},[142,110547,109829],{"class":152},[142,110549,634],{"class":148},[142,110551,61896],{"class":201},[142,110553,6547],{"class":148},[142,110555,110249],{"class":152},[142,110557,110558,110560,110562,110564,110566,110568,110570,110572],{"class":144,"line":64},[142,110559,107451],{"class":152},[142,110561,198],{"class":148},[142,110563,107456],{"class":152},[142,110565,685],{"class":148},[142,110567,102412],{"class":201},[142,110569,12464],{"class":152},[142,110571,102412],{"class":201},[142,110573,159],{"class":152},[14,110575,110576],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110578,110579],{},"限制动作：",[133,110581,110583],{"className":30407,"code":110582,"language":30409,"meta":31,"style":31},"np.clip(action, -1.0, 1.0)\n",[139,110584,110585],{"__ignoreMap":31},[142,110586,110587,110590,110592,110594,110596,110598],{"class":144,"line":145},[142,110588,110589],{"class":152},"np.clip(action, ",[142,110591,685],{"class":148},[142,110593,102412],{"class":201},[142,110595,12464],{"class":152},[142,110597,102412],{"class":201},[142,110599,159],{"class":152},[14,110601,110602,110603,110606],{},"因为 XML 里 ",[139,110604,110605],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[113,110608,101717],{"id":101717},[133,110610,110611],{"className":30407,"code":110472,"language":30409,"meta":31,"style":31},[139,110612,110613,110621],{"__ignoreMap":31},[142,110614,110615,110617,110619],{"class":144,"line":145},[142,110616,31976],{"class":148},[142,110618,110003],{"class":1991},[142,110620,110006],{"class":152},[142,110622,110623,110625],{"class":144,"line":64},[142,110624,4118],{"class":148},[142,110626,110013],{"class":152},[14,110628,110629,110630,110633,110634,110637,110638,110641],{},"这段定义了一个函数，用来获取当前观测。",[139,110631,110632],{},"data.qpos.copy()"," 是位置数组副本，",[139,110635,110636],{},"data.qvel.copy()"," 是速度数组副本。",[139,110639,110640],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110643,110644],{},"在本章模型里：",[133,110646,110649],{"className":110647,"code":110648,"language":5216,"meta":31},[5214],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[139,110650,110648],{"__ignoreMap":31},[14,110652,110653],{},"所以返回的 obs 是：",[133,110655,110658],{"className":110656,"code":110657,"language":5216,"meta":31},[5214],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[139,110659,110657],{"__ignoreMap":31},[133,110661,110663],{"className":30407,"code":110662,"language":30409,"meta":31,"style":31},"def compute_reward(obs: np.ndarray) -> float:\n",[139,110664,110665],{"__ignoreMap":31},[142,110666,110667,110669,110671,110673,110675],{"class":144,"line":145},[142,110668,31976],{"class":148},[142,110670,110028],{"class":1991},[142,110672,110031],{"class":152},[142,110674,192],{"class":201},[142,110676,3767],{"class":152},[14,110678,110679,110680,110683],{},"这行定义奖励函数。输入是观测 ",[139,110681,110682],{},"obs","，输出是一个浮点数奖励。",[133,110685,110687],{"className":30407,"code":110686,"language":30409,"meta":31,"style":31},"cart_x = obs[0]\npole_angle = obs[1]\n",[139,110688,110689,110702],{"__ignoreMap":31},[142,110690,110691,110694,110696,110698,110700],{"class":144,"line":145},[142,110692,110693],{"class":152},"cart_x ",[142,110695,198],{"class":148},[142,110697,110045],{"class":152},[142,110699,344],{"class":201},[142,110701,33275],{"class":152},[142,110703,110704,110707,110709,110711,110713],{"class":144,"line":64},[142,110705,110706],{"class":152},"pole_angle ",[142,110708,198],{"class":148},[142,110710,110045],{"class":152},[142,110712,370],{"class":201},[142,110714,33275],{"class":152},[14,110716,110717,110718,110721,110722,110725],{},"数组索引从 0 开始。",[139,110719,110720],{},"obs[0]"," 是第一个元素，也就是小车位置。",[139,110723,110724],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[133,110727,110728],{"className":30407,"code":109797,"language":30409,"meta":31,"style":31},[139,110729,110730],{"__ignoreMap":31},[142,110731,110732,110734,110736,110738,110740,110742,110744,110746,110748,110750,110752,110754,110756,110758],{"class":144,"line":145},[142,110733,17075],{"class":148},[142,110735,109806],{"class":201},[142,110737,153],{"class":152},[142,110739,102412],{"class":201},[142,110741,52300],{"class":148},[142,110743,109815],{"class":201},[142,110745,6547],{"class":148},[142,110747,109820],{"class":152},[142,110749,608],{"class":148},[142,110751,109820],{"class":152},[142,110753,685],{"class":148},[142,110755,109829],{"class":152},[142,110757,608],{"class":148},[142,110759,109834],{"class":152},[14,110761,110762,110763,110766,110767,110770],{},"这行计算奖励。",[139,110764,110765],{},"cart_x * cart_x"," 是小车位置的平方，",[139,110768,110769],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[133,110772,110774],{"className":30407,"code":110773,"language":30409,"meta":31,"style":31},"data.qpos[1] = 0.1\n",[139,110775,110776],{"__ignoreMap":31},[142,110777,110778,110780,110782,110784,110786],{"class":144,"line":145},[142,110779,104708],{"class":152},[142,110781,370],{"class":201},[142,110783,4471],{"class":152},[142,110785,198],{"class":148},[142,110787,110149],{"class":201},[14,110789,110790,110791,110793,110794,110796],{},"手动设置杆子的初始角度。因为 ",[139,110792,105465],{}," 是小车位置，",[139,110795,105468],{}," 是杆子角度，所以这里改的是杆子。",[133,110798,110799],{"className":30407,"code":104552,"language":30409,"meta":31,"style":31},[139,110800,110801],{"__ignoreMap":31},[142,110802,110803],{"class":144,"line":145},[142,110804,104552],{"class":152},[14,110806,105511,110807,110809],{},[139,110808,104039],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[133,110811,110813],{"className":30407,"code":110812,"language":30409,"meta":31,"style":31},"total_reward = 0.0\n",[139,110814,110815],{"__ignoreMap":31},[142,110816,110817,110820,110822],{"class":144,"line":145},[142,110818,110819],{"class":152},"total_reward ",[142,110821,198],{"class":148},[142,110823,104770],{"class":201},[14,110825,110826],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[133,110828,110830],{"className":30407,"code":110829,"language":30409,"meta":31,"style":31},"for step in range(1000):\n",[139,110831,110832],{"__ignoreMap":31},[142,110833,110834,110836,110838,110840,110842,110844,110846],{"class":144,"line":145},[142,110835,3053],{"class":148},[142,110837,31645],{"class":152},[142,110839,26072],{"class":148},[142,110841,32472],{"class":201},[142,110843,153],{"class":152},[142,110845,6439],{"class":201},[142,110847,30815],{"class":152},[14,110849,110850,110851,110853],{},"循环 1000 步。",[139,110852,107143],{}," 是当前步数，从 0 到 999。",[133,110855,110857],{"className":30407,"code":110856,"language":30409,"meta":31,"style":31},"obs = get_observation(data)\n",[139,110858,110859],{"__ignoreMap":31},[142,110860,110861,110864,110866],{"class":144,"line":145},[142,110862,110863],{"class":152},"obs ",[142,110865,198],{"class":148},[142,110867,110196],{"class":152},[14,110869,110870,110871,28414],{},"读取当前状态，保存到 ",[139,110872,110682],{},[133,110874,110876],{"className":30407,"code":110875,"language":30409,"meta":31,"style":31},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[139,110877,110878,110890],{"__ignoreMap":31},[142,110879,110880,110882,110884,110886,110888],{"class":144,"line":145},[142,110881,110706],{"class":152},[142,110883,198],{"class":148},[142,110885,110045],{"class":152},[142,110887,370],{"class":201},[142,110889,33275],{"class":152},[142,110891,110892,110895,110897,110899,110901],{"class":144,"line":64},[142,110893,110894],{"class":152},"pole_angular_velocity ",[142,110896,198],{"class":148},[142,110898,110045],{"class":152},[142,110900,224],{"class":201},[142,110902,33275],{"class":152},[14,110904,110905,110906,110909,110910,28414],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[139,110907,110908],{},"obs[3]","？因为 obs 的顺序是 ",[139,110911,110912],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[133,110914,110916],{"className":30407,"code":110915,"language":30409,"meta":31,"style":31},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[139,110917,110918],{"__ignoreMap":31},[142,110919,110920,110922,110924,110926,110928,110930,110932,110934,110936],{"class":144,"line":145},[142,110921,107451],{"class":152},[142,110923,198],{"class":148},[142,110925,110236],{"class":201},[142,110927,6547],{"class":148},[142,110929,109829],{"class":152},[142,110931,634],{"class":148},[142,110933,61896],{"class":201},[142,110935,6547],{"class":148},[142,110937,110249],{"class":152},[14,110939,110940,110941,101027,110943,110945],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[139,110942,105269],{},[139,110944,35358],{}," 是人为设置的系数，不是固定公式。",[133,110947,110949],{"className":30407,"code":110948,"language":30409,"meta":31,"style":31},"action = np.clip(action, -1.0, 1.0)\n",[139,110950,110951],{"__ignoreMap":31},[142,110952,110953,110955,110957,110959,110961,110963,110965,110967],{"class":144,"line":145},[142,110954,107451],{"class":152},[142,110956,198],{"class":148},[142,110958,107456],{"class":152},[142,110960,685],{"class":148},[142,110962,102412],{"class":201},[142,110964,12464],{"class":152},[142,110966,102412],{"class":201},[142,110968,159],{"class":152},[14,110970,110971],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[133,110973,110974],{"className":30407,"code":109782,"language":30409,"meta":31,"style":31},[139,110975,110976],{"__ignoreMap":31},[142,110977,110978,110980,110982,110984,110986],{"class":144,"line":145},[142,110979,105880],{"class":152},[142,110981,344],{"class":201},[142,110983,4471],{"class":152},[142,110985,198],{"class":148},[142,110987,107479],{"class":152},[14,110989,110990],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[133,110992,110993],{"className":30407,"code":104514,"language":30409,"meta":31,"style":31},[139,110994,110995],{"__ignoreMap":31},[142,110996,110997],{"class":144,"line":145},[142,110998,104514],{"class":152},[14,111000,111001,111002,111004],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[139,111003,106135],{}," 计算小车和杆子的下一刻状态。",[133,111006,111008],{"className":30407,"code":111007,"language":30409,"meta":31,"style":31},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[139,111009,111010,111019],{"__ignoreMap":31},[142,111011,111012,111015,111017],{"class":144,"line":145},[142,111013,111014],{"class":152},"reward ",[142,111016,198],{"class":148},[142,111018,110301],{"class":152},[142,111020,111021,111023,111025],{"class":144,"line":64},[142,111022,110819],{"class":152},[142,111024,9506],{"class":148},[142,111026,110311],{"class":152},[14,111028,111029,111030,111032,111033,111036,111037,28414],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[139,111031,9506],{}," 是简写，",[139,111034,111035],{},"total_reward += reward"," 等价于 ",[139,111038,111039],{},"total_reward = total_reward + reward",[133,111041,111043],{"className":30407,"code":111042,"language":30409,"meta":31,"style":31},"if step % 100 == 0:\n",[139,111044,111045],{"__ignoreMap":31},[142,111046,111047,111049,111051,111053,111055,111057,111059],{"class":144,"line":145},[142,111048,1559],{"class":148},[142,111050,31645],{"class":152},[142,111052,481],{"class":148},[142,111054,5783],{"class":201},[142,111056,101568],{"class":148},[142,111058,4121],{"class":201},[142,111060,3767],{"class":152},[14,111062,111063,111065,111066,111069],{},[139,111064,481],{}," 是取余数。",[139,111067,111068],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[133,111071,111073],{"className":30407,"code":111072,"language":30409,"meta":31,"style":31},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[139,111074,111075],{"__ignoreMap":31},[142,111076,111077,111079,111081,111083,111085,111087,111089,111091,111093,111095,111097,111099,111101,111103,111105,111107],{"class":144,"line":145},[142,111078,30444],{"class":201},[142,111080,153],{"class":152},[142,111082,110340],{"class":257},[142,111084,110343],{"class":152},[142,111086,110346],{"class":257},[142,111088,110349],{"class":152},[142,111090,224],{"class":201},[142,111092,110354],{"class":152},[142,111094,110357],{"class":257},[142,111096,12464],{"class":152},[142,111098,32047],{"class":201},[142,111100,153],{"class":152},[142,111102,192],{"class":201},[142,111104,110368],{"class":152},[142,111106,224],{"class":201},[142,111108,30526],{"class":152},[14,111110,111111,111112,111115,111116,111119],{},"打印当前步数、观测和动作。",[139,111113,111114],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[139,111117,111118],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[84,111121,102325],{"id":102324},[14,111123,111124],{},"观测向量:",[133,111126,111129],{"className":111127,"code":111128,"language":5216,"meta":31},[5214],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[139,111130,111128],{"__ignoreMap":31},[14,111132,111133],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111135,111136],{},"每隔 100 步会打印一次：",[133,111138,111141],{"className":111139,"code":111140,"language":5216,"meta":31},[5214],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[139,111142,111140],{"__ignoreMap":31},[14,111144,111145],{},"重点观察：",[96,111147,111148,111154,111159],{},[99,111149,111150,111153],{},[139,111151,111152],{},"pole_angle"," 是否越来越大。",[99,111155,111156,111158],{},[139,111157,109735],{}," 是否跑得太远。",[99,111160,111161,111162,82568,111164,28414],{},"action 是否经常被 clip 到 ",[139,111163,103924],{},[139,111165,370],{},[14,111167,111168],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[84,111170,102357],{"id":102356},[96,111172,111173,111179,111182,111188,111198,111204,111207],{},[99,111174,111175,111176,28414],{},"把初始角度改为 ",[139,111177,111178],{},"data.qpos[1] = 0.3",[99,111180,111181],{},"重新运行，观察控制是否变差。",[99,111183,111184,111185,111187],{},"把 actuator ",[139,111186,107076],{}," 改小。",[99,111189,111190,111191,111194,111195,28414],{},"打印 ",[139,111192,111193],{},"model.nq, model.nv, model.nu","，应为 ",[139,111196,111197],{},"2 2 1",[99,111199,111200,111201,111203],{},"把 reward 里的 ",[139,111202,110769],{}," 系数改大，观察总奖励变化。",[99,111205,111206],{},"把控制器改成反号，观察杆子是否更容易倒。",[99,111208,111209],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[84,111211,102462],{"id":102461},[113,111213,111214],{"id":111214},"杆子方向和预期不一致",[14,111216,102405,111217,111219,111220,111222],{},[139,111218,106248],{}," 和 capsule 的 ",[139,111221,103185],{},"，必要时用 viewer 可视化确认。",[113,111224,111225],{"id":111225},"控制器越控越倒",[14,111227,111228],{},"说明反馈符号可能反了，尝试:",[133,111230,111232],{"className":30407,"code":111231,"language":30409,"meta":31,"style":31},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[139,111233,111234],{"__ignoreMap":31},[142,111235,111236,111238,111240,111242,111244,111246,111248,111250,111252,111254],{"class":144,"line":145},[142,111237,107451],{"class":152},[142,111239,198],{"class":148},[142,111241,52300],{"class":148},[142,111243,105269],{"class":201},[142,111245,6547],{"class":148},[142,111247,109829],{"class":152},[142,111249,685],{"class":148},[142,111251,61896],{"class":201},[142,111253,6547],{"class":148},[142,111255,110249],{"class":152},[113,111257,111258],{"id":111258},"小车飞走",[14,111260,111261,111262,111264,111265,111268],{},"降低 ",[139,111263,107076],{}," 或缩小 ",[139,111266,111267],{},"action"," 的 clip 范围。",[113,111270,111272,111274],{"id":111271},"obs3-为什么是杆子角速度",[139,111273,110908],{}," 为什么是杆子角速度",[14,111276,111277],{},"因为这个模型里：",[133,111279,111282],{"className":111280,"code":111281,"language":5216,"meta":31},[5214],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[139,111283,111281],{"__ignoreMap":31},[14,111285,109756],{},[133,111287,111290],{"className":111288,"code":111289,"language":5216,"meta":31},[5214],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[139,111291,111289],{"__ignoreMap":31},[113,111293,111295],{"id":111294},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111297,111298],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[84,111300,102616],{"id":102615},[14,111302,111303],{},"一个控制任务通常包含：",[96,111305,111306,111309,111317,111322,111325],{},[99,111307,111308],{},"模型：Cartpole 的 body、joint、actuator。",[99,111310,111311,111312,365,111314,111316],{},"观测：从 ",[139,111313,104039],{},[139,111315,104369],{}," 里取状态。",[99,111318,111319,111320,28414],{},"动作：写入 ",[139,111321,101085],{},[99,111323,111324],{},"奖励：根据任务目标打分。",[99,111326,111327],{},"循环：obs -> action -> step -> reward。",[14,111329,111330],{},"这就是后面 Gymnasium 环境的基本骨架。",[5155,111332,104295],{},{"title":31,"searchDepth":64,"depth":64,"links":111334},[111335,111336,111337,111342,111346,111347,111348,111356],{"id":100655,"depth":64,"text":100656},{"id":100778,"depth":64,"text":100779},{"id":101053,"depth":64,"text":101054,"children":111338},[111339,111340,111341],{"id":109709,"depth":1208,"text":109710},{"id":109774,"depth":1208,"text":109775},{"id":109790,"depth":1208,"text":109791},{"id":101261,"depth":64,"text":101262,"children":111343},[111344,111345],{"id":101581,"depth":1208,"text":101581},{"id":101717,"depth":1208,"text":101717},{"id":102324,"depth":64,"text":102325},{"id":102356,"depth":64,"text":102357},{"id":102461,"depth":64,"text":102462,"children":111349},[111350,111351,111352,111353,111355],{"id":111214,"depth":1208,"text":111214},{"id":111225,"depth":1208,"text":111225},{"id":111258,"depth":1208,"text":111258},{"id":111271,"depth":1208,"text":111354},"obs[3] 为什么是杆子角速度",{"id":111294,"depth":1208,"text":111295},{"id":102615,"depth":64,"text":102616},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109445,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111363,"title":111364,"body":111365,"description":31,"extension":67,"meta":113379,"navigation":69,"path":113380,"seo":113381,"stem":113382,"__hash__":113383},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111366,"toc":113355},[111367,111370,111372,111375,111377,111394,111397,111400,111406,111409,111411,111413,111437,111439,111453,111455,111496,111498,111516,111518,111521,111527,111530,111558,111562,111568,111593,111596,111627,111634,111637,111640,111646,111649,111655,111658,111664,111668,111671,111696,111699,111701,112461,112463,112475,112477,112488,112490,112493,112510,112513,112515,112526,112529,112531,112577,112580,112593,112596,112678,112681,112683,112699,112709,112722,112725,112764,112774,112785,112795,112808,112811,112840,112843,112853,112856,112862,112879,112890,112892,112898,112915,112926,112947,112950,112962,112965,112986,112989,112997,113005,113022,113025,113094,113101,113109,113112,113125,113132,113134,113137,113143,113146,113149,113155,113161,113163,113203,113205,113211,113220,113223,113225,113245,113248,113251,113257,113261,113263,113290,113293,113296,113323,113329,113332,113335,113337,113340,113343,113349,113352],[10,111368,111364],{"id":111369},"_7控制任务reacher-机械臂到达目标",[84,111371,100656],{"id":100655},[14,111373,111374],{},"本章搭建一个二维两关节 reacher 任务。",[14,111376,104340],{},[96,111378,111379,111382,111385,111388,111391],{},[99,111380,111381],{},"两个 hinge joint",[99,111383,111384],{},"两个 motor actuator",[99,111386,111387],{},"site 作为末端点和目标点",[99,111389,111390],{},"根据末端和目标距离设计 reward",[99,111392,111393],{},"构造机械臂任务的基本形式",[14,111395,111396],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111398,111399],{},"Reacher 任务可以理解为：",[133,111401,111404],{"className":111402,"code":111403,"language":5216,"meta":31},[5214],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[139,111405,111403],{"__ignoreMap":31},[14,111407,111408],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[84,111410,100779],{"id":100778},[14,111412,100782],{},[133,111414,111415],{"className":23851,"code":104397,"language":23853,"meta":31,"style":31},[139,111416,111417],{"__ignoreMap":31},[142,111418,111419,111421,111423,111425,111427,111429,111431,111433,111435],{"class":144,"line":145},[142,111420,24606],{"class":1991},[142,111422,26344],{"class":257},[142,111424,23863],{"class":257},[142,111426,26429],{"class":201},[142,111428,104412],{"class":257},[142,111430,100807],{"class":257},[142,111432,102510],{"class":257},[142,111434,100823],{"class":257},[142,111436,104421],{"class":257},[14,111438,102828],{},[133,111440,111441],{"className":23851,"code":100928,"language":23853,"meta":31,"style":31},[139,111442,111443],{"__ignoreMap":31},[142,111444,111445,111447,111449,111451],{"class":144,"line":145},[142,111446,23860],{"class":1991},[142,111448,23863],{"class":257},[142,111450,100939],{"class":257},[142,111452,100942],{"class":257},[14,111454,102845],{},[133,111456,111458],{"className":23851,"code":111457,"language":23853,"meta":31,"style":31},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[139,111459,111460,111477,111486],{"__ignoreMap":31},[142,111461,111462,111464,111466,111468,111471,111473,111475],{"class":144,"line":145},[142,111463,30359],{"class":1991},[142,111465,29205],{"class":257},[142,111467,25144],{"class":201},[142,111469,111470],{"class":257}," mujoco-reacher",[142,111472,100984],{"class":257},[142,111474,100987],{"class":201},[142,111476,100990],{"class":201},[142,111478,111479,111481,111483],{"class":144,"line":64},[142,111480,30359],{"class":1991},[142,111482,100997],{"class":257},[142,111484,111485],{"class":257}," mujoco-reacher\n",[142,111487,111488,111490,111492,111494],{"class":144,"line":1208},[142,111489,23860],{"class":1991},[142,111491,23863],{"class":257},[142,111493,100939],{"class":257},[142,111495,100942],{"class":257},[14,111497,101013],{},[96,111499,111500,111503,111506],{},[99,111501,111502],{},"本章使用低维状态，不使用图像输入。",[99,111504,111505],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[99,111507,111508,111509,365,111511,365,111513,111515],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[139,111510,104039],{},[139,111512,104369],{},[139,111514,103689],{}," 的方法一致。",[84,111517,101054],{"id":101053},[14,111519,111520],{},"Reacher 任务核心:",[133,111522,111525],{"className":111523,"code":111524,"language":5216,"meta":31},[5214],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[139,111526,111524],{"__ignoreMap":31},[14,111528,111529],{},"读取 site 世界坐标:",[133,111531,111533],{"className":30407,"code":111532,"language":30409,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[139,111534,111535,111548],{"__ignoreMap":31},[142,111536,111537,111539,111541,111543,111546],{"class":144,"line":145},[142,111538,103643],{"class":152},[142,111540,198],{"class":148},[142,111542,103414],{"class":152},[142,111544,111545],{"class":257},"\"tip\"",[142,111547,159],{"class":152},[142,111549,111550,111553,111555],{"class":144,"line":64},[142,111551,111552],{"class":152},"tip_pos ",[142,111554,198],{"class":148},[142,111556,111557],{"class":152}," data.site_xpos[site_id]\n",[113,111559,111561],{"id":111560},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111563,111564,111565,111567],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[139,111566,104039],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[133,111569,111571],{"className":30407,"code":111570,"language":30409,"meta":31,"style":31},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[139,111572,111573,111583],{"__ignoreMap":31},[142,111574,111575,111578,111580],{"class":144,"line":145},[142,111576,111577],{"class":152},"tip ",[142,111579,198],{"class":148},[142,111581,111582],{"class":152}," data.site_xpos[tip_site_id]\n",[142,111584,111585,111588,111590],{"class":144,"line":64},[142,111586,111587],{"class":152},"target ",[142,111589,198],{"class":148},[142,111591,111592],{"class":152}," data.site_xpos[target_site_id]\n",[14,111594,111595],{},"这样 reward 就很容易写：",[133,111597,111599],{"className":30407,"code":111598,"language":30409,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[139,111600,111601,111616],{"__ignoreMap":31},[142,111602,111603,111606,111608,111611,111613],{"class":144,"line":145},[142,111604,111605],{"class":152},"dist ",[142,111607,198],{"class":148},[142,111609,111610],{"class":152}," np.linalg.norm(tip ",[142,111612,685],{"class":148},[142,111614,111615],{"class":152}," target)\n",[142,111617,111618,111620,111622,111624],{"class":144,"line":64},[142,111619,111014],{"class":152},[142,111621,198],{"class":148},[142,111623,52300],{"class":148},[142,111625,111626],{"class":152},"dist\n",[14,111628,111629,111630,111633],{},"距离越小，",[139,111631,111632],{},"-dist"," 越接近 0，奖励越高。",[113,111635,111636],{"id":111636},"两关节机械臂的状态",[14,111638,111639],{},"这个模型有两个 hinge joint：",[133,111641,111644],{"className":111642,"code":111643,"language":5216,"meta":31},[5214],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[139,111645,111643],{"__ignoreMap":31},[14,111647,111648],{},"再加上末端和目标位置：",[133,111650,111653],{"className":111651,"code":111652,"language":5216,"meta":31},[5214],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[139,111654,111652],{"__ignoreMap":31},[14,111656,111657],{},"总维度：",[133,111659,111662],{"className":111660,"code":111661,"language":5216,"meta":31},[5214],"2 + 2 + 3 + 3 = 10\n",[139,111663,111661],{"__ignoreMap":31},[113,111665,111667],{"id":111666},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111669,111670],{},"本章把重力设为：",[133,111672,111674],{"className":53096,"code":111673,"language":53098,"meta":31,"style":31},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[139,111675,111676],{"__ignoreMap":31},[142,111677,111678,111680,111682,111684,111686,111688,111690,111692,111694],{"class":144,"line":145},[142,111679,1063],{"class":152},[142,111681,69195],{"class":51329},[142,111683,101203],{"class":1991},[142,111685,198],{"class":152},[142,111687,101208],{"class":257},[142,111689,101211],{"class":1991},[142,111691,198],{"class":152},[142,111693,103780],{"class":257},[142,111695,101153],{"class":152},[14,111697,111698],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[84,111700,101262],{"id":101261},[133,111702,111704],{"className":30407,"code":111703,"language":30409,"meta":31,"style":31},"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",[139,111705,111706,111712,111722,111726,111730,111738,111743,111748,111752,111756,111761,111766,111770,111775,111780,111785,111789,111794,111799,111804,111809,111813,111817,111821,111825,111829,111834,111839,111843,111847,111851,111855,111859,111874,111883,111895,111918,111925,111929,111933,111943,111957,111971,111978,111982,111986,112000,112012,112024,112037,112052,112069,112073,112077,112089,112101,112109,112117,112121,112137,112142,112155,112168,112183,112187,112222,112254,112258,112262,112271,112275,112291,112301,112312,112328,112344,112360,112376,112380,112398,112418,112437,112441,112445,112457],{"__ignoreMap":31},[142,111707,111708,111710],{"class":144,"line":145},[142,111709,30421],{"class":148},[142,111711,101310],{"class":152},[142,111713,111714,111716,111718,111720],{"class":144,"line":64},[142,111715,30421],{"class":148},[142,111717,31409],{"class":152},[142,111719,31412],{"class":148},[142,111721,31415],{"class":152},[142,111723,111724],{"class":144,"line":1208},[142,111725,2428],{"emptyLinePlaceholder":69},[142,111727,111728],{"class":144,"line":1223},[142,111729,2428],{"emptyLinePlaceholder":69},[142,111731,111732,111734,111736],{"class":144,"line":1229},[142,111733,101323],{"class":201},[142,111735,13593],{"class":148},[142,111737,101328],{"class":257},[142,111739,111740],{"class":144,"line":1243},[142,111741,111742],{"class":257},"\u003Cmujoco model=\"two_link_reacher\">\n",[142,111744,111745],{"class":144,"line":1249},[142,111746,111747],{"class":257},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[142,111749,111750],{"class":144,"line":1340},[142,111751,2428],{"emptyLinePlaceholder":69},[142,111753,111754],{"class":144,"line":1346},[142,111755,101347],{"class":257},[142,111757,111758],{"class":144,"line":1358},[142,111759,111760],{"class":257},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[142,111762,111763],{"class":144,"line":1640},[142,111764,111765],{"class":257},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[142,111767,111768],{"class":144,"line":1645},[142,111769,2428],{"emptyLinePlaceholder":69},[142,111771,111772],{"class":144,"line":1651},[142,111773,111774],{"class":257},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[142,111776,111777],{"class":144,"line":1656},[142,111778,111779],{"class":257},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[142,111781,111782],{"class":144,"line":1670},[142,111783,111784],{"class":257},"      \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",[142,111786,111787],{"class":144,"line":1675},[142,111788,2428],{"emptyLinePlaceholder":69},[142,111790,111791],{"class":144,"line":1681},[142,111792,111793],{"class":257},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[142,111795,111796],{"class":144,"line":1702},[142,111797,111798],{"class":257},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[142,111800,111801],{"class":144,"line":1707},[142,111802,111803],{"class":257},"        \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",[142,111805,111806],{"class":144,"line":1721},[142,111807,111808],{"class":257},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[142,111810,111811],{"class":144,"line":1726},[142,111812,106447],{"class":257},[142,111814,111815],{"class":144,"line":1755},[142,111816,101376],{"class":257},[142,111818,111819],{"class":144,"line":1760},[142,111820,101381],{"class":257},[142,111822,111823],{"class":144,"line":1777},[142,111824,2428],{"emptyLinePlaceholder":69},[142,111826,111827],{"class":144,"line":1782},[142,111828,106464],{"class":257},[142,111830,111831],{"class":144,"line":1787},[142,111832,111833],{"class":257},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[142,111835,111836],{"class":144,"line":1792},[142,111837,111838],{"class":257},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[142,111840,111841],{"class":144,"line":1806},[142,111842,106474],{"class":257},[142,111844,111845],{"class":144,"line":1811},[142,111846,101386],{"class":257},[142,111848,111849],{"class":144,"line":2605},[142,111850,95707],{"class":257},[142,111852,111853],{"class":144,"line":2619},[142,111854,2428],{"emptyLinePlaceholder":69},[142,111856,111857],{"class":144,"line":2627},[142,111858,2428],{"emptyLinePlaceholder":69},[142,111860,111861,111863,111866,111869,111871],{"class":144,"line":2632},[142,111862,31976],{"class":148},[142,111864,111865],{"class":1991}," site_position",[142,111867,111868],{"class":152},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[142,111870,1328],{"class":201},[142,111872,111873],{"class":152},") -> np.ndarray:\n",[142,111875,111876,111878,111880],{"class":144,"line":2638},[142,111877,103409],{"class":152},[142,111879,198],{"class":148},[142,111881,111882],{"class":152}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[142,111884,111885,111887,111889,111891,111893],{"class":144,"line":2644},[142,111886,3129],{"class":148},[142,111888,103458],{"class":152},[142,111890,1063],{"class":148},[142,111892,4121],{"class":201},[142,111894,3767],{"class":152},[142,111896,111897,111899,111901,111903,111905,111908,111910,111912,111914,111916],{"class":144,"line":2649},[142,111898,103441],{"class":148},[142,111900,103444],{"class":201},[142,111902,153],{"class":152},[142,111904,205],{"class":148},[142,111906,111907],{"class":257},"\"site not found: ",[142,111909,1049],{"class":201},[142,111911,79839],{"class":152},[142,111913,1099],{"class":201},[142,111915,404],{"class":257},[142,111917,159],{"class":152},[142,111919,111920,111922],{"class":144,"line":7977},[142,111921,4118],{"class":148},[142,111923,111924],{"class":152}," data.site_xpos[site_id].copy()\n",[142,111926,111927],{"class":144,"line":8001},[142,111928,2428],{"emptyLinePlaceholder":69},[142,111930,111931],{"class":144,"line":8006},[142,111932,2428],{"emptyLinePlaceholder":69},[142,111934,111935,111937,111940],{"class":144,"line":8012},[142,111936,31976],{"class":148},[142,111938,111939],{"class":1991}," get_obs",[142,111941,111942],{"class":152},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[142,111944,111945,111948,111950,111953,111955],{"class":144,"line":8039},[142,111946,111947],{"class":152},"    tip ",[142,111949,198],{"class":148},[142,111951,111952],{"class":152}," site_position(model, data, ",[142,111954,111545],{"class":257},[142,111956,159],{"class":152},[142,111958,111959,111962,111964,111966,111969],{"class":144,"line":8044},[142,111960,111961],{"class":152},"    target ",[142,111963,198],{"class":148},[142,111965,111952],{"class":152},[142,111967,111968],{"class":257},"\"target\"",[142,111970,159],{"class":152},[142,111972,111973,111975],{"class":144,"line":8050},[142,111974,4118],{"class":148},[142,111976,111977],{"class":152}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[142,111979,111980],{"class":144,"line":8062},[142,111981,2428],{"emptyLinePlaceholder":69},[142,111983,111984],{"class":144,"line":8074},[142,111985,2428],{"emptyLinePlaceholder":69},[142,111987,111988,111990,111993,111996,111998],{"class":144,"line":8086},[142,111989,31976],{"class":148},[142,111991,111992],{"class":1991}," reward",[142,111994,111995],{"class":152},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[142,111997,192],{"class":201},[142,111999,3767],{"class":152},[142,112001,112002,112004,112006,112008,112010],{"class":144,"line":9745},[142,112003,111947],{"class":152},[142,112005,198],{"class":148},[142,112007,111952],{"class":152},[142,112009,111545],{"class":257},[142,112011,159],{"class":152},[142,112013,112014,112016,112018,112020,112022],{"class":144,"line":9770},[142,112015,111961],{"class":152},[142,112017,198],{"class":148},[142,112019,111952],{"class":152},[142,112021,111968],{"class":257},[142,112023,159],{"class":152},[142,112025,112026,112029,112031,112033,112035],{"class":144,"line":9793},[142,112027,112028],{"class":152},"    dist ",[142,112030,198],{"class":148},[142,112032,111610],{"class":152},[142,112034,685],{"class":148},[142,112036,111615],{"class":152},[142,112038,112039,112042,112044,112047,112049],{"class":144,"line":9817},[142,112040,112041],{"class":152},"    control_cost ",[142,112043,198],{"class":148},[142,112045,112046],{"class":201}," 0.01",[142,112048,6547],{"class":148},[142,112050,112051],{"class":152}," np.sum(np.square(data.ctrl))\n",[142,112053,112054,112056,112058,112060,112062,112064,112066],{"class":144,"line":9822},[142,112055,4118],{"class":148},[142,112057,109806],{"class":201},[142,112059,153],{"class":152},[142,112061,685],{"class":148},[142,112063,111605],{"class":152},[142,112065,685],{"class":148},[142,112067,112068],{"class":152}," control_cost)\n",[142,112070,112071],{"class":144,"line":9827},[142,112072,2428],{"emptyLinePlaceholder":69},[142,112074,112075],{"class":144,"line":9832},[142,112076,2428],{"emptyLinePlaceholder":69},[142,112078,112079,112081,112083,112085,112087],{"class":144,"line":9841},[142,112080,31976],{"class":148},[142,112082,2001],{"class":1991},[142,112084,101407],{"class":152},[142,112086,95695],{"class":201},[142,112088,3767],{"class":152},[142,112090,112091,112093,112095,112097,112099],{"class":144,"line":9846},[142,112092,101416],{"class":152},[142,112094,198],{"class":148},[142,112096,101421],{"class":152},[142,112098,101323],{"class":201},[142,112100,159],{"class":152},[142,112102,112103,112105,112107],{"class":144,"line":9852},[142,112104,101430],{"class":152},[142,112106,198],{"class":148},[142,112108,101435],{"class":152},[142,112110,112111,112113,112115],{"class":144,"line":9873},[142,112112,110162],{"class":152},[142,112114,198],{"class":148},[142,112116,104770],{"class":201},[142,112118,112119],{"class":144,"line":9879},[142,112120,2428],{"emptyLinePlaceholder":69},[142,112122,112123,112125,112127,112129,112131,112133,112135],{"class":144,"line":9893},[142,112124,3229],{"class":148},[142,112126,31645],{"class":152},[142,112128,26072],{"class":148},[142,112130,32472],{"class":201},[142,112132,153],{"class":152},[142,112134,65103],{"class":201},[142,112136,30815],{"class":152},[142,112138,112139],{"class":144,"line":9899},[142,112140,112141],{"class":152},"        mujoco.mj_forward(model, data)\n",[142,112143,112144,112147,112149,112151,112153],{"class":144,"line":9926},[142,112145,112146],{"class":152},"        tip ",[142,112148,198],{"class":148},[142,112150,111952],{"class":152},[142,112152,111545],{"class":257},[142,112154,159],{"class":152},[142,112156,112157,112160,112162,112164,112166],{"class":144,"line":9935},[142,112158,112159],{"class":152},"        target ",[142,112161,198],{"class":148},[142,112163,111952],{"class":152},[142,112165,111968],{"class":257},[142,112167,159],{"class":152},[142,112169,112170,112173,112175,112178,112180],{"class":144,"line":9941},[142,112171,112172],{"class":152},"        error ",[142,112174,198],{"class":148},[142,112176,112177],{"class":152}," target ",[142,112179,685],{"class":148},[142,112181,112182],{"class":152}," tip\n",[142,112184,112185],{"class":144,"line":9949},[142,112186,2428],{"emptyLinePlaceholder":69},[142,112188,112189,112191,112193,112195,112197,112200,112202,112204,112207,112209,112212,112214,112216,112218,112220],{"class":144,"line":9954},[142,112190,106626],{"class":152},[142,112192,344],{"class":201},[142,112194,4471],{"class":152},[142,112196,198],{"class":148},[142,112198,112199],{"class":152}," np.clip(",[142,112201,105269],{"class":201},[142,112203,6547],{"class":148},[142,112205,112206],{"class":152}," error[",[142,112208,230],{"class":201},[142,112210,112211],{"class":152},"], ",[142,112213,685],{"class":148},[142,112215,102412],{"class":201},[142,112217,12464],{"class":152},[142,112219,102412],{"class":201},[142,112221,159],{"class":152},[142,112223,112224,112226,112228,112230,112232,112234,112236,112238,112240,112242,112244,112246,112248,112250,112252],{"class":144,"line":16633},[142,112225,106626],{"class":152},[142,112227,370],{"class":201},[142,112229,4471],{"class":152},[142,112231,198],{"class":148},[142,112233,112199],{"class":152},[142,112235,105269],{"class":201},[142,112237,6547],{"class":148},[142,112239,112206],{"class":152},[142,112241,344],{"class":201},[142,112243,112211],{"class":152},[142,112245,685],{"class":148},[142,112247,102412],{"class":201},[142,112249,12464],{"class":152},[142,112251,102412],{"class":201},[142,112253,159],{"class":152},[142,112255,112256],{"class":144,"line":16639},[142,112257,2428],{"emptyLinePlaceholder":69},[142,112259,112260],{"class":144,"line":16662},[142,112261,101525],{"class":152},[142,112263,112264,112266,112268],{"class":144,"line":16668},[142,112265,110306],{"class":152},[142,112267,9506],{"class":148},[142,112269,112270],{"class":152}," reward(model, data)\n",[142,112272,112273],{"class":144,"line":16691},[142,112274,2428],{"emptyLinePlaceholder":69},[142,112276,112277,112279,112281,112283,112285,112287,112289],{"class":144,"line":16705},[142,112278,2525],{"class":148},[142,112280,31645],{"class":152},[142,112282,481],{"class":148},[142,112284,5783],{"class":201},[142,112286,101568],{"class":148},[142,112288,4121],{"class":201},[142,112290,3767],{"class":152},[142,112292,112293,112296,112298],{"class":144,"line":16725},[142,112294,112295],{"class":152},"            obs ",[142,112297,198],{"class":148},[142,112299,112300],{"class":152}," get_obs(model, data)\n",[142,112302,112303,112305,112307,112309],{"class":144,"line":16731},[142,112304,34679],{"class":201},[142,112306,153],{"class":152},[142,112308,110340],{"class":257},[142,112310,112311],{"class":152},", step)\n",[142,112313,112314,112316,112318,112321,112324,112326],{"class":144,"line":16742},[142,112315,34679],{"class":201},[142,112317,153],{"class":152},[142,112319,112320],{"class":257},"\"  tip:\"",[142,112322,112323],{"class":152},", np.round(tip, ",[142,112325,224],{"class":201},[142,112327,30526],{"class":152},[142,112329,112330,112332,112334,112337,112340,112342],{"class":144,"line":16765},[142,112331,34679],{"class":201},[142,112333,153],{"class":152},[142,112335,112336],{"class":257},"\"  target:\"",[142,112338,112339],{"class":152},", np.round(target, ",[142,112341,224],{"class":201},[142,112343,30526],{"class":152},[142,112345,112346,112348,112350,112353,112356,112358],{"class":144,"line":16787},[142,112347,34679],{"class":201},[142,112349,153],{"class":152},[142,112351,112352],{"class":257},"\"  ctrl:\"",[142,112354,112355],{"class":152},", np.round(data.ctrl.copy(), ",[142,112357,224],{"class":201},[142,112359,30526],{"class":152},[142,112361,112362,112364,112366,112369,112372,112374],{"class":144,"line":16792},[142,112363,34679],{"class":201},[142,112365,153],{"class":152},[142,112367,112368],{"class":257},"\"  obs_dim:\"",[142,112370,112371],{"class":152},", obs.shape[",[142,112373,344],{"class":201},[142,112375,4685],{"class":152},[142,112377,112378],{"class":144,"line":16798},[142,112379,2428],{"emptyLinePlaceholder":69},[142,112381,112382,112384,112386,112388,112390,112392,112394,112396],{"class":144,"line":16812},[142,112383,31328],{"class":201},[142,112385,153],{"class":152},[142,112387,110385],{"class":257},[142,112389,12464],{"class":152},[142,112391,32047],{"class":201},[142,112393,110392],{"class":152},[142,112395,224],{"class":201},[142,112397,30526],{"class":152},[142,112399,112400,112402,112404,112407,112410,112412,112414,112416],{"class":144,"line":16825},[142,112401,31328],{"class":201},[142,112403,153],{"class":152},[142,112405,112406],{"class":257},"\"final tip:\"",[142,112408,112409],{"class":152},", np.round(site_position(model, data, ",[142,112411,111545],{"class":257},[142,112413,110354],{"class":152},[142,112415,224],{"class":201},[142,112417,30526],{"class":152},[142,112419,112420,112422,112424,112427,112429,112431,112433,112435],{"class":144,"line":16830},[142,112421,31328],{"class":201},[142,112423,153],{"class":152},[142,112425,112426],{"class":257},"\"target:\"",[142,112428,112409],{"class":152},[142,112430,111968],{"class":257},[142,112432,110354],{"class":152},[142,112434,224],{"class":201},[142,112436,30526],{"class":152},[142,112438,112439],{"class":144,"line":16844},[142,112440,2428],{"emptyLinePlaceholder":69},[142,112442,112443],{"class":144,"line":16849},[142,112444,2428],{"emptyLinePlaceholder":69},[142,112446,112447,112449,112451,112453,112455],{"class":144,"line":16855},[142,112448,1559],{"class":148},[142,112450,31249],{"class":201},[142,112452,101568],{"class":148},[142,112454,101571],{"class":257},[142,112456,3767],{"class":152},[142,112458,112459],{"class":144,"line":16860},[142,112460,101578],{"class":152},[14,112462,103579],{},[133,112464,112466],{"className":23851,"code":112465,"language":23853,"meta":31,"style":31},"touch ch7_reacher.py\n",[139,112467,112468],{"__ignoreMap":31},[142,112469,112470,112472],{"class":144,"line":145},[142,112471,101292],{"class":1991},[142,112473,112474],{"class":257}," ch7_reacher.py\n",[14,112476,110453],{},[133,112478,112480],{"className":23851,"code":112479,"language":23853,"meta":31,"style":31},"python ch7_reacher.py\n",[139,112481,112482],{"__ignoreMap":31},[142,112483,112484,112486],{"class":144,"line":145},[142,112485,30409],{"class":1991},[142,112487,112474],{"class":257},[113,112489,101581],{"id":101581},[14,112491,112492],{},"读取 site 坐标：",[133,112494,112496],{"className":30407,"code":112495,"language":30409,"meta":31,"style":31},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[139,112497,112498],{"__ignoreMap":31},[142,112499,112500,112502,112504,112506,112508],{"class":144,"line":145},[142,112501,31976],{"class":148},[142,112503,111865],{"class":1991},[142,112505,111868],{"class":152},[142,112507,1328],{"class":201},[142,112509,111873],{"class":152},[14,112511,112512],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112514,110469],{},[133,112516,112518],{"className":30407,"code":112517,"language":30409,"meta":31,"style":31},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[139,112519,112520],{"__ignoreMap":31},[142,112521,112522,112524],{"class":144,"line":145},[142,112523,17075],{"class":148},[142,112525,111977],{"class":152},[14,112527,112528],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112530,109794],{},[133,112532,112534],{"className":30407,"code":112533,"language":30409,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[139,112535,112536,112548,112561],{"__ignoreMap":31},[142,112537,112538,112540,112542,112544,112546],{"class":144,"line":145},[142,112539,111605],{"class":152},[142,112541,198],{"class":148},[142,112543,111610],{"class":152},[142,112545,685],{"class":148},[142,112547,111615],{"class":152},[142,112549,112550,112553,112555,112557,112559],{"class":144,"line":64},[142,112551,112552],{"class":152},"control_cost ",[142,112554,198],{"class":148},[142,112556,112046],{"class":201},[142,112558,6547],{"class":148},[142,112560,112051],{"class":152},[142,112562,112563,112565,112567,112569,112571,112573,112575],{"class":144,"line":1208},[142,112564,17075],{"class":148},[142,112566,109806],{"class":201},[142,112568,153],{"class":152},[142,112570,685],{"class":148},[142,112572,111605],{"class":152},[142,112574,685],{"class":148},[142,112576,112068],{"class":152},[14,112578,112579],{},"奖励由两部分组成：",[96,112581,112582,112587],{},[99,112583,112584,112586],{},[139,112585,111632],{},"：末端离目标越远，奖励越低。",[99,112588,112589,112592],{},[139,112590,112591],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112594,112595],{},"简单控制器：",[133,112597,112599],{"className":30407,"code":112598,"language":30409,"meta":31,"style":31},"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",[139,112600,112601,112614,112646],{"__ignoreMap":31},[142,112602,112603,112606,112608,112610,112612],{"class":144,"line":145},[142,112604,112605],{"class":152},"error ",[142,112607,198],{"class":148},[142,112609,112177],{"class":152},[142,112611,685],{"class":148},[142,112613,112182],{"class":152},[142,112615,112616,112618,112620,112622,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642,112644],{"class":144,"line":64},[142,112617,105880],{"class":152},[142,112619,344],{"class":201},[142,112621,4471],{"class":152},[142,112623,198],{"class":148},[142,112625,112199],{"class":152},[142,112627,105269],{"class":201},[142,112629,6547],{"class":148},[142,112631,112206],{"class":152},[142,112633,230],{"class":201},[142,112635,112211],{"class":152},[142,112637,685],{"class":148},[142,112639,102412],{"class":201},[142,112641,12464],{"class":152},[142,112643,102412],{"class":201},[142,112645,159],{"class":152},[142,112647,112648,112650,112652,112654,112656,112658,112660,112662,112664,112666,112668,112670,112672,112674,112676],{"class":144,"line":1208},[142,112649,105880],{"class":152},[142,112651,370],{"class":201},[142,112653,4471],{"class":152},[142,112655,198],{"class":148},[142,112657,112199],{"class":152},[142,112659,105269],{"class":201},[142,112661,6547],{"class":148},[142,112663,112206],{"class":152},[142,112665,344],{"class":201},[142,112667,112211],{"class":152},[142,112669,685],{"class":148},[142,112671,102412],{"class":201},[142,112673,12464],{"class":152},[142,112675,102412],{"class":201},[142,112677,159],{"class":152},[14,112679,112680],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[113,112682,101717],{"id":101717},[133,112684,112685],{"className":30407,"code":112495,"language":30409,"meta":31,"style":31},[139,112686,112687],{"__ignoreMap":31},[142,112688,112689,112691,112693,112695,112697],{"class":144,"line":145},[142,112690,31976],{"class":148},[142,112692,111865],{"class":1991},[142,112694,111868],{"class":152},[142,112696,1328],{"class":201},[142,112698,111873],{"class":152},[14,112700,112701,112702,112704,112705,82568,112707,28414],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[139,112703,79839],{}," 是 site 的名字，比如 ",[139,112706,111545],{},[139,112708,111968],{},[133,112710,112712],{"className":30407,"code":112711,"language":30409,"meta":31,"style":31},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[139,112713,112714],{"__ignoreMap":31},[142,112715,112716,112718,112720],{"class":144,"line":145},[142,112717,103643],{"class":152},[142,112719,198],{"class":148},[142,112721,111882],{"class":152},[14,112723,112724],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[133,112726,112728],{"className":30407,"code":112727,"language":30409,"meta":31,"style":31},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[139,112729,112730,112742],{"__ignoreMap":31},[142,112731,112732,112734,112736,112738,112740],{"class":144,"line":145},[142,112733,1559],{"class":148},[142,112735,103458],{"class":152},[142,112737,1063],{"class":148},[142,112739,4121],{"class":201},[142,112741,3767],{"class":152},[142,112743,112744,112746,112748,112750,112752,112754,112756,112758,112760,112762],{"class":144,"line":64},[142,112745,103904],{"class":148},[142,112747,103444],{"class":201},[142,112749,153],{"class":152},[142,112751,205],{"class":148},[142,112753,111907],{"class":257},[142,112755,1049],{"class":201},[142,112757,79839],{"class":152},[142,112759,1099],{"class":201},[142,112761,404],{"class":257},[142,112763,159],{"class":152},[14,112765,112766,112767,112770,112771,112773],{},"如果 site 没找到，就主动报错。",[139,112768,112769],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[139,112772,79839],{}," 的值放进字符串里。",[133,112775,112777],{"className":30407,"code":112776,"language":30409,"meta":31,"style":31},"return data.site_xpos[site_id].copy()\n",[139,112778,112779],{"__ignoreMap":31},[142,112780,112781,112783],{"class":144,"line":145},[142,112782,17075],{"class":148},[142,112784,111924],{"class":152},[14,112786,112787,112788,112790,112791,112794],{},"返回这个 site 的世界坐标。",[139,112789,103689],{}," 里的每一行都是一个 site 的 ",[139,112792,112793],{},"(x, y, z)"," 坐标。",[133,112796,112798],{"className":30407,"code":112797,"language":30409,"meta":31,"style":31},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[139,112799,112800],{"__ignoreMap":31},[142,112801,112802,112804,112806],{"class":144,"line":145},[142,112803,31976],{"class":148},[142,112805,111939],{"class":1991},[142,112807,111942],{"class":152},[14,112809,112810],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[133,112812,112814],{"className":30407,"code":112813,"language":30409,"meta":31,"style":31},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[139,112815,112816,112828],{"__ignoreMap":31},[142,112817,112818,112820,112822,112824,112826],{"class":144,"line":145},[142,112819,111577],{"class":152},[142,112821,198],{"class":148},[142,112823,111952],{"class":152},[142,112825,111545],{"class":257},[142,112827,159],{"class":152},[142,112829,112830,112832,112834,112836,112838],{"class":144,"line":64},[142,112831,111587],{"class":152},[142,112833,198],{"class":148},[142,112835,111952],{"class":152},[142,112837,111968],{"class":257},[142,112839,159],{"class":152},[14,112841,112842],{},"分别读取末端点和目标点的世界坐标。",[133,112844,112845],{"className":30407,"code":112517,"language":30409,"meta":31,"style":31},[139,112846,112847],{"__ignoreMap":31},[142,112848,112849,112851],{"class":144,"line":145},[142,112850,17075],{"class":148},[142,112852,111977],{"class":152},[14,112854,112855],{},"把四部分拼成一个观测数组：",[133,112857,112860],{"className":112858,"code":112859,"language":5216,"meta":31},[5214],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[139,112861,112859],{"__ignoreMap":31},[133,112863,112865],{"className":30407,"code":112864,"language":30409,"meta":31,"style":31},"dist = np.linalg.norm(tip - target)\n",[139,112866,112867],{"__ignoreMap":31},[142,112868,112869,112871,112873,112875,112877],{"class":144,"line":145},[142,112870,111605],{"class":152},[142,112872,198],{"class":148},[142,112874,111610],{"class":152},[142,112876,685],{"class":148},[142,112878,111615],{"class":152},[14,112880,112881,112882,112885,112886,112889],{},"计算 tip 到 target 的距离。",[139,112883,112884],{},"tip - target"," 得到一个三维向量，",[139,112887,112888],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112891,14662],{},[133,112893,112896],{"className":112894,"code":112895,"language":5216,"meta":31},[5214],"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",[139,112897,112895],{"__ignoreMap":31},[133,112899,112901],{"className":30407,"code":112900,"language":30409,"meta":31,"style":31},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[139,112902,112903],{"__ignoreMap":31},[142,112904,112905,112907,112909,112911,112913],{"class":144,"line":145},[142,112906,112552],{"class":152},[142,112908,198],{"class":148},[142,112910,112046],{"class":201},[142,112912,6547],{"class":148},[142,112914,112051],{"class":152},[14,112916,112917,112918,112921,112922,112925],{},"计算动作惩罚。",[139,112919,112920],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[139,112923,112924],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[133,112927,112929],{"className":30407,"code":112928,"language":30409,"meta":31,"style":31},"return float(-dist - control_cost)\n",[139,112930,112931],{"__ignoreMap":31},[142,112932,112933,112935,112937,112939,112941,112943,112945],{"class":144,"line":145},[142,112934,17075],{"class":148},[142,112936,109806],{"class":201},[142,112938,153],{"class":152},[142,112940,685],{"class":148},[142,112942,111605],{"class":152},[142,112944,685],{"class":148},[142,112946,112068],{"class":152},[14,112948,112949],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[133,112951,112952],{"className":30407,"code":110812,"language":30409,"meta":31,"style":31},[139,112953,112954],{"__ignoreMap":31},[142,112955,112956,112958,112960],{"class":144,"line":145},[142,112957,110819],{"class":152},[142,112959,198],{"class":148},[142,112961,104770],{"class":201},[14,112963,112964],{},"累计奖励变量，记录整个运行过程的总分。",[133,112966,112968],{"className":30407,"code":112967,"language":30409,"meta":31,"style":31},"for step in range(500):\n",[139,112969,112970],{"__ignoreMap":31},[142,112971,112972,112974,112976,112978,112980,112982,112984],{"class":144,"line":145},[142,112973,3053],{"class":148},[142,112975,31645],{"class":152},[142,112977,26072],{"class":148},[142,112979,32472],{"class":201},[142,112981,153],{"class":152},[142,112983,65103],{"class":201},[142,112985,30815],{"class":152},[14,112987,112988],{},"运行 500 个控制步。",[133,112990,112991],{"className":30407,"code":104552,"language":30409,"meta":31,"style":31},[139,112992,112993],{"__ignoreMap":31},[142,112994,112995],{"class":144,"line":145},[142,112996,104552],{"class":152},[14,112998,112999,113000,101027,113002,113004],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[139,113001,103240],{},[139,113003,103243],{}," 是当前状态下的坐标。",[133,113006,113008],{"className":30407,"code":113007,"language":30409,"meta":31,"style":31},"error = target - tip\n",[139,113009,113010],{"__ignoreMap":31},[142,113011,113012,113014,113016,113018,113020],{"class":144,"line":145},[142,113013,112605],{"class":152},[142,113015,198],{"class":148},[142,113017,112177],{"class":152},[142,113019,685],{"class":148},[142,113021,112182],{"class":152},[14,113023,113024],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[133,113026,113028],{"className":30407,"code":113027,"language":30409,"meta":31,"style":31},"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",[139,113029,113030,113062],{"__ignoreMap":31},[142,113031,113032,113034,113036,113038,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060],{"class":144,"line":145},[142,113033,105880],{"class":152},[142,113035,344],{"class":201},[142,113037,4471],{"class":152},[142,113039,198],{"class":148},[142,113041,112199],{"class":152},[142,113043,105269],{"class":201},[142,113045,6547],{"class":148},[142,113047,112206],{"class":152},[142,113049,230],{"class":201},[142,113051,112211],{"class":152},[142,113053,685],{"class":148},[142,113055,102412],{"class":201},[142,113057,12464],{"class":152},[142,113059,102412],{"class":201},[142,113061,159],{"class":152},[142,113063,113064,113066,113068,113070,113072,113074,113076,113078,113080,113082,113084,113086,113088,113090,113092],{"class":144,"line":64},[142,113065,105880],{"class":152},[142,113067,370],{"class":201},[142,113069,4471],{"class":152},[142,113071,198],{"class":148},[142,113073,112199],{"class":152},[142,113075,105269],{"class":201},[142,113077,6547],{"class":148},[142,113079,112206],{"class":152},[142,113081,344],{"class":201},[142,113083,112211],{"class":152},[142,113085,685],{"class":148},[142,113087,102412],{"class":201},[142,113089,12464],{"class":152},[142,113091,102412],{"class":201},[142,113093,159],{"class":152},[14,113095,113096,113097,113100],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[139,113098,113099],{},"error -> ctrl -> step"," 的流程。",[133,113102,113103],{"className":30407,"code":104514,"language":30409,"meta":31,"style":31},[139,113104,113105],{"__ignoreMap":31},[142,113106,113107],{"class":144,"line":145},[142,113108,104514],{"class":152},[14,113110,113111],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[133,113113,113115],{"className":30407,"code":113114,"language":30409,"meta":31,"style":31},"obs = get_obs(model, data)\n",[139,113116,113117],{"__ignoreMap":31},[142,113118,113119,113121,113123],{"class":144,"line":145},[142,113120,110863],{"class":152},[142,113122,198],{"class":148},[142,113124,112300],{"class":152},[14,113126,113127,113128,113131],{},"读取最新观测。后面打印 ",[139,113129,113130],{},"obs.shape[0]","，用来确认观测维度是 10。",[84,113133,102325],{"id":102324},[14,113135,113136],{},"观测维度为:",[133,113138,113141],{"className":113139,"code":113140,"language":5216,"meta":31},[5214],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[139,113142,113140],{"__ignoreMap":31},[14,113144,113145],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113147,113148],{},"程序每 100 步打印：",[133,113150,113153],{"className":113151,"code":113152,"language":5216,"meta":31},[5214],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[139,113154,113152],{"__ignoreMap":31},[14,113156,113157,113158,113160],{},"如果控制有效，你应该看到最终 ",[139,113159,103240],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[84,113162,102357],{"id":102356},[96,113164,113165,113168,113171,113177,113183,113190,113200],{},[99,113166,113167],{},"修改目标点位置。",[99,113169,113170],{},"重新运行，观察最终 tip 是否变化。",[99,113172,113173,113174,113176],{},"把 gravity 改成 ",[139,113175,102598],{},"，观察控制是否变差。",[99,113178,111190,113179,111194,113181,28414],{},[139,113180,102167],{},[139,113182,230],{},[99,113184,102420,113185,102423,113187,113189],{},[139,113186,110605],{},[139,113188,107316],{},"，观察机械臂是否更难移动。",[99,113191,102420,113192,82559,113194,102423,113196,113199],{},[139,113193,103243],{},[139,113195,104155],{},[139,113197,113198],{},"0.2 0 0.6","，观察 reward 和 final tip。",[99,113201,113202],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[84,113204,102462],{"id":102461},[113,113206,113208],{"id":113207},"site-not-found",[139,113209,113210],{},"site not found",[14,113212,113213,113214,101027,113217,28414],{},"检查 XML 中是否有 ",[139,113215,113216],{},"site name=\"tip\"",[139,113218,113219],{},"site name=\"target\"",[113,113221,113222],{"id":113222},"机械臂完全不动",[14,113224,102532],{},[96,113226,113227,113232,113235,113240],{},[99,113228,113229,113231],{},[139,113230,102167],{}," 是否为 2",[99,113233,113234],{},"actuator 是否引用正确 joint",[99,113236,113237,113239],{},[139,113238,101085],{}," 是否被赋值",[99,113241,113242,113243],{},"是否执行了 ",[139,113244,100694],{},[113,113246,113247],{"id":113247},"控制效果不好",[14,113249,113250],{},"正常。本章重点不是控制器最优，而是任务结构:",[133,113252,113255],{"className":113253,"code":113254,"language":5216,"meta":31},[5214],"obs → action → mj_step → reward → next_obs\n",[139,113256,113254],{"__ignoreMap":31},[113,113258,113260],{"id":113259},"tip-坐标不变化","tip 坐标不变化",[14,113262,102584],{},[96,113264,113265,113270,113278,113287],{},[99,113266,113267,113268,28414],{},"是否每步调用了 ",[139,113269,100694],{},[99,113271,113272,113273,101027,113275,28414],{},"是否写入了 ",[139,113274,106135],{},[139,113276,113277],{},"data.ctrl[1]",[99,113279,113280,113281,365,113284,28414],{},"actuator 是否正确引用 ",[139,113282,113283],{},"joint1",[139,113285,113286],{},"joint2",[99,113288,113289],{},"控制输入是否太小。",[113,113291,113292],{"id":113292},"目标点不会动",[14,113294,113295],{},"本章的 target 是固定 site：",[133,113297,113299],{"className":53096,"code":113298,"language":53098,"meta":31,"style":31},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[139,113300,113301],{"__ignoreMap":31},[142,113302,113303,113305,113307,113309,113311,113313,113315,113317,113320],{"class":144,"line":145},[142,113304,1063],{"class":152},[142,113306,103219],{"class":51329},[142,113308,14949],{"class":1991},[142,113310,198],{"class":152},[142,113312,111968],{"class":257},[142,113314,101115],{"class":1991},[142,113316,198],{"class":152},[142,113318,113319],{"class":257},"\"0.5 0 0.4\"",[142,113321,113322],{"class":152}," ...\u002F>\n",[14,113324,113325,113326,113328],{},"它直接挂在 ",[139,113327,101850],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[113,113330,113331],{"id":113331},"机械臂不像真实机械臂",[14,113333,113334],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[84,113336,102616],{"id":102615},[14,113338,113339],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113341,113342],{},"核心公式：",[133,113344,113347],{"className":113345,"code":113346,"language":5216,"meta":31},[5214],"distance = ||tip - target||\nreward = -distance - action_cost\n",[139,113348,113346],{"__ignoreMap":31},[14,113350,113351],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5155,113353,113354],{},"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":31,"searchDepth":64,"depth":64,"links":113356},[113357,113358,113359,113364,113368,113369,113370,113378],{"id":100655,"depth":64,"text":100656},{"id":100778,"depth":64,"text":100779},{"id":101053,"depth":64,"text":101054,"children":113360},[113361,113362,113363],{"id":111560,"depth":1208,"text":111561},{"id":111636,"depth":1208,"text":111636},{"id":111666,"depth":1208,"text":111667},{"id":101261,"depth":64,"text":101262,"children":113365},[113366,113367],{"id":101581,"depth":1208,"text":101581},{"id":101717,"depth":1208,"text":101717},{"id":102324,"depth":64,"text":102325},{"id":102356,"depth":64,"text":102357},{"id":102461,"depth":64,"text":102462,"children":113371},[113372,113373,113374,113375,113376,113377],{"id":113207,"depth":1208,"text":113210},{"id":113222,"depth":1208,"text":113222},{"id":113247,"depth":1208,"text":113247},{"id":113259,"depth":1208,"text":113260},{"id":113292,"depth":1208,"text":113292},{"id":113331,"depth":1208,"text":113331},{"id":102615,"depth":64,"text":102616},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111364,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113385,"title":113386,"body":113387,"description":31,"extension":67,"meta":116849,"navigation":69,"path":116850,"seo":116851,"stem":116852,"__hash__":116853},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113388,"toc":116820},[113389,113392,113394,113397,113400,113425,113428,113434,113437,113443,113445,113447,113471,113473,113491,113493,113536,113538,113565,113567,113570,113622,113625,113631,113640,113643,113681,113684,113723,113726,113734,113741,113744,113750,113752,113806,113813,113858,113861,113865,113881,113891,113893,115154,115156,115168,115170,115181,115183,115186,115207,115210,115213,115246,115252,115255,115288,115291,115294,115335,115340,115354,115357,115370,115375,115398,115400,115415,115425,115440,115447,115467,115482,115500,115503,115520,115528,115544,115550,115582,115595,115627,115637,115672,115686,115732,115746,115788,115799,115812,115818,115851,115854,115881,115891,115931,115941,115958,115965,115983,115986,116027,116040,116055,116058,116081,116084,116096,116099,116118,116123,116144,116147,116162,116165,116199,116211,116226,116229,116254,116257,116276,116279,116311,116314,116338,116344,116374,116381,116394,116397,116399,116401,116407,116410,116413,116425,116428,116430,116484,116486,116490,116496,116505,116508,116515,116517,116540,116543,116547,116549,116567,116573,116575,116608,116611,116617,116621,116624,116644,116649,116653,116660,116680,116685,116689,116692,116712,116715,116801,116805,116808,116814,116817],[10,113390,113386],{"id":113391},"_8gymnasium-风格强化学习接口基础",[84,113393,100656],{"id":100655},[14,113395,113396],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113398,113399],{},"你将实现:",[133,113401,113403],{"className":30407,"code":113402,"language":30409,"meta":31,"style":31},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[139,113404,113405,113415],{"__ignoreMap":31},[142,113406,113407,113410,113412],{"class":144,"line":145},[142,113408,113409],{"class":152},"obs, info ",[142,113411,198],{"class":148},[142,113413,113414],{"class":152}," env.reset()\n",[142,113416,113417,113420,113422],{"class":144,"line":64},[142,113418,113419],{"class":152},"obs, reward, terminated, truncated, info ",[142,113421,198],{"class":148},[142,113423,113424],{"class":152}," env.step(action)\n",[14,113426,113427],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113429,113430,113431,113433],{},"前面章节的代码都是“脚本式”的：在 ",[139,113432,102304],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113435,113436],{},"可以先记住 Gymnasium 环境的核心交互：",[133,113438,113441],{"className":113439,"code":113440,"language":5216,"meta":31},[5214],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[139,113442,113440],{"__ignoreMap":31},[84,113444,100779],{"id":100778},[14,113446,100782],{},[133,113448,113449],{"className":23851,"code":104397,"language":23853,"meta":31,"style":31},[139,113450,113451],{"__ignoreMap":31},[142,113452,113453,113455,113457,113459,113461,113463,113465,113467,113469],{"class":144,"line":145},[142,113454,24606],{"class":1991},[142,113456,26344],{"class":257},[142,113458,23863],{"class":257},[142,113460,26429],{"class":201},[142,113462,104412],{"class":257},[142,113464,100807],{"class":257},[142,113466,102510],{"class":257},[142,113468,100823],{"class":257},[142,113470,104421],{"class":257},[14,113472,102828],{},[133,113474,113476],{"className":23851,"code":113475,"language":23853,"meta":31,"style":31},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[139,113477,113478],{"__ignoreMap":31},[142,113479,113480,113482,113484,113486,113488],{"class":144,"line":145},[142,113481,23860],{"class":1991},[142,113483,23863],{"class":257},[142,113485,100939],{"class":257},[142,113487,107720],{"class":257},[142,113489,113490],{"class":257}," gymnasium\n",[14,113492,102845],{},[133,113494,113496],{"className":23851,"code":113495,"language":23853,"meta":31,"style":31},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[139,113497,113498,113515,113524],{"__ignoreMap":31},[142,113499,113500,113502,113504,113506,113509,113511,113513],{"class":144,"line":145},[142,113501,30359],{"class":1991},[142,113503,29205],{"class":257},[142,113505,25144],{"class":201},[142,113507,113508],{"class":257}," mujoco-gym-api",[142,113510,100984],{"class":257},[142,113512,100987],{"class":201},[142,113514,100990],{"class":201},[142,113516,113517,113519,113521],{"class":144,"line":64},[142,113518,30359],{"class":1991},[142,113520,100997],{"class":257},[142,113522,113523],{"class":257}," mujoco-gym-api\n",[142,113525,113526,113528,113530,113532,113534],{"class":144,"line":1208},[142,113527,23860],{"class":1991},[142,113529,23863],{"class":257},[142,113531,100939],{"class":257},[142,113533,107720],{"class":257},[142,113535,113490],{"class":257},[14,113537,101013],{},[96,113539,113540,113550,113553,113559],{},[99,113541,113542,113543,113546,113547,28414],{},"本章使用 ",[139,113544,113545],{},"gymnasium","，不是旧版 ",[139,113548,113549],{},"gym",[99,113551,113552],{},"Gymnasium API 与旧 Gym API 有差异。",[99,113554,113555,113556,28414],{},"旧 Gym 常见返回值是 4 个: ",[139,113557,113558],{},"obs, reward, done, info",[99,113560,113561,113562,28414],{},"Gymnasium 返回值是 5 个: ",[139,113563,113564],{},"obs, reward, terminated, truncated, info",[84,113566,101054],{"id":101053},[14,113568,113569],{},"强化学习环境接口包含:",[290,113571,113572,113581],{},[293,113573,113574],{},[296,113575,113576,113579],{},[299,113577,113578],{"align":23765},"方法",[299,113580,102705],{"align":23765},[337,113582,113583,113593,113603,113613],{},[296,113584,113585,113590],{},[342,113586,113587],{"align":23765},[139,113588,113589],{},"reset()",[342,113591,113592],{"align":23765},"重置环境",[296,113594,113595,113600],{},[342,113596,113597],{"align":23765},[139,113598,113599],{},"step(action)",[342,113601,113602],{"align":23765},"执行动作",[296,113604,113605,113610],{},[342,113606,113607],{"align":23765},[139,113608,113609],{},"observation_space",[342,113611,113612],{"align":23765},"观测空间",[296,113614,113615,113620],{},[342,113616,113617],{"align":23765},[139,113618,113619],{},"action_space",[342,113621,23683],{"align":23765},[14,113623,113624],{},"一个最小环境需要完成:",[133,113626,113629],{"className":113627,"code":113628,"language":5216,"meta":31},[5214],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[139,113630,113628],{"__ignoreMap":31},[113,113632,113634,101027,113637,104647],{"id":113633},"terminated-和-truncated-的区别",[139,113635,113636],{},"terminated",[139,113638,113639],{},"truncated",[14,113641,113642],{},"Gymnasium 把“结束”拆成两个概念：",[290,113644,113645,113655],{},[293,113646,113647],{},[296,113648,113649,113651,113653],{},[299,113650,104583],{"align":23765},[299,113652,100709],{"align":23765},[299,113654,21216],{"align":23765},[337,113656,113657,113669],{},[296,113658,113659,113663,113666],{},[342,113660,113661],{"align":23765},[139,113662,113636],{},[342,113664,113665],{"align":23765},"任务自然结束",[342,113667,113668],{"align":23765},"机械臂到达目标、机器人摔倒",[296,113670,113671,113675,113678],{},[342,113672,113673],{"align":23765},[139,113674,113639],{},[342,113676,113677],{"align":23765},"因外部限制截断",[342,113679,113680],{"align":23765},"达到最大步数、时间限制",[14,113682,113683],{},"本章中：",[133,113685,113687],{"className":30407,"code":113686,"language":30409,"meta":31,"style":31},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[139,113688,113689,113704],{"__ignoreMap":31},[142,113690,113691,113694,113696,113699,113701],{"class":144,"line":145},[142,113692,113693],{"class":152},"terminated ",[142,113695,198],{"class":148},[142,113697,113698],{"class":152}," dist ",[142,113700,1063],{"class":148},[142,113702,113703],{"class":201}," 0.05\n",[142,113705,113706,113709,113711,113713,113716,113718,113720],{"class":144,"line":64},[142,113707,113708],{"class":152},"truncated ",[142,113710,198],{"class":148},[142,113712,38902],{"class":201},[142,113714,113715],{"class":152},".steps ",[142,113717,1738],{"class":148},[142,113719,38902],{"class":201},[142,113721,113722],{"class":152},".max_steps\n",[14,113724,113725],{},"也就是：",[96,113727,113728,113731],{},[99,113729,113730],{},"末端距离目标小于 0.05，任务成功结束。",[99,113732,113733],{},"步数超过上限，episode 被截断。",[113,113735,113737,101027,113739],{"id":113736},"observation_space-和-action_space",[139,113738,113609],{},[139,113740,113619],{},[14,113742,113743],{},"这两个对象告诉算法：",[133,113745,113748],{"className":113746,"code":113747,"language":5216,"meta":31},[5214],"观测长什么样\n动作允许多大\n",[139,113749,113747],{"__ignoreMap":31},[14,113751,14662],{},[133,113753,113755],{"className":30407,"code":113754,"language":30409,"meta":31,"style":31},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[139,113756,113757],{"__ignoreMap":31},[142,113758,113759,113761,113764,113766,113769,113772,113775,113777,113779,113782,113784,113786,113788,113790,113792,113794,113796,113799,113801,113803],{"class":144,"line":145},[142,113760,30852],{"class":201},[142,113762,113763],{"class":152},".action_space ",[142,113765,198],{"class":148},[142,113767,113768],{"class":152}," spaces.Box(",[142,113770,113771],{"class":5245},"low",[142,113773,113774],{"class":148},"=-",[142,113776,102412],{"class":201},[142,113778,12464],{"class":152},[142,113780,113781],{"class":5245},"high",[142,113783,198],{"class":148},[142,113785,102412],{"class":201},[142,113787,12464],{"class":152},[142,113789,95972],{"class":5245},[142,113791,198],{"class":148},[142,113793,153],{"class":152},[142,113795,230],{"class":201},[142,113797,113798],{"class":152},",), ",[142,113800,93529],{"class":5245},[142,113802,198],{"class":148},[142,113804,113805],{"class":152},"np.float32)\n",[14,113807,113808,113809,113812],{},"表示动作是 2 维数组，每个值都在 ",[139,113810,113811],{},"[-1, 1]"," 范围内。",[133,113814,113816],{"className":30407,"code":113815,"language":30409,"meta":31,"style":31},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[139,113817,113818],{"__ignoreMap":31},[142,113819,113820,113822,113825,113827,113829,113831,113833,113836,113838,113840,113842,113844,113846,113848,113850,113852,113854,113856],{"class":144,"line":145},[142,113821,30852],{"class":201},[142,113823,113824],{"class":152},".observation_space ",[142,113826,198],{"class":148},[142,113828,113768],{"class":152},[142,113830,113771],{"class":5245},[142,113832,113774],{"class":148},[142,113834,113835],{"class":152},"np.inf, ",[142,113837,113781],{"class":5245},[142,113839,198],{"class":148},[142,113841,113835],{"class":152},[142,113843,95972],{"class":5245},[142,113845,198],{"class":148},[142,113847,153],{"class":152},[142,113849,599],{"class":201},[142,113851,113798],{"class":152},[142,113853,93529],{"class":5245},[142,113855,198],{"class":148},[142,113857,113805],{"class":152},[14,113859,113860],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[113,113862,113864],{"id":113863},"frame_skip-是什么","frame_skip 是什么",[133,113866,113868],{"className":30407,"code":113867,"language":30409,"meta":31,"style":31},"self.frame_skip = 5\n",[139,113869,113870],{"__ignoreMap":31},[142,113871,113872,113874,113877,113879],{"class":144,"line":145},[142,113873,30852],{"class":201},[142,113875,113876],{"class":152},".frame_skip ",[142,113878,198],{"class":148},[142,113880,54456],{"class":201},[14,113882,113883,113884,113887,113888,113890],{},"表示外部调用一次 ",[139,113885,113886],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[139,113889,101224],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[84,113892,101262],{"id":101261},[133,113894,113896],{"className":30407,"code":113895,"language":30409,"meta":31,"style":31},"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",[139,113897,113898,113910,113916,113926,113937,113941,113945,113953,113958,113962,113966,113970,113974,113978,113982,113986,113991,113995,113999,114003,114008,114012,114016,114020,114024,114028,114032,114036,114040,114044,114048,114052,114056,114060,114078,114093,114097,114110,114120,114135,114152,114156,114177,114196,114221,114235,114239,114249,114261,114271,114275,114317,114355,114359,114369,114385,114400,114419,114426,114430,114443,114458,114473,114486,114505,114521,114525,114566,114581,114596,114600,114639,114650,114663,114667,114677,114686,114690,114700,114715,114733,114737,114748,114765,114778,114782,114792,114796,114807,114818,114822,114836,114850,114866,114870,114883,114900,114915,114922,114926,114930,114942,114952,114970,114982,114994,114998,115006,115022,115031,115040,115048,115090,115103,115108,115112,115130,115134,115138,115150],{"__ignoreMap":31},[142,113899,113900,113902,113905,113907],{"class":144,"line":145},[142,113901,30421],{"class":148},[142,113903,113904],{"class":152}," gymnasium ",[142,113906,31412],{"class":148},[142,113908,113909],{"class":152}," gym\n",[142,113911,113912,113914],{"class":144,"line":64},[142,113913,30421],{"class":148},[142,113915,101310],{"class":152},[142,113917,113918,113920,113922,113924],{"class":144,"line":1208},[142,113919,30421],{"class":148},[142,113921,31409],{"class":152},[142,113923,31412],{"class":148},[142,113925,31415],{"class":152},[142,113927,113928,113930,113932,113934],{"class":144,"line":1223},[142,113929,30766],{"class":148},[142,113931,113904],{"class":152},[142,113933,30421],{"class":148},[142,113935,113936],{"class":152}," spaces\n",[142,113938,113939],{"class":144,"line":1229},[142,113940,2428],{"emptyLinePlaceholder":69},[142,113942,113943],{"class":144,"line":1243},[142,113944,2428],{"emptyLinePlaceholder":69},[142,113946,113947,113949,113951],{"class":144,"line":1249},[142,113948,101323],{"class":201},[142,113950,13593],{"class":148},[142,113952,101328],{"class":257},[142,113954,113955],{"class":144,"line":1340},[142,113956,113957],{"class":257},"\u003Cmujoco model=\"gym_reacher\">\n",[142,113959,113960],{"class":144,"line":1346},[142,113961,111747],{"class":257},[142,113963,113964],{"class":144,"line":1358},[142,113965,2428],{"emptyLinePlaceholder":69},[142,113967,113968],{"class":144,"line":1640},[142,113969,101347],{"class":257},[142,113971,113972],{"class":144,"line":1645},[142,113973,111765],{"class":257},[142,113975,113976],{"class":144,"line":1651},[142,113977,2428],{"emptyLinePlaceholder":69},[142,113979,113980],{"class":144,"line":1656},[142,113981,111774],{"class":257},[142,113983,113984],{"class":144,"line":1670},[142,113985,111779],{"class":257},[142,113987,113988],{"class":144,"line":1675},[142,113989,113990],{"class":257},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[142,113992,113993],{"class":144,"line":1681},[142,113994,2428],{"emptyLinePlaceholder":69},[142,113996,113997],{"class":144,"line":1702},[142,113998,111793],{"class":257},[142,114000,114001],{"class":144,"line":1707},[142,114002,111798],{"class":257},[142,114004,114005],{"class":144,"line":1721},[142,114006,114007],{"class":257},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[142,114009,114010],{"class":144,"line":1726},[142,114011,111808],{"class":257},[142,114013,114014],{"class":144,"line":1755},[142,114015,106447],{"class":257},[142,114017,114018],{"class":144,"line":1760},[142,114019,101376],{"class":257},[142,114021,114022],{"class":144,"line":1777},[142,114023,101381],{"class":257},[142,114025,114026],{"class":144,"line":1782},[142,114027,2428],{"emptyLinePlaceholder":69},[142,114029,114030],{"class":144,"line":1787},[142,114031,106464],{"class":257},[142,114033,114034],{"class":144,"line":1792},[142,114035,111833],{"class":257},[142,114037,114038],{"class":144,"line":1806},[142,114039,111838],{"class":257},[142,114041,114042],{"class":144,"line":1811},[142,114043,106474],{"class":257},[142,114045,114046],{"class":144,"line":2605},[142,114047,101386],{"class":257},[142,114049,114050],{"class":144,"line":2619},[142,114051,95707],{"class":257},[142,114053,114054],{"class":144,"line":2627},[142,114055,2428],{"emptyLinePlaceholder":69},[142,114057,114058],{"class":144,"line":2632},[142,114059,2428],{"emptyLinePlaceholder":69},[142,114061,114062,114064,114067,114069,114071,114073,114076],{"class":144,"line":2638},[142,114063,14723],{"class":148},[142,114065,114066],{"class":1991}," ReacherEnv",[142,114068,153],{"class":152},[142,114070,113549],{"class":1991},[142,114072,711],{"class":152},[142,114074,114075],{"class":1991},"Env",[142,114077,30815],{"class":152},[142,114079,114080,114083,114085,114087,114090],{"class":144,"line":2644},[142,114081,114082],{"class":152},"    metadata ",[142,114084,198],{"class":148},[142,114086,4476],{"class":152},[142,114088,114089],{"class":257},"\"render_modes\"",[142,114091,114092],{"class":152},": []}\n",[142,114094,114095],{"class":144,"line":2649},[142,114096,2428],{"emptyLinePlaceholder":69},[142,114098,114099,114101,114103,114106,114108],{"class":144,"line":7977},[142,114100,30830],{"class":148},[142,114102,30833],{"class":201},[142,114104,114105],{"class":152},"(self) -> ",[142,114107,95695],{"class":201},[142,114109,3767],{"class":152},[142,114111,114112,114114,114116,114118],{"class":144,"line":8001},[142,114113,30846],{"class":201},[142,114115,17290],{"class":152},[142,114117,30858],{"class":201},[142,114119,2004],{"class":152},[142,114121,114122,114124,114127,114129,114131,114133],{"class":144,"line":8006},[142,114123,30874],{"class":201},[142,114125,114126],{"class":152},".model ",[142,114128,198],{"class":148},[142,114130,101421],{"class":152},[142,114132,101323],{"class":201},[142,114134,159],{"class":152},[142,114136,114137,114139,114142,114144,114147,114149],{"class":144,"line":8012},[142,114138,30874],{"class":201},[142,114140,114141],{"class":152},".data ",[142,114143,198],{"class":148},[142,114145,114146],{"class":152}," mujoco.MjData(",[142,114148,30852],{"class":201},[142,114150,114151],{"class":152},".model)\n",[142,114153,114154],{"class":144,"line":8039},[142,114155,2428],{"emptyLinePlaceholder":69},[142,114157,114158,114160,114163,114165,114168,114170,114173,114175],{"class":144,"line":8044},[142,114159,30874],{"class":201},[142,114161,114162],{"class":152},".tip_site_id ",[142,114164,198],{"class":148},[142,114166,114167],{"class":152}," mujoco.mj_name2id(",[142,114169,30852],{"class":201},[142,114171,114172],{"class":152},".model, mujoco.mjtObj.mjOBJ_SITE, ",[142,114174,111545],{"class":257},[142,114176,159],{"class":152},[142,114178,114179,114181,114184,114186,114188,114190,114192,114194],{"class":144,"line":8050},[142,114180,30874],{"class":201},[142,114182,114183],{"class":152},".target_site_id ",[142,114185,198],{"class":148},[142,114187,114167],{"class":152},[142,114189,30852],{"class":201},[142,114191,114172],{"class":152},[142,114193,111968],{"class":257},[142,114195,159],{"class":152},[142,114197,114198,114200,114202,114204,114206,114208,114211,114213,114215,114217,114219],{"class":144,"line":8062},[142,114199,2525],{"class":148},[142,114201,38902],{"class":201},[142,114203,114162],{"class":152},[142,114205,1063],{"class":148},[142,114207,4121],{"class":201},[142,114209,114210],{"class":148}," or",[142,114212,38902],{"class":201},[142,114214,114183],{"class":152},[142,114216,1063],{"class":148},[142,114218,4121],{"class":201},[142,114220,3767],{"class":152},[142,114222,114223,114226,114228,114230,114233],{"class":144,"line":8074},[142,114224,114225],{"class":148},"            raise",[142,114227,103444],{"class":201},[142,114229,153],{"class":152},[142,114231,114232],{"class":257},"\"required sites not found\"",[142,114234,159],{"class":152},[142,114236,114237],{"class":144,"line":8086},[142,114238,2428],{"emptyLinePlaceholder":69},[142,114240,114241,114243,114245,114247],{"class":144,"line":9745},[142,114242,30874],{"class":201},[142,114244,113876],{"class":152},[142,114246,198],{"class":148},[142,114248,54456],{"class":201},[142,114250,114251,114253,114256,114258],{"class":144,"line":9770},[142,114252,30874],{"class":201},[142,114254,114255],{"class":152},".max_steps ",[142,114257,198],{"class":148},[142,114259,114260],{"class":201}," 200\n",[142,114262,114263,114265,114267,114269],{"class":144,"line":9793},[142,114264,30874],{"class":201},[142,114266,113715],{"class":152},[142,114268,198],{"class":148},[142,114270,47362],{"class":201},[142,114272,114273],{"class":144,"line":9817},[142,114274,2428],{"emptyLinePlaceholder":69},[142,114276,114277,114279,114281,114283,114285,114287,114289,114291,114293,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315],{"class":144,"line":9822},[142,114278,30874],{"class":201},[142,114280,113763],{"class":152},[142,114282,198],{"class":148},[142,114284,113768],{"class":152},[142,114286,113771],{"class":5245},[142,114288,113774],{"class":148},[142,114290,102412],{"class":201},[142,114292,12464],{"class":152},[142,114294,113781],{"class":5245},[142,114296,198],{"class":148},[142,114298,102412],{"class":201},[142,114300,12464],{"class":152},[142,114302,95972],{"class":5245},[142,114304,198],{"class":148},[142,114306,153],{"class":152},[142,114308,230],{"class":201},[142,114310,113798],{"class":152},[142,114312,93529],{"class":5245},[142,114314,198],{"class":148},[142,114316,113805],{"class":152},[142,114318,114319,114321,114323,114325,114327,114329,114331,114333,114335,114337,114339,114341,114343,114345,114347,114349,114351,114353],{"class":144,"line":9827},[142,114320,30874],{"class":201},[142,114322,113824],{"class":152},[142,114324,198],{"class":148},[142,114326,113768],{"class":152},[142,114328,113771],{"class":5245},[142,114330,113774],{"class":148},[142,114332,113835],{"class":152},[142,114334,113781],{"class":5245},[142,114336,198],{"class":148},[142,114338,113835],{"class":152},[142,114340,95972],{"class":5245},[142,114342,198],{"class":148},[142,114344,153],{"class":152},[142,114346,599],{"class":201},[142,114348,113798],{"class":152},[142,114350,93529],{"class":5245},[142,114352,198],{"class":148},[142,114354,113805],{"class":152},[142,114356,114357],{"class":144,"line":9832},[142,114358,2428],{"emptyLinePlaceholder":69},[142,114360,114361,114363,114366],{"class":144,"line":9841},[142,114362,30830],{"class":148},[142,114364,114365],{"class":1991}," _get_obs",[142,114367,114368],{"class":152},"(self) -> np.ndarray:\n",[142,114370,114371,114373,114375,114377,114380,114382],{"class":144,"line":9846},[142,114372,112146],{"class":152},[142,114374,198],{"class":148},[142,114376,38902],{"class":201},[142,114378,114379],{"class":152},".data.site_xpos[",[142,114381,30852],{"class":201},[142,114383,114384],{"class":152},".tip_site_id].copy()\n",[142,114386,114387,114389,114391,114393,114395,114397],{"class":144,"line":9852},[142,114388,112159],{"class":152},[142,114390,198],{"class":148},[142,114392,38902],{"class":201},[142,114394,114379],{"class":152},[142,114396,30852],{"class":201},[142,114398,114399],{"class":152},".target_site_id].copy()\n",[142,114401,114402,114404,114406,114409,114411,114414,114416],{"class":144,"line":9873},[142,114403,110191],{"class":152},[142,114405,198],{"class":148},[142,114407,114408],{"class":152}," np.concatenate([",[142,114410,30852],{"class":201},[142,114412,114413],{"class":152},".data.qpos.copy(), ",[142,114415,30852],{"class":201},[142,114417,114418],{"class":152},".data.qvel.copy(), tip, target])\n",[142,114420,114421,114423],{"class":144,"line":9879},[142,114422,14781],{"class":148},[142,114424,114425],{"class":152}," obs.astype(np.float32)\n",[142,114427,114428],{"class":144,"line":9893},[142,114429,2428],{"emptyLinePlaceholder":69},[142,114431,114432,114434,114437,114439,114441],{"class":144,"line":9899},[142,114433,30830],{"class":148},[142,114435,114436],{"class":1991}," _get_reward",[142,114438,114105],{"class":152},[142,114440,192],{"class":201},[142,114442,3767],{"class":152},[142,114444,114445,114447,114449,114451,114453,114455],{"class":144,"line":9926},[142,114446,112146],{"class":152},[142,114448,198],{"class":148},[142,114450,38902],{"class":201},[142,114452,114379],{"class":152},[142,114454,30852],{"class":201},[142,114456,114457],{"class":152},".tip_site_id]\n",[142,114459,114460,114462,114464,114466,114468,114470],{"class":144,"line":9935},[142,114461,112159],{"class":152},[142,114463,198],{"class":148},[142,114465,38902],{"class":201},[142,114467,114379],{"class":152},[142,114469,30852],{"class":201},[142,114471,114472],{"class":152},".target_site_id]\n",[142,114474,114475,114478,114480,114482,114484],{"class":144,"line":9941},[142,114476,114477],{"class":152},"        dist ",[142,114479,198],{"class":148},[142,114481,111610],{"class":152},[142,114483,685],{"class":148},[142,114485,111615],{"class":152},[142,114487,114488,114491,114493,114495,114497,114500,114502],{"class":144,"line":9949},[142,114489,114490],{"class":152},"        control_cost ",[142,114492,198],{"class":148},[142,114494,112046],{"class":201},[142,114496,6547],{"class":148},[142,114498,114499],{"class":152}," np.sum(np.square(",[142,114501,30852],{"class":201},[142,114503,114504],{"class":152},".data.ctrl))\n",[142,114506,114507,114509,114511,114513,114515,114517,114519],{"class":144,"line":9954},[142,114508,14781],{"class":148},[142,114510,109806],{"class":201},[142,114512,153],{"class":152},[142,114514,685],{"class":148},[142,114516,111605],{"class":152},[142,114518,685],{"class":148},[142,114520,112068],{"class":152},[142,114522,114523],{"class":144,"line":16633},[142,114524,2428],{"emptyLinePlaceholder":69},[142,114526,114527,114529,114532,114535,114537,114540,114542,114544,114546,114548,114550,114553,114556,114558,114560,114562,114564],{"class":144,"line":16639},[142,114528,30830],{"class":148},[142,114530,114531],{"class":1991}," reset",[142,114533,114534],{"class":152},"(self, ",[142,114536,608],{"class":148},[142,114538,114539],{"class":152},", seed: ",[142,114541,156],{"class":201},[142,114543,25138],{"class":148},[142,114545,38962],{"class":201},[142,114547,13593],{"class":148},[142,114549,38962],{"class":201},[142,114551,114552],{"class":152},", options: ",[142,114554,114555],{"class":201},"dict",[142,114557,25138],{"class":148},[142,114559,38962],{"class":201},[142,114561,13593],{"class":148},[142,114563,38962],{"class":201},[142,114565,30815],{"class":152},[142,114567,114568,114570,114573,114576,114578],{"class":144,"line":16662},[142,114569,30846],{"class":201},[142,114571,114572],{"class":152},"().reset(",[142,114574,114575],{"class":5245},"seed",[142,114577,198],{"class":148},[142,114579,114580],{"class":152},"seed)\n",[142,114582,114583,114586,114588,114591,114593],{"class":144,"line":16668},[142,114584,114585],{"class":152},"        mujoco.mj_resetData(",[142,114587,30852],{"class":201},[142,114589,114590],{"class":152},".model, ",[142,114592,30852],{"class":201},[142,114594,114595],{"class":152},".data)\n",[142,114597,114598],{"class":144,"line":16691},[142,114599,2428],{"emptyLinePlaceholder":69},[142,114601,114602,114604,114607,114609,114611,114614,114616,114618,114620,114622,114624,114626,114628,114630,114632,114634,114636],{"class":144,"line":16705},[142,114603,30874],{"class":201},[142,114605,114606],{"class":152},".data.qpos[:] ",[142,114608,198],{"class":148},[142,114610,38902],{"class":201},[142,114612,114613],{"class":152},".np_random.uniform(",[142,114615,113771],{"class":5245},[142,114617,113774],{"class":148},[142,114619,86239],{"class":201},[142,114621,12464],{"class":152},[142,114623,113781],{"class":5245},[142,114625,198],{"class":148},[142,114627,86239],{"class":201},[142,114629,12464],{"class":152},[142,114631,31525],{"class":5245},[142,114633,198],{"class":148},[142,114635,30852],{"class":201},[142,114637,114638],{"class":152},".model.nq)\n",[142,114640,114641,114643,114646,114648],{"class":144,"line":16725},[142,114642,30874],{"class":201},[142,114644,114645],{"class":152},".data.qvel[:] ",[142,114647,198],{"class":148},[142,114649,104770],{"class":201},[142,114651,114652,114655,114657,114659,114661],{"class":144,"line":16731},[142,114653,114654],{"class":152},"        mujoco.mj_forward(",[142,114656,30852],{"class":201},[142,114658,114590],{"class":152},[142,114660,30852],{"class":201},[142,114662,114595],{"class":152},[142,114664,114665],{"class":144,"line":16742},[142,114666,2428],{"emptyLinePlaceholder":69},[142,114668,114669,114671,114673,114675],{"class":144,"line":16765},[142,114670,30874],{"class":201},[142,114672,113715],{"class":152},[142,114674,198],{"class":148},[142,114676,47362],{"class":201},[142,114678,114679,114681,114683],{"class":144,"line":16787},[142,114680,14781],{"class":148},[142,114682,38902],{"class":201},[142,114684,114685],{"class":152},"._get_obs(), {}\n",[142,114687,114688],{"class":144,"line":16792},[142,114689,2428],{"emptyLinePlaceholder":69},[142,114691,114692,114694,114697],{"class":144,"line":16798},[142,114693,30830],{"class":148},[142,114695,114696],{"class":1991}," step",[142,114698,114699],{"class":152},"(self, action):\n",[142,114701,114702,114704,114706,114709,114711,114713],{"class":144,"line":16812},[142,114703,110231],{"class":152},[142,114705,198],{"class":148},[142,114707,114708],{"class":152}," np.asarray(action, ",[142,114710,93529],{"class":5245},[142,114712,198],{"class":148},[142,114714,113805],{"class":152},[142,114716,114717,114719,114721,114723,114725,114728,114730],{"class":144,"line":16825},[142,114718,110231],{"class":152},[142,114720,198],{"class":148},[142,114722,107456],{"class":152},[142,114724,30852],{"class":201},[142,114726,114727],{"class":152},".action_space.low, ",[142,114729,30852],{"class":201},[142,114731,114732],{"class":152},".action_space.high)\n",[142,114734,114735],{"class":144,"line":16830},[142,114736,2428],{"emptyLinePlaceholder":69},[142,114738,114739,114741,114744,114746],{"class":144,"line":16844},[142,114740,30874],{"class":201},[142,114742,114743],{"class":152},".data.ctrl[:] ",[142,114745,198],{"class":148},[142,114747,107479],{"class":152},[142,114749,114750,114752,114754,114756,114758,114760,114762],{"class":144,"line":16849},[142,114751,3431],{"class":148},[142,114753,101510],{"class":152},[142,114755,26072],{"class":148},[142,114757,32472],{"class":201},[142,114759,153],{"class":152},[142,114761,30852],{"class":201},[142,114763,114764],{"class":152},".frame_skip):\n",[142,114766,114767,114770,114772,114774,114776],{"class":144,"line":16855},[142,114768,114769],{"class":152},"            mujoco.mj_step(",[142,114771,30852],{"class":201},[142,114773,114590],{"class":152},[142,114775,30852],{"class":201},[142,114777,114595],{"class":152},[142,114779,114780],{"class":144,"line":16860},[142,114781,2428],{"emptyLinePlaceholder":69},[142,114783,114784,114786,114788,114790],{"class":144,"line":16874},[142,114785,30874],{"class":201},[142,114787,113715],{"class":152},[142,114789,9506],{"class":148},[142,114791,55728],{"class":201},[142,114793,114794],{"class":144,"line":16879},[142,114795,2428],{"emptyLinePlaceholder":69},[142,114797,114798,114800,114802,114804],{"class":144,"line":16884},[142,114799,110191],{"class":152},[142,114801,198],{"class":148},[142,114803,38902],{"class":201},[142,114805,114806],{"class":152},"._get_obs()\n",[142,114808,114809,114811,114813,114815],{"class":144,"line":16898},[142,114810,110296],{"class":152},[142,114812,198],{"class":148},[142,114814,38902],{"class":201},[142,114816,114817],{"class":152},"._get_reward()\n",[142,114819,114820],{"class":144,"line":16910},[142,114821,2428],{"emptyLinePlaceholder":69},[142,114823,114824,114826,114828,114830,114832,114834],{"class":144,"line":16915},[142,114825,112146],{"class":152},[142,114827,198],{"class":148},[142,114829,38902],{"class":201},[142,114831,114379],{"class":152},[142,114833,30852],{"class":201},[142,114835,114457],{"class":152},[142,114837,114838,114840,114842,114844,114846,114848],{"class":144,"line":16928},[142,114839,112159],{"class":152},[142,114841,198],{"class":148},[142,114843,38902],{"class":201},[142,114845,114379],{"class":152},[142,114847,30852],{"class":201},[142,114849,114472],{"class":152},[142,114851,114852,114854,114856,114858,114861,114863],{"class":144,"line":16933},[142,114853,114477],{"class":152},[142,114855,198],{"class":148},[142,114857,109806],{"class":201},[142,114859,114860],{"class":152},"(np.linalg.norm(tip ",[142,114862,685],{"class":148},[142,114864,114865],{"class":152}," target))\n",[142,114867,114868],{"class":144,"line":16938},[142,114869,2428],{"emptyLinePlaceholder":69},[142,114871,114872,114875,114877,114879,114881],{"class":144,"line":16943},[142,114873,114874],{"class":152},"        terminated ",[142,114876,198],{"class":148},[142,114878,113698],{"class":152},[142,114880,1063],{"class":148},[142,114882,113703],{"class":201},[142,114884,114885,114888,114890,114892,114894,114896,114898],{"class":144,"line":16956},[142,114886,114887],{"class":152},"        truncated ",[142,114889,198],{"class":148},[142,114891,38902],{"class":201},[142,114893,113715],{"class":152},[142,114895,1738],{"class":148},[142,114897,38902],{"class":201},[142,114899,113722],{"class":152},[142,114901,114902,114905,114907,114909,114912],{"class":144,"line":16961},[142,114903,114904],{"class":152},"        info ",[142,114906,198],{"class":148},[142,114908,4476],{"class":152},[142,114910,114911],{"class":257},"\"distance\"",[142,114913,114914],{"class":152},": dist}\n",[142,114916,114917,114919],{"class":144,"line":32662},[142,114918,14781],{"class":148},[142,114920,114921],{"class":152}," obs, reward, terminated, truncated, info\n",[142,114923,114924],{"class":144,"line":32668},[142,114925,2428],{"emptyLinePlaceholder":69},[142,114927,114928],{"class":144,"line":32674},[142,114929,2428],{"emptyLinePlaceholder":69},[142,114931,114932,114934,114936,114938,114940],{"class":144,"line":32680},[142,114933,31976],{"class":148},[142,114935,2001],{"class":1991},[142,114937,101407],{"class":152},[142,114939,95695],{"class":201},[142,114941,3767],{"class":152},[142,114943,114944,114947,114949],{"class":144,"line":32686},[142,114945,114946],{"class":152},"    env ",[142,114948,198],{"class":148},[142,114950,114951],{"class":152}," ReacherEnv()\n",[142,114953,114954,114957,114959,114962,114964,114966,114968],{"class":144,"line":32697},[142,114955,114956],{"class":152},"    obs, info ",[142,114958,198],{"class":148},[142,114960,114961],{"class":152}," env.reset(",[142,114963,114575],{"class":5245},[142,114965,198],{"class":148},[142,114967,344],{"class":201},[142,114969,159],{"class":152},[142,114971,114972,114974,114976,114979],{"class":144,"line":32703},[142,114973,31328],{"class":201},[142,114975,153],{"class":152},[142,114977,114978],{"class":257},"\"initial obs shape:\"",[142,114980,114981],{"class":152},", obs.shape)\n",[142,114983,114984,114986,114988,114991],{"class":144,"line":32723},[142,114985,31328],{"class":201},[142,114987,153],{"class":152},[142,114989,114990],{"class":257},"\"initial info:\"",[142,114992,114993],{"class":152},", info)\n",[142,114995,114996],{"class":144,"line":32729},[142,114997,2428],{"emptyLinePlaceholder":69},[142,114999,115000,115002,115004],{"class":144,"line":32740},[142,115001,110162],{"class":152},[142,115003,198],{"class":148},[142,115005,104770],{"class":201},[142,115007,115008,115010,115012,115014,115016,115018,115020],{"class":144,"line":32746},[142,115009,3229],{"class":148},[142,115011,31645],{"class":152},[142,115013,26072],{"class":148},[142,115015,32472],{"class":201},[142,115017,153],{"class":152},[142,115019,853],{"class":201},[142,115021,30815],{"class":152},[142,115023,115024,115026,115028],{"class":144,"line":32752},[142,115025,110231],{"class":152},[142,115027,198],{"class":148},[142,115029,115030],{"class":152}," env.action_space.sample()\n",[142,115032,115033,115036,115038],{"class":144,"line":32758},[142,115034,115035],{"class":152},"        obs, reward, terminated, truncated, info ",[142,115037,198],{"class":148},[142,115039,113424],{"class":152},[142,115041,115042,115044,115046],{"class":144,"line":32764},[142,115043,110306],{"class":152},[142,115045,9506],{"class":148},[142,115047,110311],{"class":152},[142,115049,115050,115052,115054,115056,115058,115061,115063,115065,115068,115070,115072,115075,115077,115079,115082,115084,115086,115088],{"class":144,"line":32770},[142,115051,32480],{"class":201},[142,115053,153],{"class":152},[142,115055,110340],{"class":257},[142,115057,110343],{"class":152},[142,115059,115060],{"class":257},"\"reward:\"",[142,115062,12464],{"class":152},[142,115064,32047],{"class":201},[142,115066,115067],{"class":152},"(reward, ",[142,115069,224],{"class":201},[142,115071,110354],{"class":152},[142,115073,115074],{"class":257},"\"distance:\"",[142,115076,12464],{"class":152},[142,115078,32047],{"class":201},[142,115080,115081],{"class":152},"(info[",[142,115083,114911],{"class":257},[142,115085,112211],{"class":152},[142,115087,224],{"class":201},[142,115089,30526],{"class":152},[142,115091,115092,115094,115097,115100],{"class":144,"line":32776},[142,115093,2525],{"class":148},[142,115095,115096],{"class":152}," terminated ",[142,115098,115099],{"class":148},"or",[142,115101,115102],{"class":152}," truncated:\n",[142,115104,115105],{"class":144,"line":32782},[142,115106,115107],{"class":148},"            break\n",[142,115109,115110],{"class":144,"line":32802},[142,115111,2428],{"emptyLinePlaceholder":69},[142,115113,115114,115116,115118,115120,115122,115124,115126,115128],{"class":144,"line":32808},[142,115115,31328],{"class":201},[142,115117,153],{"class":152},[142,115119,110385],{"class":257},[142,115121,12464],{"class":152},[142,115123,32047],{"class":201},[142,115125,110392],{"class":152},[142,115127,224],{"class":201},[142,115129,30526],{"class":152},[142,115131,115132],{"class":144,"line":32824},[142,115133,2428],{"emptyLinePlaceholder":69},[142,115135,115136],{"class":144,"line":32830},[142,115137,2428],{"emptyLinePlaceholder":69},[142,115139,115140,115142,115144,115146,115148],{"class":144,"line":32844},[142,115141,1559],{"class":148},[142,115143,31249],{"class":201},[142,115145,101568],{"class":148},[142,115147,101571],{"class":257},[142,115149,3767],{"class":152},[142,115151,115152],{"class":144,"line":32850},[142,115153,101578],{"class":152},[14,115155,103579],{},[133,115157,115159],{"className":23851,"code":115158,"language":23853,"meta":31,"style":31},"touch ch8_gym_env.py\n",[139,115160,115161],{"__ignoreMap":31},[142,115162,115163,115165],{"class":144,"line":145},[142,115164,101292],{"class":1991},[142,115166,115167],{"class":257}," ch8_gym_env.py\n",[14,115169,110453],{},[133,115171,115173],{"className":23851,"code":115172,"language":23853,"meta":31,"style":31},"python ch8_gym_env.py\n",[139,115174,115175],{"__ignoreMap":31},[142,115176,115177,115179],{"class":144,"line":145},[142,115178,30409],{"class":1991},[142,115180,115167],{"class":257},[113,115182,101581],{"id":101581},[14,115184,115185],{},"继承 Gymnasium 环境：",[133,115187,115189],{"className":30407,"code":115188,"language":30409,"meta":31,"style":31},"class ReacherEnv(gym.Env):\n",[139,115190,115191],{"__ignoreMap":31},[142,115192,115193,115195,115197,115199,115201,115203,115205],{"class":144,"line":145},[142,115194,14723],{"class":148},[142,115196,114066],{"class":1991},[142,115198,153],{"class":152},[142,115200,113549],{"class":1991},[142,115202,711],{"class":152},[142,115204,114075],{"class":1991},[142,115206,30815],{"class":152},[14,115208,115209],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115211,115212],{},"初始化模型：",[133,115214,115216],{"className":30407,"code":115215,"language":30409,"meta":31,"style":31},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[139,115217,115218,115232],{"__ignoreMap":31},[142,115219,115220,115222,115224,115226,115228,115230],{"class":144,"line":145},[142,115221,30852],{"class":201},[142,115223,114126],{"class":152},[142,115225,198],{"class":148},[142,115227,101421],{"class":152},[142,115229,101323],{"class":201},[142,115231,159],{"class":152},[142,115233,115234,115236,115238,115240,115242,115244],{"class":144,"line":64},[142,115235,30852],{"class":201},[142,115237,114141],{"class":152},[142,115239,198],{"class":148},[142,115241,114146],{"class":152},[142,115243,30852],{"class":201},[142,115245,114151],{"class":152},[14,115247,115248,115249,115251],{},"这和前面章节一样，只是现在放到了类的 ",[139,115250,30858],{}," 里。",[14,115253,115254],{},"缓存 site ID：",[133,115256,115258],{"className":30407,"code":115257,"language":30409,"meta":31,"style":31},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[139,115259,115260,115274],{"__ignoreMap":31},[142,115261,115262,115264,115266,115268,115270,115272],{"class":144,"line":145},[142,115263,30852],{"class":201},[142,115265,114162],{"class":152},[142,115267,198],{"class":148},[142,115269,114167],{"class":152},[142,115271,89583],{"class":201},[142,115273,159],{"class":152},[142,115275,115276,115278,115280,115282,115284,115286],{"class":144,"line":64},[142,115277,30852],{"class":201},[142,115279,114183],{"class":152},[142,115281,198],{"class":148},[142,115283,114167],{"class":152},[142,115285,89583],{"class":201},[142,115287,159],{"class":152},[14,115289,115290],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115292,115293],{},"reset：",[133,115295,115297],{"className":30407,"code":115296,"language":30409,"meta":31,"style":31},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[139,115298,115299],{"__ignoreMap":31},[142,115300,115301,115303,115305,115307,115309,115311,115313,115315,115317,115319,115321,115323,115325,115327,115329,115331,115333],{"class":144,"line":145},[142,115302,31976],{"class":148},[142,115304,114531],{"class":1991},[142,115306,114534],{"class":152},[142,115308,608],{"class":148},[142,115310,114539],{"class":152},[142,115312,156],{"class":201},[142,115314,25138],{"class":148},[142,115316,38962],{"class":201},[142,115318,13593],{"class":148},[142,115320,38962],{"class":201},[142,115322,114552],{"class":152},[142,115324,114555],{"class":201},[142,115326,25138],{"class":148},[142,115328,38962],{"class":201},[142,115330,13593],{"class":148},[142,115332,38962],{"class":201},[142,115334,30815],{"class":152},[14,115336,115337,115339],{},[139,115338,70085],{}," 做四件事：",[96,115341,115342,115345,115348,115351],{},[99,115343,115344],{},"设置随机种子。",[99,115346,115347],{},"重置 MuJoCo data。",[99,115349,115350],{},"随机初始化关节角。",[99,115352,115353],{},"返回初始观测和 info。",[14,115355,115356],{},"step：",[133,115358,115360],{"className":30407,"code":115359,"language":30409,"meta":31,"style":31},"def step(self, action):\n",[139,115361,115362],{"__ignoreMap":31},[142,115363,115364,115366,115368],{"class":144,"line":145},[142,115365,31976],{"class":148},[142,115367,114696],{"class":1991},[142,115369,114699],{"class":152},[14,115371,115372,115374],{},[139,115373,107143],{}," 做六件事：",[96,115376,115377,115380,115386,115389,115392,115395],{},[99,115378,115379],{},"检查并裁剪 action。",[99,115381,115382,115383,28414],{},"写入 ",[139,115384,115385],{},"self.data.ctrl",[99,115387,115388],{},"连续推进若干个 MuJoCo 物理步。",[99,115390,115391],{},"计算新观测。",[99,115393,115394],{},"计算奖励和结束条件。",[99,115396,115397],{},"返回 Gymnasium 标准五元组。",[113,115399,101717],{"id":101717},[133,115401,115403],{"className":30407,"code":115402,"language":30409,"meta":31,"style":31},"import gymnasium as gym\n",[139,115404,115405],{"__ignoreMap":31},[142,115406,115407,115409,115411,115413],{"class":144,"line":145},[142,115408,30421],{"class":148},[142,115410,113904],{"class":152},[142,115412,31412],{"class":148},[142,115414,113909],{"class":152},[14,115416,115417,115418,115420,115421,115424],{},"导入 Gymnasium，并起别名 ",[139,115419,113549],{},"。后面写 ",[139,115422,115423],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[133,115426,115428],{"className":30407,"code":115427,"language":30409,"meta":31,"style":31},"from gymnasium import spaces\n",[139,115429,115430],{"__ignoreMap":31},[142,115431,115432,115434,115436,115438],{"class":144,"line":145},[142,115433,30766],{"class":148},[142,115435,113904],{"class":152},[142,115437,30421],{"class":148},[142,115439,113936],{"class":152},[14,115441,115442,115443,115446],{},"导入空间定义工具。",[139,115444,115445],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[133,115448,115449],{"className":30407,"code":115188,"language":30409,"meta":31,"style":31},[139,115450,115451],{"__ignoreMap":31},[142,115452,115453,115455,115457,115459,115461,115463,115465],{"class":144,"line":145},[142,115454,14723],{"class":148},[142,115456,114066],{"class":1991},[142,115458,153],{"class":152},[142,115460,113549],{"class":1991},[142,115462,711],{"class":152},[142,115464,114075],{"class":1991},[142,115466,30815],{"class":152},[14,115468,115469,115470,115473,115474,115476,115477,101027,115479,115481],{},"定义一个类，名字叫 ",[139,115471,115472],{},"ReacherEnv","。括号里的 ",[139,115475,115423],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[139,115478,70085],{},[139,115480,107143],{}," 这两个核心方法。",[133,115483,115485],{"className":30407,"code":115484,"language":30409,"meta":31,"style":31},"metadata = {\"render_modes\": []}\n",[139,115486,115487],{"__ignoreMap":31},[142,115488,115489,115492,115494,115496,115498],{"class":144,"line":145},[142,115490,115491],{"class":152},"metadata ",[142,115493,198],{"class":148},[142,115495,4476],{"class":152},[142,115497,114089],{"class":257},[142,115499,114092],{"class":152},[14,115501,115502],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[133,115504,115506],{"className":30407,"code":115505,"language":30409,"meta":31,"style":31},"def __init__(self) -> None:\n",[139,115507,115508],{"__ignoreMap":31},[142,115509,115510,115512,115514,115516,115518],{"class":144,"line":145},[142,115511,31976],{"class":148},[142,115513,30833],{"class":201},[142,115515,114105],{"class":152},[142,115517,95695],{"class":201},[142,115519,3767],{"class":152},[14,115521,115522,115524,115525,28414],{},[139,115523,30858],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[139,115526,115527],{},"env = ReacherEnv()",[133,115529,115531],{"className":30407,"code":115530,"language":30409,"meta":31,"style":31},"super().__init__()\n",[139,115532,115533],{"__ignoreMap":31},[142,115534,115535,115538,115540,115542],{"class":144,"line":145},[142,115536,115537],{"class":201},"super",[142,115539,17290],{"class":152},[142,115541,30858],{"class":201},[142,115543,2004],{"class":152},[14,115545,115546,115547,115549],{},"调用父类 ",[139,115548,115423],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[133,115551,115552],{"className":30407,"code":115215,"language":30409,"meta":31,"style":31},[139,115553,115554,115568],{"__ignoreMap":31},[142,115555,115556,115558,115560,115562,115564,115566],{"class":144,"line":145},[142,115557,30852],{"class":201},[142,115559,114126],{"class":152},[142,115561,198],{"class":148},[142,115563,101421],{"class":152},[142,115565,101323],{"class":201},[142,115567,159],{"class":152},[142,115569,115570,115572,115574,115576,115578,115580],{"class":144,"line":64},[142,115571,30852],{"class":201},[142,115573,114141],{"class":152},[142,115575,198],{"class":148},[142,115577,114146],{"class":152},[142,115579,30852],{"class":201},[142,115581,114151],{"class":152},[14,115583,115584,115585,115587,115588,101027,115591,115594],{},"把 MuJoCo 模型和状态保存到 ",[139,115586,30852],{}," 上。",[139,115589,115590],{},"self.model",[139,115592,115593],{},"self.data"," 表示这个环境对象自己的模型和状态。",[133,115596,115597],{"className":30407,"code":115257,"language":30409,"meta":31,"style":31},[139,115598,115599,115613],{"__ignoreMap":31},[142,115600,115601,115603,115605,115607,115609,115611],{"class":144,"line":145},[142,115602,30852],{"class":201},[142,115604,114162],{"class":152},[142,115606,198],{"class":148},[142,115608,114167],{"class":152},[142,115610,89583],{"class":201},[142,115612,159],{"class":152},[142,115614,115615,115617,115619,115621,115623,115625],{"class":144,"line":64},[142,115616,30852],{"class":201},[142,115618,114183],{"class":152},[142,115620,198],{"class":148},[142,115622,114167],{"class":152},[142,115624,89583],{"class":201},[142,115626,159],{"class":152},[14,115628,115629,115630,101027,115633,115636],{},"提前查好 tip 和 target 的 site ID。这样 ",[139,115631,115632],{},"_get_obs",[139,115634,115635],{},"_get_reward"," 里就不用每次按名字查找。",[133,115638,115640],{"className":30407,"code":115639,"language":30409,"meta":31,"style":31},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[139,115641,115642,115652,115662],{"__ignoreMap":31},[142,115643,115644,115646,115648,115650],{"class":144,"line":145},[142,115645,30852],{"class":201},[142,115647,113876],{"class":152},[142,115649,198],{"class":148},[142,115651,54456],{"class":201},[142,115653,115654,115656,115658,115660],{"class":144,"line":64},[142,115655,30852],{"class":201},[142,115657,114255],{"class":152},[142,115659,198],{"class":148},[142,115661,114260],{"class":201},[142,115663,115664,115666,115668,115670],{"class":144,"line":1208},[142,115665,30852],{"class":201},[142,115667,113715],{"class":152},[142,115669,198],{"class":148},[142,115671,47362],{"class":201},[14,115673,115674,115677,115678,115681,115682,115685],{},[139,115675,115676],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[139,115679,115680],{},"max_steps"," 是一个 episode 最多运行多少步。",[139,115683,115684],{},"steps"," 记录当前 episode 已经走了多少步。",[133,115687,115688],{"className":30407,"code":113754,"language":30409,"meta":31,"style":31},[139,115689,115690],{"__ignoreMap":31},[142,115691,115692,115694,115696,115698,115700,115702,115704,115706,115708,115710,115712,115714,115716,115718,115720,115722,115724,115726,115728,115730],{"class":144,"line":145},[142,115693,30852],{"class":201},[142,115695,113763],{"class":152},[142,115697,198],{"class":148},[142,115699,113768],{"class":152},[142,115701,113771],{"class":5245},[142,115703,113774],{"class":148},[142,115705,102412],{"class":201},[142,115707,12464],{"class":152},[142,115709,113781],{"class":5245},[142,115711,198],{"class":148},[142,115713,102412],{"class":201},[142,115715,12464],{"class":152},[142,115717,95972],{"class":5245},[142,115719,198],{"class":148},[142,115721,153],{"class":152},[142,115723,230],{"class":201},[142,115725,113798],{"class":152},[142,115727,93529],{"class":5245},[142,115729,198],{"class":148},[142,115731,113805],{"class":152},[14,115733,115734,115735,115738,115739,101027,115742,115745],{},"定义动作空间。",[139,115736,115737],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[139,115740,115741],{},"low=-1.0",[139,115743,115744],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[133,115747,115748],{"className":30407,"code":113815,"language":30409,"meta":31,"style":31},[139,115749,115750],{"__ignoreMap":31},[142,115751,115752,115754,115756,115758,115760,115762,115764,115766,115768,115770,115772,115774,115776,115778,115780,115782,115784,115786],{"class":144,"line":145},[142,115753,30852],{"class":201},[142,115755,113824],{"class":152},[142,115757,198],{"class":148},[142,115759,113768],{"class":152},[142,115761,113771],{"class":5245},[142,115763,113774],{"class":148},[142,115765,113835],{"class":152},[142,115767,113781],{"class":5245},[142,115769,198],{"class":148},[142,115771,113835],{"class":152},[142,115773,95972],{"class":5245},[142,115775,198],{"class":148},[142,115777,153],{"class":152},[142,115779,599],{"class":201},[142,115781,113798],{"class":152},[142,115783,93529],{"class":5245},[142,115785,198],{"class":148},[142,115787,113805],{"class":152},[14,115789,115790,115791,115794,115795,115798],{},"定义观测空间。",[139,115792,115793],{},"shape=(10,)"," 表示观测是 10 个数。",[139,115796,115797],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[133,115800,115802],{"className":30407,"code":115801,"language":30409,"meta":31,"style":31},"def _get_obs(self) -> np.ndarray:\n",[139,115803,115804],{"__ignoreMap":31},[142,115805,115806,115808,115810],{"class":144,"line":145},[142,115807,31976],{"class":148},[142,115809,114365],{"class":1991},[142,115811,114368],{"class":152},[14,115813,115814,115815,115817],{},"定义内部函数，用来生成观测。函数名前面的 ",[139,115816,1145],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[133,115819,115821],{"className":30407,"code":115820,"language":30409,"meta":31,"style":31},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[139,115822,115823,115837],{"__ignoreMap":31},[142,115824,115825,115827,115829,115831,115833,115835],{"class":144,"line":145},[142,115826,111577],{"class":152},[142,115828,198],{"class":148},[142,115830,38902],{"class":201},[142,115832,114379],{"class":152},[142,115834,30852],{"class":201},[142,115836,114384],{"class":152},[142,115838,115839,115841,115843,115845,115847,115849],{"class":144,"line":64},[142,115840,111587],{"class":152},[142,115842,198],{"class":148},[142,115844,38902],{"class":201},[142,115846,114379],{"class":152},[142,115848,30852],{"class":201},[142,115850,114399],{"class":152},[14,115852,115853],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[133,115855,115857],{"className":30407,"code":115856,"language":30409,"meta":31,"style":31},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[139,115858,115859,115875],{"__ignoreMap":31},[142,115860,115861,115863,115865,115867,115869,115871,115873],{"class":144,"line":145},[142,115862,110863],{"class":152},[142,115864,198],{"class":148},[142,115866,114408],{"class":152},[142,115868,30852],{"class":201},[142,115870,114413],{"class":152},[142,115872,30852],{"class":201},[142,115874,114418],{"class":152},[142,115876,115877,115879],{"class":144,"line":64},[142,115878,17075],{"class":148},[142,115880,114425],{"class":152},[14,115882,115883,115884,115887,115888,115890],{},"拼接观测，并转换成 ",[139,115885,115886],{},"float32","。很多强化学习库默认使用 ",[139,115889,115886],{},"，所以这里主动转换。",[133,115892,115893],{"className":30407,"code":115296,"language":30409,"meta":31,"style":31},[139,115894,115895],{"__ignoreMap":31},[142,115896,115897,115899,115901,115903,115905,115907,115909,115911,115913,115915,115917,115919,115921,115923,115925,115927,115929],{"class":144,"line":145},[142,115898,31976],{"class":148},[142,115900,114531],{"class":1991},[142,115902,114534],{"class":152},[142,115904,608],{"class":148},[142,115906,114539],{"class":152},[142,115908,156],{"class":201},[142,115910,25138],{"class":148},[142,115912,38962],{"class":201},[142,115914,13593],{"class":148},[142,115916,38962],{"class":201},[142,115918,114552],{"class":152},[142,115920,114555],{"class":201},[142,115922,25138],{"class":148},[142,115924,38962],{"class":201},[142,115926,13593],{"class":148},[142,115928,38962],{"class":201},[142,115930,30815],{"class":152},[14,115932,115933,115934,115936,115937,115940],{},"定义 reset。",[139,115935,114575],{}," 用来控制随机数，保证实验可以复现。",[139,115938,115939],{},"options"," 用来接收额外配置，本章暂时不用。",[133,115942,115944],{"className":30407,"code":115943,"language":30409,"meta":31,"style":31},"super().reset(seed=seed)\n",[139,115945,115946],{"__ignoreMap":31},[142,115947,115948,115950,115952,115954,115956],{"class":144,"line":145},[142,115949,115537],{"class":201},[142,115951,114572],{"class":152},[142,115953,114575],{"class":5245},[142,115955,198],{"class":148},[142,115957,114580],{"class":152},[14,115959,115960,115961,115964],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[139,115962,115963],{},"self.np_random"," 生成可复现的随机数。",[133,115966,115968],{"className":30407,"code":115967,"language":30409,"meta":31,"style":31},"mujoco.mj_resetData(self.model, self.data)\n",[139,115969,115970],{"__ignoreMap":31},[142,115971,115972,115975,115977,115979,115981],{"class":144,"line":145},[142,115973,115974],{"class":152},"mujoco.mj_resetData(",[142,115976,30852],{"class":201},[142,115978,114590],{"class":152},[142,115980,30852],{"class":201},[142,115982,114595],{"class":152},[14,115984,115985],{},"把 MuJoCo 状态重置到默认状态。",[133,115987,115989],{"className":30407,"code":115988,"language":30409,"meta":31,"style":31},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[139,115990,115991],{"__ignoreMap":31},[142,115992,115993,115995,115997,115999,116001,116003,116005,116007,116009,116011,116013,116015,116017,116019,116021,116023,116025],{"class":144,"line":145},[142,115994,30852],{"class":201},[142,115996,114606],{"class":152},[142,115998,198],{"class":148},[142,116000,38902],{"class":201},[142,116002,114613],{"class":152},[142,116004,113771],{"class":5245},[142,116006,113774],{"class":148},[142,116008,86239],{"class":201},[142,116010,12464],{"class":152},[142,116012,113781],{"class":5245},[142,116014,198],{"class":148},[142,116016,86239],{"class":201},[142,116018,12464],{"class":152},[142,116020,31525],{"class":5245},[142,116022,198],{"class":148},[142,116024,30852],{"class":201},[142,116026,114638],{"class":152},[14,116028,115350,116029,116032,116033,116036,116037,116039],{},[139,116030,116031],{},"[:]"," 表示修改整个数组。",[139,116034,116035],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[139,116038,102159],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[133,116041,116043],{"className":30407,"code":116042,"language":30409,"meta":31,"style":31},"self.data.qvel[:] = 0.0\n",[139,116044,116045],{"__ignoreMap":31},[142,116046,116047,116049,116051,116053],{"class":144,"line":145},[142,116048,30852],{"class":201},[142,116050,114645],{"class":152},[142,116052,198],{"class":148},[142,116054,104770],{"class":201},[14,116056,116057],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[133,116059,116061],{"className":30407,"code":116060,"language":30409,"meta":31,"style":31},"self.steps = 0\nreturn self._get_obs(), {}\n",[139,116062,116063,116073],{"__ignoreMap":31},[142,116064,116065,116067,116069,116071],{"class":144,"line":145},[142,116066,30852],{"class":201},[142,116068,113715],{"class":152},[142,116070,198],{"class":148},[142,116072,47362],{"class":201},[142,116074,116075,116077,116079],{"class":144,"line":64},[142,116076,17075],{"class":148},[142,116078,38902],{"class":201},[142,116080,114685],{"class":152},[14,116082,116083],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[133,116085,116086],{"className":30407,"code":115359,"language":30409,"meta":31,"style":31},[139,116087,116088],{"__ignoreMap":31},[142,116089,116090,116092,116094],{"class":144,"line":145},[142,116091,31976],{"class":148},[142,116093,114696],{"class":1991},[142,116095,114699],{"class":152},[14,116097,116098],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[133,116100,116102],{"className":30407,"code":116101,"language":30409,"meta":31,"style":31},"action = np.asarray(action, dtype=np.float32)\n",[139,116103,116104],{"__ignoreMap":31},[142,116105,116106,116108,116110,116112,116114,116116],{"class":144,"line":145},[142,116107,107451],{"class":152},[142,116109,198],{"class":148},[142,116111,114708],{"class":152},[142,116113,93529],{"class":5245},[142,116115,198],{"class":148},[142,116117,113805],{"class":152},[14,116119,116120,116121,28414],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[139,116122,115886],{},[133,116124,116126],{"className":30407,"code":116125,"language":30409,"meta":31,"style":31},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[139,116127,116128],{"__ignoreMap":31},[142,116129,116130,116132,116134,116136,116138,116140,116142],{"class":144,"line":145},[142,116131,107451],{"class":152},[142,116133,198],{"class":148},[142,116135,107456],{"class":152},[142,116137,30852],{"class":201},[142,116139,114727],{"class":152},[142,116141,30852],{"class":201},[142,116143,114732],{"class":152},[14,116145,116146],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[133,116148,116150],{"className":30407,"code":116149,"language":30409,"meta":31,"style":31},"self.data.ctrl[:] = action\n",[139,116151,116152],{"__ignoreMap":31},[142,116153,116154,116156,116158,116160],{"class":144,"line":145},[142,116155,30852],{"class":201},[142,116157,114743],{"class":152},[142,116159,198],{"class":148},[142,116161,107479],{"class":152},[14,116163,116164],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[133,116166,116168],{"className":30407,"code":116167,"language":30409,"meta":31,"style":31},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[139,116169,116170,116186],{"__ignoreMap":31},[142,116171,116172,116174,116176,116178,116180,116182,116184],{"class":144,"line":145},[142,116173,3053],{"class":148},[142,116175,101510],{"class":152},[142,116177,26072],{"class":148},[142,116179,32472],{"class":201},[142,116181,153],{"class":152},[142,116183,30852],{"class":201},[142,116185,114764],{"class":152},[142,116187,116188,116191,116193,116195,116197],{"class":144,"line":64},[142,116189,116190],{"class":152},"    mujoco.mj_step(",[142,116192,30852],{"class":201},[142,116194,114590],{"class":152},[142,116196,30852],{"class":201},[142,116198,114595],{"class":152},[14,116200,116201,116202,116205,116206,116208,116209,28414],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[139,116203,116204],{},"frame_skip=5","，所以外部调用一次 ",[139,116207,113886],{},"，内部实际执行 5 次 ",[139,116210,101224],{},[133,116212,116214],{"className":30407,"code":116213,"language":30409,"meta":31,"style":31},"self.steps += 1\n",[139,116215,116216],{"__ignoreMap":31},[142,116217,116218,116220,116222,116224],{"class":144,"line":145},[142,116219,30852],{"class":201},[142,116221,113715],{"class":152},[142,116223,9506],{"class":148},[142,116225,55728],{"class":201},[14,116227,116228],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[133,116230,116232],{"className":30407,"code":116231,"language":30409,"meta":31,"style":31},"obs = self._get_obs()\nreward = self._get_reward()\n",[139,116233,116234,116244],{"__ignoreMap":31},[142,116235,116236,116238,116240,116242],{"class":144,"line":145},[142,116237,110863],{"class":152},[142,116239,198],{"class":148},[142,116241,38902],{"class":201},[142,116243,114806],{"class":152},[142,116245,116246,116248,116250,116252],{"class":144,"line":64},[142,116247,111014],{"class":152},[142,116249,198],{"class":148},[142,116251,38902],{"class":201},[142,116253,114817],{"class":152},[14,116255,116256],{},"计算新的观测和奖励。",[133,116258,116260],{"className":30407,"code":116259,"language":30409,"meta":31,"style":31},"dist = float(np.linalg.norm(tip - target))\n",[139,116261,116262],{"__ignoreMap":31},[142,116263,116264,116266,116268,116270,116272,116274],{"class":144,"line":145},[142,116265,111605],{"class":152},[142,116267,198],{"class":148},[142,116269,109806],{"class":201},[142,116271,114860],{"class":152},[142,116273,685],{"class":148},[142,116275,114865],{"class":152},[14,116277,116278],{},"计算末端到目标的距离，并转换成 Python float。",[133,116280,116281],{"className":30407,"code":113686,"language":30409,"meta":31,"style":31},[139,116282,116283,116295],{"__ignoreMap":31},[142,116284,116285,116287,116289,116291,116293],{"class":144,"line":145},[142,116286,113693],{"class":152},[142,116288,198],{"class":148},[142,116290,113698],{"class":152},[142,116292,1063],{"class":148},[142,116294,113703],{"class":201},[142,116296,116297,116299,116301,116303,116305,116307,116309],{"class":144,"line":64},[142,116298,113708],{"class":152},[142,116300,198],{"class":148},[142,116302,38902],{"class":201},[142,116304,113715],{"class":152},[142,116306,1738],{"class":148},[142,116308,38902],{"class":201},[142,116310,113722],{"class":152},[14,116312,116313],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[133,116315,116317],{"className":30407,"code":116316,"language":30409,"meta":31,"style":31},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[139,116318,116319,116332],{"__ignoreMap":31},[142,116320,116321,116324,116326,116328,116330],{"class":144,"line":145},[142,116322,116323],{"class":152},"info ",[142,116325,198],{"class":148},[142,116327,4476],{"class":152},[142,116329,114911],{"class":257},[142,116331,114914],{"class":152},[142,116333,116334,116336],{"class":144,"line":64},[142,116335,17075],{"class":148},[142,116337,114921],{"class":152},[14,116339,116340,116343],{},[139,116341,116342],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[133,116345,116347],{"className":30407,"code":116346,"language":30409,"meta":31,"style":31},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[139,116348,116349,116358],{"__ignoreMap":31},[142,116350,116351,116354,116356],{"class":144,"line":145},[142,116352,116353],{"class":152},"env ",[142,116355,198],{"class":148},[142,116357,114951],{"class":152},[142,116359,116360,116362,116364,116366,116368,116370,116372],{"class":144,"line":64},[142,116361,113409],{"class":152},[142,116363,198],{"class":148},[142,116365,114961],{"class":152},[142,116367,114575],{"class":5245},[142,116369,198],{"class":148},[142,116371,344],{"class":201},[142,116373,159],{"class":152},[14,116375,116376,116377,116380],{},"创建环境并重置。",[139,116378,116379],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[133,116382,116384],{"className":30407,"code":116383,"language":30409,"meta":31,"style":31},"action = env.action_space.sample()\n",[139,116385,116386],{"__ignoreMap":31},[142,116387,116388,116390,116392],{"class":144,"line":145},[142,116389,107451],{"class":152},[142,116391,198],{"class":148},[142,116393,115030],{"class":152},[14,116395,116396],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[84,116398,102325],{"id":102324},[14,116400,105493],{},[133,116402,116405],{"className":116403,"code":116404,"language":5216,"meta":31},[5214],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[139,116406,116404],{"__ignoreMap":31},[14,116408,116409],{},"这个环境已经具备强化学习环境的基本结构。",[14,116411,116412],{},"主函数里使用随机动作：",[133,116414,116415],{"className":30407,"code":116383,"language":30409,"meta":31,"style":31},[139,116416,116417],{"__ignoreMap":31},[142,116418,116419,116421,116423],{"class":144,"line":145},[142,116420,107451],{"class":152},[142,116422,198],{"class":148},[142,116424,115030],{"class":152},[14,116426,116427],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[84,116429,102357],{"id":102356},[96,116431,116432,116435,116441,116450,116459,116468,116474],{},[99,116433,116434],{},"运行程序。",[99,116436,116437,116438,28414],{},"确认 ",[139,116439,116440],{},"obs.shape == (10,)",[99,116442,111190,116443,116446,116447,28414],{},[139,116444,116445],{},"env.action_space","，应类似 ",[139,116448,116449],{},"Box(-1.0, 1.0, (2,), float32)",[99,116451,105594,116452,116455,116456,28414],{},[139,116453,116454],{},"self.max_steps = 10","，确认环境会更快 ",[139,116457,116458],{},"truncated=True",[99,116460,102420,116461,102423,116464,116467],{},[139,116462,116463],{},"terminated = dist \u003C 0.05",[139,116465,116466],{},"dist \u003C 0.2","，观察是否更容易结束。",[99,116469,102420,116470,116473],{},[139,116471,116472],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[99,116475,116476,116477,116479,116480,116483],{},"在 ",[139,116478,116342],{}," 里加入 ",[139,116481,116482],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[84,116485,102462],{"id":102461},[113,116487,116489],{"id":116488},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116491,116492,116493,116495],{},"Gymnasium 的 ",[139,116494,107143],{}," 返回 5 个值:",[133,116497,116499],{"className":30407,"code":116498,"language":30409,"meta":31,"style":31},"obs, reward, terminated, truncated, info\n",[139,116500,116501],{"__ignoreMap":31},[142,116502,116503],{"class":144,"line":145},[142,116504,116498],{"class":152},[14,116506,116507],{},"不是旧 Gym 的 4 个值。",[113,116509,116511,116514],{"id":116510},"datactrl-action-维度错误",[139,116512,116513],{},"data.ctrl[:] = action"," 维度错误",[14,116516,102532],{},[133,116518,116520],{"className":30407,"code":116519,"language":30409,"meta":31,"style":31},"print(self.model.nu)\nprint(action.shape)\n",[139,116521,116522,116533],{"__ignoreMap":31},[142,116523,116524,116526,116528,116530],{"class":144,"line":145},[142,116525,30444],{"class":201},[142,116527,153],{"class":152},[142,116529,30852],{"class":201},[142,116531,116532],{"class":152},".model.nu)\n",[142,116534,116535,116537],{"class":144,"line":64},[142,116536,30444],{"class":201},[142,116538,116539],{"class":152},"(action.shape)\n",[14,116541,116542],{},"两者必须匹配。",[113,116544,116546],{"id":116545},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116548,102471],{},[133,116550,116552],{"className":30407,"code":116551,"language":30409,"meta":31,"style":31},"mujoco.mj_forward(self.model, self.data)\n",[139,116553,116554],{"__ignoreMap":31},[142,116555,116556,116559,116561,116563,116565],{"class":144,"line":145},[142,116557,116558],{"class":152},"mujoco.mj_forward(",[142,116560,30852],{"class":201},[142,116562,114590],{"class":152},[142,116564,30852],{"class":201},[142,116566,114595],{"class":152},[113,116568,116570,116572],{"id":116569},"observation_space-维度和-obs-不一致",[139,116571,113609],{}," 维度和 obs 不一致",[14,116574,102584],{},[133,116576,116578],{"className":30407,"code":116577,"language":30409,"meta":31,"style":31},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[139,116579,116580,116590,116597],{"__ignoreMap":31},[142,116581,116582,116584,116586,116588],{"class":144,"line":145},[142,116583,110863],{"class":152},[142,116585,198],{"class":148},[142,116587,38902],{"class":201},[142,116589,114806],{"class":152},[142,116591,116592,116594],{"class":144,"line":64},[142,116593,30444],{"class":201},[142,116595,116596],{"class":152},"(obs.shape)\n",[142,116598,116599,116601,116603,116605],{"class":144,"line":1208},[142,116600,30444],{"class":201},[142,116602,153],{"class":152},[142,116604,30852],{"class":201},[142,116606,116607],{"class":152},".observation_space.shape)\n",[14,116609,116610],{},"两者必须一致。本章观测是：",[133,116612,116615],{"className":116613,"code":116614,"language":5216,"meta":31},[5214],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[139,116616,116614],{"__ignoreMap":31},[113,116618,116620],{"id":116619},"action-超过范围","action 超过范围",[14,116622,116623],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[133,116625,116626],{"className":30407,"code":116125,"language":30409,"meta":31,"style":31},[139,116627,116628],{"__ignoreMap":31},[142,116629,116630,116632,116634,116636,116638,116640,116642],{"class":144,"line":145},[142,116631,107451],{"class":152},[142,116633,198],{"class":148},[142,116635,107456],{"class":152},[142,116637,30852],{"class":201},[142,116639,114727],{"class":152},[142,116641,30852],{"class":201},[142,116643,114732],{"class":152},[14,116645,116646,116647,28414],{},"这能避免无效动作直接写入 ",[139,116648,101085],{},[113,116650,116652],{"id":116651},"忘记返回-info","忘记返回 info",[14,116654,116492,116655,101027,116657,116659],{},[139,116656,70085],{},[139,116658,107143],{}," 都会返回 info：",[133,116661,116662],{"className":30407,"code":113402,"language":30409,"meta":31,"style":31},[139,116663,116664,116672],{"__ignoreMap":31},[142,116665,116666,116668,116670],{"class":144,"line":145},[142,116667,113409],{"class":152},[142,116669,198],{"class":148},[142,116671,113414],{"class":152},[142,116673,116674,116676,116678],{"class":144,"line":64},[142,116675,113419],{"class":152},[142,116677,198],{"class":148},[142,116679,113424],{"class":152},[14,116681,116682,116683,28414],{},"即使暂时没有额外信息，也返回 ",[139,116684,32488],{},[84,116686,116688],{"id":116687},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116690,116691],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[96,116693,116694,116697,116700,116703,116706,116709],{},[99,116695,116696],{},"更稳定的 reward。",[99,116698,116699],{},"合理的 episode 长度。",[99,116701,116702],{},"可重复的随机目标采样。",[99,116704,116705],{},"render 接口。",[99,116707,116708],{},"环境注册代码。",[99,116710,116711],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116713,116714],{},"如果只是自己写训练循环，最小形式是：",[133,116716,116718],{"className":30407,"code":116717,"language":30409,"meta":31,"style":31},"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",[139,116719,116720,116728,116744,116748,116764,116773,116782,116792],{"__ignoreMap":31},[142,116721,116722,116724,116726],{"class":144,"line":145},[142,116723,116353],{"class":152},[142,116725,198],{"class":148},[142,116727,114951],{"class":152},[142,116729,116730,116732,116734,116736,116738,116740,116742],{"class":144,"line":64},[142,116731,113409],{"class":152},[142,116733,198],{"class":148},[142,116735,114961],{"class":152},[142,116737,114575],{"class":5245},[142,116739,198],{"class":148},[142,116741,344],{"class":201},[142,116743,159],{"class":152},[142,116745,116746],{"class":144,"line":1208},[142,116747,2428],{"emptyLinePlaceholder":69},[142,116749,116750,116752,116754,116756,116758,116760,116762],{"class":144,"line":1223},[142,116751,3053],{"class":148},[142,116753,101510],{"class":152},[142,116755,26072],{"class":148},[142,116757,32472],{"class":201},[142,116759,153],{"class":152},[142,116761,6439],{"class":201},[142,116763,30815],{"class":152},[142,116765,116766,116769,116771],{"class":144,"line":1229},[142,116767,116768],{"class":152},"    action ",[142,116770,198],{"class":148},[142,116772,115030],{"class":152},[142,116774,116775,116778,116780],{"class":144,"line":1243},[142,116776,116777],{"class":152},"    obs, reward, terminated, truncated, info ",[142,116779,198],{"class":148},[142,116781,113424],{"class":152},[142,116783,116784,116786,116788,116790],{"class":144,"line":1249},[142,116785,3129],{"class":148},[142,116787,115096],{"class":152},[142,116789,115099],{"class":148},[142,116791,115102],{"class":152},[142,116793,116794,116797,116799],{"class":144,"line":1340},[142,116795,116796],{"class":152},"        obs, info ",[142,116798,198],{"class":148},[142,116800,113414],{"class":152},[84,116802,116804],{"id":116803},"_9本章小结","9.本章小结",[14,116806,116807],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[133,116809,116812],{"className":116810,"code":116811,"language":5216,"meta":31},[5214],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[139,116813,116811],{"__ignoreMap":31},[14,116815,116816],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5155,116818,116819],{},"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":31,"searchDepth":64,"depth":64,"links":116821},[116822,116823,116824,116831,116835,116836,116837,116847,116848],{"id":100655,"depth":64,"text":100656},{"id":100778,"depth":64,"text":100779},{"id":101053,"depth":64,"text":101054,"children":116825},[116826,116828,116830],{"id":113633,"depth":1208,"text":116827},"terminated 和 truncated 的区别",{"id":113736,"depth":1208,"text":116829},"observation_space 和 action_space",{"id":113863,"depth":1208,"text":113864},{"id":101261,"depth":64,"text":101262,"children":116832},[116833,116834],{"id":101581,"depth":1208,"text":101581},{"id":101717,"depth":1208,"text":101717},{"id":102324,"depth":64,"text":102325},{"id":102356,"depth":64,"text":102357},{"id":102461,"depth":64,"text":102462,"children":116838},[116839,116840,116842,116843,116845,116846],{"id":116488,"depth":1208,"text":116489},{"id":116510,"depth":1208,"text":116841},"data.ctrl[:] = action 维度错误",{"id":116545,"depth":1208,"text":116546},{"id":116569,"depth":1208,"text":116844},"observation_space 维度和 obs 不一致",{"id":116619,"depth":1208,"text":116620},{"id":116651,"depth":1208,"text":116652},{"id":116687,"depth":64,"text":116688},{"id":116803,"depth":64,"text":116804},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113386,"description":31},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116855,"title":116856,"body":116857,"description":117280,"extension":67,"meta":117281,"navigation":69,"path":117282,"seo":117283,"stem":117284,"__hash__":117285},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116858,"toc":117270},[116859,116863,116866,116869,116889,116895,116901,116911,116914,116917,116937,116940,116944,116947,116953,116956,116970,116973,116976,117050,117053,117059,117062,117085,117088,117138,117141,117147,117150,117153,117156,117175,117178,117184,117187,117190,117193,117213,117216,117219,117222,117267],[10,116860,116862],{"id":116861},"mujoco-学习","MuJoCo 学习",[14,116864,116865],{},"初版",[14,116867,116868],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[96,116870,116871,116874,116877,116886],{},[99,116872,116873],{},"MuJoCo 模型文件在描述什么。",[99,116875,116876],{},"Python 代码怎样读取和推进仿真。",[99,116878,116879,365,116881,365,116883,116885],{},[139,116880,104039],{},[139,116882,104369],{},[139,116884,104372],{}," 这些数组为什么重要。",[99,116887,116888],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116890,116891,116892,116894],{},"默认环境为 Fedora 44、Python >= 3.10、",[139,116893,101036],{}," 官方 Python bindings。",[14,116896,116897,116898,116900],{},"注意：本文禁止使用 ",[139,116899,101021],{},"。所有示例均使用：",[133,116902,116903],{"className":30407,"code":101587,"language":30409,"meta":31,"style":31},[139,116904,116905],{"__ignoreMap":31},[142,116906,116907,116909],{"class":144,"line":145},[142,116908,30421],{"class":148},[142,116910,101310],{"class":152},[84,116912,116913],{"id":116913},"适合谁阅读",[14,116915,116916],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[96,116918,116919,116922,116925,116928],{},[99,116920,116921],{},"没学过 MuJoCo，只会一点 Python。",[99,116923,116924],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[99,116926,116927],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[99,116929,116930,116931,116933,116934,116936],{},"以前接触过 ",[139,116932,101021],{},"，现在想迁移到官方 ",[139,116935,101030],{}," Python bindings。",[14,116938,116939],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[84,116941,116943],{"id":116942},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116945,116946],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[133,116948,116951],{"className":116949,"code":116950,"language":5216,"meta":31},[5214],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[139,116952,116950],{"__ignoreMap":31},[14,116954,116955],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[96,116957,116958,116961,116964,116967],{},[99,116959,116960],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[99,116962,116963],{},"快速测试控制算法，不必一开始就上真实机器人。",[99,116965,116966],{},"生成强化学习环境。",[99,116968,116969],{},"采集状态、动作、图像、奖励等训练数据。",[84,116971,116972],{"id":116972},"学习前的心智模型",[14,116974,116975],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[290,116977,116978,116990],{},[293,116979,116980],{},[296,116981,116982,116985,116988],{},[299,116983,116984],{"align":23765},"部分",[299,116986,116987],{"align":23765},"负责什么",[299,116989,21216],{"align":23765},[337,116991,116992,117003,117015,117027,117039],{},[296,116993,116994,116997,117000],{},[342,116995,116996],{"align":23765},"MJCF XML",[342,116998,116999],{"align":23765},"定义世界和机器人结构",[342,117001,117002],{"align":23765},"地面、盒子、关节、电机、摄像头",[296,117004,117005,117009,117012],{},[342,117006,117007],{"align":23765},[139,117008,100718],{},[342,117010,117011],{"align":23765},"编译后的静态模型",[342,117013,117014],{"align":23765},"有几个关节、有几个电机、时间步长是多少",[296,117016,117017,117021,117024],{},[342,117018,117019],{"align":23765},[139,117020,100728],{},[342,117022,117023],{"align":23765},"运行中的动态状态",[342,117025,117026],{"align":23765},"当前时间、位置、速度、电机输入",[296,117028,117029,117033,117036],{},[342,117030,117031],{"align":23765},[139,117032,101224],{},[342,117034,117035],{"align":23765},"推进一步物理仿真",[342,117037,117038],{"align":23765},"根据重力、力、碰撞更新状态",[296,117040,117041,117044,117047],{},[342,117042,117043],{"align":23765},"Viewer \u002F Renderer",[342,117045,117046],{"align":23765},"把仿真显示出来",[342,117048,117049],{"align":23765},"打开窗口或保存图片",[14,117051,117052],{},"一句话总结：",[133,117054,117057],{"className":117055,"code":117056,"language":5216,"meta":31},[5214],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[139,117058,117056],{"__ignoreMap":31},[14,117060,117061],{},"参考来源：",[1160,117063,117064,117071,117078],{},[99,117065,117066,117067],{},"MuJoCo Python 官方文档：",[391,117068,117069],{"href":117069,"rel":117070},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23894],[99,117072,117073,117074],{},"MuJoCo XML Reference：",[391,117075,117076],{"href":117076,"rel":117077},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23894],[99,117079,117080,117081],{},"MuJoCo Overview：",[391,117082,117083],{"href":117083,"rel":117084},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23894],[84,117086,117087],{"id":117087},"章节目录",[96,117089,117090,117096,117102,117108,117114,117120,117126,117132],{},[99,117091,117092],{},[391,117093,117095],{"href":117094},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[99,117097,117098],{},[391,117099,117101],{"href":117100},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[99,117103,117104],{},[391,117105,117107],{"href":117106},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[99,117109,117110],{},[391,117111,117113],{"href":117112},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[99,117115,117116],{},[391,117117,117119],{"href":117118},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[99,117121,117122],{},[391,117123,117125],{"href":117124},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[99,117127,117128],{},[391,117129,117131],{"href":117130},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[99,117133,117134],{},[391,117135,117137],{"href":117136},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[84,117139,117140],{"id":117140},"推荐学习路线",[133,117142,117145],{"className":117143,"code":117144,"language":5216,"meta":31},[5214],"环境安装\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",[139,117146,117144],{"__ignoreMap":31},[14,117148,117149],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[84,117151,117152],{"id":117152},"建议的目录结构",[14,117154,117155],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[133,117157,117159],{"className":23851,"code":117158,"language":23853,"meta":31,"style":31},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[139,117160,117161,117169],{"__ignoreMap":31},[142,117162,117163,117165,117167],{"class":144,"line":145},[142,117164,101275],{"class":1991},[142,117166,29245],{"class":201},[142,117168,101280],{"class":257},[142,117170,117171,117173],{"class":144,"line":64},[142,117172,101285],{"class":201},[142,117174,101280],{"class":257},[14,117176,117177],{},"每一章的代码都单独保存：",[133,117179,117182],{"className":117180,"code":117181,"language":5216,"meta":31},[5214],"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",[139,117183,117181],{"__ignoreMap":31},[14,117185,117186],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[84,117188,117189],{"id":117189},"学习方法",[14,117191,117192],{},"每章建议按这个顺序操作：",[96,117194,117195,117198,117201,117204,117207,117210],{},[99,117196,117197],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[99,117199,117200],{},"复制最小可运行代码，保存成指定文件。",[99,117202,117203],{},"运行代码，确认没有报错。",[99,117205,117206],{},"对照“运行结果说明”理解输出。",[99,117208,117209],{},"做“验证步骤”，主动改一两个参数。",[99,117211,117212],{},"遇到报错先看“常见错误与解决方案”。",[14,117214,117215],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[84,117217,117218],{"id":117218},"全局排错顺序",[14,117220,117221],{},"遇到问题时，按下面顺序查：",[96,117223,117224,117230,117236,117241,117244,117247,117254,117264],{},[99,117225,117226,117227],{},"Python 环境是否激活：",[139,117228,117229],{},"which python",[99,117231,117232,117233],{},"MuJoCo 是否能导入：",[139,117234,117235],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[99,117237,117238,117239],{},"是否误装了 ",[139,117240,101021],{},[99,117242,117243],{},"XML 标签是否闭合、属性是否拼写正确",[99,117245,117246],{},"actuator 引用的 joint 名字是否存在",[99,117248,117249,117251,117252],{},[139,117250,101085],{}," 的长度是否等于 ",[139,117253,102167],{},[99,117255,105594,117256,82568,117258,117260,117261],{},[139,117257,104039],{},[139,117259,104369],{}," 后是否调用了 ",[139,117262,117263],{},"mujoco.mj_forward",[99,117265,117266],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5155,117268,117269],{},"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":31,"searchDepth":64,"depth":64,"links":117271},[117272,117273,117274,117275,117276,117277,117278,117279],{"id":116913,"depth":64,"text":116913},{"id":116942,"depth":64,"text":116943},{"id":116972,"depth":64,"text":116972},{"id":117087,"depth":64,"text":117087},{"id":117140,"depth":64,"text":117140},{"id":117152,"depth":64,"text":117152},{"id":117189,"depth":64,"text":117189},{"id":117218,"depth":64,"text":117218},"仿真搭建。",{"category":23407},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116856,"description":117280},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117287,"title":117288,"body":117289,"description":66,"extension":67,"meta":117744,"navigation":69,"path":117745,"seo":117746,"stem":117747,"__hash__":117748},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117290,"toc":117742},[117291,117294,117297,117303,117739],[10,117292,117288],{"id":117293},"_1-最常用的基本操作更新",[14,117295,117296],{},"装linux系统教程：",[14,117298,117299],{},[391,117300,117301],{"href":117301,"rel":117302},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23894],[133,117304,117308],{"className":117305,"code":117306,"language":117307,"meta":31,"style":31},"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",[139,117309,117310,117315,117320,117329,117334,117343,117348,117368,117373,117384,117389,117398,117403,117431,117436,117455,117460,117479,117483,117488,117504,117508,117513,117543,117547,117552,117568,117572,117577,117592,117596,117601,117617,117621,117626,117638,117650,117654,117659,117676,117680,117685,117703,117707,117712,117721,117725,117730],{"__ignoreMap":31},[142,117311,117312],{"class":144,"line":145},[142,117313,117314],{"class":211},"#更新相关的知识\n",[142,117316,117317],{"class":144,"line":64},[142,117318,117319],{"class":211},"# 更新软件包列表（从服务器获取最新软件信息）\n",[142,117321,117322,117324,117327],{"class":144,"line":1208},[142,117323,24606],{"class":1991},[142,117325,117326],{"class":257}," apt",[142,117328,26271],{"class":257},[142,117330,117331],{"class":144,"line":1223},[142,117332,117333],{"class":211},"# 升级所有可更新的软件包（不删除旧包）\n",[142,117335,117336,117338,117340],{"class":144,"line":1229},[142,117337,24606],{"class":1991},[142,117339,117326],{"class":257},[142,117341,117342],{"class":257}," upgrade\n",[142,117344,117345],{"class":144,"line":1243},[142,117346,117347],{"class":211},"#更新和升级软件包\n",[142,117349,117350,117352,117354,117357,117359,117361,117363,117366],{"class":144,"line":1249},[142,117351,24606],{"class":1991},[142,117353,117326],{"class":257},[142,117355,117356],{"class":257}," update",[142,117358,26219],{"class":152},[142,117360,24606],{"class":1991},[142,117362,117326],{"class":257},[142,117364,117365],{"class":257}," upgrade",[142,117367,100990],{"class":201},[142,117369,117370],{"class":144,"line":1340},[142,117371,117372],{"class":211},"#列出可更新的软件包及版本信息\n",[142,117374,117375,117378,117381],{"class":144,"line":1346},[142,117376,117377],{"class":1991},"apt",[142,117379,117380],{"class":257}," list",[142,117382,117383],{"class":201}," --upgradable\n",[142,117385,117386],{"class":144,"line":1358},[142,117387,117388],{"class":211},"#彻底升级（处理依赖关系，可能删除旧包）\n",[142,117390,117391,117393,117395],{"class":144,"line":1640},[142,117392,24606],{"class":1991},[142,117394,117326],{"class":257},[142,117396,117397],{"class":257}," full-upgrade\n",[142,117399,117400],{"class":144,"line":1645},[142,117401,117402],{"class":211},"#设置指定版本\n",[142,117404,117405,117407,117409,117411,117413,117416,117418,117420,117422,117424,117427,117429],{"class":144,"line":1651},[142,117406,24606],{"class":1991},[142,117408,117326],{"class":257},[142,117410,23863],{"class":257},[142,117412,28931],{"class":148},[142,117414,117415],{"class":257},"package_nam",[142,117417,227],{"class":152},[142,117419,1113],{"class":148},[142,117421,198],{"class":257},[142,117423,1063],{"class":148},[142,117425,117426],{"class":257},"version_numbe",[142,117428,823],{"class":152},[142,117430,51336],{"class":148},[142,117432,117433],{"class":144,"line":1656},[142,117434,117435],{"class":211},"#只安装软件包不升级\n",[142,117437,117438,117440,117442,117444,117446,117448,117450,117452],{"class":144,"line":1670},[142,117439,24606],{"class":1991},[142,117441,117326],{"class":257},[142,117443,23863],{"class":257},[142,117445,28931],{"class":148},[142,117447,117415],{"class":257},[142,117449,227],{"class":152},[142,117451,1113],{"class":148},[142,117453,117454],{"class":201}," --no-upgrade\n",[142,117456,117457],{"class":144,"line":1675},[142,117458,117459],{"class":211},"#只升级，不存在就不安装\n",[142,117461,117462,117464,117466,117468,117470,117472,117474,117476],{"class":144,"line":1681},[142,117463,24606],{"class":1991},[142,117465,117326],{"class":257},[142,117467,23863],{"class":257},[142,117469,28931],{"class":148},[142,117471,117415],{"class":257},[142,117473,227],{"class":152},[142,117475,1113],{"class":148},[142,117477,117478],{"class":201}," --only-upgrade\n",[142,117480,117481],{"class":144,"line":1702},[142,117482,2428],{"emptyLinePlaceholder":69},[142,117484,117485],{"class":144,"line":1707},[142,117486,117487],{"class":211},"#安装指定的软件命令\n",[142,117489,117490,117492,117494,117496,117498,117500,117502],{"class":144,"line":1721},[142,117491,24606],{"class":1991},[142,117493,117326],{"class":257},[142,117495,23863],{"class":257},[142,117497,28931],{"class":148},[142,117499,117415],{"class":257},[142,117501,227],{"class":152},[142,117503,51336],{"class":148},[142,117505,117506],{"class":144,"line":1726},[142,117507,2428],{"emptyLinePlaceholder":69},[142,117509,117510],{"class":144,"line":1755},[142,117511,117512],{"class":211},"#安装多个软件包\n",[142,117514,117515,117517,117519,117521,117523,117526,117529,117531,117533,117536,117538,117540],{"class":144,"line":1760},[142,117516,24606],{"class":1991},[142,117518,117326],{"class":257},[142,117520,23863],{"class":257},[142,117522,28931],{"class":148},[142,117524,117525],{"class":257},"package_",[142,117527,117528],{"class":148},"1>",[142,117530,28931],{"class":148},[142,117532,117525],{"class":257},[142,117534,117535],{"class":148},"2>",[142,117537,28931],{"class":148},[142,117539,117525],{"class":257},[142,117541,117542],{"class":148},"3>\n",[142,117544,117545],{"class":144,"line":1777},[142,117546,2428],{"emptyLinePlaceholder":69},[142,117548,117549],{"class":144,"line":1782},[142,117550,117551],{"class":211},"#更新指定的软件命令\n",[142,117553,117554,117556,117558,117560,117562,117564,117566],{"class":144,"line":1787},[142,117555,24606],{"class":1991},[142,117557,117326],{"class":257},[142,117559,117356],{"class":257},[142,117561,28931],{"class":148},[142,117563,117415],{"class":257},[142,117565,227],{"class":152},[142,117567,51336],{"class":148},[142,117569,117570],{"class":144,"line":1792},[142,117571,2428],{"emptyLinePlaceholder":69},[142,117573,117574],{"class":144,"line":1806},[142,117575,117576],{"class":211},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[142,117578,117579,117581,117584,117586,117588,117590],{"class":144,"line":1811},[142,117580,117377],{"class":1991},[142,117582,117583],{"class":257}," show",[142,117585,28931],{"class":148},[142,117587,117415],{"class":257},[142,117589,227],{"class":152},[142,117591,51336],{"class":148},[142,117593,117594],{"class":144,"line":2605},[142,117595,2428],{"emptyLinePlaceholder":69},[142,117597,117598],{"class":144,"line":2619},[142,117599,117600],{"class":211},"#删除软件包命令\n",[142,117602,117603,117605,117607,117609,117611,117613,117615],{"class":144,"line":2627},[142,117604,24606],{"class":1991},[142,117606,117326],{"class":257},[142,117608,26108],{"class":257},[142,117610,28931],{"class":148},[142,117612,117415],{"class":257},[142,117614,227],{"class":152},[142,117616,51336],{"class":148},[142,117618,117619],{"class":144,"line":2632},[142,117620,2428],{"emptyLinePlaceholder":69},[142,117622,117623],{"class":144,"line":2638},[142,117624,117625],{"class":211},"# 清理旧版本和缓存（释放磁盘空间）\n",[142,117627,117628,117630,117632,117635],{"class":144,"line":2644},[142,117629,24606],{"class":1991},[142,117631,117326],{"class":257},[142,117633,117634],{"class":257}," autoremove",[142,117636,117637],{"class":211},"  # 删除不再需要的依赖和库文件\n",[142,117639,117640,117642,117644,117647],{"class":144,"line":2649},[142,117641,24606],{"class":1991},[142,117643,117326],{"class":257},[142,117645,117646],{"class":257}," clean",[142,117648,117649],{"class":211},"       # 清理下载的缓存包\n",[142,117651,117652],{"class":144,"line":7977},[142,117653,2428],{"emptyLinePlaceholder":69},[142,117655,117656],{"class":144,"line":8001},[142,117657,117658],{"class":211},"#移除软件包及配置文件\n",[142,117660,117661,117663,117665,117668,117670,117672,117674],{"class":144,"line":8006},[142,117662,24606],{"class":1991},[142,117664,117326],{"class":257},[142,117666,117667],{"class":257}," purge",[142,117669,28931],{"class":148},[142,117671,117415],{"class":257},[142,117673,227],{"class":152},[142,117675,51336],{"class":148},[142,117677,117678],{"class":144,"line":8012},[142,117679,2428],{"emptyLinePlaceholder":69},[142,117681,117682],{"class":144,"line":8039},[142,117683,117684],{"class":211},"#查找软件包命令\n",[142,117686,117687,117689,117691,117694,117696,117699,117701],{"class":144,"line":8044},[142,117688,24606],{"class":1991},[142,117690,117326],{"class":257},[142,117692,117693],{"class":257}," search",[142,117695,28931],{"class":148},[142,117697,117698],{"class":257},"keywor",[142,117700,467],{"class":152},[142,117702,51336],{"class":148},[142,117704,117705],{"class":144,"line":8050},[142,117706,2428],{"emptyLinePlaceholder":69},[142,117708,117709],{"class":144,"line":8062},[142,117710,117711],{"class":211},"#列出所有已安装的包\n",[142,117713,117714,117716,117718],{"class":144,"line":8074},[142,117715,117377],{"class":1991},[142,117717,117380],{"class":257},[142,117719,117720],{"class":201}," --installed\n",[142,117722,117723],{"class":144,"line":8086},[142,117724,2428],{"emptyLinePlaceholder":69},[142,117726,117727],{"class":144,"line":9745},[142,117728,117729],{"class":211},"#列出所有已安装的包的版本信息\n",[142,117731,117732,117734,117736],{"class":144,"line":9770},[142,117733,117377],{"class":1991},[142,117735,117380],{"class":257},[142,117737,117738],{"class":201}," --all-versions\n",[5155,117740,117741],{},"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":31,"searchDepth":64,"depth":64,"links":117743},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117288,"description":66},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117750,"title":117751,"body":117752,"description":66,"extension":67,"meta":118493,"navigation":69,"path":118494,"seo":118495,"stem":118496,"__hash__":118497},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117753,"toc":118480},[117754,117757,117761,117764,117770,117774,117778,117784,117789,117794,117799,117804,117809,117812,117815,117818,117821,117825,117828,117833,117836,117841,117844,117849,117856,117859,117862,117865,117868,117871,117882,117886,117890,117895,117900,117904,117909,117913,117918,117922,117926,117931,117934,117979,117984,117988,117992,117997,118003,118008,118018,118023,118033,118038,118043,118070,118074,118077,118082,118085,118110,118114,118119,118122,118127,118132,118152,118157,118160,118175,118179,118232,118235,118240,118244,118247,118262,118265,118268,118273,118277,118281,118284,118288,118292,118295,118300,118305,118309,118316,118324,118327,118334,118339,118344,118347,118352,118359,118364,118371,118375,118377,118382,118386,118389,118392,118397,118400,118405,118408,118413,118418,118423,118427,118432,118436,118477],[10,117755,117751],{"id":117756},"_2-linux装机教程",[84,117758,117760],{"id":117759},"_21-实体机","2.1 实体机",[14,117762,117763],{},"使用清华源：（Ubuntu24.04）",[14,117765,117766],{},[391,117767,117768],{"href":117768,"rel":117769},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23894],[84,117771,117773],{"id":117772},"_22-普通虚拟机","2.2 普通虚拟机",[113,117775,117777],{"id":117776},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117779,117780],{},[391,117781,117782],{"href":117782,"rel":117783},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23894],[14,117785,117786],{},[29,117787],{"alt":31,"src":117788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117790,117791],{},[29,117792],{"alt":31,"src":117793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117795,117796],{},[29,117797],{"alt":31,"src":117798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117800,117801],{},[29,117802],{"alt":31,"src":117803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117805,117806],{},[29,117807],{"alt":31,"src":117808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117810,117811],{},"内存4G（4096MB）；",[14,117813,117814],{},"CPU给4个核；",[14,117816,117817],{},"硬盘动态分配60G；",[14,117819,117820],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[113,117822,117824],{"id":117823},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117826,117827],{},"按照1.1的步骤下载Ubuntu",[14,117829,117830],{},[29,117831],{"alt":31,"src":117832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117834,117835],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117837,117838],{},[29,117839],{"alt":31,"src":117840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117842,117843],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117845,117846],{},[29,117847],{"alt":31,"src":117848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117850,117851,117852,117855],{},"选择“正常安装”(找不到都用Alt+F7)， ",[302,117853,117854],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117857,117858],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117860,117861],{},"将改动写入磁盘吗 继续",[14,117863,117864],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117866,117867],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117869,117870],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117872,117873,117874,117877,117878,117881],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[302,117875,117876],{},"除了"," 选不发送系统信息与不升级之外， ",[302,117879,117880],{},"其它"," 都跳过或前进）",[113,117883,117885],{"id":117884},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22027,117887,117889],{"id":117888},"_2231-全屏","2.2.3.1 全屏",[14,117891,117892],{},[29,117893],{"alt":31,"src":117894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117896,117897],{},[29,117898],{"alt":31,"src":117899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22027,117901,117903],{"id":117902},"_2232-文件交换","2.2.3.2 文件交换",[14,117905,117906],{},[29,117907],{"alt":31,"src":117908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22027,117910,117912],{"id":117911},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117914,117915],{},[29,117916],{"alt":31,"src":117917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[84,117919,117921],{"id":117920},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[113,117923,117925],{"id":117924},"_231-简介与优缺点","2.3.1 简介与优缺点",[96,117927,117928],{},[99,117929,117930],{},"什么情况下推荐？",[14,117932,117933],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[96,117935,117936],{"start":64},[99,117937,117938,117939],{},"优缺点：",[96,117940,117941,117971],{},[99,117942,117943,117944],{},"优点：",[96,117945,117946,117949,117956,117959,117962,117965,117968],{},[99,117947,117948],{},"WSL2是最好的Linux发行版;(bushi)",[99,117950,117951,117952,117955],{},"性能损耗极低。且比在Windows上跑深度性能 ",[302,117953,117954],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[99,117957,117958],{},"非常方便调用USB设备，可以USB直通;",[99,117960,117961],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[99,117963,117964],{},"非常方便Win与WSL2互相传文件等协同操作;",[99,117966,117967],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[99,117969,117970],{},"非常方便使用Windows的VScode远程开发;",[99,117972,117973,117974],{},"缺点：",[96,117975,117976],{},[99,117977,117978],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,117980,117981],{},[29,117982],{"alt":31,"src":117983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[113,117985,117987],{"id":117986},"_232-安装教程","2.3.2 安装教程",[22027,117989,117991],{"id":117990},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[96,117993,117994],{},[99,117995,117996],{},"方法一(图形界面)",[14,117998,117999,118000,24647],{},"用Win+R输入",[139,118001,118002],{},"appwiz.cpl",[14,118004,118005],{},[29,118006],{"alt":31,"src":118007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118009,118010,118011,118014,118015,26502],{},"点击OK进入 ",[302,118012,118013],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[302,118016,118017],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118019,118020],{},[29,118021],{"alt":31,"src":118022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118024,118025,118026,101027,118029,118032],{},"选择 ",[302,118027,118028],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[302,118030,118031],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118034,118035],{},[29,118036],{"alt":31,"src":118037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[96,118039,118040],{"start":64},[99,118041,118042],{},"方法二(命令行)",[133,118044,118048],{"className":118045,"code":118046,"language":118047,"meta":31,"style":31},"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",[139,118049,118050,118055,118060,118065],{"__ignoreMap":31},[142,118051,118052],{"class":144,"line":145},[142,118053,118054],{},"# 开启 Linux 子系统\n",[142,118056,118057],{"class":144,"line":64},[142,118058,118059],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[142,118061,118062],{"class":144,"line":1208},[142,118063,118064],{},"# 开启虚拟机平台\n",[142,118066,118067],{"class":144,"line":1223},[142,118068,118069],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22027,118071,118073],{"id":118072},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118075,118076],{},"用管理员权限打开powershell",[14,118078,118079],{},[29,118080],{"alt":31,"src":118081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118083,118084],{},"升级WSL并设置默认版本为WSL2",[133,118086,118088],{"className":118045,"code":118087,"language":118047,"meta":31,"style":31},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[139,118089,118090,118095,118100,118105],{"__ignoreMap":31},[142,118091,118092],{"class":144,"line":145},[142,118093,118094],{},"# 更新 wsl\n",[142,118096,118097],{"class":144,"line":64},[142,118098,118099],{},"wsl --update\n",[142,118101,118102],{"class":144,"line":1208},[142,118103,118104],{},"# 将 wsl 版本设置为 wsl2\n",[142,118106,118107],{"class":144,"line":1223},[142,118108,118109],{},"wsl --set-default-version 2\n",[22027,118111,118113],{"id":118112},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[96,118115,118116],{},[99,118117,118118],{},"方式一(商店下载)",[14,118120,118121],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118123,118124],{},[29,118125],{"alt":31,"src":118126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[96,118128,118129],{"start":64},[99,118130,118131],{},"方式二(命令行安装)",[133,118133,118135],{"className":118045,"code":118134,"language":118047,"meta":31,"style":31},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[139,118136,118137,118142,118147],{"__ignoreMap":31},[142,118138,118139],{"class":144,"line":145},[142,118140,118141],{},"# 列出可安装的 Linux 版本\n",[142,118143,118144],{"class":144,"line":64},[142,118145,118146],{},"#（需要科学手段）\n",[142,118148,118149],{"class":144,"line":1208},[142,118150,118151],{},"wsl --list --online\n",[14,118153,118154],{},[29,118155],{"alt":31,"src":118156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118158,118159],{},"选择对应发行版并安装",[133,118161,118163],{"className":118045,"code":118162,"language":118047,"meta":31,"style":31},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[139,118164,118165,118170],{"__ignoreMap":31},[142,118166,118167],{"class":144,"line":145},[142,118168,118169],{},"# Ubuntu安装完毕后需要重启系统\n",[142,118171,118172],{"class":144,"line":64},[142,118173,118174],{},"wsl --install -d Ubuntu-24.04\n",[22027,118176,118178],{"id":118177},"_2324-查看系统状态","2.3.2.4 查看系统状态",[133,118180,118182],{"className":118045,"code":118181,"language":118047,"meta":31,"style":31},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[139,118183,118184,118189,118194,118199,118204,118208,118212,118217,118222,118227],{"__ignoreMap":31},[142,118185,118186],{"class":144,"line":145},[142,118187,118188],{},"# 查看 wsl\n",[142,118190,118191],{"class":144,"line":64},[142,118192,118193],{},"wsl -l\n",[142,118195,118196],{"class":144,"line":1208},[142,118197,118198],{},"# 查看 wsl 运行版本或模式\n",[142,118200,118201],{"class":144,"line":1223},[142,118202,118203],{},"wsl -l -v\n",[142,118205,118206],{"class":144,"line":1229},[142,118207,2428],{"emptyLinePlaceholder":69},[142,118209,118210],{"class":144,"line":1243},[142,118211,2428],{"emptyLinePlaceholder":69},[142,118213,118214],{"class":144,"line":1249},[142,118215,118216],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[142,118218,118219],{"class":144,"line":1340},[142,118220,118221],{},"wsl --set-version \u003Cdistro> 2\n",[142,118223,118224],{"class":144,"line":1346},[142,118225,118226],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[142,118228,118229],{"class":144,"line":1358},[142,118230,118231],{},"wsl --unregister \u003Cdistro>\n",[14,118233,118234],{},"输出Version为2即正常",[14,118236,118237],{},[29,118238],{"alt":31,"src":118239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22027,118241,118243],{"id":118242},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118245,118246],{},"直接在Powershell里输入wsl命令进入子系统",[133,118248,118250],{"className":118045,"code":118249,"language":118047,"meta":31,"style":31},"# 进入子系统\nwsl\n",[139,118251,118252,118257],{"__ignoreMap":31},[142,118253,118254],{"class":144,"line":145},[142,118255,118256],{},"# 进入子系统\n",[142,118258,118259],{"class":144,"line":64},[142,118260,118261],{},"wsl\n",[14,118263,118264],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118266,118267],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118269,118270],{},[29,118271],{"alt":31,"src":118272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[113,118274,118276],{"id":118275},"_233-配置各种环境","2.3.3 配置各种环境",[22027,118278,118280],{"id":118279},"_2331-换源","2.3.3.1 换源",[14,118282,118283],{},"(同实体机LINUX，往下找教程)",[22027,118285,118287],{"id":118286},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22939,118289,118291],{"id":118290},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118293,118294],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118296,118297],{},[29,118298],{"alt":31,"src":118299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118301,118302],{},[29,118303],{"alt":31,"src":118304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22939,118306,118308],{"id":118307},"_23322-cuda","2.3.3.2.2 CUDA",[14,118310,118311,118312],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[391,118313,118314],{"href":118314,"rel":118315},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23894],[14,118317,118318,118321],{},[29,118319],{"alt":31,"src":118320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[29,118322],{"alt":31,"src":118323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118325,118326],{},"在下方的网站，选择合适的版本。",[14,118328,118329,118330],{},"WSL2 专属 CUDA 指南：",[391,118331,118332],{"href":118332,"rel":118333},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23894],[14,118335,118336],{},[302,118337,118338],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118340,118341],{},[29,118342],{"alt":31,"src":118343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118345,118346],{},"挨行敲一遍",[14,118348,118349],{},[29,118350],{"alt":31,"src":118351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118353,118354,118355,118358],{},"敲完后，输入",[139,118356,118357],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118360,118361],{},[29,118362],{"alt":31,"src":118363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118365,118366,118367,118370],{},"（请详看下方教程的",[302,118368,118369],{},"安装CUDA的配置环境来看","如何配置环境）",[22939,118372,118374],{"id":118373},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118376,118283],{},[14,118378,118379],{},[29,118380],{"alt":31,"src":118381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22027,118383,118385],{"id":118384},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118387,118388],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118390,118391],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118393,118394],{},[29,118395],{"alt":31,"src":118396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118398,118399],{},"连接WSL2",[14,118401,118402],{},[29,118403],{"alt":31,"src":118404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118406,118407],{},"远程开发成功。",[14,118409,118410],{},[29,118411],{"alt":31,"src":118412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118414,118415],{},[29,118416],{"alt":31,"src":118417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118419,118420],{},[29,118421],{"alt":31,"src":118422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22027,118424,118426],{"id":118425},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118428,118429],{},[29,118430],{"alt":31,"src":118431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22027,118433,118435],{"id":118434},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[133,118437,118439],{"className":117305,"code":118438,"language":117307,"meta":31,"style":31},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[139,118440,118441,118449,118457,118468,118472],{"__ignoreMap":31},[142,118442,118443,118445,118447],{"class":144,"line":145},[142,118444,24606],{"class":1991},[142,118446,117326],{"class":257},[142,118448,26271],{"class":257},[142,118450,118451,118453,118455],{"class":144,"line":64},[142,118452,24606],{"class":1991},[142,118454,117326],{"class":257},[142,118456,117342],{"class":257},[142,118458,118459,118461,118463,118465],{"class":144,"line":1208},[142,118460,24606],{"class":1991},[142,118462,117326],{"class":257},[142,118464,23863],{"class":257},[142,118466,118467],{"class":257}," mesa-utils\n",[142,118469,118470],{"class":144,"line":1223},[142,118471,2428],{"emptyLinePlaceholder":69},[142,118473,118474],{"class":144,"line":1229},[142,118475,118476],{"class":211},"#然后重启wsl2即可\n",[5155,118478,118479],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":31,"searchDepth":64,"depth":64,"links":118481},[118482,118483,118488],{"id":117759,"depth":64,"text":117760},{"id":117772,"depth":64,"text":117773,"children":118484},[118485,118486,118487],{"id":117776,"depth":1208,"text":117777},{"id":117823,"depth":1208,"text":117824},{"id":117884,"depth":1208,"text":117885},{"id":117920,"depth":64,"text":117921,"children":118489},[118490,118491,118492],{"id":117924,"depth":1208,"text":117925},{"id":117986,"depth":1208,"text":117987},{"id":118275,"depth":1208,"text":118276},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117751,"description":66},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118499,"title":118500,"body":118501,"description":66,"extension":67,"meta":121437,"navigation":69,"path":121438,"seo":121439,"stem":121440,"__hash__":121441},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118502,"toc":121409},[118503,118506,118510,118516,118520,118526,118530,118718,118721,118726,118730,118734,118737,118740,118746,118751,118754,118757,118762,118795,118800,118804,118881,118884,118889,118893,118896,118935,118938,118947,118965,118970,118977,119094,119099,119102,119129,119134,119138,119147,119197,119204,119208,119211,119225,119232,119266,119271,119275,119298,119301,119306,119310,119313,119316,119319,119361,119365,119368,119371,119412,119416,119420,119423,119428,119433,119436,119459,119462,119470,119475,119478,119483,119488,119491,119496,119500,119505,119528,119533,119595,119603,119608,119613,119616,119621,119624,119629,119634,119652,119657,119663,119668,119682,119686,119689,119692,119695,119738,119741,119746,119847,119850,119855,119859,119863,119900,119904,119908,119912,119958,119962,120007,120011,120018,120026,120081,120084,120161,120164,120187,120191,120194,120199,120204,120212,120215,120220,120225,120230,120233,120238,120247,120250,120255,120258,120329,120334,120337,120342,120345,120350,120353,120358,120361,120366,120371,120374,120449,120452,120465,120470,120473,120487,120490,120519,120524,120553,120556,120561,120565,120570,120579,120582,120587,120590,120595,120598,120601,120606,120609,120614,120619,120622,120627,120630,120755,120760,120790,120793,120798,120803,120820,120823,120866,120869,120896,120901,120914,121057,121061,121066,121080,121083,121134,121137,121167,121170,121186,121191,121205,121208,121275,121280,121289,121294,121297,121309,121314,121321,121345,121348,121353,121356,121375,121380,121387,121399,121406],[10,118504,118500],{"id":118505},"_3-安装必备配置",[84,118507,118509],{"id":118508},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[133,118511,118514],{"className":118512,"code":118513,"language":5216},[5214],"  打开下方网站（注意，该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",[139,118515,118513],{"__ignoreMap":31},[113,118517,118519],{"id":118518},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[133,118521,118524],{"className":118522,"code":118523,"language":5216},[5214],"  输入以下命令\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",[139,118525,118523],{"__ignoreMap":31},[113,118527,118529],{"id":118528},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[133,118531,118535],{"className":118532,"code":118533,"language":118534,"meta":31,"style":31},"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",[139,118536,118537,118545,118556,118568,118582,118586,118596,118601,118605,118609,118614,118618,118630,118634,118639,118643,118654,118658,118674,118678,118689,118693,118698,118702,118710],{"__ignoreMap":31},[142,118538,118539,118541,118543],{"class":144,"line":145},[142,118540,24606],{"class":1991},[142,118542,117326],{"class":257},[142,118544,26271],{"class":257},[142,118546,118547,118549,118551,118553],{"class":144,"line":64},[142,118548,24606],{"class":1991},[142,118550,117326],{"class":257},[142,118552,23863],{"class":257},[142,118554,118555],{"class":257}," vim\n",[142,118557,118558,118560,118563,118565],{"class":144,"line":1208},[142,118559,24606],{"class":1991},[142,118561,118562],{"class":257}," rm",[142,118564,25354],{"class":201},[142,118566,118567],{"class":257}," \u002Fetc\u002Fapt\u002Fsources.list\n",[142,118569,118570,118572,118574,118576,118579],{"class":144,"line":1223},[142,118571,24606],{"class":1991},[142,118573,118562],{"class":257},[142,118575,25354],{"class":201},[142,118577,118578],{"class":257}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[142,118580,118581],{"class":201},"**\n",[142,118583,118584],{"class":144,"line":1229},[142,118585,2428],{"emptyLinePlaceholder":69},[142,118587,118588,118590,118593],{"class":144,"line":1243},[142,118589,24606],{"class":1991},[142,118591,118592],{"class":257}," vim",[142,118594,118595],{"class":257}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[142,118597,118598],{"class":144,"line":1249},[142,118599,118600],{"class":257},"```\n",[142,118602,118603],{"class":144,"line":1340},[142,118604,2428],{"emptyLinePlaceholder":69},[142,118606,118607],{"class":144,"line":1346},[142,118608,2428],{"emptyLinePlaceholder":69},[142,118610,118611],{"class":144,"line":1358},[142,118612,118613],{"class":1991},"选择好Ubuntu版本后，复制下方的内容。\n",[142,118615,118616],{"class":144,"line":1640},[142,118617,2428],{"emptyLinePlaceholder":69},[142,118619,118620,118622,118625,118628],{"class":144,"line":1645},[142,118621,379],{"class":148},[142,118623,118624],{"class":257},"[](",[142,118626,118627],{"class":1991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[142,118629,159],{"class":257},[142,118631,118632],{"class":144,"line":1651},[142,118633,2428],{"emptyLinePlaceholder":69},[142,118635,118636],{"class":144,"line":1656},[142,118637,118638],{"class":1991},"粘贴进去\n",[142,118640,118641],{"class":144,"line":1670},[142,118642,2428],{"emptyLinePlaceholder":69},[142,118644,118645,118647,118649,118652],{"class":144,"line":1675},[142,118646,379],{"class":148},[142,118648,118624],{"class":257},[142,118650,118651],{"class":1991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[142,118653,159],{"class":257},[142,118655,118656],{"class":144,"line":1681},[142,118657,2428],{"emptyLinePlaceholder":69},[142,118659,118660,118663,118666,118669,118671],{"class":144,"line":1702},[142,118661,118662],{"class":1991},"按一下ESC，然后英文冒号，输入",[142,118664,118665],{"class":257}," `",[142,118667,118668],{"class":1991},":wq!",[142,118670,1125],{"class":257},[142,118672,118673],{"class":1991},"然后回车\n",[142,118675,118676],{"class":144,"line":1707},[142,118677,2428],{"emptyLinePlaceholder":69},[142,118679,118680,118682,118684,118687],{"class":144,"line":1721},[142,118681,379],{"class":148},[142,118683,118624],{"class":257},[142,118685,118686],{"class":1991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[142,118688,159],{"class":257},[142,118690,118691],{"class":144,"line":1726},[142,118692,2428],{"emptyLinePlaceholder":69},[142,118694,118695],{"class":144,"line":1755},[142,118696,118697],{"class":1991},"输入以下命令\n",[142,118699,118700],{"class":144,"line":1760},[142,118701,2428],{"emptyLinePlaceholder":69},[142,118703,118704,118707],{"class":144,"line":1777},[142,118705,118706],{"class":257},"```",[142,118708,118709],{"class":1991},"Bash\n",[142,118711,118712,118714,118716],{"class":144,"line":1782},[142,118713,24606],{"class":1991},[142,118715,117326],{"class":257},[142,118717,26271],{"class":257},[14,118719,118720],{},"这里被替换成对应学校则成功",[14,118722,118723],{},[29,118724],{"alt":31,"src":118725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[84,118727,118729],{"id":118728},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[113,118731,118733],{"id":118732},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118735,118736],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118738,118739],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118741,118742],{},[391,118743,118744],{"href":118744,"rel":118745},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23894],[14,118747,118748],{},[29,118749],{"alt":31,"src":118750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118752,118753],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118755,118756],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118758,118759],{},[29,118760],{"alt":31,"src":118761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[133,118763,118765],{"className":117305,"code":118764,"language":117307,"meta":31,"style":31},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[139,118766,118767,118772,118779,118784],{"__ignoreMap":31},[142,118768,118769],{"class":144,"line":145},[142,118770,118771],{"class":211},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[142,118773,118774,118776],{"class":144,"line":64},[142,118775,101285],{"class":201},[142,118777,118778],{"class":257}," ~\u002FDownloads\n",[142,118780,118781],{"class":144,"line":1208},[142,118782,118783],{"class":211},"#下方chrome安装包名不一定是这个，根据名字来看\n",[142,118785,118786,118788,118790,118792],{"class":144,"line":1223},[142,118787,24606],{"class":1991},[142,118789,117326],{"class":257},[142,118791,23863],{"class":257},[142,118793,118794],{"class":257}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118796,118797],{},[29,118798],{"alt":31,"src":118799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[113,118801,118803],{"id":118802},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[133,118805,118807],{"className":117305,"code":118806,"language":117307,"meta":31,"style":31},"# 老版\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",[139,118808,118809,118814,118822,118833,118838,118842,118847,118857,118865,118876],{"__ignoreMap":31},[142,118810,118811],{"class":144,"line":145},[142,118812,118813],{"class":211},"# 老版\n",[142,118815,118816,118818,118820],{"class":144,"line":64},[142,118817,24606],{"class":1991},[142,118819,117326],{"class":257},[142,118821,26271],{"class":257},[142,118823,118824,118826,118828,118830],{"class":144,"line":1208},[142,118825,24606],{"class":1991},[142,118827,117326],{"class":257},[142,118829,23863],{"class":257},[142,118831,118832],{"class":257}," neofetch\n",[142,118834,118835],{"class":144,"line":1223},[142,118836,118837],{"class":1991},"neofetch\n",[142,118839,118840],{"class":144,"line":1229},[142,118841,2428],{"emptyLinePlaceholder":69},[142,118843,118844],{"class":144,"line":1243},[142,118845,118846],{"class":211},"# 新版\n",[142,118848,118849,118851,118854],{"class":144,"line":1249},[142,118850,24606],{"class":1991},[142,118852,118853],{"class":257}," add-apt-repository",[142,118855,118856],{"class":257}," ppa:zhangsongcui3371\u002Ffastfetch\n",[142,118858,118859,118861,118863],{"class":144,"line":1340},[142,118860,24606],{"class":1991},[142,118862,117326],{"class":257},[142,118864,26271],{"class":257},[142,118866,118867,118869,118871,118873],{"class":144,"line":1346},[142,118868,24606],{"class":1991},[142,118870,117326],{"class":257},[142,118872,23863],{"class":257},[142,118874,118875],{"class":257}," fastfetch\n",[142,118877,118878],{"class":144,"line":1358},[142,118879,118880],{"class":1991},"fastfetch\n",[14,118882,118883],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118885,118886],{},[29,118887],{"alt":31,"src":118888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[113,118890,118892],{"id":118891},"_323-移除snap应用","3.2.3 移除snap应用",[14,118894,118895],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[133,118897,118899],{"className":117305,"code":118898,"language":117307,"meta":31,"style":31},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[139,118900,118901,118913,118924],{"__ignoreMap":31},[142,118902,118903,118905,118907,118910],{"class":144,"line":145},[142,118904,24606],{"class":1991},[142,118906,26542],{"class":257},[142,118908,118909],{"class":257}," disable",[142,118911,118912],{"class":257}," snapd.service\n",[142,118914,118915,118917,118919,118921],{"class":144,"line":64},[142,118916,24606],{"class":1991},[142,118918,26542],{"class":257},[142,118920,118909],{"class":257},[142,118922,118923],{"class":257}," snapd.socket\n",[142,118925,118926,118928,118930,118932],{"class":144,"line":1208},[142,118927,24606],{"class":1991},[142,118929,26542],{"class":257},[142,118931,118909],{"class":257},[142,118933,118934],{"class":257}," snapd.seeded.service\n",[14,118936,118937],{},"然后查看snap应用列表",[14,118939,118940,118941,118946],{},"根据你安装的选择不同（最小安装或普通安装），有",[391,118942,118945],{"href":118943,"rel":118944},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23894],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[133,118948,118950],{"className":117305,"code":118949,"language":117307,"meta":31,"style":31},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[139,118951,118952,118957],{"__ignoreMap":31},[142,118953,118954],{"class":144,"line":145},[142,118955,118956],{"class":211},"# 查询当前系统上snap安装了哪些app\n",[142,118958,118959,118962],{"class":144,"line":64},[142,118960,118961],{"class":1991},"snap",[142,118963,118964],{"class":257}," list\n",[14,118966,118967],{},[29,118968],{"alt":31,"src":118969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,118971,118972,118973,118976],{},"卸载掉图中所有应用，按照 ",[302,118974,118975],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[133,118978,118980],{"className":117305,"code":118979,"language":117307,"meta":31,"style":31},"#移除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",[139,118981,118982,118987,118999,119004,119015,119020,119031,119036,119047,119052,119056,119061,119072,119083],{"__ignoreMap":31},[142,118983,118984],{"class":144,"line":145},[142,118985,118986],{"class":211},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[142,118988,118989,118991,118994,118996],{"class":144,"line":64},[142,118990,24606],{"class":1991},[142,118992,118993],{"class":257}," snap",[142,118995,26108],{"class":257},[142,118997,118998],{"class":257}," snap-store\n",[142,119000,119001],{"class":144,"line":1208},[142,119002,119003],{"class":211},"#移除firefox浏览器\n",[142,119005,119006,119008,119010,119012],{"class":144,"line":1223},[142,119007,24606],{"class":1991},[142,119009,118993],{"class":257},[142,119011,26108],{"class":257},[142,119013,119014],{"class":257}," firefox\n",[142,119016,119017],{"class":144,"line":1229},[142,119018,119019],{"class":211},"#移除gnome-42-2204\n",[142,119021,119022,119024,119026,119028],{"class":144,"line":1243},[142,119023,24606],{"class":1991},[142,119025,118993],{"class":257},[142,119027,26108],{"class":257},[142,119029,119030],{"class":257}," gnome-42-2204\n",[142,119032,119033],{"class":144,"line":1249},[142,119034,119035],{"class":211},"#移除gtk-common-themes\n",[142,119037,119038,119040,119042,119044],{"class":144,"line":1340},[142,119039,24606],{"class":1991},[142,119041,118993],{"class":257},[142,119043,26108],{"class":257},[142,119045,119046],{"class":257}," gtk-common-themes\n",[142,119048,119049],{"class":144,"line":1346},[142,119050,119051],{"class":211},"#移除其它...\n",[142,119053,119054],{"class":144,"line":1358},[142,119055,2702],{"class":152},[142,119057,119058],{"class":144,"line":1640},[142,119059,119060],{"class":211},"#移除core22,bare以及snapd\n",[142,119062,119063,119065,119067,119069],{"class":144,"line":1645},[142,119064,24606],{"class":1991},[142,119066,118993],{"class":257},[142,119068,26108],{"class":257},[142,119070,119071],{"class":257}," core22\n",[142,119073,119074,119076,119078,119080],{"class":144,"line":1651},[142,119075,24606],{"class":1991},[142,119077,118993],{"class":257},[142,119079,26108],{"class":257},[142,119081,119082],{"class":257}," bare\n",[142,119084,119085,119087,119089,119091],{"class":144,"line":1656},[142,119086,24606],{"class":1991},[142,119088,118993],{"class":257},[142,119090,26108],{"class":257},[142,119092,119093],{"class":257}," snapd\n",[14,119095,119096],{},[29,119097],{"alt":31,"src":119098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119100,119101],{},"输入以下命令查看是否还有snap包",[133,119103,119105],{"className":117305,"code":119104,"language":117307,"meta":31,"style":31},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[139,119106,119107,119113,119117,119121,119125],{"__ignoreMap":31},[142,119108,119109,119111],{"class":144,"line":145},[142,119110,118961],{"class":1991},[142,119112,118964],{"class":257},[142,119114,119115],{"class":144,"line":64},[142,119116,118813],{"class":211},[142,119118,119119],{"class":144,"line":1208},[142,119120,118837],{"class":1991},[142,119122,119123],{"class":144,"line":1223},[142,119124,118846],{"class":211},[142,119126,119127],{"class":144,"line":1229},[142,119128,118880],{"class":1991},[14,119130,119131],{},[29,119132],{"alt":31,"src":119133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[113,119135,119137],{"id":119136},"_324-移除snap","3.2.4 移除snap",[14,119139,119140,119141,119146],{},"在删除掉",[391,119142,119145],{"href":119143,"rel":119144},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23894],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[133,119148,119150],{"className":117305,"code":119149,"language":117307,"meta":31,"style":31}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[139,119151,119152,119157,119170,119175,119186],{"__ignoreMap":31},[142,119153,119154],{"class":144,"line":145},[142,119155,119156],{"class":211}," #使用apt移除掉snap\n",[142,119158,119159,119161,119163,119165,119168],{"class":144,"line":64},[142,119160,24606],{"class":1991},[142,119162,117326],{"class":257},[142,119164,117634],{"class":257},[142,119166,119167],{"class":201}," --purge",[142,119169,119093],{"class":257},[142,119171,119172],{"class":144,"line":1208},[142,119173,119174],{"class":211},"#移除snapd的一些目录\n",[142,119176,119177,119179,119181,119183],{"class":144,"line":1223},[142,119178,24606],{"class":1991},[142,119180,118562],{"class":257},[142,119182,25354],{"class":201},[142,119184,119185],{"class":257}," \u002Fvar\u002Fcache\u002Fsnapd\n",[142,119187,119188,119190,119192,119194],{"class":144,"line":1229},[142,119189,24606],{"class":1991},[142,119191,118562],{"class":257},[142,119193,25354],{"class":201},[142,119195,119196],{"class":257}," ~\u002Fsnap\n",[14,119198,119199,119200,119203],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[139,119201,119202],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[113,119205,119207],{"id":119206},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119209,119210],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[133,119212,119214],{"className":117305,"code":119213,"language":117307,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[139,119215,119216],{"__ignoreMap":31},[142,119217,119218,119220,119222],{"class":144,"line":145},[142,119219,24606],{"class":1991},[142,119221,118592],{"class":257},[142,119223,119224],{"class":257}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119226,119227,119228,119231],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[139,119229,119230],{},":wq"," 回车",[133,119233,119235],{"className":117305,"code":119234,"language":117307,"meta":31,"style":31},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[139,119236,119237,119244,119258],{"__ignoreMap":31},[142,119238,119239,119242],{"class":144,"line":145},[142,119240,119241],{"class":1991},"Package:",[142,119243,119093],{"class":257},[142,119245,119246,119249,119252,119255],{"class":144,"line":64},[142,119247,119248],{"class":1991},"Pin:",[142,119250,119251],{"class":257}," release",[142,119253,119254],{"class":257}," a=",[142,119256,119257],{"class":201},"*\n",[142,119259,119260,119263],{"class":144,"line":1208},[142,119261,119262],{"class":1991},"Pin-Priority:",[142,119264,119265],{"class":201}," -10\n",[14,119267,119268],{},[29,119269],{"alt":31,"src":119270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[113,119272,119274],{"id":119273},"_326-测试是否成功","3.2.6 测试是否成功",[133,119276,119278],{"className":117305,"code":119277,"language":117307,"meta":31,"style":31},"sudo apt update\nsudo apt install firefox\n",[139,119279,119280,119288],{"__ignoreMap":31},[142,119281,119282,119284,119286],{"class":144,"line":145},[142,119283,24606],{"class":1991},[142,119285,117326],{"class":257},[142,119287,26271],{"class":257},[142,119289,119290,119292,119294,119296],{"class":144,"line":64},[142,119291,24606],{"class":1991},[142,119293,117326],{"class":257},[142,119295,23863],{"class":257},[142,119297,119014],{"class":257},[14,119299,119300],{},"这里提示snapd无法被安装，就证明成功了",[14,119302,119303],{},[29,119304],{"alt":31,"src":119305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[113,119307,119309],{"id":119308},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119311,119312],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119314,119315],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119317,119318],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[133,119320,119322],{"className":117305,"code":119321,"language":117307,"meta":31,"style":31},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[139,119323,119324,119329,119338,119343,119351],{"__ignoreMap":31},[142,119325,119326],{"class":144,"line":145},[142,119327,119328],{"class":211},"# 添加Mozilla提供的源\n",[142,119330,119331,119333,119335],{"class":144,"line":64},[142,119332,24606],{"class":1991},[142,119334,118853],{"class":257},[142,119336,119337],{"class":257}," ppa:mozillateam\u002Fppa\n",[142,119339,119340],{"class":144,"line":1208},[142,119341,119342],{"class":211},"# 安装Firefox\n",[142,119344,119345,119347,119349],{"class":144,"line":1223},[142,119346,24606],{"class":1991},[142,119348,117326],{"class":257},[142,119350,26271],{"class":257},[142,119352,119353,119355,119357,119359],{"class":144,"line":1229},[142,119354,24606],{"class":1991},[142,119356,117326],{"class":257},[142,119358,23863],{"class":257},[142,119360,119014],{"class":257},[113,119362,119364],{"id":119363},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119366,119367],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119369,119370],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[133,119372,119374],{"className":117305,"code":119373,"language":117307,"meta":31,"style":31},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[139,119375,119376,119381,119391,119399,119403],{"__ignoreMap":31},[142,119377,119378],{"class":144,"line":145},[142,119379,119380],{"class":211},"#删掉禁止安装snap的配置文件\n",[142,119382,119383,119385,119387,119389],{"class":144,"line":64},[142,119384,24606],{"class":1991},[142,119386,118562],{"class":257},[142,119388,25354],{"class":201},[142,119390,119224],{"class":257},[142,119392,119393,119395,119397],{"class":144,"line":1208},[142,119394,24606],{"class":1991},[142,119396,117326],{"class":257},[142,119398,26271],{"class":257},[142,119400,119401],{"class":144,"line":1223},[142,119402,2428],{"emptyLinePlaceholder":69},[142,119404,119405,119407,119409],{"class":144,"line":1229},[142,119406,24606],{"class":1991},[142,119408,117326],{"class":257},[142,119410,119411],{"class":257}," dist-update\n",[84,119413,119415],{"id":119414},"_33-中文输入法","3.3 中文输入法",[113,119417,119419],{"id":119418},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119421,119422],{},"官网下载搜狗输入法",[14,119424,119425],{},[29,119426],{"alt":31,"src":119427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119429,119430],{},[29,119431],{"alt":31,"src":119432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119434,119435],{},"打开终端输入如下",[133,119437,119439],{"className":117305,"code":119438,"language":117307,"meta":31,"style":31},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[139,119440,119441,119448],{"__ignoreMap":31},[142,119442,119443,119445],{"class":144,"line":145},[142,119444,101285],{"class":201},[142,119446,119447],{"class":257}," ~\u002FDownloads\u002F\n",[142,119449,119450,119452,119454,119456],{"class":144,"line":64},[142,119451,24606],{"class":1991},[142,119453,117326],{"class":257},[142,119455,23863],{"class":257},[142,119457,119458],{"class":257}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119460,119461],{},"打开Fcitx",[14,119463,119464,119467],{},[29,119465],{"alt":31,"src":119466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[29,119468],{"alt":31,"src":119469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119471,119472],{},[29,119473],{"alt":31,"src":119474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119476,119477],{},"添加搜狗输入法",[14,119479,119480],{},[29,119481],{"alt":31,"src":119482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119484,119485],{},[29,119486],{"alt":31,"src":119487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119489,119490],{},"将搜狗输入法设置为唯一输入法",[14,119492,119493],{},[29,119494],{"alt":31,"src":119495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[113,119497,119499],{"id":119498},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[96,119501,119502],{},[99,119503,119504],{},"卸载旧输入法",[133,119506,119508],{"className":118532,"code":119507,"language":118534,"meta":31,"style":31},"sudo apt purge fcitx* ibus*\n",[139,119509,119510],{"__ignoreMap":31},[142,119511,119512,119514,119516,119518,119521,119523,119526],{"class":144,"line":145},[142,119513,24606],{"class":1991},[142,119515,117326],{"class":257},[142,119517,117667],{"class":257},[142,119519,119520],{"class":257}," fcitx",[142,119522,608],{"class":201},[142,119524,119525],{"class":257}," ibus",[142,119527,119257],{"class":201},[96,119529,119530],{"start":64},[99,119531,119532],{},"安装Fcitx5",[133,119534,119536],{"className":117305,"code":119535,"language":117307,"meta":31,"style":31},"# 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",[139,119537,119538,119543,119557,119561,119566,119575,119583],{"__ignoreMap":31},[142,119539,119540],{"class":144,"line":145},[142,119541,119542],{"class":211},"# Ubuntu22.04及以上、Debian12及以上\n",[142,119544,119545,119547,119549,119551,119554],{"class":144,"line":64},[142,119546,24606],{"class":1991},[142,119548,117326],{"class":257},[142,119550,23863],{"class":257},[142,119552,119553],{"class":257}," fcitx5",[142,119555,119556],{"class":257}," fcitx5-chinese-addons\n",[142,119558,119559],{"class":144,"line":1208},[142,119560,2428],{"emptyLinePlaceholder":69},[142,119562,119563],{"class":144,"line":1223},[142,119564,119565],{"class":211},"# Ubuntu20.04\n",[142,119567,119568,119570,119572],{"class":144,"line":1229},[142,119569,24606],{"class":1991},[142,119571,118853],{"class":257},[142,119573,119574],{"class":257}," ppa:zhsj\u002Ffcitx5\n",[142,119576,119577,119579,119581],{"class":144,"line":1243},[142,119578,24606],{"class":1991},[142,119580,117326],{"class":257},[142,119582,26271],{"class":257},[142,119584,119585,119587,119589,119591,119593],{"class":144,"line":1249},[142,119586,24606],{"class":1991},[142,119588,117326],{"class":257},[142,119590,23863],{"class":257},[142,119592,119553],{"class":257},[142,119594,119556],{"class":257},[96,119596,119597,119600],{"start":1208},[99,119598,119599],{},"Reboot System",[99,119601,119602],{},"启动Fcitx5",[14,119604,119605],{},[29,119606],{"alt":31,"src":119607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[96,119609,119610],{"start":1229},[99,119611,119612],{},"修改一些设置",[14,119614,119615],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119617,119618],{},[29,119619],{"alt":31,"src":119620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119622,119623],{},"添加快捷键以便于更好切换中英文",[14,119625,119626],{},[29,119627],{"alt":31,"src":119628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[96,119630,119631],{"start":1243},[99,119632,119633],{},"重启",[133,119635,119637],{"className":118532,"code":119636,"language":118534,"meta":31,"style":31},"sudo shutdown -r now\n",[139,119638,119639],{"__ignoreMap":31},[142,119640,119641,119643,119646,119649],{"class":144,"line":145},[142,119642,24606],{"class":1991},[142,119644,119645],{"class":257}," shutdown",[142,119647,119648],{"class":201}," -r",[142,119650,119651],{"class":257}," now\n",[96,119653,119654],{"start":1249},[99,119655,119656],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119658,119659],{},[391,119660,119661],{"href":119661,"rel":119662},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23894],[96,119664,119665],{"start":1340},[99,119666,119667],{},"再重启",[133,119669,119670],{"className":118532,"code":119636,"language":118534,"meta":31,"style":31},[139,119671,119672],{"__ignoreMap":31},[142,119673,119674,119676,119678,119680],{"class":144,"line":145},[142,119675,24606],{"class":1991},[142,119677,119645],{"class":257},[142,119679,119648],{"class":201},[142,119681,119651],{"class":257},[84,119683,119685],{"id":119684},"_34-pip3源替换","3.4 pip3源替换",[14,119687,119688],{},"非Debian系发行版需要做。",[14,119690,119691],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119693,119694],{},"使用dnf的系统也可能不用做。",[133,119696,119698],{"className":117305,"code":119697,"language":117307,"meta":31,"style":31},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[139,119699,119700,119705,119712,119717,119722],{"__ignoreMap":31},[142,119701,119702],{"class":144,"line":145},[142,119703,119704],{"class":211},"# 检查是否已安装 pip\n",[142,119706,119707,119710],{"class":144,"line":64},[142,119708,119709],{"class":1991},"pip3",[142,119711,26322],{"class":201},[142,119713,119714],{"class":144,"line":1208},[142,119715,119716],{"class":211},"# 如果未安装，先安装 pip3（见下方）\n",[142,119718,119719],{"class":144,"line":1223},[142,119720,119721],{"class":211},"# 配置 pip 使用清华源\n",[142,119723,119724,119726,119729,119732,119735],{"class":144,"line":1229},[142,119725,119709],{"class":1991},[142,119727,119728],{"class":257}," config",[142,119730,119731],{"class":257}," set",[142,119733,119734],{"class":257}," global.index-url",[142,119736,119737],{"class":257}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119739,119740],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119742,119743],{},[29,119744],{"alt":31,"src":119745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[133,119747,119749],{"className":117305,"code":119748,"language":117307,"meta":31,"style":31},"#安装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",[139,119750,119751,119756,119764,119775,119779,119784,119803,119807,119812,119824,119828,119833],{"__ignoreMap":31},[142,119752,119753],{"class":144,"line":145},[142,119754,119755],{"class":211},"#安装pip3\n",[142,119757,119758,119760,119762],{"class":144,"line":64},[142,119759,24606],{"class":1991},[142,119761,117326],{"class":257},[142,119763,26271],{"class":257},[142,119765,119766,119768,119770,119772],{"class":144,"line":1208},[142,119767,24606],{"class":1991},[142,119769,26105],{"class":257},[142,119771,23863],{"class":257},[142,119773,119774],{"class":257}," python3-pip\n",[142,119776,119777],{"class":144,"line":1223},[142,119778,2428],{"emptyLinePlaceholder":69},[142,119780,119781],{"class":144,"line":1229},[142,119782,119783],{"class":211},"#更新pip3\n",[142,119785,119786,119788,119790,119792,119794,119796,119799,119801],{"class":144,"line":1243},[142,119787,100888],{"class":1991},[142,119789,100891],{"class":201},[142,119791,100914],{"class":257},[142,119793,23863],{"class":257},[142,119795,26459],{"class":201},[142,119797,119798],{"class":257}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[142,119800,100919],{"class":201},[142,119802,100922],{"class":257},[142,119804,119805],{"class":144,"line":1249},[142,119806,2428],{"emptyLinePlaceholder":69},[142,119808,119809],{"class":144,"line":1340},[142,119810,119811],{"class":211},"#设置pip源为清华源\n",[142,119813,119814,119816,119818,119820,119822],{"class":144,"line":1346},[142,119815,119709],{"class":1991},[142,119817,119728],{"class":257},[142,119819,119731],{"class":257},[142,119821,119734],{"class":257},[142,119823,119737],{"class":257},[142,119825,119826],{"class":144,"line":1358},[142,119827,2428],{"emptyLinePlaceholder":69},[142,119829,119830],{"class":144,"line":1640},[142,119831,119832],{"class":211},"#测试\n",[142,119834,119835,119837,119839,119841,119843,119845],{"class":144,"line":1645},[142,119836,100888],{"class":1991},[142,119838,100891],{"class":201},[142,119840,100914],{"class":257},[142,119842,23863],{"class":257},[142,119844,100919],{"class":201},[142,119846,100922],{"class":257},[14,119848,119849],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119851,119852],{},[29,119853],{"alt":31,"src":119854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[84,119856,119858],{"id":119857},"_35-显卡驱动安装","3.5 显卡驱动安装",[113,119860,119862],{"id":119861},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[133,119864,119866],{"className":118532,"code":119865,"language":118534,"meta":31,"style":31},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[139,119867,119868,119873,119888,119893],{"__ignoreMap":31},[142,119869,119870],{"class":144,"line":145},[142,119871,119872],{"class":211},"# 如果是使用apt安装的驱动\n",[142,119874,119875,119877,119879,119881,119883,119886],{"class":144,"line":64},[142,119876,24606],{"class":1991},[142,119878,26105],{"class":257},[142,119880,26108],{"class":257},[142,119882,119167],{"class":201},[142,119884,119885],{"class":257}," nvidia",[142,119887,119257],{"class":201},[142,119889,119890],{"class":144,"line":1208},[142,119891,119892],{"class":211},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[142,119894,119895,119897],{"class":144,"line":1223},[142,119896,24606],{"class":1991},[142,119898,119899],{"class":257}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[113,119901,119903],{"id":119902},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22027,119905,119907],{"id":119906},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22939,119909,119911],{"id":119910},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[133,119913,119915],{"className":118532,"code":119914,"language":118534,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[139,119916,119917,119922,119933,119938,119948,119953],{"__ignoreMap":31},[142,119918,119919],{"class":144,"line":145},[142,119920,119921],{"class":211},"# 安装英伟达驱动\n",[142,119923,119924,119926,119928,119930],{"class":144,"line":64},[142,119925,24606],{"class":1991},[142,119927,117326],{"class":257},[142,119929,23863],{"class":257},[142,119931,119932],{"class":257}," nvidia-driver-版本号\n",[142,119934,119935],{"class":144,"line":1208},[142,119936,119937],{"class":211},"# 重启 \n",[142,119939,119940,119942,119944,119946],{"class":144,"line":1223},[142,119941,24606],{"class":1991},[142,119943,119645],{"class":257},[142,119945,119648],{"class":201},[142,119947,119651],{"class":257},[142,119949,119950],{"class":144,"line":1229},[142,119951,119952],{"class":211},"# 检查驱动是否安装成功\n",[142,119954,119955],{"class":144,"line":1243},[142,119956,119957],{"class":1991},"nvidia-smi\n",[22939,119959,119961],{"id":119960},"_35212-debian","3.5.2.1.2 Debian",[133,119963,119965],{"className":118532,"code":119964,"language":118534,"meta":31,"style":31},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[139,119966,119967,119971,119985,119989,119999,120003],{"__ignoreMap":31},[142,119968,119969],{"class":144,"line":145},[142,119970,119921],{"class":211},[142,119972,119973,119975,119977,119979,119982],{"class":144,"line":64},[142,119974,24606],{"class":1991},[142,119976,117326],{"class":257},[142,119978,23863],{"class":257},[142,119980,119981],{"class":257}," nvidia-driver",[142,119983,119984],{"class":257}," nvidia-settings\n",[142,119986,119987],{"class":144,"line":1208},[142,119988,119937],{"class":211},[142,119990,119991,119993,119995,119997],{"class":144,"line":1223},[142,119992,24606],{"class":1991},[142,119994,119645],{"class":257},[142,119996,119648],{"class":201},[142,119998,119651],{"class":257},[142,120000,120001],{"class":144,"line":1229},[142,120002,119952],{"class":211},[142,120004,120005],{"class":144,"line":1243},[142,120006,119957],{"class":1991},[22027,120008,120010],{"id":120009},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120012,120013,120014,120017],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[302,120015,120016],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120019,120020,120021],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23582,120022,120023],{},[302,120024,120025],{},"（也可以不禁用桌面环境，直接进行下一步。）",[133,120027,120029],{"className":118532,"code":120028,"language":118534,"meta":31,"style":31},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[139,120030,120031,120036,120046,120051,120064,120069],{"__ignoreMap":31},[142,120032,120033],{"class":144,"line":145},[142,120034,120035],{"class":211},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[142,120037,120038,120040,120043],{"class":144,"line":64},[142,120039,24606],{"class":1991},[142,120041,120042],{"class":257}," telinit",[142,120044,120045],{"class":201}," 3\n",[142,120047,120048],{"class":144,"line":1208},[142,120049,120050],{"class":211},"# ubuntu 使用下方命令\n",[142,120052,120053,120055,120058,120061],{"class":144,"line":1223},[142,120054,24606],{"class":1991},[142,120056,120057],{"class":257}," service",[142,120059,120060],{"class":257}," lightdm",[142,120062,120063],{"class":257}," stop\n",[142,120065,120066],{"class":144,"line":1229},[142,120067,120068],{"class":211},"# Fedora 使用下方命令\n",[142,120070,120071,120073,120075,120078],{"class":144,"line":1243},[142,120072,24606],{"class":1991},[142,120074,26542],{"class":257},[142,120076,120077],{"class":257}," isolate",[142,120079,120080],{"class":257}," multi-user.target\n",[14,120082,120083],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[133,120085,120087],{"className":118532,"code":120086,"language":118534,"meta":31,"style":31},"# 编译环境+准备工作\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",[139,120088,120089,120094,120105,120110,120117,120122,120134,120139,120146,120151],{"__ignoreMap":31},[142,120090,120091],{"class":144,"line":145},[142,120092,120093],{"class":211},"# 编译环境+准备工作\n",[142,120095,120096,120098,120100,120102],{"class":144,"line":64},[142,120097,24606],{"class":1991},[142,120099,117326],{"class":257},[142,120101,23863],{"class":257},[142,120103,120104],{"class":257}," build-essential\n",[142,120106,120107],{"class":144,"line":1208},[142,120108,120109],{"class":211},"# 进入到.run目录中\n",[142,120111,120112,120114],{"class":144,"line":1223},[142,120113,101285],{"class":201},[142,120115,120116],{"class":257}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[142,120118,120119],{"class":144,"line":1229},[142,120120,120121],{"class":211},"# 给驱动文件增加可执行权限：\n",[142,120123,120124,120126,120128,120131],{"class":144,"line":1243},[142,120125,24606],{"class":1991},[142,120127,24609],{"class":257},[142,120129,120130],{"class":257}," a+x",[142,120132,120133],{"class":257}," NVIDIA-Linux-x86_64-550.107.02.run\n",[142,120135,120136],{"class":144,"line":1249},[142,120137,120138],{"class":211},"# 然后执行安装：\n",[142,120140,120141,120143],{"class":144,"line":1340},[142,120142,24606],{"class":1991},[142,120144,120145],{"class":257}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[142,120147,120148],{"class":144,"line":1346},[142,120149,120150],{"class":211},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[142,120152,120153,120155,120158],{"class":144,"line":1358},[142,120154,24606],{"class":1991},[142,120156,120157],{"class":257}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[142,120159,120160],{"class":201},"  --no-opengl-files\n",[14,120162,120163],{},"安装完毕重启即可",[133,120165,120167],{"className":118532,"code":120166,"language":118534,"meta":31,"style":31},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[139,120168,120169,120173,120179,120183],{"__ignoreMap":31},[142,120170,120171],{"class":144,"line":145},[142,120172,119937],{"class":211},[142,120174,120175,120177],{"class":144,"line":64},[142,120176,24606],{"class":1991},[142,120178,26676],{"class":257},[142,120180,120181],{"class":144,"line":1208},[142,120182,119952],{"class":211},[142,120184,120185],{"class":144,"line":1223},[142,120186,119957],{"class":1991},[113,120188,120190],{"id":120189},"_353-安装cuda","3.5.3 安装CUDA",[14,120192,120193],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120195,120196],{},[29,120197],{"alt":31,"src":120198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[96,120200,120201],{},[99,120202,120203],{},"先查看显卡驱动所支持的最高CUDA版本",[133,120205,120206],{"className":118532,"code":119957,"language":118534,"meta":31,"style":31},[139,120207,120208],{"__ignoreMap":31},[142,120209,120210],{"class":144,"line":145},[142,120211,119957],{"class":1991},[14,120213,120214],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120216,120217],{},[29,120218],{"alt":31,"src":120219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[96,120221,120222],{"start":64},[99,120223,120224],{},"下载CUDA并安装CUDA",[14,120226,118311,120227],{},[391,120228,118314],{"href":118314,"rel":120229},[23894],[14,120231,120232],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120234,120235],{},[29,120236],{"alt":31,"src":120237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120239,120240,120241,120246],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[391,120242,120245],{"href":120243,"rel":120244},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23894],"Vinci机器人队单片机教程","）",[14,120248,120249],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120251,120252],{},[29,120253],{"alt":31,"src":120254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120256,120257],{},"将最下方框框里的命令敲入终端",[133,120259,120261],{"className":118532,"code":120260,"language":118534,"meta":31,"style":31},"# 在当前文件夹下创建一个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",[139,120262,120263,120268,120277,120282,120289,120294,120302,120307,120318,120323],{"__ignoreMap":31},[142,120264,120265],{"class":144,"line":145},[142,120266,120267],{"class":211},"# 在当前文件夹下创建一个ttt的子文件夹\n",[142,120269,120270,120272,120274],{"class":144,"line":64},[142,120271,101275],{"class":1991},[142,120273,29245],{"class":201},[142,120275,120276],{"class":257}," .\u002Fttt\n",[142,120278,120279],{"class":144,"line":1208},[142,120280,120281],{"class":211},"# 进入ttt文件夹\n",[142,120283,120284,120286],{"class":144,"line":1223},[142,120285,101285],{"class":201},[142,120287,120288],{"class":257}," ttt\n",[142,120290,120291],{"class":144,"line":1229},[142,120292,120293],{"class":211},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[142,120295,120296,120299],{"class":144,"line":1243},[142,120297,120298],{"class":1991},"wget",[142,120300,120301],{"class":257}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[142,120303,120304],{"class":144,"line":1249},[142,120305,120306],{"class":211},"# 给予权限\n",[142,120308,120309,120311,120313,120315],{"class":144,"line":1340},[142,120310,24606],{"class":1991},[142,120312,24609],{"class":257},[142,120314,120130],{"class":257},[142,120316,120317],{"class":257}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[142,120319,120320],{"class":144,"line":1346},[142,120321,120322],{"class":211},"# 运行脚本\n",[142,120324,120325,120327],{"class":144,"line":1358},[142,120326,24606],{"class":1991},[142,120328,120317],{"class":257},[14,120330,120331],{},[29,120332],{"alt":31,"src":120333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120335,120336],{},"正在安装中：",[14,120338,120339],{},[29,120340],{"alt":31,"src":120341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120343,120344],{},"输入accept接受即可",[14,120346,120347],{},[29,120348],{"alt":31,"src":120349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120351,120352],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120354,120355],{},[29,120356],{"alt":31,"src":120357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120359,120360],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120362,120363],{},[29,120364],{"alt":31,"src":120365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[96,120367,120368],{"start":1208},[99,120369,120370],{},"配置环境",[14,120372,120373],{},"根据上方确认一下路径，比如我上面红色框起来的为",[133,120375,120377],{"className":118532,"code":120376,"language":118534,"meta":31,"style":31},"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",[139,120378,120379,120395,120410],{"__ignoreMap":31},[142,120380,120381,120384,120387,120390,120393],{"class":144,"line":145},[142,120382,120383],{"class":1991},"Please",[142,120385,120386],{"class":257}," make",[142,120388,120389],{"class":257}," sure",[142,120391,120392],{"class":257}," that",[142,120394,2702],{"class":152},[142,120396,120397,120399,120402,120405,120408],{"class":144,"line":64},[142,120398,52300],{"class":1991},[142,120400,120401],{"class":257},"   PATH",[142,120403,120404],{"class":257}," includes",[142,120406,120407],{"class":257}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[142,120409,2702],{"class":152},[142,120411,120412,120414,120417,120419,120422,120425,120427,120430,120433,120436,120439,120441,120444,120446],{"class":144,"line":1208},[142,120413,52300],{"class":1991},[142,120415,120416],{"class":257},"   LD_LIBRARY_PATH",[142,120418,120404],{"class":257},[142,120420,120421],{"class":257}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[142,120423,120424],{"class":257}," or,",[142,120426,5238],{"class":257},[142,120428,120429],{"class":257}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[142,120431,120432],{"class":257}," to",[142,120434,120435],{"class":257}," \u002Fetc\u002Fld.so.conf",[142,120437,120438],{"class":257}," and",[142,120440,27259],{"class":257},[142,120442,120443],{"class":257}," ldconfig",[142,120445,64633],{"class":257},[142,120447,120448],{"class":257}," root\n",[14,120450,120451],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[133,120453,120455],{"className":118532,"code":120454,"language":118534,"meta":31,"style":31},"which nvcc\n",[139,120456,120457],{"__ignoreMap":31},[142,120458,120459,120462],{"class":144,"line":145},[142,120460,120461],{"class":201},"which",[142,120463,120464],{"class":257}," nvcc\n",[14,120466,120467],{},[29,120468],{"alt":31,"src":120469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120471,120472],{},"所以我进行以下操作：",[133,120474,120476],{"className":118532,"code":120475,"language":118534,"meta":31,"style":31},"sudo vim ~\u002F.bashrc\n",[139,120477,120478],{"__ignoreMap":31},[142,120479,120480,120482,120484],{"class":144,"line":145},[142,120481,24606],{"class":1991},[142,120483,118592],{"class":257},[142,120485,120486],{"class":257}," ~\u002F.bashrc\n",[14,120488,120489],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[133,120491,120493],{"className":118532,"code":120492,"language":118534,"meta":31,"style":31},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[139,120494,120495,120507],{"__ignoreMap":31},[142,120496,120497,120499,120502,120504],{"class":144,"line":145},[142,120498,25071],{"class":148},[142,120500,120501],{"class":152}," PATH",[142,120503,198],{"class":148},[142,120505,120506],{"class":152},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[142,120508,120509,120511,120514,120516],{"class":144,"line":64},[142,120510,25071],{"class":148},[142,120512,120513],{"class":152}," LD_LIBRARY_PATH",[142,120515,198],{"class":148},[142,120517,120518],{"class":152},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120520,120521],{},[29,120522],{"alt":31,"src":120523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[133,120525,120527],{"className":118532,"code":120526,"language":118534,"meta":31,"style":31},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[139,120528,120529,120534,120540,120545],{"__ignoreMap":31},[142,120530,120531],{"class":144,"line":145},[142,120532,120533],{"class":211},"# 刷新当前终端的环境变量\n",[142,120535,120536,120538],{"class":144,"line":64},[142,120537,100902],{"class":201},[142,120539,120486],{"class":257},[142,120541,120542],{"class":144,"line":1208},[142,120543,120544],{"class":211},"# 验证CUDA是否安装成功\n",[142,120546,120547,120550],{"class":144,"line":1223},[142,120548,120549],{"class":1991},"nvcc",[142,120551,120552],{"class":201}," -V\n",[14,120554,120555],{},"出现下图这种则安装成功。",[14,120557,120558],{},[29,120559],{"alt":31,"src":120560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[113,120562,120564],{"id":120563},"_354-安装cudnn","3.5.4 安装cuDNN",[96,120566,120567],{},[99,120568,120569],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120571,120572,120573,120578],{},"前往 NVIDIA cuDNN 下载页面：",[391,120574,120577],{"href":120575,"rel":120576},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23894],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120580,120581],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120583,120584],{},[29,120585],{"alt":31,"src":120586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120588,120589],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120591,120592],{},[29,120593],{"alt":31,"src":120594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120596,120597],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120599,120600],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120602,120603],{},[302,120604,120605],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120607,120608],{},"下载好的：",[14,120610,120611],{},[29,120612],{"alt":31,"src":120613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[96,120615,120616],{"start":64},[99,120617,120618],{},"安装cuDNN",[14,120620,120621],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120623,120624],{},[29,120625],{"alt":31,"src":120626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120628,120629],{},"解压文件，并复制到对应位置完成安装",[133,120631,120633],{"className":118532,"code":120632,"language":118534,"meta":31,"style":31},"# 解压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",[139,120634,120635,120640,120651,120656,120663,120668,120684,120698,120703,120714,120723,120727,120743],{"__ignoreMap":31},[142,120636,120637],{"class":144,"line":145},[142,120638,120639],{"class":211},"# 解压cuDNN文件\n",[142,120641,120642,120645,120648],{"class":144,"line":64},[142,120643,120644],{"class":1991},"tar",[142,120646,120647],{"class":201}," -xvf",[142,120649,120650],{"class":257}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[142,120652,120653],{"class":144,"line":1208},[142,120654,120655],{"class":211},"# cd进文件夹\n",[142,120657,120658,120660],{"class":144,"line":1223},[142,120659,101285],{"class":201},[142,120661,120662],{"class":257}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[142,120664,120665],{"class":144,"line":1229},[142,120666,120667],{"class":211},"# 复制cuDNN文件到CUDA目录\n",[142,120669,120670,120672,120674,120677,120679,120682],{"class":144,"line":1243},[142,120671,24606],{"class":1991},[142,120673,27890],{"class":257},[142,120675,120676],{"class":257}," include\u002Fcudnn",[142,120678,608],{"class":201},[142,120680,120681],{"class":257},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[142,120683,2702],{"class":152},[142,120685,120686,120688,120690,120693,120695],{"class":144,"line":1249},[142,120687,24606],{"class":1991},[142,120689,27890],{"class":257},[142,120691,120692],{"class":257}," lib\u002Flibcudnn",[142,120694,608],{"class":201},[142,120696,120697],{"class":257},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[142,120699,120700],{"class":144,"line":1340},[142,120701,120702],{"class":211},"# 对比一下有没有缺文件\n",[142,120704,120705,120707,120710,120712],{"class":144,"line":1346},[142,120706,26790],{"class":1991},[142,120708,120709],{"class":257}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[142,120711,608],{"class":201},[142,120713,2702],{"class":152},[142,120715,120716,120718,120721],{"class":144,"line":1358},[142,120717,26790],{"class":1991},[142,120719,120720],{"class":257}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[142,120722,119257],{"class":201},[142,120724,120725],{"class":144,"line":1640},[142,120726,120306],{"class":211},[142,120728,120729,120731,120733,120736,120738,120740],{"class":144,"line":1645},[142,120730,24606],{"class":1991},[142,120732,24609],{"class":257},[142,120734,120735],{"class":257}," a+r",[142,120737,120709],{"class":257},[142,120739,608],{"class":201},[142,120741,120742],{"class":152},"   \n",[142,120744,120745,120747,120749,120751,120753],{"class":144,"line":1651},[142,120746,24606],{"class":1991},[142,120748,24609],{"class":257},[142,120750,120735],{"class":257},[142,120752,120720],{"class":257},[142,120754,119257],{"class":201},[96,120756,120757],{"start":1208},[99,120758,120759],{},"检查是否安装成功",[133,120761,120763],{"className":118532,"code":120762,"language":118534,"meta":31,"style":31},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[139,120764,120765,120770],{"__ignoreMap":31},[142,120766,120767],{"class":144,"line":145},[142,120768,120769],{"class":211},"# 检查cuDNN版本命令\n",[142,120771,120772,120775,120778,120780,120782,120785,120788],{"class":144,"line":64},[142,120773,120774],{"class":1991},"cat",[142,120776,120777],{"class":257}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[142,120779,25138],{"class":148},[142,120781,30265],{"class":1991},[142,120783,120784],{"class":257}," CUDNN_MAJOR",[142,120786,120787],{"class":201}," -A",[142,120789,47752],{"class":201},[14,120791,120792],{},"出现下图这样的就是安装成功了",[14,120794,120795],{},[29,120796],{"alt":31,"src":120797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[96,120799,120800],{"start":1223},[99,120801,120802],{},"软链接(一般不需要)",[133,120804,120806],{"className":118532,"code":120805,"language":118534,"meta":31,"style":31},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[139,120807,120808,120813],{"__ignoreMap":31},[142,120809,120810],{"class":144,"line":145},[142,120811,120812],{"class":211},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[142,120814,120815,120817],{"class":144,"line":64},[142,120816,24606],{"class":1991},[142,120818,120819],{"class":257}," ldconfig\n",[14,120821,120822],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[133,120824,120829],{"className":120825,"code":120826,"language":120827,"meta":120828,"style":31},"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",[139,120830,120831,120836,120841,120846,120851,120856,120861],{"__ignoreMap":31},[142,120832,120833],{"class":144,"line":145},[142,120834,120835],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[142,120837,120838],{"class":144,"line":64},[142,120839,120840],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[142,120842,120843],{"class":144,"line":1208},[142,120844,120845],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[142,120847,120848],{"class":144,"line":1223},[142,120849,120850],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[142,120852,120853],{"class":144,"line":1229},[142,120854,120855],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[142,120857,120858],{"class":144,"line":1243},[142,120859,120860],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[142,120862,120863],{"class":144,"line":1249},[142,120864,120865],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120867,120868],{},"运行下方的命令",[133,120870,120872],{"className":118532,"code":120871,"language":118534,"meta":31,"style":31},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[139,120873,120874,120879,120886,120891],{"__ignoreMap":31},[142,120875,120876],{"class":144,"line":145},[142,120877,120878],{"class":211},"# cd进入CUDA路径\n",[142,120880,120881,120883],{"class":144,"line":64},[142,120882,101285],{"class":201},[142,120884,120885],{"class":257}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[142,120887,120888],{"class":144,"line":1208},[142,120889,120890],{"class":211}," # 查看本路径下的需要软链接的文件名\n",[142,120892,120893],{"class":144,"line":1223},[142,120894,120895],{"class":1991}," ls\n",[14,120897,120898],{},[29,120899],{"alt":31,"src":120900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120902,120903,120904,18439,120907,18439,120910,120913],{},"如上图，我需要将",[139,120905,120906],{},"libcudnn_xxx_xxxxx.so.8.9.7",[139,120908,120909],{},"libcudnn_xxx_xxxxx.so.8",[139,120911,120912],{},"libcudnn_xxx_xxxxx.so","软链接",[133,120915,120917],{"className":118532,"code":120916,"language":118534,"meta":31,"style":31},"# 创建符号链接。对于每个 .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",[139,120918,120919,120924,120940,120954,120968,120982,120996,121010,121024,121029,121035,121040],{"__ignoreMap":31},[142,120920,120921],{"class":144,"line":145},[142,120922,120923],{"class":211},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[142,120925,120926,120928,120931,120934,120937],{"class":144,"line":64},[142,120927,24606],{"class":1991},[142,120929,120930],{"class":257}," ln",[142,120932,120933],{"class":201}," -sf",[142,120935,120936],{"class":257}," libcudnn_cnn_train.so.8.9.7",[142,120938,120939],{"class":257}," libcudnn_cnn_train.so.8\n",[142,120941,120942,120944,120946,120948,120951],{"class":144,"line":1208},[142,120943,24606],{"class":1991},[142,120945,120930],{"class":257},[142,120947,120933],{"class":201},[142,120949,120950],{"class":257}," libcudnn_adv_infer.so.8.9.7",[142,120952,120953],{"class":257}," libcudnn_adv_infer.so.8\n",[142,120955,120956,120958,120960,120962,120965],{"class":144,"line":1223},[142,120957,24606],{"class":1991},[142,120959,120930],{"class":257},[142,120961,120933],{"class":201},[142,120963,120964],{"class":257}," libcudnn_adv_train.so.8.9.7",[142,120966,120967],{"class":257}," libcudnn_adv_train.so.8\n",[142,120969,120970,120972,120974,120976,120979],{"class":144,"line":1229},[142,120971,24606],{"class":1991},[142,120973,120930],{"class":257},[142,120975,120933],{"class":201},[142,120977,120978],{"class":257}," libcudnn_cnn_infer.so.8.9.7",[142,120980,120981],{"class":257}," libcudnn_cnn_infer.so.8\n",[142,120983,120984,120986,120988,120990,120993],{"class":144,"line":1243},[142,120985,24606],{"class":1991},[142,120987,120930],{"class":257},[142,120989,120933],{"class":201},[142,120991,120992],{"class":257}," libcudnn.so.8.9.7",[142,120994,120995],{"class":257}," libcudnn.so.8\n",[142,120997,120998,121000,121002,121004,121007],{"class":144,"line":1249},[142,120999,24606],{"class":1991},[142,121001,120930],{"class":257},[142,121003,120933],{"class":201},[142,121005,121006],{"class":257}," libcudnn_ops_infer.so.8.9.7",[142,121008,121009],{"class":257}," libcudnn_ops_infer.so.8\n",[142,121011,121012,121014,121016,121018,121021],{"class":144,"line":1340},[142,121013,24606],{"class":1991},[142,121015,120930],{"class":257},[142,121017,120933],{"class":201},[142,121019,121020],{"class":257}," libcudnn_ops_train.so.8.9.7",[142,121022,121023],{"class":257}," libcudnn_ops_train.so.8\n",[142,121025,121026],{"class":144,"line":1346},[142,121027,121028],{"class":211},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[142,121030,121031,121033],{"class":144,"line":1358},[142,121032,24606],{"class":1991},[142,121034,120819],{"class":257},[142,121036,121037],{"class":144,"line":1640},[142,121038,121039],{"class":211},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[142,121041,121042,121044,121047,121050,121052,121055],{"class":144,"line":1645},[142,121043,26790],{"class":1991},[142,121045,121046],{"class":201}," -l",[142,121048,121049],{"class":257}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[142,121051,608],{"class":201},[142,121053,121054],{"class":257},".so",[142,121056,119257],{"class":201},[113,121058,121060],{"id":121059},"_355-常见问题","3.5.5 常见问题",[96,121062,121063],{},[99,121064,121065],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[133,121067,121069],{"className":118532,"code":121068,"language":118534,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[139,121070,121071],{"__ignoreMap":31},[142,121072,121073,121075,121077],{"class":144,"line":145},[142,121074,24606],{"class":1991},[142,121076,118592],{"class":257},[142,121078,121079],{"class":257}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121081,121082],{},"blacklist-nouveau.conf文件内容如下：",[133,121084,121086],{"className":118532,"code":121085,"language":118534,"meta":31,"style":31},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[139,121087,121088,121096,121103,121115,121125],{"__ignoreMap":31},[142,121089,121090,121093],{"class":144,"line":145},[142,121091,121092],{"class":1991},"blacklist",[142,121094,121095],{"class":257}," nouveau\n",[142,121097,121098,121100],{"class":144,"line":64},[142,121099,121092],{"class":1991},[142,121101,121102],{"class":257}," lbm-nouveau\n",[142,121104,121105,121107,121110,121113],{"class":144,"line":1208},[142,121106,115939],{"class":1991},[142,121108,121109],{"class":257}," nouveau",[142,121111,121112],{"class":257}," modeset=",[142,121114,3113],{"class":201},[142,121116,121117,121120,121122],{"class":144,"line":1223},[142,121118,121119],{"class":201},"alias",[142,121121,121109],{"class":257},[142,121123,121124],{"class":257}," off\n",[142,121126,121127,121129,121132],{"class":144,"line":1229},[142,121128,121119],{"class":201},[142,121130,121131],{"class":257}," lbm-nouveau",[142,121133,121124],{"class":257},[14,121135,121136],{},"接着运行下方命令",[133,121138,121140],{"className":118532,"code":121139,"language":118534,"meta":31,"style":31},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[139,121141,121142,121152,121157],{"__ignoreMap":31},[142,121143,121144,121146,121149],{"class":144,"line":145},[142,121145,24606],{"class":1991},[142,121147,121148],{"class":257}," update-initramfs",[142,121150,121151],{"class":201}," -u\n",[142,121153,121154],{"class":144,"line":64},[142,121155,121156],{"class":1991},"或者\n",[142,121158,121159,121161,121164],{"class":144,"line":1208},[142,121160,24606],{"class":1991},[142,121162,121163],{"class":257}," dracut",[142,121165,121166],{"class":201}," --force\n",[14,121168,121169],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[133,121171,121173],{"className":118532,"code":121172,"language":118534,"meta":31,"style":31},"lsmod | grep nouveau\n",[139,121174,121175],{"__ignoreMap":31},[142,121176,121177,121180,121182,121184],{"class":144,"line":145},[142,121178,121179],{"class":1991},"lsmod",[142,121181,25138],{"class":148},[142,121183,30265],{"class":1991},[142,121185,121095],{"class":257},[96,121187,121188],{"start":64},[99,121189,121190],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[133,121192,121194],{"className":118532,"code":121193,"language":118534,"meta":31,"style":31},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[139,121195,121196],{"__ignoreMap":31},[142,121197,121198,121200,121202],{"class":144,"line":145},[142,121199,24606],{"class":1991},[142,121201,118592],{"class":257},[142,121203,121204],{"class":257}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121206,121207],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[133,121209,121211],{"className":118532,"code":121210,"language":118534,"meta":31,"style":31},"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",[139,121212,121213,121221,121229,121237,121244,121252,121262,121270],{"__ignoreMap":31},[142,121214,121215,121218],{"class":144,"line":145},[142,121216,121217],{"class":1991},"Section",[142,121219,121220],{"class":257}," \"OutputClass\"\n",[142,121222,121223,121226],{"class":144,"line":64},[142,121224,121225],{"class":1991},"   Identifier",[142,121227,121228],{"class":257}," \"nvidia\"\n",[142,121230,121231,121234],{"class":144,"line":1208},[142,121232,121233],{"class":1991},"   MatchDriver",[142,121235,121236],{"class":257}," \"nvidia-drm\"\n",[142,121238,121239,121242],{"class":144,"line":1223},[142,121240,121241],{"class":1991},"   Driver",[142,121243,121228],{"class":257},[142,121245,121246,121249],{"class":144,"line":1229},[142,121247,121248],{"class":1991},"   Option",[142,121250,121251],{"class":257}," \"AllowEmptyInitialConfiguration\"\n",[142,121253,121254,121256,121259],{"class":144,"line":1243},[142,121255,121248],{"class":1991},[142,121257,121258],{"class":257}," \"PrimaryGPU\"",[142,121260,121261],{"class":257}," \"yes\"\n",[142,121263,121264,121267],{"class":144,"line":1249},[142,121265,121266],{"class":1991},"   ModulePath",[142,121268,121269],{"class":257}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[142,121271,121272],{"class":144,"line":1340},[142,121273,121274],{"class":1991},"EndSection\n",[96,121276,121277],{"start":1208},[99,121278,121279],{},"安装N卡驱动提示错误",[133,121281,121283],{"className":120825,"code":121282,"language":120827,"meta":120828,"style":31},"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",[139,121284,121285],{"__ignoreMap":31},[142,121286,121287],{"class":144,"line":145},[142,121288,121282],{},[96,121290,121291],{},[99,121292,121293],{},"检查当前运行的内核版本：",[14,121295,121296],{},"运行以下命令以查看你当前正在使用的内核版本：",[133,121298,121300],{"className":117305,"code":121299,"language":117307,"meta":31,"style":31},"uname -r\n",[139,121301,121302],{"__ignoreMap":31},[142,121303,121304,121306],{"class":144,"line":145},[142,121305,70233],{"class":1991},[142,121307,121308],{"class":201}," -r\n",[96,121310,121311],{"start":64},[99,121312,121313],{},"安装内核开发文件：",[14,121315,121316,121317,121320],{},"确保你已经安装了与当前内核版本相匹配的 ",[139,121318,121319],{},"kernel-devel"," 包。运行以下命令来安装：",[133,121322,121324],{"className":117305,"code":121323,"language":117307,"meta":31,"style":31},"sudo dnf install kernel-devel-$(uname -r)\n",[139,121325,121326],{"__ignoreMap":31},[142,121327,121328,121330,121332,121334,121337,121339,121341,121343],{"class":144,"line":145},[142,121329,24606],{"class":1991},[142,121331,26344],{"class":257},[142,121333,23863],{"class":257},[142,121335,121336],{"class":257}," kernel-devel-",[142,121338,25128],{"class":152},[142,121340,70233],{"class":1991},[142,121342,119648],{"class":201},[142,121344,159],{"class":152},[14,121346,121347],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[96,121349,121350],{"start":1208},[99,121351,121352],{},"安装内核源代码（如果需要）：",[14,121354,121355],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[133,121357,121359],{"className":117305,"code":121358,"language":117307,"meta":31,"style":31},"sudo dnf install kernel-headers kernel-source\n",[139,121360,121361],{"__ignoreMap":31},[142,121362,121363,121365,121367,121369,121372],{"class":144,"line":145},[142,121364,24606],{"class":1991},[142,121366,26344],{"class":257},[142,121368,23863],{"class":257},[142,121370,121371],{"class":257}," kernel-headers",[142,121373,121374],{"class":257}," kernel-source\n",[96,121376,121377],{"start":1223},[99,121378,121379],{},"检查安装：",[14,121381,121382,121383,121386],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[139,121384,121385],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[133,121388,121390],{"className":117305,"code":121389,"language":117307,"meta":31,"style":31},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[139,121391,121392],{"__ignoreMap":31},[142,121393,121394,121396],{"class":144,"line":145},[142,121395,26790],{"class":1991},[142,121397,121398],{"class":257}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121400,121401,121402,121405],{},"如果仍然遇到问题，可以通过 ",[139,121403,121404],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5155,121407,121408],{},"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":31,"searchDepth":64,"depth":64,"links":121410},[121411,121415,121425,121429,121430],{"id":118508,"depth":64,"text":118509,"children":121412},[121413,121414],{"id":118518,"depth":1208,"text":118519},{"id":118528,"depth":1208,"text":118529},{"id":118728,"depth":64,"text":118729,"children":121416},[121417,121418,121419,121420,121421,121422,121423,121424],{"id":118732,"depth":1208,"text":118733},{"id":118802,"depth":1208,"text":118803},{"id":118891,"depth":1208,"text":118892},{"id":119136,"depth":1208,"text":119137},{"id":119206,"depth":1208,"text":119207},{"id":119273,"depth":1208,"text":119274},{"id":119308,"depth":1208,"text":119309},{"id":119363,"depth":1208,"text":119364},{"id":119414,"depth":64,"text":119415,"children":121426},[121427,121428],{"id":119418,"depth":1208,"text":119419},{"id":119498,"depth":1208,"text":119499},{"id":119684,"depth":64,"text":119685},{"id":119857,"depth":64,"text":119858,"children":121431},[121432,121433,121434,121435,121436],{"id":119861,"depth":1208,"text":119862},{"id":119902,"depth":1208,"text":119903},{"id":120189,"depth":1208,"text":120190},{"id":120563,"depth":1208,"text":120564},{"id":121059,"depth":1208,"text":121060},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118500,"description":66},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121443,"title":121444,"body":121445,"description":66,"extension":67,"meta":121785,"navigation":69,"path":121786,"seo":121787,"stem":121788,"__hash__":121789},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121446,"toc":121783},[121447,121450,121455,121458,121704,121709,121712,121748,121751,121780],[10,121448,121444],{"id":121449},"_4-命令教程长期积累",[96,121451,121452],{},[99,121453,121454],{},"大多数命令",[14,121456,121457],{},"常用 Linux 命令速查：",[133,121459,121461],{"className":117305,"code":121460,"language":117307,"meta":31,"style":31},"# 文件与目录\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",[139,121462,121463,121468,121475,121482,121490,121497,121504,121512,121520,121527,121534,121542,121546,121551,121558,121566,121573,121577,121582,121589,121597,121605,121613,121621,121625,121630,121638,121645,121652,121660,121668,121672,121677,121686,121695],{"__ignoreMap":31},[142,121464,121465],{"class":144,"line":145},[142,121466,121467],{"class":211},"# 文件与目录\n",[142,121469,121470,121472],{"class":144,"line":64},[142,121471,26790],{"class":1991},[142,121473,121474],{"class":211},"        # 列出目录内容\n",[142,121476,121477,121479],{"class":144,"line":1208},[142,121478,101285],{"class":201},[142,121480,121481],{"class":211},"        # 切换目录\n",[142,121483,121484,121487],{"class":144,"line":1223},[142,121485,121486],{"class":201},"pwd",[142,121488,121489],{"class":211},"       # 显示当前路径\n",[142,121491,121492,121494],{"class":144,"line":1229},[142,121493,101275],{"class":1991},[142,121495,121496],{"class":211},"     # 创建目录\n",[142,121498,121499,121501],{"class":144,"line":1243},[142,121500,25351],{"class":1991},[142,121502,121503],{"class":211},"        # 删除文件或目录\n",[142,121505,121506,121509],{"class":144,"line":1249},[142,121507,121508],{"class":1991},"cp",[142,121510,121511],{"class":211},"        # 复制文件或目录\n",[142,121513,121514,121517],{"class":144,"line":1340},[142,121515,121516],{"class":1991},"mv",[142,121518,121519],{"class":211},"        # 移动\u002F重命名文件或目录\n",[142,121521,121522,121524],{"class":144,"line":1346},[142,121523,101292],{"class":1991},[142,121525,121526],{"class":211},"     # 创建空文件\n",[142,121528,121529,121531],{"class":144,"line":1358},[142,121530,120774],{"class":1991},[142,121532,121533],{"class":211},"       # 查看文件内容\n",[142,121535,121536,121539],{"class":144,"line":1640},[142,121537,121538],{"class":1991},"head\u002Ftail",[142,121540,121541],{"class":211}," # 查看文件头部\u002F尾部\n",[142,121543,121544],{"class":144,"line":1645},[142,121545,2428],{"emptyLinePlaceholder":69},[142,121547,121548],{"class":144,"line":1651},[142,121549,121550],{"class":211},"# 权限管理\n",[142,121552,121553,121555],{"class":144,"line":1656},[142,121554,24640],{"class":1991},[142,121556,121557],{"class":211},"     # 修改文件权限\n",[142,121559,121560,121563],{"class":144,"line":1670},[142,121561,121562],{"class":1991},"chown",[142,121564,121565],{"class":211},"     # 修改文件所有者\n",[142,121567,121568,121570],{"class":144,"line":1675},[142,121569,24606],{"class":1991},[142,121571,121572],{"class":211},"      # 以管理员身份执行\n",[142,121574,121575],{"class":144,"line":1681},[142,121576,2428],{"emptyLinePlaceholder":69},[142,121578,121579],{"class":144,"line":1702},[142,121580,121581],{"class":211},"# 系统信息\n",[142,121583,121584,121586],{"class":144,"line":1707},[142,121585,70233],{"class":1991},[142,121587,121588],{"class":211},"     # 系统信息\n",[142,121590,121591,121594],{"class":144,"line":1721},[142,121592,121593],{"class":1991},"df",[142,121595,121596],{"class":211},"        # 磁盘使用情况\n",[142,121598,121599,121602],{"class":144,"line":1726},[142,121600,121601],{"class":1991},"free",[142,121603,121604],{"class":211},"      # 内存使用情况\n",[142,121606,121607,121610],{"class":144,"line":1755},[142,121608,121609],{"class":1991},"top\u002Fhtop",[142,121611,121612],{"class":211},"  # 进程监控\n",[142,121614,121615,121618],{"class":144,"line":1760},[142,121616,121617],{"class":1991},"ps",[142,121619,121620],{"class":211},"        # 查看进程\n",[142,121622,121623],{"class":144,"line":1777},[142,121624,2428],{"emptyLinePlaceholder":69},[142,121626,121627],{"class":144,"line":1782},[142,121628,121629],{"class":211},"# 网络\n",[142,121631,121632,121635],{"class":144,"line":1787},[142,121633,121634],{"class":1991},"ping",[142,121636,121637],{"class":211},"      # 测试网络连通性\n",[142,121639,121640,121642],{"class":144,"line":1792},[142,121641,26878],{"class":1991},[142,121643,121644],{"class":211},"      # 发送 HTTP 请求\n",[142,121646,121647,121649],{"class":144,"line":1806},[142,121648,120298],{"class":1991},[142,121650,121651],{"class":211},"      # 下载文件\n",[142,121653,121654,121657],{"class":144,"line":1811},[142,121655,121656],{"class":1991},"ssh",[142,121658,121659],{"class":211},"       # 远程登录\n",[142,121661,121662,121665],{"class":144,"line":2605},[142,121663,121664],{"class":1991},"scp",[142,121666,121667],{"class":211},"       # 远程文件传输\n",[142,121669,121670],{"class":144,"line":2619},[142,121671,2428],{"emptyLinePlaceholder":69},[142,121673,121674],{"class":144,"line":2627},[142,121675,121676],{"class":211},"# 包管理（Debian\u002FUbuntu）\n",[142,121678,121679,121681,121683],{"class":144,"line":2632},[142,121680,117377],{"class":1991},[142,121682,117356],{"class":257},[142,121684,121685],{"class":211},"   # 更新软件源\n",[142,121687,121688,121690,121692],{"class":144,"line":2638},[142,121689,117377],{"class":1991},[142,121691,23863],{"class":257},[142,121693,121694],{"class":211},"  # 安装软件包\n",[142,121696,121697,121699,121701],{"class":144,"line":2644},[142,121698,117377],{"class":1991},[142,121700,26108],{"class":257},[142,121702,121703],{"class":211},"   # 卸载软件包\n",[96,121705,121706],{"start":64},[99,121707,121708],{},"KDE Dolphin 以root打开",[14,121710,121711],{},"kde5",[133,121713,121715],{"className":117305,"code":121714,"language":117307,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[139,121716,121717],{"__ignoreMap":31},[142,121718,121719,121722,121725,121728,121730,121732,121735,121738,121740,121743,121745],{"class":144,"line":145},[142,121720,121721],{"class":1991},"pkexec",[142,121723,121724],{"class":257}," env",[142,121726,121727],{"class":257}," DISPLAY=",[142,121729,28172],{"class":152},[142,121731,28230],{"class":257},[142,121733,121734],{"class":152},"$XAUTHORITY ",[142,121736,121737],{"class":257},"KDE_SESSION_VERSION=",[142,121739,472],{"class":201},[142,121741,121742],{"class":257}," KDE_FULL_SESSION=",[142,121744,1391],{"class":201},[142,121746,121747],{"class":257}," dolphin\n",[14,121749,121750],{},"kde6",[133,121752,121754],{"className":117305,"code":121753,"language":117307,"meta":31,"style":31},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[139,121755,121756],{"__ignoreMap":31},[142,121757,121758,121760,121762,121764,121766,121768,121770,121772,121774,121776,121778],{"class":144,"line":145},[142,121759,121721],{"class":1991},[142,121761,121724],{"class":257},[142,121763,121727],{"class":257},[142,121765,28172],{"class":152},[142,121767,28230],{"class":257},[142,121769,121734],{"class":152},[142,121771,121737],{"class":257},[142,121773,497],{"class":201},[142,121775,121742],{"class":257},[142,121777,1391],{"class":201},[142,121779,121747],{"class":257},[5155,121781,121782],{},"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":31,"searchDepth":64,"depth":64,"links":121784},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121444,"description":66},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121791,"title":121792,"body":121793,"description":66,"extension":67,"meta":121807,"navigation":69,"path":121808,"seo":121809,"stem":121810,"__hash__":121811},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121794,"toc":121805},[121795,121798],[10,121796,121792],{"id":121797},"_5-各种环境配置",[14,121799,121800],{},[391,121801,121804],{"href":121802,"rel":121803},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23894],"电控组环境搭建大全",{"title":31,"searchDepth":64,"depth":64,"links":121806},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121792,"description":66},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121813,"title":121814,"body":121815,"description":66,"extension":67,"meta":122163,"navigation":69,"path":122164,"seo":122165,"stem":122166,"__hash__":122167},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121816,"toc":122155},[121817,121820,121824,121828,121832,121837,121844,121848,122141,122145,122152],[10,121818,121814],{"id":121819},"_6-拓展功能",[84,121821,121823],{"id":121822},"_61-wine","6.1 Wine",[84,121825,121827],{"id":121826},"_62-android","6.2 Android",[113,121829,121831],{"id":121830},"_621-i卡a卡","6.2.1 I卡、A卡",[96,121833,121834],{},[99,121835,121836],{},"Wayland-Waydroid(体验超级好)",[14,121838,121839,121840],{},"Waydroid 官网与安装指南：",[391,121841,121842],{"href":121842,"rel":121843},"https:\u002F\u002Fwaydro.id\u002F",[23894],[113,121845,121847],{"id":121846},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[96,121849,121850],{},[99,121851,121852,121853,121855,121856,121860,121862,121865,121870,122067],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53745,121854],{},"BlissOS 官网下载：",[391,121857,121858],{"href":121858,"rel":121859},"https:\u002F\u002Fblissos.org\u002F",[23894],[53745,121861],{},[29,121863],{"alt":31,"src":121864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[96,121866,121867],{"start":1208},[99,121868,121869],{},"比较推荐的配置",[133,121871,121873],{"className":117305,"code":121872,"language":117307,"meta":31,"style":31},"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",[139,121874,121875,121882,121892,121902,121912,121924,121934,121941,121951,121960,121969,121979,121989,121998,122008,122018,122030,122040,122049,122059],{"__ignoreMap":31},[142,121876,121877,121880],{"class":144,"line":145},[142,121878,121879],{"class":1991},"qemu-system-x86_64",[142,121881,24707],{"class":201},[142,121883,121884,121887,121890],{"class":144,"line":64},[142,121885,121886],{"class":201},"        -M",[142,121888,121889],{"class":257}," q35,vmport=off",[142,121891,24707],{"class":201},[142,121893,121894,121897,121900],{"class":144,"line":1208},[142,121895,121896],{"class":201},"        -accel",[142,121898,121899],{"class":257}," kvm",[142,121901,24707],{"class":201},[142,121903,121904,121907,121910],{"class":144,"line":1223},[142,121905,121906],{"class":201},"        -cpu",[142,121908,121909],{"class":257}," qemu64,+sse3,+sse4.2",[142,121911,24707],{"class":201},[142,121913,121914,121917,121920,121922],{"class":144,"line":1229},[142,121915,121916],{"class":201},"        -smp",[142,121918,121919],{"class":257}," 8,cores=",[142,121921,446],{"class":201},[142,121923,24707],{"class":201},[142,121925,121926,121929,121932],{"class":144,"line":1243},[142,121927,121928],{"class":201},"        -m",[142,121930,121931],{"class":257}," 6G",[142,121933,24707],{"class":201},[142,121935,121936,121939],{"class":144,"line":1249},[142,121937,121938],{"class":201},"        -usb",[142,121940,24707],{"class":201},[142,121942,121943,121946,121949],{"class":144,"line":1340},[142,121944,121945],{"class":201},"        -device",[142,121947,121948],{"class":257}," virtio-tablet",[142,121950,24707],{"class":201},[142,121952,121953,121955,121958],{"class":144,"line":1346},[142,121954,121945],{"class":201},[142,121956,121957],{"class":257}," virtio-keyboard",[142,121959,24707],{"class":201},[142,121961,121962,121964,121967],{"class":144,"line":1358},[142,121963,121945],{"class":201},[142,121965,121966],{"class":257}," usb-tablet",[142,121968,24707],{"class":201},[142,121970,121971,121974,121977],{"class":144,"line":1640},[142,121972,121973],{"class":201},"        -bios",[142,121975,121976],{"class":257}," OVMF-pure-efi64.fd",[142,121978,24707],{"class":201},[142,121980,121981,121984,121987],{"class":144,"line":1645},[142,121982,121983],{"class":201},"        -net",[142,121985,121986],{"class":257}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[142,121988,24707],{"class":201},[142,121990,121991,121993,121996],{"class":144,"line":1651},[142,121992,121983],{"class":201},[142,121994,121995],{"class":257}," nic,model=virtio",[142,121997,24707],{"class":201},[142,121999,122000,122003,122006],{"class":144,"line":1656},[142,122001,122002],{"class":201},"        -audio",[142,122004,122005],{"class":257}," sdl,model=hda",[142,122007,24707],{"class":201},[142,122009,122010,122013,122016],{"class":144,"line":1670},[142,122011,122012],{"class":201},"        -display",[142,122014,122015],{"class":257}," sdl,gl=on,show-cursor=on",[142,122017,24707],{"class":201},[142,122019,122020,122022,122025,122028],{"class":144,"line":1675},[142,122021,121945],{"class":201},[142,122023,122024],{"class":257}," virtio-vga-gl,xres=1920,yres=",[142,122026,122027],{"class":201},"1080",[142,122029,24707],{"class":201},[142,122031,122032,122035,122038],{"class":144,"line":1681},[142,122033,122034],{"class":201},"        -drive",[142,122036,122037],{"class":257}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[142,122039,24707],{"class":201},[142,122041,122042,122044,122047],{"class":144,"line":1702},[142,122043,122034],{"class":201},[142,122045,122046],{"class":257}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[142,122048,24707],{"class":201},[142,122050,122051,122054,122057],{"class":144,"line":1707},[142,122052,122053],{"class":201},"        -monitor",[142,122055,122056],{"class":257}," stdio",[142,122058,24707],{"class":201},[142,122060,122061,122064],{"class":144,"line":1721},[142,122062,122063],{"class":201},"        -serial",[142,122065,122066],{"class":257}," none\n",[96,122068,122069],{"start":1229},[99,122070,122071,122072],{},"常用操作：",[96,122073,122074,122077,122133],{},[99,122075,122076],{},"全屏：Ctrl+Alt+F",[99,122078,122079,122080,122085],{},"adb调试",[96,122081,122082],{},[99,122083,122084],{},"使Linux与Android用ADB连接。",[133,122086,122088],{"className":117305,"code":122087,"language":117307,"meta":31,"style":31},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[139,122089,122090,122095,122106,122111,122123,122128],{"__ignoreMap":31},[142,122091,122092],{"class":144,"line":145},[142,122093,122094],{"class":211},"# 连接安卓\n",[142,122096,122097,122100,122103],{"class":144,"line":64},[142,122098,122099],{"class":1991},"adb",[142,122101,122102],{"class":257}," connect",[142,122104,122105],{"class":201}," 127.0.0.1\n",[142,122107,122108],{"class":144,"line":1208},[142,122109,122110],{"class":211},"# 打开shell\n",[142,122112,122113,122115,122117,122120],{"class":144,"line":1223},[142,122114,122099],{"class":1991},[142,122116,26912],{"class":201},[142,122118,122119],{"class":257}," 127.0.0.1:5555",[142,122121,122122],{"class":257}," shell\n",[142,122124,122125],{"class":144,"line":1229},[142,122126,122127],{"class":211},"# 使用root权限\n",[142,122129,122130],{"class":144,"line":1243},[142,122131,122132],{"class":1991},"su\n",[99,122134,122135,122136],{},"中文输入法",[96,122137,122138],{},[99,122139,122140],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[84,122142,122144],{"id":122143},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122146,122147,122148],{},"rEFInd 官网与文档：",[391,122149,122150],{"href":122150,"rel":122151},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23894],[5155,122153,122154],{},"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":31,"searchDepth":64,"depth":64,"links":122156},[122157,122158,122162],{"id":121822,"depth":64,"text":121823},{"id":121826,"depth":64,"text":121827,"children":122159},[122160,122161],{"id":121830,"depth":1208,"text":121831},{"id":121846,"depth":1208,"text":121847},{"id":122143,"depth":64,"text":122144},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121814,"description":66},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122169,"title":122170,"body":122171,"description":66,"extension":67,"meta":125470,"navigation":69,"path":125471,"seo":125472,"stem":125473,"__hash__":125474},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122172,"toc":125444},[122173,122176,122180,122183,122190,122440,122443,122515,122518,122522,122526,122531,122534,122537,122540,122545,122548,122551,122554,122559,122562,122567,122570,122573,122578,122581,122586,122589,122593,122597,122600,122605,122608,122622,122625,122628,122637,122640,122649,122652,122655,122664,122667,122676,122679,122682,122691,122694,122697,122712,122715,122718,122727,122732,122735,122738,122747,122750,122759,122762,122771,122774,122783,122788,122791,122799,122804,122807,122816,122819,122827,122832,122835,122844,122847,122850,122854,122857,122862,122865,122870,122884,122889,122894,122905,122910,122916,122921,122936,122941,122944,122949,122954,122959,122967,122972,122979,122984,122995,123000,123003,123007,123010,123013,123018,123021,123040,123045,123048,123057,123062,123065,123087,123090,123120,123123,123128,123131,123145,123150,123169,123172,123175,123180,123192,123197,123202,123205,123210,123213,123228,123231,123236,123241,123245,123250,123290,123293,123297,123303,123309,123314,123317,123324,123329,123336,123339,123342,123349,123363,123366,123426,123429,123443,123455,123458,123461,123464,123528,123531,123534,123537,123557,123560,123565,123572,123576,123579,123583,123588,123593,123597,123600,123603,123645,123650,123653,123675,123690,123692,123697,123709,123769,123771,123773,123827,123829,123831,123837,123842,123845,123850,123854,123857,123919,123924,123927,123929,123933,123945,124027,124029,124031,124085,124091,124093,124097,124102,124104,124109,124113,124133,124168,124172,124175,124178,124181,124188,124191,124203,124206,124221,124224,124243,124291,124294,124311,124314,124328,124333,124336,124345,124360,124372,124410,124415,124424,124429,124434,124460,124469,124473,124477,124482,124485,124489,124493,124498,124501,124506,124509,124514,124517,124522,124525,124529,124534,124537,124542,124545,124549,124554,124557,124562,124565,124570,124573,124577,124582,124585,124590,124593,124598,124601,124605,124610,124613,124618,124621,124626,124629,124634,124637,124642,124645,124650,124653,124657,124662,124665,124670,124677,124681,124686,124689,124694,124697,124701,124706,124709,124712,124715,124718,124721,124725,124728,124738,124743,124748,124770,124775,124780,124787,124791,124796,124799,124802,124807,124810,124813,124816,124819,124822,124825,124828,124831,124834,124837,124840,124843,124848,124853,124858,124863,124868,124873,124878,124881,124885,124888,124892,124897,124902,124907,124912,124916,124922,124930,124935,124938,124943,124958,124961,124966,125000,125015,125018,125073,125099,125111,125114,125123,125126,125141,125146,125149,125155,125160,125163,125168,125171,125176,125181,125188,125191,125206,125209,125244,125249,125257,125295,125298,125301,125306,125309,125314,125325,125359,125364,125367,125376,125381,125387,125390,125395,125404,125409,125412,125415,125420,125428,125431,125436,125441],[10,122174,122170],{"id":122175},"_7-其他操作",[84,122177,122179],{"id":122178},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122181,122182],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122184,122185,122186,122189],{},"进入工控机的硬盘目录，进入",[139,122187,122188],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[133,122191,122195],{"className":122192,"code":122193,"language":122194,"meta":31,"style":31},"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",[139,122196,122197,122205,122216,122223,122230,122242,122249,122261,122272,122283,122290,122297,122304,122316,122328,122335,122347,122359,122366,122378,122390,122402,122413,122420,122431],{"__ignoreMap":31},[142,122198,122199,122202],{"class":144,"line":145},[142,122200,122201],{"class":51329},"network",[142,122203,122204],{"class":152},": \n",[142,122206,122207,122210,122212,122214],{"class":144,"line":64},[142,122208,122209],{"class":51329},"  version",[142,122211,51466],{"class":152},[142,122213,230],{"class":201},[142,122215,2702],{"class":152},[142,122217,122218,122221],{"class":144,"line":1208},[142,122219,122220],{"class":51329},"  wifis",[142,122222,122204],{"class":152},[142,122224,122225,122228],{"class":144,"line":1223},[142,122226,122227],{"class":51329},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[142,122229,122204],{"class":152},[142,122231,122232,122235,122237,122240],{"class":144,"line":1229},[142,122233,122234],{"class":51329},"      renderer",[142,122236,51466],{"class":152},[142,122238,122239],{"class":257},"NetworkManager",[142,122241,2702],{"class":152},[142,122243,122244,122247],{"class":144,"line":1243},[142,122245,122246],{"class":51329},"      match",[142,122248,122204],{"class":152},[142,122250,122251,122254,122256,122259],{"class":144,"line":1249},[142,122252,122253],{"class":51329},"        name",[142,122255,51466],{"class":152},[142,122257,122258],{"class":257},"\"wlan0\"",[142,122260,2702],{"class":152},[142,122262,122263,122266,122268,122270],{"class":144,"line":1340},[142,122264,122265],{"class":51329},"      dhcp4",[142,122267,51466],{"class":152},[142,122269,1391],{"class":201},[142,122271,2702],{"class":152},[142,122273,122274,122277,122279,122281],{"class":144,"line":1346},[142,122275,122276],{"class":51329},"      dhcp6",[142,122278,51466],{"class":152},[142,122280,1391],{"class":201},[142,122282,2702],{"class":152},[142,122284,122285,122288],{"class":144,"line":1358},[142,122286,122287],{"class":51329},"      access-points",[142,122289,122204],{"class":152},[142,122291,122292,122295],{"class":144,"line":1640},[142,122293,122294],{"class":257},"        \"EMIS_Vinci_Robocon_5G\"",[142,122296,122204],{"class":152},[142,122298,122299,122302],{"class":144,"line":1645},[142,122300,122301],{"class":51329},"          auth",[142,122303,122204],{"class":152},[142,122305,122306,122309,122311,122314],{"class":144,"line":1651},[142,122307,122308],{"class":51329},"            key-management",[142,122310,51466],{"class":152},[142,122312,122313],{"class":257},"\"psk\"",[142,122315,2702],{"class":152},[142,122317,122318,122321,122323,122326],{"class":144,"line":1656},[142,122319,122320],{"class":51329},"            password",[142,122322,51466],{"class":152},[142,122324,122325],{"class":257},"\"vinci666\"",[142,122327,2702],{"class":152},[142,122329,122330,122333],{"class":144,"line":1670},[142,122331,122332],{"class":51329},"          networkmanager",[142,122334,122204],{"class":152},[142,122336,122337,122340,122342,122345],{"class":144,"line":1675},[142,122338,122339],{"class":51329},"            uuid",[142,122341,51466],{"class":152},[142,122343,122344],{"class":257},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[142,122346,2702],{"class":152},[142,122348,122349,122352,122354,122357],{"class":144,"line":1681},[142,122350,122351],{"class":51329},"            name",[142,122353,51466],{"class":152},[142,122355,122356],{"class":257},"\"EMIS_Vinci_Robocon_5G\"",[142,122358,2702],{"class":152},[142,122360,122361,122364],{"class":144,"line":1702},[142,122362,122363],{"class":51329},"            passthrough",[142,122365,122204],{"class":152},[142,122367,122368,122371,122373,122376],{"class":144,"line":1707},[142,122369,122370],{"class":51329},"              wifi-security.auth-alg",[142,122372,51466],{"class":152},[142,122374,122375],{"class":257},"\"open\"",[142,122377,2702],{"class":152},[142,122379,122380,122383,122385,122388],{"class":144,"line":1721},[142,122381,122382],{"class":51329},"              ipv6.addr-gen-mode",[142,122384,51466],{"class":152},[142,122386,122387],{"class":257},"\"default\"",[142,122389,2702],{"class":152},[142,122391,122392,122395,122397,122400],{"class":144,"line":1726},[142,122393,122394],{"class":51329},"              ipv6.ip6-privacy",[142,122396,51466],{"class":152},[142,122398,122399],{"class":257},"\"-1\"",[142,122401,2702],{"class":152},[142,122403,122404,122407,122409,122411],{"class":144,"line":1755},[142,122405,122406],{"class":51329},"              proxy._",[142,122408,51466],{"class":152},[142,122410,7681],{"class":257},[142,122412,2702],{"class":152},[142,122414,122415,122418],{"class":144,"line":1760},[142,122416,122417],{"class":51329},"      networkmanager",[142,122419,122204],{"class":152},[142,122421,122422,122425,122427,122429],{"class":144,"line":1777},[142,122423,122424],{"class":51329},"        uuid",[142,122426,51466],{"class":152},[142,122428,122344],{"class":257},[142,122430,2702],{"class":152},[142,122432,122433,122435,122437],{"class":144,"line":1782},[142,122434,122253],{"class":51329},[142,122436,51466],{"class":152},[142,122438,122439],{"class":257},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122441,122442],{},"将其改为新wifi的名和密码：",[133,122444,122446],{"className":122192,"code":122445,"language":122194,"meta":31,"style":31},"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",[139,122447,122448,122454,122463,122469,122476,122485,122493,122499,122505],{"__ignoreMap":31},[142,122449,122450,122452],{"class":144,"line":145},[142,122451,122201],{"class":51329},[142,122453,3767],{"class":152},[142,122455,122456,122458,122460],{"class":144,"line":64},[142,122457,122209],{"class":51329},[142,122459,51466],{"class":152},[142,122461,122462],{"class":201},"2\n",[142,122464,122465,122467],{"class":144,"line":1208},[142,122466,122220],{"class":51329},[142,122468,3767],{"class":152},[142,122470,122471,122474],{"class":144,"line":1223},[142,122472,122473],{"class":51329},"    wlan0",[142,122475,3767],{"class":152},[142,122477,122478,122480,122482],{"class":144,"line":1229},[142,122479,122265],{"class":51329},[142,122481,51466],{"class":152},[142,122483,122484],{"class":201},"true\n",[142,122486,122487,122489,122491],{"class":144,"line":1243},[142,122488,122276],{"class":51329},[142,122490,51466],{"class":152},[142,122492,122484],{"class":201},[142,122494,122495,122497],{"class":144,"line":1249},[142,122496,122287],{"class":51329},[142,122498,3767],{"class":152},[142,122500,122501,122503],{"class":144,"line":1340},[142,122502,122294],{"class":257},[142,122504,3767],{"class":152},[142,122506,122507,122510,122512],{"class":144,"line":1346},[142,122508,122509],{"class":51329},"          password",[142,122511,51466],{"class":152},[142,122513,122514],{"class":257},"\"vinci666\"\n",[14,122516,122517],{},"工控机开机即可连上网。",[84,122519,122521],{"id":122520},"_72-ssh远程开发","7.2 SSH远程开发",[113,122523,122525],{"id":122524},"_721-环境准备","7.2.1 环境准备",[14,122527,122528],{},[302,122529,122530],{},"1.硬件准备",[14,122532,122533],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122535,122536],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122538,122539],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122541,122542],{},[302,122543,122544],{},"2.设置固定IP",[14,122546,122547],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122549,122550],{},"1.进入设置界面",[14,122552,122553],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122555,122556],{},[29,122557],{"alt":31,"src":122558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122560,122561],{},"2.配置所连接的网络",[14,122563,122564],{},[29,122565],{"alt":31,"src":122566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122568,122569],{},"3.设置固定IP",[14,122571,122572],{},"查看当前IP地址。",[14,122574,122575],{},[29,122576],{"alt":31,"src":122577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122579,122580],{},"设置固定IP。",[14,122582,122583],{},[29,122584],{"alt":31,"src":122585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122587,122588],{},"至此，IP配置完毕。",[113,122590,122592],{"id":122591},"_722-环境搭建","7.2.2 环境搭建",[14,122594,122595],{},[302,122596,25782],{},[14,122598,122599],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122601,122602],{},[302,122603,122604],{},"实现",[14,122606,122607],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[96,122609,122610,122613,122616,122619],{},[99,122611,122612],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[99,122614,122615],{},"远程主机启动SSH服务；",[99,122617,122618],{},"本地主机登陆远程主机；",[99,122620,122621],{},"实现数据传输。",[14,122623,122624],{},"1.安装SSH客户端与服务端",[14,122626,122627],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[133,122629,122631],{"className":120825,"code":122630,"language":120827,"meta":120828,"style":31}," sudo apt install openssh-server\n",[139,122632,122633],{"__ignoreMap":31},[142,122634,122635],{"class":144,"line":145},[142,122636,122630],{},[14,122638,122639],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[133,122641,122643],{"className":120825,"code":122642,"language":120827,"meta":120828,"style":31},"sudo apt install openssh-client\n",[139,122644,122645],{"__ignoreMap":31},[142,122646,122647],{"class":144,"line":145},[142,122648,122642],{},[14,122650,122651],{},"2.远程主机启动SSH服务",[14,122653,122654],{},"远程主机启动 ssh 服务命令如下：",[133,122656,122658],{"className":120825,"code":122657,"language":120827,"meta":120828,"style":31},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[139,122659,122660],{"__ignoreMap":31},[142,122661,122662],{"class":144,"line":145},[142,122663,122657],{},[14,122665,122666],{},"启动后可使用如下命令查看服务是否正常运行：",[133,122668,122670],{"className":120825,"code":122669,"language":120827,"meta":120828,"style":31},"ps -e | grep ssh\n",[139,122671,122672],{"__ignoreMap":31},[142,122673,122674],{"class":144,"line":145},[142,122675,122669],{},[14,122677,122678],{},"如果启动成功，会包含 sshd 程序。",[14,122680,122681],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[133,122683,122685],{"className":120825,"code":122684,"language":120827,"meta":120828,"style":31},"sudo systemctl enable ssh\n",[139,122686,122687],{"__ignoreMap":31},[142,122688,122689],{"class":144,"line":145},[142,122690,122684],{},[14,122692,122693],{},"3.本地远程登录",[14,122695,122696],{},"登录远程主机可以调用如下命令:",[133,122698,122700],{"className":117305,"code":122699,"language":117307,"meta":31,"style":31},"ssh -X 用户名@ip地址\n",[139,122701,122702],{"__ignoreMap":31},[142,122703,122704,122706,122709],{"class":144,"line":145},[142,122705,121656],{"class":1991},[142,122707,122708],{"class":201}," -X",[142,122710,122711],{"class":257}," 用户名@ip地址\n",[14,122713,122714],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122716,122717],{},"如果退出，可以调用exit命令：",[133,122719,122721],{"className":120825,"code":122720,"language":120827,"meta":120828,"style":31},"exit\n",[139,122722,122723],{"__ignoreMap":31},[142,122724,122725],{"class":144,"line":145},[142,122726,122720],{},[14,122728,122729],{},[302,122730,122731],{},"4.实现数据传输",[14,122733,122734],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122736,122737],{},"上传文件指令格式如下：",[133,122739,122741],{"className":120825,"code":122740,"language":120827,"meta":120828,"style":31},"scp 本地文件路径 账号@ip:路径\n",[139,122742,122743],{"__ignoreMap":31},[142,122744,122745],{"class":144,"line":145},[142,122746,122740],{},[14,122748,122749],{},"上传文件夹指令格式如下：",[133,122751,122753],{"className":120825,"code":122752,"language":120827,"meta":120828,"style":31},"scp -r 本地文件夹路径 账号@ip:路径\n",[139,122754,122755],{"__ignoreMap":31},[142,122756,122757],{"class":144,"line":145},[142,122758,122752],{},[14,122760,122761],{},"下载文件指令格式如下：",[133,122763,122765],{"className":120825,"code":122764,"language":120827,"meta":120828,"style":31},"scp 账号@ip:路径 本地文件夹路径\n",[139,122766,122767],{"__ignoreMap":31},[142,122768,122769],{"class":144,"line":145},[142,122770,122764],{},[14,122772,122773],{},"下载文件夹指令格式如下：",[133,122775,122777],{"className":120825,"code":122776,"language":120827,"meta":120828,"style":31},"scp -r 账号@ip:路径 本地文件夹路径\n",[139,122778,122779],{"__ignoreMap":31},[142,122780,122781],{"class":144,"line":145},[142,122782,122776],{},[14,122784,122785],{},[302,122786,122787],{},"优化",[14,122789,122790],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[96,122792,122793,122796],{},[99,122794,122795],{},"本地生成密钥对；",[99,122797,122798],{},"将公钥上传至远程主机。",[14,122800,122801],{},[302,122802,122803],{},"1.生成密钥对",[14,122805,122806],{},"本地客户端生成公私钥：（一路回车默认即可）",[133,122808,122810],{"className":120825,"code":122809,"language":120827,"meta":120828,"style":31},"ssh-keygen\n",[139,122811,122812],{"__ignoreMap":31},[142,122813,122814],{"class":144,"line":145},[142,122815,122809],{},[14,122817,122818],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[96,122820,122821,122824],{},[99,122822,122823],{},"id_rsa （私钥）；",[99,122825,122826],{},"id_rsa.pub (公钥)。",[14,122828,122829],{},[302,122830,122831],{},"2.公钥上传",[14,122833,122834],{},"上传指令如下：",[133,122836,122838],{"className":120825,"code":122837,"language":120827,"meta":120828,"style":31},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[139,122839,122840],{"__ignoreMap":31},[142,122841,122842],{"class":144,"line":145},[142,122843,122837],{},[14,122845,122846],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122848,122849],{},"以后再远程登录就无需录入密码了。",[113,122851,122853],{"id":122852},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122855,122856],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122858,122859],{},[302,122860,122861],{},"1.准备工作",[14,122863,122864],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122866,122867],{},[302,122868,122869],{},"2.为VScode安装远程开发插件",[14,122871,122872,122873,122876,122877,122880,122881,28414],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[139,122874,122875],{},"扩展：商店","的搜索栏输入",[139,122878,122879],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[139,122882,122883],{},"安装",[14,122885,122886],{},[29,122887],{"alt":31,"src":122888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122890,122891],{},[302,122892,122893],{},"3.配置远程连接",[14,122895,122896,122897,122900,122901,122904],{},"步骤1：使用快捷键",[139,122898,122899],{},"ctrl + shift + p","打开命令输入窗口，并输入",[139,122902,122903],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122906,122907],{},[29,122908],{"alt":31,"src":122909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122911,122912,122913,28414],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[139,122914,122915],{},"Add New SSH Host",[14,122917,122918],{},[29,122919],{"alt":31,"src":122920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122922,122923,122924,122927,122928,122931,122932,122935],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[139,122925,122926],{},"ssh +X ubuntu@192.168.43.164","，其中，",[139,122929,122930],{},"ubuntu","需要替换为你的登录用户名，",[139,122933,122934],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122937,122938],{},[29,122939],{"alt":31,"src":122940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122942,122943],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122945,122946],{},[29,122947],{"alt":31,"src":122948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122950,122951],{},[29,122952],{"alt":31,"src":122953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122955,122956],{},[302,122957,122958],{},"4.使用",[14,122960,122961,122962,122900,122964,122966],{},"步骤1：继续使用快捷键",[139,122963,122899],{},[139,122965,122903],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,122968,122969],{},[29,122970],{"alt":31,"src":122971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,122973,122974,122975,122978],{},"或者，也可以点击侧边栏的",[139,122976,122977],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,122980,122981],{},[29,122982],{"alt":31,"src":122983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,122985,122986,122987,122990,122991,122994],{},"步骤2：选择菜单栏的",[139,122988,122989],{},"文件","下的",[139,122992,122993],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,122996,122997],{},[29,122998],{"alt":31,"src":122999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123001,123002],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[84,123004,123006],{"id":123005},"_73-远程桌面","7.3 远程桌面",[14,123008,123009],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123011,123012],{},"我们选择使用VNC来看。",[96,123014,123015],{},[99,123016,123017],{},"安装VNC服务器：",[14,123019,123020],{},"这里以TigerVNC为例进行安装：",[133,123022,123024],{"className":117305,"code":123023,"language":117307,"meta":31,"style":31},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[139,123025,123026],{"__ignoreMap":31},[142,123027,123028,123030,123032,123034,123037],{"class":144,"line":145},[142,123029,24606],{"class":1991},[142,123031,117326],{"class":257},[142,123033,23863],{"class":257},[142,123035,123036],{"class":257}," tigervnc-standalone-server",[142,123038,123039],{"class":257}," tigervnc-common\n",[96,123041,123042],{"start":64},[99,123043,123044],{},"设置VNC密码：",[14,123046,123047],{},"为VNC用户设置密码，运行以下命令：",[133,123049,123051],{"className":117305,"code":123050,"language":117307,"meta":31,"style":31},"vncpasswd\n",[139,123052,123053],{"__ignoreMap":31},[142,123054,123055],{"class":144,"line":145},[142,123056,123050],{"class":1991},[96,123058,123059],{"start":1208},[99,123060,123061],{},"配置VNC启动脚本:",[14,123063,123064],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[133,123066,123068],{"className":117305,"code":123067,"language":117307,"meta":31,"style":31},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[139,123069,123070,123079],{"__ignoreMap":31},[142,123071,123072,123074,123076],{"class":144,"line":145},[142,123073,101275],{"class":1991},[142,123075,29245],{"class":201},[142,123077,123078],{"class":257}," ~\u002F.vnc\n",[142,123080,123081,123084],{"class":144,"line":64},[142,123082,123083],{"class":1991},"nano",[142,123085,123086],{"class":257}," ~\u002F.vnc\u002Fxstartup\n",[14,123088,123089],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[133,123091,123093],{"className":117305,"code":123092,"language":117307,"meta":31,"style":31},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[139,123094,123095,123100,123108,123115],{"__ignoreMap":31},[142,123096,123097],{"class":144,"line":145},[142,123098,123099],{"class":211},"#!\u002Fbin\u002Fsh\n",[142,123101,123102,123105],{"class":144,"line":64},[142,123103,123104],{"class":201},"unset",[142,123106,123107],{"class":257}," SESSION_MANAGER\n",[142,123109,123110,123112],{"class":144,"line":1208},[142,123111,123104],{"class":201},[142,123113,123114],{"class":257}," DBUS_SESSION_BUS_ADDRESS\n",[142,123116,123117],{"class":144,"line":1223},[142,123118,123119],{"class":1991},"gnome-session\n",[14,123121,123122],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[96,123124,123125],{"start":1223},[99,123126,123127],{},"给予执行权限：",[14,123129,123130],{},"为xstartup文件设置执行权限：",[133,123132,123134],{"className":117305,"code":123133,"language":117307,"meta":31,"style":31},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[139,123135,123136],{"__ignoreMap":31},[142,123137,123138,123140,123143],{"class":144,"line":145},[142,123139,24640],{"class":1991},[142,123141,123142],{"class":257}," +x",[142,123144,123086],{"class":257},[96,123146,123147],{"start":1229},[99,123148,123149],{},"启动VNC服务器：",[133,123151,123153],{"className":117305,"code":123152,"language":117307,"meta":31,"style":31},"vncserver -geometry 1920x1080 -localhost=0\n",[139,123154,123155],{"__ignoreMap":31},[142,123156,123157,123160,123163,123166],{"class":144,"line":145},[142,123158,123159],{"class":1991},"vncserver",[142,123161,123162],{"class":201}," -geometry",[142,123164,123165],{"class":257}," 1920x1080",[142,123167,123168],{"class":201}," -localhost=0\n",[14,123170,123171],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123173,123174],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[96,123176,123177],{"start":1243},[99,123178,123179],{},"查看已开启的VNC服务器：",[133,123181,123183],{"className":117305,"code":123182,"language":117307,"meta":31,"style":31},"vncserver -list\n",[139,123184,123185],{"__ignoreMap":31},[142,123186,123187,123189],{"class":144,"line":145},[142,123188,123159],{"class":1991},[142,123190,123191],{"class":201}," -list\n",[14,123193,123194],{},[29,123195],{"alt":31,"src":123196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[96,123198,123199],{"start":1249},[99,123200,123201],{},"连接到VNC服务器：",[14,123203,123204],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[96,123206,123207],{"start":1340},[99,123208,123209],{},"停止VNC服务器：",[14,123211,123212],{},"如果需要停止VNC服务器，可以使用以下命令：",[133,123214,123216],{"className":117305,"code":123215,"language":117307,"meta":31,"style":31},"vncserver -kill :1\n",[139,123217,123218],{"__ignoreMap":31},[142,123219,123220,123222,123225],{"class":144,"line":145},[142,123221,123159],{"class":1991},[142,123223,123224],{"class":201}," -kill",[142,123226,123227],{"class":257}," :1\n",[14,123229,123230],{},"将:1替换为你实际使用的显示编号。",[14,123232,123233],{},[29,123234],{"alt":31,"src":123235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123237,123238],{},[29,123239],{"alt":31,"src":123240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[84,123242,123244],{"id":123243},"_74-usb端口设置","7.4 USB端口设置",[14,123246,123247],{},[302,123248,123249],{},"首先先配置好权限",[133,123251,123253],{"className":117305,"code":123252,"language":117307,"meta":31,"style":31},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[139,123254,123255,123260,123273,123280,123285],{"__ignoreMap":31},[142,123256,123257],{"class":144,"line":145},[142,123258,123259],{"class":211},"# 将用户权限提高\n",[142,123261,123262,123264,123266,123268,123271],{"class":144,"line":64},[142,123263,24606],{"class":1991},[142,123265,26603],{"class":257},[142,123267,26606],{"class":201},[142,123269,123270],{"class":257}," dialout",[142,123272,26611],{"class":152},[142,123274,123275,123277],{"class":144,"line":1208},[142,123276,26630],{"class":1991},[142,123278,123279],{"class":257}," dialout\n",[142,123281,123282],{"class":144,"line":1223},[142,123283,123284],{"class":211},"# 查看下面命令是否输出dialout（若输出才正常）\n",[142,123286,123287],{"class":144,"line":1229},[142,123288,123289],{"class":1991},"groups\n",[14,123291,123292],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[113,123294,123296],{"id":123295},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123298,123299,123302],{},[302,123300,123301],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123304,123305,123308],{},[302,123306,123307],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123310,123311],{},[302,123312,123313],{},"流程如下：",[14,123315,123316],{},"（1）.查找设备idVendor和idProduct",[14,123318,123319,123320,123323],{},"接入两个USB设备，在终端调用指令",[139,123321,123322],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123325,123326],{},[29,123327],{"alt":31,"src":123328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123330,123331,123332,123335],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[139,123333,123334],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123337,123338],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123340,123341],{},"（2）.编写映射规则",[14,123343,123344,123345,123348],{},"在",[139,123346,123347],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[133,123350,123352],{"className":117305,"code":123351,"language":117307,"meta":31,"style":31},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[139,123353,123354],{"__ignoreMap":31},[142,123355,123356,123358,123360],{"class":144,"line":145},[142,123357,24606],{"class":1991},[142,123359,118592],{"class":257},[142,123361,123362],{"class":257}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123364,123365],{},"输入如下内容：",[133,123367,123369],{"className":117305,"code":123368,"language":117307,"meta":31,"style":31},"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",[139,123370,123371,123401],{"__ignoreMap":31},[142,123372,123373,123376,123378,123381,123384,123387,123390,123392,123395,123398],{"class":144,"line":145},[142,123374,123375],{"class":152},"KERNEL",[142,123377,198],{"class":148},[142,123379,123380],{"class":257},"=\"ttyUSB*\",",[142,123382,123383],{"class":1991}," ATTRS",[142,123385,123386],{"class":257},"{idVendor}==",[142,123388,123389],{"class":1991},"\"10c4\"",[142,123391,531],{"class":1991},[142,123393,123394],{"class":257}," ATTRS{idProduct}==\"ea60\",",[142,123396,123397],{"class":257}," MODE:=\"0777\",",[142,123399,123400],{"class":257}," SYMLINK+=\"mylidar\"\n",[142,123402,123403,123405,123407,123409,123411,123413,123416,123418,123421,123423],{"class":144,"line":64},[142,123404,123375],{"class":152},[142,123406,198],{"class":148},[142,123408,123380],{"class":257},[142,123410,123383],{"class":1991},[142,123412,123386],{"class":257},[142,123414,123415],{"class":1991},"\"1a86\"",[142,123417,531],{"class":1991},[142,123419,123420],{"class":257}," ATTRS{idProduct}==\"7523\",",[142,123422,123397],{"class":257},[142,123424,123425],{"class":257}," SYMLINK+=\"mycar\"\n",[14,123427,123428],{},"代码解释：",[1160,123430,123431,123434,123437,123440],{},[99,123432,123433],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[99,123435,123436],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[99,123438,123439],{},"SYMLINK是符号连接，即绑定的别名；",[99,123441,123442],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123444,123445,123446,123449,123452],{},"***小提示：***",[23582,123447,123448],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[139,123450,123451],{},"\u002Fetc\u002Fudev\u002Frule.d",[23582,123453,123454],{},"目录即可。",[14,123456,123457],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123459,123460],{},"（3）.使规则生效",[14,123462,123463],{},"在终端下输入如下指令：",[133,123465,123467],{"className":117305,"code":123466,"language":117307,"meta":31,"style":31},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[139,123468,123469,123474,123486,123497,123501,123506,123519],{"__ignoreMap":31},[142,123470,123471],{"class":144,"line":145},[142,123472,123473],{"class":211},"# Ubuntu用下方命令\n",[142,123475,123476,123478,123480,123483],{"class":144,"line":64},[142,123477,24606],{"class":1991},[142,123479,120057],{"class":257},[142,123481,123482],{"class":257}," udev",[142,123484,123485],{"class":257}," reload\n",[142,123487,123488,123490,123492,123494],{"class":144,"line":1208},[142,123489,24606],{"class":1991},[142,123491,120057],{"class":257},[142,123493,123482],{"class":257},[142,123495,123496],{"class":257}," restart\n",[142,123498,123499],{"class":144,"line":1223},[142,123500,2428],{"emptyLinePlaceholder":69},[142,123502,123503],{"class":144,"line":1229},[142,123504,123505],{"class":211},"#Fedora用下方命令\n",[142,123507,123508,123510,123513,123516],{"class":144,"line":1243},[142,123509,24606],{"class":1991},[142,123511,123512],{"class":257}," udevadm",[142,123514,123515],{"class":257}," control",[142,123517,123518],{"class":201}," --reload\n",[142,123520,123521,123523,123525],{"class":144,"line":1249},[142,123522,24606],{"class":1991},[142,123524,123512],{"class":257},[142,123526,123527],{"class":257}," trigger\n",[14,123529,123530],{},"再重新插拔设备即可。",[14,123532,123533],{},"（4）.测试",[14,123535,123536],{},"终端下输入如下指令",[133,123538,123540],{"className":117305,"code":123539,"language":117307,"meta":31,"style":31},"ll \u002Fdev | grep ttyUSB\n",[139,123541,123542],{"__ignoreMap":31},[142,123543,123544,123547,123550,123552,123554],{"class":144,"line":145},[142,123545,123546],{"class":1991},"ll",[142,123548,123549],{"class":257}," \u002Fdev",[142,123551,25138],{"class":148},[142,123553,30265],{"class":1991},[142,123555,123556],{"class":257}," ttyUSB\n",[14,123558,123559],{},"运行结果如下：",[14,123561,123562],{},[29,123563],{"alt":31,"src":123564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123566,123567,123568,123571],{},"也可以多次插拔USB设备，会发现设备端口",[139,123569,123570],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123573,123574],{},[302,123575,117973],{},[14,123577,123578],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[113,123580,123582],{"id":123581},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123584,123585,123587],{},[302,123586,123301],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123589,123590,123592],{},[302,123591,123307],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123594,123595],{},[302,123596,123313],{},[14,123598,123599],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123601,123602],{},"调用如下指令查看第一台雷达的USB信息：",[133,123604,123606],{"className":117305,"code":123605,"language":117307,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[139,123607,123608,123628],{"__ignoreMap":31},[142,123609,123610,123613,123615,123618,123621,123623,123625],{"class":144,"line":145},[142,123611,123612],{"class":1991},"udevadm",[142,123614,69850],{"class":257},[142,123616,123617],{"class":201}," --attribute-walk",[142,123619,123620],{"class":201}," --name=\u002Fdev\u002FttyUSB0",[142,123622,25138],{"class":148},[142,123624,30265],{"class":1991},[142,123626,123627],{"class":257}," KERNELS\n",[142,123629,123630,123632,123634,123636,123639,123641,123643],{"class":144,"line":64},[142,123631,123612],{"class":1991},[142,123633,69850],{"class":257},[142,123635,123617],{"class":201},[142,123637,123638],{"class":201}," --name=\u002Fdev\u002FttyACM0",[142,123640,25138],{"class":148},[142,123642,30265],{"class":1991},[142,123644,123627],{"class":257},[14,123646,123647],{},[29,123648],{"alt":31,"src":123649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123651,123652],{},"调用如下指令查看第二台雷达的USB信息：",[133,123654,123656],{"className":117305,"code":123655,"language":117307,"meta":31,"style":31},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[139,123657,123658],{"__ignoreMap":31},[142,123659,123660,123662,123664,123666,123669,123671,123673],{"class":144,"line":145},[142,123661,123612],{"class":1991},[142,123663,69850],{"class":257},[142,123665,123617],{"class":201},[142,123667,123668],{"class":201}," --name=\u002Fdev\u002FttyUSB1",[142,123670,25138],{"class":148},[142,123672,30265],{"class":1991},[142,123674,123627],{"class":257},[14,123676,123677,123678,123681,123682,123685,123686,123689],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[139,123679,123680],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[139,123683,123684],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[302,123687,123688],{},"唯一性标识","”。",[14,123691,123341],{},[14,123693,123344,123694,123696],{},[139,123695,123347],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[133,123698,123699],{"className":117305,"code":123351,"language":117307,"meta":31,"style":31},[139,123700,123701],{"__ignoreMap":31},[142,123702,123703,123705,123707],{"class":144,"line":145},[142,123704,24606],{"class":1991},[142,123706,118592],{"class":257},[142,123708,123362],{"class":257},[133,123710,123712],{"className":117305,"code":123711,"language":117307,"meta":31,"style":31},"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",[139,123713,123714,123743],{"__ignoreMap":31},[142,123715,123716,123718,123720,123722,123725,123727,123730,123733,123735,123738,123740],{"class":144,"line":145},[142,123717,123375],{"class":152},[142,123719,198],{"class":148},[142,123721,123380],{"class":257},[142,123723,123724],{"class":152}," KERNELS",[142,123726,198],{"class":148},[142,123728,123729],{"class":257},"=\"1-1.3:1.0\",",[142,123731,123732],{"class":1991}," MODE:",[142,123734,198],{"class":257},[142,123736,123737],{"class":1991},"\"0777\"",[142,123739,531],{"class":1991},[142,123741,123742],{"class":257}," SYMLINK+=\"rplidar_front\"\n",[142,123744,123745,123747,123749,123751,123753,123755,123758,123760,123762,123764,123766],{"class":144,"line":64},[142,123746,123375],{"class":152},[142,123748,198],{"class":148},[142,123750,123380],{"class":257},[142,123752,123724],{"class":152},[142,123754,198],{"class":148},[142,123756,123757],{"class":257},"=\"1-1.4:1.0\",",[142,123759,123732],{"class":1991},[142,123761,198],{"class":257},[142,123763,123737],{"class":1991},[142,123765,531],{"class":1991},[142,123767,123768],{"class":257}," SYMLINK+=\"rplidar_back\"\n",[14,123770,123460],{},[14,123772,123463],{},[133,123774,123775],{"className":117305,"code":123466,"language":117307,"meta":31,"style":31},[139,123776,123777,123781,123791,123801,123805,123809,123819],{"__ignoreMap":31},[142,123778,123779],{"class":144,"line":145},[142,123780,123473],{"class":211},[142,123782,123783,123785,123787,123789],{"class":144,"line":64},[142,123784,24606],{"class":1991},[142,123786,120057],{"class":257},[142,123788,123482],{"class":257},[142,123790,123485],{"class":257},[142,123792,123793,123795,123797,123799],{"class":144,"line":1208},[142,123794,24606],{"class":1991},[142,123796,120057],{"class":257},[142,123798,123482],{"class":257},[142,123800,123496],{"class":257},[142,123802,123803],{"class":144,"line":1223},[142,123804,2428],{"emptyLinePlaceholder":69},[142,123806,123807],{"class":144,"line":1229},[142,123808,123505],{"class":211},[142,123810,123811,123813,123815,123817],{"class":144,"line":1243},[142,123812,24606],{"class":1991},[142,123814,123512],{"class":257},[142,123816,123515],{"class":257},[142,123818,123518],{"class":201},[142,123820,123821,123823,123825],{"class":144,"line":1249},[142,123822,24606],{"class":1991},[142,123824,123512],{"class":257},[142,123826,123527],{"class":257},[14,123828,123530],{},[14,123830,123533],{},[14,123832,123536,123833,123836],{},[139,123834,123835],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123838,123839],{},[29,123840],{"alt":31,"src":123841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123843,123844],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123846,123847,123849],{},[302,123848,117973],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[113,123851,123853],{"id":123852},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123855,123856],{},"（1）.查看所连接的主机USB接口的信息",[133,123858,123860],{"className":117305,"code":123859,"language":117307,"meta":31,"style":31},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[139,123861,123862,123892],{"__ignoreMap":31},[142,123863,123864,123866,123868,123871,123873,123875,123877,123879,123882,123885,123887,123890],{"class":144,"line":145},[142,123865,123612],{"class":1991},[142,123867,69850],{"class":257},[142,123869,123870],{"class":201}," -a",[142,123872,29245],{"class":201},[142,123874,28451],{"class":152},[142,123876,123612],{"class":1991},[142,123878,69850],{"class":257},[142,123880,123881],{"class":201}," -q",[142,123883,123884],{"class":257}," path",[142,123886,25144],{"class":201},[142,123888,123889],{"class":257}," \u002Fdev\u002FttyACM0",[142,123891,159],{"class":152},[142,123893,123894,123896,123898,123900,123902,123904,123906,123908,123910,123912,123914,123917],{"class":144,"line":64},[142,123895,123612],{"class":1991},[142,123897,69850],{"class":257},[142,123899,123870],{"class":201},[142,123901,29245],{"class":201},[142,123903,28451],{"class":152},[142,123905,123612],{"class":1991},[142,123907,69850],{"class":257},[142,123909,123881],{"class":201},[142,123911,123884],{"class":257},[142,123913,25144],{"class":201},[142,123915,123916],{"class":257}," \u002Fdev\u002FttyUSB0",[142,123918,159],{"class":152},[14,123920,123921],{},[29,123922],{"alt":31,"src":123923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123925,123926],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123928,123341],{},[14,123930,123344,123931,123696],{},[139,123932,123347],{},[133,123934,123935],{"className":117305,"code":123351,"language":117307,"meta":31,"style":31},[139,123936,123937],{"__ignoreMap":31},[142,123938,123939,123941,123943],{"class":144,"line":145},[142,123940,24606],{"class":1991},[142,123942,118592],{"class":257},[142,123944,123362],{"class":257},[133,123946,123948],{"className":117305,"code":123947,"language":117307,"meta":31,"style":31},"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",[139,123949,123950,123978,124004],{"__ignoreMap":31},[142,123951,123952,123954,123956,123959,123961,123963,123965,123967,123970,123973,123975],{"class":144,"line":145},[142,123953,123375],{"class":152},[142,123955,198],{"class":148},[142,123957,123958],{"class":257},"=\"ttyACM*\",",[142,123960,123383],{"class":1991},[142,123962,123386],{"class":257},[142,123964,123415],{"class":1991},[142,123966,531],{"class":1991},[142,123968,123969],{"class":257}," ATTRS{idProduct}==\"55d4\",",[142,123971,123972],{"class":257}," ATTRS{serial}==\"0001\",",[142,123974,123397],{"class":257},[142,123976,123977],{"class":257}," SYMLINK+=\"ttyACM_MCU\"\n",[142,123979,123980,123982,123984,123986,123988,123990,123992,123994,123996,123999,124001],{"class":144,"line":64},[142,123981,123375],{"class":152},[142,123983,198],{"class":148},[142,123985,123958],{"class":257},[142,123987,123383],{"class":1991},[142,123989,123386],{"class":257},[142,123991,123415],{"class":1991},[142,123993,531],{"class":1991},[142,123995,123969],{"class":257},[142,123997,123998],{"class":257}," ATTRS{serial}==\"0002\",",[142,124000,123397],{"class":257},[142,124002,124003],{"class":257}," SYMLINK+=\"ttyACM_Lidar\"\n",[142,124005,124006,124008,124010,124012,124014,124016,124018,124020,124022,124024],{"class":144,"line":1208},[142,124007,123375],{"class":152},[142,124009,198],{"class":148},[142,124011,123380],{"class":257},[142,124013,123383],{"class":1991},[142,124015,123386],{"class":257},[142,124017,123415],{"class":1991},[142,124019,531],{"class":1991},[142,124021,123420],{"class":257},[142,124023,123397],{"class":257},[142,124025,124026],{"class":257}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124028,123460],{},[14,124030,123463],{},[133,124032,124033],{"className":117305,"code":123466,"language":117307,"meta":31,"style":31},[139,124034,124035,124039,124049,124059,124063,124067,124077],{"__ignoreMap":31},[142,124036,124037],{"class":144,"line":145},[142,124038,123473],{"class":211},[142,124040,124041,124043,124045,124047],{"class":144,"line":64},[142,124042,24606],{"class":1991},[142,124044,120057],{"class":257},[142,124046,123482],{"class":257},[142,124048,123485],{"class":257},[142,124050,124051,124053,124055,124057],{"class":144,"line":1208},[142,124052,24606],{"class":1991},[142,124054,120057],{"class":257},[142,124056,123482],{"class":257},[142,124058,123496],{"class":257},[142,124060,124061],{"class":144,"line":1223},[142,124062,2428],{"emptyLinePlaceholder":69},[142,124064,124065],{"class":144,"line":1229},[142,124066,123505],{"class":211},[142,124068,124069,124071,124073,124075],{"class":144,"line":1243},[142,124070,24606],{"class":1991},[142,124072,123512],{"class":257},[142,124074,123515],{"class":257},[142,124076,123518],{"class":201},[142,124078,124079,124081,124083],{"class":144,"line":1249},[142,124080,24606],{"class":1991},[142,124082,123512],{"class":257},[142,124084,123527],{"class":257},[14,124086,124087,124088],{},"再重新插拔设备即可，或者 ",[302,124089,124090],{},"直接重启系统。",[14,124092,123533],{},[14,124094,123536,124095,123836],{},[139,124096,123835],{},[14,124098,124099],{},[29,124100],{"alt":31,"src":124101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124103,123844],{},[14,124105,124106,124108],{},[302,124107,117973],{}," 一些设备可能没有串口号等。",[113,124110,124112],{"id":124111},"_744-其他注意事项","7.4.4 其他注意事项",[14,124114,124115,124116,124118,124119,124122,124123,18439,124126,124129,124130,124132],{},"并非所有的USB设备端口号都是",[139,124117,123570],{},"的格式，比如Arduino的端口号可能是",[139,124120,124121],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[139,124124,124125],{},"videon",[139,124127,124128],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[139,124131,124125],{},"端口，绑定时需要关联的也是该接口。",[14,124134,124135,124136,124139,124140,124143,124144,124146,124147,124150,124151,124154,124155,124158,124159,124158,124162,124158,124165,28414],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[139,124137,124138],{},"KERNEL==\"ttyUSB*\"","修改为",[139,124141,124142],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[139,124145,124138],{},"修改为类似于",[139,124148,124149],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[139,124152,124153],{},"video[0,2,4,6]","表示可以绑定的端口为",[139,124156,124157],{},"video0","或",[139,124160,124161],{},"video2",[139,124163,124164],{},"video4",[139,124166,124167],{},"video6",[84,124169,124171],{"id":124170},"_75-挂载内网网页","7.5 挂载内网网页",[14,124173,124174],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124176,124177],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124179,124180],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124182,124183,124184],{},"Termux 下载地址（F-Droid）：",[391,124185,124186],{"href":124186,"rel":124187},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23894],[14,124189,124190],{},"首先打开app后，先更新软件缓存：",[133,124192,124194],{"className":117305,"code":124193,"language":117307,"meta":31,"style":31},"pkg update\n",[139,124195,124196],{"__ignoreMap":31},[142,124197,124198,124201],{"class":144,"line":145},[142,124199,124200],{"class":1991},"pkg",[142,124202,26271],{"class":257},[14,124204,124205],{},"然后换源",[133,124207,124209],{"className":117305,"code":124208,"language":117307,"meta":31,"style":31},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[139,124210,124211],{"__ignoreMap":31},[142,124212,124213,124215,124218],{"class":144,"line":145},[142,124214,123083],{"class":1991},[142,124216,124217],{"class":152}," $PREFIX",[142,124219,124220],{"class":257},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124222,124223],{},"将该文件内容替换为下面：",[133,124225,124227],{"className":117305,"code":124226,"language":117307,"meta":31,"style":31},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[139,124228,124229],{"__ignoreMap":31},[142,124230,124231,124234,124237,124240],{"class":144,"line":145},[142,124232,124233],{"class":1991},"deb",[142,124235,124236],{"class":257}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[142,124238,124239],{"class":257}," stable",[142,124241,124242],{"class":257}," main\n",[1160,124244,124245,124272],{},[99,124246,124247,124248,124250,124251],{},"如果你使用的是",[139,124249,123083],{},"编辑器：",[1160,124252,124253,124260,124266],{},[99,124254,124255,124256,124259],{},"按 ",[139,124257,124258],{},"Ctrl+O"," 保存文件。",[99,124261,124255,124262,124265],{},[139,124263,124264],{},"Enter"," 确认文件名。",[99,124267,124255,124268,124271],{},[139,124269,124270],{},"Ctrl+X"," 退出编辑器。",[99,124273,124247,124274,124250,124277],{},[139,124275,124276],{},"vim",[1160,124278,124279,124285],{},[99,124280,124255,124281,124284],{},[139,124282,124283],{},"Esc"," 退出编辑模式。",[99,124286,124287,124288,124290],{},"输入 ",[139,124289,119230],{}," 保存并退出。",[14,124292,124293],{},"接下来重新更新软件源：",[133,124295,124297],{"className":117305,"code":124296,"language":117307,"meta":31,"style":31},"pkg update && pkg upgrade\n",[139,124298,124299],{"__ignoreMap":31},[142,124300,124301,124303,124305,124307,124309],{"class":144,"line":145},[142,124302,124200],{"class":1991},[142,124304,117356],{"class":257},[142,124306,26219],{"class":152},[142,124308,124200],{"class":1991},[142,124310,117342],{"class":257},[14,124312,124313],{},"安装python：",[133,124315,124317],{"className":117305,"code":124316,"language":117307,"meta":31,"style":31},"pkg install python\n",[139,124318,124319],{"__ignoreMap":31},[142,124320,124321,124323,124325],{"class":144,"line":145},[142,124322,124200],{"class":1991},[142,124324,23863],{"class":257},[142,124326,124327],{"class":257}," python\n",[14,124329,124330,26502],{},[302,124331,124332],{},"通过Termux访问设备存储",[14,124334,124335],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[133,124337,124339],{"className":117305,"code":124338,"language":117307,"meta":31,"style":31},"termux-setup-storage\n",[139,124340,124341],{"__ignoreMap":31},[142,124342,124343],{"class":144,"line":145},[142,124344,124338],{"class":1991},[96,124346,124347],{},[99,124348,124349,26502,124352],{},[302,124350,124351],{},"进入HTML文件所在的目录",[96,124353,124354],{},[99,124355,124356,124357,124359],{},"使用",[139,124358,101285],{},"命令进入HTML文件所在的目录：",[133,124361,124363],{"className":117305,"code":124362,"language":117307,"meta":31,"style":31},"cd ~\u002Fyour_html_folder\n",[139,124364,124365],{"__ignoreMap":31},[142,124366,124367,124369],{"class":144,"line":145},[142,124368,101285],{"class":201},[142,124370,124371],{"class":257}," ~\u002Fyour_html_folder\n",[96,124373,124374],{"start":64},[99,124375,124376,26502,124379,124384,124401],{},[302,124377,124378],{},"启动Python HTTP服务器",[96,124380,124381],{},[99,124382,124383],{},"运行以下命令启动一个简单的HTTP服务器：",[133,124385,124387],{"className":117305,"code":124386,"language":117307,"meta":31,"style":31},"python -m http.server 8000\n",[139,124388,124389],{"__ignoreMap":31},[142,124390,124391,124393,124395,124398],{"class":144,"line":145},[142,124392,30409],{"class":1991},[142,124394,100891],{"class":201},[142,124396,124397],{"class":257}," http.server",[142,124399,124400],{"class":201}," 8000\n",[96,124402,124403],{"start":1208},[99,124404,124405,124406,124409],{},"这会在端口",[139,124407,124408],{},"8000","上启动一个Web服务器。",[1160,124411,124412],{},[99,124413,124414],{},"启动服务器后，Termux会显示日志信息，例如：",[133,124416,124418],{"className":120825,"code":124417,"language":120827,"meta":120828,"style":31},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[139,124419,124420],{"__ignoreMap":31},[142,124421,124422],{"class":144,"line":145},[142,124423,124417],{},[1160,124425,124426],{},[99,124427,124428],{},"这表示服务器已成功启动。",[14,124430,124431],{},[302,124432,124433],{},"在浏览器中访问HTML文件",[96,124435,124436],{},[99,124437,124438,26502,124441,124446],{},[302,124439,124440],{},"在同一设备上访问",[96,124442,124443],{},[99,124444,124445],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[133,124447,124450],{"className":124448,"code":124449,"language":71693,"meta":31,"style":31},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[139,124451,124452],{"__ignoreMap":31},[142,124453,124454,124457],{"class":144,"line":145},[142,124455,124456],{"class":152},"http:",[142,124458,124459],{"class":211},"\u002F\u002Flocalhost:8000\n",[1160,124461,124462],{},[99,124463,124464,124465,124468],{},"如果HTML文件中有",[139,124466,124467],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[84,124470,124472],{"id":124471},"_76-linux重点知识","7.6 Linux重点知识",[113,124474,124476],{"id":124475},"_761-关于点的说明","7.6.1 关于点的说明",[14,124478,124479],{},[29,124480],{"alt":31,"src":124481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124483,124484],{},"一点本目录，两点上目录",[113,124486,124488],{"id":124487},"_762-目录","7.6.2 目录",[22027,124490,124492],{"id":124491},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124494,124495],{},[302,124496,124497],{},"\u002Fboot:",[14,124499,124500],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124502,124503],{},[302,124504,124505],{},"\u002Fetc:",[14,124507,124508],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124510,124511],{},[302,124512,124513],{},"\u002Flib：",[14,124515,124516],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124518,124519],{},[302,124520,124521],{},"\u002Fsys:",[14,124523,124524],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22027,124526,124528],{"id":124527},"_7622-指令集合","7.6.2.2 指令集合",[14,124530,124531],{},[302,124532,124533],{},"\u002Fbin:",[14,124535,124536],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124538,124539],{},[302,124540,124541],{},"\u002Fsbin:",[14,124543,124544],{},"只有系统管理员才能使用的程序和指令",[22027,124546,124548],{"id":124547},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124550,124551],{},[302,124552,124553],{},"\u002Fdev:",[14,124555,124556],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124558,124559],{},[302,124560,124561],{},"\u002Fmedia:",[14,124563,124564],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124566,124567],{},[302,124568,124569],{},"\u002Fmnt:",[14,124571,124572],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22027,124574,124576],{"id":124575},"_7624-临时文件","7.6.2.4 临时文件",[14,124578,124579],{},[302,124580,124581],{},"\u002Frun:",[14,124583,124584],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124586,124587],{},[302,124588,124589],{},"\u002Flost+found:",[14,124591,124592],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124594,124595],{},[302,124596,124597],{},"\u002Ftmp:",[14,124599,124600],{},"这个目录是用来存放一些临时文件的",[22027,124602,124604],{"id":124603},"_7625-账户","7.6.2.5 账户",[14,124606,124607],{},[302,124608,124609],{},"\u002Froot：",[14,124611,124612],{},"系统管理员的用户主目录",[14,124614,124615,26502],{},[302,124616,124617],{},"\u002Fhome",[14,124619,124620],{},"用户的主目录，以用户的账号命名的",[14,124622,124623,26502],{},[302,124624,124625],{},"\u002Fusr",[14,124627,124628],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124630,124631],{},[302,124632,124633],{},"\u002Fusr\u002Fbin：",[14,124635,124636],{},"系统用户使用的应用程序与指令",[14,124638,124639],{},[302,124640,124641],{},"\u002Fusr\u002Fsbin：",[14,124643,124644],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124646,124647],{},[302,124648,124649],{},"\u002Fusr\u002Fsrc：",[14,124651,124652],{},"内核源代码默认的放置目录",[22027,124654,124656],{"id":124655},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124658,124659],{},[302,124660,124661],{},"\u002Fvar：",[14,124663,124664],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124666,124667],{},[302,124668,124669],{},"\u002Fproc:",[14,124671,124672,124673,124676],{},"管理 ",[302,124674,124675],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22027,124678,124680],{"id":124679},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124682,124683],{},[302,124684,124685],{},"\u002Fopt:",[14,124687,124688],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124690,124691],{},[302,124692,124693],{},"\u002Fsrv:",[14,124695,124696],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[113,124698,124700],{"id":124699},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124702,124703],{},[29,124704],{"alt":31,"src":124705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124707,124708],{},"windows-->linux:",[14,124710,124711],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124713,124714],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124716,124717],{},"linux传输文件到windows",[14,124719,124720],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[113,124722,124724],{"id":124723},"_764-易忘知识","7.6.4 易忘知识",[14,124726,124727],{},"操作系统内核查看",[133,124729,124730],{"className":117305,"code":121299,"language":117307,"meta":31,"style":31},[139,124731,124732],{"__ignoreMap":31},[142,124733,124734,124736],{"class":144,"line":145},[142,124735,70233],{"class":1991},[142,124737,121308],{"class":201},[14,124739,124740],{},[29,124741],{"alt":31,"src":124742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124744,124745],{},[29,124746],{"alt":31,"src":124747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[133,124749,124751],{"className":117305,"code":124750,"language":117307,"meta":31,"style":31},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[139,124752,124753,124765],{"__ignoreMap":31},[142,124754,124755,124757,124760,124763],{"class":144,"line":145},[142,124756,121516],{"class":1991},[142,124758,124759],{"class":257}," mvtest",[142,124761,124762],{"class":257}," mvtest2",[142,124764,2702],{"class":152},[142,124766,124767],{"class":144,"line":64},[142,124768,124769],{"class":1991},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124771,124772],{},[29,124773],{"alt":31,"src":124774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124776,124777],{},[29,124778],{"alt":31,"src":124779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124781,124782,124783,124786],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[139,124784,124785],{},"du -a"," 可以快速查看磁盘使用细节。",[113,124788,124790],{"id":124789},"_765-vim","7.6.5 Vim",[14,124792,124793],{},[29,124794],{"alt":31,"src":124795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124797,124798],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124800,124801],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124803,124804],{},[302,124805,124806],{},"1.命令模式：",[14,124808,124809],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124811,124812],{},"x 删除当前光标所在处的字符",[14,124814,124815],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124817,124818],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124820,124821],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124823,124824],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124826,124827],{},"dd 剪切当前行",[14,124829,124830],{},"yy 复制当前行",[14,124832,124833],{},"p 粘贴剪贴板内容到光标下方",[14,124835,124836],{},"P 粘贴剪贴板内容到光标上方",[14,124838,124839],{},"u 撤销上一次操作",[14,124841,124842],{},"ctrl+r 重做上一次操作",[14,124844,124845,124847],{},[948,124846],{}," 保存文件",[14,124849,124850,124852],{},[798,124851],{}," 退出Vim编辑器",[14,124854,124855,124857],{},[798,124856],{},"! 强制退出Vim编辑器，不保存修改",[14,124859,124860],{},[302,124861,124862],{},"2.输入模式：",[14,124864,124865],{},[29,124866],{"alt":31,"src":124867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124869,124870],{},[302,124871,124872],{},"3.底线命令模式：",[14,124874,124875],{},[29,124876],{"alt":31,"src":124877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124879,124880],{},"按下esc可以退出底线命令模式",[113,124882,124884],{"id":124883},"_766-apt","7.6.6 apt",[14,124886,124887],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[113,124889,124891],{"id":124890},"_767-home与root的区别","7.6.7 home与root的区别",[14,124893,124894],{},[29,124895],{"alt":31,"src":124896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124898,124899],{},[29,124900],{"alt":31,"src":124901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124903,124904],{},[29,124905],{"alt":31,"src":124906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124908,124909],{},[29,124910],{"alt":31,"src":124911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[113,124913,124915],{"id":124914},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124917,124918],{},[391,124919,124920],{"href":124920,"rel":124921},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23894],[96,124923,124924,124927],{},[99,124925,124926],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[99,124928,124929],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124931,124932],{},[29,124933],{"alt":31,"src":124934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124936,124937],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124939,124940],{},[29,124941],{"alt":31,"src":124942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[133,124944,124946],{"className":120825,"code":124945,"language":120827,"meta":120828,"style":31},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[139,124947,124948,124953],{"__ignoreMap":31},[142,124949,124950],{"class":144,"line":145},[142,124951,124952],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[142,124954,124955],{"class":144,"line":64},[142,124956,124957],{},".\u002Fpycharm.sh\n",[14,124959,124960],{},"3️⃣创建.desktop文件",[14,124962,124963],{},[302,124964,124965],{},"原理：",[1160,124967,124968,124978],{},[99,124969,124970,124971,124977],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[302,124972,124973,124976],{},[139,124974,124975],{},".desktop"," 文件"," 来识别应用。",[99,124979,124980,124982,124983],{},[139,124981,124975],{}," 文件相当于一个“应用注册表”，告诉系统：",[1160,124984,124985,124988,124991,124994,124997],{},[99,124986,124987],{},"应用名字（Name）",[99,124989,124990],{},"图标（Icon）",[99,124992,124993],{},"执行命令（Exec）",[99,124995,124996],{},"分类（Categories）",[99,124998,124999],{},"是否需要终端（Terminal）",[133,125001,125003],{"className":120825,"code":125002,"language":120827,"meta":120828,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[139,125004,125005,125010],{"__ignoreMap":31},[142,125006,125007],{"class":144,"line":145},[142,125008,125009],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[142,125011,125012],{"class":144,"line":64},[142,125013,125014],{},"nano pycharm.desktop\n",[14,125016,125017],{},"nano是一个命令行下的编辑器，也可以使用vim",[133,125019,125021],{"className":120825,"code":125020,"language":120827,"meta":120828,"style":31},"[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",[139,125022,125023,125028,125033,125038,125043,125048,125053,125058,125063,125068],{"__ignoreMap":31},[142,125024,125025],{"class":144,"line":145},[142,125026,125027],{},"[Desktop Entry]\n",[142,125029,125030],{"class":144,"line":64},[142,125031,125032],{},"Version=1.0\n",[142,125034,125035],{"class":144,"line":1208},[142,125036,125037],{},"Type=Application\n",[142,125039,125040],{"class":144,"line":1223},[142,125041,125042],{},"Name=PyCharm\n",[142,125044,125045],{"class":144,"line":1229},[142,125046,125047],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[142,125049,125050],{"class":144,"line":1243},[142,125051,125052],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[142,125054,125055],{"class":144,"line":1249},[142,125056,125057],{},"Comment=JetBrains PyCharm IDE\n",[142,125059,125060],{"class":144,"line":1340},[142,125061,125062],{},"Categories=Development;IDE;\n",[142,125064,125065],{"class":144,"line":1346},[142,125066,125067],{},"Terminal=false\n",[142,125069,125070],{"class":144,"line":1358},[142,125071,125072],{},"StartupWMClass=jetbrains-pycharm\n",[1160,125074,125075,125081,125087,125093],{},[99,125076,125077,125080],{},[139,125078,125079],{},"Exec"," → 点击图标时执行的命令",[99,125082,125083,125086],{},[139,125084,125085],{},"Icon"," → 显示在菜单和桌面上的图标",[99,125088,125089,125092],{},[139,125090,125091],{},"Terminal=false"," → 不打开终端",[99,125094,125095,125098],{},[139,125096,125097],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125100,125101,125102],"blockquote",{},[14,125103,125104,125105,125107,125108],{},"可以理解成 ",[139,125106,124975],{}," 文件是 Linux 的 ",[302,125109,125110],{},"快捷方式配置文件",[14,125112,125113],{},"4️⃣设置可执行权限",[133,125115,125117],{"className":120825,"code":125116,"language":120827,"meta":120828,"style":31},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[139,125118,125119],{"__ignoreMap":31},[142,125120,125121],{"class":144,"line":145},[142,125122,125116],{},[14,125124,125125],{},"5️⃣桌面图标启动的话如下：",[133,125127,125129],{"className":120825,"code":125128,"language":120827,"meta":120828,"style":31},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[139,125130,125131,125136],{"__ignoreMap":31},[142,125132,125133],{"class":144,"line":145},[142,125134,125135],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[142,125137,125138],{"class":144,"line":64},[142,125139,125140],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[96,125142,125143],{"start":1208},[99,125144,125145],{},"下载Appimage文件实现软件的安装",[14,125147,125148],{},"1️⃣先下载appimage",[14,125150,125151],{},[391,125152,125153],{"href":125153,"rel":125154},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23894],[14,125156,125157],{},[29,125158],{"alt":31,"src":125159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125161,125162],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125164,125165],{},[29,125166],{"alt":31,"src":125167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125169,125170],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125172,125173],{},[29,125174],{"alt":31,"src":125175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125177,125178],{},[29,125179],{"alt":31,"src":125180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125182,125183,125184,125187],{},"3️⃣给他们放在",[139,125185,125186],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125189,125190],{},"4️⃣给软件执行权限",[133,125192,125194],{"className":120825,"code":125193,"language":120827,"meta":120828,"style":31},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[139,125195,125196,125201],{"__ignoreMap":31},[142,125197,125198],{"class":144,"line":145},[142,125199,125200],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[142,125202,125203],{"class":144,"line":64},[142,125204,125205],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125207,125208],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[133,125210,125212],{"className":117305,"code":125211,"language":117307,"meta":31,"style":31},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[139,125213,125214,125221,125228,125234],{"__ignoreMap":31},[142,125215,125216,125218],{"class":144,"line":145},[142,125217,101285],{"class":201},[142,125219,125220],{"class":257}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[142,125222,125223,125225],{"class":144,"line":64},[142,125224,101292],{"class":1991},[142,125226,125227],{"class":257}," .\u002Fqqmusic.desktop\n",[142,125229,125230,125232],{"class":144,"line":1208},[142,125231,124276],{"class":1991},[142,125233,125227],{"class":257},[142,125235,125236,125238,125240,125242],{"class":144,"line":1223},[142,125237,24606],{"class":1991},[142,125239,24609],{"class":257},[142,125241,123142],{"class":257},[142,125243,125227],{"class":257},[14,125245,125246,125248],{},[139,125247,101292],{},"：一个 Linux 命令，主要功能是：",[1160,125250,125251,125254],{},[99,125252,125253],{},"如果文件不存在，就创建一个新的空文件",[99,125255,125256],{},"如果文件已存在，就更新该文件的最后修改时间",[133,125258,125260],{"className":120825,"code":125259,"language":120827,"meta":120828,"style":31},"[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",[139,125261,125262,125266,125271,125276,125281,125285,125290],{"__ignoreMap":31},[142,125263,125264],{"class":144,"line":145},[142,125265,125027],{},[142,125267,125268],{"class":144,"line":64},[142,125269,125270],{},"Name=QQ音乐\n",[142,125272,125273],{"class":144,"line":1208},[142,125274,125275],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[142,125277,125278],{"class":144,"line":1223},[142,125279,125280],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[142,125282,125283],{"class":144,"line":1229},[142,125284,125037],{},[142,125286,125287],{"class":144,"line":1243},[142,125288,125289],{},"Categories=Audio;Music;Player;\n",[142,125291,125292],{"class":144,"line":1249},[142,125293,125294],{},"Comment=QQ Music Client for Linux\n",[14,125296,125297],{},"将文件复制进去",[14,125299,125300],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125302,125303],{},[29,125304],{"alt":31,"src":125305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125307,125308],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125310,125311],{},[29,125312],{"alt":31,"src":125313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125315,125316,125317,125320,125321,125324],{},"如果你用的不是KDE，那么也可以直接修改",[139,125318,125319],{},"qqmuic.desktop","：在exec的末尾加上",[139,125322,125323],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[133,125326,125328],{"className":120825,"code":125327,"language":120827,"meta":120828,"style":31},"[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",[139,125329,125330,125334,125338,125343,125347,125351,125355],{"__ignoreMap":31},[142,125331,125332],{"class":144,"line":145},[142,125333,125027],{},[142,125335,125336],{"class":144,"line":64},[142,125337,125270],{},[142,125339,125340],{"class":144,"line":1208},[142,125341,125342],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[142,125344,125345],{"class":144,"line":1223},[142,125346,125280],{},[142,125348,125349],{"class":144,"line":1229},[142,125350,125037],{},[142,125352,125353],{"class":144,"line":1243},[142,125354,125289],{},[142,125356,125357],{"class":144,"line":1249},[142,125358,125294],{},[14,125360,125361],{},[29,125362],{"alt":31,"src":125363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125365,125366],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[133,125368,125370],{"className":120825,"code":125369,"language":120827,"meta":120828,"style":31},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[139,125371,125372],{"__ignoreMap":31},[142,125373,125374],{"class":144,"line":145},[142,125375,125369],{},[96,125377,125378],{"start":1223},[99,125379,125380],{},"去Flathub上安装软件",[14,125382,125383],{},[391,125384,125385],{"href":125385,"rel":125386},"https:\u002F\u002Fflathub.org\u002F",[23894],[14,125388,125389],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125391,125392],{},[29,125393],{"alt":31,"src":125394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[133,125396,125398],{"className":120825,"code":125397,"language":120827,"meta":120828,"style":31},"flatpak install flathub com.obsproject.Studio\n",[139,125399,125400],{"__ignoreMap":31},[142,125401,125402],{"class":144,"line":145},[142,125403,125397],{},[14,125405,125406],{},[29,125407],{"alt":31,"src":125408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125410,125411],{},"2️⃣运行软件",[14,125413,125414],{},"a.官方方式：",[14,125416,125417],{},[29,125418],{"alt":31,"src":125419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[133,125421,125422],{"className":120825,"code":125397,"language":120827,"meta":120828,"style":31},[139,125423,125424],{"__ignoreMap":31},[142,125425,125426],{"class":144,"line":145},[142,125427,125397],{},[14,125429,125430],{},"b.当普通软件运行：",[14,125432,125433],{},[29,125434],{"alt":31,"src":125435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125437,125438],{},[29,125439],{"alt":31,"src":125440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5155,125442,125443],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":31,"searchDepth":64,"depth":64,"links":125445},[125446,125447,125452,125453,125459,125460],{"id":122178,"depth":64,"text":122179},{"id":122520,"depth":64,"text":122521,"children":125448},[125449,125450,125451],{"id":122524,"depth":1208,"text":122525},{"id":122591,"depth":1208,"text":122592},{"id":122852,"depth":1208,"text":122853},{"id":123005,"depth":64,"text":123006},{"id":123243,"depth":64,"text":123244,"children":125454},[125455,125456,125457,125458],{"id":123295,"depth":1208,"text":123296},{"id":123581,"depth":1208,"text":123582},{"id":123852,"depth":1208,"text":123853},{"id":124111,"depth":1208,"text":124112},{"id":124170,"depth":64,"text":124171},{"id":124471,"depth":64,"text":124472,"children":125461},[125462,125463,125464,125465,125466,125467,125468,125469],{"id":124475,"depth":1208,"text":124476},{"id":124487,"depth":1208,"text":124488},{"id":124699,"depth":1208,"text":124700},{"id":124723,"depth":1208,"text":124724},{"id":124789,"depth":1208,"text":124790},{"id":124883,"depth":1208,"text":124884},{"id":124890,"depth":1208,"text":124891},{"id":124914,"depth":1208,"text":124915},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122170,"description":66},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125476,"title":125477,"body":125478,"description":66,"extension":67,"meta":125482,"navigation":69,"path":125483,"seo":125484,"stem":125485,"__hash__":125486},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125479,"toc":125480},[],{"title":31,"searchDepth":64,"depth":64,"links":125481},[],{"category":30292},"\u002Fwiki\u002F2025-01-27-linux",{"title":125477,"description":66},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125488,"title":125489,"body":125490,"description":125494,"extension":67,"meta":125885,"navigation":69,"path":125886,"seo":125887,"stem":125888,"__hash__":125889},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125491,"toc":125883},[125492,125495,125499,125516,125519,125572,125576,125578,125618,125627,125631,125634,125875,125880],[14,125493,125494],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125496,125498],{"id":125497},"_1ubuntu环境配置","1.Ubuntu环境配置",[96,125500,125501,125504,125507,125510,125513],{},[99,125502,125503],{},"ubuntu环境换源",[99,125505,125506],{},"安装cuda",[99,125508,125509],{},"安装miniconda",[99,125511,125512],{},"安装pytorch",[99,125514,125515],{},"安装genesis",[14,125517,125518],{},"参考链接：",[133,125520,125522],{"className":23851,"code":125521,"language":23853,"meta":31,"style":31},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[139,125523,125524],{"__ignoreMap":31},[142,125525,125526,125529,125532,125535,125537,125540,125543,125545,125548,125551,125553,125556,125559,125561,125564,125567,125569],{"class":144,"line":145},[142,125527,125528],{"class":1991},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[142,125530,125531],{"class":257},"=blogdetail",[142,125533,125534],{"class":152},"&sharetype",[142,125536,198],{"class":148},[142,125538,125539],{"class":257},"blogdetail",[142,125541,125542],{"class":152},"&sharerId",[142,125544,198],{"class":148},[142,125546,125547],{"class":257},"144728092",[142,125549,125550],{"class":152},"&sharerefer",[142,125552,198],{"class":148},[142,125554,125555],{"class":257},"PC",[142,125557,125558],{"class":152},"&sharesource",[142,125560,198],{"class":148},[142,125562,125563],{"class":257},"qq_69379513",[142,125565,125566],{"class":152},"&sharefrom",[142,125568,198],{"class":148},[142,125570,125571],{"class":257},"from_link\n",[10,125573,125575],{"id":125574},"_2genesis-报错issue","2.Genesis 报错issue",[14,125577,125518],{},[133,125579,125580],{"className":23851,"code":125521,"language":23853,"meta":31,"style":31},[139,125581,125582],{"__ignoreMap":31},[142,125583,125584,125586,125588,125590,125592,125594,125596,125598,125600,125602,125604,125606,125608,125610,125612,125614,125616],{"class":144,"line":145},[142,125585,125528],{"class":1991},[142,125587,125531],{"class":257},[142,125589,125534],{"class":152},[142,125591,198],{"class":148},[142,125593,125539],{"class":257},[142,125595,125542],{"class":152},[142,125597,198],{"class":148},[142,125599,125547],{"class":257},[142,125601,125550],{"class":152},[142,125603,198],{"class":148},[142,125605,125555],{"class":257},[142,125607,125558],{"class":152},[142,125609,198],{"class":148},[142,125611,125563],{"class":257},[142,125613,125566],{"class":152},[142,125615,198],{"class":148},[142,125617,125571],{"class":257},[133,125619,125621],{"className":23851,"code":125620,"language":23853,"meta":31,"style":31},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[139,125622,125623],{"__ignoreMap":31},[142,125624,125625],{"class":144,"line":145},[142,125626,125620],{"class":1991},[10,125628,125630],{"id":125629},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125632,125633],{},"hello_robot.py",[133,125635,125637],{"className":30407,"code":125636,"language":30409,"meta":31,"style":31},"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",[139,125638,125639,125645,125660,125664,125676,125688,125692,125705,125709,125728,125738,125748,125762,125766,125770,125775,125779,125789,125796,125810,125817,125827,125832,125836,125854,125859,125863,125870],{"__ignoreMap":31},[142,125640,125641,125643],{"class":144,"line":145},[142,125642,30421],{"class":148},[142,125644,45334],{"class":152},[142,125646,125647,125650,125653,125655,125657],{"class":144,"line":64},[142,125648,125649],{"class":152},"os.environ[",[142,125651,125652],{"class":257},"'PYOPENGL_PLATFORM'",[142,125654,4471],{"class":152},[142,125656,198],{"class":148},[142,125658,125659],{"class":257}," 'glx'\n",[142,125661,125662],{"class":144,"line":1208},[142,125663,2428],{"emptyLinePlaceholder":69},[142,125665,125666,125668,125671,125673],{"class":144,"line":1223},[142,125667,30421],{"class":148},[142,125669,125670],{"class":152}," genesis ",[142,125672,31412],{"class":148},[142,125674,125675],{"class":152}," gs\n",[142,125677,125678,125680,125683,125685],{"class":144,"line":1229},[142,125679,30766],{"class":148},[142,125681,125682],{"class":152}," pynput ",[142,125684,30421],{"class":148},[142,125686,125687],{"class":152}," keyboard\n",[142,125689,125690],{"class":144,"line":1243},[142,125691,2428],{"emptyLinePlaceholder":69},[142,125693,125694,125697,125700,125702],{"class":144,"line":1249},[142,125695,125696],{"class":152},"gs.init(",[142,125698,125699],{"class":5245},"backend",[142,125701,198],{"class":148},[142,125703,125704],{"class":152},"gs.gpu)\n",[142,125706,125707],{"class":144,"line":1340},[142,125708,2428],{"emptyLinePlaceholder":69},[142,125710,125711,125714,125716,125719,125722,125724,125726],{"class":144,"line":1346},[142,125712,125713],{"class":152},"scene ",[142,125715,198],{"class":148},[142,125717,125718],{"class":152}," gs.Scene(",[142,125720,125721],{"class":5245},"show_viewer",[142,125723,198],{"class":148},[142,125725,31505],{"class":201},[142,125727,159],{"class":152},[142,125729,125730,125733,125735],{"class":144,"line":1358},[142,125731,125732],{"class":152},"plane ",[142,125734,198],{"class":148},[142,125736,125737],{"class":152}," scene.add_entity(gs.morphs.Plane())\n",[142,125739,125740,125743,125745],{"class":144,"line":1640},[142,125741,125742],{"class":152},"franka ",[142,125744,198],{"class":148},[142,125746,125747],{"class":152}," scene.add_entity(\n",[142,125749,125750,125753,125755,125757,125760],{"class":144,"line":1645},[142,125751,125752],{"class":152},"    gs.morphs.MJCF(",[142,125754,45383],{"class":5245},[142,125756,198],{"class":148},[142,125758,125759],{"class":257},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[142,125761,38076],{"class":152},[142,125763,125764],{"class":144,"line":1651},[142,125765,159],{"class":152},[142,125767,125768],{"class":144,"line":1656},[142,125769,2428],{"emptyLinePlaceholder":69},[142,125771,125772],{"class":144,"line":1670},[142,125773,125774],{"class":152},"scene.build()\n",[142,125776,125777],{"class":144,"line":1675},[142,125778,2428],{"emptyLinePlaceholder":69},[142,125780,125781,125783,125786],{"class":144,"line":1681},[142,125782,31976],{"class":148},[142,125784,125785],{"class":1991}," on_press",[142,125787,125788],{"class":152},"(key):\n",[142,125790,125791,125794],{"class":144,"line":1702},[142,125792,125793],{"class":148},"    try",[142,125795,3767],{"class":152},[142,125797,125798,125800,125803,125805,125808],{"class":144,"line":1707},[142,125799,2525],{"class":148},[142,125801,125802],{"class":152}," key.char ",[142,125804,2977],{"class":148},[142,125806,125807],{"class":257}," 'q'",[142,125809,3767],{"class":152},[142,125811,125812,125814],{"class":144,"line":1721},[142,125813,15761],{"class":148},[142,125815,125816],{"class":201}," False\n",[142,125818,125819,125822,125825],{"class":144,"line":1726},[142,125820,125821],{"class":148},"    except",[142,125823,125824],{"class":201}," AttributeError",[142,125826,3767],{"class":152},[142,125828,125829],{"class":144,"line":1755},[142,125830,125831],{"class":148},"        pass\n",[142,125833,125834],{"class":144,"line":1760},[142,125835,2428],{"emptyLinePlaceholder":69},[142,125837,125838,125841,125843,125846,125849,125851],{"class":144,"line":1777},[142,125839,125840],{"class":152},"listener ",[142,125842,198],{"class":148},[142,125844,125845],{"class":152}," keyboard.Listener(",[142,125847,125848],{"class":5245},"on_press",[142,125850,198],{"class":148},[142,125852,125853],{"class":152},"on_press)\n",[142,125855,125856],{"class":144,"line":1782},[142,125857,125858],{"class":152},"listener.start()\n",[142,125860,125861],{"class":144,"line":1787},[142,125862,2428],{"emptyLinePlaceholder":69},[142,125864,125865,125867],{"class":144,"line":1792},[142,125866,108672],{"class":148},[142,125868,125869],{"class":152}," listener.running:\n",[142,125871,125872],{"class":144,"line":1806},[142,125873,125874],{"class":152},"    scene.step()\n",[14,125876,125877],{},[29,125878],{"alt":31,"src":125879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5155,125881,125882],{},"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":31,"searchDepth":64,"depth":64,"links":125884},[],{"category":23407},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125489,"description":125494},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125891,"title":125892,"body":125893,"description":66,"extension":67,"meta":125908,"navigation":69,"path":125909,"seo":125910,"stem":125911,"__hash__":125912},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125894,"toc":125905},[125895,125898,125902],[10,125896,125892],{"id":125897},"_1-基础知识",[84,125899,125901],{"id":125900},"_11-js的组成","1.1 js的组成",[14,125903,125904],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":31,"searchDepth":64,"depth":64,"links":125906},[125907],{"id":125900,"depth":64,"text":125901},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125892,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125914,"title":125915,"body":125916,"description":66,"extension":67,"meta":126055,"navigation":69,"path":126056,"seo":126057,"stem":126058,"__hash__":126059},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125917,"toc":126043},[125918,125921,125925,125928,125932,125942,125946,125949,125952,125955,125959,125966,125972,125976,125982,125993,125997,126000,126004,126007,126011,126014,126018,126021,126025,126028,126031,126034,126037,126040],[10,125919,125915],{"id":125920},"_2-vscode必备内容",[84,125922,125924],{"id":125923},"_21-标签分类","2.1 标签分类",[14,125926,125927],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[84,125929,125931],{"id":125930},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125933,125934,125935,125937,125938,125941],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[139,125936,379],{}," 然后按 ",[139,125939,125940],{},"Tab","，快速自动生成基本结构。",[84,125943,125945],{"id":125944},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125947,125948],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125950,125951],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125953,125954],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[84,125956,125958],{"id":125957},"_24-视图缩放","2.4 视图缩放",[14,125960,125961,125962,125965],{},"缩放视图 ",[139,125963,125964],{},"ctrl+"," 可实现代码增大。",[14,125967,125968,125971],{},[139,125969,125970],{},"ctrl-"," 可实现代码减小。",[84,125973,125975],{"id":125974},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,125977,125978,125979,28414],{},"VSCode 新建文件快捷键为 ",[139,125980,125981],{},"ctrl+N",[14,125983,125984,125985,125988,125989,125992],{},"保存快捷键为 ",[139,125986,125987],{},"ctrl+S","，将文本保存为 ",[139,125990,125991],{},".html"," 文件。",[84,125994,125996],{"id":125995},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,125998,125999],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[84,126001,126003],{"id":126002},"_27-vscode-icons","2.7 vscode-icons",[14,126005,126006],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[84,126008,126010],{"id":126009},"_28-easy-less","2.8 Easy LESS",[14,126012,126013],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[84,126015,126017],{"id":126016},"_29-会了吧插件","2.9 会了吧插件",[14,126019,126020],{},"会了吧插件可以展示代码中英语单词的意思。",[84,126022,126024],{"id":126023},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126026,126027],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126029,126030],{},"②选定多个相同的单词:ctrl+D",[14,126032,126033],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126035,126036],{},"④全局替换某些单词:ctrl+h",[14,126038,126039],{},"⑤快速定位到某一行:ctrl+g",[14,126041,126042],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":31,"searchDepth":64,"depth":64,"links":126044},[126045,126046,126047,126048,126049,126050,126051,126052,126053,126054],{"id":125923,"depth":64,"text":125924},{"id":125930,"depth":64,"text":125931},{"id":125944,"depth":64,"text":125945},{"id":125957,"depth":64,"text":125958},{"id":125974,"depth":64,"text":125975},{"id":125995,"depth":64,"text":125996},{"id":126002,"depth":64,"text":126003},{"id":126009,"depth":64,"text":126010},{"id":126016,"depth":64,"text":126017},{"id":126023,"depth":64,"text":126024},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125915,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126061,"title":126062,"body":126063,"description":66,"extension":67,"meta":126222,"navigation":69,"path":126223,"seo":126224,"stem":126225,"__hash__":126226},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126064,"toc":126214},[126065,126068,126072,126082,126088,126094,126098,126107,126111,126116,126119,126122,126126,126129,126139,126148,126157,126166,126176,126183,126188,126193,126206],[10,126066,126062],{"id":126067},"_3-html文本与容器标签",[84,126069,126071],{"id":126070},"_31-标题标签","3.1 标题标签",[14,126073,126074,126077,126078,126081],{},[139,126075,126076],{},"\u003Ch1>","我是一级标签",[139,126079,126080],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126083,126084,126077,126086],{},[139,126085,126076],{},[139,126087,126080],{},[14,126089,123344,126090,126093],{},[139,126091,126092],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[84,126095,126097],{"id":126096},"_32-段落标签","3.2 段落标签",[14,126099,126100,126103,126104],{},[139,126101,126102],{},"\u003Cp>","....",[139,126105,126106],{},"\u003C\u002Fp>",[84,126108,126110],{"id":126109},"_33-换行标签","3.3 换行标签",[14,126112,126113],{},[139,126114,126115],{},"\u003Cbr \u002F>",[14,126117,126118],{},"具有强制换行的作用",[14,126120,126121],{},"单标签",[84,126123,126125],{"id":126124},"_34-文本格式化标签","3.4 文本格式化标签",[14,126127,126128],{},"提供粗体、斜体和下划线等效果",[14,126130,126131,126132,82568,126135,126138],{},"加粗：",[139,126133,126134],{},"\u003Cstrong>...\u003C\u002Fstrong>",[139,126136,126137],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126140,126141,126142,82568,126145,126138],{},"斜体：",[139,126143,126144],{},"\u003Cem>...\u003C\u002Fem>",[139,126146,126147],{},"\u003Ci>...\u003C\u002Fi>",[14,126149,126150,126151,82568,126154,126138],{},"删除线：",[139,126152,126153],{},"\u003Cdel>...\u003C\u002Fdel>",[139,126155,126156],{},"\u003Cs>...\u003C\u002Fs>",[14,126158,126159,126160,82568,126163,126138],{},"下划线：",[139,126161,126162],{},"\u003Cins>...\u003C\u002Fins>",[139,126164,126165],{},"\u003Cu>...\u003C\u002Fu>",[84,126167,126169,126170,18439,126173,102702],{"id":126168},"_35-div和span标签","3.5 ",[139,126171,126172],{},"\u003Cdiv>",[139,126174,126175],{},"\u003Cspan>",[14,126177,126178,101027,126180,126182],{},[139,126179,126172],{},[139,126181,126175],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126184,126185],{},[139,126186,126187],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126189,126190],{},[139,126191,126192],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126194,126195,126196,126198,126199,126201,126202,126205],{},"两者特点：①",[139,126197,126172],{}," 标签用来布局，但一行通常只放一个 ",[139,126200,126172],{},"。可以理解为一个大盒子，独占一行，在 ",[139,126203,126204],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126207,77278,126208,126210,126211,126213],{},[139,126209,126175],{}," 标签也可用于布局，一行可以放多个 ",[139,126212,126175],{},"，可理解为小盒子。",{"title":31,"searchDepth":64,"depth":64,"links":126215},[126216,126217,126218,126219,126220],{"id":126070,"depth":64,"text":126071},{"id":126096,"depth":64,"text":126097},{"id":126109,"depth":64,"text":126110},{"id":126124,"depth":64,"text":126125},{"id":126168,"depth":64,"text":126221},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126062,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126228,"title":126229,"body":126230,"description":66,"extension":67,"meta":126427,"navigation":69,"path":126428,"seo":126429,"stem":126430,"__hash__":126431},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126231,"toc":126419},[126232,126235,126239,126242,126248,126255,126261,126267,126270,126273,126276,126279,126282,126285,126288,126292,126295,126298,126301,126307,126313,126319,126326,126330,126336,126342,126345,126348,126354,126360,126366,126369,126372,126376,126379,126389,126395,126399,126408,126412,126415],[10,126233,126229],{"id":126234},"_4-html图像与链接",[84,126236,126238],{"id":126237},"_41-图像标签","4.1 图像标签",[14,126240,126241],{},"（1）标签",[14,126243,126244,126247],{},[139,126245,126246],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126249,126250,126251,126254],{},"src是",[139,126252,126253],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126256,126257,126258],{},"alt:文本，替换文本。图像不能显示的文字 ",[139,126259,126260],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126262,126263,126264],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[139,126265,126266],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126268,126269],{},"width:像素，设置图像的宽度",[14,126271,126272],{},"height:像素，设置图像的高度",[14,126274,126275],{},"border：像素，设置图像的边框粗细",[14,126277,126278],{},"（2）图像标签属性的注意点：",[14,126280,126281],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126283,126284],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126286,126287],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[84,126289,126291],{"id":126290},"_42-路径注意要点","4.2 路径注意要点：",[14,126293,126294],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126296,126297],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126299,126300],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126302,126303,126304],{},"①同一级路径：图像文件位于HTML文件同一级，如",[139,126305,126306],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126308,126309,126310],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[139,126311,126312],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126314,126315,126316],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[139,126317,126318],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126320,126321,126322,404],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[391,126323,126324],{"href":126324,"rel":126325},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23894],[84,126327,126329],{"id":126328},"_43-超链接标签","4.3 超链接标签",[14,126331,126332,126335],{},[139,126333,126334],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126337,126338,126339],{},"①语法格式：",[139,126340,126341],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126343,126344],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126346,126347],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126349,126350,126351],{},"③链接分类：外部链接：",[139,126352,126353],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126355,126356,126357],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[139,126358,126359],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126361,126362,126363],{},"空链接：如果当时没有确定链接目标时，",[139,126364,126365],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126367,126368],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126370,126371],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[84,126373,126375],{"id":126374},"_44-锚点链接","4.4 锚点链接",[14,126377,126378],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126380,126381,126382,126385,126386],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[139,126383,126384],{},"\u003Ca href=\"#two\">","第二级",[139,126387,126388],{},"\u003C\u002Fa>",[14,126390,126391,126392],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[139,126393,126394],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[84,126396,126398],{"id":126397},"_45-注释标签","4.5 注释标签",[14,126400,126401,126404,126405],{},[139,126402,126403],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[139,126406,126407],{},"ctrl+\u002F",[84,126409,126411],{"id":126410},"_46-特殊字符","4.6 特殊字符",[14,126413,126414],{},"可以实现添加多个空格",[29,126416],{"style":126417,"src":126418},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":31,"searchDepth":64,"depth":64,"links":126420},[126421,126422,126423,126424,126425,126426],{"id":126237,"depth":64,"text":126238},{"id":126290,"depth":64,"text":126291},{"id":126328,"depth":64,"text":126329},{"id":126374,"depth":64,"text":126375},{"id":126397,"depth":64,"text":126398},{"id":126410,"depth":64,"text":126411},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126229,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126433,"title":126434,"body":126435,"description":66,"extension":67,"meta":126728,"navigation":69,"path":126729,"seo":126730,"stem":126731,"__hash__":126732},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126436,"toc":126719},[126437,126440,126444,126447,126450,126453,126456,126459,126462,126465,126468,126471,126491,126497,126501,126504,126507,126510,126513,126516,126519,126523,126526,126529,126532,126535,126548,126553,126556,126559,126574,126577,126580,126583,126586,126589,126593,126596,126603,126606,126609,126612,126615,126618,126624,126627,126630,126636,126639,126642,126645,126651,126654,126657,126671,126678,126681,126684,126691,126700,126703,126706,126709,126713,126716],[10,126438,126434],{"id":126439},"_5-html表格列表与表单",[84,126441,126443],{"id":126442},"_51-表格标签","5.1 表格标签",[14,126445,126446],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126448,126449],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126451,126452],{},"②表格基本语法：",[29,126454],{"style":126417,"src":126455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126457,126458],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[29,126460],{"style":126417,"src":126461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126463,126464],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[29,126466],{"style":126417,"src":126467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126469,126470],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126472,126473,126476,126477,126479,126480,126483,126484,126486,126487,126490],{},[139,126474,126475],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[139,126478,126475],{},"内部必须拥有",[139,126481,126482],{},"\u003Ctr>","标签，一般位于第一行，",[139,126485,126475],{},"比",[139,126488,126489],{},"\u003Cth>","范围广",[14,126492,126493,126496],{},[139,126494,126495],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[84,126498,126500],{"id":126499},"_52-合并单元格","5.2 合并单元格",[14,126502,126503],{},"（1）合并单元格方式：",[14,126505,126506],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126508,126509],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126511,126512],{},"（2）目标单元格：",[14,126514,126515],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126517,126518],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[84,126520,126522],{"id":126521},"_53-列表标签","5.3 列表标签",[14,126524,126525],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126527,126528],{},"①无序列表：",[29,126530],{"style":126417,"src":126531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126533,126534],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126536,126537,126540,126541,126544,126545,126547],{},[139,126538,126539],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[139,126542,126543],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[139,126546,126539],{},"中输入其他标签或文字是不对的",[14,126549,126550,126552],{},[139,126551,126543],{},"之间相当于一个容器，可以容纳所有元素",[14,126554,126555],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126557,126558],{},"在css中去除前边的小圆点采用如下代码:",[133,126560,126564],{"className":126561,"code":126562,"language":126563,"meta":31,"style":31},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[139,126565,126566],{"__ignoreMap":31},[142,126567,126568,126571],{"class":144,"line":145},[142,126569,126570],{"class":51329},"list-style",[142,126572,126573],{"class":152},": none;\n",[14,126575,126576],{},"②有序列表：",[29,126578],{"style":126417,"src":126579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126581,126582],{},"③自定义列表：",[29,126584],{"style":126417,"src":126585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[29,126587],{"style":126417,"src":126588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[84,126590,126592],{"id":126591},"_54-表单标签","5.4 表单标签",[14,126594,126595],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126597,126598,126599,126602],{},"（1）表单域：包含单元素的区域，",[139,126600,126601],{},"\u003Cform>","标签可以实现信息的收集和传递。",[29,126604],{"style":126417,"src":126605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126607,126608],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126610,126611],{},"表单元素提交必须有name属性",[14,126613,126614],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126616,126617],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126619,77255,126620,126623],{},[139,126621,126622],{},"\u003Cinput>","输入表单元素",[29,126625],{"style":126417,"src":126626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[29,126628],{"style":126417,"src":126629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126631,126632,126633],{},"单选按钮：",[139,126634,126635],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[29,126637],{"style":126417,"src":126638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126640,126641],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[29,126643],{"style":126417,"src":126644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126646,126647,126650],{},[302,126648,126649],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126652,126653],{},"②select下拉表单元素：可以节约页面控件",[29,126655],{"style":126417,"src":126656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126658,126659,13824,126661,126664,126665,126667,126668,126670],{},[302,126660,182],{},[139,126662,126663],{},"\u003Cselect>","中至少包含一对",[139,126666,102723],{},"；在",[139,126669,102723],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126672,126673,126674,126677],{},"③",[139,126675,126676],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[29,126679],{"style":126417,"src":126680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126682,126683],{},"3行20列",[84,126685,126687,126688,102702],{"id":126686},"_55-lable标签","5.5 ",[139,126689,126690],{},"\u003Clable>",[14,126692,126693,126694,126696,126697,126699],{},"它不是表单标签，但常常与表单标签搭配使用，",[139,126695,126690],{},"标签用于绑定一个表单标签，当点击",[139,126698,126690],{},"标签内的文本",[14,126701,126702],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[29,126704],{"style":126417,"src":126705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[29,126707],{"style":126417,"src":126708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[84,126710,126712],{"id":126711},"_56-实例","5.6 实例",[29,126714],{"style":126417,"src":126715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5155,126717,126718],{},"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":31,"searchDepth":64,"depth":64,"links":126720},[126721,126722,126723,126724,126725,126727],{"id":126442,"depth":64,"text":126443},{"id":126499,"depth":64,"text":126500},{"id":126521,"depth":64,"text":126522},{"id":126591,"depth":64,"text":126592},{"id":126686,"depth":64,"text":126726},"5.5 \u003Clable>标签",{"id":126711,"depth":64,"text":126712},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126434,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126734,"title":126735,"body":126736,"description":66,"extension":67,"meta":127285,"navigation":69,"path":127286,"seo":127287,"stem":127288,"__hash__":127289},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126737,"toc":127260},[126738,126741,126745,126748,126751,126755,126758,126761,126764,126767,126770,126773,126776,126780,126783,126787,126790,126793,126796,126800,126803,126806,126809,126815,126818,126821,126824,126827,126830,126833,126836,126869,126873,126876,126879,126882,126886,126889,126892,126895,126898,126901,126905,126908,126911,126914,126918,126921,126925,126928,126932,126935,126940,126944,126947,126951,126954,126957,126960,126963,126990,126993,126997,127000,127003,127008,127011,127014,127018,127021,127026,127029,127032,127035,127039,127042,127045,127048,127052,127055,127058,127061,127065,127069,127072,127112,127115,127119,127126,127129,127133,127136,127182,127186,127189,127192,127195,127223,127227,127230,127257],[10,126739,126735],{"id":126740},"_6-css语法与文本样式",[84,126742,126744],{"id":126743},"_61-css语法规范","6.1 css语法规范",[14,126746,126747],{},"由两部分组成，选择器及一条或多条声明",[29,126749],{"style":126417,"src":126750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126752,126753],{},[302,126754,182],{},[14,126756,126757],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126759,126760],{},"②属性与属性值以“键值对”的形式出现",[14,126762,126763],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126765,126766],{},"④属性和属性值之间用英文“;”分开",[29,126768],{"style":126417,"src":126769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[29,126771],{"style":126417,"src":126772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[29,126774],{"style":126417,"src":126775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[84,126777,126779],{"id":126778},"_62-css选择器","6.2 css选择器",[14,126781,126782],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[113,126784,126786],{"id":126785},"_621-标签选择器","6.2.1 标签选择器",[14,126788,126789],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126791,126792],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[29,126794],{"style":126417,"src":126795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[113,126797,126799],{"id":126798},"_622-类选择器","6.2.2 类选择器",[14,126801,126802],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126804,126805],{},"②样例",[29,126807],{"style":126417,"src":126808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126810,126811,126812,126814],{},"③ ",[302,126813,126649],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126816,126817],{},"可以理解为给这个标签起了个名字，来表示；",[14,126819,126820],{},"长名称或词组可以使用横线来为选择器命名；",[14,126822,126823],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126825,126826],{},"命名要有意义；",[29,126828],{"style":126417,"src":126829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126831,126832],{},"类选择器也可以指定特殊的元素p.center{}",[14,126834,126835],{},"p.center和.center都对",[133,126837,126839],{"className":126561,"code":126838,"language":126563,"meta":31,"style":31},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[139,126840,126841,126846,126855,126865],{"__ignoreMap":31},[142,126842,126843],{"class":144,"line":145},[142,126844,126845],{"class":211},"\u002F* 类选择器指定特殊元素 *\u002F\n",[142,126847,126848,126850,126853],{"class":144,"line":64},[142,126849,14],{"class":51329},[142,126851,126852],{"class":1991},".center",[142,126854,15601],{"class":152},[142,126856,126857,126859,126861,126863],{"class":144,"line":1208},[142,126858,70555],{"class":201},[142,126860,51466],{"class":152},[142,126862,51621],{"class":201},[142,126864,1319],{"class":152},[142,126866,126867],{"class":144,"line":1223},[142,126868,1593],{"class":152},[113,126870,126872],{"id":126871},"_623-多类名使用","6.2.3 多类名使用",[14,126874,126875],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[29,126877],{"style":126417,"src":126878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126880,126881],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[113,126883,126885],{"id":126884},"_624-id选择器","6.2.4 id选择器",[14,126887,126888],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126890,126891],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[29,126893],{"style":126417,"src":126894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126896,126897],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126899,126900],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[113,126902,126904],{"id":126903},"_625-通配符选择器","6.2.5 通配符选择器",[14,126906,126907],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126909,126910],{},"* {",[14,126912,126913],{},"color=\"red\"}",[113,126915,126917],{"id":126916},"_626-总结","6.2.6 总结",[29,126919],{"style":126417,"src":126920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[84,126922,126924],{"id":126923},"_63-css字体属性","6.3 css字体属性",[14,126926,126927],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[113,126929,126931],{"id":126930},"_631-字体系列","6.3.1 字体系列",[14,126933,126934],{},"font-family: '宋体';",[14,126936,126937,126939],{},[302,126938,182],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[113,126941,126943],{"id":126942},"_632-字体大小","6.3.2 字体大小",[14,126945,126946],{},"font-size: 20px",[14,126948,126949,26502],{},[302,126950,126649],{},[14,126952,126953],{},"①px（像素）大小是网页的最常用单位",[14,126955,126956],{},"②谷歌浏览器默认为16px",[14,126958,126959],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126961,126962],{},"④可以给body指定整个页面的大小：会自动引用",[133,126964,126966],{"className":126561,"code":126965,"language":126563,"meta":31,"style":31},"body {\n  font-size: 16px;\n}\n",[139,126967,126968,126974,126986],{"__ignoreMap":31},[142,126969,126970,126972],{"class":144,"line":145},[142,126971,51829],{"class":51329},[142,126973,15601],{"class":152},[142,126975,126976,126978,126980,126982,126984],{"class":144,"line":64},[142,126977,70655],{"class":201},[142,126979,51466],{"class":152},[142,126981,754],{"class":201},[142,126983,51521],{"class":148},[142,126985,1319],{"class":152},[142,126987,126988],{"class":144,"line":1208},[142,126989,1593],{"class":152},[14,126991,126992],{},"⑤标题标签比较特殊，需要单独指定大小",[113,126994,126996],{"id":126995},"_633-字体粗细","6.3.3 字体粗细",[14,126998,126999],{},"font-weight: bold;",[14,127001,127002],{},"font-weight: 100；",[14,127004,127005,127007],{},[302,127006,182],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127009,127010],{},"font-weight= 400;",[14,127012,127013],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[113,127015,127017],{"id":127016},"_634-文字样式","6.3.4 文字样式",[14,127019,127020],{},"font-style: normal；",[14,127022,127023,26502],{},[302,127024,127025],{},"属性值",[14,127027,127028],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127030,127031],{},"②italic：浏览器会显示斜体的字体样式",[29,127033],{"style":126417,"src":127034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[113,127036,127038],{"id":127037},"_635-字体符合属性","6.3.5 字体符合属性",[29,127040],{"style":126417,"src":127041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[29,127043],{"style":126417,"src":127044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127046,127047],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127049,127050,26502],{},[302,127051,126649],{},[14,127053,127054],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127056,127057],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127059,127060],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[84,127062,127064],{"id":127063},"_64-css-test文本属性","6.4 css test文本属性",[113,127066,127068],{"id":127067},"_641-文本颜色","6.4.1 文本颜色",[14,127070,127071],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[133,127073,127075],{"className":126561,"code":127074,"language":126563,"meta":31,"style":31},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[139,127076,127077,127082,127088,127098,127103,127108],{"__ignoreMap":31},[142,127078,127079],{"class":144,"line":145},[142,127080,127081],{"class":211},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[142,127083,127084,127086],{"class":144,"line":64},[142,127085,14],{"class":51329},[142,127087,15601],{"class":152},[142,127089,127090,127092,127094,127096],{"class":144,"line":1208},[142,127091,70934],{"class":201},[142,127093,51466],{"class":152},[142,127095,57450],{"class":201},[142,127097,1319],{"class":152},[142,127099,127100],{"class":144,"line":1223},[142,127101,127102],{"class":211},"  \u002F* color: #ff0000; *\u002F\n",[142,127104,127105],{"class":144,"line":1229},[142,127106,127107],{"class":211},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[142,127109,127110],{"class":144,"line":1243},[142,127111,1593],{"class":152},[29,127113],{"style":126417,"src":127114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[113,127116,127118],{"id":127117},"_642-对齐文本","6.4.2 对齐文本",[14,127120,127121,127122,127125],{},"text-align属于用于设置元素内文本内容的 ",[302,127123,127124],{},"水平对齐"," 方式",[14,127127,127128],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[113,127130,127132],{"id":127131},"_643-装饰文本","6.4.3 装饰文本",[14,127134,127135],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[133,127137,127139],{"className":126561,"code":127138,"language":126563,"meta":31,"style":31},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[139,127140,127141,127147,127157,127161,127167,127178],{"__ignoreMap":31},[142,127142,127143,127145],{"class":144,"line":145},[142,127144,391],{"class":51329},[142,127146,15601],{"class":152},[142,127148,127149,127151,127153,127155],{"class":144,"line":64},[142,127150,70531],{"class":201},[142,127152,51466],{"class":152},[142,127154,54766],{"class":201},[142,127156,1319],{"class":152},[142,127158,127159],{"class":144,"line":1208},[142,127160,1593],{"class":152},[142,127162,127163,127165],{"class":144,"line":1223},[142,127164,14],{"class":51329},[142,127166,15601],{"class":152},[142,127168,127169,127171,127173,127176],{"class":144,"line":1229},[142,127170,70531],{"class":201},[142,127172,51466],{"class":152},[142,127174,127175],{"class":201},"underline",[142,127177,1319],{"class":152},[142,127179,127180],{"class":144,"line":1243},[142,127181,1593],{"class":152},[113,127183,127185],{"id":127184},"_644-文本缩进","6.4.4 文本缩进",[14,127187,127188],{},"实现文本的第一行首行缩进自己指定的距离",[14,127190,127191],{},"20px往右边走；-20px往左边走",[14,127193,127194],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[133,127196,127198],{"className":126561,"code":127197,"language":126563,"meta":31,"style":31},"p {\n  text-indent: 2em;\n}\n",[139,127199,127200,127206,127219],{"__ignoreMap":31},[142,127201,127202,127204],{"class":144,"line":145},[142,127203,14],{"class":51329},[142,127205,15601],{"class":152},[142,127207,127208,127211,127213,127215,127217],{"class":144,"line":64},[142,127209,127210],{"class":201},"  text-indent",[142,127212,51466],{"class":152},[142,127214,230],{"class":201},[142,127216,23582],{"class":148},[142,127218,1319],{"class":152},[142,127220,127221],{"class":144,"line":1208},[142,127222,1593],{"class":152},[113,127224,127226],{"id":127225},"_645-行间距","6.4.5 行间距",[14,127228,127229],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[133,127231,127233],{"className":126561,"code":127232,"language":126563,"meta":31,"style":31},"p {\n  line-height: 1.6;\n}\n",[139,127234,127235,127241,127253],{"__ignoreMap":31},[142,127236,127237,127239],{"class":144,"line":145},[142,127238,14],{"class":51329},[142,127240,15601],{"class":152},[142,127242,127243,127246,127248,127251],{"class":144,"line":64},[142,127244,127245],{"class":201},"  line-height",[142,127247,51466],{"class":152},[142,127249,127250],{"class":201},"1.6",[142,127252,1319],{"class":152},[142,127254,127255],{"class":144,"line":1208},[142,127256,1593],{"class":152},[5155,127258,127259],{},"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":31,"searchDepth":64,"depth":64,"links":127261},[127262,127263,127271,127278],{"id":126743,"depth":64,"text":126744},{"id":126778,"depth":64,"text":126779,"children":127264},[127265,127266,127267,127268,127269,127270],{"id":126785,"depth":1208,"text":126786},{"id":126798,"depth":1208,"text":126799},{"id":126871,"depth":1208,"text":126872},{"id":126884,"depth":1208,"text":126885},{"id":126903,"depth":1208,"text":126904},{"id":126916,"depth":1208,"text":126917},{"id":126923,"depth":64,"text":126924,"children":127272},[127273,127274,127275,127276,127277],{"id":126930,"depth":1208,"text":126931},{"id":126942,"depth":1208,"text":126943},{"id":126995,"depth":1208,"text":126996},{"id":127016,"depth":1208,"text":127017},{"id":127037,"depth":1208,"text":127038},{"id":127063,"depth":64,"text":127064,"children":127279},[127280,127281,127282,127283,127284],{"id":127067,"depth":1208,"text":127068},{"id":127117,"depth":1208,"text":127118},{"id":127131,"depth":1208,"text":127132},{"id":127184,"depth":1208,"text":127185},{"id":127225,"depth":1208,"text":127226},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126735,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127291,"title":127292,"body":127293,"description":66,"extension":67,"meta":127942,"navigation":69,"path":127943,"seo":127944,"stem":127945,"__hash__":127946},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127294,"toc":127923},[127295,127298,127302,127306,127366,127370,127380,127383,127386,127390,127415,127419,127422,127425,127428,127431,127434,127438,127441,127444,127486,127489,127515,127521,127524,127528,127532,127538,127541,127544,127547,127550,127553,127556,127601,127605,127608,127611,127615,127619,127648,127651,127656,127659,127662,127665,127668,127672,127676,127679,127681,127684,127688,127691,127695,127698,127701,127704,127708,127712,127718,127728,127731,127734,127737,127740,127743,127866,127874,127882,127920],[10,127296,127292],{"id":127297},"_7-css引入方式与选择器进阶",[84,127299,127301],{"id":127300},"_71-css引入方式","7.1 css引入方式",[113,127303,127305],{"id":127304},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[133,127307,127311],{"className":127308,"code":127309,"language":127310,"meta":31,"style":31},"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",[139,127312,127313,127321,127328,127340,127353,127358],{"__ignoreMap":31},[142,127314,127315,127317,127319],{"class":144,"line":145},[142,127316,1063],{"class":152},[142,127318,5155],{"class":51329},[142,127320,51336],{"class":152},[142,127322,127323,127326],{"class":144,"line":64},[142,127324,127325],{"class":51329},"  h1",[142,127327,15601],{"class":152},[142,127329,127330,127333,127335,127338],{"class":144,"line":1208},[142,127331,127332],{"class":201},"    color",[142,127334,51466],{"class":152},[142,127336,127337],{"class":201},"blue",[142,127339,1319],{"class":152},[142,127341,127342,127345,127347,127349,127351],{"class":144,"line":1223},[142,127343,127344],{"class":201},"    font-size",[142,127346,51466],{"class":152},[142,127348,953],{"class":201},[142,127350,51521],{"class":148},[142,127352,1319],{"class":152},[142,127354,127355],{"class":144,"line":1229},[142,127356,127357],{"class":152},"  }\n",[142,127359,127360,127362,127364],{"class":144,"line":1243},[142,127361,51814],{"class":152},[142,127363,5155],{"class":51329},[142,127365,51336],{"class":152},[14,127367,127368,26502],{},[302,127369,126649],{},[14,127371,77255,127372,127375,127376,127379],{},[139,127373,127374],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[139,127377,127378],{},"\u003Chead>","标签中",[14,127381,127382],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127384,127385],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[113,127387,127389],{"id":127388},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[133,127391,127393],{"className":127308,"code":127392,"language":127310,"meta":31,"style":31},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[139,127394,127395],{"__ignoreMap":31},[142,127396,127397,127399,127401,127403,127405,127408,127411,127413],{"class":144,"line":145},[142,127398,1063],{"class":152},[142,127400,14],{"class":51329},[142,127402,62655],{"class":1991},[142,127404,198],{"class":152},[142,127406,127407],{"class":257},"\"color: red; font-size: 16px;\"",[142,127409,127410],{"class":152},">这是一个段落\u003C\u002F",[142,127412,14],{"class":51329},[142,127414,51336],{"class":152},[14,127416,127417,26502],{},[302,127418,126649],{},[14,127420,127421],{},"①style其实就是标签的属性",[14,127423,127424],{},"②在双引号中间，写法要符合css规范",[14,127426,127427],{},"③可以控制当前的标签设置样式",[14,127429,127430],{},"④书写繁琐，简单时才用",[14,127432,127433],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[113,127435,127437],{"id":127436},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127439,127440],{},"使用最多，单独建一个css文件，然后html引用",[14,127442,127443],{},"①css文件部分： style.css",[133,127445,127447],{"className":126561,"code":127446,"language":126563,"meta":31,"style":31},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[139,127448,127449,127454,127460,127470,127482],{"__ignoreMap":31},[142,127450,127451],{"class":144,"line":145},[142,127452,127453],{"class":211},"\u002F* style.css *\u002F\n",[142,127455,127456,127458],{"class":144,"line":64},[142,127457,10],{"class":51329},[142,127459,15601],{"class":152},[142,127461,127462,127464,127466,127468],{"class":144,"line":1208},[142,127463,70934],{"class":201},[142,127465,51466],{"class":152},[142,127467,127337],{"class":201},[142,127469,1319],{"class":152},[142,127471,127472,127474,127476,127478,127480],{"class":144,"line":1223},[142,127473,70655],{"class":201},[142,127475,51466],{"class":152},[142,127477,953],{"class":201},[142,127479,51521],{"class":148},[142,127481,1319],{"class":152},[142,127483,127484],{"class":144,"line":1229},[142,127485,1593],{"class":152},[14,127487,127488],{},"②html部分",[133,127490,127492],{"className":127308,"code":127491,"language":127310,"meta":31,"style":31},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[139,127493,127494],{"__ignoreMap":31},[142,127495,127496,127498,127500,127502,127504,127506,127508,127510,127513],{"class":144,"line":145},[142,127497,1063],{"class":152},[142,127499,69034],{"class":51329},[142,127501,69037],{"class":1991},[142,127503,198],{"class":152},[142,127505,69042],{"class":257},[142,127507,61086],{"class":1991},[142,127509,198],{"class":152},[142,127511,127512],{"class":257},"\"style.css\"",[142,127514,51336],{"class":152},[14,127516,127517,127520],{},[139,127518,127519],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127522,127523],{},"ctrl+0回到页面原来大小",[84,127525,127527],{"id":127526},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[113,127529,127531],{"id":127530},"_721-快速生成html","7.2.1 快速生成html",[14,127533,127534,127535],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[139,127536,127537],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127539,127540],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127542,127543],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127545,127546],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127548,127549],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127551,127552],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127554,127555],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[133,127557,127559],{"className":127308,"code":127558,"language":127310,"meta":31,"style":31},"\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",[139,127560,127561,127566,127571,127576,127581,127586,127591,127596],{"__ignoreMap":31},[142,127562,127563],{"class":144,"line":145},[142,127564,127565],{"class":211},"\u003C!-- Emmet 语法示例 -->\n",[142,127567,127568],{"class":144,"line":64},[142,127569,127570],{"class":211},"\u003C!-- div*3        → 生成3个div -->\n",[142,127572,127573],{"class":144,"line":1208},[142,127574,127575],{"class":211},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[142,127577,127578],{"class":144,"line":1223},[142,127579,127580],{"class":211},"\u003C!-- div+p        → 兄弟div和p -->\n",[142,127582,127583],{"class":144,"line":1229},[142,127584,127585],{"class":211},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[142,127587,127588],{"class":144,"line":1243},[142,127589,127590],{"class":211},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[142,127592,127593],{"class":144,"line":1249},[142,127594,127595],{"class":211},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[142,127597,127598],{"class":144,"line":1340},[142,127599,127600],{"class":211},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[113,127602,127604],{"id":127603},"_722-快速生成css","7.2.2 快速生成css",[14,127606,127607],{},"简写开头",[14,127609,127610],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[84,127612,127614],{"id":127613},"_73-css复合选择器","7.3 css复合选择器",[113,127616,127618],{"id":127617},"_731-后代选择器","7.3.1 后代选择器",[133,127620,127622],{"className":126561,"code":127621,"language":126563,"meta":31,"style":31},".parent .child {\n  color: blue;\n}\n",[139,127623,127624,127634,127644],{"__ignoreMap":31},[142,127625,127626,127629,127632],{"class":144,"line":145},[142,127627,127628],{"class":1991},".parent",[142,127630,127631],{"class":1991}," .child",[142,127633,15601],{"class":152},[142,127635,127636,127638,127640,127642],{"class":144,"line":64},[142,127637,70934],{"class":201},[142,127639,51466],{"class":152},[142,127641,127337],{"class":201},[142,127643,1319],{"class":152},[142,127645,127646],{"class":144,"line":1208},[142,127647,1593],{"class":152},[14,127649,127650],{},"元素1 元素2 {样式声明}",[14,127652,127653],{},[302,127654,127655],{},"注意点:",[14,127657,127658],{},"①元素1和元素2中间用空格隔开",[14,127660,127661],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127663,127664],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127666,127667],{},"④元素1和元素2可以是任意基础选择器",[113,127669,127671],{"id":127670},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127673,127674],{},[302,127675,127655],{},[14,127677,127678],{},"①元素1和元素2中间用大于号隔开",[14,127680,127661],{},[14,127682,127683],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[113,127685,127687],{"id":127686},"_733-并集选择器","7.3.3 并集选择器",[14,127689,127690],{},"元素1，元素2 {样式声明}",[14,127692,127693],{},[302,127694,127655],{},[14,127696,127697],{},"①元素1和元素2中间用逗号隔开",[14,127699,127700],{},"②逗号可以理解为和的意思",[14,127702,127703],{},"③并集选择器通常用于集体声明",[113,127705,127707],{"id":127706},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127709,127710],{},[302,127711,127655],{},[14,127713,127714,127715,127717],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69034,127716],{},"－:visited－:hover－:active。",[14,127719,127720,127721,127724,127725,25769],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127722,127723],"hover",{}," 、 ",[127726,127727],"first-child",{},[14,127729,127730],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127732,127733],{},"link对没访问的进行设置",[14,127735,127736],{},"vistied对已访问的进行改变",[14,127738,127739],{},"hover鼠标经过就会变",[14,127741,127742],{},"active常按(点)就会变",[133,127744,127746],{"className":126561,"code":127745,"language":126563,"meta":31,"style":31},"\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",[139,127747,127748,127753,127762,127772,127782,127786,127795,127806,127810,127818,127828,127838,127842,127851,127862],{"__ignoreMap":31},[142,127749,127750],{"class":144,"line":145},[142,127751,127752],{"class":211},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[142,127754,127755,127757,127760],{"class":144,"line":64},[142,127756,391],{"class":51329},[142,127758,127759],{"class":1991},":link",[142,127761,15601],{"class":152},[142,127763,127764,127766,127768,127770],{"class":144,"line":1208},[142,127765,70934],{"class":201},[142,127767,51466],{"class":152},[142,127769,62398],{"class":201},[142,127771,1319],{"class":152},[142,127773,127774,127776,127778,127780],{"class":144,"line":1223},[142,127775,70531],{"class":201},[142,127777,51466],{"class":152},[142,127779,54766],{"class":201},[142,127781,1319],{"class":152},[142,127783,127784],{"class":144,"line":1229},[142,127785,1593],{"class":152},[142,127787,127788,127790,127793],{"class":144,"line":1243},[142,127789,391],{"class":51329},[142,127791,127792],{"class":1991},":visited",[142,127794,15601],{"class":152},[142,127796,127797,127799,127801,127804],{"class":144,"line":1249},[142,127798,70934],{"class":201},[142,127800,51466],{"class":152},[142,127802,127803],{"class":201},"purple",[142,127805,1319],{"class":152},[142,127807,127808],{"class":144,"line":1340},[142,127809,1593],{"class":152},[142,127811,127812,127814,127816],{"class":144,"line":1346},[142,127813,391],{"class":51329},[142,127815,60969],{"class":1991},[142,127817,15601],{"class":152},[142,127819,127820,127822,127824,127826],{"class":144,"line":1358},[142,127821,70934],{"class":201},[142,127823,51466],{"class":152},[142,127825,54918],{"class":201},[142,127827,1319],{"class":152},[142,127829,127830,127832,127834,127836],{"class":144,"line":1640},[142,127831,70531],{"class":201},[142,127833,51466],{"class":152},[142,127835,127175],{"class":201},[142,127837,1319],{"class":152},[142,127839,127840],{"class":144,"line":1645},[142,127841,1593],{"class":152},[142,127843,127844,127846,127849],{"class":144,"line":1651},[142,127845,391],{"class":51329},[142,127847,127848],{"class":1991},":active",[142,127850,15601],{"class":152},[142,127852,127853,127855,127857,127860],{"class":144,"line":1656},[142,127854,70934],{"class":201},[142,127856,51466],{"class":152},[142,127858,127859],{"class":201},"green",[142,127861,1319],{"class":152},[142,127863,127864],{"class":144,"line":1670},[142,127865,1593],{"class":152},[113,127867,127869,127870,127873],{"id":127868},"_735-伪类选择器","7.3.5 ",[127871,127872],"focus",{},"伪类选择器",[14,127875,127876,127878,127879,127881],{},[127871,127877],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[139,127880,126622],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[133,127883,127885],{"className":126561,"code":127884,"language":126563,"meta":31,"style":31},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[139,127886,127887,127895,127906,127916],{"__ignoreMap":31},[142,127888,127889,127891,127893],{"class":144,"line":145},[142,127890,53850],{"class":51329},[142,127892,61929],{"class":1991},[142,127894,15601],{"class":152},[142,127896,127897,127900,127902,127904],{"class":144,"line":64},[142,127898,127899],{"class":201},"  border-color",[142,127901,51466],{"class":152},[142,127903,54918],{"class":201},[142,127905,1319],{"class":152},[142,127907,127908,127910,127912,127914],{"class":144,"line":1208},[142,127909,70827],{"class":201},[142,127911,51466],{"class":152},[142,127913,54766],{"class":201},[142,127915,1319],{"class":152},[142,127917,127918],{"class":144,"line":1223},[142,127919,1593],{"class":152},[5155,127921,127922],{},"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":31,"searchDepth":64,"depth":64,"links":127924},[127925,127930,127934],{"id":127300,"depth":64,"text":127301,"children":127926},[127927,127928,127929],{"id":127304,"depth":1208,"text":127305},{"id":127388,"depth":1208,"text":127389},{"id":127436,"depth":1208,"text":127437},{"id":127526,"depth":64,"text":127527,"children":127931},[127932,127933],{"id":127530,"depth":1208,"text":127531},{"id":127603,"depth":1208,"text":127604},{"id":127613,"depth":64,"text":127614,"children":127935},[127936,127937,127938,127939,127940],{"id":127617,"depth":1208,"text":127618},{"id":127670,"depth":1208,"text":127671},{"id":127686,"depth":1208,"text":127687},{"id":127706,"depth":1208,"text":127707},{"id":127868,"depth":1208,"text":127941},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127292,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127948,"title":127949,"body":127950,"description":66,"extension":67,"meta":129873,"navigation":69,"path":129874,"seo":129875,"stem":129876,"__hash__":129877},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127951,"toc":129847},[127952,127955,127959,127968,127972,127998,128003,128006,128009,128012,128015,128019,128022,128032,128040,128044,128079,128084,128087,128090,128093,128096,128100,128103,128112,128116,128129,128134,128137,128140,128143,128147,128150,128154,128157,128212,128215,128246,128249,128303,128307,128310,128476,128599,128602,128605,128608,128611,128615,128618,128622,128625,128628,128632,128635,128666,128693,128721,128724,128728,128754,128797,128801,128895,128898,128925,128928,128931,128934,128937,128940,128943,128946,128949,128952,128956,129013,129040,129044,129092,129096,129137,129139,129142,129145,129148,129151,129155,129247,129250,129253,129256,129260,129383,129584,129588,129592,129595,129598,129601,129605,129608,129611,129636,129639,129642,129645,129648,129651,129655,129663,129725,129728,129786,129789,129792,129795,129798,129801,129804,129807,129844],[10,127953,127949],{"id":127954},"_8-css显示模式与背景特性",[84,127956,127958],{"id":127957},"_81-css元素显示模式","8.1 css元素显示模式",[14,127960,127961,127962,127964,127965,127967],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[139,127963,126172],{},"自己占一行，比如一行可以放多个",[139,127966,126175],{},"，HTML 元素一般分为块元素和行内元素两种类型",[113,127969,127971],{"id":127970},"_811-块元素","8.1.1 块元素",[14,127973,127974,127975,127977,127978,365,127981,365,127983,365,127985,365,127988,365,127991,127994,127995,127997],{},"常见的块元素有",[139,127976,126076],{},"~",[139,127979,127980],{},"\u003Ch6>",[139,127982,126102],{},[139,127984,126172],{},[139,127986,127987],{},"\u003Cul>",[139,127989,127990],{},"\u003Col>",[139,127992,127993],{},"\u003Cli>","等，其中 ",[139,127996,126172],{}," 标签是最典型的块元素",[14,127999,128000],{},[302,128001,128002],{},"块级元素的特点：",[14,128004,128005],{},"① 比较霸道，自己独占一行。",[14,128007,128008],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128010,128011],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128013,128014],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128016,128017],{},[302,128018,182],{},[14,128020,128021],{},"①文字类的元素内不能使用块级元素",[14,128023,77278,128024,128026,128027,128029,128030],{},[139,128025,126102],{}," 标签主要用于存放文字，因此 ",[139,128028,126102],{}," 里面不能放块级元素，特别是不能放",[139,128031,126172],{},[14,128033,128034,128035,127977,128037,128039],{},"⑥同理， ",[139,128036,126076],{},[139,128038,127980],{},"等都是文字类块级标签，里面也不能放其他块级元素",[113,128041,128043],{"id":128042},"_812-行内元素","8.1.2 行内元素",[14,128045,128046,128047,365,128049,365,128052,365,128055,365,128058,365,128061,365,128064,365,128067,365,128070,365,128073,128075,128076,128078],{},"常见的行内元素有 ",[139,128048,126334],{},[139,128050,128051],{},"\u003Cstrong>",[139,128053,128054],{},"\u003Cb>",[139,128056,128057],{},"\u003Cem>",[139,128059,128060],{},"\u003Ci>",[139,128062,128063],{},"\u003Cdel>",[139,128065,128066],{},"\u003Cs>",[139,128068,128069],{},"\u003Cins>",[139,128071,128072],{},"\u003Cu>",[139,128074,126175],{}," 等，其中 ",[139,128077,126175],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128080,128081],{},[302,128082,128083],{},"特点：",[14,128085,128086],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128088,128089],{},"② 高、宽直接设置是无效的。",[14,128091,128092],{},"③ 默认宽度就是它本身内容的宽度。",[14,128094,128095],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128097,128098],{},[302,128099,182],{},[14,128101,128102],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128104,128105,128106,128108,128109,128111],{},"②特殊情况链接 ",[139,128107,126334],{}," 里面可以放块级元素，但是给 ",[139,128110,126334],{}," 转换一下块级模式最安全",[113,128113,128115],{"id":128114},"_813-行内块元素","8.1.3 行内块元素",[14,128117,128118,128119,365,128122,365,128125,128128],{},"在行内元素中有几个特殊的标签 —— ",[139,128120,128121],{},"\u003Cimg \u002F>",[139,128123,128124],{},"\u003Cinput \u002F>",[139,128126,128127],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128130,128131],{},[302,128132,128133],{},"行内块元素的特点：",[14,128135,128136],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128138,128139],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128141,128142],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[113,128144,128146],{"id":128145},"_814-总结","8.1.4 总结",[29,128148],{"style":126417,"src":128149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[113,128151,128153],{"id":128152},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128155,128156],{},"①转换为块元素：display:block;",[133,128158,128160],{"className":126561,"code":128159,"language":126563,"meta":31,"style":31},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[139,128161,128162,128167,128173,128184,128196,128208],{"__ignoreMap":31},[142,128163,128164],{"class":144,"line":145},[142,128165,128166],{"class":211},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[142,128168,128169,128171],{"class":144,"line":64},[142,128170,391],{"class":51329},[142,128172,15601],{"class":152},[142,128174,128175,128178,128180,128182],{"class":144,"line":1208},[142,128176,128177],{"class":201},"  display",[142,128179,51466],{"class":152},[142,128181,60898],{"class":201},[142,128183,1319],{"class":152},[142,128185,128186,128188,128190,128192,128194],{"class":144,"line":1223},[142,128187,70597],{"class":201},[142,128189,51466],{"class":152},[142,128191,464],{"class":201},[142,128193,51521],{"class":148},[142,128195,1319],{"class":152},[142,128197,128198,128200,128202,128204,128206],{"class":144,"line":1229},[142,128199,70817],{"class":201},[142,128201,51466],{"class":152},[142,128203,554],{"class":201},[142,128205,51521],{"class":148},[142,128207,1319],{"class":152},[142,128209,128210],{"class":144,"line":1243},[142,128211,1593],{"class":152},[14,128213,128214],{},"②转换为行内元素：display:inline;",[133,128216,128218],{"className":126561,"code":128217,"language":126563,"meta":31,"style":31},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[139,128219,128220,128225,128231,128242],{"__ignoreMap":31},[142,128221,128222],{"class":144,"line":145},[142,128223,128224],{"class":211},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[142,128226,128227,128229],{"class":144,"line":64},[142,128228,51640],{"class":51329},[142,128230,15601],{"class":152},[142,128232,128233,128235,128237,128240],{"class":144,"line":1208},[142,128234,128177],{"class":201},[142,128236,51466],{"class":152},[142,128238,128239],{"class":201},"inline",[142,128241,1319],{"class":152},[142,128243,128244],{"class":144,"line":1223},[142,128245,1593],{"class":152},[14,128247,128248],{},"③转换为行内块：display:inline-block;",[133,128250,128252],{"className":126561,"code":128251,"language":126563,"meta":31,"style":31},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[139,128253,128254,128259,128265,128275,128287,128299],{"__ignoreMap":31},[142,128255,128256],{"class":144,"line":145},[142,128257,128258],{"class":211},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[142,128260,128261,128263],{"class":144,"line":64},[142,128262,142],{"class":51329},[142,128264,15601],{"class":152},[142,128266,128267,128269,128271,128273],{"class":144,"line":1208},[142,128268,128177],{"class":201},[142,128270,51466],{"class":152},[142,128272,72412],{"class":201},[142,128274,1319],{"class":152},[142,128276,128277,128279,128281,128283,128285],{"class":144,"line":1223},[142,128278,70597],{"class":201},[142,128280,51466],{"class":152},[142,128282,765],{"class":201},[142,128284,51521],{"class":148},[142,128286,1319],{"class":152},[142,128288,128289,128291,128293,128295,128297],{"class":144,"line":1229},[142,128290,70817],{"class":201},[142,128292,51466],{"class":152},[142,128294,1104],{"class":201},[142,128296,51521],{"class":148},[142,128298,1319],{"class":152},[142,128300,128301],{"class":144,"line":1243},[142,128302,1593],{"class":152},[113,128304,128306],{"id":128305},"_816-小米侧边栏","8.1.6 小米侧边栏",[29,128308],{"style":126417,"src":128309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[133,128311,128313],{"className":127308,"code":128312,"language":127310,"meta":31,"style":31},"\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",[139,128314,128315,128320,128335,128354,128373,128392,128411,128430,128449,128468],{"__ignoreMap":31},[142,128316,128317],{"class":144,"line":145},[142,128318,128319],{"class":211},"\u003C!-- 小米侧边栏案例 -->\n",[142,128321,128322,128324,128326,128328,128330,128333],{"class":144,"line":64},[142,128323,1063],{"class":152},[142,128325,51640],{"class":51329},[142,128327,53515],{"class":1991},[142,128329,198],{"class":152},[142,128331,128332],{"class":257},"\"sidebar\"",[142,128334,51336],{"class":152},[142,128336,128337,128339,128341,128343,128345,128347,128350,128352],{"class":144,"line":1208},[142,128338,52173],{"class":152},[142,128340,391],{"class":51329},[142,128342,61086],{"class":1991},[142,128344,198],{"class":152},[142,128346,61091],{"class":257},[142,128348,128349],{"class":152},">手机 电话卡\u003C\u002F",[142,128351,391],{"class":51329},[142,128353,51336],{"class":152},[142,128355,128356,128358,128360,128362,128364,128366,128369,128371],{"class":144,"line":1223},[142,128357,52173],{"class":152},[142,128359,391],{"class":51329},[142,128361,61086],{"class":1991},[142,128363,198],{"class":152},[142,128365,61091],{"class":257},[142,128367,128368],{"class":152},">电视 盒子\u003C\u002F",[142,128370,391],{"class":51329},[142,128372,51336],{"class":152},[142,128374,128375,128377,128379,128381,128383,128385,128388,128390],{"class":144,"line":1229},[142,128376,52173],{"class":152},[142,128378,391],{"class":51329},[142,128380,61086],{"class":1991},[142,128382,198],{"class":152},[142,128384,61091],{"class":257},[142,128386,128387],{"class":152},">笔记本 平板\u003C\u002F",[142,128389,391],{"class":51329},[142,128391,51336],{"class":152},[142,128393,128394,128396,128398,128400,128402,128404,128407,128409],{"class":144,"line":1243},[142,128395,52173],{"class":152},[142,128397,391],{"class":51329},[142,128399,61086],{"class":1991},[142,128401,198],{"class":152},[142,128403,61091],{"class":257},[142,128405,128406],{"class":152},">出行 穿戴\u003C\u002F",[142,128408,391],{"class":51329},[142,128410,51336],{"class":152},[142,128412,128413,128415,128417,128419,128421,128423,128426,128428],{"class":144,"line":1249},[142,128414,52173],{"class":152},[142,128416,391],{"class":51329},[142,128418,61086],{"class":1991},[142,128420,198],{"class":152},[142,128422,61091],{"class":257},[142,128424,128425],{"class":152},">智能 路由器\u003C\u002F",[142,128427,391],{"class":51329},[142,128429,51336],{"class":152},[142,128431,128432,128434,128436,128438,128440,128442,128445,128447],{"class":144,"line":1340},[142,128433,52173],{"class":152},[142,128435,391],{"class":51329},[142,128437,61086],{"class":1991},[142,128439,198],{"class":152},[142,128441,61091],{"class":257},[142,128443,128444],{"class":152},">健康 儿童\u003C\u002F",[142,128446,391],{"class":51329},[142,128448,51336],{"class":152},[142,128450,128451,128453,128455,128457,128459,128461,128464,128466],{"class":144,"line":1346},[142,128452,52173],{"class":152},[142,128454,391],{"class":51329},[142,128456,61086],{"class":1991},[142,128458,198],{"class":152},[142,128460,61091],{"class":257},[142,128462,128463],{"class":152},">耳机 音响\u003C\u002F",[142,128465,391],{"class":51329},[142,128467,51336],{"class":152},[142,128469,128470,128472,128474],{"class":144,"line":1358},[142,128471,51814],{"class":152},[142,128473,51640],{"class":51329},[142,128475,51336],{"class":152},[133,128477,128479],{"className":126561,"code":128478,"language":126563,"meta":31,"style":31},".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",[139,128480,128481,128490,128500,128513,128525,128537,128549,128559,128570,128574,128584,128595],{"__ignoreMap":31},[142,128482,128483,128486,128488],{"class":144,"line":145},[142,128484,128485],{"class":1991},".sidebar",[142,128487,1427],{"class":51329},[142,128489,15601],{"class":152},[142,128491,128492,128494,128496,128498],{"class":144,"line":64},[142,128493,128177],{"class":201},[142,128495,51466],{"class":152},[142,128497,60898],{"class":201},[142,128499,1319],{"class":152},[142,128501,128502,128504,128506,128509,128511],{"class":144,"line":1208},[142,128503,70597],{"class":201},[142,128505,51466],{"class":152},[142,128507,128508],{"class":201},"234",[142,128510,51521],{"class":148},[142,128512,1319],{"class":152},[142,128514,128515,128517,128519,128521,128523],{"class":144,"line":1223},[142,128516,70817],{"class":201},[142,128518,51466],{"class":152},[142,128520,605],{"class":201},[142,128522,51521],{"class":148},[142,128524,1319],{"class":152},[142,128526,128527,128529,128531,128533,128535],{"class":144,"line":1229},[142,128528,127245],{"class":201},[142,128530,51466],{"class":152},[142,128532,605],{"class":201},[142,128534,51521],{"class":148},[142,128536,1319],{"class":152},[142,128538,128539,128541,128543,128545,128547],{"class":144,"line":1243},[142,128540,70852],{"class":201},[142,128542,51466],{"class":152},[142,128544,1104],{"class":201},[142,128546,51521],{"class":148},[142,128548,1319],{"class":152},[142,128550,128551,128553,128555,128557],{"class":144,"line":1249},[142,128552,70934],{"class":201},[142,128554,51466],{"class":152},[142,128556,60871],{"class":201},[142,128558,1319],{"class":152},[142,128560,128561,128563,128565,128568],{"class":144,"line":1340},[142,128562,70907],{"class":201},[142,128564,51466],{"class":152},[142,128566,128567],{"class":201},"#55585a",[142,128569,1319],{"class":152},[142,128571,128572],{"class":144,"line":1346},[142,128573,1593],{"class":152},[142,128575,128576,128578,128580,128582],{"class":144,"line":1358},[142,128577,128485],{"class":1991},[142,128579,1427],{"class":51329},[142,128581,60969],{"class":1991},[142,128583,15601],{"class":152},[142,128585,128586,128588,128590,128593],{"class":144,"line":1640},[142,128587,70907],{"class":201},[142,128589,51466],{"class":152},[142,128591,128592],{"class":201},"#ff6700",[142,128594,1319],{"class":152},[142,128596,128597],{"class":144,"line":1645},[142,128598,1593],{"class":152},[29,128600],{"style":126417,"src":128601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128603,128604],{},"行高=盒子高度：实现文字的垂直居中",[14,128606,128607],{},"原理讲解：",[29,128609],{"style":126417,"src":128610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[84,128612,128614],{"id":128613},"_82-css背景","8.2 css背景",[14,128616,128617],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[113,128619,128621],{"id":128620},"_821-背景颜色","8.2.1 背景颜色",[14,128623,128624],{},"background-color:颜色值;",[14,128626,128627],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[113,128629,128631],{"id":128630},"_822-背景图片","8.2.2 背景图片",[14,128633,128634],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[133,128636,128638],{"className":126561,"code":128637,"language":126563,"meta":31,"style":31},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[139,128639,128640,128646,128662],{"__ignoreMap":31},[142,128641,128642,128644],{"class":144,"line":145},[142,128643,51640],{"class":51329},[142,128645,15601],{"class":152},[142,128647,128648,128651,128653,128655,128657,128660],{"class":144,"line":64},[142,128649,128650],{"class":201},"  background-image",[142,128652,51466],{"class":152},[142,128654,61755],{"class":201},[142,128656,153],{"class":152},[142,128658,128659],{"class":5245},"images\u002Fbg.png",[142,128661,2747],{"class":152},[142,128663,128664],{"class":144,"line":1208},[142,128665,1593],{"class":152},[290,128667,128668,128677],{},[293,128669,128670],{},[296,128671,128672,128675],{},[299,128673,128674],{"align":23765},"参数值",[299,128676,102705],{"align":23765},[337,128678,128679,128686],{},[296,128680,128681,128683],{},[342,128682,54766],{"align":23765},[342,128684,128685],{"align":23765},"无背景图（默认的）",[296,128687,128688,128690],{},[342,128689,61755],{"align":23765},[342,128691,128692],{"align":23765},"使用绝对或相对地址指定背景图像",[133,128694,128695],{"className":126561,"code":128637,"language":126563,"meta":31,"style":31},[139,128696,128697,128703,128717],{"__ignoreMap":31},[142,128698,128699,128701],{"class":144,"line":145},[142,128700,51640],{"class":51329},[142,128702,15601],{"class":152},[142,128704,128705,128707,128709,128711,128713,128715],{"class":144,"line":64},[142,128706,128650],{"class":201},[142,128708,51466],{"class":152},[142,128710,61755],{"class":201},[142,128712,153],{"class":152},[142,128714,128659],{"class":5245},[142,128716,2747],{"class":152},[142,128718,128719],{"class":144,"line":1208},[142,128720,1593],{"class":152},[14,128722,128723],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[113,128725,128727],{"id":128726},"_823-背景平铺","8.2.3 背景平铺",[133,128729,128731],{"className":126561,"code":128730,"language":126563,"meta":31,"style":31},"div {\n  background-repeat: no-repeat;\n}\n",[139,128732,128733,128739,128750],{"__ignoreMap":31},[142,128734,128735,128737],{"class":144,"line":145},[142,128736,51640],{"class":51329},[142,128738,15601],{"class":152},[142,128740,128741,128744,128746,128748],{"class":144,"line":64},[142,128742,128743],{"class":201},"  background-repeat",[142,128745,51466],{"class":152},[142,128747,61765],{"class":201},[142,128749,1319],{"class":152},[142,128751,128752],{"class":144,"line":1208},[142,128753,1593],{"class":152},[290,128755,128756,128764],{},[293,128757,128758],{},[296,128759,128760,128762],{},[299,128761,128674],{"align":23765},[299,128763,102705],{"align":23765},[337,128765,128766,128774,128781,128789],{},[296,128767,128768,128771],{},[342,128769,128770],{"align":23765},"repeat",[342,128772,128773],{"align":23765},"背景图像在纵向和横向上平铺（默认的）",[296,128775,128776,128778],{},[342,128777,61765],{"align":23765},[342,128779,128780],{"align":23765},"背景图像不平铺",[296,128782,128783,128786],{},[342,128784,128785],{"align":23765},"repeat-x",[342,128787,128788],{"align":23765},"背景图像在横向上平铺",[296,128790,128791,128794],{},[342,128792,128793],{"align":23765},"repeat-y",[342,128795,128796],{"align":23765},"背景图像在纵向平铺",[113,128798,128800],{"id":128799},"_824-背景图片位置","8.2.4 背景图片位置",[133,128802,128804],{"className":126561,"code":128803,"language":126563,"meta":31,"style":31},"\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",[139,128805,128806,128811,128817,128831,128835,128840,128846,128862,128866,128871,128877,128891],{"__ignoreMap":31},[142,128807,128808],{"class":144,"line":145},[142,128809,128810],{"class":211},"\u002F* 方位名词 *\u002F\n",[142,128812,128813,128815],{"class":144,"line":64},[142,128814,51640],{"class":51329},[142,128816,15601],{"class":152},[142,128818,128819,128822,128824,128826,128829],{"class":144,"line":1208},[142,128820,128821],{"class":201},"  background-position",[142,128823,51466],{"class":152},[142,128825,51621],{"class":201},[142,128827,128828],{"class":201}," top",[142,128830,1319],{"class":152},[142,128832,128833],{"class":144,"line":1223},[142,128834,1593],{"class":152},[142,128836,128837],{"class":144,"line":1229},[142,128838,128839],{"class":211},"\u002F* 精确单位 *\u002F\n",[142,128841,128842,128844],{"class":144,"line":1243},[142,128843,51640],{"class":51329},[142,128845,15601],{"class":152},[142,128847,128848,128850,128852,128854,128856,128858,128860],{"class":144,"line":1249},[142,128849,128821],{"class":201},[142,128851,51466],{"class":152},[142,128853,853],{"class":201},[142,128855,51521],{"class":148},[142,128857,57533],{"class":201},[142,128859,51521],{"class":148},[142,128861,1319],{"class":152},[142,128863,128864],{"class":144,"line":1340},[142,128865,1593],{"class":152},[142,128867,128868],{"class":144,"line":1346},[142,128869,128870],{"class":211},"\u002F* 混合单位 *\u002F\n",[142,128872,128873,128875],{"class":144,"line":1358},[142,128874,51640],{"class":51329},[142,128876,15601],{"class":152},[142,128878,128879,128881,128883,128885,128887,128889],{"class":144,"line":1640},[142,128880,128821],{"class":201},[142,128882,51466],{"class":152},[142,128884,853],{"class":201},[142,128886,51521],{"class":148},[142,128888,17173],{"class":201},[142,128890,1319],{"class":152},[142,128892,128893],{"class":144,"line":1645},[142,128894,1593],{"class":152},[14,128896,128897],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[290,128899,128900,128908],{},[293,128901,128902],{},[296,128903,128904,128906],{},[299,128905,128674],{"align":23765},[299,128907,25898],{"align":23765},[337,128909,128910,128917],{},[296,128911,128912,128914],{},[342,128913,51997],{"align":23765},[342,128915,128916],{"align":23765},"百分数|由浮点数和单位标识符组成的长度值",[296,128918,128919,128922],{},[342,128920,128921],{"align":23765},"position",[342,128923,128924],{"align":23765},"top|center|bottom|left|center|right 方位名词",[14,128926,128927],{},"其他说明：",[14,128929,128930],{},"①参数是方位名词",[14,128932,128933],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128935,128936],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128938,128939],{},"②参数是精确单位",[14,128941,128942],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128944,128945],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128947,128948],{},"③参数是混合单位",[14,128950,128951],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[113,128953,128955],{"id":128954},"_825-背景图片固定","8.2.5 背景图片固定",[133,128957,128959],{"className":126561,"code":128958,"language":126563,"meta":31,"style":31},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[139,128960,128961,128966,128972,128984,128988,128993,128999,129009],{"__ignoreMap":31},[142,128962,128963],{"class":144,"line":145},[142,128964,128965],{"class":211},"\u002F* 背景滚动（默认） *\u002F\n",[142,128967,128968,128970],{"class":144,"line":64},[142,128969,51640],{"class":51329},[142,128971,15601],{"class":152},[142,128973,128974,128977,128979,128982],{"class":144,"line":1208},[142,128975,128976],{"class":201},"  background-attachment",[142,128978,51466],{"class":152},[142,128980,128981],{"class":201},"scroll",[142,128983,1319],{"class":152},[142,128985,128986],{"class":144,"line":1223},[142,128987,1593],{"class":152},[142,128989,128990],{"class":144,"line":1229},[142,128991,128992],{"class":211},"\u002F* 背景固定 *\u002F\n",[142,128994,128995,128997],{"class":144,"line":1243},[142,128996,51640],{"class":51329},[142,128998,15601],{"class":152},[142,129000,129001,129003,129005,129007],{"class":144,"line":1249},[142,129002,128976],{"class":201},[142,129004,51466],{"class":152},[142,129006,86262],{"class":201},[142,129008,1319],{"class":152},[142,129010,129011],{"class":144,"line":1340},[142,129012,1593],{"class":152},[290,129014,129015,129024],{},[293,129016,129017],{},[296,129018,129019,129022],{},[299,129020,129021],{"align":23765},"参数",[299,129023,102705],{"align":23765},[337,129025,129026,129033],{},[296,129027,129028,129030],{},[342,129029,128981],{"align":23765},[342,129031,129032],{"align":23765},"背景图像是随对象内容滚动",[296,129034,129035,129037],{},[342,129036,86262],{"align":23765},[342,129038,129039],{"align":23765},"背景图像固定",[113,129041,129043],{"id":129042},"_826-背景样式合写","8.2.6 背景样式合写",[133,129045,129047],{"className":126561,"code":129046,"language":126563,"meta":31,"style":31},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[139,129048,129049,129054,129060,129088],{"__ignoreMap":31},[142,129050,129051],{"class":144,"line":145},[142,129052,129053],{"class":211},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[142,129055,129056,129058],{"class":144,"line":64},[142,129057,51640],{"class":51329},[142,129059,15601],{"class":152},[142,129061,129062,129064,129066,129068,129071,129073,129075,129077,129079,129082,129084,129086],{"class":144,"line":1208},[142,129063,70640],{"class":201},[142,129065,51466],{"class":152},[142,129067,60871],{"class":201},[142,129069,129070],{"class":201}," url",[142,129072,153],{"class":152},[142,129074,128659],{"class":5245},[142,129076,13743],{"class":152},[142,129078,61765],{"class":201},[142,129080,129081],{"class":201}," fixed",[142,129083,17173],{"class":201},[142,129085,128828],{"class":201},[142,129087,1319],{"class":152},[142,129089,129090],{"class":144,"line":1223},[142,129091,1593],{"class":152},[113,129093,129095],{"id":129094},"_827-背景色半透明","8.2.7 背景色半透明",[133,129097,129099],{"className":126561,"code":129098,"language":126563,"meta":31,"style":31},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[139,129100,129101,129107,129133],{"__ignoreMap":31},[142,129102,129103,129105],{"class":144,"line":145},[142,129104,51640],{"class":51329},[142,129106,15601],{"class":152},[142,129108,129109,129111,129113,129115,129117,129119,129121,129123,129125,129127,129129,129131],{"class":144,"line":64},[142,129110,70640],{"class":201},[142,129112,51466],{"class":152},[142,129114,55139],{"class":201},[142,129116,153],{"class":152},[142,129118,344],{"class":201},[142,129120,12464],{"class":152},[142,129122,344],{"class":201},[142,129124,12464],{"class":152},[142,129126,344],{"class":201},[142,129128,12464],{"class":152},[142,129130,100530],{"class":201},[142,129132,2747],{"class":152},[142,129134,129135],{"class":144,"line":1208},[142,129136,1593],{"class":152},[14,129138,99405],{},[14,129140,129141],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129143,129144],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129146,129147],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129149,129150],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[113,129152,129154],{"id":129153},"_828-总结","8.2.8 总结",[290,129156,129157,129168],{},[293,129158,129159],{},[296,129160,129161,129164,129166],{},[299,129162,129163],{"align":23765},"属性",[299,129165,102705],{"align":23765},[299,129167,305],{"align":23765},[337,129169,129170,129181,129192,129203,129214,129225,129236],{},[296,129171,129172,129175,129178],{},[342,129173,129174],{"align":23765},"background-color",[342,129176,129177],{"align":23765},"背景颜色",[342,129179,129180],{"align":23765},"预定义的颜色值\u002F十六进制\u002FRGB代码",[296,129182,129183,129186,129189],{},[342,129184,129185],{"align":23765},"background-image",[342,129187,129188],{"align":23765},"背景图片",[342,129190,129191],{"align":23765},"url(图片路径)",[296,129193,129194,129197,129200],{},[342,129195,129196],{"align":23765},"background-repeat",[342,129198,129199],{"align":23765},"是否平铺",[342,129201,129202],{"align":23765},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[296,129204,129205,129208,129211],{},[342,129206,129207],{"align":23765},"background-position",[342,129209,129210],{"align":23765},"背景位置",[342,129212,129213],{"align":23765},"length\u002Fposition 分别是x和y坐标",[296,129215,129216,129219,129222],{},[342,129217,129218],{"align":23765},"background-attachment",[342,129220,129221],{"align":23765},"背景附着",[342,129223,129224],{"align":23765},"scroll(背景滚动) \u002Ffixed (背景固定)",[296,129226,129227,129230,129233],{},[342,129228,129229],{"align":23765},"背景简写",[342,129231,129232],{"align":23765},"书写更简单",[342,129234,129235],{"align":23765},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[296,129237,129238,129241,129244],{},[342,129239,129240],{"align":23765},"背景半透明",[342,129242,129243],{"align":23765},"背景颜色半透明",[342,129245,129246],{"align":23765},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129248,129249],{},"颜色渐变：",[29,129251],{"style":126417,"src":129252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[29,129254],{"style":126417,"src":129255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[113,129257,129259],{"id":129258},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[133,129261,129263],{"className":127308,"code":129262,"language":127310,"meta":31,"style":31},"\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",[139,129264,129265,129280,129299,129318,129337,129356,129375],{"__ignoreMap":31},[142,129266,129267,129269,129271,129273,129275,129278],{"class":144,"line":145},[142,129268,1063],{"class":152},[142,129270,51640],{"class":51329},[142,129272,53515],{"class":1991},[142,129274,198],{"class":152},[142,129276,129277],{"class":257},"\"nav\"",[142,129279,51336],{"class":152},[142,129281,129282,129284,129286,129288,129290,129292,129295,129297],{"class":144,"line":64},[142,129283,52173],{"class":152},[142,129285,391],{"class":51329},[142,129287,61086],{"class":1991},[142,129289,198],{"class":152},[142,129291,61091],{"class":257},[142,129293,129294],{"class":152},">五彩导航1\u003C\u002F",[142,129296,391],{"class":51329},[142,129298,51336],{"class":152},[142,129300,129301,129303,129305,129307,129309,129311,129314,129316],{"class":144,"line":1208},[142,129302,52173],{"class":152},[142,129304,391],{"class":51329},[142,129306,61086],{"class":1991},[142,129308,198],{"class":152},[142,129310,61091],{"class":257},[142,129312,129313],{"class":152},">五彩导航2\u003C\u002F",[142,129315,391],{"class":51329},[142,129317,51336],{"class":152},[142,129319,129320,129322,129324,129326,129328,129330,129333,129335],{"class":144,"line":1223},[142,129321,52173],{"class":152},[142,129323,391],{"class":51329},[142,129325,61086],{"class":1991},[142,129327,198],{"class":152},[142,129329,61091],{"class":257},[142,129331,129332],{"class":152},">五彩导航3\u003C\u002F",[142,129334,391],{"class":51329},[142,129336,51336],{"class":152},[142,129338,129339,129341,129343,129345,129347,129349,129352,129354],{"class":144,"line":1229},[142,129340,52173],{"class":152},[142,129342,391],{"class":51329},[142,129344,61086],{"class":1991},[142,129346,198],{"class":152},[142,129348,61091],{"class":257},[142,129350,129351],{"class":152},">五彩导航4\u003C\u002F",[142,129353,391],{"class":51329},[142,129355,51336],{"class":152},[142,129357,129358,129360,129362,129364,129366,129368,129371,129373],{"class":144,"line":1243},[142,129359,52173],{"class":152},[142,129361,391],{"class":51329},[142,129363,61086],{"class":1991},[142,129365,198],{"class":152},[142,129367,61091],{"class":257},[142,129369,129370],{"class":152},">五彩导航5\u003C\u002F",[142,129372,391],{"class":51329},[142,129374,51336],{"class":152},[142,129376,129377,129379,129381],{"class":144,"line":1249},[142,129378,51814],{"class":152},[142,129380,51640],{"class":51329},[142,129382,51336],{"class":152},[133,129384,129386],{"className":126561,"code":129385,"language":126563,"meta":31,"style":31},".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",[139,129387,129388,129397,129407,129419,129431,129441,129453,129463,129467,129492,129515,129538,129561],{"__ignoreMap":31},[142,129389,129390,129393,129395],{"class":144,"line":145},[142,129391,129392],{"class":1991},".nav",[142,129394,1427],{"class":51329},[142,129396,15601],{"class":152},[142,129398,129399,129401,129403,129405],{"class":144,"line":64},[142,129400,128177],{"class":201},[142,129402,51466],{"class":152},[142,129404,72412],{"class":201},[142,129406,1319],{"class":152},[142,129408,129409,129411,129413,129415,129417],{"class":144,"line":1208},[142,129410,70597],{"class":201},[142,129412,51466],{"class":152},[142,129414,970],{"class":201},[142,129416,51521],{"class":148},[142,129418,1319],{"class":152},[142,129420,129421,129423,129425,129427,129429],{"class":144,"line":1223},[142,129422,70817],{"class":201},[142,129424,51466],{"class":152},[142,129426,1009],{"class":201},[142,129428,51521],{"class":148},[142,129430,1319],{"class":152},[142,129432,129433,129435,129437,129439],{"class":144,"line":1229},[142,129434,70555],{"class":201},[142,129436,51466],{"class":152},[142,129438,51621],{"class":201},[142,129440,1319],{"class":152},[142,129442,129443,129445,129447,129449,129451],{"class":144,"line":1243},[142,129444,127245],{"class":201},[142,129446,51466],{"class":152},[142,129448,1009],{"class":201},[142,129450,51521],{"class":148},[142,129452,1319],{"class":152},[142,129454,129455,129457,129459,129461],{"class":144,"line":1249},[142,129456,70934],{"class":201},[142,129458,51466],{"class":152},[142,129460,60871],{"class":201},[142,129462,1319],{"class":152},[142,129464,129465],{"class":144,"line":1340},[142,129466,1593],{"class":152},[142,129468,129469,129471,129473,129476,129478,129480,129483,129485,129487,129489],{"class":144,"line":1346},[142,129470,129392],{"class":1991},[142,129472,1427],{"class":51329},[142,129474,129475],{"class":1991},":nth-child",[142,129477,153],{"class":152},[142,129479,370],{"class":201},[142,129481,129482],{"class":152},") { ",[142,129484,129174],{"class":201},[142,129486,51466],{"class":152},[142,129488,128592],{"class":201},[142,129490,129491],{"class":152},"; }\n",[142,129493,129494,129496,129498,129500,129502,129504,129506,129508,129510,129513],{"class":144,"line":1358},[142,129495,129392],{"class":1991},[142,129497,1427],{"class":51329},[142,129499,129475],{"class":1991},[142,129501,153],{"class":152},[142,129503,230],{"class":201},[142,129505,129482],{"class":152},[142,129507,129174],{"class":201},[142,129509,51466],{"class":152},[142,129511,129512],{"class":201},"#ff0000",[142,129514,129491],{"class":152},[142,129516,129517,129519,129521,129523,129525,129527,129529,129531,129533,129536],{"class":144,"line":1640},[142,129518,129392],{"class":1991},[142,129520,1427],{"class":51329},[142,129522,129475],{"class":1991},[142,129524,153],{"class":152},[142,129526,224],{"class":201},[142,129528,129482],{"class":152},[142,129530,129174],{"class":201},[142,129532,51466],{"class":152},[142,129534,129535],{"class":201},"#00a4ff",[142,129537,129491],{"class":152},[142,129539,129540,129542,129544,129546,129548,129550,129552,129554,129556,129559],{"class":144,"line":1645},[142,129541,129392],{"class":1991},[142,129543,1427],{"class":51329},[142,129545,129475],{"class":1991},[142,129547,153],{"class":152},[142,129549,446],{"class":201},[142,129551,129482],{"class":152},[142,129553,129174],{"class":201},[142,129555,51466],{"class":152},[142,129557,129558],{"class":201},"#ff00ff",[142,129560,129491],{"class":152},[142,129562,129563,129565,129567,129569,129571,129573,129575,129577,129579,129582],{"class":144,"line":1651},[142,129564,129392],{"class":1991},[142,129566,1427],{"class":51329},[142,129568,129475],{"class":1991},[142,129570,153],{"class":152},[142,129572,472],{"class":201},[142,129574,129482],{"class":152},[142,129576,129174],{"class":201},[142,129578,51466],{"class":152},[142,129580,129581],{"class":201},"#00ff00",[142,129583,129491],{"class":152},[84,129585,129587],{"id":129586},"_83-css三大特性","8.3 css三大特性",[113,129589,129591],{"id":129590},"_831-层叠性","8.3.1 层叠性",[14,129593,129594],{},"为了解决样式冲突问题",[14,129596,129597],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129599,129600],{},"   ②样式不冲突，不会层叠",[113,129602,129604],{"id":129603},"_832-继承性","8.3.2 继承性",[14,129606,129607],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129609,129610],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[133,129612,129614],{"className":126561,"code":129613,"language":126563,"meta":31,"style":31},"p {\n  color: #333;\n}\n",[139,129615,129616,129622,129632],{"__ignoreMap":31},[142,129617,129618,129620],{"class":144,"line":145},[142,129619,14],{"class":51329},[142,129621,15601],{"class":152},[142,129623,129624,129626,129628,129630],{"class":144,"line":64},[142,129625,70934],{"class":201},[142,129627,51466],{"class":152},[142,129629,62398],{"class":201},[142,129631,1319],{"class":152},[142,129633,129634],{"class":144,"line":1208},[142,129635,1593],{"class":152},[29,129637],{"style":126417,"src":129638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129640,129641],{},"解释：①行高可以跟单位也可以不跟单位",[14,129643,129644],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129646,129647],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129649,129650],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[113,129652,129654],{"id":129653},"_833-优先级","8.3.3 优先级",[96,129656,129657,129660],{},[99,129658,129659],{},"选择器相同，则执行层叠性",[99,129661,129662],{},"选择器不同，则根据选择器权重执行",[290,129664,129665,129675],{},[293,129666,129667],{},[296,129668,129669,129672],{},[299,129670,129671],{"align":23765},"选择器",[299,129673,129674],{"align":23765},"选择器权重",[337,129676,129677,129685,129693,129701,129709,129717],{},[296,129678,129679,129682],{},[342,129680,129681],{"align":23765},"继承 或者*",[342,129683,129684],{"align":23765},"0，0，0，0",[296,129686,129687,129690],{},[342,129688,129689],{"align":23765},"标签选择器",[342,129691,129692],{"align":23765},"0，0，0，1",[296,129694,129695,129698],{},[342,129696,129697],{"align":23765},"类选择器，伪类选择器",[342,129699,129700],{"align":23765},"0，0，1，0",[296,129702,129703,129706],{},[342,129704,129705],{"align":23765},"ID选择器",[342,129707,129708],{"align":23765},"0，1，0，0",[296,129710,129711,129714],{},[342,129712,129713],{"align":23765},"行内样式",[342,129715,129716],{"align":23765},"1，0，0，0",[296,129718,129719,129722],{},[342,129720,129721],{"align":23765},"！important",[342,129723,129724],{"align":23765},"无穷大",[14,129726,129727],{},"! important用法：",[133,129729,129731],{"className":126561,"code":129730,"language":126563,"meta":31,"style":31},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[139,129732,129733,129738,129744,129757,129761,129766,129772,129782],{"__ignoreMap":31},[142,129734,129735],{"class":144,"line":145},[142,129736,129737],{"class":211},"\u002F* !important 拥有最高优先级 *\u002F\n",[142,129739,129740,129742],{"class":144,"line":64},[142,129741,51640],{"class":51329},[142,129743,15601],{"class":152},[142,129745,129746,129748,129750,129752,129755],{"class":144,"line":1208},[142,129747,70934],{"class":201},[142,129749,51466],{"class":152},[142,129751,51674],{"class":201},[142,129753,129754],{"class":148}," !important",[142,129756,1319],{"class":152},[142,129758,129759],{"class":144,"line":1223},[142,129760,1593],{"class":152},[142,129762,129763],{"class":144,"line":1229},[142,129764,129765],{"class":211},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[142,129767,129768,129770],{"class":144,"line":1243},[142,129769,51640],{"class":51329},[142,129771,15601],{"class":152},[142,129773,129774,129776,129778,129780],{"class":144,"line":1249},[142,129775,70934],{"class":201},[142,129777,51466],{"class":152},[142,129779,57450],{"class":201},[142,129781,1319],{"class":152},[142,129783,129784],{"class":144,"line":1340},[142,129785,1593],{"class":152},[14,129787,129788],{},"优先级注意点：",[14,129790,129791],{},"①权重是有4组数字组成,但是不会有进位",[14,129793,129794],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129796,129797],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129799,129800],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129802,129803],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129805,129806],{},"⑥复合选择器",[290,129808,129809,129819],{},[293,129810,129811],{},[296,129812,129813,129816],{},[299,129814,129815],{"align":23765},"div ul li",[299,129817,129818],{"align":23765},"0,0,0,3",[337,129820,129821,129829,129837],{},[296,129822,129823,129826],{},[342,129824,129825],{"align":23765},".nav ul li",[342,129827,129828],{"align":23765},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[296,129830,129831,129834],{},[342,129832,129833],{"align":23765},"a:hover",[342,129835,129836],{"align":23765},"0,0,1,1",[296,129838,129839,129842],{},[342,129840,129841],{"align":23765},".nav a",[342,129843,129836],{"align":23765},[5155,129845,129846],{},"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":31,"searchDepth":64,"depth":64,"links":129848},[129849,129857,129868],{"id":127957,"depth":64,"text":127958,"children":129850},[129851,129852,129853,129854,129855,129856],{"id":127970,"depth":1208,"text":127971},{"id":128042,"depth":1208,"text":128043},{"id":128114,"depth":1208,"text":128115},{"id":128145,"depth":1208,"text":128146},{"id":128152,"depth":1208,"text":128153},{"id":128305,"depth":1208,"text":128306},{"id":128613,"depth":64,"text":128614,"children":129858},[129859,129860,129861,129862,129863,129864,129865,129866,129867],{"id":128620,"depth":1208,"text":128621},{"id":128630,"depth":1208,"text":128631},{"id":128726,"depth":1208,"text":128727},{"id":128799,"depth":1208,"text":128800},{"id":128954,"depth":1208,"text":128955},{"id":129042,"depth":1208,"text":129043},{"id":129094,"depth":1208,"text":129095},{"id":129153,"depth":1208,"text":129154},{"id":129258,"depth":1208,"text":129259},{"id":129586,"depth":64,"text":129587,"children":129869},[129870,129871,129872],{"id":129590,"depth":1208,"text":129591},{"id":129603,"depth":1208,"text":129604},{"id":129653,"depth":1208,"text":129654},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127949,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129879,"title":129880,"body":129881,"description":66,"extension":67,"meta":131471,"navigation":69,"path":131472,"seo":131473,"stem":131474,"__hash__":131475},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129882,"toc":131450},[129883,129886,129890,129893,129896,129899,129902,129905,129908,129911,129915,129923,129960,129996,129999,130013,130018,130052,130055,130148,130153,130156,130186,130189,130194,130202,130206,130213,130259,130303,130308,130311,130314,130317,130320,130323,130326,130328,130331,130335,130340,130384,130389,130392,130395,130432,130437,130440,130443,130446,130449,130481,130484,130487,130490,130522,130525,130528,130531,130535,130538,130570,130573,130577,130597,130600,130608,130611,130615,130620,130623,130655,130660,130663,130701,130705,130710,130713,130716,130747,130750,130767,130772,130824,130884,130889,130943,130981,130985,130989,130992,130996,131004,131007,131009,131020,131025,131073,131107,131110,131113,131116,131119,131163,131166,131169,131172,131175,131178,131181,131225,131228,131231,131234,131237,131240,131243,131249,131252,131296,131299,131302,131305,131308,131311,131355,131358,131360,131363,131367,131371,131409,131413,131416,131419,131423,131431,131435,131438,131441,131444,131447],[10,129884,129880],{"id":129885},"_9-css盒模型浮动与切图",[84,129887,129889],{"id":129888},"_91-盒子模型","9.1 盒子模型",[14,129891,129892],{},"利用盒子来设计网页",[14,129894,129895],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129897,129898],{},"网页布局设置：",[14,129900,129901],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129903,129904],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129906,129907],{},"③往盒子里装内容",[29,129909],{"style":126417,"src":129910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[113,129912,129914],{"id":129913},"_911-边框border","9.1.1 边框（border）",[96,129916,129917,129920],{},[99,129918,129919],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[99,129921,129922],{},"语法",[133,129924,129926],{"className":126561,"code":129925,"language":126563,"meta":31,"style":31},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[139,129927,129928,129933,129939,129956],{"__ignoreMap":31},[142,129929,129930],{"class":144,"line":145},[142,129931,129932],{"class":211},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[142,129934,129935,129937],{"class":144,"line":64},[142,129936,51640],{"class":51329},[142,129938,15601],{"class":152},[142,129940,129941,129943,129945,129947,129949,129951,129954],{"class":144,"line":1208},[142,129942,70925],{"class":201},[142,129944,51466],{"class":152},[142,129946,370],{"class":201},[142,129948,51521],{"class":148},[142,129950,51550],{"class":201},[142,129952,129953],{"class":201}," #ccc",[142,129955,1319],{"class":152},[142,129957,129958],{"class":144,"line":1223},[142,129959,1593],{"class":152},[290,129961,129962,129970],{},[293,129963,129964],{},[296,129965,129966,129968],{},[299,129967,129163],{"align":23765},[299,129969,102705],{"align":23765},[337,129971,129972,129980,129988],{},[296,129973,129974,129977],{},[342,129975,129976],{"align":23765},"border-width",[342,129978,129979],{"align":23765},"定义边框粗细，单位是px",[296,129981,129982,129985],{},[342,129983,129984],{"align":23765},"border-style",[342,129986,129987],{"align":23765},"边框的样式",[296,129989,129990,129993],{},[342,129991,129992],{"align":23765},"border-color",[342,129994,129995],{"align":23765},"边框的颜色",[14,129997,129998],{},"边框样式 border-style 可以设置如下值：",[1160,130000,130001,130004,130007,130010],{},[99,130002,130003],{},"none：没有边框即忽略所有边框的宽度（默认值）",[99,130005,130006],{},"solid：边框为单实线(最为常用的)",[99,130008,130009],{},"dashed：边框为虚线",[99,130011,130012],{},"dotted：边框为点线",[96,130014,130015],{"start":1208},[99,130016,130017],{},"边框的合写分写",[133,130019,130020],{"className":126561,"code":129925,"language":126563,"meta":31,"style":31},[139,130021,130022,130026,130032,130048],{"__ignoreMap":31},[142,130023,130024],{"class":144,"line":145},[142,130025,129932],{"class":211},[142,130027,130028,130030],{"class":144,"line":64},[142,130029,51640],{"class":51329},[142,130031,15601],{"class":152},[142,130033,130034,130036,130038,130040,130042,130044,130046],{"class":144,"line":1208},[142,130035,70925],{"class":201},[142,130037,51466],{"class":152},[142,130039,370],{"class":201},[142,130041,51521],{"class":148},[142,130043,51550],{"class":201},[142,130045,129953],{"class":201},[142,130047,1319],{"class":152},[142,130049,130050],{"class":144,"line":1223},[142,130051,1593],{"class":152},[14,130053,130054],{},"边框分开写法：",[133,130056,130058],{"className":126561,"code":130057,"language":126563,"meta":31,"style":31},"\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",[139,130059,130060,130065,130071,130089,130107,130126,130144],{"__ignoreMap":31},[142,130061,130062],{"class":144,"line":145},[142,130063,130064],{"class":211},"\u002F* 边框分开写法 *\u002F\n",[142,130066,130067,130069],{"class":144,"line":64},[142,130068,51640],{"class":51329},[142,130070,15601],{"class":152},[142,130072,130073,130076,130078,130080,130082,130084,130087],{"class":144,"line":1208},[142,130074,130075],{"class":201},"  border-top",[142,130077,51466],{"class":152},[142,130079,370],{"class":201},[142,130081,51521],{"class":148},[142,130083,51550],{"class":201},[142,130085,130086],{"class":201}," #000",[142,130088,1319],{"class":152},[142,130090,130091,130094,130096,130098,130100,130102,130105],{"class":144,"line":1223},[142,130092,130093],{"class":201},"  border-right",[142,130095,51466],{"class":152},[142,130097,230],{"class":201},[142,130099,51521],{"class":148},[142,130101,62270],{"class":201},[142,130103,130104],{"class":201}," #333",[142,130106,1319],{"class":152},[142,130108,130109,130112,130114,130116,130118,130121,130124],{"class":144,"line":1229},[142,130110,130111],{"class":201},"  border-bottom",[142,130113,51466],{"class":152},[142,130115,224],{"class":201},[142,130117,51521],{"class":148},[142,130119,130120],{"class":201}," dotted",[142,130122,130123],{"class":201}," #666",[142,130125,1319],{"class":152},[142,130127,130128,130131,130133,130135,130137,130139,130142],{"class":144,"line":1243},[142,130129,130130],{"class":201},"  border-left",[142,130132,51466],{"class":152},[142,130134,370],{"class":201},[142,130136,51521],{"class":148},[142,130138,51550],{"class":201},[142,130140,130141],{"class":201}," #999",[142,130143,1319],{"class":152},[142,130145,130146],{"class":144,"line":1249},[142,130147,1593],{"class":152},[96,130149,130150],{"start":1223},[99,130151,130152],{},"表格的细线边框",[14,130154,130155],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[133,130157,130159],{"className":126561,"code":130158,"language":126563,"meta":31,"style":31},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[139,130160,130161,130166,130172,130182],{"__ignoreMap":31},[142,130162,130163],{"class":144,"line":145},[142,130164,130165],{"class":211},"\u002F* 表格细线边框合并 *\u002F\n",[142,130167,130168,130170],{"class":144,"line":64},[142,130169,290],{"class":51329},[142,130171,15601],{"class":152},[142,130173,130174,130176,130178,130180],{"class":144,"line":1208},[142,130175,70607],{"class":201},[142,130177,51466],{"class":152},[142,130179,65064],{"class":201},[142,130181,1319],{"class":152},[142,130183,130184],{"class":144,"line":1223},[142,130185,1593],{"class":152},[14,130187,130188],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[96,130190,130191],{"start":1229},[99,130192,130193],{},"解决边框额外增加盒子的实际大小的方法：",[1160,130195,130196,130199],{},[99,130197,130198],{},"测量盒子大小的时候,不量边框",[99,130200,130201],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[113,130203,130205],{"id":130204},"_912-内边距","9.1.2 内边距",[96,130207,130208,130211],{},[99,130209,130210],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[99,130212,129922],{},[290,130214,130215,130225],{},[293,130216,130217],{},[296,130218,130219,130222],{},[299,130220,130221],{"align":23765},"值的个数",[299,130223,130224],{"align":23765},"表达意思",[337,130226,130227,130235,130243,130251],{},[296,130228,130229,130232],{},[342,130230,130231],{"align":23765},"padding: 5px;",[342,130233,130234],{"align":23765},"1个值，代表上下左右都有5个元素",[296,130236,130237,130240],{},[342,130238,130239],{"align":23765},"padding: 5px 10px;",[342,130241,130242],{"align":23765},"2个值，代表上下内边距为5像素，左右内边距为10像素",[296,130244,130245,130248],{},[342,130246,130247],{"align":23765},"padding: 5px 10px 20px;",[342,130249,130250],{"align":23765},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[296,130252,130253,130256],{},[342,130254,130255],{"align":23765},"padding: 5px 10px 20px 30px;",[342,130257,130258],{"align":23765},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[290,130260,130261,130269],{},[293,130262,130263],{},[296,130264,130265,130267],{},[299,130266,129163],{"align":23765},[299,130268,102705],{"align":23765},[337,130270,130271,130279,130287,130295],{},[296,130272,130273,130276],{},[342,130274,130275],{"align":23765},"padding-left",[342,130277,130278],{"align":23765},"左内边距",[296,130280,130281,130284],{},[342,130282,130283],{"align":23765},"padding-right",[342,130285,130286],{"align":23765},"右内边距",[296,130288,130289,130292],{},[342,130290,130291],{"align":23765},"padding-top",[342,130293,130294],{"align":23765},"上内边距",[296,130296,130297,130300],{},[342,130298,130299],{"align":23765},"padding-bottom",[342,130301,130302],{"align":23765},"下内边距",[96,130304,130305],{"start":1208},[99,130306,130307],{},"内边距会影响盒子的实际大小",[14,130309,130310],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130312,130313],{},"①内容和边框有了距离，添加了内边距",[14,130315,130316],{},"②padding影响了盒子实际大小",[14,130318,130319],{},"内边距对盒子大小的影响：",[14,130321,130322],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130324,130325],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130327,44],{},[14,130329,130330],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[113,130332,130334],{"id":130333},"_913-外边距","9.1.3 外边距",[96,130336,130337],{},[99,130338,130339],{},"控制盒子与盒子之间的距离",[290,130341,130342,130350],{},[293,130343,130344],{},[296,130345,130346,130348],{},[299,130347,129163],{"align":23765},[299,130349,102705],{"align":23765},[337,130351,130352,130360,130368,130376],{},[296,130353,130354,130357],{},[342,130355,130356],{"align":23765},"margin-left",[342,130358,130359],{"align":23765},"左外边距",[296,130361,130362,130365],{},[342,130363,130364],{"align":23765},"margin-right",[342,130366,130367],{"align":23765},"右外边距",[296,130369,130370,130373],{},[342,130371,130372],{"align":23765},"margin-top",[342,130374,130375],{"align":23765},"上外边距",[296,130377,130378,130381],{},[342,130379,130380],{"align":23765},"margin-bottom",[342,130382,130383],{"align":23765},"下外边距",[96,130385,130386],{"start":64},[99,130387,130388],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130390,130391],{},"①盒子必须指定了宽度（width）",[14,130393,130394],{},"②盒子左右的外边距都设置为 auto",[133,130396,130398],{"className":126561,"code":130397,"language":126563,"meta":31,"style":31},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[139,130399,130400,130405,130412,130428],{"__ignoreMap":31},[142,130401,130402],{"class":144,"line":145},[142,130403,130404],{"class":211},"\u002F* margin 复合写法（同上） *\u002F\n",[142,130406,130407,130410],{"class":144,"line":64},[142,130408,130409],{"class":1991},".box",[142,130411,15601],{"class":152},[142,130413,130414,130416,130418,130420,130422,130425],{"class":144,"line":1208},[142,130415,70499],{"class":201},[142,130417,51466],{"class":152},[142,130419,344],{"class":201},[142,130421,51585],{"class":201},[142,130423,130424],{"class":152},";  ",[142,130426,130427],{"class":211},"\u002F* 块级盒子水平居中 *\u002F\n",[142,130429,130430],{"class":144,"line":1223},[142,130431,1593],{"class":152},[96,130433,130434],{"start":1208},[99,130435,130436],{},"外边距塌陷问题",[14,130438,130439],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[29,130441],{"style":126417,"src":130442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130444,130445],{},"解决方案：",[14,130447,130448],{},"①可以为父亲元素定义上边距",[133,130450,130451],{"className":126561,"code":130397,"language":126563,"meta":31,"style":31},[139,130452,130453,130457,130463,130477],{"__ignoreMap":31},[142,130454,130455],{"class":144,"line":145},[142,130456,130404],{"class":211},[142,130458,130459,130461],{"class":144,"line":64},[142,130460,130409],{"class":1991},[142,130462,15601],{"class":152},[142,130464,130465,130467,130469,130471,130473,130475],{"class":144,"line":1208},[142,130466,70499],{"class":201},[142,130468,51466],{"class":152},[142,130470,344],{"class":201},[142,130472,51585],{"class":201},[142,130474,130424],{"class":152},[142,130476,130427],{"class":211},[142,130478,130479],{"class":144,"line":1223},[142,130480,1593],{"class":152},[14,130482,130483],{},"②可以为父亲元素定义上内边距",[14,130485,130486],{},"③可以为父亲元素添加overflow:hidden",[29,130488],{"style":126417,"src":130489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[133,130491,130492],{"className":126561,"code":130397,"language":126563,"meta":31,"style":31},[139,130493,130494,130498,130504,130518],{"__ignoreMap":31},[142,130495,130496],{"class":144,"line":145},[142,130497,130404],{"class":211},[142,130499,130500,130502],{"class":144,"line":64},[142,130501,130409],{"class":1991},[142,130503,15601],{"class":152},[142,130505,130506,130508,130510,130512,130514,130516],{"class":144,"line":1208},[142,130507,70499],{"class":201},[142,130509,51466],{"class":152},[142,130511,344],{"class":201},[142,130513,51585],{"class":201},[142,130515,130424],{"class":152},[142,130517,130427],{"class":211},[142,130519,130520],{"class":144,"line":1223},[142,130521,1593],{"class":152},[29,130523],{"style":126417,"src":130524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130526,130527],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130529,130530],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[113,130532,130534],{"id":130533},"_914-清除内外边距","9.1.4 清除内外边距",[14,130536,130537],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[133,130539,130540],{"className":126561,"code":130397,"language":126563,"meta":31,"style":31},[139,130541,130542,130546,130552,130566],{"__ignoreMap":31},[142,130543,130544],{"class":144,"line":145},[142,130545,130404],{"class":211},[142,130547,130548,130550],{"class":144,"line":64},[142,130549,130409],{"class":1991},[142,130551,15601],{"class":152},[142,130553,130554,130556,130558,130560,130562,130564],{"class":144,"line":1208},[142,130555,70499],{"class":201},[142,130557,51466],{"class":152},[142,130559,344],{"class":201},[142,130561,51585],{"class":201},[142,130563,130424],{"class":152},[142,130565,130427],{"class":211},[142,130567,130568],{"class":144,"line":1223},[142,130569,1593],{"class":152},[14,130571,130572],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[113,130574,130576],{"id":130575},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1160,130578,130579,130582,130585,130588,130591,130594],{},[99,130580,130581],{},"文件→打开 ：可以打开我们要测量的图片",[99,130583,130584],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[99,130586,130587],{},"右击标尺，把里面的单位改为像素",[99,130589,130590],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[99,130592,130593],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[99,130595,130596],{},"用选区拖动 可以测量大小",[29,130598],{"style":126417,"src":130599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1160,130601,130602,130605],{},[99,130603,130604],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[99,130606,130607],{},"吸管取色工具",[29,130609],{"style":126417,"src":130610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[113,130612,130614],{"id":130613},"_916-案例","9.1.6 案例",[96,130616,130617],{},[99,130618,130619],{},"小米商品",[29,130621],{"style":126417,"src":130622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[133,130624,130625],{"className":126561,"code":130397,"language":126563,"meta":31,"style":31},[139,130626,130627,130631,130637,130651],{"__ignoreMap":31},[142,130628,130629],{"class":144,"line":145},[142,130630,130404],{"class":211},[142,130632,130633,130635],{"class":144,"line":64},[142,130634,130409],{"class":1991},[142,130636,15601],{"class":152},[142,130638,130639,130641,130643,130645,130647,130649],{"class":144,"line":1208},[142,130640,70499],{"class":201},[142,130642,51466],{"class":152},[142,130644,344],{"class":201},[142,130646,51585],{"class":201},[142,130648,130424],{"class":152},[142,130650,130427],{"class":211},[142,130652,130653],{"class":144,"line":1223},[142,130654,1593],{"class":152},[96,130656,130657],{"start":64},[99,130658,130659],{},"快报模块",[29,130661],{"style":126417,"src":130662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[133,130664,130666],{"className":127308,"code":130665,"language":127310,"meta":31,"style":31},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[139,130667,130668,130673,130688,130693],{"__ignoreMap":31},[142,130669,130670],{"class":144,"line":145},[142,130671,130672],{"class":211},"\u003C!-- HTML 代码示例 -->\n",[142,130674,130675,130677,130679,130681,130683,130686],{"class":144,"line":64},[142,130676,1063],{"class":152},[142,130678,51640],{"class":51329},[142,130680,53515],{"class":1991},[142,130682,198],{"class":152},[142,130684,130685],{"class":257},"\"example\"",[142,130687,51336],{"class":152},[142,130689,130690],{"class":144,"line":1208},[142,130691,130692],{"class":152},"  示例内容\n",[142,130694,130695,130697,130699],{"class":144,"line":1223},[142,130696,51814],{"class":152},[142,130698,51640],{"class":51329},[142,130700,51336],{"class":152},[113,130702,130704],{"id":130703},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[96,130706,130707],{},[99,130708,130709],{},"圆角边框",[14,130711,130712],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[29,130714],{"style":126417,"src":130715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[133,130717,130719],{"className":126561,"code":130718,"language":126563,"meta":31,"style":31},"div {\n  border: 1px solid #ccc;\n}\n",[139,130720,130721,130727,130743],{"__ignoreMap":31},[142,130722,130723,130725],{"class":144,"line":145},[142,130724,51640],{"class":51329},[142,130726,15601],{"class":152},[142,130728,130729,130731,130733,130735,130737,130739,130741],{"class":144,"line":64},[142,130730,70925],{"class":201},[142,130732,51466],{"class":152},[142,130734,370],{"class":201},[142,130736,51521],{"class":148},[142,130738,51550],{"class":201},[142,130740,129953],{"class":201},[142,130742,1319],{"class":152},[142,130744,130745],{"class":144,"line":1208},[142,130746,1593],{"class":152},[14,130748,130749],{},"解释:",[1160,130751,130752,130755,130758,130761,130764],{},[99,130753,130754],{},"参数值可以为数值或百分比的形式",[99,130756,130757],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[99,130759,130760],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[99,130762,130763],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[99,130765,130766],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[96,130768,130769],{"start":64},[99,130770,130771],{},"盒子阴影",[133,130773,130775],{"className":126561,"code":130774,"language":126563,"meta":31,"style":31},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[139,130776,130777,130783,130820],{"__ignoreMap":31},[142,130778,130779,130781],{"class":144,"line":145},[142,130780,51640],{"class":51329},[142,130782,15601],{"class":152},[142,130784,130785,130788,130790,130792,130794,130796,130798,130800,130802,130804,130806,130808,130810,130812,130814,130816,130818],{"class":144,"line":64},[142,130786,130787],{"class":201},"  box-shadow",[142,130789,51466],{"class":152},[142,130791,344],{"class":201},[142,130793,14784],{"class":201},[142,130795,51521],{"class":148},[142,130797,2066],{"class":201},[142,130799,51521],{"class":148},[142,130801,78796],{"class":201},[142,130803,153],{"class":152},[142,130805,344],{"class":201},[142,130807,12464],{"class":152},[142,130809,344],{"class":201},[142,130811,12464],{"class":152},[142,130813,344],{"class":201},[142,130815,12464],{"class":152},[142,130817,86239],{"class":201},[142,130819,2747],{"class":152},[142,130821,130822],{"class":144,"line":1208},[142,130823,1593],{"class":152},[290,130825,130826,130834],{},[293,130827,130828],{},[296,130829,130830,130832],{},[299,130831,305],{"align":23765},[299,130833,27518],{"align":23765},[337,130835,130836,130844,130852,130860,130868,130876],{},[296,130837,130838,130841],{},[342,130839,130840],{"align":23765},"h-shadow",[342,130842,130843],{"align":23765},"必需,水平阴影的位置,允许负值",[296,130845,130846,130849],{},[342,130847,130848],{"align":23765},"v-shadow",[342,130850,130851],{"align":23765},"必需,垂直阴影的位置,允许负值",[296,130853,130854,130857],{},[342,130855,130856],{"align":23765},"blur",[342,130858,130859],{"align":23765},"可选,模糊距离,就是影子的虚实",[296,130861,130862,130865],{},[342,130863,130864],{"align":23765},"spread",[342,130866,130867],{"align":23765},"可选,阴影尺寸",[296,130869,130870,130873],{},[342,130871,130872],{"align":23765},"color",[342,130874,130875],{"align":23765},"可选,阴影的颜色",[296,130877,130878,130881],{},[342,130879,130880],{"align":23765},"inset",[342,130882,130883],{"align":23765},"可选,将外部阴影(outset)改为内部阴影",[96,130885,130886],{"start":1208},[99,130887,130888],{},"文字阴影",[133,130890,130892],{"className":126561,"code":130891,"language":126563,"meta":31,"style":31},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[139,130893,130894,130900,130939],{"__ignoreMap":31},[142,130895,130896,130898],{"class":144,"line":145},[142,130897,14],{"class":51329},[142,130899,15601],{"class":152},[142,130901,130902,130905,130907,130909,130911,130913,130915,130917,130919,130921,130923,130925,130927,130929,130931,130933,130935,130937],{"class":144,"line":64},[142,130903,130904],{"class":201},"  text-shadow",[142,130906,51466],{"class":152},[142,130908,370],{"class":201},[142,130910,51521],{"class":148},[142,130912,25147],{"class":201},[142,130914,51521],{"class":148},[142,130916,14784],{"class":201},[142,130918,51521],{"class":148},[142,130920,78796],{"class":201},[142,130922,153],{"class":152},[142,130924,344],{"class":201},[142,130926,12464],{"class":152},[142,130928,344],{"class":201},[142,130930,12464],{"class":152},[142,130932,344],{"class":201},[142,130934,12464],{"class":152},[142,130936,100530],{"class":201},[142,130938,2747],{"class":152},[142,130940,130941],{"class":144,"line":1208},[142,130942,1593],{"class":152},[290,130944,130945,130953],{},[293,130946,130947],{},[296,130948,130949,130951],{},[299,130950,305],{"align":23765},[299,130952,27518],{"align":23765},[337,130954,130955,130961,130968,130975],{},[296,130956,130957,130959],{},[342,130958,130840],{"align":23765},[342,130960,130843],{"align":23765},[296,130962,130963,130965],{},[342,130964,130848],{"align":23765},[342,130966,130967],{"align":23765},"必需,垂直阴影位置,允许负值",[296,130969,130970,130972],{},[342,130971,130856],{"align":23765},[342,130973,130974],{"align":23765},"可选,模糊的距离",[296,130976,130977,130979],{},[342,130978,130872],{"align":23765},[342,130980,130875],{"align":23765},[84,130982,130984],{"id":130983},"_92-浮动","9.2 浮动",[113,130986,130988],{"id":130987},"_921-浮动介绍","9.2.1 浮动介绍",[14,130990,130991],{},"在16.2中详细介绍",[113,130993,130995],{"id":130994},"_922-清除浮动","9.2.2 清除浮动",[96,130997,130998,131001],{},[99,130999,131000],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[99,131002,131003],{},"清除浮动的本质",[14,131005,131006],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131008,9054],{},[1160,131010,131011,131014,131017],{},[99,131012,131013],{},"如果父盒子本身有高度，则不需要清除浮动",[99,131015,131016],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[99,131018,131019],{},"父级有了高度，就不会影响下面的标准流了",[96,131021,131022],{"start":1208},[99,131023,131024],{},"清除浮动样式",[133,131026,131028],{"className":126561,"code":131027,"language":126563,"meta":31,"style":31},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[139,131029,131030,131037,131048,131052,131059,131069],{"__ignoreMap":31},[142,131031,131032,131035],{"class":144,"line":145},[142,131033,131034],{"class":1991},".left",[142,131036,15601],{"class":152},[142,131038,131039,131042,131044,131046],{"class":144,"line":64},[142,131040,131041],{"class":201},"  float",[142,131043,51466],{"class":152},[142,131045,23765],{"class":201},[142,131047,1319],{"class":152},[142,131049,131050],{"class":144,"line":1208},[142,131051,1593],{"class":152},[142,131053,131054,131057],{"class":144,"line":1223},[142,131055,131056],{"class":1991},".right",[142,131058,15601],{"class":152},[142,131060,131061,131063,131065,131067],{"class":144,"line":1229},[142,131062,131041],{"class":201},[142,131064,51466],{"class":152},[142,131066,72551],{"class":201},[142,131068,1319],{"class":152},[142,131070,131071],{"class":144,"line":1243},[142,131072,1593],{"class":152},[290,131074,131075,131083],{},[293,131076,131077],{},[296,131078,131079,131081],{},[299,131080,127025],{"align":23765},[299,131082,27518],{"align":23765},[337,131084,131085,131092,131099],{},[296,131086,131087,131089],{},[342,131088,23765],{"align":23765},[342,131090,131091],{"align":23765},"不允许左侧有浮动元素（清除左侧浮动的影响）",[296,131093,131094,131096],{},[342,131095,72551],{"align":23765},[342,131097,131098],{"align":23765},"不允许右侧有浮动元素（清除右侧浮动的影响）",[296,131100,131101,131104],{},[342,131102,131103],{"align":23765},"both",[342,131105,131106],{"align":23765},"同时清除左右侧浮动的影响",[14,131108,131109],{},"法一",[14,131111,131112],{},"额外标签法也称为隔墙法",[14,131114,131115],{},"使用方式：",[14,131117,131118],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[133,131120,131121],{"className":126561,"code":131027,"language":126563,"meta":31,"style":31},[139,131122,131123,131129,131139,131143,131149,131159],{"__ignoreMap":31},[142,131124,131125,131127],{"class":144,"line":145},[142,131126,131034],{"class":1991},[142,131128,15601],{"class":152},[142,131130,131131,131133,131135,131137],{"class":144,"line":64},[142,131132,131041],{"class":201},[142,131134,51466],{"class":152},[142,131136,23765],{"class":201},[142,131138,1319],{"class":152},[142,131140,131141],{"class":144,"line":1208},[142,131142,1593],{"class":152},[142,131144,131145,131147],{"class":144,"line":1223},[142,131146,131056],{"class":1991},[142,131148,15601],{"class":152},[142,131150,131151,131153,131155,131157],{"class":144,"line":1229},[142,131152,131041],{"class":201},[142,131154,51466],{"class":152},[142,131156,72551],{"class":201},[142,131158,1319],{"class":152},[142,131160,131161],{"class":144,"line":1243},[142,131162,1593],{"class":152},[14,131164,131165],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131167,131168],{},"优点： 通俗易懂，书写方便",[14,131170,131171],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131173,131174],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131176,131177],{},"法二",[14,131179,131180],{},"父级添加overflow属性",[133,131182,131183],{"className":126561,"code":131027,"language":126563,"meta":31,"style":31},[139,131184,131185,131191,131201,131205,131211,131221],{"__ignoreMap":31},[142,131186,131187,131189],{"class":144,"line":145},[142,131188,131034],{"class":1991},[142,131190,15601],{"class":152},[142,131192,131193,131195,131197,131199],{"class":144,"line":64},[142,131194,131041],{"class":201},[142,131196,51466],{"class":152},[142,131198,23765],{"class":201},[142,131200,1319],{"class":152},[142,131202,131203],{"class":144,"line":1208},[142,131204,1593],{"class":152},[142,131206,131207,131209],{"class":144,"line":1223},[142,131208,131056],{"class":1991},[142,131210,15601],{"class":152},[142,131212,131213,131215,131217,131219],{"class":144,"line":1229},[142,131214,131041],{"class":201},[142,131216,51466],{"class":152},[142,131218,72551],{"class":201},[142,131220,1319],{"class":152},[142,131222,131223],{"class":144,"line":1243},[142,131224,1593],{"class":152},[14,131226,131227],{},"overflow: hidden;",[14,131229,131230],{},"优点：代码简洁",[14,131232,131233],{},"缺点：无法显示溢出的部分",[14,131235,131236],{},"注意：是给父元素添加代码",[14,131238,131239],{},"法三",[14,131241,131242],{},"父级添加after伪元素",[14,131244,131245,131248],{},[131246,131247],"after",{}," 方式是额外标签法的升级版",[14,131250,131251],{},"使用的时候复制就可以",[133,131253,131254],{"className":126561,"code":131027,"language":126563,"meta":31,"style":31},[139,131255,131256,131262,131272,131276,131282,131292],{"__ignoreMap":31},[142,131257,131258,131260],{"class":144,"line":145},[142,131259,131034],{"class":1991},[142,131261,15601],{"class":152},[142,131263,131264,131266,131268,131270],{"class":144,"line":64},[142,131265,131041],{"class":201},[142,131267,51466],{"class":152},[142,131269,23765],{"class":201},[142,131271,1319],{"class":152},[142,131273,131274],{"class":144,"line":1208},[142,131275,1593],{"class":152},[142,131277,131278,131280],{"class":144,"line":1223},[142,131279,131056],{"class":1991},[142,131281,15601],{"class":152},[142,131283,131284,131286,131288,131290],{"class":144,"line":1229},[142,131285,131041],{"class":201},[142,131287,51466],{"class":152},[142,131289,72551],{"class":201},[142,131291,1319],{"class":152},[142,131293,131294],{"class":144,"line":1243},[142,131295,1593],{"class":152},[14,131297,131298],{},"优点：没有增加标签，结构更简单",[14,131300,131301],{},"缺点：照顾低版本浏览器",[14,131303,131304],{},"代表网站： 百度、淘宝网、网易等",[14,131306,131307],{},"法四",[14,131309,131310],{},"父级添加双伪元素",[133,131312,131313],{"className":126561,"code":131027,"language":126563,"meta":31,"style":31},[139,131314,131315,131321,131331,131335,131341,131351],{"__ignoreMap":31},[142,131316,131317,131319],{"class":144,"line":145},[142,131318,131034],{"class":1991},[142,131320,15601],{"class":152},[142,131322,131323,131325,131327,131329],{"class":144,"line":64},[142,131324,131041],{"class":201},[142,131326,51466],{"class":152},[142,131328,23765],{"class":201},[142,131330,1319],{"class":152},[142,131332,131333],{"class":144,"line":1208},[142,131334,1593],{"class":152},[142,131336,131337,131339],{"class":144,"line":1223},[142,131338,131056],{"class":1991},[142,131340,15601],{"class":152},[142,131342,131343,131345,131347,131349],{"class":144,"line":1229},[142,131344,131041],{"class":201},[142,131346,51466],{"class":152},[142,131348,72551],{"class":201},[142,131350,1319],{"class":152},[142,131352,131353],{"class":144,"line":1243},[142,131354,1593],{"class":152},[14,131356,131357],{},"优点：代码更简洁",[14,131359,131301],{},[14,131361,131362],{},"代表网站：小米、腾讯等",[84,131364,131366],{"id":131365},"_93-ps切图","9.3 PS切图",[113,131368,131370],{"id":131369},"_931-常见图片格式","9.3.1 常见图片格式",[290,131372,131373,131383],{},[293,131374,131375],{},[296,131376,131377,131380],{},[299,131378,131379],{"align":23765},"jpg图像格式",[299,131381,131382],{"align":23765},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[337,131384,131385,131393,131401],{},[296,131386,131387,131390],{},[342,131388,131389],{"align":23765},"gif图像格式",[342,131391,131392],{"align":23765},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[296,131394,131395,131398],{},[342,131396,131397],{"align":23765},"png图像格式",[342,131399,131400],{"align":23765},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[296,131402,131403,131406],{},[342,131404,131405],{"align":23765},"PSD图像格式",[342,131407,131408],{"align":23765},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[113,131410,131412],{"id":131411},"_932-图层切图","9.3.2 图层切图",[14,131414,131415],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131417,131418],{},"按住shift选中两个图层->图层菜单->合并图层",[113,131420,131422],{"id":131421},"_933-切片切图","9.3.3 切片切图",[1160,131424,131425,131428],{},[99,131426,131427],{},"利用切片工具手动划出",[99,131429,131430],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[113,131432,131434],{"id":131433},"_934-切图步骤","9.3.4 切图步骤",[14,131436,131437],{},"用切片工具选中：",[29,131439],{"style":126417,"src":131440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131442,131443],{},"文件 -> 导出",[29,131445],{"style":126417,"src":131446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5155,131448,131449],{},"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":31,"searchDepth":64,"depth":64,"links":131451},[131452,131461,131465],{"id":129888,"depth":64,"text":129889,"children":131453},[131454,131455,131456,131457,131458,131459,131460],{"id":129913,"depth":1208,"text":129914},{"id":130204,"depth":1208,"text":130205},{"id":130333,"depth":1208,"text":130334},{"id":130533,"depth":1208,"text":130534},{"id":130575,"depth":1208,"text":130576},{"id":130613,"depth":1208,"text":130614},{"id":130703,"depth":1208,"text":130704},{"id":130983,"depth":64,"text":130984,"children":131462},[131463,131464],{"id":130987,"depth":1208,"text":130988},{"id":130994,"depth":1208,"text":130995},{"id":131365,"depth":64,"text":131366,"children":131466},[131467,131468,131469,131470],{"id":131369,"depth":1208,"text":131370},{"id":131411,"depth":1208,"text":131412},{"id":131421,"depth":1208,"text":131422},{"id":131433,"depth":1208,"text":131434},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129880,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131477,"title":131478,"body":131479,"description":66,"extension":67,"meta":132120,"navigation":69,"path":132121,"seo":132122,"stem":132123,"__hash__":132124},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131480,"toc":132108},[131481,131484,131488,131514,131548,131552,131556,131559,131601,131608,131618,131626,131628,131631,131634,131637,131644,131658,131662,131665,131694,131698,131701,131715,131719,131722,131750,131754,131757,131783,131787,131792,131825,131830,131858,131862,131879,131925,131930,131974,131991,132098,132106],[10,131482,131478],{"id":131483},"_10-css规范与学成在线案例",[84,131485,131487],{"id":131486},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[96,131489,131490,131496,131502,131508],{},[99,131491,131492,131495],{},[302,131493,131494],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[99,131497,131498,131501],{},[302,131499,131500],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[99,131503,131504,131507],{},[302,131505,131506],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[99,131509,131510,131513],{},[302,131511,131512],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[133,131515,131516],{"className":126561,"code":129925,"language":126563,"meta":31,"style":31},[139,131517,131518,131522,131528,131544],{"__ignoreMap":31},[142,131519,131520],{"class":144,"line":145},[142,131521,129932],{"class":211},[142,131523,131524,131526],{"class":144,"line":64},[142,131525,51640],{"class":51329},[142,131527,15601],{"class":152},[142,131529,131530,131532,131534,131536,131538,131540,131542],{"class":144,"line":1208},[142,131531,70925],{"class":201},[142,131533,51466],{"class":152},[142,131535,370],{"class":201},[142,131537,51521],{"class":148},[142,131539,51550],{"class":201},[142,131541,129953],{"class":201},[142,131543,1319],{"class":152},[142,131545,131546],{"class":144,"line":1223},[142,131547,1593],{"class":152},[84,131549,131551],{"id":131550},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[113,131553,131555],{"id":131554},"_1021-header头部制作","10.2.1 header头部制作",[29,131557],{"style":126417,"src":131558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1160,131560,131561,131568,131575,131581,131588,131595],{},[99,131562,131563,131564,131567],{},"1号是版心盒子 ",[302,131565,131566],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[99,131569,131570,131571,131574],{},"版心盒子 里面包含 2号盒子 ",[302,131572,131573],{},"logo"," 图标",[99,131576,131577,131578,131580],{},"版心盒子 里面包含 3号盒子 ",[302,131579,53742],{}," 导航栏",[99,131582,131583,131584,131587],{},"版心盒子 里面包含 4号盒子 ",[302,131585,131586],{},"search"," 搜索框",[99,131589,131590,131591,131594],{},"版心盒子 里面包含 5号盒子 ",[302,131592,131593],{},"user"," 个人信息",[99,131596,131597,131598],{},"注意，要求里面的 ",[302,131599,131600],{},"4个子盒子 必须都浮动",[96,131602,131603],{},[99,131604,131605],{},[302,131606,131607],{},"导航栏注意点:",[14,131609,131610,131611,131614,131615],{},"实际开发中， ",[302,131612,131613],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[302,131616,131617],{},"用 li 包含链接(li+a)的做法",[1160,131619,131620,131623],{},[99,131621,131622],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[99,131624,131625],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131627,9054],{},[14,131629,131630],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131632,131633],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131635,131636],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[96,131638,131639],{"start":64},[99,131640,131641],{},[302,131642,131643],{},"4号盒子search的细节：",[1160,131645,131646,131649,131652],{},[99,131647,131648],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[99,131650,131651],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[99,131653,131654,131657],{},[139,131655,131656],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[113,131659,131661],{"id":131660},"_1022-banner制作","10.2.2 banner制作",[29,131663],{"style":126417,"src":131664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1160,131666,131667,131674,131680,131687],{},[99,131668,131669,131670,131673],{},"1号盒子是通栏的大盒子 ",[302,131671,131672],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[99,131675,131676,131677,131679],{},"2号盒子是版心 ",[302,131678,948],{}," ， 要水平居中对齐",[99,131681,131682,131683,131686],{},"3号盒子版心内，左对齐 ",[302,131684,131685],{},"subnav"," 侧导航栏",[99,131688,131689,131690,131693],{},"4号盒子版心内，右对齐 ",[302,131691,131692],{},"course"," 课程",[113,131695,131697],{"id":131696},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[29,131699],{"style":126417,"src":131700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1160,131702,131703,131706,131709,131712],{},[99,131704,131705],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[99,131707,131708],{},"1号盒子是标题 H3 左侧浮动",[99,131710,131711],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[99,131713,131714],{},"3号盒子 右浮动 mod 修改",[113,131716,131718],{"id":131717},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[29,131720],{"style":126417,"src":131721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1160,131723,131724,131730,131737,131744,131747],{},[99,131725,131726,131727,131729],{},"1号盒子为最大的盒子 ",[302,131728,53743],{}," 版心水平居中对齐",[99,131731,131732,131733,131736],{},"2号盒子为上面部分 ",[302,131734,131735],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[99,131738,131739,131740,131743],{},"3号盒子为底下部分 ",[302,131741,131742],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[99,131745,131746],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[99,131748,131749],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[113,131751,131753],{"id":131752},"_1025-底部模块制作","10.2.5 底部模块制作",[29,131755],{"style":126417,"src":131756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1160,131758,131759,131766,131769,131776],{},[99,131760,131761,131762,131765],{},"1号盒子通栏大盒子 底部 ",[302,131763,131764],{},"footer"," 给高度 底色是白色",[99,131767,131768],{},"2号盒子版心水平居中",[99,131770,131771,131772,131775],{},"3号盒子版权 ",[302,131773,131774],{},"copyright"," 左对齐",[99,131777,131778,131779,131782],{},"4号盒子 链接组 ",[302,131780,131781],{},"links"," 右对齐",[113,131784,131786],{"id":131785},"_1026-代码模块","10.2.6 代码模块",[96,131788,131789],{},[99,131790,131791],{},"html部分",[133,131793,131795],{"className":127308,"code":131794,"language":127310,"meta":31,"style":31},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[139,131796,131797],{"__ignoreMap":31},[142,131798,131799,131801,131803,131805,131807,131810,131813,131815,131818,131821,131823],{"class":144,"line":145},[142,131800,1063],{"class":152},[142,131802,391],{"class":51329},[142,131804,61086],{"class":1991},[142,131806,198],{"class":152},[142,131808,131809],{"class":257},"\"https:\u002F\u002Fexample.com\"",[142,131811,131812],{"class":1991}," target",[142,131814,198],{"class":152},[142,131816,131817],{"class":257},"\"_blank\"",[142,131819,131820],{"class":152},">链接文字\u003C\u002F",[142,131822,391],{"class":51329},[142,131824,51336],{"class":152},[96,131826,131827],{"start":64},[99,131828,131829],{},"css部分",[133,131831,131832],{"className":127308,"code":131794,"language":127310,"meta":31,"style":31},[139,131833,131834],{"__ignoreMap":31},[142,131835,131836,131838,131840,131842,131844,131846,131848,131850,131852,131854,131856],{"class":144,"line":145},[142,131837,1063],{"class":152},[142,131839,391],{"class":51329},[142,131841,61086],{"class":1991},[142,131843,198],{"class":152},[142,131845,131809],{"class":257},[142,131847,131812],{"class":1991},[142,131849,198],{"class":152},[142,131851,131817],{"class":257},[142,131853,131820],{"class":152},[142,131855,391],{"class":51329},[142,131857,51336],{"class":152},[113,131859,131861],{"id":131860},"_1027-收获","10.2.7 收获",[96,131863,131864,131867,131870,131873,131876],{},[99,131865,131866],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[99,131868,131869],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[99,131871,131872],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[99,131874,131875],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[99,131877,131878],{},"遗忘代码",[133,131880,131882],{"className":126561,"code":131881,"language":126563,"meta":31,"style":31},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[139,131883,131884,131906,131911,131921],{"__ignoreMap":31},[142,131885,131886,131888,131890,131892,131894,131896,131898,131900,131902,131904],{"class":144,"line":145},[142,131887,51640],{"class":51329},[142,131889,12464],{"class":152},[142,131891,14],{"class":51329},[142,131893,12464],{"class":152},[142,131895,10],{"class":51329},[142,131897,12464],{"class":152},[142,131899,1160],{"class":51329},[142,131901,12464],{"class":152},[142,131903,99],{"class":51329},[142,131905,15601],{"class":152},[142,131907,131908],{"class":144,"line":64},[142,131909,131910],{"class":211},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[142,131912,131913,131915,131917,131919],{"class":144,"line":1208},[142,131914,128177],{"class":201},[142,131916,51466],{"class":152},[142,131918,60898],{"class":201},[142,131920,1319],{"class":152},[142,131922,131923],{"class":144,"line":1223},[142,131924,1593],{"class":152},[96,131926,131927],{"start":1243},[99,131928,131929],{},"html引css的程序",[133,131931,131932],{"className":126561,"code":131881,"language":126563,"meta":31,"style":31},[139,131933,131934,131956,131960,131970],{"__ignoreMap":31},[142,131935,131936,131938,131940,131942,131944,131946,131948,131950,131952,131954],{"class":144,"line":145},[142,131937,51640],{"class":51329},[142,131939,12464],{"class":152},[142,131941,14],{"class":51329},[142,131943,12464],{"class":152},[142,131945,10],{"class":51329},[142,131947,12464],{"class":152},[142,131949,1160],{"class":51329},[142,131951,12464],{"class":152},[142,131953,99],{"class":51329},[142,131955,15601],{"class":152},[142,131957,131958],{"class":144,"line":64},[142,131959,131910],{"class":211},[142,131961,131962,131964,131966,131968],{"class":144,"line":1208},[142,131963,128177],{"class":201},[142,131965,51466],{"class":152},[142,131967,60898],{"class":201},[142,131969,1319],{"class":152},[142,131971,131972],{"class":144,"line":1223},[142,131973,1593],{"class":152},[96,131975,131976,131979,131982,131985,131988],{"start":1249},[99,131977,131978],{},"浮动的盒子不会有外边距合并问题",[99,131980,131981],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[99,131983,131984],{},"ctrl+g快速定位行；shift+alt多个光标",[99,131986,131987],{},"学习上方各个模块的选择器起名方法，以后就这样用",[99,131989,131990],{},"在写选择器时尽量写全一些，例如",[133,131992,131994],{"className":126561,"code":131993,"language":126563,"meta":31,"style":31},"\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",[139,131995,131996,132001,132017,132022,132037,132042,132057,132062,132077,132082],{"__ignoreMap":31},[142,131997,131998],{"class":144,"line":145},[142,131999,132000],{"class":211},"\u002F* 静态定位（默认） *\u002F\n",[142,132002,132003,132006,132008,132010,132012,132015],{"class":144,"line":64},[142,132004,132005],{"class":1991},".static",[142,132007,79836],{"class":152},[142,132009,128921],{"class":201},[142,132011,51466],{"class":152},[142,132013,132014],{"class":201},"static",[142,132016,129491],{"class":152},[142,132018,132019],{"class":144,"line":1208},[142,132020,132021],{"class":211},"\u002F* 相对定位 *\u002F\n",[142,132023,132024,132027,132029,132031,132033,132035],{"class":144,"line":1223},[142,132025,132026],{"class":1991},".relative",[142,132028,79836],{"class":152},[142,132030,128921],{"class":201},[142,132032,51466],{"class":152},[142,132034,54793],{"class":201},[142,132036,129491],{"class":152},[142,132038,132039],{"class":144,"line":1229},[142,132040,132041],{"class":211},"\u002F* 绝对定位 *\u002F\n",[142,132043,132044,132047,132049,132051,132053,132055],{"class":144,"line":1243},[142,132045,132046],{"class":1991},".absolute",[142,132048,79836],{"class":152},[142,132050,128921],{"class":201},[142,132052,51466],{"class":152},[142,132054,54860],{"class":201},[142,132056,129491],{"class":152},[142,132058,132059],{"class":144,"line":1249},[142,132060,132061],{"class":211},"\u002F* 固定定位 *\u002F\n",[142,132063,132064,132067,132069,132071,132073,132075],{"class":144,"line":1340},[142,132065,132066],{"class":1991},".fixed",[142,132068,79836],{"class":152},[142,132070,128921],{"class":201},[142,132072,51466],{"class":152},[142,132074,86262],{"class":201},[142,132076,129491],{"class":152},[142,132078,132079],{"class":144,"line":1346},[142,132080,132081],{"class":211},"\u002F* 粘性定位 *\u002F\n",[142,132083,132084,132087,132089,132091,132093,132096],{"class":144,"line":1358},[142,132085,132086],{"class":1991},".sticky",[142,132088,79836],{"class":152},[142,132090,128921],{"class":201},[142,132092,51466],{"class":152},[142,132094,132095],{"class":201},"sticky",[142,132097,129491],{"class":152},[96,132099,132100,132103],{"start":1645},[99,132101,132102],{},"一定要用好注释",[99,132104,132105],{},"浮动的盒子不会有外边距合并的问题",[5155,132107,131449],{},{"title":31,"searchDepth":64,"depth":64,"links":132109},[132110,132111],{"id":131486,"depth":64,"text":131487},{"id":131550,"depth":64,"text":131551,"children":132112},[132113,132114,132115,132116,132117,132118,132119],{"id":131554,"depth":1208,"text":131555},{"id":131660,"depth":1208,"text":131661},{"id":131696,"depth":1208,"text":131697},{"id":131717,"depth":1208,"text":131718},{"id":131752,"depth":1208,"text":131753},{"id":131785,"depth":1208,"text":131786},{"id":131860,"depth":1208,"text":131861},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131478,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132126,"title":132127,"body":132128,"description":66,"extension":67,"meta":133614,"navigation":69,"path":133615,"seo":133616,"stem":133617,"__hash__":133618},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132129,"toc":133606},[132130,132133,132137,132141,132152,132156,132173,132217,132250,132253,132270,132273,132276,132320,132324,132328,132331,132334,132338,132341,132352,132415,132456,132459,132474,132528,132536,132539,132550,132604,132630,132633,132646,132700,132732,132786,132809,132863,132866,132869,132876,132930,132951,133005,133008,133011,133096,133104,133161,133184,133188,133191,133209,133213,133232,133286,133324,133328,133331,133334,133356,133360,133368,133371,133376,133387,133390,133394,133408,133452,133455,133459,133462,133467,133493,133498,133575,133578,133582,133585,133588,133591,133594,133597,133600,133603],[10,132131,132127],{"id":132132},"_11-传统布局与定位体系",[84,132134,132136],{"id":132135},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[113,132138,132140],{"id":132139},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1160,132142,132143,132146,132149],{},[99,132144,132145],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[99,132147,132148],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[99,132150,132151],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[113,132153,132155],{"id":132154},"_1112-浮动","11.1.2 浮动",[1160,132157,132158,132161,132164,132167,132170],{},[99,132159,132160],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[99,132162,132163],{},"浮动可以改变元素标签默认的排列方式",[99,132165,132166],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[99,132168,132169],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[99,132171,132172],{},"在使用行内块转换时盒子之间是有空隙的",[133,132174,132175],{"className":126561,"code":131027,"language":126563,"meta":31,"style":31},[139,132176,132177,132183,132193,132197,132203,132213],{"__ignoreMap":31},[142,132178,132179,132181],{"class":144,"line":145},[142,132180,131034],{"class":1991},[142,132182,15601],{"class":152},[142,132184,132185,132187,132189,132191],{"class":144,"line":64},[142,132186,131041],{"class":201},[142,132188,51466],{"class":152},[142,132190,23765],{"class":201},[142,132192,1319],{"class":152},[142,132194,132195],{"class":144,"line":1208},[142,132196,1593],{"class":152},[142,132198,132199,132201],{"class":144,"line":1223},[142,132200,131056],{"class":1991},[142,132202,15601],{"class":152},[142,132204,132205,132207,132209,132211],{"class":144,"line":1229},[142,132206,131041],{"class":201},[142,132208,51466],{"class":152},[142,132210,72551],{"class":201},[142,132212,1319],{"class":152},[142,132214,132215],{"class":144,"line":1243},[142,132216,1593],{"class":152},[290,132218,132219,132227],{},[293,132220,132221],{},[296,132222,132223,132225],{},[299,132224,127025],{"align":23765},[299,132226,27518],{"align":23765},[337,132228,132229,132236,132243],{},[296,132230,132231,132233],{},[342,132232,54766],{"align":23765},[342,132234,132235],{"align":23765},"元素不浮动（默认值）",[296,132237,132238,132240],{},[342,132239,23765],{"align":23765},[342,132241,132242],{"align":23765},"元素向左浮动",[296,132244,132245,132247],{},[342,132246,72551],{"align":23765},[342,132248,132249],{"align":23765},"元素向右浮动",[14,132251,132252],{},"浮动重点：",[1160,132254,132255,132258,132261,132264,132267],{},[99,132256,132257],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[99,132259,132260],{},"浮动的元素会一行内显示并且元素顶部对齐",[99,132262,132263],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[99,132265,132266],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[99,132268,132269],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132271,132272],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132274,132275],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[133,132277,132278],{"className":126561,"code":131027,"language":126563,"meta":31,"style":31},[139,132279,132280,132286,132296,132300,132306,132316],{"__ignoreMap":31},[142,132281,132282,132284],{"class":144,"line":145},[142,132283,131034],{"class":1991},[142,132285,15601],{"class":152},[142,132287,132288,132290,132292,132294],{"class":144,"line":64},[142,132289,131041],{"class":201},[142,132291,51466],{"class":152},[142,132293,23765],{"class":201},[142,132295,1319],{"class":152},[142,132297,132298],{"class":144,"line":1208},[142,132299,1593],{"class":152},[142,132301,132302,132304],{"class":144,"line":1223},[142,132303,131056],{"class":1991},[142,132305,15601],{"class":152},[142,132307,132308,132310,132312,132314],{"class":144,"line":1229},[142,132309,131041],{"class":201},[142,132311,51466],{"class":152},[142,132313,72551],{"class":201},[142,132315,1319],{"class":152},[142,132317,132318],{"class":144,"line":1243},[142,132319,1593],{"class":152},[113,132321,132323],{"id":132322},"_1113-定位","11.1.3 定位",[22027,132325,132327],{"id":132326},"_11131-使用场景","11.1.3.1 使用场景",[14,132329,132330],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132332,132333],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22027,132335,132337],{"id":132336},"_11132-定位组成","11.1.3.2 定位组成",[14,132339,132340],{},"定位 = 定位模式 + 边偏移",[96,132342,132343],{},[99,132344,132345,132348,132349],{},[302,132346,132347],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[302,132350,132351],{},"定位模式",[133,132353,132355],{"className":126561,"code":132354,"language":126563,"meta":31,"style":31},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[139,132356,132357,132363,132377,132394,132411],{"__ignoreMap":31},[142,132358,132359,132361],{"class":144,"line":145},[142,132360,130409],{"class":1991},[142,132362,15601],{"class":152},[142,132364,132365,132368,132370,132372,132374],{"class":144,"line":64},[142,132366,132367],{"class":201},"  position",[142,132369,51466],{"class":152},[142,132371,54793],{"class":201},[142,132373,130424],{"class":152},[142,132375,132376],{"class":211},"\u002F* 定位模式 *\u002F\n",[142,132378,132379,132382,132384,132386,132388,132391],{"class":144,"line":1208},[142,132380,132381],{"class":201},"  top",[142,132383,51466],{"class":152},[142,132385,599],{"class":201},[142,132387,51521],{"class":148},[142,132389,132390],{"class":152},";           ",[142,132392,132393],{"class":211},"\u002F* 边偏移：上 *\u002F\n",[142,132395,132396,132399,132401,132403,132405,132408],{"class":144,"line":1223},[142,132397,132398],{"class":201},"  left",[142,132400,51466],{"class":152},[142,132402,853],{"class":201},[142,132404,51521],{"class":148},[142,132406,132407],{"class":152},";          ",[142,132409,132410],{"class":211},"\u002F* 边偏移：左 *\u002F\n",[142,132412,132413],{"class":144,"line":1229},[142,132414,1593],{"class":152},[290,132416,132417,132426],{},[293,132418,132419],{},[296,132420,132421,132423],{},[299,132422,305],{"align":23765},[299,132424,132425],{"align":23765},"语义",[337,132427,132428,132435,132442,132449],{},[296,132429,132430,132432],{},[342,132431,132014],{"align":23765},[342,132433,132434],{"align":23765},"静态定位",[296,132436,132437,132439],{},[342,132438,54793],{"align":23765},[342,132440,132441],{"align":23765},"相对定位",[296,132443,132444,132446],{},[342,132445,54860],{"align":23765},[342,132447,132448],{"align":23765},"绝对定位",[296,132450,132451,132453],{},[342,132452,86262],{"align":23765},[342,132454,132455],{"align":23765},"固定定位",[14,132457,132458],{},"（1）静态定位：",[1160,132460,132461,132472],{},[99,132462,132463,132464,132467,132468,132471],{},"静态定位是元素的 ",[302,132465,132466],{},"默认定位方式"," ， ",[302,132469,132470],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[99,132473,5210],{},[133,132475,132476],{"className":126561,"code":132354,"language":126563,"meta":31,"style":31},[139,132477,132478,132484,132496,132510,132524],{"__ignoreMap":31},[142,132479,132480,132482],{"class":144,"line":145},[142,132481,130409],{"class":1991},[142,132483,15601],{"class":152},[142,132485,132486,132488,132490,132492,132494],{"class":144,"line":64},[142,132487,132367],{"class":201},[142,132489,51466],{"class":152},[142,132491,54793],{"class":201},[142,132493,130424],{"class":152},[142,132495,132376],{"class":211},[142,132497,132498,132500,132502,132504,132506,132508],{"class":144,"line":1208},[142,132499,132381],{"class":201},[142,132501,51466],{"class":152},[142,132503,599],{"class":201},[142,132505,51521],{"class":148},[142,132507,132390],{"class":152},[142,132509,132393],{"class":211},[142,132511,132512,132514,132516,132518,132520,132522],{"class":144,"line":1223},[142,132513,132398],{"class":201},[142,132515,51466],{"class":152},[142,132517,853],{"class":201},[142,132519,51521],{"class":148},[142,132521,132407],{"class":152},[142,132523,132410],{"class":211},[142,132525,132526],{"class":144,"line":1229},[142,132527,1593],{"class":152},[1160,132529,132530,132533],{},[99,132531,132532],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[99,132534,132535],{},"静态定位在布局时我们几乎不用的",[14,132537,132538],{},"（2）相对定位",[1160,132540,132541,132548],{},[99,132542,132543,132544,132547],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[302,132545,132546],{},"原来的位置"," 来说的（自恋型）",[99,132549,5210],{},[133,132551,132552],{"className":126561,"code":132354,"language":126563,"meta":31,"style":31},[139,132553,132554,132560,132572,132586,132600],{"__ignoreMap":31},[142,132555,132556,132558],{"class":144,"line":145},[142,132557,130409],{"class":1991},[142,132559,15601],{"class":152},[142,132561,132562,132564,132566,132568,132570],{"class":144,"line":64},[142,132563,132367],{"class":201},[142,132565,51466],{"class":152},[142,132567,54793],{"class":201},[142,132569,130424],{"class":152},[142,132571,132376],{"class":211},[142,132573,132574,132576,132578,132580,132582,132584],{"class":144,"line":1208},[142,132575,132381],{"class":201},[142,132577,51466],{"class":152},[142,132579,599],{"class":201},[142,132581,51521],{"class":148},[142,132583,132390],{"class":152},[142,132585,132393],{"class":211},[142,132587,132588,132590,132592,132594,132596,132598],{"class":144,"line":1223},[142,132589,132398],{"class":201},[142,132591,51466],{"class":152},[142,132593,853],{"class":201},[142,132595,51521],{"class":148},[142,132597,132407],{"class":152},[142,132599,132410],{"class":211},[142,132601,132602],{"class":144,"line":1229},[142,132603,1593],{"class":152},[1160,132605,132606],{},[99,132607,132608,132609,132611,132612,132614,132615,132618,132619,132622,132623,132625,132626,132629],{},"相对定位的特点：",[53745,132610],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53745,132613],{},"  ② ",[302,132616,132617],{},"原来"," 在标准流的 ",[302,132620,132621],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53745,132624],{},"  ③因此， ",[302,132627,132628],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132631,132632],{},"（3）绝对定位",[1160,132634,132635,132644],{},[99,132636,132637,132639,132640,132643],{},[302,132638,132448],{}," 是元素在移动位置的时候，是相对于它 ",[302,132641,132642],{},"祖先元素"," 来说的（拼爹型）",[99,132645,5210],{},[133,132647,132648],{"className":126561,"code":132354,"language":126563,"meta":31,"style":31},[139,132649,132650,132656,132668,132682,132696],{"__ignoreMap":31},[142,132651,132652,132654],{"class":144,"line":145},[142,132653,130409],{"class":1991},[142,132655,15601],{"class":152},[142,132657,132658,132660,132662,132664,132666],{"class":144,"line":64},[142,132659,132367],{"class":201},[142,132661,51466],{"class":152},[142,132663,54793],{"class":201},[142,132665,130424],{"class":152},[142,132667,132376],{"class":211},[142,132669,132670,132672,132674,132676,132678,132680],{"class":144,"line":1208},[142,132671,132381],{"class":201},[142,132673,51466],{"class":152},[142,132675,599],{"class":201},[142,132677,51521],{"class":148},[142,132679,132390],{"class":152},[142,132681,132393],{"class":211},[142,132683,132684,132686,132688,132690,132692,132694],{"class":144,"line":1223},[142,132685,132398],{"class":201},[142,132687,51466],{"class":152},[142,132689,853],{"class":201},[142,132691,51521],{"class":148},[142,132693,132407],{"class":152},[142,132695,132410],{"class":211},[142,132697,132698],{"class":144,"line":1229},[142,132699,1593],{"class":152},[1160,132701,132702,132717,132726,132729],{},[99,132703,132704,132705,132707,132708,132710,132711,132713,132714,132716],{},"绝对定位的特点：",[53745,132706],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53745,132709],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53745,132712],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53745,132715],{},"  (4)固定定位",[99,132718,132719,132721,132722,132725],{},[302,132720,132455],{}," 是元素 ",[302,132723,132724],{},"固定于浏览器可视区的位置"," 。（认死理型）",[99,132727,132728],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[99,132730,132731],{},"语法:",[133,132733,132734],{"className":126561,"code":132354,"language":126563,"meta":31,"style":31},[139,132735,132736,132742,132754,132768,132782],{"__ignoreMap":31},[142,132737,132738,132740],{"class":144,"line":145},[142,132739,130409],{"class":1991},[142,132741,15601],{"class":152},[142,132743,132744,132746,132748,132750,132752],{"class":144,"line":64},[142,132745,132367],{"class":201},[142,132747,51466],{"class":152},[142,132749,54793],{"class":201},[142,132751,130424],{"class":152},[142,132753,132376],{"class":211},[142,132755,132756,132758,132760,132762,132764,132766],{"class":144,"line":1208},[142,132757,132381],{"class":201},[142,132759,51466],{"class":152},[142,132761,599],{"class":201},[142,132763,51521],{"class":148},[142,132765,132390],{"class":152},[142,132767,132393],{"class":211},[142,132769,132770,132772,132774,132776,132778,132780],{"class":144,"line":1223},[142,132771,132398],{"class":201},[142,132773,51466],{"class":152},[142,132775,853],{"class":201},[142,132777,51521],{"class":148},[142,132779,132407],{"class":152},[142,132781,132410],{"class":211},[142,132783,132784],{"class":144,"line":1229},[142,132785,1593],{"class":152},[1160,132787,132788,132797],{},[99,132789,132790,132791,132793,132794,132796],{},"特点:",[53745,132792],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53745,132795],{},"  ②固定定位不再占有原先的位置,完全脱标",[99,132798,132799,132800,132802,132803,132805,132806,132808],{},"固定在版心位置的方法:",[53745,132801],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53745,132804],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53745,132807],{},"  实例：",[133,132810,132811],{"className":126561,"code":132354,"language":126563,"meta":31,"style":31},[139,132812,132813,132819,132831,132845,132859],{"__ignoreMap":31},[142,132814,132815,132817],{"class":144,"line":145},[142,132816,130409],{"class":1991},[142,132818,15601],{"class":152},[142,132820,132821,132823,132825,132827,132829],{"class":144,"line":64},[142,132822,132367],{"class":201},[142,132824,51466],{"class":152},[142,132826,54793],{"class":201},[142,132828,130424],{"class":152},[142,132830,132376],{"class":211},[142,132832,132833,132835,132837,132839,132841,132843],{"class":144,"line":1208},[142,132834,132381],{"class":201},[142,132836,51466],{"class":152},[142,132838,599],{"class":201},[142,132840,51521],{"class":148},[142,132842,132390],{"class":152},[142,132844,132393],{"class":211},[142,132846,132847,132849,132851,132853,132855,132857],{"class":144,"line":1223},[142,132848,132398],{"class":201},[142,132850,51466],{"class":152},[142,132852,853],{"class":201},[142,132854,51521],{"class":148},[142,132856,132407],{"class":152},[142,132858,132410],{"class":211},[142,132860,132861],{"class":144,"line":1229},[142,132862,1593],{"class":152},[29,132864],{"style":126417,"src":132865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132867,132868],{},"(5)粘性定位",[1160,132870,132871,132874],{},[99,132872,132873],{},"粘性定位可以被认为是相对定位和固定定位的混合",[99,132875,5210],{},[133,132877,132878],{"className":126561,"code":132354,"language":126563,"meta":31,"style":31},[139,132879,132880,132886,132898,132912,132926],{"__ignoreMap":31},[142,132881,132882,132884],{"class":144,"line":145},[142,132883,130409],{"class":1991},[142,132885,15601],{"class":152},[142,132887,132888,132890,132892,132894,132896],{"class":144,"line":64},[142,132889,132367],{"class":201},[142,132891,51466],{"class":152},[142,132893,54793],{"class":201},[142,132895,130424],{"class":152},[142,132897,132376],{"class":211},[142,132899,132900,132902,132904,132906,132908,132910],{"class":144,"line":1208},[142,132901,132381],{"class":201},[142,132903,51466],{"class":152},[142,132905,599],{"class":201},[142,132907,51521],{"class":148},[142,132909,132390],{"class":152},[142,132911,132393],{"class":211},[142,132913,132914,132916,132918,132920,132922,132924],{"class":144,"line":1223},[142,132915,132398],{"class":201},[142,132917,51466],{"class":152},[142,132919,853],{"class":201},[142,132921,51521],{"class":148},[142,132923,132407],{"class":152},[142,132925,132410],{"class":211},[142,132927,132928],{"class":144,"line":1229},[142,132929,1593],{"class":152},[1160,132931,132932],{},[99,132933,132934,132935,132937,132938,132940,132941,132943,132944,132947,132948,132950],{},"粘性定位的特点：",[53745,132936],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53745,132939],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53745,132942],{},"  ③必须添加 top 、left、right、bottom ",[302,132945,132946],{},"其中一个"," 才有效",[53745,132949],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[133,132952,132953],{"className":126561,"code":132354,"language":126563,"meta":31,"style":31},[139,132954,132955,132961,132973,132987,133001],{"__ignoreMap":31},[142,132956,132957,132959],{"class":144,"line":145},[142,132958,130409],{"class":1991},[142,132960,15601],{"class":152},[142,132962,132963,132965,132967,132969,132971],{"class":144,"line":64},[142,132964,132367],{"class":201},[142,132966,51466],{"class":152},[142,132968,54793],{"class":201},[142,132970,130424],{"class":152},[142,132972,132376],{"class":211},[142,132974,132975,132977,132979,132981,132983,132985],{"class":144,"line":1208},[142,132976,132381],{"class":201},[142,132978,51466],{"class":152},[142,132980,599],{"class":201},[142,132982,51521],{"class":148},[142,132984,132390],{"class":152},[142,132986,132393],{"class":211},[142,132988,132989,132991,132993,132995,132997,132999],{"class":144,"line":1223},[142,132990,132398],{"class":201},[142,132992,51466],{"class":152},[142,132994,853],{"class":201},[142,132996,51521],{"class":148},[142,132998,132407],{"class":152},[142,133000,132410],{"class":211},[142,133002,133003],{"class":144,"line":1229},[142,133004,1593],{"class":152},[29,133006],{"style":126417,"src":133007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133009,133010],{},"(6)总结",[290,133012,133013,133028],{},[293,133014,133015],{},[296,133016,133017,133019,133022,133025],{},[299,133018,132351],{"align":23765},[299,133020,133021],{"align":23765},"是否脱标",[299,133023,133024],{"align":23765},"移动位置",[299,133026,133027],{"align":23765},"是否常用",[337,133029,133030,133043,133057,133071,133084],{},[296,133031,133032,133035,133037,133040],{},[342,133033,133034],{"align":23765},"Static 静态定位",[342,133036,104687],{"align":23765},[342,133038,133039],{"align":23765},"不能使用边偏移",[342,133041,133042],{"align":23765},"很少",[296,133044,133045,133048,133051,133054],{},[342,133046,133047],{"align":23765},"Relative 相对定位",[342,133049,133050],{"align":23765},"否(占有位置)",[342,133052,133053],{"align":23765},"相对于自身位置移动",[342,133055,133056],{"align":23765},"基本单独使用",[296,133058,133059,133062,133065,133068],{},[342,133060,133061],{"align":23765},"Absolute 绝对定位",[342,133063,133064],{"align":23765},"是(不占有位置)",[342,133066,133067],{"align":23765},"带有定位的父级",[342,133069,133070],{"align":23765},"要和定位父级元素搭配使用",[296,133072,133073,133076,133078,133081],{},[342,133074,133075],{"align":23765},"Fixed 固定定位",[342,133077,133064],{"align":23765},[342,133079,133080],{"align":23765},"浏览器可视区",[342,133082,133083],{"align":23765},"单独使用,不需要父级",[296,133085,133086,133089,133091,133093],{},[342,133087,133088],{"align":23765},"Sticky 粘性定位",[342,133090,133050],{"align":23765},[342,133092,133080],{"align":23765},[342,133094,133095],{"align":23765},"当前阶段少",[96,133097,133098],{"start":64},[99,133099,133100,133103],{},[302,133101,133102],{},"边偏移"," 则决定了该元素的最终位置",[290,133105,133106,133117],{},[293,133107,133108],{},[296,133109,133110,133113,133115],{},[299,133111,133112],{"align":23765},"边偏移属性",[299,133114,27521],{"align":23765},[299,133116,27518],{"align":23765},[337,133118,133119,133130,133141,133151],{},[296,133120,133121,133124,133127],{},[342,133122,133123],{"align":23765},"top",[342,133125,133126],{"align":23765},"top: 80px;",[342,133128,133129],{"align":23765},"顶端偏移量，定义元素相对于父元素上边线的距离",[296,133131,133132,133135,133138],{},[342,133133,133134],{"align":23765},"bottom",[342,133136,133137],{"align":23765},"bottom: 80px ;",[342,133139,133140],{"align":23765},"底部偏移量，定义元素相对于其父元素下边线的距离",[296,133142,133143,133145,133148],{},[342,133144,23765],{"align":23765},[342,133146,133147],{"align":23765},"left: 80px ;",[342,133149,133150],{"align":23765},"左侧偏移量，定义元素相对于其父元素左边线的距离",[296,133152,133153,133155,133158],{},[342,133154,72551],{"align":23765},[342,133156,133157],{"align":23765},"right: 80px ;",[342,133159,133160],{"align":23765},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1160,133162,133163],{},[99,133164,9054,133165,133167,133168,133170,133171,133173,133174,133177,133178,133180,133181,133183],{},[53745,133166],{},"  ① ",[302,133169,133102],{}," 需要和 ",[302,133172,132351],{}," 联合使用， ",[302,133175,133176],{},"单独使用无效"," ；",[53745,133179],{},"  ②top和bottom不要同时使用",[53745,133182],{},"  ③left和right不要同时使用",[22027,133185,133187],{"id":133186},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133189,133190],{},"子级是绝对定位的话，父级要用相对定位",[1160,133192,133193,133196,133199,133202],{},[99,133194,133195],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[99,133197,133198],{},"父盒子需要加定位限制子盒子在父盒子内显示",[99,133200,133201],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[99,133203,133204,133205,133208],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[302,133206,133207],{},"子绝父绝"," 也会遇到",[22027,133210,133212],{"id":133211},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1160,133214,133215,133230],{},[99,133216,133217,133218,133221,133222,133225,133226,133229],{},"在使用 ",[302,133219,133220],{},"定位"," 布局时，可能会 ",[302,133223,133224],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[302,133227,133228],{},"z-index"," 来控制盒子的前后次序 (z轴)",[99,133231,5210],{},[133,133233,133234],{"className":126561,"code":132354,"language":126563,"meta":31,"style":31},[139,133235,133236,133242,133254,133268,133282],{"__ignoreMap":31},[142,133237,133238,133240],{"class":144,"line":145},[142,133239,130409],{"class":1991},[142,133241,15601],{"class":152},[142,133243,133244,133246,133248,133250,133252],{"class":144,"line":64},[142,133245,132367],{"class":201},[142,133247,51466],{"class":152},[142,133249,54793],{"class":201},[142,133251,130424],{"class":152},[142,133253,132376],{"class":211},[142,133255,133256,133258,133260,133262,133264,133266],{"class":144,"line":1208},[142,133257,132381],{"class":201},[142,133259,51466],{"class":152},[142,133261,599],{"class":201},[142,133263,51521],{"class":148},[142,133265,132390],{"class":152},[142,133267,132393],{"class":211},[142,133269,133270,133272,133274,133276,133278,133280],{"class":144,"line":1223},[142,133271,132398],{"class":201},[142,133273,51466],{"class":152},[142,133275,853],{"class":201},[142,133277,51521],{"class":148},[142,133279,132407],{"class":152},[142,133281,132410],{"class":211},[142,133283,133284],{"class":144,"line":1229},[142,133285,1593],{"class":152},[1160,133287,133288],{},[99,133289,133290,133291,133167,133293,133295,133296,127724,133299,82568,133302,133304,133305,133307,133308,133311,133312,133177,133315,133317,133318,133321,133323],{},"z-index的特性",[53745,133292],{},[302,133294,127025],{}," ： ",[302,133297,133298],{},"正整数",[302,133300,133301],{},"负整数",[302,133303,344],{}," ，默认值是 0，数值越大，盒子越靠上；",[53745,133306],{},"  ②如果 ",[302,133309,133310],{},"属性值相同"," ，则按照书写顺序， ",[302,133313,133314],{},"后来居上",[53745,133316],{},"  ③数字后面 ",[302,133319,133320],{},"不能加单位",[53745,133322],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22027,133325,133327],{"id":133326},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133329,133330],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133332,133333],{},"方法:",[1160,133335,133336,133346],{},[99,133337,133338,133339,133342,133343],{},"left: 50%; 让 ",[302,133340,133341],{},"盒子的左侧"," 移动到 ",[302,133344,133345],{},"父级元素的水平中心位置",[99,133347,133348,133349,133352,133353],{},"margin-left: -100px; 让盒子 ",[302,133350,133351],{},"向左"," 移动 ",[302,133354,133355],{},"自身宽度的一半",[22027,133357,133359],{"id":133358},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[96,133361,133362,133365],{},[99,133363,133364],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[99,133366,133367],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133369,133370],{},"也就是说绝对定位和固定定位和浮动类似",[96,133372,133373],{"start":1208},[99,133374,133375],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1160,133377,133378,133381,133384],{},[99,133379,133380],{},"可以用inline-block 转换为行内块",[99,133382,133383],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[99,133385,133386],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133388,133389],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22027,133391,133393],{"id":133392},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[96,133395,133396,133399,133402,133405],{},[99,133397,133398],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[99,133400,133401],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[99,133403,133404],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[99,133406,133407],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[133,133409,133410],{"className":126561,"code":131027,"language":126563,"meta":31,"style":31},[139,133411,133412,133418,133428,133432,133438,133448],{"__ignoreMap":31},[142,133413,133414,133416],{"class":144,"line":145},[142,133415,131034],{"class":1991},[142,133417,15601],{"class":152},[142,133419,133420,133422,133424,133426],{"class":144,"line":64},[142,133421,131041],{"class":201},[142,133423,51466],{"class":152},[142,133425,23765],{"class":201},[142,133427,1319],{"class":152},[142,133429,133430],{"class":144,"line":1208},[142,133431,1593],{"class":152},[142,133433,133434,133436],{"class":144,"line":1223},[142,133435,131056],{"class":1991},[142,133437,15601],{"class":152},[142,133439,133440,133442,133444,133446],{"class":144,"line":1229},[142,133441,131041],{"class":201},[142,133443,51466],{"class":152},[142,133445,72551],{"class":201},[142,133447,1319],{"class":152},[142,133449,133450],{"class":144,"line":1243},[142,133451,1593],{"class":152},[29,133453],{"style":126417,"src":133454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22027,133456,133458],{"id":133457},"_11138-轮播图","11.1.3.8 轮播图",[29,133460],{"style":126417,"src":133461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[96,133463,133464],{},[99,133465,133466],{},"制作顺序:",[1160,133468,133469,133472,133475,133484],{},[99,133470,133471],{},"大盒子我们类名为： tb-promo 淘宝广告",[99,133473,133474],{},"里面先放一张图片",[99,133476,133477,133478,133480,133481,133483],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53745,133479],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53745,133482],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[99,133485,133486,133487,133489,133490,133492],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53745,133488],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53745,133491],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[96,133494,133495],{"start":64},[99,133496,133497],{},"代码模块",[133,133499,133501],{"className":126561,"code":133500,"language":126563,"meta":31,"style":31},"\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",[139,133502,133503,133508,133515,133525,133535,133545,133549,133554,133561,133571],{"__ignoreMap":31},[142,133504,133505],{"class":144,"line":145},[142,133506,133507],{"class":211},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[142,133509,133510,133513],{"class":144,"line":64},[142,133511,133512],{"class":1991},".son",[142,133514,15601],{"class":152},[142,133516,133517,133519,133521,133523],{"class":144,"line":1208},[142,133518,132367],{"class":201},[142,133520,51466],{"class":152},[142,133522,54860],{"class":201},[142,133524,1319],{"class":152},[142,133526,133527,133529,133531,133533],{"class":144,"line":1223},[142,133528,132381],{"class":201},[142,133530,51466],{"class":152},[142,133532,344],{"class":201},[142,133534,1319],{"class":152},[142,133536,133537,133539,133541,133543],{"class":144,"line":1229},[142,133538,132398],{"class":201},[142,133540,51466],{"class":152},[142,133542,344],{"class":201},[142,133544,1319],{"class":152},[142,133546,133547],{"class":144,"line":1243},[142,133548,1593],{"class":152},[142,133550,133551],{"class":144,"line":1249},[142,133552,133553],{"class":211},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[142,133555,133556,133559],{"class":144,"line":1340},[142,133557,133558],{"class":1991},".father",[142,133560,15601],{"class":152},[142,133562,133563,133565,133567,133569],{"class":144,"line":1346},[142,133564,132367],{"class":201},[142,133566,51466],{"class":152},[142,133568,54793],{"class":201},[142,133570,1319],{"class":152},[142,133572,133573],{"class":144,"line":1358},[142,133574,1593],{"class":152},[14,133576,133577],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[113,133579,133581],{"id":133580},"_1114-定位数值的移动","11.1.4 定位数值的移动",[29,133583],{"style":126417,"src":133584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133586,133587],{},"✨ 黄金口诀：",[14,133589,133590],{},"\"TOP正下负上，LEFT正右负左\"",[14,133592,133593],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133595,133596],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133598,133599],{},"✨ 简单记：",[14,133601,133602],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5155,133604,133605],{},"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":31,"searchDepth":64,"depth":64,"links":133607},[133608],{"id":132135,"depth":64,"text":132136,"children":133609},[133610,133611,133612,133613],{"id":132139,"depth":1208,"text":132140},{"id":132154,"depth":1208,"text":132155},{"id":132322,"depth":1208,"text":132323},{"id":133580,"depth":1208,"text":133581},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132127,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133620,"title":133621,"body":133622,"description":66,"extension":67,"meta":135045,"navigation":69,"path":135046,"seo":135047,"stem":135048,"__hash__":135049},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133623,"toc":135024},[133624,133627,133631,133639,133643,133648,133656,133668,133672,133677,133685,133696,133700,133705,133746,133754,133758,133761,133764,133767,133861,133864,133958,133961,134055,134058,134061,134096,134099,134102,134132,134135,134138,134141,134144,134147,134150,134153,134223,134226,134230,134234,134275,134279,134285,134288,134291,134295,134298,134301,134304,134385,134388,134391,134395,134399,134402,134405,134408,134411,134414,134420,134429,134433,134452,134456,134466,134469,134472,134475,134478,134481,134484,134487,134490,134499,134503,134512,134515,134520,134573,134578,134744,134747,134750,134755,134758,134761,134764,134767,134772,134920,134923,134926,134931,134934,134939,134973,134976,134979,134983,134986,134993,134996,134999,135002,135005,135008,135011,135014,135018,135021],[10,133625,133621],{"id":133626},"_12-显示隐藏与图形资源",[84,133628,133630],{"id":133629},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1160,133632,133633,133636],{},[99,133634,133635],{},"目的:让一个元素在页面中消失或者显示出来",[99,133637,133638],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[113,133640,133642],{"id":133641},"_1211-display-显示","12.1.1 display 显示",[96,133644,133645],{},[99,133646,133647],{},"display 设置或检索对象是否及如何显示",[1160,133649,133650,133653],{},[99,133651,133652],{},"display: none;隐藏对象",[99,133654,133655],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[96,133657,133658,133665],{"start":64},[99,133659,133660,133661,133664],{},"特点： display 隐藏元素后， ",[302,133662,133663],{},"不再占"," 有原来的位置",[99,133666,133667],{},"在js中使用非常的广泛",[113,133669,133671],{"id":133670},"_1212-visibility可见性","12.1.2 visibility可见性",[96,133673,133674],{},[99,133675,133676],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1160,133678,133679,133682],{},[99,133680,133681],{},"visibility： visible；元素可见",[99,133683,133684],{},"visibility：hidden；元素隐藏",[96,133686,133687,133690,133693],{"start":64},[99,133688,133689],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[99,133691,133692],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[99,133694,133695],{},"隐藏后继续占有原有位置",[113,133697,133699],{"id":133698},"_1213-overflow溢出","12.1.3 overflow溢出",[1160,133701,133702],{},[99,133703,133704],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[290,133706,133707,133715],{},[293,133708,133709],{},[296,133710,133711,133713],{},[299,133712,127025],{"align":23765},[299,133714,27518],{"align":23765},[337,133716,133717,133725,133732,133739],{},[296,133718,133719,133722],{},[342,133720,133721],{"align":23765},"visible",[342,133723,133724],{"align":23765},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[296,133726,133727,133729],{},[342,133728,61743],{"align":23765},[342,133730,133731],{"align":23765},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[296,133733,133734,133736],{},[342,133735,128981],{"align":23765},[342,133737,133738],{"align":23765},"不管超出内容否，总是显示滚动条",[296,133740,133741,133743],{},[342,133742,72692],{"align":23765},[342,133744,133745],{"align":23765},"超出自动显示滚动条，不超出不显示滚动条",[1160,133747,133748,133751],{},[99,133749,133750],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[99,133752,133753],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[113,133755,133757],{"id":133756},"_1214-案例收获","12.1.4 案例收获",[29,133759],{"style":126417,"src":133760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133762,133763],{},"问题：没做出来动态效果，使用hover没实现",[14,133765,133766],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[133,133768,133769],{"className":126561,"code":131993,"language":126563,"meta":31,"style":31},[139,133770,133771,133775,133789,133793,133807,133811,133825,133829,133843,133847],{"__ignoreMap":31},[142,133772,133773],{"class":144,"line":145},[142,133774,132000],{"class":211},[142,133776,133777,133779,133781,133783,133785,133787],{"class":144,"line":64},[142,133778,132005],{"class":1991},[142,133780,79836],{"class":152},[142,133782,128921],{"class":201},[142,133784,51466],{"class":152},[142,133786,132014],{"class":201},[142,133788,129491],{"class":152},[142,133790,133791],{"class":144,"line":1208},[142,133792,132021],{"class":211},[142,133794,133795,133797,133799,133801,133803,133805],{"class":144,"line":1223},[142,133796,132026],{"class":1991},[142,133798,79836],{"class":152},[142,133800,128921],{"class":201},[142,133802,51466],{"class":152},[142,133804,54793],{"class":201},[142,133806,129491],{"class":152},[142,133808,133809],{"class":144,"line":1229},[142,133810,132041],{"class":211},[142,133812,133813,133815,133817,133819,133821,133823],{"class":144,"line":1243},[142,133814,132046],{"class":1991},[142,133816,79836],{"class":152},[142,133818,128921],{"class":201},[142,133820,51466],{"class":152},[142,133822,54860],{"class":201},[142,133824,129491],{"class":152},[142,133826,133827],{"class":144,"line":1249},[142,133828,132061],{"class":211},[142,133830,133831,133833,133835,133837,133839,133841],{"class":144,"line":1340},[142,133832,132066],{"class":1991},[142,133834,79836],{"class":152},[142,133836,128921],{"class":201},[142,133838,51466],{"class":152},[142,133840,86262],{"class":201},[142,133842,129491],{"class":152},[142,133844,133845],{"class":144,"line":1346},[142,133846,132081],{"class":211},[142,133848,133849,133851,133853,133855,133857,133859],{"class":144,"line":1358},[142,133850,132086],{"class":1991},[142,133852,79836],{"class":152},[142,133854,128921],{"class":201},[142,133856,51466],{"class":152},[142,133858,132095],{"class":201},[142,133860,129491],{"class":152},[14,133862,133863],{},"完整代码：",[133,133865,133866],{"className":126561,"code":131993,"language":126563,"meta":31,"style":31},[139,133867,133868,133872,133886,133890,133904,133908,133922,133926,133940,133944],{"__ignoreMap":31},[142,133869,133870],{"class":144,"line":145},[142,133871,132000],{"class":211},[142,133873,133874,133876,133878,133880,133882,133884],{"class":144,"line":64},[142,133875,132005],{"class":1991},[142,133877,79836],{"class":152},[142,133879,128921],{"class":201},[142,133881,51466],{"class":152},[142,133883,132014],{"class":201},[142,133885,129491],{"class":152},[142,133887,133888],{"class":144,"line":1208},[142,133889,132021],{"class":211},[142,133891,133892,133894,133896,133898,133900,133902],{"class":144,"line":1223},[142,133893,132026],{"class":1991},[142,133895,79836],{"class":152},[142,133897,128921],{"class":201},[142,133899,51466],{"class":152},[142,133901,54793],{"class":201},[142,133903,129491],{"class":152},[142,133905,133906],{"class":144,"line":1229},[142,133907,132041],{"class":211},[142,133909,133910,133912,133914,133916,133918,133920],{"class":144,"line":1243},[142,133911,132046],{"class":1991},[142,133913,79836],{"class":152},[142,133915,128921],{"class":201},[142,133917,51466],{"class":152},[142,133919,54860],{"class":201},[142,133921,129491],{"class":152},[142,133923,133924],{"class":144,"line":1249},[142,133925,132061],{"class":211},[142,133927,133928,133930,133932,133934,133936,133938],{"class":144,"line":1340},[142,133929,132066],{"class":1991},[142,133931,79836],{"class":152},[142,133933,128921],{"class":201},[142,133935,51466],{"class":152},[142,133937,86262],{"class":201},[142,133939,129491],{"class":152},[142,133941,133942],{"class":144,"line":1346},[142,133943,132081],{"class":211},[142,133945,133946,133948,133950,133952,133954,133956],{"class":144,"line":1358},[142,133947,132086],{"class":1991},[142,133949,79836],{"class":152},[142,133951,128921],{"class":201},[142,133953,51466],{"class":152},[142,133955,132095],{"class":201},[142,133957,129491],{"class":152},[14,133959,133960],{},"分布思路重点详解：",[133,133962,133963],{"className":126561,"code":131993,"language":126563,"meta":31,"style":31},[139,133964,133965,133969,133983,133987,134001,134005,134019,134023,134037,134041],{"__ignoreMap":31},[142,133966,133967],{"class":144,"line":145},[142,133968,132000],{"class":211},[142,133970,133971,133973,133975,133977,133979,133981],{"class":144,"line":64},[142,133972,132005],{"class":1991},[142,133974,79836],{"class":152},[142,133976,128921],{"class":201},[142,133978,51466],{"class":152},[142,133980,132014],{"class":201},[142,133982,129491],{"class":152},[142,133984,133985],{"class":144,"line":1208},[142,133986,132021],{"class":211},[142,133988,133989,133991,133993,133995,133997,133999],{"class":144,"line":1223},[142,133990,132026],{"class":1991},[142,133992,79836],{"class":152},[142,133994,128921],{"class":201},[142,133996,51466],{"class":152},[142,133998,54793],{"class":201},[142,134000,129491],{"class":152},[142,134002,134003],{"class":144,"line":1229},[142,134004,132041],{"class":211},[142,134006,134007,134009,134011,134013,134015,134017],{"class":144,"line":1243},[142,134008,132046],{"class":1991},[142,134010,79836],{"class":152},[142,134012,128921],{"class":201},[142,134014,51466],{"class":152},[142,134016,54860],{"class":201},[142,134018,129491],{"class":152},[142,134020,134021],{"class":144,"line":1249},[142,134022,132061],{"class":211},[142,134024,134025,134027,134029,134031,134033,134035],{"class":144,"line":1340},[142,134026,132066],{"class":1991},[142,134028,79836],{"class":152},[142,134030,128921],{"class":201},[142,134032,51466],{"class":152},[142,134034,86262],{"class":201},[142,134036,129491],{"class":152},[142,134038,134039],{"class":144,"line":1346},[142,134040,132081],{"class":211},[142,134042,134043,134045,134047,134049,134051,134053],{"class":144,"line":1358},[142,134044,132086],{"class":1991},[142,134046,79836],{"class":152},[142,134048,128921],{"class":201},[142,134050,51466],{"class":152},[142,134052,132095],{"class":201},[142,134054,129491],{"class":152},[29,134056],{"style":126417,"src":134057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134059,134060],{},"图片太大，盒子太小，此时需要修改图片的大小",[133,134062,134064],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[139,134065,134066],{"__ignoreMap":31},[142,134067,134068,134070,134072,134074,134076,134079,134081,134083,134086,134089,134091,134094],{"class":144,"line":145},[142,134069,1063],{"class":152},[142,134071,29],{"class":51329},[142,134073,55268],{"class":1991},[142,134075,198],{"class":152},[142,134077,134078],{"class":257},"\"images\u002Fpic.jpg\"",[142,134080,55276],{"class":1991},[142,134082,198],{"class":152},[142,134084,134085],{"class":257},"\"描述文字\"",[142,134087,134088],{"class":1991}," title",[142,134090,198],{"class":152},[142,134092,134093],{"class":257},"\"悬停提示\"",[142,134095,51336],{"class":152},[29,134097],{"style":126417,"src":134098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134100,134101],{},"制造遮罩层",[133,134103,134104],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,134105,134106],{"__ignoreMap":31},[142,134107,134108,134110,134112,134114,134116,134118,134120,134122,134124,134126,134128,134130],{"class":144,"line":145},[142,134109,1063],{"class":152},[142,134111,29],{"class":51329},[142,134113,55268],{"class":1991},[142,134115,198],{"class":152},[142,134117,134078],{"class":257},[142,134119,55276],{"class":1991},[142,134121,198],{"class":152},[142,134123,134085],{"class":257},[142,134125,134088],{"class":1991},[142,134127,198],{"class":152},[142,134129,134093],{"class":257},[142,134131,51336],{"class":152},[14,134133,134134],{},"此时是这样的为标准流",[29,134136],{"style":126417,"src":134137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134139,134140],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134142,134143],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134145,134146],{},"让他在中间，用center(background-position)",[14,134148,134149],{},"将需要变的尽可能放到一个盒子中",[14,134151,134152],{},"放大盒子上内部盒子发生变化",[133,134154,134156],{"className":126561,"code":134155,"language":126563,"meta":31,"style":31},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[139,134157,134158,134164,134174,134178,134185,134195,134207,134219],{"__ignoreMap":31},[142,134159,134160,134162],{"class":144,"line":145},[142,134161,127628],{"class":1991},[142,134163,15601],{"class":152},[142,134165,134166,134168,134170,134172],{"class":144,"line":64},[142,134167,132367],{"class":201},[142,134169,51466],{"class":152},[142,134171,54793],{"class":201},[142,134173,1319],{"class":152},[142,134175,134176],{"class":144,"line":1208},[142,134177,1593],{"class":152},[142,134179,134180,134183],{"class":144,"line":1223},[142,134181,134182],{"class":1991},".child",[142,134184,15601],{"class":152},[142,134186,134187,134189,134191,134193],{"class":144,"line":1229},[142,134188,132367],{"class":201},[142,134190,51466],{"class":152},[142,134192,54860],{"class":201},[142,134194,1319],{"class":152},[142,134196,134197,134199,134201,134203,134205],{"class":144,"line":1243},[142,134198,132381],{"class":201},[142,134200,51466],{"class":152},[142,134202,809],{"class":201},[142,134204,481],{"class":148},[142,134206,1319],{"class":152},[142,134208,134209,134211,134213,134215,134217],{"class":144,"line":1249},[142,134210,132398],{"class":201},[142,134212,51466],{"class":152},[142,134214,809],{"class":201},[142,134216,481],{"class":148},[142,134218,1319],{"class":152},[142,134220,134221],{"class":144,"line":1340},[142,134222,1593],{"class":152},[14,134224,134225],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[84,134227,134229],{"id":134228},"_122-精灵图","12.2 精灵图",[113,134231,134233],{"id":134232},"_1221-理解","12.2.1 理解",[96,134235,134236,134254],{},[99,134237,134238,134239,132467,134242,134245,134246,134249,134250,134253],{},"目的： ",[302,134240,134241],{},"为了有效地减少服务器接收和发送请求的次数",[302,134243,134244],{},"提高"," 页面的 ",[302,134247,134248],{},"加载速度"," ，出现了 ",[302,134251,134252],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[99,134255,134256,134257,134259,134260,134262,134263,134265,134266,134268,134269,134271,134272,134274],{},"使用精灵图核心：",[53745,134258],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53745,134261],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53745,134264],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53745,134267],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53745,134270],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53745,134273],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[113,134276,134278],{"id":134277},"_1222-扒图","12.2.2 扒图",[133,134280,134283],{"className":134281,"code":134282,"language":5216},[5214],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[139,134284,134282],{"__ignoreMap":31},[29,134286],{"style":126417,"src":134287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[29,134289],{"style":126417,"src":134290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[113,134292,134294],{"id":134293},"_1223-精灵图的实现","12.2.3 精灵图的实现",[29,134296],{"style":126417,"src":134297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134299,134300],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[29,134302],{"style":126417,"src":134303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[133,134305,134307],{"className":126561,"code":134306,"language":126563,"meta":31,"style":31},"\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",[139,134308,134309,134314,134321,134333,134345,134364,134381],{"__ignoreMap":31},[142,134310,134311],{"class":144,"line":145},[142,134312,134313],{"class":211},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[142,134315,134316,134319],{"class":144,"line":64},[142,134317,134318],{"class":1991},".icon",[142,134320,15601],{"class":152},[142,134322,134323,134325,134327,134329,134331],{"class":144,"line":1208},[142,134324,70597],{"class":201},[142,134326,51466],{"class":152},[142,134328,853],{"class":201},[142,134330,51521],{"class":148},[142,134332,1319],{"class":152},[142,134334,134335,134337,134339,134341,134343],{"class":144,"line":1223},[142,134336,70817],{"class":201},[142,134338,51466],{"class":152},[142,134340,853],{"class":201},[142,134342,51521],{"class":148},[142,134344,1319],{"class":152},[142,134346,134347,134349,134351,134353,134355,134358,134360,134362],{"class":144,"line":1229},[142,134348,70640],{"class":201},[142,134350,51466],{"class":152},[142,134352,61755],{"class":201},[142,134354,153],{"class":152},[142,134356,134357],{"class":5245},"sprites.png",[142,134359,13743],{"class":152},[142,134361,61765],{"class":201},[142,134363,1319],{"class":152},[142,134365,134366,134368,134370,134372,134374,134377,134379],{"class":144,"line":1243},[142,134367,128821],{"class":201},[142,134369,51466],{"class":152},[142,134371,51792],{"class":201},[142,134373,51521],{"class":148},[142,134375,134376],{"class":201}," -20",[142,134378,51521],{"class":148},[142,134380,1319],{"class":152},[142,134382,134383],{"class":144,"line":1249},[142,134384,1593],{"class":152},[29,134386],{"style":126417,"src":134387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134389,134390],{},"在前端中坐标轴的正方向是右和下",[84,134392,134394],{"id":134393},"_123-字体图标","12.3 字体图标",[113,134396,134398],{"id":134397},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134400,134401],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134403,134404],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134406,134407],{},"1.图片文件还是比较大的。",[14,134409,134410],{},"2.图片本身放大和缩小会失真。",[14,134412,134413],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134415,134416,134417,25769],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[302,134418,134419],{},"字体图标 iconfont",[14,134421,134422,134425,134426,28414],{},[302,134423,134424],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[302,134427,134428],{},"展示的是图标，本质属于字体",[113,134430,134432],{"id":134431},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1160,134434,134435,134440,134443,134446,134449],{},[99,134436,134437,134439],{},[302,134438,25905],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[99,134441,134442],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[99,134444,134445],{},"兼容性：几乎支持所有的浏览器，请放心使用",[99,134447,134448],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[99,134450,134451],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[113,134453,134455],{"id":134454},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1160,134457,134458],{},[99,134459,134460,134461],{},"icomoon字体库：",[391,134462,134465],{"href":134463,"rel":134464},"http:\u002F\u002Ficomoon.io\u002F",[23894],"http:\u002F\u002Ficomoon.io",[14,134467,134468],{},"进去之后点icomoon app",[29,134470],{"style":126417,"src":134471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134473,134474],{},"可以对其编辑：",[29,134476],{"style":126417,"src":134477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134479,134480],{},"生成字体：",[29,134482],{"style":126417,"src":134483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134485,134486],{},"下载：",[29,134488],{"style":126417,"src":134489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1160,134491,134492],{},[99,134493,134494,134495],{},"阿里iconfont字体库： ",[391,134496,134497],{"href":134497,"rel":134498},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23894],[113,134500,134502],{"id":134501},"_1234-字体图标的引入","12.3.4 字体图标的引入",[96,134504,134505],{},[99,134506,134507,134508,134511],{},"把下载包里面的 ",[302,134509,134510],{},"fonts"," 文件夹放入页面根目录下",[29,134513],{"style":126417,"src":134514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[96,134516,134517],{"start":64},[99,134518,134519],{},"字体文件格式",[290,134521,134522,134531],{},[293,134523,134524],{},[296,134525,134526,134529],{},[299,134527,134528],{"align":23765},"格式",[299,134530,23769],{"align":23765},[337,134532,134533,134543,134553,134563],{},[296,134534,134535,134540],{},[342,134536,134537],{"align":23765},[302,134538,134539],{},".ttf",[342,134541,134542],{"align":23765},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[296,134544,134545,134550],{},[342,134546,134547],{"align":23765},[302,134548,134549],{},".woff",[342,134551,134552],{"align":23765},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[296,134554,134555,134560],{},[342,134556,134557],{"align":23765},[302,134558,134559],{},".eot",[342,134561,134562],{"align":23765},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[296,134564,134565,134570],{},[342,134566,134567],{"align":23765},[302,134568,134569],{},"svg",[342,134571,134572],{"align":23765},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[96,134574,134575],{"start":1208},[99,134576,134577],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[133,134579,134581],{"className":126561,"code":134580,"language":126563,"meta":31,"style":31},"\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",[139,134582,134583,134588,134595,134607,134623,134648,134669,134689,134709,134713,134719,134729,134740],{"__ignoreMap":31},[142,134584,134585],{"class":144,"line":145},[142,134586,134587],{"class":211},"\u002F* 引入字体图标 *\u002F\n",[142,134589,134590,134593],{"class":144,"line":64},[142,134591,134592],{"class":148},"@font-face",[142,134594,15601],{"class":152},[142,134596,134597,134600,134602,134605],{"class":144,"line":1208},[142,134598,134599],{"class":201},"  font-family",[142,134601,51466],{"class":152},[142,134603,134604],{"class":257},"'icomoon'",[142,134606,1319],{"class":152},[142,134608,134609,134612,134614,134616,134618,134621],{"class":144,"line":1223},[142,134610,134611],{"class":201},"  src",[142,134613,51466],{"class":152},[142,134615,61755],{"class":201},[142,134617,153],{"class":152},[142,134619,134620],{"class":257},"'fonts\u002Ficomoon.eot'",[142,134622,2747],{"class":152},[142,134624,134625,134627,134629,134631,134633,134636,134638,134641,134643,134646],{"class":144,"line":1229},[142,134626,134611],{"class":201},[142,134628,51466],{"class":152},[142,134630,61755],{"class":201},[142,134632,153],{"class":152},[142,134634,134635],{"class":257},"'fonts\u002Ficomoon.eot?#iefix'",[142,134637,13743],{"class":152},[142,134639,134640],{"class":201},"format",[142,134642,153],{"class":152},[142,134644,134645],{"class":257},"'embedded-opentype'",[142,134647,38076],{"class":152},[142,134649,134650,134653,134655,134658,134660,134662,134664,134667],{"class":144,"line":1243},[142,134651,134652],{"class":201},"       url",[142,134654,153],{"class":152},[142,134656,134657],{"class":257},"'fonts\u002Ficomoon.woff'",[142,134659,13743],{"class":152},[142,134661,134640],{"class":201},[142,134663,153],{"class":152},[142,134665,134666],{"class":257},"'woff'",[142,134668,38076],{"class":152},[142,134670,134671,134673,134675,134678,134680,134682,134684,134687],{"class":144,"line":1249},[142,134672,134652],{"class":201},[142,134674,153],{"class":152},[142,134676,134677],{"class":257},"'fonts\u002Ficomoon.ttf'",[142,134679,13743],{"class":152},[142,134681,134640],{"class":201},[142,134683,153],{"class":152},[142,134685,134686],{"class":257},"'truetype'",[142,134688,38076],{"class":152},[142,134690,134691,134693,134695,134698,134700,134702,134704,134707],{"class":144,"line":1340},[142,134692,134652],{"class":201},[142,134694,153],{"class":152},[142,134696,134697],{"class":257},"'fonts\u002Ficomoon.svg#icomoon'",[142,134699,13743],{"class":152},[142,134701,134640],{"class":201},[142,134703,153],{"class":152},[142,134705,134706],{"class":257},"'svg'",[142,134708,2747],{"class":152},[142,134710,134711],{"class":144,"line":1346},[142,134712,1593],{"class":152},[142,134714,134715,134717],{"class":144,"line":1358},[142,134716,134318],{"class":1991},[142,134718,15601],{"class":152},[142,134720,134721,134723,134725,134727],{"class":144,"line":1640},[142,134722,134599],{"class":201},[142,134724,51466],{"class":152},[142,134726,134604],{"class":257},[142,134728,1319],{"class":152},[142,134730,134731,134734,134736,134738],{"class":144,"line":1645},[142,134732,134733],{"class":201},"  font-style",[142,134735,51466],{"class":152},[142,134737,63870],{"class":201},[142,134739,1319],{"class":152},[142,134741,134742],{"class":144,"line":1651},[142,134743,1593],{"class":152},[14,134745,134746],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[29,134748],{"style":126417,"src":134749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[96,134751,134752],{"start":1223},[99,134753,134754],{},"添加字体",[29,134756],{"style":126417,"src":134757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134759,134760],{},"复制：",[29,134762],{"style":126417,"src":134763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134765,134766],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[96,134768,134769],{"start":1229},[99,134770,134771],{},"代码展示：",[133,134773,134774],{"className":126561,"code":134580,"language":126563,"meta":31,"style":31},[139,134775,134776,134780,134786,134796,134810,134832,134850,134868,134886,134890,134896,134906,134916],{"__ignoreMap":31},[142,134777,134778],{"class":144,"line":145},[142,134779,134587],{"class":211},[142,134781,134782,134784],{"class":144,"line":64},[142,134783,134592],{"class":148},[142,134785,15601],{"class":152},[142,134787,134788,134790,134792,134794],{"class":144,"line":1208},[142,134789,134599],{"class":201},[142,134791,51466],{"class":152},[142,134793,134604],{"class":257},[142,134795,1319],{"class":152},[142,134797,134798,134800,134802,134804,134806,134808],{"class":144,"line":1223},[142,134799,134611],{"class":201},[142,134801,51466],{"class":152},[142,134803,61755],{"class":201},[142,134805,153],{"class":152},[142,134807,134620],{"class":257},[142,134809,2747],{"class":152},[142,134811,134812,134814,134816,134818,134820,134822,134824,134826,134828,134830],{"class":144,"line":1229},[142,134813,134611],{"class":201},[142,134815,51466],{"class":152},[142,134817,61755],{"class":201},[142,134819,153],{"class":152},[142,134821,134635],{"class":257},[142,134823,13743],{"class":152},[142,134825,134640],{"class":201},[142,134827,153],{"class":152},[142,134829,134645],{"class":257},[142,134831,38076],{"class":152},[142,134833,134834,134836,134838,134840,134842,134844,134846,134848],{"class":144,"line":1243},[142,134835,134652],{"class":201},[142,134837,153],{"class":152},[142,134839,134657],{"class":257},[142,134841,13743],{"class":152},[142,134843,134640],{"class":201},[142,134845,153],{"class":152},[142,134847,134666],{"class":257},[142,134849,38076],{"class":152},[142,134851,134852,134854,134856,134858,134860,134862,134864,134866],{"class":144,"line":1249},[142,134853,134652],{"class":201},[142,134855,153],{"class":152},[142,134857,134677],{"class":257},[142,134859,13743],{"class":152},[142,134861,134640],{"class":201},[142,134863,153],{"class":152},[142,134865,134686],{"class":257},[142,134867,38076],{"class":152},[142,134869,134870,134872,134874,134876,134878,134880,134882,134884],{"class":144,"line":1340},[142,134871,134652],{"class":201},[142,134873,153],{"class":152},[142,134875,134697],{"class":257},[142,134877,13743],{"class":152},[142,134879,134640],{"class":201},[142,134881,153],{"class":152},[142,134883,134706],{"class":257},[142,134885,2747],{"class":152},[142,134887,134888],{"class":144,"line":1346},[142,134889,1593],{"class":152},[142,134891,134892,134894],{"class":144,"line":1358},[142,134893,134318],{"class":1991},[142,134895,15601],{"class":152},[142,134897,134898,134900,134902,134904],{"class":144,"line":1640},[142,134899,134599],{"class":201},[142,134901,51466],{"class":152},[142,134903,134604],{"class":257},[142,134905,1319],{"class":152},[142,134907,134908,134910,134912,134914],{"class":144,"line":1645},[142,134909,134733],{"class":201},[142,134911,51466],{"class":152},[142,134913,63870],{"class":201},[142,134915,1319],{"class":152},[142,134917,134918],{"class":144,"line":1651},[142,134919,1593],{"class":152},[29,134921],{"style":126417,"src":134922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134924,134925],{},"更加细节展示：",[96,134927,134928],{},[99,134929,134930],{},"html 标签内添加小图标",[29,134932],{"style":126417,"src":134933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[96,134935,134936],{"start":64},[99,134937,134938],{},"给标签定义字体",[133,134940,134941],{"className":127308,"code":130665,"language":127310,"meta":31,"style":31},[139,134942,134943,134947,134961,134965],{"__ignoreMap":31},[142,134944,134945],{"class":144,"line":145},[142,134946,130672],{"class":211},[142,134948,134949,134951,134953,134955,134957,134959],{"class":144,"line":64},[142,134950,1063],{"class":152},[142,134952,51640],{"class":51329},[142,134954,53515],{"class":1991},[142,134956,198],{"class":152},[142,134958,130685],{"class":257},[142,134960,51336],{"class":152},[142,134962,134963],{"class":144,"line":1208},[142,134964,130692],{"class":152},[142,134966,134967,134969,134971],{"class":144,"line":1223},[142,134968,51814],{"class":152},[142,134970,51640],{"class":51329},[142,134972,51336],{"class":152},[14,134974,134975],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[29,134977],{"style":126417,"src":134978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[113,134980,134982],{"id":134981},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,134984,134985],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,134987,134988,134989,134992],{},"把压缩包里面的 ",[302,134990,134991],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,134994,134995],{},"打开网站，点下方：",[29,134997],{"style":126417,"src":134998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[29,135000],{"style":126417,"src":135001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[29,135003],{"style":126417,"src":135004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135006,135007],{},"点yes重新加载",[14,135009,135010],{},"然后重复之前的操作就可以实现了",[14,135012,135013],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[113,135015,135017],{"id":135016},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[29,135019],{"style":126417,"src":135020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5155,135022,135023],{},"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":31,"searchDepth":64,"depth":64,"links":135025},[135026,135032,135037],{"id":133629,"depth":64,"text":133630,"children":135027},[135028,135029,135030,135031],{"id":133641,"depth":1208,"text":133642},{"id":133670,"depth":1208,"text":133671},{"id":133698,"depth":1208,"text":133699},{"id":133756,"depth":1208,"text":133757},{"id":134228,"depth":64,"text":134229,"children":135033},[135034,135035,135036],{"id":134232,"depth":1208,"text":134233},{"id":134277,"depth":1208,"text":134278},{"id":134293,"depth":1208,"text":134294},{"id":134393,"depth":64,"text":134394,"children":135038},[135039,135040,135041,135042,135043,135044],{"id":134397,"depth":1208,"text":134398},{"id":134431,"depth":1208,"text":134432},{"id":134454,"depth":1208,"text":134455},{"id":134501,"depth":1208,"text":134502},{"id":134981,"depth":1208,"text":134982},{"id":135016,"depth":1208,"text":135017},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133621,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135051,"title":135052,"body":135053,"description":66,"extension":67,"meta":136280,"navigation":69,"path":136281,"seo":136282,"stem":136283,"__hash__":136284},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135054,"toc":136261},[135055,135058,135062,135065,135079,135147,135177,135180,135184,135188,135290,135337,135341,135344,135347,135381,135384,135387,135390,135393,135396,135399,135402,135404,135407,135410,135413,135416,135419,135422,135425,135453,135456,135460,135463,135470,135473,135476,135502,135505,135509,135512,135515,135522,135526,135529,135531,135563,135566,135569,135581,135587,135590,135593,135596,135598,135602,135605,135608,135611,135656,135660,135662,135665,135672,135714,135717,135721,135726,135740,135744,135747,135750,135753,135756,135759,135793,135796,135799,135853,135856,135859,135862,135865,135917,135920,135923,135972,135976,135978,135981,135984,135987,135990,135993,136051,136054,136060,136063,136066,136098,136101,136105,136109,136112,136144,136148,136151,136195,136199,136202,136205,136208,136211,136214,136217,136220,136222,136225,136227,136230,136233,136236,136239,136244,136247,136249,136252,136255,136258],[10,135056,135052],{"id":135057},"_13-界面样式与布局技巧",[84,135059,135061],{"id":135060},"_131-css三角","13.1 css三角",[14,135063,135064],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1160,135066,135067,135070,135073,135076],{},[99,135068,135069],{},"用css 边框可以模拟三角效果",[99,135071,135072],{},"宽度高度为0",[99,135074,135075],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[99,135077,135078],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[133,135080,135082],{"className":126561,"code":135081,"language":126563,"meta":31,"style":31},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[139,135083,135084,135089,135096,135106,135116,135132,135143],{"__ignoreMap":31},[142,135085,135086],{"class":144,"line":145},[142,135087,135088],{"class":211},"\u002F* CSS 实现三角形 *\u002F\n",[142,135090,135091,135094],{"class":144,"line":64},[142,135092,135093],{"class":1991},".triangle",[142,135095,15601],{"class":152},[142,135097,135098,135100,135102,135104],{"class":144,"line":1208},[142,135099,70597],{"class":201},[142,135101,51466],{"class":152},[142,135103,344],{"class":201},[142,135105,1319],{"class":152},[142,135107,135108,135110,135112,135114],{"class":144,"line":1223},[142,135109,70817],{"class":201},[142,135111,51466],{"class":152},[142,135113,344],{"class":201},[142,135115,1319],{"class":152},[142,135117,135118,135120,135122,135124,135126,135128,135130],{"class":144,"line":1229},[142,135119,70925],{"class":201},[142,135121,51466],{"class":152},[142,135123,599],{"class":201},[142,135125,51521],{"class":148},[142,135127,51550],{"class":201},[142,135129,64020],{"class":201},[142,135131,1319],{"class":152},[142,135133,135134,135137,135139,135141],{"class":144,"line":1243},[142,135135,135136],{"class":201},"  border-bottom-color",[142,135138,51466],{"class":152},[142,135140,62398],{"class":201},[142,135142,1319],{"class":152},[142,135144,135145],{"class":144,"line":1249},[142,135146,1593],{"class":152},[133,135148,135149],{"className":126561,"code":130718,"language":126563,"meta":31,"style":31},[139,135150,135151,135157,135173],{"__ignoreMap":31},[142,135152,135153,135155],{"class":144,"line":145},[142,135154,51640],{"class":51329},[142,135156,15601],{"class":152},[142,135158,135159,135161,135163,135165,135167,135169,135171],{"class":144,"line":64},[142,135160,70925],{"class":201},[142,135162,51466],{"class":152},[142,135164,370],{"class":201},[142,135166,51521],{"class":148},[142,135168,51550],{"class":201},[142,135170,129953],{"class":201},[142,135172,1319],{"class":152},[142,135174,135175],{"class":144,"line":1208},[142,135176,1593],{"class":152},[29,135178],{"style":126417,"src":135179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[84,135181,135183],{"id":135182},"_132-css用户界面样式","13.2 css用户界面样式",[113,135185,135187],{"id":135186},"_1321-鼠标样式","13.2.1 鼠标样式",[133,135189,135191],{"className":126561,"code":135190,"language":126563,"meta":31,"style":31},"\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",[139,135192,135193,135198,135217,135235,135254,135271],{"__ignoreMap":31},[142,135194,135195],{"class":144,"line":145},[142,135196,135197],{"class":211},"\u002F* 鼠标样式 *\u002F\n",[142,135199,135200,135202,135204,135207,135209,135211,135214],{"class":144,"line":64},[142,135201,51640],{"class":51329},[142,135203,79836],{"class":152},[142,135205,135206],{"class":201},"cursor",[142,135208,51466],{"class":152},[142,135210,62059],{"class":201},[142,135212,135213],{"class":152},"; }   ",[142,135215,135216],{"class":211},"\u002F* 手型 *\u002F\n",[142,135218,135219,135221,135223,135225,135227,135230,135232],{"class":144,"line":1208},[142,135220,51640],{"class":51329},[142,135222,79836],{"class":152},[142,135224,135206],{"class":201},[142,135226,51466],{"class":152},[142,135228,135229],{"class":201},"default",[142,135231,135213],{"class":152},[142,135233,135234],{"class":211},"\u002F* 默认 *\u002F\n",[142,135236,135237,135239,135241,135243,135245,135248,135251],{"class":144,"line":1223},[142,135238,51640],{"class":51329},[142,135240,79836],{"class":152},[142,135242,135206],{"class":201},[142,135244,51466],{"class":152},[142,135246,135247],{"class":201},"move",[142,135249,135250],{"class":152},"; }      ",[142,135252,135253],{"class":211},"\u002F* 移动 *\u002F\n",[142,135255,135256,135258,135260,135262,135264,135266,135268],{"class":144,"line":1229},[142,135257,51640],{"class":51329},[142,135259,79836],{"class":152},[142,135261,135206],{"class":201},[142,135263,51466],{"class":152},[142,135265,5216],{"class":201},[142,135267,135250],{"class":152},[142,135269,135270],{"class":211},"\u002F* 文本 *\u002F\n",[142,135272,135273,135275,135277,135279,135281,135284,135287],{"class":144,"line":1243},[142,135274,51640],{"class":51329},[142,135276,79836],{"class":152},[142,135278,135206],{"class":201},[142,135280,51466],{"class":152},[142,135282,135283],{"class":201},"not-allowed",[142,135285,135286],{"class":152},"; } ",[142,135288,135289],{"class":211},"\u002F* 禁止 *\u002F\n",[290,135291,135292,135300],{},[293,135293,135294],{},[296,135295,135296,135298],{},[299,135297,127025],{"align":23765},[299,135299,27518],{"align":23765},[337,135301,135302,135309,135316,135323,135330],{},[296,135303,135304,135306],{},[342,135305,135229],{"align":23765},[342,135307,135308],{"align":23765},"小白 默认",[296,135310,135311,135313],{},[342,135312,62059],{"align":23765},[342,135314,135315],{"align":23765},"小手",[296,135317,135318,135320],{},[342,135319,135247],{"align":23765},[342,135321,135322],{"align":23765},"移动",[296,135324,135325,135327],{},[342,135326,5216],{"align":23765},[342,135328,135329],{"align":23765},"文本",[296,135331,135332,135334],{},[342,135333,135283],{"align":23765},[342,135335,135336],{"align":23765},"禁止",[113,135338,135340],{"id":135339},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135342,135343],{},"去除表单轮廓线",[14,135345,135346],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[133,135348,135349],{"className":126561,"code":129925,"language":126563,"meta":31,"style":31},[139,135350,135351,135355,135361,135377],{"__ignoreMap":31},[142,135352,135353],{"class":144,"line":145},[142,135354,129932],{"class":211},[142,135356,135357,135359],{"class":144,"line":64},[142,135358,51640],{"class":51329},[142,135360,15601],{"class":152},[142,135362,135363,135365,135367,135369,135371,135373,135375],{"class":144,"line":1208},[142,135364,70925],{"class":201},[142,135366,51466],{"class":152},[142,135368,370],{"class":201},[142,135370,51521],{"class":148},[142,135372,51550],{"class":201},[142,135374,129953],{"class":201},[142,135376,1319],{"class":152},[142,135378,135379],{"class":144,"line":1223},[142,135380,1593],{"class":152},[14,135382,135383],{},"文本域：",[29,135385],{"style":126417,"src":135386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135388,135389],{},"此时会有一个空白区域",[29,135391],{"style":126417,"src":135392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135394,135395],{},"写在同一行就不会出现这个问题",[29,135397],{"style":126417,"src":135398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135400,135401],{},"文本域是行内块元素，一定记住！！！",[14,135403,98242],{},[29,135405],{"style":126417,"src":135406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135408,135409],{},"文本域尽量放在一行",[14,135411,135412],{},"知识回顾：cols是列，rols是行",[29,135414],{"style":126417,"src":135415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135417,135418],{},"它可以进行拖动，显然这是我们不愿意看到的",[29,135420],{"style":126417,"src":135421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135423,135424],{},"使用resize进行解决",[133,135426,135428],{"className":126561,"code":135427,"language":126563,"meta":31,"style":31},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[139,135429,135430,135436,135449],{"__ignoreMap":31},[142,135431,135432,135434],{"class":144,"line":145},[142,135433,53850],{"class":51329},[142,135435,15601],{"class":152},[142,135437,135438,135440,135442,135444,135446],{"class":144,"line":64},[142,135439,70827],{"class":201},[142,135441,51466],{"class":152},[142,135443,54766],{"class":201},[142,135445,130424],{"class":152},[142,135447,135448],{"class":211},"\u002F* 取消表单轮廓线 *\u002F\n",[142,135450,135451],{"class":144,"line":1208},[142,135452,1593],{"class":152},[14,135454,135455],{},"此时就无法通过右下方实现拖动了",[113,135457,135459],{"id":135458},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135461,135462],{},"实现一个盒子中的文字和图片对齐",[14,135464,135465,135466,135469],{},"用于设置一个元素的 ",[302,135467,135468],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135471,135472],{},"图片和文字默认是基线对齐",[29,135474],{"style":126417,"src":135475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[133,135477,135478],{"className":126561,"code":135427,"language":126563,"meta":31,"style":31},[139,135479,135480,135486,135498],{"__ignoreMap":31},[142,135481,135482,135484],{"class":144,"line":145},[142,135483,53850],{"class":51329},[142,135485,15601],{"class":152},[142,135487,135488,135490,135492,135494,135496],{"class":144,"line":64},[142,135489,70827],{"class":201},[142,135491,51466],{"class":152},[142,135493,54766],{"class":201},[142,135495,130424],{"class":152},[142,135497,135448],{"class":211},[142,135499,135500],{"class":144,"line":1208},[142,135501,1593],{"class":152},[29,135503],{"style":126417,"src":135504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22027,135506,135508],{"id":135507},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135510,135511],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[29,135513],{"style":126417,"src":135514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135516,135517,135518,135521],{},"此时可以给图片、表单这些行内块元素的 ",[302,135519,135520],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22027,135523,135525],{"id":135524},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135527,135528],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135530,14662],{},[133,135532,135534],{"className":126561,"code":135533,"language":126563,"meta":31,"style":31},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[139,135535,135536,135541,135547,135559],{"__ignoreMap":31},[142,135537,135538],{"class":144,"line":145},[142,135539,135540],{"class":211},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[142,135542,135543,135545],{"class":144,"line":64},[142,135544,29],{"class":51329},[142,135546,15601],{"class":152},[142,135548,135549,135552,135554,135557],{"class":144,"line":1208},[142,135550,135551],{"class":201},"  vertical-align",[142,135553,51466],{"class":152},[142,135555,135556],{"class":201},"middle",[142,135558,1319],{"class":152},[142,135560,135561],{"class":144,"line":1223},[142,135562,1593],{"class":152},[29,135564],{"style":126417,"src":135565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135567,135568],{},"主要解决方法有两种：",[96,135570,135571],{},[99,135572,135573,135576,135577,135580],{},[302,135574,135575],{},"给图片"," 添加 ",[302,135578,135579],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135582,135583,135584],{},"2.把图片转换为块级元素 ",[302,135585,135586],{},"display: block",[14,135588,135589],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135591,135592],{},"img {",[14,135594,135595],{},"vertical-align:middle;",[14,135597,1099],{},[113,135599,135601],{"id":135600},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135603,135604],{},"效果：",[29,135606],{"style":126417,"src":135607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135609,135610],{},"单行文本溢出显示省略号--必须满足三个条件：",[133,135612,135614],{"className":126561,"code":135613,"language":126563,"meta":31,"style":31},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[139,135615,135616,135621,135627,135637,135642,135652],{"__ignoreMap":31},[142,135617,135618],{"class":144,"line":145},[142,135619,135620],{"class":211},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[142,135622,135623,135625],{"class":144,"line":64},[142,135624,29],{"class":51329},[142,135626,15601],{"class":152},[142,135628,135629,135631,135633,135635],{"class":144,"line":1208},[142,135630,135551],{"class":201},[142,135632,51466],{"class":152},[142,135634,135556],{"class":201},[142,135636,1319],{"class":152},[142,135638,135639],{"class":144,"line":1223},[142,135640,135641],{"class":211},"  \u002F* 或 *\u002F\n",[142,135643,135644,135646,135648,135650],{"class":144,"line":1229},[142,135645,128177],{"class":201},[142,135647,51466],{"class":152},[142,135649,60898],{"class":201},[142,135651,1319],{"class":152},[142,135653,135654],{"class":144,"line":1243},[142,135655,1593],{"class":152},[113,135657,135659],{"id":135658},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135661,135604],{},[29,135663],{"style":126417,"src":135664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135666,135667,135668,135671],{},"多行文本溢出显示省略号， ",[302,135669,135670],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[133,135673,135674],{"className":126561,"code":135613,"language":126563,"meta":31,"style":31},[139,135675,135676,135680,135686,135696,135700,135710],{"__ignoreMap":31},[142,135677,135678],{"class":144,"line":145},[142,135679,135620],{"class":211},[142,135681,135682,135684],{"class":144,"line":64},[142,135683,29],{"class":51329},[142,135685,15601],{"class":152},[142,135687,135688,135690,135692,135694],{"class":144,"line":1208},[142,135689,135551],{"class":201},[142,135691,51466],{"class":152},[142,135693,135556],{"class":201},[142,135695,1319],{"class":152},[142,135697,135698],{"class":144,"line":1223},[142,135699,135641],{"class":211},[142,135701,135702,135704,135706,135708],{"class":144,"line":1229},[142,135703,128177],{"class":201},[142,135705,51466],{"class":152},[142,135707,60898],{"class":201},[142,135709,1319],{"class":152},[142,135711,135712],{"class":144,"line":1243},[142,135713,1593],{"class":152},[14,135715,135716],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[84,135718,135720],{"id":135719},"_133-常见布局技巧","13.3 常见布局技巧",[14,135722,135723],{},[302,135724,135725],{},"巧妙利用一个技术更快更好的布局：",[96,135727,135728,135731,135734,135737],{},[99,135729,135730],{},"margin负值的运用",[99,135732,135733],{},"文字围绕浮动元素",[99,135735,135736],{},"行内块的巧妙运用",[99,135738,135739],{},"CSS三角强化",[113,135741,135743],{"id":135742},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135745,135746],{},"应用场景：",[29,135748],{"style":126417,"src":135749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[29,135751],{"style":126417,"src":135752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135754,135755],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135757,135758],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[133,135760,135761],{"className":126561,"code":129925,"language":126563,"meta":31,"style":31},[139,135762,135763,135767,135773,135789],{"__ignoreMap":31},[142,135764,135765],{"class":144,"line":145},[142,135766,129932],{"class":211},[142,135768,135769,135771],{"class":144,"line":64},[142,135770,51640],{"class":51329},[142,135772,15601],{"class":152},[142,135774,135775,135777,135779,135781,135783,135785,135787],{"class":144,"line":1208},[142,135776,70925],{"class":201},[142,135778,51466],{"class":152},[142,135780,370],{"class":201},[142,135782,51521],{"class":148},[142,135784,51550],{"class":201},[142,135786,129953],{"class":201},[142,135788,1319],{"class":152},[142,135790,135791],{"class":144,"line":1223},[142,135792,1593],{"class":152},[29,135794],{"style":126417,"src":135795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135797,135798],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[133,135800,135802],{"className":126561,"code":135801,"language":126563,"meta":31,"style":31},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[139,135803,135804,135809,135815,135825,135837,135849],{"__ignoreMap":31},[142,135805,135806],{"class":144,"line":145},[142,135807,135808],{"class":211},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[142,135810,135811,135813],{"class":144,"line":64},[142,135812,130409],{"class":1991},[142,135814,15601],{"class":152},[142,135816,135817,135819,135821,135823],{"class":144,"line":1208},[142,135818,132367],{"class":201},[142,135820,51466],{"class":152},[142,135822,54793],{"class":201},[142,135824,1319],{"class":152},[142,135826,135827,135829,135831,135833,135835],{"class":144,"line":1223},[142,135828,132381],{"class":201},[142,135830,51466],{"class":152},[142,135832,599],{"class":201},[142,135834,51521],{"class":148},[142,135836,1319],{"class":152},[142,135838,135839,135841,135843,135845,135847],{"class":144,"line":1229},[142,135840,132398],{"class":201},[142,135842,51466],{"class":152},[142,135844,853],{"class":201},[142,135846,51521],{"class":148},[142,135848,1319],{"class":152},[142,135850,135851],{"class":144,"line":1243},[142,135852,1593],{"class":152},[14,135854,135855],{},"加上上述代码会发现：",[29,135857],{"style":126417,"src":135858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135860,135861],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135863,135864],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[133,135866,135867],{"className":126561,"code":135801,"language":126563,"meta":31,"style":31},[139,135868,135869,135873,135879,135889,135901,135913],{"__ignoreMap":31},[142,135870,135871],{"class":144,"line":145},[142,135872,135808],{"class":211},[142,135874,135875,135877],{"class":144,"line":64},[142,135876,130409],{"class":1991},[142,135878,15601],{"class":152},[142,135880,135881,135883,135885,135887],{"class":144,"line":1208},[142,135882,132367],{"class":201},[142,135884,51466],{"class":152},[142,135886,54793],{"class":201},[142,135888,1319],{"class":152},[142,135890,135891,135893,135895,135897,135899],{"class":144,"line":1223},[142,135892,132381],{"class":201},[142,135894,51466],{"class":152},[142,135896,599],{"class":201},[142,135898,51521],{"class":148},[142,135900,1319],{"class":152},[142,135902,135903,135905,135907,135909,135911],{"class":144,"line":1229},[142,135904,132398],{"class":201},[142,135906,51466],{"class":152},[142,135908,853],{"class":201},[142,135910,51521],{"class":148},[142,135912,1319],{"class":152},[142,135914,135915],{"class":144,"line":1243},[142,135916,1593],{"class":152},[14,135918,135919],{},"解决方式2：",[14,135921,135922],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[133,135924,135926],{"className":126561,"code":135925,"language":126563,"meta":31,"style":31},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[139,135927,135928,135934,135944,135956,135968],{"__ignoreMap":31},[142,135929,135930,135932],{"class":144,"line":145},[142,135931,51640],{"class":51329},[142,135933,15601],{"class":152},[142,135935,135936,135938,135940,135942],{"class":144,"line":64},[142,135937,132367],{"class":201},[142,135939,51466],{"class":152},[142,135941,54793],{"class":201},[142,135943,1319],{"class":152},[142,135945,135946,135948,135950,135952,135954],{"class":144,"line":1208},[142,135947,132381],{"class":201},[142,135949,51466],{"class":152},[142,135951,599],{"class":201},[142,135953,51521],{"class":148},[142,135955,1319],{"class":152},[142,135957,135958,135960,135962,135964,135966],{"class":144,"line":1223},[142,135959,132398],{"class":201},[142,135961,51466],{"class":152},[142,135963,853],{"class":201},[142,135965,51521],{"class":148},[142,135967,1319],{"class":152},[142,135969,135970],{"class":144,"line":1229},[142,135971,1593],{"class":152},[113,135973,135975],{"id":135974},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,135977,135746],{},[29,135979],{"style":126417,"src":135980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,135982,135983],{},"实现结构图：",[29,135985],{"style":126417,"src":135986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,135988,135989],{},"巧妙运用浮动元素不会压住文字的特性",[14,135991,135992],{},"代码显示：",[133,135994,135996],{"className":126561,"code":135995,"language":126563,"meta":31,"style":31},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[139,135997,135998,136004,136014,136018,136023,136027,136033,136047],{"__ignoreMap":31},[142,135999,136000,136002],{"class":144,"line":145},[142,136001,130409],{"class":1991},[142,136003,15601],{"class":152},[142,136005,136006,136008,136010,136012],{"class":144,"line":64},[142,136007,131041],{"class":201},[142,136009,51466],{"class":152},[142,136011,23765],{"class":201},[142,136013,1319],{"class":152},[142,136015,136016],{"class":144,"line":1208},[142,136017,1593],{"class":152},[142,136019,136020],{"class":144,"line":1223},[142,136021,136022],{"class":152},"```Css\n",[142,136024,136025],{"class":144,"line":1229},[142,136026,130404],{"class":211},[142,136028,136029,136031],{"class":144,"line":1243},[142,136030,130409],{"class":1991},[142,136032,15601],{"class":152},[142,136034,136035,136037,136039,136041,136043,136045],{"class":144,"line":1249},[142,136036,70499],{"class":201},[142,136038,51466],{"class":152},[142,136040,344],{"class":201},[142,136042,51585],{"class":201},[142,136044,130424],{"class":152},[142,136046,130427],{"class":211},[142,136048,136049],{"class":144,"line":1340},[142,136050,1593],{"class":152},[14,136052,136053],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[133,136055,136058],{"className":136056,"code":136057,"language":5216},[5214],"\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",[139,136059,136057],{"__ignoreMap":31},[29,136061],{"style":126417,"src":136062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136064,136065],{},"最终展示结果：",[133,136067,136068],{"className":126561,"code":130397,"language":126563,"meta":31,"style":31},[139,136069,136070,136074,136080,136094],{"__ignoreMap":31},[142,136071,136072],{"class":144,"line":145},[142,136073,130404],{"class":211},[142,136075,136076,136078],{"class":144,"line":64},[142,136077,130409],{"class":1991},[142,136079,15601],{"class":152},[142,136081,136082,136084,136086,136088,136090,136092],{"class":144,"line":1208},[142,136083,70499],{"class":201},[142,136085,51466],{"class":152},[142,136087,344],{"class":201},[142,136089,51585],{"class":201},[142,136091,130424],{"class":152},[142,136093,130427],{"class":211},[142,136095,136096],{"class":144,"line":1223},[142,136097,1593],{"class":152},[29,136099],{"style":126417,"src":136100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[84,136102,136104],{"id":136103},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[113,136106,136108],{"id":136107},"_1341-原理","13.4.1 原理",[29,136110],{"style":126417,"src":136111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[133,136113,136114],{"className":126561,"code":130397,"language":126563,"meta":31,"style":31},[139,136115,136116,136120,136126,136140],{"__ignoreMap":31},[142,136117,136118],{"class":144,"line":145},[142,136119,130404],{"class":211},[142,136121,136122,136124],{"class":144,"line":64},[142,136123,130409],{"class":1991},[142,136125,15601],{"class":152},[142,136127,136128,136130,136132,136134,136136,136138],{"class":144,"line":1208},[142,136129,70499],{"class":201},[142,136131,51466],{"class":152},[142,136133,344],{"class":201},[142,136135,51585],{"class":201},[142,136137,130424],{"class":152},[142,136139,130427],{"class":211},[142,136141,136142],{"class":144,"line":1223},[142,136143,1593],{"class":152},[113,136145,136147],{"id":136146},"_1342-实例","13.4.2 实例",[29,136149],{"style":126417,"src":136150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[133,136152,136153],{"className":126561,"code":131027,"language":126563,"meta":31,"style":31},[139,136154,136155,136161,136171,136175,136181,136191],{"__ignoreMap":31},[142,136156,136157,136159],{"class":144,"line":145},[142,136158,131034],{"class":1991},[142,136160,15601],{"class":152},[142,136162,136163,136165,136167,136169],{"class":144,"line":64},[142,136164,131041],{"class":201},[142,136166,51466],{"class":152},[142,136168,23765],{"class":201},[142,136170,1319],{"class":152},[142,136172,136173],{"class":144,"line":1208},[142,136174,1593],{"class":152},[142,136176,136177,136179],{"class":144,"line":1223},[142,136178,131056],{"class":1991},[142,136180,15601],{"class":152},[142,136182,136183,136185,136187,136189],{"class":144,"line":1229},[142,136184,131041],{"class":201},[142,136186,51466],{"class":152},[142,136188,72551],{"class":201},[142,136190,1319],{"class":152},[142,136192,136193],{"class":144,"line":1243},[142,136194,1593],{"class":152},[84,136196,136198],{"id":136197},"_135-css的初始化","13.5 css的初始化",[14,136200,136201],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136203,136204],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136206,136207],{},"每个网页都必须首先进行 CSS初始化。",[14,136209,136210],{},"这里我们以 京东CSS初始化代码为例。",[14,136212,136213],{},"在网页右键查看网页源代码",[14,136215,136216],{},"找到css的link引入语句",[14,136218,136219],{},"然后ctrl+f 输入body",[14,136221,77255],{},[29,136223],{"style":126417,"src":136224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136226,77278],{},[29,136228],{"style":126417,"src":136229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136231,136232],{},"③打开了网页上传压缩的代码",[29,136234],{"style":126417,"src":136235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136237,136238],{},"④从body前可以查看这个网页的初始化代码",[14,136240,136241],{},[302,136242,136243],{},"Unicode编码字体：",[14,136245,136246],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136248,83236],{},[14,136250,136251],{},"黑体 \\9ED1\\4F53",[14,136253,136254],{},"宋体 \\5B8B\\4F53",[14,136256,136257],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5155,136259,136260],{},"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":31,"searchDepth":64,"depth":64,"links":136262},[136263,136264,136271,136275,136279],{"id":135060,"depth":64,"text":135061},{"id":135182,"depth":64,"text":135183,"children":136265},[136266,136267,136268,136269,136270],{"id":135186,"depth":1208,"text":135187},{"id":135339,"depth":1208,"text":135340},{"id":135458,"depth":1208,"text":135459},{"id":135600,"depth":1208,"text":135601},{"id":135658,"depth":1208,"text":135659},{"id":135719,"depth":64,"text":135720,"children":136272},[136273,136274],{"id":135742,"depth":1208,"text":135743},{"id":135974,"depth":1208,"text":135975},{"id":136103,"depth":64,"text":136104,"children":136276},[136277,136278],{"id":136107,"depth":1208,"text":136108},{"id":136146,"depth":1208,"text":136147},{"id":136197,"depth":64,"text":136198},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135052,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136286,"title":136287,"body":136288,"description":66,"extension":67,"meta":137974,"navigation":69,"path":137975,"seo":137976,"stem":137977,"__hash__":137978},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136289,"toc":137963},[136290,136293,136297,136301,136304,136311,136314,136317,136355,136358,136360,136374,136378,136387,136391,136396,136399,136402,136405,136440,136445,136448,136478,136481,136486,136489,136492,136522,136525,136579,136582,136586,136591,136603,136606,136610,136640,136643,136648,136651,136681,136684,136688,136705,136709,136713,136716,136749,136752,136756,136759,136762,136765,136768,136771,136882,136885,136888,136891,136993,136996,137000,137004,137008,137011,137051,137054,137056,137072,137076,137079,137084,137165,137168,137171,137297,137302,137305,137313,137316,137321,137406,137409,137413,137416,137419,137423,137443,137448,137532,137535,137540,137543,137546,137624,137627,137630,137633,137636,137639,137644,137647,137650,137722,137725,137730,137733,137830,137833,137839,137842,137845,137848,137851,137854,137857,137860,137863,137867,137872,137875,137908,137913,137916,137957,137960],[10,136291,136287],{"id":136292},"_14-html5与css3新特性",[84,136294,136296],{"id":136295},"_141-html5的新特性","14.1 HTML5的新特性",[113,136298,136300],{"id":136299},"_1411-基本标签","14.1.1 基本标签",[14,136302,136303],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136305,136306,136307,136310],{},"这些新特性都有兼容性问题，基本是 ",[302,136308,136309],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136312,136313],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136315,136316],{},"现在使用的是新特性：",[1160,136318,136319,136325,136331,136337,136343,136349],{},[99,136320,136321,136324],{},[139,136322,136323],{},"\u003Cheader>"," 头部标签",[99,136326,136327,136330],{},[139,136328,136329],{},"\u003Cnav>"," 导航标签",[99,136332,136333,136336],{},[139,136334,136335],{},"\u003Carticle>"," 内容标签",[99,136338,136339,136342],{},[139,136340,136341],{},"\u003Csection>"," 定义文档某个区域",[99,136344,136345,136348],{},[139,136346,136347],{},"\u003Caside>"," 侧边栏标签",[99,136350,136351,136354],{},[139,136352,136353],{},"\u003Cfooter>"," 尾部标签",[29,136356],{"style":126417,"src":136357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136359,182],{},[1160,136361,136362,136365,136368,136371],{},[99,136363,136364],{},"这种语义化标准主要是针对搜索引擎的",[99,136366,136367],{},"这些标签页面中可以经常使用",[99,136369,136370],{},"在IE9中，需要把这些元素转换为块级元素",[99,136372,136373],{},"移动端更喜欢使用这些标签",[113,136375,136377],{"id":136376},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136379,136380,136381,136383,136384,136386],{},"音频 ",[302,136382,28203],{}," 和视频 ",[302,136385,28212],{}," 两个标签",[22027,136388,136390],{"id":136389},"_14121-视频标签-video","14.1.2.1 视频标签- video",[96,136392,136393],{},[99,136394,136395],{},"支持格式：",[29,136397],{"style":126417,"src":136398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136400,136401],{},"尽量使用MP4，兼容性好",[14,136403,136404],{},"用MP4就可以",[133,136406,136408],{"className":127308,"code":136407,"language":127310,"meta":31,"style":31},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[139,136409,136410],{"__ignoreMap":31},[142,136411,136412,136414,136416,136418,136420,136423,136425,136428,136431,136434,136436,136438],{"class":144,"line":145},[142,136413,1063],{"class":152},[142,136415,28212],{"class":51329},[142,136417,55268],{"class":1991},[142,136419,198],{"class":152},[142,136421,136422],{"class":257},"\"movie.mp4\"",[142,136424,92452],{"class":1991},[142,136426,136427],{"class":1991}," autoplay",[142,136429,136430],{"class":1991}," muted",[142,136432,136433],{"class":1991}," loop",[142,136435,55343],{"class":152},[142,136437,28212],{"class":51329},[142,136439,51336],{"class":152},[96,136441,136442],{"start":64},[99,136443,136444],{},"兼容写法",[14,136446,136447],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[133,136449,136450],{"className":127308,"code":136407,"language":127310,"meta":31,"style":31},[139,136451,136452],{"__ignoreMap":31},[142,136453,136454,136456,136458,136460,136462,136464,136466,136468,136470,136472,136474,136476],{"class":144,"line":145},[142,136455,1063],{"class":152},[142,136457,28212],{"class":51329},[142,136459,55268],{"class":1991},[142,136461,198],{"class":152},[142,136463,136422],{"class":257},[142,136465,92452],{"class":1991},[142,136467,136427],{"class":1991},[142,136469,136430],{"class":1991},[142,136471,136433],{"class":1991},[142,136473,55343],{"class":152},[142,136475,28212],{"class":51329},[142,136477,51336],{"class":152},[14,136479,136480],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[96,136482,136483],{"start":1208},[99,136484,136485],{},"video常用属性",[29,136487],{"style":126417,"src":136488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136490,136491],{},"poster属性后面是跟的等待加载图片的地址",[133,136493,136494],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,136495,136496],{"__ignoreMap":31},[142,136497,136498,136500,136502,136504,136506,136508,136510,136512,136514,136516,136518,136520],{"class":144,"line":145},[142,136499,1063],{"class":152},[142,136501,29],{"class":51329},[142,136503,55268],{"class":1991},[142,136505,198],{"class":152},[142,136507,134078],{"class":257},[142,136509,55276],{"class":1991},[142,136511,198],{"class":152},[142,136513,134085],{"class":257},[142,136515,134088],{"class":1991},[142,136517,198],{"class":152},[142,136519,134093],{"class":257},[142,136521,51336],{"class":152},[14,136523,136524],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[133,136526,136528],{"className":126561,"code":136527,"language":126563,"meta":31,"style":31},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[139,136529,136530,136535,136541,136565,136570,136575],{"__ignoreMap":31},[142,136531,136532],{"class":144,"line":145},[142,136533,136534],{"class":211},"\u002F* 2D 位移 *\u002F\n",[142,136536,136537,136539],{"class":144,"line":64},[142,136538,51640],{"class":51329},[142,136540,15601],{"class":152},[142,136542,136543,136546,136548,136551,136553,136555,136557,136559,136561,136563],{"class":144,"line":1208},[142,136544,136545],{"class":201},"  transform",[142,136547,51466],{"class":152},[142,136549,136550],{"class":201},"translate",[142,136552,153],{"class":152},[142,136554,464],{"class":201},[142,136556,51521],{"class":148},[142,136558,12464],{"class":152},[142,136560,809],{"class":201},[142,136562,51521],{"class":148},[142,136564,2747],{"class":152},[142,136566,136567],{"class":144,"line":1223},[142,136568,136569],{"class":211},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[142,136571,136572],{"class":144,"line":1229},[142,136573,136574],{"class":211},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[142,136576,136577],{"class":144,"line":1243},[142,136578,1593],{"class":152},[14,136580,136581],{},"muted:自动静音属性",[22027,136583,136585],{"id":136584},"_14122-音频标签audio","14.1.2.2 音频标签audio",[96,136587,136588],{},[99,136589,136590],{},"基本使用",[14,136592,136593,136594,136599,136600],{},"当前 ",[302,136595,136596],{},[139,136597,136598],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[302,136601,136602],{},"mp3格式",[29,136604],{"style":126417,"src":136605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[96,136607,136608],{"start":64},[99,136609,136444],{},[133,136611,136612],{"className":127308,"code":136407,"language":127310,"meta":31,"style":31},[139,136613,136614],{"__ignoreMap":31},[142,136615,136616,136618,136620,136622,136624,136626,136628,136630,136632,136634,136636,136638],{"class":144,"line":145},[142,136617,1063],{"class":152},[142,136619,28212],{"class":51329},[142,136621,55268],{"class":1991},[142,136623,198],{"class":152},[142,136625,136422],{"class":257},[142,136627,92452],{"class":1991},[142,136629,136427],{"class":1991},[142,136631,136430],{"class":1991},[142,136633,136433],{"class":1991},[142,136635,55343],{"class":152},[142,136637,28212],{"class":51329},[142,136639,51336],{"class":152},[14,136641,136642],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[96,136644,136645],{"start":1208},[99,136646,136647],{},"常用属性",[29,136649],{"style":126417,"src":136650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[133,136652,136653],{"className":127308,"code":136407,"language":127310,"meta":31,"style":31},[139,136654,136655],{"__ignoreMap":31},[142,136656,136657,136659,136661,136663,136665,136667,136669,136671,136673,136675,136677,136679],{"class":144,"line":145},[142,136658,1063],{"class":152},[142,136660,28212],{"class":51329},[142,136662,55268],{"class":1991},[142,136664,198],{"class":152},[142,136666,136422],{"class":257},[142,136668,92452],{"class":1991},[142,136670,136427],{"class":1991},[142,136672,136430],{"class":1991},[142,136674,136433],{"class":1991},[142,136676,55343],{"class":152},[142,136678,28212],{"class":51329},[142,136680,51336],{"class":152},[14,136682,136683],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22027,136685,136687],{"id":136686},"_14123-总结","14.1.2.3 总结",[1160,136689,136690,136693,136696,136699,136702],{},[99,136691,136692],{},"音频标签和视频标签使用方式基本一致",[99,136694,136695],{},"浏览器支持情况不同",[99,136697,136698],{},"谷歌浏览器把音频和视频自动播放禁止了",[99,136700,136701],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[99,136703,136704],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[113,136706,136708],{"id":136707},"_1413-表单元素","14.1.3 表单元素",[22027,136710,136712],{"id":136711},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[29,136714],{"style":126417,"src":136715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[133,136717,136719],{"className":127308,"code":136718,"language":127310,"meta":31,"style":31},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[139,136720,136721],{"__ignoreMap":31},[142,136722,136723,136725,136727,136729,136731,136733,136735,136737,136740,136742,136744,136747],{"class":144,"line":145},[142,136724,1063],{"class":152},[142,136726,53850],{"class":51329},[142,136728,53853],{"class":1991},[142,136730,198],{"class":152},[142,136732,62728],{"class":257},[142,136734,14949],{"class":1991},[142,136736,198],{"class":152},[142,136738,136739],{"class":257},"\"username\"",[142,136741,61049],{"class":1991},[142,136743,198],{"class":152},[142,136745,136746],{"class":257},"\"请输入用户名\"",[142,136748,51336],{"class":152},[29,136750],{"style":126417,"src":136751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22027,136753,136755],{"id":136754},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[29,136757],{"style":126417,"src":136758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136760,136761],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136763,136764],{},"快捷操作：",[29,136766],{"style":126417,"src":136767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136769,136770],{},"例子1：",[133,136772,136774],{"className":127308,"code":136773,"language":127310,"meta":31,"style":31},"\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",[139,136775,136776,136799,136826,136855,136874],{"__ignoreMap":31},[142,136777,136778,136780,136782,136784,136786,136789,136792,136794,136797],{"class":144,"line":145},[142,136779,1063],{"class":152},[142,136781,66654],{"class":51329},[142,136783,66657],{"class":1991},[142,136785,198],{"class":152},[142,136787,136788],{"class":257},"\"\u002Fsubmit\"",[142,136790,136791],{"class":1991}," method",[142,136793,198],{"class":152},[142,136795,136796],{"class":257},"\"post\"",[142,136798,51336],{"class":152},[142,136800,136801,136803,136805,136807,136809,136811,136813,136815,136817,136819,136821,136824],{"class":144,"line":64},[142,136802,52173],{"class":152},[142,136804,53850],{"class":51329},[142,136806,53853],{"class":1991},[142,136808,198],{"class":152},[142,136810,62728],{"class":257},[142,136812,14949],{"class":1991},[142,136814,198],{"class":152},[142,136816,136739],{"class":257},[142,136818,61049],{"class":1991},[142,136820,198],{"class":152},[142,136822,136823],{"class":257},"\"用户名\"",[142,136825,51336],{"class":152},[142,136827,136828,136830,136832,136834,136836,136839,136841,136843,136846,136848,136850,136853],{"class":144,"line":1208},[142,136829,52173],{"class":152},[142,136831,53850],{"class":51329},[142,136833,53853],{"class":1991},[142,136835,198],{"class":152},[142,136837,136838],{"class":257},"\"password\"",[142,136840,14949],{"class":1991},[142,136842,198],{"class":152},[142,136844,136845],{"class":257},"\"pwd\"",[142,136847,61049],{"class":1991},[142,136849,198],{"class":152},[142,136851,136852],{"class":257},"\"密码\"",[142,136854,51336],{"class":152},[142,136856,136857,136859,136861,136863,136865,136867,136870,136872],{"class":144,"line":1223},[142,136858,52173],{"class":152},[142,136860,53916],{"class":51329},[142,136862,53853],{"class":1991},[142,136864,198],{"class":152},[142,136866,66677],{"class":257},[142,136868,136869],{"class":152},">提交\u003C\u002F",[142,136871,53916],{"class":51329},[142,136873,51336],{"class":152},[142,136875,136876,136878,136880],{"class":144,"line":1229},[142,136877,51814],{"class":152},[142,136879,66654],{"class":51329},[142,136881,51336],{"class":152},[29,136883],{"style":126417,"src":136884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136886,136887],{},"value是表单域的内容",[14,136889,136890],{},"例子2：",[133,136892,136893],{"className":127308,"code":136773,"language":127310,"meta":31,"style":31},[139,136894,136895,136915,136941,136967,136985],{"__ignoreMap":31},[142,136896,136897,136899,136901,136903,136905,136907,136909,136911,136913],{"class":144,"line":145},[142,136898,1063],{"class":152},[142,136900,66654],{"class":51329},[142,136902,66657],{"class":1991},[142,136904,198],{"class":152},[142,136906,136788],{"class":257},[142,136908,136791],{"class":1991},[142,136910,198],{"class":152},[142,136912,136796],{"class":257},[142,136914,51336],{"class":152},[142,136916,136917,136919,136921,136923,136925,136927,136929,136931,136933,136935,136937,136939],{"class":144,"line":64},[142,136918,52173],{"class":152},[142,136920,53850],{"class":51329},[142,136922,53853],{"class":1991},[142,136924,198],{"class":152},[142,136926,62728],{"class":257},[142,136928,14949],{"class":1991},[142,136930,198],{"class":152},[142,136932,136739],{"class":257},[142,136934,61049],{"class":1991},[142,136936,198],{"class":152},[142,136938,136823],{"class":257},[142,136940,51336],{"class":152},[142,136942,136943,136945,136947,136949,136951,136953,136955,136957,136959,136961,136963,136965],{"class":144,"line":1208},[142,136944,52173],{"class":152},[142,136946,53850],{"class":51329},[142,136948,53853],{"class":1991},[142,136950,198],{"class":152},[142,136952,136838],{"class":257},[142,136954,14949],{"class":1991},[142,136956,198],{"class":152},[142,136958,136845],{"class":257},[142,136960,61049],{"class":1991},[142,136962,198],{"class":152},[142,136964,136852],{"class":257},[142,136966,51336],{"class":152},[142,136968,136969,136971,136973,136975,136977,136979,136981,136983],{"class":144,"line":1223},[142,136970,52173],{"class":152},[142,136972,53916],{"class":51329},[142,136974,53853],{"class":1991},[142,136976,198],{"class":152},[142,136978,66677],{"class":257},[142,136980,136869],{"class":152},[142,136982,53916],{"class":51329},[142,136984,51336],{"class":152},[142,136986,136987,136989,136991],{"class":144,"line":1229},[142,136988,51814],{"class":152},[142,136990,66654],{"class":51329},[142,136992,51336],{"class":152},[29,136994],{"style":126417,"src":136995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[84,136997,136999],{"id":136998},"_142-css新特性","14.2 CSS新特性",[113,137001,137003],{"id":137002},"_1421-新增选择器","14.2.1 新增选择器",[22027,137005,137007],{"id":137006},"_14211-属性选择器","14.2.1.1 属性选择器",[29,137009],{"style":126417,"src":137010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[133,137012,137014],{"className":126561,"code":137013,"language":126563,"meta":31,"style":31},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[139,137015,137016,137031,137047],{"__ignoreMap":31},[142,137017,137018,137020,137022,137024,137026,137028],{"class":144,"line":145},[142,137019,53850],{"class":51329},[142,137021,1043],{"class":152},[142,137023,103116],{"class":1991},[142,137025,198],{"class":148},[142,137027,62728],{"class":257},[142,137029,137030],{"class":152},"] {\n",[142,137032,137033,137035,137037,137039,137041,137043,137045],{"class":144,"line":64},[142,137034,70925],{"class":201},[142,137036,51466],{"class":152},[142,137038,370],{"class":201},[142,137040,51521],{"class":148},[142,137042,51550],{"class":201},[142,137044,130141],{"class":201},[142,137046,1319],{"class":152},[142,137048,137049],{"class":144,"line":1208},[142,137050,1593],{"class":152},[29,137052],{"style":126417,"src":137053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137055,182],{},[1160,137057,137058,137061,137064,137067],{},[99,137059,137060],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[99,137062,137063],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[99,137065,137066],{},"属性选择器也可以选择出来自定义的属性",[99,137068,137069,137071],{},[302,137070,9054],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22027,137073,137075],{"id":137074},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[29,137077],{"style":126417,"src":137078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[96,137080,137081],{},[99,137082,137083],{},"fist-child",[133,137085,137087],{"className":126561,"code":137086,"language":126563,"meta":31,"style":31},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[139,137088,137089,137094,137109,137129,137147],{"__ignoreMap":31},[142,137090,137091],{"class":144,"line":145},[142,137092,137093],{"class":211},"\u002F* 属性选择器 *\u002F\n",[142,137095,137096,137098,137100,137102,137104,137106],{"class":144,"line":64},[142,137097,53850],{"class":51329},[142,137099,1043],{"class":152},[142,137101,103116],{"class":1991},[142,137103,198],{"class":148},[142,137105,62728],{"class":257},[142,137107,137108],{"class":152},"] { }\n",[142,137110,137111,137113,137115,137117,137120,137123,137126],{"class":144,"line":1208},[142,137112,53850],{"class":51329},[142,137114,1043],{"class":152},[142,137116,14723],{"class":1991},[142,137118,137119],{"class":148},"^=",[142,137121,137122],{"class":257},"\"icon\"",[142,137124,137125],{"class":152},"] { }  ",[142,137127,137128],{"class":211},"\u002F* 以 icon 开头 *\u002F\n",[142,137130,137131,137133,137135,137137,137140,137142,137144],{"class":144,"line":1223},[142,137132,53850],{"class":51329},[142,137134,1043],{"class":152},[142,137136,14723],{"class":1991},[142,137138,137139],{"class":148},"$=",[142,137141,137122],{"class":257},[142,137143,137125],{"class":152},[142,137145,137146],{"class":211},"\u002F* 以 icon 结尾 *\u002F\n",[142,137148,137149,137151,137153,137155,137158,137160,137162],{"class":144,"line":1229},[142,137150,53850],{"class":51329},[142,137152,1043],{"class":152},[142,137154,14723],{"class":1991},[142,137156,137157],{"class":148},"*=",[142,137159,137122],{"class":257},[142,137161,137125],{"class":152},[142,137163,137164],{"class":211},"\u002F* 包含 icon *\u002F\n",[14,137166,137167],{},"ul的第一个儿子文本为红色",[14,137169,137170],{},"一定要在冒号前加空格，不然就是选中所有的了",[133,137172,137174],{"className":126561,"code":137173,"language":126563,"meta":31,"style":31},".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",[139,137175,137176,137182,137192,137196,137200,137205,137218,137231,137247,137264,137281],{"__ignoreMap":31},[142,137177,137178,137180],{"class":144,"line":145},[142,137179,126852],{"class":1991},[142,137181,15601],{"class":152},[142,137183,137184,137186,137188,137190],{"class":144,"line":64},[142,137185,70934],{"class":201},[142,137187,51466],{"class":152},[142,137189,57450],{"class":201},[142,137191,1319],{"class":152},[142,137193,137194],{"class":144,"line":1208},[142,137195,1593],{"class":152},[142,137197,137198],{"class":144,"line":1223},[142,137199,136022],{"class":152},[142,137201,137202],{"class":144,"line":1229},[142,137203,137204],{"class":211},"\u002F* 结构伪类选择器 *\u002F\n",[142,137206,137207,137209,137212,137215],{"class":144,"line":1243},[142,137208,99],{"class":51329},[142,137210,137211],{"class":1991},":first-child",[142,137213,137214],{"class":152}," { }           ",[142,137216,137217],{"class":211},"\u002F* 第一个 *\u002F\n",[142,137219,137220,137222,137225,137228],{"class":144,"line":1249},[142,137221,99],{"class":51329},[142,137223,137224],{"class":1991},":last-child",[142,137226,137227],{"class":152}," { }            ",[142,137229,137230],{"class":211},"\u002F* 最后一个 *\u002F\n",[142,137232,137233,137235,137237,137239,137241,137244],{"class":144,"line":1340},[142,137234,99],{"class":51329},[142,137236,129475],{"class":1991},[142,137238,153],{"class":152},[142,137240,230],{"class":201},[142,137242,137243],{"class":152},") { }          ",[142,137245,137246],{"class":211},"\u002F* 第2个 *\u002F\n",[142,137248,137249,137251,137253,137255,137258,137261],{"class":144,"line":1346},[142,137250,99],{"class":51329},[142,137252,129475],{"class":1991},[142,137254,153],{"class":152},[142,137256,137257],{"class":201},"2n",[142,137259,137260],{"class":152},") { }         ",[142,137262,137263],{"class":211},"\u002F* 偶数 *\u002F\n",[142,137265,137266,137268,137270,137272,137275,137278],{"class":144,"line":1358},[142,137267,99],{"class":51329},[142,137269,129475],{"class":1991},[142,137271,153],{"class":152},[142,137273,137274],{"class":201},"2n+1",[142,137276,137277],{"class":152},") { }       ",[142,137279,137280],{"class":211},"\u002F* 奇数 *\u002F\n",[142,137282,137283,137285,137287,137289,137292,137294],{"class":144,"line":1640},[142,137284,99],{"class":51329},[142,137286,129475],{"class":1991},[142,137288,153],{"class":152},[142,137290,137291],{"class":201},"-n+3",[142,137293,137277],{"class":152},[142,137295,137296],{"class":211},"\u002F* 前3个 *\u002F\n",[51640,137298,137301],{"className":137299},[137300],"example","\n  示例内容\n",[14,137303,137304],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1160,137306,137307],{},[99,137308,137309,137312],{},[139,137310,137311],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137314,137315],{},"也就是说它选择的是熊大",[96,137317,137318],{"start":1243},[99,137319,137320],{},"权重",[133,137322,137324],{"className":126561,"code":137323,"language":126563,"meta":31,"style":31},"\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",[139,137325,137326,137330,137340,137350,137364,137378,137392],{"__ignoreMap":31},[142,137327,137328],{"class":144,"line":145},[142,137329,137204],{"class":211},[142,137331,137332,137334,137336,137338],{"class":144,"line":64},[142,137333,99],{"class":51329},[142,137335,137211],{"class":1991},[142,137337,137214],{"class":152},[142,137339,137217],{"class":211},[142,137341,137342,137344,137346,137348],{"class":144,"line":1208},[142,137343,99],{"class":51329},[142,137345,137224],{"class":1991},[142,137347,137227],{"class":152},[142,137349,137230],{"class":211},[142,137351,137352,137354,137356,137358,137360,137362],{"class":144,"line":1223},[142,137353,99],{"class":51329},[142,137355,129475],{"class":1991},[142,137357,153],{"class":152},[142,137359,230],{"class":201},[142,137361,137243],{"class":152},[142,137363,137246],{"class":211},[142,137365,137366,137368,137370,137372,137374,137376],{"class":144,"line":1229},[142,137367,99],{"class":51329},[142,137369,129475],{"class":1991},[142,137371,153],{"class":152},[142,137373,137257],{"class":201},[142,137375,137260],{"class":152},[142,137377,137263],{"class":211},[142,137379,137380,137382,137384,137386,137388,137390],{"class":144,"line":1243},[142,137381,99],{"class":51329},[142,137383,129475],{"class":1991},[142,137385,153],{"class":152},[142,137387,137274],{"class":201},[142,137389,137277],{"class":152},[142,137391,137280],{"class":211},[142,137393,137394,137396,137398,137400,137402,137404],{"class":144,"line":1249},[142,137395,99],{"class":51329},[142,137397,129475],{"class":1991},[142,137399,153],{"class":152},[142,137401,137291],{"class":201},[142,137403,137277],{"class":152},[142,137405,137296],{"class":211},[14,137407,137408],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22027,137410,137412],{"id":137411},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137414,137415],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[29,137417],{"style":126417,"src":137418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[96,137420,137421],{},[99,137422,182],{},[1160,137424,137425,137428,137431,137434,137437,137440],{},[99,137426,137427],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[99,137429,137430],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[99,137432,137433],{},"语法： element::before {}",[99,137435,137436],{},"before 和 after 必须有 content 属性",[99,137438,137439],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[99,137441,137442],{},"伪元素选择器和标签选择器一样，权重为 1",[96,137444,137445],{"start":64},[99,137446,137447],{},"实例",[133,137449,137450],{"className":126561,"code":137323,"language":126563,"meta":31,"style":31},[139,137451,137452,137456,137466,137476,137490,137504,137518],{"__ignoreMap":31},[142,137453,137454],{"class":144,"line":145},[142,137455,137204],{"class":211},[142,137457,137458,137460,137462,137464],{"class":144,"line":64},[142,137459,99],{"class":51329},[142,137461,137211],{"class":1991},[142,137463,137214],{"class":152},[142,137465,137217],{"class":211},[142,137467,137468,137470,137472,137474],{"class":144,"line":1208},[142,137469,99],{"class":51329},[142,137471,137224],{"class":1991},[142,137473,137227],{"class":152},[142,137475,137230],{"class":211},[142,137477,137478,137480,137482,137484,137486,137488],{"class":144,"line":1223},[142,137479,99],{"class":51329},[142,137481,129475],{"class":1991},[142,137483,153],{"class":152},[142,137485,230],{"class":201},[142,137487,137243],{"class":152},[142,137489,137246],{"class":211},[142,137491,137492,137494,137496,137498,137500,137502],{"class":144,"line":1229},[142,137493,99],{"class":51329},[142,137495,129475],{"class":1991},[142,137497,153],{"class":152},[142,137499,137257],{"class":201},[142,137501,137260],{"class":152},[142,137503,137263],{"class":211},[142,137505,137506,137508,137510,137512,137514,137516],{"class":144,"line":1243},[142,137507,99],{"class":51329},[142,137509,129475],{"class":1991},[142,137511,153],{"class":152},[142,137513,137274],{"class":201},[142,137515,137277],{"class":152},[142,137517,137280],{"class":211},[142,137519,137520,137522,137524,137526,137528,137530],{"class":144,"line":1249},[142,137521,99],{"class":51329},[142,137523,129475],{"class":1991},[142,137525,153],{"class":152},[142,137527,137291],{"class":201},[142,137529,137277],{"class":152},[142,137531,137296],{"class":211},[29,137533],{"style":126417,"src":137534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[96,137536,137537],{"start":1208},[99,137538,137539],{},"使用场景1",[29,137541],{"style":126417,"src":137542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137544,137545],{},"不需要再加盒子来整红色那部分了",[133,137547,137549],{"className":126561,"code":137548,"language":126563,"meta":31,"style":31},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[139,137550,137551,137556,137565,137576,137586,137590,137599,137610,137620],{"__ignoreMap":31},[142,137552,137553],{"class":144,"line":145},[142,137554,137555],{"class":211},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[142,137557,137558,137560,137563],{"class":144,"line":64},[142,137559,51640],{"class":51329},[142,137561,137562],{"class":1991},"::before",[142,137564,15601],{"class":152},[142,137566,137567,137570,137572,137574],{"class":144,"line":1208},[142,137568,137569],{"class":201},"  content",[142,137571,51466],{"class":152},[142,137573,7681],{"class":257},[142,137575,1319],{"class":152},[142,137577,137578,137580,137582,137584],{"class":144,"line":1223},[142,137579,128177],{"class":201},[142,137581,51466],{"class":152},[142,137583,60898],{"class":201},[142,137585,1319],{"class":152},[142,137587,137588],{"class":144,"line":1229},[142,137589,1593],{"class":152},[142,137591,137592,137594,137597],{"class":144,"line":1243},[142,137593,51640],{"class":51329},[142,137595,137596],{"class":1991},"::after",[142,137598,15601],{"class":152},[142,137600,137601,137603,137605,137608],{"class":144,"line":1249},[142,137602,137569],{"class":201},[142,137604,51466],{"class":152},[142,137606,137607],{"class":257},"\"→\"",[142,137609,1319],{"class":152},[142,137611,137612,137614,137616,137618],{"class":144,"line":1340},[142,137613,70934],{"class":201},[142,137615,51466],{"class":152},[142,137617,62099],{"class":201},[142,137619,1319],{"class":152},[142,137621,137622],{"class":144,"line":1346},[142,137623,1593],{"class":152},[29,137625],{"style":126417,"src":137626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137628,137629],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[29,137631],{"style":126417,"src":137632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137634,137635],{},"但是在引用时需要先转义一下",[14,137637,137638],{},"content='\\e930'",[96,137640,137641],{"start":1223},[99,137642,137643],{},"使用场景2",[14,137645,137646],{},"仿土豆效果",[14,137648,137649],{},"通过使用伪元素选择器可以减少body中盒子的数量",[133,137651,137652],{"className":126561,"code":137548,"language":126563,"meta":31,"style":31},[139,137653,137654,137658,137666,137676,137686,137690,137698,137708,137718],{"__ignoreMap":31},[142,137655,137656],{"class":144,"line":145},[142,137657,137555],{"class":211},[142,137659,137660,137662,137664],{"class":144,"line":64},[142,137661,51640],{"class":51329},[142,137663,137562],{"class":1991},[142,137665,15601],{"class":152},[142,137667,137668,137670,137672,137674],{"class":144,"line":1208},[142,137669,137569],{"class":201},[142,137671,51466],{"class":152},[142,137673,7681],{"class":257},[142,137675,1319],{"class":152},[142,137677,137678,137680,137682,137684],{"class":144,"line":1223},[142,137679,128177],{"class":201},[142,137681,51466],{"class":152},[142,137683,60898],{"class":201},[142,137685,1319],{"class":152},[142,137687,137688],{"class":144,"line":1229},[142,137689,1593],{"class":152},[142,137691,137692,137694,137696],{"class":144,"line":1243},[142,137693,51640],{"class":51329},[142,137695,137596],{"class":1991},[142,137697,15601],{"class":152},[142,137699,137700,137702,137704,137706],{"class":144,"line":1249},[142,137701,137569],{"class":201},[142,137703,51466],{"class":152},[142,137705,137607],{"class":257},[142,137707,1319],{"class":152},[142,137709,137710,137712,137714,137716],{"class":144,"line":1340},[142,137711,70934],{"class":201},[142,137713,51466],{"class":152},[142,137715,62099],{"class":201},[142,137717,1319],{"class":152},[142,137719,137720],{"class":144,"line":1346},[142,137721,1593],{"class":152},[29,137723],{"style":126417,"src":137724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[96,137726,137727],{"start":1229},[99,137728,137729],{},"使用场景3",[14,137731,137732],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[133,137734,137736],{"className":126561,"code":137735,"language":126563,"meta":31,"style":31},".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",[139,137737,137738,137744,137754,137758,137762,137766,137774,137784,137794,137798,137806,137816,137826],{"__ignoreMap":31},[142,137739,137740,137742],{"class":144,"line":145},[142,137741,130409],{"class":1991},[142,137743,15601],{"class":152},[142,137745,137746,137748,137750,137752],{"class":144,"line":64},[142,137747,131041],{"class":201},[142,137749,51466],{"class":152},[142,137751,23765],{"class":201},[142,137753,1319],{"class":152},[142,137755,137756],{"class":144,"line":1208},[142,137757,1593],{"class":152},[142,137759,137760],{"class":144,"line":1223},[142,137761,136022],{"class":152},[142,137763,137764],{"class":144,"line":1229},[142,137765,137555],{"class":211},[142,137767,137768,137770,137772],{"class":144,"line":1243},[142,137769,51640],{"class":51329},[142,137771,137562],{"class":1991},[142,137773,15601],{"class":152},[142,137775,137776,137778,137780,137782],{"class":144,"line":1249},[142,137777,137569],{"class":201},[142,137779,51466],{"class":152},[142,137781,7681],{"class":257},[142,137783,1319],{"class":152},[142,137785,137786,137788,137790,137792],{"class":144,"line":1340},[142,137787,128177],{"class":201},[142,137789,51466],{"class":152},[142,137791,60898],{"class":201},[142,137793,1319],{"class":152},[142,137795,137796],{"class":144,"line":1346},[142,137797,1593],{"class":152},[142,137799,137800,137802,137804],{"class":144,"line":1358},[142,137801,51640],{"class":51329},[142,137803,137596],{"class":1991},[142,137805,15601],{"class":152},[142,137807,137808,137810,137812,137814],{"class":144,"line":1640},[142,137809,137569],{"class":201},[142,137811,51466],{"class":152},[142,137813,137607],{"class":257},[142,137815,1319],{"class":152},[142,137817,137818,137820,137822,137824],{"class":144,"line":1645},[142,137819,70934],{"class":201},[142,137821,51466],{"class":152},[142,137823,62099],{"class":201},[142,137825,1319],{"class":152},[142,137827,137828],{"class":144,"line":1651},[142,137829,1593],{"class":152},[14,137831,137832],{},"div {\nmargin: 0 auto;\n}",[133,137834,137837],{"className":137835,"code":137836,"language":5216},[5214],"\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",[139,137838,137836],{"__ignoreMap":31},[14,137840,137841],{},"如果想让多个元素都发生变化",[14,137843,137844],{},"不能如下操作：",[14,137846,137847],{},"transition: width 2s ease 0.5s;",[14,137849,137850],{},"transition: height 2s ease 0.5s;不对！！！",[14,137852,137853],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137855,137856],{},"使用如下：加逗号隔开",[14,137858,137859],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137861,137862],{},"transition all 2s ease;",[113,137864,137866],{"id":137865},"_1426-过渡练习","14.2.6 过渡练习",[96,137868,137869],{},[99,137870,137871],{},"进度条",[29,137873],{"style":126417,"src":137874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[133,137876,137878],{"className":126561,"code":137877,"language":126563,"meta":31,"style":31},"div {\n  transition: all 0.3s ease;\n}\n",[139,137879,137880,137886,137904],{"__ignoreMap":31},[142,137881,137882,137884],{"class":144,"line":145},[142,137883,51640],{"class":51329},[142,137885,15601],{"class":152},[142,137887,137888,137891,137893,137895,137898,137900,137902],{"class":144,"line":64},[142,137889,137890],{"class":201},"  transition",[142,137892,51466],{"class":152},[142,137894,28150],{"class":201},[142,137896,137897],{"class":201}," 0.3",[142,137899,848],{"class":148},[142,137901,78709],{"class":201},[142,137903,1319],{"class":152},[142,137905,137906],{"class":144,"line":1208},[142,137907,1593],{"class":152},[96,137909,137910],{"start":64},[99,137911,137912],{},"小米logo",[14,137914,137915],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[133,137917,137919],{"className":126561,"code":137918,"language":126563,"meta":31,"style":31},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[139,137920,137921,137926,137932,137948,137953],{"__ignoreMap":31},[142,137922,137923],{"class":144,"line":145},[142,137924,137925],{"class":211},"\u002F* CSS3 过渡 *\u002F\n",[142,137927,137928,137930],{"class":144,"line":64},[142,137929,51640],{"class":51329},[142,137931,15601],{"class":152},[142,137933,137934,137936,137938,137940,137942,137944,137946],{"class":144,"line":1208},[142,137935,137890],{"class":201},[142,137937,51466],{"class":152},[142,137939,28150],{"class":201},[142,137941,137897],{"class":201},[142,137943,848],{"class":148},[142,137945,78709],{"class":201},[142,137947,1319],{"class":152},[142,137949,137950],{"class":144,"line":1223},[142,137951,137952],{"class":211},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[142,137954,137955],{"class":144,"line":1229},[142,137956,1593],{"class":152},[14,137958,137959],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5155,137961,137962],{},"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":31,"searchDepth":64,"depth":64,"links":137964},[137965,137970],{"id":136295,"depth":64,"text":136296,"children":137966},[137967,137968,137969],{"id":136299,"depth":1208,"text":136300},{"id":136376,"depth":1208,"text":136377},{"id":136707,"depth":1208,"text":136708},{"id":136998,"depth":64,"text":136999,"children":137971},[137972,137973],{"id":137002,"depth":1208,"text":137003},{"id":137865,"depth":1208,"text":137866},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136287,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137980,"title":137981,"body":137982,"description":66,"extension":67,"meta":139726,"navigation":69,"path":139727,"seo":139728,"stem":139729,"__hash__":139730},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137983,"toc":139707},[137984,137987,137991,137994,138000,138006,138010,138012,138015,138018,138021,138024,138027,138030,138033,138037,138041,138044,138047,138050,138054,138057,138060,138065,138068,138071,138074,138078,138081,138090,138093,138096,138100,138103,138106,138111,138118,138132,138140,138147,138152,138155,138158,138161,138168,138172,138178,138184,138187,138190,138195,138201,138203,138211,138216,138219,138225,138227,138232,138237,138240,138242,138247,138250,138255,138260,138294,138298,138302,138305,138309,138312,138398,138401,138438,138441,138477,138481,138486,138499,138553,138555,138583,138585,138613,138619,138633,138635,138679,138681,138725,138728,138735,138746,138748,138775,138777,138803,138810,138826,138828,138922,138924,139018,139025,139028,139033,139039,139113,139116,139118,139154,139156,139192,139195,139202,139221,139224,139227,139229,139254,139256,139280,139283,139286,139316,139320,139323,139386,139388,139454,139456,139520,139523,139555,139557,139583,139585,139611,139614,139645,139647,139673,139675,139701,139704],[10,137985,137981],{"id":137986},"_15-品优购项目上篇-搭建与公共模块",[84,137988,137990],{"id":137989},"_151-项目规划","15.1 项目规划",[29,137992],{"style":126417,"src":137993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,137995,137996,137999],{},[302,137997,137998],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138001,138002,138005],{},[302,138003,138004],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[84,138007,138009],{"id":138008},"_152-项目介绍","15.2 项目介绍",[14,138011,137998],{},[29,138013],{"style":126417,"src":138014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138016,138017],{},"主页：",[29,138019],{"style":126417,"src":138020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138022,138023],{},"列表页：",[29,138025],{"style":126417,"src":138026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138028,138029],{},"注册页：",[29,138031],{"style":126417,"src":138032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[84,138034,138036],{"id":138035},"_153-项目搭建工作","15.3 项目搭建工作",[113,138038,138040],{"id":138039},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[29,138042],{"style":126417,"src":138043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138045,138046],{},"经常更换的图片要放到upload文件夹中",[14,138048,138049],{},"不经常换的放到images文件夹中",[113,138051,138053],{"id":138052},"_1532-创建文件如下","15.3.2 创建文件如下",[29,138055],{"style":126417,"src":138056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[29,138058],{"style":126417,"src":138059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138061,138062],{},[302,138063,138064],{},"初始化样式：",[14,138066,138067],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138069,138070],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138072,138073],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[113,138075,138077],{"id":138076},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138079,138080],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138082,138083,138084,138089],{},"这里最典型的应用就是 ",[302,138085,138086],{},[139,138087,138088],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[29,138091],{"style":126417,"src":138092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138094,138095],{},"通过link方法来引入",[113,138097,138099],{"id":138098},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[29,138101],{"style":126417,"src":138102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138104,138105],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[96,138107,138108],{},[99,138109,138110],{},"制作favicon图标",[14,138112,138113,138114,138117],{},"①把品优购图标切成 ",[139,138115,138116],{},"png"," 图片",[14,138119,138120,138121,138123,138124,138127,138128],{},"②把 ",[139,138122,138116],{}," 图片转换为 ",[139,138125,138126],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[391,138129,138130],{"href":138130,"rel":138131},"http:\u002F\u002Fwww.bitbug.net\u002F",[23894],[96,138133,138134,138137],{"start":64},[99,138135,138136],{},"favicon图标放到网站根目录下",[99,138138,138139],{},"HTML页面引入favicon",[14,138141,138142,138143,138146],{},"在html 页面里面的 ",[139,138144,138145],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138148,138149],{},[139,138150,138151],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138153,138154],{},"复制这行代码或者在生成这个的网站进行复制",[29,138156],{"style":126417,"src":138157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138159,138160],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138162,138163,138164],{},"例如:",[391,138165,138166],{"href":138166,"rel":138167},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23894],[113,138169,138171],{"id":138170},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138173,138174,138177],{},[302,138175,138176],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138179,138180,138183],{},[302,138181,138182],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138185,138186],{},"页面必须有三个标签用来符合 SEO 优化",[29,138188],{"style":126417,"src":138189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[96,138191,138192],{},[99,138193,138194],{},"title网站标题",[14,138196,138197,138200],{},[302,138198,138199],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138202,68819],{},[1160,138204,138205,138208],{},[99,138206,138207],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[99,138209,138210],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[96,138212,138213],{"start":64},[99,138214,138215],{},"description网站描述",[14,138217,138218],{},"简要说明我们网站主要是做什么的",[14,138220,138221,138224],{},[302,138222,138223],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138226,68819],{},[14,138228,138229],{},[139,138230,138231],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[96,138233,138234],{"start":1208},[99,138235,138236],{},"keywords关键词",[14,138238,138239],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138241,68819],{},[14,138243,138244],{},[139,138245,138246],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138248,138249],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138251,138252],{},[302,138253,138254],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[96,138256,138257],{"start":1223},[99,138258,138259],{},"代码总结",[133,138261,138262],{"className":127308,"code":130665,"language":127310,"meta":31,"style":31},[139,138263,138264,138268,138282,138286],{"__ignoreMap":31},[142,138265,138266],{"class":144,"line":145},[142,138267,130672],{"class":211},[142,138269,138270,138272,138274,138276,138278,138280],{"class":144,"line":64},[142,138271,1063],{"class":152},[142,138273,51640],{"class":51329},[142,138275,53515],{"class":1991},[142,138277,198],{"class":152},[142,138279,130685],{"class":257},[142,138281,51336],{"class":152},[142,138283,138284],{"class":144,"line":1208},[142,138285,130692],{"class":152},[142,138287,138288,138290,138292],{"class":144,"line":1223},[142,138289,51814],{"class":152},[142,138291,51640],{"class":51329},[142,138293,51336],{"class":152},[84,138295,138297],{"id":138296},"_154-项目公共部分制作","15.4 项目公共部分制作",[113,138299,138301],{"id":138300},"_1541-常用模块类命名","15.4.1 常用模块类命名",[29,138303],{"style":126417,"src":138304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[113,138306,138308],{"id":138307},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138310,138311],{},"布局思路：",[1160,138313,138314,138317,138320,138342,138375],{},[99,138315,138316],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[99,138318,138319],{},"里面包含版心的盒子",[99,138321,138322,138323],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1160,138324,138325,138333,138339],{},[99,138326,138327,138328,21529,138330,138332],{},"1 号盒子 里面包含一个",[139,138329,1160],{},[139,138331,1160],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[99,138334,138335,138336,138338],{},"里面的内容是水平排列，所以需要给",[139,138337,99],{},"设置浮动",[99,138340,138341],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[99,138343,138344,138345],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1160,138346,138347,138361,138366],{},[99,138348,138349,138350,21529,138352,138354,138355,138357,138358,138360],{},"2 号盒子 里面包含一个",[139,138351,1160],{},[139,138353,1160],{},"包裹",[139,138356,99],{},"，中间的",[139,138359,1074],{},"可以用样式去设置，也可以用字符 |",[99,138362,138363,138364,138338],{},"里面内容水平排列，给",[139,138365,99],{},[99,138367,138368,138369,138371,138372,138374],{},"找到里面所有偶数的 ",[139,138370,99],{}," 设置样式（偶数的 ",[139,138373,99],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[99,138376,138377,138378],{},"需要用到字体图标",[1160,138379,138380,138386,138389,138392,138395],{},[99,138381,138382,138383],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[139,138384,138385],{},"arrow-icon",[99,138387,138388],{},"先要引入字体图片的资源",[99,138390,138391],{},"在样式里面利用 font-face 来进行声明",[99,138393,138394],{},"在伪元素的 content属性设置 图标的编码",[99,138396,138397],{},"给伪元素设置font-family属性",[14,138399,138400],{},"结构实例代码：",[133,138402,138404],{"className":126561,"code":138403,"language":126563,"meta":31,"style":31},"div::before {\n  content: \"\";\n  display: block;\n}\n",[139,138405,138406,138414,138424,138434],{"__ignoreMap":31},[142,138407,138408,138410,138412],{"class":144,"line":145},[142,138409,51640],{"class":51329},[142,138411,137562],{"class":1991},[142,138413,15601],{"class":152},[142,138415,138416,138418,138420,138422],{"class":144,"line":64},[142,138417,137569],{"class":201},[142,138419,51466],{"class":152},[142,138421,7681],{"class":257},[142,138423,1319],{"class":152},[142,138425,138426,138428,138430,138432],{"class":144,"line":1208},[142,138427,128177],{"class":201},[142,138429,51466],{"class":152},[142,138431,60898],{"class":201},[142,138433,1319],{"class":152},[142,138435,138436],{"class":144,"line":1223},[142,138437,1593],{"class":152},[14,138439,138440],{},"样式实例代码：",[133,138442,138443],{"className":126561,"code":138403,"language":126563,"meta":31,"style":31},[139,138444,138445,138453,138463,138473],{"__ignoreMap":31},[142,138446,138447,138449,138451],{"class":144,"line":145},[142,138448,51640],{"class":51329},[142,138450,137562],{"class":1991},[142,138452,15601],{"class":152},[142,138454,138455,138457,138459,138461],{"class":144,"line":64},[142,138456,137569],{"class":201},[142,138458,51466],{"class":152},[142,138460,7681],{"class":257},[142,138462,1319],{"class":152},[142,138464,138465,138467,138469,138471],{"class":144,"line":1208},[142,138466,128177],{"class":201},[142,138468,51466],{"class":152},[142,138470,60898],{"class":201},[142,138472,1319],{"class":152},[142,138474,138475],{"class":144,"line":1223},[142,138476,1593],{"class":152},[113,138478,138480],{"id":138479},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1160,138482,138483],{},[99,138484,138485],{},"header 盒子必须要有高度",[14,138487,138488,138489,138491,138492],{},"1 号盒子是 ",[139,138490,131573],{}," 标志定位，在正常开发过程中， ",[302,138493,138494,138495,138498],{},"logo的布局其实是有讲究的，需要进行 ",[139,138496,138497],{},"logoSEO","的优化 （★★★）",[1160,138500,138501,138509,138517,138544],{},[99,138502,138503,138505,138506,138508],{},[139,138504,131573],{}," 里面首先放一个 ",[139,138507,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[99,138510,138511,138513,138514,138516],{},[139,138512,10],{}," 里面再放一个链接，可以返回首页的，把 ",[139,138515,131573],{}," 的背景图片给链接即可",[99,138518,138519,138520],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1160,138521,138522,138537],{},[99,138523,138524,138525,138528,138529,138532,138533,138536],{},"方法1：",[139,138526,138527],{},"text-indent"," 移到盒子外面（",[139,138530,138531],{},"text-indent: -9999px",") ，然后 ",[139,138534,138535],{},"overflow:hidden"," ，淘宝的做法",[99,138538,138539,138540,138543],{},"方法2：直接给 ",[139,138541,138542],{},"font-size: 0;"," 就看不到文字了，京东的做法",[99,138545,138546,138547,138549,138550,138552],{},"最后给链接一个 ",[139,138548,51436],{}," 属性，这样鼠标放到 ",[139,138551,131573],{}," 上就可以看到提示文字了",[14,138554,138400],{},[133,138556,138557],{"className":127308,"code":131794,"language":127310,"meta":31,"style":31},[139,138558,138559],{"__ignoreMap":31},[142,138560,138561,138563,138565,138567,138569,138571,138573,138575,138577,138579,138581],{"class":144,"line":145},[142,138562,1063],{"class":152},[142,138564,391],{"class":51329},[142,138566,61086],{"class":1991},[142,138568,198],{"class":152},[142,138570,131809],{"class":257},[142,138572,131812],{"class":1991},[142,138574,198],{"class":152},[142,138576,131817],{"class":257},[142,138578,131820],{"class":152},[142,138580,391],{"class":51329},[142,138582,51336],{"class":152},[14,138584,138440],{},[133,138586,138587],{"className":127308,"code":131794,"language":127310,"meta":31,"style":31},[139,138588,138589],{"__ignoreMap":31},[142,138590,138591,138593,138595,138597,138599,138601,138603,138605,138607,138609,138611],{"class":144,"line":145},[142,138592,1063],{"class":152},[142,138594,391],{"class":51329},[142,138596,61086],{"class":1991},[142,138598,198],{"class":152},[142,138600,131809],{"class":257},[142,138602,131812],{"class":1991},[142,138604,198],{"class":152},[142,138606,131817],{"class":257},[142,138608,131820],{"class":152},[142,138610,391],{"class":51329},[142,138612,51336],{"class":152},[14,138614,138615,138616,138618],{},"2 号盒子是 ",[139,138617,131586],{}," 搜索模块定位",[1160,138620,138621,138624,138627,138630],{},[99,138622,138623],{},"search盒子利用定位的方式放在对应的位置",[99,138625,138626],{},"search盒子设置绝对定位，header盒子设置相对定位",[99,138628,138629],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[99,138631,138632],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138634,138400],{},[133,138636,138637],{"className":126561,"code":131881,"language":126563,"meta":31,"style":31},[139,138638,138639,138661,138665,138675],{"__ignoreMap":31},[142,138640,138641,138643,138645,138647,138649,138651,138653,138655,138657,138659],{"class":144,"line":145},[142,138642,51640],{"class":51329},[142,138644,12464],{"class":152},[142,138646,14],{"class":51329},[142,138648,12464],{"class":152},[142,138650,10],{"class":51329},[142,138652,12464],{"class":152},[142,138654,1160],{"class":51329},[142,138656,12464],{"class":152},[142,138658,99],{"class":51329},[142,138660,15601],{"class":152},[142,138662,138663],{"class":144,"line":64},[142,138664,131910],{"class":211},[142,138666,138667,138669,138671,138673],{"class":144,"line":1208},[142,138668,128177],{"class":201},[142,138670,51466],{"class":152},[142,138672,60898],{"class":201},[142,138674,1319],{"class":152},[142,138676,138677],{"class":144,"line":1223},[142,138678,1593],{"class":152},[14,138680,138440],{},[133,138682,138683],{"className":126561,"code":131881,"language":126563,"meta":31,"style":31},[139,138684,138685,138707,138711,138721],{"__ignoreMap":31},[142,138686,138687,138689,138691,138693,138695,138697,138699,138701,138703,138705],{"class":144,"line":145},[142,138688,51640],{"class":51329},[142,138690,12464],{"class":152},[142,138692,14],{"class":51329},[142,138694,12464],{"class":152},[142,138696,10],{"class":51329},[142,138698,12464],{"class":152},[142,138700,1160],{"class":51329},[142,138702,12464],{"class":152},[142,138704,99],{"class":51329},[142,138706,15601],{"class":152},[142,138708,138709],{"class":144,"line":64},[142,138710,131910],{"class":211},[142,138712,138713,138715,138717,138719],{"class":144,"line":1208},[142,138714,128177],{"class":201},[142,138716,51466],{"class":152},[142,138718,60898],{"class":201},[142,138720,1319],{"class":152},[142,138722,138723],{"class":144,"line":1223},[142,138724,1593],{"class":152},[14,138726,138727],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138729,138730,138731,138734],{},"3 号盒子是 ",[139,138732,138733],{},"hotwords"," 热词模块定位",[1160,138736,138737,138740,138743],{},[99,138738,138739],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[99,138741,138742],{},"给里面所有的a标签设置 左右10px的外边距",[99,138744,138745],{},"给第一个a标签设置文字变红色（#c81623）",[14,138747,138400],{},[133,138749,138751],{"className":126561,"code":138750,"language":126563,"meta":31,"style":31},"div {\n  margin: 0 auto;\n}\n",[139,138752,138753,138759,138771],{"__ignoreMap":31},[142,138754,138755,138757],{"class":144,"line":145},[142,138756,51640],{"class":51329},[142,138758,15601],{"class":152},[142,138760,138761,138763,138765,138767,138769],{"class":144,"line":64},[142,138762,70499],{"class":201},[142,138764,51466],{"class":152},[142,138766,344],{"class":201},[142,138768,51585],{"class":201},[142,138770,1319],{"class":152},[142,138772,138773],{"class":144,"line":1208},[142,138774,1593],{"class":152},[14,138776,138440],{},[133,138778,138779],{"className":126561,"code":138750,"language":126563,"meta":31,"style":31},[139,138780,138781,138787,138799],{"__ignoreMap":31},[142,138782,138783,138785],{"class":144,"line":145},[142,138784,51640],{"class":51329},[142,138786,15601],{"class":152},[142,138788,138789,138791,138793,138795,138797],{"class":144,"line":64},[142,138790,70499],{"class":201},[142,138792,51466],{"class":152},[142,138794,344],{"class":201},[142,138796,51585],{"class":201},[142,138798,1319],{"class":152},[142,138800,138801],{"class":144,"line":1208},[142,138802,1593],{"class":152},[14,138804,138805,138806,138809],{},"4 号盒子是 ",[139,138807,138808],{},"shopcar"," 购物车模块",[1160,138811,138812,138817,138820,138823],{},[99,138813,123344,138814,138816],{},[139,138815,138808],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[99,138818,138819],{},"count 统计部分用绝对定位做",[99,138821,138822],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[99,138824,138825],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138827,138400],{},[133,138829,138830],{"className":126561,"code":131993,"language":126563,"meta":31,"style":31},[139,138831,138832,138836,138850,138854,138868,138872,138886,138890,138904,138908],{"__ignoreMap":31},[142,138833,138834],{"class":144,"line":145},[142,138835,132000],{"class":211},[142,138837,138838,138840,138842,138844,138846,138848],{"class":144,"line":64},[142,138839,132005],{"class":1991},[142,138841,79836],{"class":152},[142,138843,128921],{"class":201},[142,138845,51466],{"class":152},[142,138847,132014],{"class":201},[142,138849,129491],{"class":152},[142,138851,138852],{"class":144,"line":1208},[142,138853,132021],{"class":211},[142,138855,138856,138858,138860,138862,138864,138866],{"class":144,"line":1223},[142,138857,132026],{"class":1991},[142,138859,79836],{"class":152},[142,138861,128921],{"class":201},[142,138863,51466],{"class":152},[142,138865,54793],{"class":201},[142,138867,129491],{"class":152},[142,138869,138870],{"class":144,"line":1229},[142,138871,132041],{"class":211},[142,138873,138874,138876,138878,138880,138882,138884],{"class":144,"line":1243},[142,138875,132046],{"class":1991},[142,138877,79836],{"class":152},[142,138879,128921],{"class":201},[142,138881,51466],{"class":152},[142,138883,54860],{"class":201},[142,138885,129491],{"class":152},[142,138887,138888],{"class":144,"line":1249},[142,138889,132061],{"class":211},[142,138891,138892,138894,138896,138898,138900,138902],{"class":144,"line":1340},[142,138893,132066],{"class":1991},[142,138895,79836],{"class":152},[142,138897,128921],{"class":201},[142,138899,51466],{"class":152},[142,138901,86262],{"class":201},[142,138903,129491],{"class":152},[142,138905,138906],{"class":144,"line":1346},[142,138907,132081],{"class":211},[142,138909,138910,138912,138914,138916,138918,138920],{"class":144,"line":1358},[142,138911,132086],{"class":1991},[142,138913,79836],{"class":152},[142,138915,128921],{"class":201},[142,138917,51466],{"class":152},[142,138919,132095],{"class":201},[142,138921,129491],{"class":152},[14,138923,138440],{},[133,138925,138926],{"className":126561,"code":131993,"language":126563,"meta":31,"style":31},[139,138927,138928,138932,138946,138950,138964,138968,138982,138986,139000,139004],{"__ignoreMap":31},[142,138929,138930],{"class":144,"line":145},[142,138931,132000],{"class":211},[142,138933,138934,138936,138938,138940,138942,138944],{"class":144,"line":64},[142,138935,132005],{"class":1991},[142,138937,79836],{"class":152},[142,138939,128921],{"class":201},[142,138941,51466],{"class":152},[142,138943,132014],{"class":201},[142,138945,129491],{"class":152},[142,138947,138948],{"class":144,"line":1208},[142,138949,132021],{"class":211},[142,138951,138952,138954,138956,138958,138960,138962],{"class":144,"line":1223},[142,138953,132026],{"class":1991},[142,138955,79836],{"class":152},[142,138957,128921],{"class":201},[142,138959,51466],{"class":152},[142,138961,54793],{"class":201},[142,138963,129491],{"class":152},[142,138965,138966],{"class":144,"line":1229},[142,138967,132041],{"class":211},[142,138969,138970,138972,138974,138976,138978,138980],{"class":144,"line":1243},[142,138971,132046],{"class":1991},[142,138973,79836],{"class":152},[142,138975,128921],{"class":201},[142,138977,51466],{"class":152},[142,138979,54860],{"class":201},[142,138981,129491],{"class":152},[142,138983,138984],{"class":144,"line":1249},[142,138985,132061],{"class":211},[142,138987,138988,138990,138992,138994,138996,138998],{"class":144,"line":1340},[142,138989,132066],{"class":1991},[142,138991,79836],{"class":152},[142,138993,128921],{"class":201},[142,138995,51466],{"class":152},[142,138997,86262],{"class":201},[142,138999,129491],{"class":152},[142,139001,139002],{"class":144,"line":1346},[142,139003,132081],{"class":211},[142,139005,139006,139008,139010,139012,139014,139016],{"class":144,"line":1358},[142,139007,132086],{"class":1991},[142,139009,79836],{"class":152},[142,139011,128921],{"class":201},[142,139013,51466],{"class":152},[142,139015,132095],{"class":201},[142,139017,129491],{"class":152},[113,139019,139021,139022,139024],{"id":139020},"_1544-nav导航模块制作","15.4.4 ",[139,139023,53742],{},"导航模块制作",[29,139026],{"style":126417,"src":139027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139029,139030,139032],{},[139,139031,53742],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139034,139035,139036],{},"1 号盒子左侧浮动，",[139,139037,139038],{},"dropdown",[1160,139040,139041,139051,139059,139065,139073,139083,139091,139102],{},[99,139042,139043,139044,101027,139047,139050],{},"1号盒子有讲究，根据相关性 里面包含 ",[139,139045,139046],{},".dt",[139,139048,139049],{},".dd"," 两个盒子",[99,139052,139053,139055,139056,139058],{},[139,139054,139046],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[139,139057,139049],{}," 挤到下面去了",[99,139060,139061,139062,139064],{},"给 ",[139,139063,139049],{}," 盒子设置宽度 和 高度，以及背景颜色",[99,139066,139061,139067,139069,139070,120246],{},[139,139068,139049],{}," 盒子里面定义 无序列表 （",[139,139071,139072],{},"ul > li > a",[99,139074,139075,139076,139078,139079,139082],{},"每个 ",[139,139077,99],{}," 都有一个高度（",[139,139080,139081],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[99,139084,139061,139085,139087,139088,120246],{},[139,139086,99],{}," 里面的a设置文字大小（",[139,139089,139090],{},"14px",[99,139092,139061,139093,139095,139096,139098,139099,139101],{},[139,139094,99],{}," 设置 ",[139,139097,127722],{},"，当鼠标移入的时候，让",[139,139100,99],{},"的背景变成白色，让里面的文字变成红色",[99,139103,139104,139106,139107,139109,139110,139112],{},[139,139105,99],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[139,139108,99],{},"的右侧，那么给",[139,139111,99],{},"设置相对定位",[14,139114,139115],{},"一定要注意相关性",[14,139117,138400],{},[133,139119,139120],{"className":126561,"code":138403,"language":126563,"meta":31,"style":31},[139,139121,139122,139130,139140,139150],{"__ignoreMap":31},[142,139123,139124,139126,139128],{"class":144,"line":145},[142,139125,51640],{"class":51329},[142,139127,137562],{"class":1991},[142,139129,15601],{"class":152},[142,139131,139132,139134,139136,139138],{"class":144,"line":64},[142,139133,137569],{"class":201},[142,139135,51466],{"class":152},[142,139137,7681],{"class":257},[142,139139,1319],{"class":152},[142,139141,139142,139144,139146,139148],{"class":144,"line":1208},[142,139143,128177],{"class":201},[142,139145,51466],{"class":152},[142,139147,60898],{"class":201},[142,139149,1319],{"class":152},[142,139151,139152],{"class":144,"line":1223},[142,139153,1593],{"class":152},[14,139155,138440],{},[133,139157,139158],{"className":126561,"code":138403,"language":126563,"meta":31,"style":31},[139,139159,139160,139168,139178,139188],{"__ignoreMap":31},[142,139161,139162,139164,139166],{"class":144,"line":145},[142,139163,51640],{"class":51329},[142,139165,137562],{"class":1991},[142,139167,15601],{"class":152},[142,139169,139170,139172,139174,139176],{"class":144,"line":64},[142,139171,137569],{"class":201},[142,139173,51466],{"class":152},[142,139175,7681],{"class":257},[142,139177,1319],{"class":152},[142,139179,139180,139182,139184,139186],{"class":144,"line":1208},[142,139181,128177],{"class":201},[142,139183,51466],{"class":152},[142,139185,60898],{"class":201},[142,139187,1319],{"class":152},[142,139189,139190],{"class":144,"line":1223},[142,139191,1593],{"class":152},[14,139193,139194],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139196,139197,139198,139201],{},"2 号盒子左侧浮动，",[139,139199,139200],{},"navitems"," 导航栏组",[1160,139203,139204,139209,139218],{},[99,139205,139206,139207],{},"里面结构是 ",[139,139208,139072],{},[99,139210,139211,139212,139214,139215,139217],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[139,139213,391],{},"左右的",[139,139216,30912],{},"把两侧撑开",[99,139219,139220],{},"让文字垂直居中（行高等于高度）",[29,139222],{"style":126417,"src":139223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139225,139226],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139228,138400],{},[133,139230,139232],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},".box {\n  float: left;\n}\n",[139,139233,139234,139240,139250],{"__ignoreMap":31},[142,139235,139236,139238],{"class":144,"line":145},[142,139237,130409],{"class":1991},[142,139239,15601],{"class":152},[142,139241,139242,139244,139246,139248],{"class":144,"line":64},[142,139243,131041],{"class":201},[142,139245,51466],{"class":152},[142,139247,23765],{"class":201},[142,139249,1319],{"class":152},[142,139251,139252],{"class":144,"line":1208},[142,139253,1593],{"class":152},[14,139255,138440],{},[133,139257,139258],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,139259,139260,139266,139276],{"__ignoreMap":31},[142,139261,139262,139264],{"class":144,"line":145},[142,139263,130409],{"class":1991},[142,139265,15601],{"class":152},[142,139267,139268,139270,139272,139274],{"class":144,"line":64},[142,139269,131041],{"class":201},[142,139271,51466],{"class":152},[142,139273,23765],{"class":201},[142,139275,1319],{"class":152},[142,139277,139278],{"class":144,"line":1208},[142,139279,1593],{"class":152},[14,139281,139282],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[29,139284],{"style":126417,"src":139285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[133,139287,139288],{"className":126561,"code":130718,"language":126563,"meta":31,"style":31},[139,139289,139290,139296,139312],{"__ignoreMap":31},[142,139291,139292,139294],{"class":144,"line":145},[142,139293,51640],{"class":51329},[142,139295,15601],{"class":152},[142,139297,139298,139300,139302,139304,139306,139308,139310],{"class":144,"line":64},[142,139299,70925],{"class":201},[142,139301,51466],{"class":152},[142,139303,370],{"class":201},[142,139305,51521],{"class":148},[142,139307,51550],{"class":201},[142,139309,129953],{"class":201},[142,139311,1319],{"class":152},[142,139313,139314],{"class":144,"line":1208},[142,139315,1593],{"class":152},[113,139317,139319],{"id":139318},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[29,139321],{"style":126417,"src":139322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1160,139324,139325,139330,139335],{},[99,139326,139327,139329],{},[139,139328,131764],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[99,139331,139332,139334],{},[139,139333,131764],{}," 里面有一个大的版心",[99,139336,139337,139338,139341,139342],{},"版心里面包含 1 号盒子，",[139,139339,139340],{},"mod_service"," 是服务模块，mod 是模块的意思",[1160,139343,139344,139349,139362,139378,139383],{},[99,139345,139061,139346,139348],{},[139,139347,139340],{}," 设置高度（80px）和下边框",[99,139350,139351,139352,139355,139356,139358,139359,139361],{},"在里面定义 ",[139,139353,139354],{},"ul > li"," ,每个",[139,139357,99],{}," 宽度是300px 高度是 50px，给每个",[139,139360,99],{},"设置35px的左内边距",[99,139363,139364,139365,139367,139368,139370,139371,139373,139374,18439,139376,120246],{},"在每个",[139,139366,99],{},"里面，放一个 ",[139,139369,22939],{},"（里面放图标），一个",[139,139372,51640],{},"（里面放",[139,139375,51640],{},[139,139377,14],{},[99,139379,139061,139380,139382],{},[139,139381,22939],{},"设置浮动，让h5与这个div左右排列",[99,139384,139385],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139387,138400],{},[133,139389,139391],{"className":126561,"code":139390,"language":126563,"meta":31,"style":31},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[139,139392,139393,139399,139411,139423,139450],{"__ignoreMap":31},[142,139394,139395,139397],{"class":144,"line":145},[142,139396,134318],{"class":1991},[142,139398,15601],{"class":152},[142,139400,139401,139403,139405,139407,139409],{"class":144,"line":64},[142,139402,70597],{"class":201},[142,139404,51466],{"class":152},[142,139406,853],{"class":201},[142,139408,51521],{"class":148},[142,139410,1319],{"class":152},[142,139412,139413,139415,139417,139419,139421],{"class":144,"line":1208},[142,139414,70817],{"class":201},[142,139416,51466],{"class":152},[142,139418,853],{"class":201},[142,139420,51521],{"class":148},[142,139422,1319],{"class":152},[142,139424,139425,139427,139429,139431,139433,139435,139437,139439,139442,139444,139446,139448],{"class":144,"line":1223},[142,139426,70640],{"class":201},[142,139428,51466],{"class":152},[142,139430,61755],{"class":201},[142,139432,153],{"class":152},[142,139434,134357],{"class":5245},[142,139436,13743],{"class":152},[142,139438,61765],{"class":201},[142,139440,139441],{"class":201}," -10",[142,139443,51521],{"class":148},[142,139445,134376],{"class":201},[142,139447,51521],{"class":148},[142,139449,1319],{"class":152},[142,139451,139452],{"class":144,"line":1229},[142,139453,1593],{"class":152},[14,139455,138440],{},[133,139457,139458],{"className":126561,"code":139390,"language":126563,"meta":31,"style":31},[139,139459,139460,139466,139478,139490,139516],{"__ignoreMap":31},[142,139461,139462,139464],{"class":144,"line":145},[142,139463,134318],{"class":1991},[142,139465,15601],{"class":152},[142,139467,139468,139470,139472,139474,139476],{"class":144,"line":64},[142,139469,70597],{"class":201},[142,139471,51466],{"class":152},[142,139473,853],{"class":201},[142,139475,51521],{"class":148},[142,139477,1319],{"class":152},[142,139479,139480,139482,139484,139486,139488],{"class":144,"line":1208},[142,139481,70817],{"class":201},[142,139483,51466],{"class":152},[142,139485,853],{"class":201},[142,139487,51521],{"class":148},[142,139489,1319],{"class":152},[142,139491,139492,139494,139496,139498,139500,139502,139504,139506,139508,139510,139512,139514],{"class":144,"line":1223},[142,139493,70640],{"class":201},[142,139495,51466],{"class":152},[142,139497,61755],{"class":201},[142,139499,153],{"class":152},[142,139501,134357],{"class":5245},[142,139503,13743],{"class":152},[142,139505,61765],{"class":201},[142,139507,139441],{"class":201},[142,139509,51521],{"class":148},[142,139511,134376],{"class":201},[142,139513,51521],{"class":148},[142,139515,1319],{"class":152},[142,139517,139518],{"class":144,"line":1229},[142,139519,1593],{"class":152},[14,139521,139522],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1160,139524,139525,139528,139534,139540,139552],{},[99,139526,139527],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[99,139529,139530,139531,120246],{},"里面的布局利用 自定义列表来实现（",[139,139532,139533],{},"dl > dt + dd",[99,139535,139061,139536,139539],{},[139,139537,139538],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[99,139541,139061,139542,139545,139546,18439,139548,139551],{},[139,139543,139544],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[139,139547,139544],{},[139,139549,139550],{},"dd","之间有些距离",[99,139553,139554],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139556,138400],{},[133,139558,139559],{"className":126561,"code":138750,"language":126563,"meta":31,"style":31},[139,139560,139561,139567,139579],{"__ignoreMap":31},[142,139562,139563,139565],{"class":144,"line":145},[142,139564,51640],{"class":51329},[142,139566,15601],{"class":152},[142,139568,139569,139571,139573,139575,139577],{"class":144,"line":64},[142,139570,70499],{"class":201},[142,139572,51466],{"class":152},[142,139574,344],{"class":201},[142,139576,51585],{"class":201},[142,139578,1319],{"class":152},[142,139580,139581],{"class":144,"line":1208},[142,139582,1593],{"class":152},[14,139584,138440],{},[133,139586,139587],{"className":126561,"code":138750,"language":126563,"meta":31,"style":31},[139,139588,139589,139595,139607],{"__ignoreMap":31},[142,139590,139591,139593],{"class":144,"line":145},[142,139592,51640],{"class":51329},[142,139594,15601],{"class":152},[142,139596,139597,139599,139601,139603,139605],{"class":144,"line":64},[142,139598,70499],{"class":201},[142,139600,51466],{"class":152},[142,139602,344],{"class":201},[142,139604,51585],{"class":201},[142,139606,1319],{"class":152},[142,139608,139609],{"class":144,"line":1208},[142,139610,1593],{"class":152},[14,139612,139613],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1160,139615,139616,139625,139628,139639],{},[99,139617,139618,139619,139621,139622,139624],{},"分为上下两块，上面是 ",[139,139620,131781],{}," 友情链接，下面是 ",[139,139623,131774],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[99,139626,139627],{},"把内容分别复制到相应模块中",[99,139629,139061,139630,139632,139633,139635,139636,139638],{},[139,139631,131781],{}," 设置 15px 的下外边距，给",[139,139634,131781],{}," 里面 的 ",[139,139637,391],{}," 标签设置 左右 3px 的外边距",[99,139640,139641,139642,139644],{},"给",[139,139643,131774],{}," 设置 20px 的行高",[14,139646,138400],{},[133,139648,139649],{"className":126561,"code":138750,"language":126563,"meta":31,"style":31},[139,139650,139651,139657,139669],{"__ignoreMap":31},[142,139652,139653,139655],{"class":144,"line":145},[142,139654,51640],{"class":51329},[142,139656,15601],{"class":152},[142,139658,139659,139661,139663,139665,139667],{"class":144,"line":64},[142,139660,70499],{"class":201},[142,139662,51466],{"class":152},[142,139664,344],{"class":201},[142,139666,51585],{"class":201},[142,139668,1319],{"class":152},[142,139670,139671],{"class":144,"line":1208},[142,139672,1593],{"class":152},[14,139674,138440],{},[133,139676,139677],{"className":126561,"code":138750,"language":126563,"meta":31,"style":31},[139,139678,139679,139685,139697],{"__ignoreMap":31},[142,139680,139681,139683],{"class":144,"line":145},[142,139682,51640],{"class":51329},[142,139684,15601],{"class":152},[142,139686,139687,139689,139691,139693,139695],{"class":144,"line":64},[142,139688,70499],{"class":201},[142,139690,51466],{"class":152},[142,139692,344],{"class":201},[142,139694,51585],{"class":201},[142,139696,1319],{"class":152},[142,139698,139699],{"class":144,"line":1208},[142,139700,1593],{"class":152},[14,139702,139703],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5155,139705,139706],{},"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":31,"searchDepth":64,"depth":64,"links":139708},[139709,139710,139711,139718],{"id":137989,"depth":64,"text":137990},{"id":138008,"depth":64,"text":138009},{"id":138035,"depth":64,"text":138036,"children":139712},[139713,139714,139715,139716,139717],{"id":138039,"depth":1208,"text":138040},{"id":138052,"depth":1208,"text":138053},{"id":138076,"depth":1208,"text":138077},{"id":138098,"depth":1208,"text":138099},{"id":138170,"depth":1208,"text":138171},{"id":138296,"depth":64,"text":138297,"children":139719},[139720,139721,139722,139723,139725],{"id":138300,"depth":1208,"text":138301},{"id":138307,"depth":1208,"text":138308},{"id":138479,"depth":1208,"text":138480},{"id":139020,"depth":1208,"text":139724},"15.4.4 nav导航模块制作",{"id":139318,"depth":1208,"text":139319},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137981,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139732,"title":139733,"body":139734,"description":66,"extension":67,"meta":142136,"navigation":69,"path":142137,"seo":142138,"stem":142139,"__hash__":142140},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139735,"toc":142113},[139736,139739,139743,139747,139759,139762,139765,139768,139779,139781,139805,139807,139831,139836,139839,139841,139877,139879,139915,139918,139923,139926,139929,139932,139962,139969,139972,139982,139984,140018,140021,140055,140061,140078,140080,140116,140118,140154,140159,140184,140186,140212,140214,140238,140245,140248,140312,140314,140356,140358,140398,140405,140410,140412,140442,140444,140474,140478,140481,140488,140500,140502,140528,140530,140554,140557,140559,140583,140589,140599,140601,140631,140633,140663,140670,140711,140713,140749,140751,140787,140791,140794,140797,140800,140806,140811,140814,140837,140840,140864,140867,140891,140896,140899,140902,140905,140908,140911,140985,140987,141017,141019,141049,141052,141055,141087,141091,141095,141109,141118,141121,141126,141128,141222,141224,141318,141341,141343,141367,141369,141393,141400,141403,141413,141415,141439,141444,141452,141454,141484,141489,141529,141531,141557,141559,141585,141589,141592,141597,141600,141604,141612,141619,141627,141629,141659,141661,141691,141699,141702,141705,141707,141737,141739,141769,141772,141777,141779,141803,141805,141829,141832,141917,141919,141943,141945,141969,141973,141975,141999,142001,142035,142039,142053,142056,142061,142064,142069,142072,142102,142110],[10,139737,139733],{"id":139738},"_16-品优购项目下篇-主体与页面开发",[84,139740,139742],{"id":139741},"_161-项目主体模块制作","16.1 项目主体模块制作",[113,139744,139746],{"id":139745},"_1611-首页制作","16.1.1 首页制作",[14,139748,139749,139751,139752,139754,139755,139758],{},[302,139750,102067],{}," 主体模块是 ",[302,139753,74087],{}," 里面专有的，注意需要新的样式文件 ",[302,139756,139757],{},"index.css，"," 就不要写在common.css中了",[29,139760],{"style":126417,"src":139761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[29,139763],{"style":126417,"src":139764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139766,139767],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1160,139769,139770,139773,139776],{},[99,139771,139772],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[99,139774,139775],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[99,139777,139778],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139780,138400],{},[133,139782,139783],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,139784,139785,139791,139801],{"__ignoreMap":31},[142,139786,139787,139789],{"class":144,"line":145},[142,139788,130409],{"class":1991},[142,139790,15601],{"class":152},[142,139792,139793,139795,139797,139799],{"class":144,"line":64},[142,139794,131041],{"class":201},[142,139796,51466],{"class":152},[142,139798,23765],{"class":201},[142,139800,1319],{"class":152},[142,139802,139803],{"class":144,"line":1208},[142,139804,1593],{"class":152},[14,139806,138440],{},[133,139808,139809],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,139810,139811,139817,139827],{"__ignoreMap":31},[142,139812,139813,139815],{"class":144,"line":145},[142,139814,130409],{"class":1991},[142,139816,15601],{"class":152},[142,139818,139819,139821,139823,139825],{"class":144,"line":64},[142,139820,131041],{"class":201},[142,139822,51466],{"class":152},[142,139824,23765],{"class":201},[142,139826,1319],{"class":152},[142,139828,139829],{"class":144,"line":1208},[142,139830,1593],{"class":152},[96,139832,139833],{},[99,139834,139835],{},"左侧focus模块制作",[29,139837],{"style":126417,"src":139838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139840,138400],{},[133,139842,139843],{"className":126561,"code":127884,"language":126563,"meta":31,"style":31},[139,139844,139845,139853,139863,139873],{"__ignoreMap":31},[142,139846,139847,139849,139851],{"class":144,"line":145},[142,139848,53850],{"class":51329},[142,139850,61929],{"class":1991},[142,139852,15601],{"class":152},[142,139854,139855,139857,139859,139861],{"class":144,"line":64},[142,139856,127899],{"class":201},[142,139858,51466],{"class":152},[142,139860,54918],{"class":201},[142,139862,1319],{"class":152},[142,139864,139865,139867,139869,139871],{"class":144,"line":1208},[142,139866,70827],{"class":201},[142,139868,51466],{"class":152},[142,139870,54766],{"class":201},[142,139872,1319],{"class":152},[142,139874,139875],{"class":144,"line":1223},[142,139876,1593],{"class":152},[14,139878,138440],{},[133,139880,139881],{"className":126561,"code":127884,"language":126563,"meta":31,"style":31},[139,139882,139883,139891,139901,139911],{"__ignoreMap":31},[142,139884,139885,139887,139889],{"class":144,"line":145},[142,139886,53850],{"class":51329},[142,139888,61929],{"class":1991},[142,139890,15601],{"class":152},[142,139892,139893,139895,139897,139899],{"class":144,"line":64},[142,139894,127899],{"class":201},[142,139896,51466],{"class":152},[142,139898,54918],{"class":201},[142,139900,1319],{"class":152},[142,139902,139903,139905,139907,139909],{"class":144,"line":1208},[142,139904,70827],{"class":201},[142,139906,51466],{"class":152},[142,139908,54766],{"class":201},[142,139910,1319],{"class":152},[142,139912,139913],{"class":144,"line":1223},[142,139914,1593],{"class":152},[14,139916,139917],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[96,139919,139920],{"start":64},[99,139921,139922],{},"右侧newsflash模块制作",[29,139924],{"style":126417,"src":139925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139927,139928],{},"右侧的模块 分为上中下三个盒子",[14,139930,139931],{},"结构代码：",[133,139933,139934],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,139935,139936],{"__ignoreMap":31},[142,139937,139938,139940,139942,139944,139946,139948,139950,139952,139954,139956,139958,139960],{"class":144,"line":145},[142,139939,1063],{"class":152},[142,139941,29],{"class":51329},[142,139943,55268],{"class":1991},[142,139945,198],{"class":152},[142,139947,134078],{"class":257},[142,139949,55276],{"class":1991},[142,139951,198],{"class":152},[142,139953,134085],{"class":257},[142,139955,134088],{"class":1991},[142,139957,198],{"class":152},[142,139959,134093],{"class":257},[142,139961,51336],{"class":152},[14,139963,139964,139965,139968],{},"1 号盒子为 ",[139,139966,139967],{},"news"," 新闻模块 高度为 165px",[29,139970],{"style":126417,"src":139971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,139973,139974,139975,139978,139979],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[139,139976,139977],{},"news-hd","，下面是 ",[139,139980,139981],{},"news-bd",[14,139983,139931],{},[133,139985,139986],{"className":127308,"code":130665,"language":127310,"meta":31,"style":31},[139,139987,139988,139992,140006,140010],{"__ignoreMap":31},[142,139989,139990],{"class":144,"line":145},[142,139991,130672],{"class":211},[142,139993,139994,139996,139998,140000,140002,140004],{"class":144,"line":64},[142,139995,1063],{"class":152},[142,139997,51640],{"class":51329},[142,139999,53515],{"class":1991},[142,140001,198],{"class":152},[142,140003,130685],{"class":257},[142,140005,51336],{"class":152},[142,140007,140008],{"class":144,"line":1208},[142,140009,130692],{"class":152},[142,140011,140012,140014,140016],{"class":144,"line":1223},[142,140013,51814],{"class":152},[142,140015,51640],{"class":51329},[142,140017,51336],{"class":152},[14,140019,140020],{},"样式代码：",[133,140022,140023],{"className":127308,"code":130665,"language":127310,"meta":31,"style":31},[139,140024,140025,140029,140043,140047],{"__ignoreMap":31},[142,140026,140027],{"class":144,"line":145},[142,140028,130672],{"class":211},[142,140030,140031,140033,140035,140037,140039,140041],{"class":144,"line":64},[142,140032,1063],{"class":152},[142,140034,51640],{"class":51329},[142,140036,53515],{"class":1991},[142,140038,198],{"class":152},[142,140040,130685],{"class":257},[142,140042,51336],{"class":152},[142,140044,140045],{"class":144,"line":1208},[142,140046,130692],{"class":152},[142,140048,140049,140051,140053],{"class":144,"line":1223},[142,140050,51814],{"class":152},[142,140052,51640],{"class":51329},[142,140054,51336],{"class":152},[14,140056,140057,140058,140060],{},"上面是",[139,140059,139977],{},"，设置高度是 33px，设置下边框",[1160,140062,140063,140069],{},[99,140064,140065,140066,140068],{},"里面放一个",[139,140067,22939],{}," 标题",[99,140070,140071,140072,140074,140075,140077],{},"放一个a",[139,140073,102702],{},"，内容是 更多，然后让 ",[139,140076,391],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140079,139931],{},[133,140081,140082],{"className":126561,"code":138403,"language":126563,"meta":31,"style":31},[139,140083,140084,140092,140102,140112],{"__ignoreMap":31},[142,140085,140086,140088,140090],{"class":144,"line":145},[142,140087,51640],{"class":51329},[142,140089,137562],{"class":1991},[142,140091,15601],{"class":152},[142,140093,140094,140096,140098,140100],{"class":144,"line":64},[142,140095,137569],{"class":201},[142,140097,51466],{"class":152},[142,140099,7681],{"class":257},[142,140101,1319],{"class":152},[142,140103,140104,140106,140108,140110],{"class":144,"line":1208},[142,140105,128177],{"class":201},[142,140107,51466],{"class":152},[142,140109,60898],{"class":201},[142,140111,1319],{"class":152},[142,140113,140114],{"class":144,"line":1223},[142,140115,1593],{"class":152},[14,140117,140020],{},[133,140119,140120],{"className":126561,"code":138403,"language":126563,"meta":31,"style":31},[139,140121,140122,140130,140140,140150],{"__ignoreMap":31},[142,140123,140124,140126,140128],{"class":144,"line":145},[142,140125,51640],{"class":51329},[142,140127,137562],{"class":1991},[142,140129,15601],{"class":152},[142,140131,140132,140134,140136,140138],{"class":144,"line":64},[142,140133,137569],{"class":201},[142,140135,51466],{"class":152},[142,140137,7681],{"class":257},[142,140139,1319],{"class":152},[142,140141,140142,140144,140146,140148],{"class":144,"line":1208},[142,140143,128177],{"class":201},[142,140145,51466],{"class":152},[142,140147,60898],{"class":201},[142,140149,1319],{"class":152},[142,140151,140152],{"class":144,"line":1223},[142,140153,1593],{"class":152},[14,140155,140156,140157],{},"下面是",[139,140158,139981],{},[1160,140160,140161,140169],{},[99,140162,140163,140164,101027,140166,140168],{},"里面包含 ",[139,140165,1160],{},[139,140167,99],{}," 还有链接",[99,140170,139641,140171,140173,140174,140176,140177,140180,140181],{},[139,140172,99],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[139,140175,131227],{}," 2.设置 ",[139,140178,140179],{},"white-space: nowrap;"," 3. 设置 ",[139,140182,140183],{},"text-overflow: ellipsis;",[14,140185,139931],{},[133,140187,140189],{"className":126561,"code":140188,"language":126563,"meta":31,"style":31},"div {\n  overflow: hidden;\n}\n",[139,140190,140191,140197,140208],{"__ignoreMap":31},[142,140192,140193,140195],{"class":144,"line":145},[142,140194,51640],{"class":51329},[142,140196,15601],{"class":152},[142,140198,140199,140202,140204,140206],{"class":144,"line":64},[142,140200,140201],{"class":201},"  overflow",[142,140203,51466],{"class":152},[142,140205,61743],{"class":201},[142,140207,1319],{"class":152},[142,140209,140210],{"class":144,"line":1208},[142,140211,1593],{"class":152},[14,140213,140020],{},[133,140215,140216],{"className":126561,"code":140188,"language":126563,"meta":31,"style":31},[139,140217,140218,140224,140234],{"__ignoreMap":31},[142,140219,140220,140222],{"class":144,"line":145},[142,140221,51640],{"class":51329},[142,140223,15601],{"class":152},[142,140225,140226,140228,140230,140232],{"class":144,"line":64},[142,140227,140201],{"class":201},[142,140229,51466],{"class":152},[142,140231,61743],{"class":201},[142,140233,1319],{"class":152},[142,140235,140236],{"class":144,"line":1208},[142,140237,1593],{"class":152},[14,140239,140240,140241,140244],{},"2 号盒子为 ",[139,140242,140243],{},"lifeservice"," 生活服务模块 高度为 209px",[29,140246],{"style":126417,"src":140247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1160,140249,140250,140253,140263,140287,140298],{},[99,140251,140252],{},"设置边框（左右下边框）",[99,140254,140255,140256,140259,140260,140262],{},"里面的内容 是 ",[139,140257,140258],{},"ul > 12*li","，给",[139,140261,99],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[99,140264,140265,140266],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1160,140267,140268,140273,140282],{},[99,140269,140270,140272],{},[139,140271,140243],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[99,140274,140275,140276,140278,140279,140281],{},"可以让 ",[139,140277,140243],{}," 里面的 ",[139,140280,1160],{}," 宽度为 252，就可以装的下 4 个 小 li",[99,140283,140284,140286],{},[139,140285,140243],{}," 盒子 overflow 隐藏多余的部分就可以了",[99,140288,116476,140289,140291,140292,140294,140295,140297],{},[139,140290,99],{}," 里面放一个 ",[139,140293,594],{},"（里面放图标），下面的文本用 ",[139,140296,14],{}," 标签包裹",[99,140299,139061,140300,140302,140303,140305,140306,139095,140308,140311],{},[139,140301,594],{}," 设置 24px宽和28px的高（注意 ",[139,140304,594],{}," 是行内元素， 转成行内块），给 ",[139,140307,99],{},[139,140309,140310],{},"text-align:center"," 让里面内容居中显示",[14,140313,139931],{},[133,140315,140317],{"className":126561,"code":140316,"language":126563,"meta":31,"style":31},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[139,140318,140319,140337,140342,140352],{"__ignoreMap":31},[142,140320,140321,140323,140325,140327,140329,140331,140333,140335],{"class":144,"line":145},[142,140322,142],{"class":51329},[142,140324,12464],{"class":152},[142,140326,391],{"class":51329},[142,140328,12464],{"class":152},[142,140330,23582],{"class":51329},[142,140332,12464],{"class":152},[142,140334,302],{"class":51329},[142,140336,15601],{"class":152},[142,140338,140339],{"class":144,"line":64},[142,140340,140341],{"class":211},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[142,140343,140344,140346,140348,140350],{"class":144,"line":1208},[142,140345,128177],{"class":201},[142,140347,51466],{"class":152},[142,140349,128239],{"class":201},[142,140351,1319],{"class":152},[142,140353,140354],{"class":144,"line":1223},[142,140355,1593],{"class":152},[14,140357,140020],{},[133,140359,140360],{"className":126561,"code":140316,"language":126563,"meta":31,"style":31},[139,140361,140362,140380,140384,140394],{"__ignoreMap":31},[142,140363,140364,140366,140368,140370,140372,140374,140376,140378],{"class":144,"line":145},[142,140365,142],{"class":51329},[142,140367,12464],{"class":152},[142,140369,391],{"class":51329},[142,140371,12464],{"class":152},[142,140373,23582],{"class":51329},[142,140375,12464],{"class":152},[142,140377,302],{"class":51329},[142,140379,15601],{"class":152},[142,140381,140382],{"class":144,"line":64},[142,140383,140341],{"class":211},[142,140385,140386,140388,140390,140392],{"class":144,"line":1208},[142,140387,128177],{"class":201},[142,140389,51466],{"class":152},[142,140391,128239],{"class":201},[142,140393,1319],{"class":152},[142,140395,140396],{"class":144,"line":1223},[142,140397,1593],{"class":152},[14,140399,140400,140401,140404],{},"3 号盒子为 ",[139,140402,140403],{},"bargain"," 特价商品",[1160,140406,140407],{},[99,140408,140409],{},"这个比较简单，直接插入一张图片即可",[14,140411,139931],{},[133,140413,140414],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,140415,140416],{"__ignoreMap":31},[142,140417,140418,140420,140422,140424,140426,140428,140430,140432,140434,140436,140438,140440],{"class":144,"line":145},[142,140419,1063],{"class":152},[142,140421,29],{"class":51329},[142,140423,55268],{"class":1991},[142,140425,198],{"class":152},[142,140427,134078],{"class":257},[142,140429,55276],{"class":1991},[142,140431,198],{"class":152},[142,140433,134085],{"class":257},[142,140435,134088],{"class":1991},[142,140437,198],{"class":152},[142,140439,134093],{"class":257},[142,140441,51336],{"class":152},[14,140443,140020],{},[133,140445,140446],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,140447,140448],{"__ignoreMap":31},[142,140449,140450,140452,140454,140456,140458,140460,140462,140464,140466,140468,140470,140472],{"class":144,"line":145},[142,140451,1063],{"class":152},[142,140453,29],{"class":51329},[142,140455,55268],{"class":1991},[142,140457,198],{"class":152},[142,140459,134078],{"class":257},[142,140461,55276],{"class":1991},[142,140463,198],{"class":152},[142,140465,134085],{"class":257},[142,140467,134088],{"class":1991},[142,140469,198],{"class":152},[142,140471,134093],{"class":257},[142,140473,51336],{"class":152},[113,140475,140477],{"id":140476},"_1612-推荐模块制作","16.1.2 推荐模块制作",[29,140479],{"style":126417,"src":140480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140482,140483,140484,140487],{},"大盒子 ",[139,140485,140486],{},"recom"," 推荐模块 recommend",[1160,140489,140490],{},[99,140491,140492,140493,140495,140496,140499],{},"给这个 ",[139,140494,140486],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[139,140497,140498],{},"#ebebeb","），设置距离上边 12px",[14,140501,139931],{},[133,140503,140505],{"className":126561,"code":140504,"language":126563,"meta":31,"style":31},"div {\n  background-color: #f0f0f0;\n}\n",[139,140506,140507,140513,140524],{"__ignoreMap":31},[142,140508,140509,140511],{"class":144,"line":145},[142,140510,51640],{"class":51329},[142,140512,15601],{"class":152},[142,140514,140515,140517,140519,140522],{"class":144,"line":64},[142,140516,70907],{"class":201},[142,140518,51466],{"class":152},[142,140520,140521],{"class":201},"#f0f0f0",[142,140523,1319],{"class":152},[142,140525,140526],{"class":144,"line":1208},[142,140527,1593],{"class":152},[14,140529,140020],{},[133,140531,140532],{"className":126561,"code":140504,"language":126563,"meta":31,"style":31},[139,140533,140534,140540,140550],{"__ignoreMap":31},[142,140535,140536,140538],{"class":144,"line":145},[142,140537,51640],{"class":51329},[142,140539,15601],{"class":152},[142,140541,140542,140544,140546,140548],{"class":144,"line":64},[142,140543,70907],{"class":201},[142,140545,51466],{"class":152},[142,140547,140521],{"class":201},[142,140549,1319],{"class":152},[142,140551,140552],{"class":144,"line":1208},[142,140553,1593],{"class":152},[14,140555,140556],{},"里面包含 2 个盒子， 浮动即可",[14,140558,139931],{},[133,140560,140561],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,140562,140563,140569,140579],{"__ignoreMap":31},[142,140564,140565,140567],{"class":144,"line":145},[142,140566,130409],{"class":1991},[142,140568,15601],{"class":152},[142,140570,140571,140573,140575,140577],{"class":144,"line":64},[142,140572,131041],{"class":201},[142,140574,51466],{"class":152},[142,140576,23765],{"class":201},[142,140578,1319],{"class":152},[142,140580,140581],{"class":144,"line":1208},[142,140582,1593],{"class":152},[14,140584,140585,140586],{},"1 号盒子 ",[139,140587,140588],{},"recom_hd",[1160,140590,140591,140594],{},[99,140592,140593],{},"设置宽度205px，高度163px",[99,140595,140065,140596,140598],{},[139,140597,29],{},"标签，插入图片即可",[14,140600,139931],{},[133,140602,140603],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,140604,140605],{"__ignoreMap":31},[142,140606,140607,140609,140611,140613,140615,140617,140619,140621,140623,140625,140627,140629],{"class":144,"line":145},[142,140608,1063],{"class":152},[142,140610,29],{"class":51329},[142,140612,55268],{"class":1991},[142,140614,198],{"class":152},[142,140616,134078],{"class":257},[142,140618,55276],{"class":1991},[142,140620,198],{"class":152},[142,140622,134085],{"class":257},[142,140624,134088],{"class":1991},[142,140626,198],{"class":152},[142,140628,134093],{"class":257},[142,140630,51336],{"class":152},[14,140632,140020],{},[133,140634,140635],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,140636,140637],{"__ignoreMap":31},[142,140638,140639,140641,140643,140645,140647,140649,140651,140653,140655,140657,140659,140661],{"class":144,"line":145},[142,140640,1063],{"class":152},[142,140642,29],{"class":51329},[142,140644,55268],{"class":1991},[142,140646,198],{"class":152},[142,140648,134078],{"class":257},[142,140650,55276],{"class":1991},[142,140652,198],{"class":152},[142,140654,134085],{"class":257},[142,140656,134088],{"class":1991},[142,140658,198],{"class":152},[142,140660,134093],{"class":257},[142,140662,51336],{"class":152},[14,140664,140665,140666,140669],{},"2 号盒子 ",[139,140667,140668],{},"recom_bd"," ，注意里面的小竖线",[1160,140671,140672,140683,140686,140691,140696],{},[99,140673,140674,140675,140677,140678,140680,140681],{},"右侧结构里面放 ",[139,140676,1160],{}," 包含 4个 ",[139,140679,99],{},"，每个li里面包含一个",[139,140682,29],{},[99,140684,140685],{},"直接利用切片工具把里面的内容当成一张图片",[99,140687,139061,140688,140690],{},[139,140689,99],{}," 设置浮动",[99,140692,139061,140693,140695],{},[139,140694,29],{}," 设置宽高，宽度 248px，高度 163px",[99,140697,140698,140699,140259,140702,140704,140705,140707,140708],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[139,140700,140701],{},"top 10px",[139,140703,99],{},"设置相对定位（注意，最后一个",[139,140706,99],{},"不用设置伪元素），可以利用 ",[139,140709,140710],{},"nth-child(-n+3){...}",[14,140712,139931],{},[133,140714,140715],{"className":126561,"code":138403,"language":126563,"meta":31,"style":31},[139,140716,140717,140725,140735,140745],{"__ignoreMap":31},[142,140718,140719,140721,140723],{"class":144,"line":145},[142,140720,51640],{"class":51329},[142,140722,137562],{"class":1991},[142,140724,15601],{"class":152},[142,140726,140727,140729,140731,140733],{"class":144,"line":64},[142,140728,137569],{"class":201},[142,140730,51466],{"class":152},[142,140732,7681],{"class":257},[142,140734,1319],{"class":152},[142,140736,140737,140739,140741,140743],{"class":144,"line":1208},[142,140738,128177],{"class":201},[142,140740,51466],{"class":152},[142,140742,60898],{"class":201},[142,140744,1319],{"class":152},[142,140746,140747],{"class":144,"line":1223},[142,140748,1593],{"class":152},[14,140750,140020],{},[133,140752,140753],{"className":126561,"code":138403,"language":126563,"meta":31,"style":31},[139,140754,140755,140763,140773,140783],{"__ignoreMap":31},[142,140756,140757,140759,140761],{"class":144,"line":145},[142,140758,51640],{"class":51329},[142,140760,137562],{"class":1991},[142,140762,15601],{"class":152},[142,140764,140765,140767,140769,140771],{"class":144,"line":64},[142,140766,137569],{"class":201},[142,140768,51466],{"class":152},[142,140770,7681],{"class":257},[142,140772,1319],{"class":152},[142,140774,140775,140777,140779,140781],{"class":144,"line":1208},[142,140776,128177],{"class":201},[142,140778,51466],{"class":152},[142,140780,60898],{"class":201},[142,140782,1319],{"class":152},[142,140784,140785],{"class":144,"line":1223},[142,140786,1593],{"class":152},[113,140788,140790],{"id":140789},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[29,140792],{"style":126417,"src":140793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140795,140796],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140798,140799],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140801,140802,140805],{},[139,140803,140804],{},"box_hd"," 制作",[14,140807,140585,140808,140810],{},[139,140809,140804],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[29,140812],{"style":126417,"src":140813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1160,140815,140816,140821,140826,140829],{},[99,140817,140818,140820],{},[139,140819,140804],{}," 给 30px 的高度，2个像素的下边框",[99,140822,140823,140824],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[139,140825,139072],{},[99,140827,140828],{},"左侧盒左浮动，右侧盒子右浮动",[99,140830,140831,140833,140834,140836],{},[139,140832,391],{},"标签之间的距离用左右的",[139,140835,30912],{},"撑开即可",[14,140838,140839],{},"结构代码",[133,140841,140842],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,140843,140844,140850,140860],{"__ignoreMap":31},[142,140845,140846,140848],{"class":144,"line":145},[142,140847,130409],{"class":1991},[142,140849,15601],{"class":152},[142,140851,140852,140854,140856,140858],{"class":144,"line":64},[142,140853,131041],{"class":201},[142,140855,51466],{"class":152},[142,140857,23765],{"class":201},[142,140859,1319],{"class":152},[142,140861,140862],{"class":144,"line":1208},[142,140863,1593],{"class":152},[14,140865,140866],{},"样式代码",[133,140868,140869],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,140870,140871,140877,140887],{"__ignoreMap":31},[142,140872,140873,140875],{"class":144,"line":145},[142,140874,130409],{"class":1991},[142,140876,15601],{"class":152},[142,140878,140879,140881,140883,140885],{"class":144,"line":64},[142,140880,131041],{"class":201},[142,140882,51466],{"class":152},[142,140884,23765],{"class":201},[142,140886,1319],{"class":152},[142,140888,140889],{"class":144,"line":1208},[142,140890,1593],{"class":152},[14,140892,140893,140805],{},[139,140894,140895],{},"box_bd",[14,140897,140898],{},"2 号盒子 box_bd，不要给高度",[29,140900],{"style":126417,"src":140901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140903,140904],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140906,140907],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140909,140910],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1160,140912,140913,140925,140941],{},[99,140914,140915,140917,140918,140921,140922,140924],{},[139,140916,140895],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[139,140919,140920],{},"tab_content","，在",[139,140923,140920],{}," 里面包裹tab选项卡对应的内容",[99,140926,140927,140928,140931,140932,140934,140935,140937,140938,140940],{},"内容被一个大盒子包裹（",[139,140929,140930],{},"tab_list_item","），里面是 ",[139,140933,1160],{}," 包裹 5个 ",[139,140936,99],{},"，每个",[139,140939,99],{},"设置对应的宽度，然后设置浮动",[99,140942,140943,140944,140946,140947,140949,140950],{},"而这5个",[139,140945,99],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[139,140948,99],{},"设置",[1160,140951,140952,140970,140973],{},[99,140953,140954,140955,140957,140958,140960,140961,140963,140964,140966,140967,140969],{},"第一个小 ",[139,140956,99],{}," 分为上下结构，上面是 ",[139,140959,1160],{}," 包裹 ",[139,140962,99],{}," ，",[139,140965,99],{},"里面包裹 ",[139,140968,391],{},"，下面插入一张图片",[99,140971,140972],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[99,140974,140975,140976,140978,140979,140981,140982,140984],{},"后面的小 ",[139,140977,99],{}," 里面先放一个",[139,140980,391],{},"标签，然后在",[139,140983,391],{},"标签里面插入图片即可",[14,140986,140839],{},[133,140988,140989],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,140990,140991],{"__ignoreMap":31},[142,140992,140993,140995,140997,140999,141001,141003,141005,141007,141009,141011,141013,141015],{"class":144,"line":145},[142,140994,1063],{"class":152},[142,140996,29],{"class":51329},[142,140998,55268],{"class":1991},[142,141000,198],{"class":152},[142,141002,134078],{"class":257},[142,141004,55276],{"class":1991},[142,141006,198],{"class":152},[142,141008,134085],{"class":257},[142,141010,134088],{"class":1991},[142,141012,198],{"class":152},[142,141014,134093],{"class":257},[142,141016,51336],{"class":152},[14,141018,140866],{},[133,141020,141021],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,141022,141023],{"__ignoreMap":31},[142,141024,141025,141027,141029,141031,141033,141035,141037,141039,141041,141043,141045,141047],{"class":144,"line":145},[142,141026,1063],{"class":152},[142,141028,29],{"class":51329},[142,141030,55268],{"class":1991},[142,141032,198],{"class":152},[142,141034,134078],{"class":257},[142,141036,55276],{"class":1991},[142,141038,198],{"class":152},[142,141040,134085],{"class":257},[142,141042,134088],{"class":1991},[142,141044,198],{"class":152},[142,141046,134093],{"class":257},[142,141048,51336],{"class":152},[14,141050,141051],{},"tab栏切换需求！！！！！！介绍：",[29,141053],{"style":126417,"src":141054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1160,141056,141057,141065,141071,141074],{},[99,141058,141059,141062,141063],{},[139,141060,141061],{},"tab","栏的布局是 ",[139,141064,139072],{},[99,141066,141067,141068,141070],{},"有多少个",[139,141069,141061],{},"选项卡，那么对应就有多少个内容",[99,141072,141073],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[99,141075,141076,141077,141080,141081,141083,141084,141086],{},"等后面我们学习了",[139,141078,141079],{},"js","之后，我们就会配合",[139,141082,141079],{},"来实现，",[139,141085,141061],{},"栏的切换",[84,141088,141090],{"id":141089},"_162-列表制作","16.2 列表制作",[113,141092,141094],{"id":141093},"_1621-准备工作","16.2.1 准备工作",[1160,141096,141097,141100,141103,141106],{},[99,141098,141099],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[99,141101,141102],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[99,141104,141105],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[99,141107,141108],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[113,141110,141112,141113,101027,141115,141117],{"id":141111},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[139,141114,131566],{},[139,141116,53742],{}," 修改",[29,141119],{"style":126417,"src":141120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1160,141122,141123],{},[99,141124,141125],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141127,139931],{},[133,141129,141130],{"className":126561,"code":131993,"language":126563,"meta":31,"style":31},[139,141131,141132,141136,141150,141154,141168,141172,141186,141190,141204,141208],{"__ignoreMap":31},[142,141133,141134],{"class":144,"line":145},[142,141135,132000],{"class":211},[142,141137,141138,141140,141142,141144,141146,141148],{"class":144,"line":64},[142,141139,132005],{"class":1991},[142,141141,79836],{"class":152},[142,141143,128921],{"class":201},[142,141145,51466],{"class":152},[142,141147,132014],{"class":201},[142,141149,129491],{"class":152},[142,141151,141152],{"class":144,"line":1208},[142,141153,132021],{"class":211},[142,141155,141156,141158,141160,141162,141164,141166],{"class":144,"line":1223},[142,141157,132026],{"class":1991},[142,141159,79836],{"class":152},[142,141161,128921],{"class":201},[142,141163,51466],{"class":152},[142,141165,54793],{"class":201},[142,141167,129491],{"class":152},[142,141169,141170],{"class":144,"line":1229},[142,141171,132041],{"class":211},[142,141173,141174,141176,141178,141180,141182,141184],{"class":144,"line":1243},[142,141175,132046],{"class":1991},[142,141177,79836],{"class":152},[142,141179,128921],{"class":201},[142,141181,51466],{"class":152},[142,141183,54860],{"class":201},[142,141185,129491],{"class":152},[142,141187,141188],{"class":144,"line":1249},[142,141189,132061],{"class":211},[142,141191,141192,141194,141196,141198,141200,141202],{"class":144,"line":1340},[142,141193,132066],{"class":1991},[142,141195,79836],{"class":152},[142,141197,128921],{"class":201},[142,141199,51466],{"class":152},[142,141201,86262],{"class":201},[142,141203,129491],{"class":152},[142,141205,141206],{"class":144,"line":1346},[142,141207,132081],{"class":211},[142,141209,141210,141212,141214,141216,141218,141220],{"class":144,"line":1358},[142,141211,132086],{"class":1991},[142,141213,79836],{"class":152},[142,141215,128921],{"class":201},[142,141217,51466],{"class":152},[142,141219,132095],{"class":201},[142,141221,129491],{"class":152},[14,141223,140020],{},[133,141225,141226],{"className":126561,"code":131993,"language":126563,"meta":31,"style":31},[139,141227,141228,141232,141246,141250,141264,141268,141282,141286,141300,141304],{"__ignoreMap":31},[142,141229,141230],{"class":144,"line":145},[142,141231,132000],{"class":211},[142,141233,141234,141236,141238,141240,141242,141244],{"class":144,"line":64},[142,141235,132005],{"class":1991},[142,141237,79836],{"class":152},[142,141239,128921],{"class":201},[142,141241,51466],{"class":152},[142,141243,132014],{"class":201},[142,141245,129491],{"class":152},[142,141247,141248],{"class":144,"line":1208},[142,141249,132021],{"class":211},[142,141251,141252,141254,141256,141258,141260,141262],{"class":144,"line":1223},[142,141253,132026],{"class":1991},[142,141255,79836],{"class":152},[142,141257,128921],{"class":201},[142,141259,51466],{"class":152},[142,141261,54793],{"class":201},[142,141263,129491],{"class":152},[142,141265,141266],{"class":144,"line":1229},[142,141267,132041],{"class":211},[142,141269,141270,141272,141274,141276,141278,141280],{"class":144,"line":1243},[142,141271,132046],{"class":1991},[142,141273,79836],{"class":152},[142,141275,128921],{"class":201},[142,141277,51466],{"class":152},[142,141279,54860],{"class":201},[142,141281,129491],{"class":152},[142,141283,141284],{"class":144,"line":1249},[142,141285,132061],{"class":211},[142,141287,141288,141290,141292,141294,141296,141298],{"class":144,"line":1340},[142,141289,132066],{"class":1991},[142,141291,79836],{"class":152},[142,141293,128921],{"class":201},[142,141295,51466],{"class":152},[142,141297,86262],{"class":201},[142,141299,129491],{"class":152},[142,141301,141302],{"class":144,"line":1346},[142,141303,132081],{"class":211},[142,141305,141306,141308,141310,141312,141314,141316],{"class":144,"line":1358},[142,141307,132086],{"class":1991},[142,141309,79836],{"class":152},[142,141311,128921],{"class":201},[142,141313,51466],{"class":152},[142,141315,132095],{"class":201},[142,141317,129491],{"class":152},[1160,141319,141320,141331],{},[99,141321,141322,141323,141326,141327,101027,141329],{},"1 号盒子左侧浮动 ",[139,141324,141325],{},"sk_list"," 里面包含 ",[139,141328,1160],{},[139,141330,99],{},[99,141332,141333,141334,141326,141337,101027,141339],{},"2 号盒子左侧浮动 ",[139,141335,141336],{},"sk_con",[139,141338,1160],{},[139,141340,99],{},[14,141342,139931],{},[133,141344,141345],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,141346,141347,141353,141363],{"__ignoreMap":31},[142,141348,141349,141351],{"class":144,"line":145},[142,141350,130409],{"class":1991},[142,141352,15601],{"class":152},[142,141354,141355,141357,141359,141361],{"class":144,"line":64},[142,141356,131041],{"class":201},[142,141358,51466],{"class":152},[142,141360,23765],{"class":201},[142,141362,1319],{"class":152},[142,141364,141365],{"class":144,"line":1208},[142,141366,1593],{"class":152},[14,141368,140020],{},[133,141370,141371],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,141372,141373,141379,141389],{"__ignoreMap":31},[142,141374,141375,141377],{"class":144,"line":145},[142,141376,130409],{"class":1991},[142,141378,15601],{"class":152},[142,141380,141381,141383,141385,141387],{"class":144,"line":64},[142,141382,131041],{"class":201},[142,141384,51466],{"class":152},[142,141386,23765],{"class":201},[142,141388,1319],{"class":152},[142,141390,141391],{"class":144,"line":1208},[142,141392,1593],{"class":152},[113,141394,141396,141397],{"id":141395},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[139,141398,141399],{},"sk_container",[29,141401],{"style":126417,"src":141402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1160,141404,141405,141410],{},[99,141406,140585,141407,141409],{},[139,141408,141399],{}," 给宽度 1200，不要给高度",[99,141411,141412],{},"一定不要忘记清除浮动",[14,141414,139931],{},[133,141416,141417],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,141418,141419,141425,141435],{"__ignoreMap":31},[142,141420,141421,141423],{"class":144,"line":145},[142,141422,130409],{"class":1991},[142,141424,15601],{"class":152},[142,141426,141427,141429,141431,141433],{"class":144,"line":64},[142,141428,131041],{"class":201},[142,141430,51466],{"class":152},[142,141432,23765],{"class":201},[142,141434,1319],{"class":152},[142,141436,141437],{"class":144,"line":1208},[142,141438,1593],{"class":152},[96,141440,141441],{},[99,141442,141443],{},"sk_hd制作",[1160,141445,141446],{},[99,141447,140665,141448,141451],{},[139,141449,141450],{},"sk_hd"," ，插入图片即可",[14,141453,139931],{},[133,141455,141456],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,141457,141458],{"__ignoreMap":31},[142,141459,141460,141462,141464,141466,141468,141470,141472,141474,141476,141478,141480,141482],{"class":144,"line":145},[142,141461,1063],{"class":152},[142,141463,29],{"class":51329},[142,141465,55268],{"class":1991},[142,141467,198],{"class":152},[142,141469,134078],{"class":257},[142,141471,55276],{"class":1991},[142,141473,198],{"class":152},[142,141475,134085],{"class":257},[142,141477,134088],{"class":1991},[142,141479,198],{"class":152},[142,141481,134093],{"class":257},[142,141483,51336],{"class":152},[96,141485,141486],{"start":64},[99,141487,141488],{},"sk_bd制作",[1160,141490,141491],{},[99,141492,141493,141494,141497,141498,101027,141500,141502],{},"3 号盒子 ",[139,141495,141496],{},"sk_bd"," ，里面包含很多的 ",[139,141499,1160],{},[139,141501,99],{},[1160,141503,141504,141513],{},[99,141505,141506,141507,141509,141510,141512],{},"当鼠标移入到 ",[139,141508,99],{}," 上面的时候显示红色的边框，在这里先给 ",[139,141511,99],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[99,141514,141515,141516,141518,141519,141521,141522,141525,141526,141528],{},"由于给每个 ",[139,141517,99],{}," 都设置了外边距，导致一行的最后一个 ",[139,141520,99],{}," 掉了下来，在这里我们利用 ",[139,141523,141524],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[139,141527,99],{},"，去掉外边距就好了",[14,141530,139931],{},[133,141532,141533],{"className":126561,"code":138750,"language":126563,"meta":31,"style":31},[139,141534,141535,141541,141553],{"__ignoreMap":31},[142,141536,141537,141539],{"class":144,"line":145},[142,141538,51640],{"class":51329},[142,141540,15601],{"class":152},[142,141542,141543,141545,141547,141549,141551],{"class":144,"line":64},[142,141544,70499],{"class":201},[142,141546,51466],{"class":152},[142,141548,344],{"class":201},[142,141550,51585],{"class":201},[142,141552,1319],{"class":152},[142,141554,141555],{"class":144,"line":1208},[142,141556,1593],{"class":152},[14,141558,140020],{},[133,141560,141561],{"className":126561,"code":138750,"language":126563,"meta":31,"style":31},[139,141562,141563,141569,141581],{"__ignoreMap":31},[142,141564,141565,141567],{"class":144,"line":145},[142,141566,51640],{"class":51329},[142,141568,15601],{"class":152},[142,141570,141571,141573,141575,141577,141579],{"class":144,"line":64},[142,141572,70499],{"class":201},[142,141574,51466],{"class":152},[142,141576,344],{"class":201},[142,141578,51585],{"class":201},[142,141580,1319],{"class":152},[142,141582,141583],{"class":144,"line":1208},[142,141584,1593],{"class":152},[84,141586,141588],{"id":141587},"_163-注册页面制作","16.3 注册页面制作",[29,141590],{"style":126417,"src":141591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141593,141594,141596],{},[302,141595,9054],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[29,141598],{"style":126417,"src":141599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[113,141601,141603],{"id":141602},"_1631-准备工作","16.3.1 准备工作",[1160,141605,141606,141609],{},[99,141607,141608],{},"创建register.html，引入 base.css，引入favicon图标",[99,141610,141611],{},"创建register.css ，在html页面进行引入",[113,141613,141615,141616,141618],{"id":141614},"_1632-header-头部实现","16.3.2 ",[139,141617,131566],{}," 头部实现",[1160,141620,141621,141624],{},[99,141622,141623],{},"整个内容用 版心 进行包裹",[99,141625,141626],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141628,139931],{},[133,141630,141631],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,141632,141633],{"__ignoreMap":31},[142,141634,141635,141637,141639,141641,141643,141645,141647,141649,141651,141653,141655,141657],{"class":144,"line":145},[142,141636,1063],{"class":152},[142,141638,29],{"class":51329},[142,141640,55268],{"class":1991},[142,141642,198],{"class":152},[142,141644,134078],{"class":257},[142,141646,55276],{"class":1991},[142,141648,198],{"class":152},[142,141650,134085],{"class":257},[142,141652,134088],{"class":1991},[142,141654,198],{"class":152},[142,141656,134093],{"class":257},[142,141658,51336],{"class":152},[14,141660,140020],{},[133,141662,141663],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,141664,141665],{"__ignoreMap":31},[142,141666,141667,141669,141671,141673,141675,141677,141679,141681,141683,141685,141687,141689],{"class":144,"line":145},[142,141668,1063],{"class":152},[142,141670,29],{"class":51329},[142,141672,55268],{"class":1991},[142,141674,198],{"class":152},[142,141676,134078],{"class":257},[142,141678,55276],{"class":1991},[142,141680,198],{"class":152},[142,141682,134085],{"class":257},[142,141684,134088],{"class":1991},[142,141686,198],{"class":152},[142,141688,134093],{"class":257},[142,141690,51336],{"class":152},[113,141692,141694,141695,141698],{"id":141693},"_1633-registerarea-主体模块实现","16.3.3 ",[139,141696,141697],{},"registerarea"," 主体模块实现",[29,141700],{"style":126417,"src":141701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141703,141704],{},"整个大盒子 高度为 522px，设置4个边框",[14,141706,139931],{},[133,141708,141709],{"className":126561,"code":130718,"language":126563,"meta":31,"style":31},[139,141710,141711,141717,141733],{"__ignoreMap":31},[142,141712,141713,141715],{"class":144,"line":145},[142,141714,51640],{"class":51329},[142,141716,15601],{"class":152},[142,141718,141719,141721,141723,141725,141727,141729,141731],{"class":144,"line":64},[142,141720,70925],{"class":201},[142,141722,51466],{"class":152},[142,141724,370],{"class":201},[142,141726,51521],{"class":148},[142,141728,51550],{"class":201},[142,141730,129953],{"class":201},[142,141732,1319],{"class":152},[142,141734,141735],{"class":144,"line":1208},[142,141736,1593],{"class":152},[14,141738,140020],{},[133,141740,141741],{"className":126561,"code":130718,"language":126563,"meta":31,"style":31},[139,141742,141743,141749,141765],{"__ignoreMap":31},[142,141744,141745,141747],{"class":144,"line":145},[142,141746,51640],{"class":51329},[142,141748,15601],{"class":152},[142,141750,141751,141753,141755,141757,141759,141761,141763],{"class":144,"line":64},[142,141752,70925],{"class":201},[142,141754,51466],{"class":152},[142,141756,370],{"class":201},[142,141758,51521],{"class":148},[142,141760,51550],{"class":201},[142,141762,129953],{"class":201},[142,141764,1319],{"class":152},[142,141766,141767],{"class":144,"line":1208},[142,141768,1593],{"class":152},[14,141770,141771],{},"1号盒子 是一个 h3 标签，放标题",[1160,141773,141774],{},[99,141775,141776],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141778,139931],{},[133,141780,141781],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,141782,141783,141789,141799],{"__ignoreMap":31},[142,141784,141785,141787],{"class":144,"line":145},[142,141786,130409],{"class":1991},[142,141788,15601],{"class":152},[142,141790,141791,141793,141795,141797],{"class":144,"line":64},[142,141792,131041],{"class":201},[142,141794,51466],{"class":152},[142,141796,23765],{"class":201},[142,141798,1319],{"class":152},[142,141800,141801],{"class":144,"line":1208},[142,141802,1593],{"class":152},[14,141804,140020],{},[133,141806,141807],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,141808,141809,141815,141825],{"__ignoreMap":31},[142,141810,141811,141813],{"class":144,"line":145},[142,141812,130409],{"class":1991},[142,141814,15601],{"class":152},[142,141816,141817,141819,141821,141823],{"class":144,"line":64},[142,141818,131041],{"class":201},[142,141820,51466],{"class":152},[142,141822,23765],{"class":201},[142,141824,1319],{"class":152},[142,141826,141827],{"class":144,"line":1208},[142,141828,1593],{"class":152},[14,141830,141831],{},"2号盒子 里面放注册的内容",[1160,141833,141834,141837,141846,141860,141873,141876,141879,141897,141911],{},[99,141835,141836],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[99,141838,141839,141840,141842,141843,141845],{},"里面的内容利用 ",[139,141841,1160],{}," 包含 ",[139,141844,99],{}," 来实现的（不需要用表格）",[99,141847,139075,141848,141850,141851,141853,141854,141856,141857,141859],{},[139,141849,99],{}," 里面，左侧放 ",[139,141852,33637],{}," 标签， 中间放",[139,141855,53850],{}," 标签， 右侧放 ",[139,141858,142],{}," 提示信息",[99,141861,141862,141863,141865,141866,141868,141869,141872],{},"左侧 ",[139,141864,33637],{},"里面的文字都是右对齐，我们可以给",[139,141867,33637],{},"设置一个宽度（88px），然后利用",[139,141870,141871],{},"text-align"," 来设置右对齐",[99,141874,141875],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[99,141877,141878],{},"右侧 span修饰一下文字颜色",[99,141880,141881,141882],{},"提示信息的样式优化",[1160,141883,141884,141887,141890],{},[99,141885,141886],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[99,141888,141889],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[99,141891,141892,141893,141896],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[139,141894,141895],{},"vertical-algin"," 来设置 图片与文字对齐方式",[99,141898,141899,141900],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1160,141901,141902,141908],{},[99,141903,141904,141905,141907],{},"设置 ",[139,141906,23582],{}," 的 左右 12px 的内边距，设置一下文字颜色",[99,141909,141910],{},"分别设置 背景颜色",[99,141912,141913,141914,141916],{},"同意协议 和 完成注册 都是用 ",[139,141915,99],{}," 进行包裹",[14,141918,139931],{},[133,141920,141921],{"className":126561,"code":140504,"language":126563,"meta":31,"style":31},[139,141922,141923,141929,141939],{"__ignoreMap":31},[142,141924,141925,141927],{"class":144,"line":145},[142,141926,51640],{"class":51329},[142,141928,15601],{"class":152},[142,141930,141931,141933,141935,141937],{"class":144,"line":64},[142,141932,70907],{"class":201},[142,141934,51466],{"class":152},[142,141936,140521],{"class":201},[142,141938,1319],{"class":152},[142,141940,141941],{"class":144,"line":1208},[142,141942,1593],{"class":152},[14,141944,140020],{},[133,141946,141947],{"className":126561,"code":140504,"language":126563,"meta":31,"style":31},[139,141948,141949,141955,141965],{"__ignoreMap":31},[142,141950,141951,141953],{"class":144,"line":145},[142,141952,51640],{"class":51329},[142,141954,15601],{"class":152},[142,141956,141957,141959,141961,141963],{"class":144,"line":64},[142,141958,70907],{"class":201},[142,141960,51466],{"class":152},[142,141962,140521],{"class":201},[142,141964,1319],{"class":152},[142,141966,141967],{"class":144,"line":1208},[142,141968,1593],{"class":152},[113,141970,141972],{"id":141971},"_1634-底部实现","16.3.4 底部实现",[14,141974,139931],{},[133,141976,141977],{"className":126561,"code":140504,"language":126563,"meta":31,"style":31},[139,141978,141979,141985,141995],{"__ignoreMap":31},[142,141980,141981,141983],{"class":144,"line":145},[142,141982,51640],{"class":51329},[142,141984,15601],{"class":152},[142,141986,141987,141989,141991,141993],{"class":144,"line":64},[142,141988,70907],{"class":201},[142,141990,51466],{"class":152},[142,141992,140521],{"class":201},[142,141994,1319],{"class":152},[142,141996,141997],{"class":144,"line":1208},[142,141998,1593],{"class":152},[14,142000,140020],{},[133,142002,142003],{"className":127308,"code":130665,"language":127310,"meta":31,"style":31},[139,142004,142005,142009,142023,142027],{"__ignoreMap":31},[142,142006,142007],{"class":144,"line":145},[142,142008,130672],{"class":211},[142,142010,142011,142013,142015,142017,142019,142021],{"class":144,"line":64},[142,142012,1063],{"class":152},[142,142014,51640],{"class":51329},[142,142016,53515],{"class":1991},[142,142018,198],{"class":152},[142,142020,130685],{"class":257},[142,142022,51336],{"class":152},[142,142024,142025],{"class":144,"line":1208},[142,142026,130692],{"class":152},[142,142028,142029,142031,142033],{"class":144,"line":1223},[142,142030,51814],{"class":152},[142,142032,51640],{"class":51329},[142,142034,51336],{"class":152},[84,142036,142038],{"id":142037},"_164-项目总结","16.4 项目总结",[96,142040,142041,142044,142047,142050],{},[99,142042,142043],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[99,142045,142046],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[99,142048,142049],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[99,142051,142052],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[29,142054],{"style":126417,"src":142055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[96,142057,142058],{"start":1229},[99,142059,142060],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[29,142062],{"style":126417,"src":142063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[96,142065,142066],{"start":1243},[99,142067,142068],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[29,142070],{"style":126417,"src":142071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[133,142073,142074],{"className":127308,"code":136718,"language":127310,"meta":31,"style":31},[139,142075,142076],{"__ignoreMap":31},[142,142077,142078,142080,142082,142084,142086,142088,142090,142092,142094,142096,142098,142100],{"class":144,"line":145},[142,142079,1063],{"class":152},[142,142081,53850],{"class":51329},[142,142083,53853],{"class":1991},[142,142085,198],{"class":152},[142,142087,62728],{"class":257},[142,142089,14949],{"class":1991},[142,142091,198],{"class":152},[142,142093,136739],{"class":257},[142,142095,61049],{"class":1991},[142,142097,198],{"class":152},[142,142099,136746],{"class":257},[142,142101,51336],{"class":152},[96,142103,142104,142107],{"start":1249},[99,142105,142106],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[99,142108,142109],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5155,142111,142112],{},"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":31,"searchDepth":64,"depth":64,"links":142114},[142115,142120,142127,142135],{"id":139741,"depth":64,"text":139742,"children":142116},[142117,142118,142119],{"id":139745,"depth":1208,"text":139746},{"id":140476,"depth":1208,"text":140477},{"id":140789,"depth":1208,"text":140790},{"id":141089,"depth":64,"text":141090,"children":142121},[142122,142123,142125],{"id":141093,"depth":1208,"text":141094},{"id":141111,"depth":1208,"text":142124},"16.2.2 列表页 header 和 nav 修改",{"id":141395,"depth":1208,"text":142126},"16.2.3 列表页主体 sk_container",{"id":141587,"depth":64,"text":141588,"children":142128},[142129,142130,142132,142134],{"id":141602,"depth":1208,"text":141603},{"id":141614,"depth":1208,"text":142131},"16.3.2 header 头部实现",{"id":141693,"depth":1208,"text":142133},"16.3.3 registerarea 主体模块实现",{"id":141971,"depth":1208,"text":141972},{"id":142037,"depth":64,"text":142038},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139733,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142142,"title":142143,"body":142144,"description":66,"extension":67,"meta":142252,"navigation":69,"path":142253,"seo":142254,"stem":142255,"__hash__":142256},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142145,"toc":142247},[142146,142149,142153,142156,142159,142168,142177,142181,142186,142193,142211,142214,142217,142220,142223,142226,142229,142232,142235,142238,142241,142244],[10,142147,142143],{"id":142148},"_17-web服务器与网站发布",[84,142150,142152],{"id":142151},"_171-web服务器","17.1 Web服务器",[14,142154,142155],{},"把自己网站上传到服务器上，可以让其他人访问",[29,142157],{"style":126417,"src":142158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142160,142161,142164,142165],{},[302,142162,142163],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[302,142166,142167],{},"Web 服务器等",[14,142169,142170,142171,101027,142174,25769],{},"根据服务器在网络中所在的位置不同，又可分为 ",[302,142172,142173],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[302,142175,142176],{},"远程服务器",[113,142178,142180],{"id":142179},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142182,142183],{},[302,142184,142185],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142187,142188,142189],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[391,142190,142191],{"href":142191,"rel":142192},"http:\u002F\u002Ffree.3v.do\u002F",[23894],[1160,142194,142195,142198,142201,142208],{},[99,142196,142197],{},"去免费空间网站注册账号。",[99,142199,142200],{},"记录下主机名、用户名、密码、域名。",[99,142202,142203,142204,142207],{},"利用 ",[139,142205,142206],{},"utftp"," 软件 上传网站到远程服务器",[99,142209,142210],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142212,142213],{},"使用软件上传，对上传软件文件进行解压",[29,142215],{"style":126417,"src":142216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[29,142218],{"style":126417,"src":142219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142221,142222],{},"输入刚刚申请的服务器账号信息：",[29,142224],{"style":126417,"src":142225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[29,142227],{"style":126417,"src":142228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[29,142230],{"style":126417,"src":142231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[29,142233],{"style":126417,"src":142234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142236,142237],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[29,142239],{"style":126417,"src":142240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142242,142243],{},"浏览器输入域名即可访问",[14,142245,142246],{},"首页一定必须是index",{"title":31,"searchDepth":64,"depth":64,"links":142248},[142249],{"id":142151,"depth":64,"text":142152,"children":142250},[142251],{"id":142179,"depth":1208,"text":142180},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142143,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142258,"title":142259,"body":142260,"description":66,"extension":67,"meta":143187,"navigation":69,"path":143188,"seo":143189,"stem":143190,"__hash__":143191},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142261,"toc":143170},[142262,142265,142269,142272,142275,142286,142289,142293,142297,142302,142305,142308,142311,142314,142318,142344,142348,142352,142355,142358,142362,142395,142399,142402,142405,142469,142473,142477,142480,142483,142486,142490,142535,142539,142542,142572,142576,142580,142583,142586,142590,142593,142662,142665,142773,142775,142781,142785,142788,142791,142887,142890,142894,142918,142922,142925,142929,142932,142936,142939,142942,142945,142948,142952,142955,142958,142962,142966,142969,142972,142975,142978,142982,142985,142989,142992,142995,143040,143044,143048,143051,143054,143057,143089,143093,143096,143130,143134,143137,143167],[10,142263,142259],{"id":142264},"_18-2d动画与3d转换",[84,142266,142268],{"id":142267},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142270,142271],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142273,142274],{},"转换（transform）你可以简单理解为变形",[1160,142276,142277,142280,142283],{},[99,142278,142279],{},"移动：translate",[99,142281,142282],{},"旋转：rotate",[99,142284,142285],{},"缩放：scale",[29,142287],{"style":126417,"src":142288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[113,142290,142292],{"id":142291},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22027,142294,142296],{"id":142295},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142298,142299,142300],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[302,142301,133220],{},[29,142303],{"style":126417,"src":142304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142306,142307],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142309,142310],{},"对于行内元素无效",[14,142312,142313],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22027,142315,142317],{"id":142316},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[133,142319,142320],{"className":126561,"code":138750,"language":126563,"meta":31,"style":31},[139,142321,142322,142328,142340],{"__ignoreMap":31},[142,142323,142324,142326],{"class":144,"line":145},[142,142325,51640],{"class":51329},[142,142327,15601],{"class":152},[142,142329,142330,142332,142334,142336,142338],{"class":144,"line":64},[142,142331,70499],{"class":201},[142,142333,51466],{"class":152},[142,142335,344],{"class":201},[142,142337,51585],{"class":201},[142,142339,1319],{"class":152},[142,142341,142342],{"class":144,"line":1208},[142,142343,1593],{"class":152},[113,142345,142347],{"id":142346},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22027,142349,142351],{"id":142350},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142353,142354],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[29,142356],{"style":126417,"src":142357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22027,142359,142361],{"id":142360},"_18122-旋转效果","18.1.2.2 旋转效果",[133,142363,142365],{"className":126561,"code":142364,"language":126563,"meta":31,"style":31},"div {\n  transform: rotate(45deg);\n}\n",[139,142366,142367,142373,142391],{"__ignoreMap":31},[142,142368,142369,142371],{"class":144,"line":145},[142,142370,51640],{"class":51329},[142,142372,15601],{"class":152},[142,142374,142375,142377,142379,142382,142384,142386,142389],{"class":144,"line":64},[142,142376,136545],{"class":201},[142,142378,51466],{"class":152},[142,142380,142381],{"class":201},"rotate",[142,142383,153],{"class":152},[142,142385,682],{"class":201},[142,142387,142388],{"class":148},"deg",[142,142390,2747],{"class":152},[142,142392,142393],{"class":144,"line":1208},[142,142394,1593],{"class":152},[22027,142396,142398],{"id":142397},"_18123-三角做法","18.1.2.3 三角做法",[14,142400,142401],{},"该下标当经过最外层大盒子时会实现向上反转",[29,142403],{"style":126417,"src":142404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[133,142406,142407],{"className":126561,"code":135081,"language":126563,"meta":31,"style":31},[139,142408,142409,142413,142419,142429,142439,142455,142465],{"__ignoreMap":31},[142,142410,142411],{"class":144,"line":145},[142,142412,135088],{"class":211},[142,142414,142415,142417],{"class":144,"line":64},[142,142416,135093],{"class":1991},[142,142418,15601],{"class":152},[142,142420,142421,142423,142425,142427],{"class":144,"line":1208},[142,142422,70597],{"class":201},[142,142424,51466],{"class":152},[142,142426,344],{"class":201},[142,142428,1319],{"class":152},[142,142430,142431,142433,142435,142437],{"class":144,"line":1223},[142,142432,70817],{"class":201},[142,142434,51466],{"class":152},[142,142436,344],{"class":201},[142,142438,1319],{"class":152},[142,142440,142441,142443,142445,142447,142449,142451,142453],{"class":144,"line":1229},[142,142442,70925],{"class":201},[142,142444,51466],{"class":152},[142,142446,599],{"class":201},[142,142448,51521],{"class":148},[142,142450,51550],{"class":201},[142,142452,64020],{"class":201},[142,142454,1319],{"class":152},[142,142456,142457,142459,142461,142463],{"class":144,"line":1243},[142,142458,135136],{"class":201},[142,142460,51466],{"class":152},[142,142462,62398],{"class":201},[142,142464,1319],{"class":152},[142,142466,142467],{"class":144,"line":1249},[142,142468,1593],{"class":152},[113,142470,142472],{"id":142471},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22027,142474,142476],{"id":142475},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142478,142479],{},"设置中心点",[29,142481],{"style":126417,"src":142482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142484,142485],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22027,142487,142489],{"id":142488},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[133,142491,142493],{"className":126561,"code":142492,"language":126563,"meta":31,"style":31},"\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",[139,142494,142495,142500,142506,142521,142526,142531],{"__ignoreMap":31},[142,142496,142497],{"class":144,"line":145},[142,142498,142499],{"class":211},"\u002F* 转换中心点 *\u002F\n",[142,142501,142502,142504],{"class":144,"line":64},[142,142503,51640],{"class":51329},[142,142505,15601],{"class":152},[142,142507,142508,142511,142513,142515,142517,142519],{"class":144,"line":1208},[142,142509,142510],{"class":201},"  transform-origin",[142,142512,51466],{"class":152},[142,142514,51621],{"class":201},[142,142516,17173],{"class":201},[142,142518,130424],{"class":152},[142,142520,135234],{"class":211},[142,142522,142523],{"class":144,"line":1223},[142,142524,142525],{"class":211},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[142,142527,142528],{"class":144,"line":1229},[142,142529,142530],{"class":211},"  \u002F* transform-origin: left top; *\u002F\n",[142,142532,142533],{"class":144,"line":1243},[142,142534,1593],{"class":152},[22027,142536,142538],{"id":142537},"_18133-旋转案例","18.1.3.3 旋转案例",[29,142540],{"style":126417,"src":142541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[133,142543,142544],{"className":126561,"code":142364,"language":126563,"meta":31,"style":31},[139,142545,142546,142552,142568],{"__ignoreMap":31},[142,142547,142548,142550],{"class":144,"line":145},[142,142549,51640],{"class":51329},[142,142551,15601],{"class":152},[142,142553,142554,142556,142558,142560,142562,142564,142566],{"class":144,"line":64},[142,142555,136545],{"class":201},[142,142557,51466],{"class":152},[142,142559,142381],{"class":201},[142,142561,153],{"class":152},[142,142563,682],{"class":201},[142,142565,142388],{"class":148},[142,142567,2747],{"class":152},[142,142569,142570],{"class":144,"line":1208},[142,142571,1593],{"class":152},[113,142573,142575],{"id":142574},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22027,142577,142579],{"id":142578},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142581,142582],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[29,142584],{"style":126417,"src":142585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22027,142587,142589],{"id":142588},"_18142-分页按钮","18.1.4.2 分页按钮",[29,142591],{"style":126417,"src":142592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[133,142594,142596],{"className":126561,"code":142595,"language":126563,"meta":31,"style":31},"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",[139,142597,142598,142604,142620,142624,142628,142633,142639,142653,142658],{"__ignoreMap":31},[142,142599,142600,142602],{"class":144,"line":145},[142,142601,51640],{"class":51329},[142,142603,15601],{"class":152},[142,142605,142606,142608,142610,142613,142615,142618],{"class":144,"line":64},[142,142607,136545],{"class":201},[142,142609,51466],{"class":152},[142,142611,142612],{"class":201},"scale",[142,142614,153],{"class":152},[142,142616,142617],{"class":201},"1.2",[142,142619,2747],{"class":152},[142,142621,142622],{"class":144,"line":1208},[142,142623,1593],{"class":152},[142,142625,142626],{"class":144,"line":1223},[142,142627,136022],{"class":152},[142,142629,142630],{"class":144,"line":1229},[142,142631,142632],{"class":211},"\u002F* 2D 缩放 *\u002F\n",[142,142634,142635,142637],{"class":144,"line":1243},[142,142636,51640],{"class":51329},[142,142638,15601],{"class":152},[142,142640,142641,142643,142645,142647,142649,142651],{"class":144,"line":1249},[142,142642,136545],{"class":201},[142,142644,51466],{"class":152},[142,142646,142612],{"class":201},[142,142648,153],{"class":152},[142,142650,142617],{"class":201},[142,142652,2747],{"class":152},[142,142654,142655],{"class":144,"line":1340},[142,142656,142657],{"class":211},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[142,142659,142660],{"class":144,"line":1346},[142,142661,1593],{"class":152},[14,142663,142664],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[133,142666,142668],{"className":126561,"code":142667,"language":126563,"meta":31,"style":31},"\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",[139,142669,142670,142675,142685,142706,142727,142731,142736,142742,142769],{"__ignoreMap":31},[142,142671,142672],{"class":144,"line":145},[142,142673,142674],{"class":211},"\u002F* 定义动画 *\u002F\n",[142,142676,142677,142680,142683],{"class":144,"line":64},[142,142678,142679],{"class":148},"@keyframes",[142,142681,142682],{"class":5245}," move",[142,142684,15601],{"class":152},[142,142686,142687,142690,142692,142694,142696,142699,142701,142703],{"class":144,"line":1208},[142,142688,142689],{"class":1991},"  0%",[142,142691,79836],{"class":152},[142,142693,48163],{"class":201},[142,142695,51466],{"class":152},[142,142697,142698],{"class":201},"translateX",[142,142700,153],{"class":152},[142,142702,344],{"class":201},[142,142704,142705],{"class":152},"); }\n",[142,142707,142708,142711,142713,142715,142717,142719,142721,142723,142725],{"class":144,"line":1223},[142,142709,142710],{"class":1991},"  100%",[142,142712,79836],{"class":152},[142,142714,48163],{"class":201},[142,142716,51466],{"class":152},[142,142718,142698],{"class":201},[142,142720,153],{"class":152},[142,142722,464],{"class":201},[142,142724,51521],{"class":148},[142,142726,142705],{"class":152},[142,142728,142729],{"class":144,"line":1229},[142,142730,1593],{"class":152},[142,142732,142733],{"class":144,"line":1243},[142,142734,142735],{"class":211},"\u002F* 调用动画 *\u002F\n",[142,142737,142738,142740],{"class":144,"line":1249},[142,142739,51640],{"class":51329},[142,142741,15601],{"class":152},[142,142743,142744,142747,142749,142751,142753,142755,142757,142759,142761,142764,142767],{"class":144,"line":1340},[142,142745,142746],{"class":201},"  animation",[142,142748,51466],{"class":152},[142,142750,135247],{"class":201},[142,142752,25147],{"class":201},[142,142754,848],{"class":148},[142,142756,78709],{"class":201},[142,142758,4121],{"class":201},[142,142760,848],{"class":148},[142,142762,142763],{"class":201}," infinite",[142,142765,142766],{"class":201}," alternate",[142,142768,1319],{"class":152},[142,142770,142771],{"class":144,"line":1346},[142,142772,1593],{"class":152},[14,142774,142664],{},[133,142776,142779],{"className":142777,"code":142778,"language":5216},[5214],"\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",[139,142780,142778],{"__ignoreMap":31},[22027,142782,142784],{"id":142783},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142786,142787],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[29,142789],{"style":126417,"src":142790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[133,142792,142793],{"className":126561,"code":142667,"language":126563,"meta":31,"style":31},[139,142794,142795,142799,142807,142825,142845,142849,142853,142859,142883],{"__ignoreMap":31},[142,142796,142797],{"class":144,"line":145},[142,142798,142674],{"class":211},[142,142800,142801,142803,142805],{"class":144,"line":64},[142,142802,142679],{"class":148},[142,142804,142682],{"class":5245},[142,142806,15601],{"class":152},[142,142808,142809,142811,142813,142815,142817,142819,142821,142823],{"class":144,"line":1208},[142,142810,142689],{"class":1991},[142,142812,79836],{"class":152},[142,142814,48163],{"class":201},[142,142816,51466],{"class":152},[142,142818,142698],{"class":201},[142,142820,153],{"class":152},[142,142822,344],{"class":201},[142,142824,142705],{"class":152},[142,142826,142827,142829,142831,142833,142835,142837,142839,142841,142843],{"class":144,"line":1223},[142,142828,142710],{"class":1991},[142,142830,79836],{"class":152},[142,142832,48163],{"class":201},[142,142834,51466],{"class":152},[142,142836,142698],{"class":201},[142,142838,153],{"class":152},[142,142840,464],{"class":201},[142,142842,51521],{"class":148},[142,142844,142705],{"class":152},[142,142846,142847],{"class":144,"line":1229},[142,142848,1593],{"class":152},[142,142850,142851],{"class":144,"line":1243},[142,142852,142735],{"class":211},[142,142854,142855,142857],{"class":144,"line":1249},[142,142856,51640],{"class":51329},[142,142858,15601],{"class":152},[142,142860,142861,142863,142865,142867,142869,142871,142873,142875,142877,142879,142881],{"class":144,"line":1340},[142,142862,142746],{"class":201},[142,142864,51466],{"class":152},[142,142866,135247],{"class":201},[142,142868,25147],{"class":201},[142,142870,848],{"class":148},[142,142872,78709],{"class":201},[142,142874,4121],{"class":201},[142,142876,848],{"class":148},[142,142878,142763],{"class":201},[142,142880,142766],{"class":201},[142,142882,1319],{"class":152},[142,142884,142885],{"class":144,"line":1346},[142,142886,1593],{"class":152},[14,142888,142889],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[113,142891,142893],{"id":142892},"_1823-知识点回顾","18.2.3 知识点回顾",[133,142895,142896],{"className":126561,"code":128730,"language":126563,"meta":31,"style":31},[139,142897,142898,142904,142914],{"__ignoreMap":31},[142,142899,142900,142902],{"class":144,"line":145},[142,142901,51640],{"class":51329},[142,142903,15601],{"class":152},[142,142905,142906,142908,142910,142912],{"class":144,"line":64},[142,142907,128743],{"class":201},[142,142909,51466],{"class":152},[142,142911,61765],{"class":201},[142,142913,1319],{"class":152},[142,142915,142916],{"class":144,"line":1208},[142,142917,1593],{"class":152},[84,142919,142921],{"id":142920},"_183-3d-转换","18.3 3D 转换",[14,142923,142924],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[113,142926,142928],{"id":142927},"_1831-坐标轴认识","18.3.1 坐标轴认识",[29,142930],{"style":126417,"src":142931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[113,142933,142935],{"id":142934},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[29,142937],{"style":126417,"src":142938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142940,142941],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142943,142944],{},"translate3d的效果需要搭配透视perspective来使用",[29,142946],{"style":126417,"src":142947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[113,142949,142951],{"id":142950},"_1833-透视-perspective","18.3.3 透视 perspective",[29,142953],{"style":126417,"src":142954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142956,142957],{},"透视写在父盒子上，单位为像素",[113,142959,142961],{"id":142960},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22027,142963,142965],{"id":142964},"_18341-分开解释","18.3.4.1 分开解释",[29,142967],{"style":126417,"src":142968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[29,142970],{"style":126417,"src":142971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[29,142973],{"style":126417,"src":142974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,142976,142977],{},"总结来说就是左手原则",[22027,142979,142981],{"id":142980},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[29,142983],{"style":126417,"src":142984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[113,142986,142988],{"id":142987},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[29,142990],{"style":126417,"src":142991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[29,142993],{"style":126417,"src":142994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[133,142996,142998],{"className":126561,"code":142997,"language":126563,"meta":31,"style":31},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[139,142999,143000,143006,143019,143036],{"__ignoreMap":31},[142,143001,143002,143004],{"class":144,"line":145},[142,143003,51640],{"class":51329},[142,143005,15601],{"class":152},[142,143007,143008,143011,143013,143015,143017],{"class":144,"line":64},[142,143009,143010],{"class":201},"  perspective",[142,143012,51466],{"class":152},[142,143014,65103],{"class":201},[142,143016,51521],{"class":148},[142,143018,1319],{"class":152},[142,143020,143021,143023,143025,143028,143030,143032,143034],{"class":144,"line":1208},[142,143022,136545],{"class":201},[142,143024,51466],{"class":152},[142,143026,143027],{"class":201},"rotateX",[142,143029,153],{"class":152},[142,143031,682],{"class":201},[142,143033,142388],{"class":148},[142,143035,2747],{"class":152},[142,143037,143038],{"class":144,"line":1223},[142,143039,1593],{"class":152},[113,143041,143043],{"id":143042},"_1836-案例","18.3.6 案例",[22027,143045,143047],{"id":143046},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[29,143049],{"style":126417,"src":143050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[29,143052],{"style":126417,"src":143053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[29,143055],{"style":126417,"src":143056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[133,143058,143060],{"className":126561,"code":143059,"language":126563,"meta":31,"style":31},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[139,143061,143062,143067,143073,143085],{"__ignoreMap":31},[142,143063,143064],{"class":144,"line":145},[142,143065,143066],{"class":211},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[142,143068,143069,143071],{"class":144,"line":64},[142,143070,133558],{"class":1991},[142,143072,15601],{"class":152},[142,143074,143075,143077,143079,143081,143083],{"class":144,"line":1208},[142,143076,143010],{"class":201},[142,143078,51466],{"class":152},[142,143080,65103],{"class":201},[142,143082,51521],{"class":148},[142,143084,1319],{"class":152},[142,143086,143087],{"class":144,"line":1223},[142,143088,1593],{"class":152},[22027,143090,143092],{"id":143091},"_18362-3d导航栏","18.3.6.2 3D导航栏",[29,143094],{"style":126417,"src":143095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[133,143097,143098],{"className":127308,"code":130665,"language":127310,"meta":31,"style":31},[139,143099,143100,143104,143118,143122],{"__ignoreMap":31},[142,143101,143102],{"class":144,"line":145},[142,143103,130672],{"class":211},[142,143105,143106,143108,143110,143112,143114,143116],{"class":144,"line":64},[142,143107,1063],{"class":152},[142,143109,51640],{"class":51329},[142,143111,53515],{"class":1991},[142,143113,198],{"class":152},[142,143115,130685],{"class":257},[142,143117,51336],{"class":152},[142,143119,143120],{"class":144,"line":1208},[142,143121,130692],{"class":152},[142,143123,143124,143126,143128],{"class":144,"line":1223},[142,143125,51814],{"class":152},[142,143127,51640],{"class":51329},[142,143129,51336],{"class":152},[22027,143131,143133],{"id":143132},"_18363-旋转木马","18.3.6.3 旋转木马",[29,143135],{"style":126417,"src":143136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[133,143138,143139],{"className":126561,"code":142364,"language":126563,"meta":31,"style":31},[139,143140,143141,143147,143163],{"__ignoreMap":31},[142,143142,143143,143145],{"class":144,"line":145},[142,143144,51640],{"class":51329},[142,143146,15601],{"class":152},[142,143148,143149,143151,143153,143155,143157,143159,143161],{"class":144,"line":64},[142,143150,136545],{"class":201},[142,143152,51466],{"class":152},[142,143154,142381],{"class":201},[142,143156,153],{"class":152},[142,143158,682],{"class":201},[142,143160,142388],{"class":148},[142,143162,2747],{"class":152},[142,143164,143165],{"class":144,"line":1208},[142,143166,1593],{"class":152},[5155,143168,143169],{},"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":31,"searchDepth":64,"depth":64,"links":143171},[143172,143179],{"id":142267,"depth":64,"text":142268,"children":143173},[143174,143175,143176,143177,143178],{"id":142291,"depth":1208,"text":142292},{"id":142346,"depth":1208,"text":142347},{"id":142471,"depth":1208,"text":142472},{"id":142574,"depth":1208,"text":142575},{"id":142892,"depth":1208,"text":142893},{"id":142920,"depth":64,"text":142921,"children":143180},[143181,143182,143183,143184,143185,143186],{"id":142927,"depth":1208,"text":142928},{"id":142934,"depth":1208,"text":142935},{"id":142950,"depth":1208,"text":142951},{"id":142960,"depth":1208,"text":142961},{"id":142987,"depth":1208,"text":142988},{"id":143042,"depth":1208,"text":143043},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142259,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143193,"title":143194,"body":143195,"description":66,"extension":67,"meta":143398,"navigation":69,"path":143399,"seo":143400,"stem":143401,"__hash__":143402},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143196,"toc":143387},[143197,143200,143204,143207,143210,143214,143217,143220,143223,143227,143230,143234,143237,143241,143244,143248,143262,143266,143291,143294,143297,143314,143318,143322,143325,143328,143332,143335,143338,143356,143360,143363,143377,143381,143384],[10,143198,143194],{"id":143199},"_19-移动端基础-前缀现状与视口",[84,143201,143203],{"id":143202},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[29,143205],{"style":126417,"src":143206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143208,143209],{},"意思就是加个前缀，增加兼容性",[84,143211,143213],{"id":143212},"_192-移动端现状认识","19.2 移动端现状认识",[29,143215],{"style":126417,"src":143216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143218,143219],{},"调试方法：",[29,143221],{"style":126417,"src":143222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[84,143224,143226],{"id":143225},"_193-视口","19.3 视口",[14,143228,143229],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[113,143231,143233],{"id":143232},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[29,143235],{"style":126417,"src":143236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[113,143238,143240],{"id":143239},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[29,143242],{"style":126417,"src":143243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[113,143245,143247],{"id":143246},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1160,143249,143250,143253,143256,143259],{},[99,143251,143252],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[99,143254,143255],{},"理想视口，对设备来讲，是最理想的视口尺寸",[99,143257,143258],{},"需要手动添写meta视口标签通知浏览器操作",[99,143260,143261],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[113,143263,143265],{"id":143264},"_1934-meta视口标签","19.3.4 meta视口标签",[133,143267,143269],{"className":127308,"code":143268,"language":127310,"meta":31,"style":31},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[139,143270,143271],{"__ignoreMap":31},[142,143272,143273,143275,143277,143279,143281,143283,143285,143287,143289],{"class":144,"line":145},[142,143274,1063],{"class":152},[142,143276,51373],{"class":51329},[142,143278,14949],{"class":1991},[142,143280,198],{"class":152},[142,143282,51420],{"class":257},[142,143284,51400],{"class":1991},[142,143286,198],{"class":152},[142,143288,51427],{"class":257},[142,143290,51336],{"class":152},[29,143292],{"style":126417,"src":143293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143295,143296],{},"标准视口设置：",[96,143298,143299,143302,143305,143308,143311],{},[99,143300,143301],{},"视口宽度和设备保持一致",[99,143303,143304],{},"视口的默认缩放比例1.0",[99,143306,143307],{},"不允许用户自行缩放",[99,143309,143310],{},"最大允许的缩放比例1.0",[99,143312,143313],{},"最小允许的缩放比例1.0",[113,143315,143317],{"id":143316},"_1935-二倍图","19.3.5 二倍图",[22027,143319,143321],{"id":143320},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[29,143323],{"style":126417,"src":143324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[29,143326],{"style":126417,"src":143327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22027,143329,143331],{"id":143330},"_19352-多倍图","19.3.5.2 多倍图",[29,143333],{"style":126417,"src":143334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143336,143337],{},"二倍图法，代码如下：",[133,143339,143341],{"className":126561,"code":143340,"language":126563,"meta":31,"style":31},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[139,143342,143343,143348],{"__ignoreMap":31},[142,143344,143345],{"class":144,"line":145},[142,143346,143347],{"class":211},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[142,143349,143350,143353],{"class":144,"line":64},[142,143351,143352],{"class":51329},"background-size",[142,143354,143355],{"class":152},": 50% 50%;\n",[22027,143357,143359],{"id":143358},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[29,143361],{"style":126417,"src":143362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[96,143364,143365,143368,143371,143374],{},[99,143366,143367],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[99,143369,143370],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[99,143372,143373],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[99,143375,143376],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22027,143378,143380],{"id":143379},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[29,143382],{"style":126417,"src":143383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5155,143385,143386],{},"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":31,"searchDepth":64,"depth":64,"links":143388},[143389,143390,143391],{"id":143202,"depth":64,"text":143203},{"id":143212,"depth":64,"text":143213},{"id":143225,"depth":64,"text":143226,"children":143392},[143393,143394,143395,143396,143397],{"id":143232,"depth":1208,"text":143233},{"id":143239,"depth":1208,"text":143240},{"id":143246,"depth":1208,"text":143247},{"id":143264,"depth":1208,"text":143265},{"id":143316,"depth":1208,"text":143317},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143194,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143404,"title":143405,"body":143406,"description":66,"extension":67,"meta":144283,"navigation":69,"path":144284,"seo":144285,"stem":144286,"__hash__":144287},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143407,"toc":144267},[143408,143411,143415,143422,143425,143432,143435,143440,143443,143447,143451,143458,143461,143464,143468,143471,143474,143477,143480,143483,143487,143490,143494,143496,143499,143502,143505,143508,143510,143513,143515,143545,143547,143577,143581,143584,143588,143591,143608,143611,143614,143690,143692,143695,143698,143701,143704,143706,143709,143712,143716,143738,143741,143744,143748,143751,143757,143760,143764,143767,143770,143774,143777,143780,143783,143787,143790,143793,143796,143799,143803,143806,143810,143817,143820,143823,143826,143829,143839,143842,143845,143852,143855,143859,143862,143865,143869,143872,143875,143878,143923,143926,143929,143932,143934,144063,144065,144103,144106,144109,144111,144229,144231,144265],[10,143409,143405],{"id":143410},"_20-移动端布局实战上篇",[84,143412,143414],{"id":143413},"_201-移动端主流方案","20.1 移动端主流方案",[96,143416,143417],{},[99,143418,143419],{},[302,143420,143421],{},"单独移动端页面（主流）",[29,143423],{"style":126417,"src":143424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[96,143426,143427],{"start":64},[99,143428,143429],{},[302,143430,143431],{},"响应式兼容PC移动端",[29,143433],{"style":126417,"src":143434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[96,143436,143437],{"start":1208},[99,143438,143439],{},"两种页面选型布局方式",[29,143441],{"style":126417,"src":143442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[84,143444,143446],{"id":143445},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[113,143448,143450],{"id":143449},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143452,143453,143454],{},"官网地址： ",[391,143455,143456],{"href":143456,"rel":143457},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23894],[29,143459],{"style":126417,"src":143460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[29,143462],{"style":126417,"src":143463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[113,143465,143467],{"id":143466},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[29,143469],{"style":126417,"src":143470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[29,143472],{"style":126417,"src":143473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143475,143476],{},"去除高亮：",[14,143478,143479],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143481,143482],{},"-webkit- tap-highlight-color: transparent;",[84,143484,143486],{"id":143485},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[29,143488],{"style":126417,"src":143489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[84,143491,143493],{"id":143492},"_204-流式布局案例","20.4 流式布局案例",[14,143495,182],{},[14,143497,143498],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143500,143501],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143503,143504],{},"图片格式：",[29,143506],{"style":126417,"src":143507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143509,135604],{},[29,143511],{"style":126417,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143514,139931],{},[133,143516,143517],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,143518,143519],{"__ignoreMap":31},[142,143520,143521,143523,143525,143527,143529,143531,143533,143535,143537,143539,143541,143543],{"class":144,"line":145},[142,143522,1063],{"class":152},[142,143524,29],{"class":51329},[142,143526,55268],{"class":1991},[142,143528,198],{"class":152},[142,143530,134078],{"class":257},[142,143532,55276],{"class":1991},[142,143534,198],{"class":152},[142,143536,134085],{"class":257},[142,143538,134088],{"class":1991},[142,143540,198],{"class":152},[142,143542,134093],{"class":257},[142,143544,51336],{"class":152},[14,143546,140020],{},[133,143548,143549],{"className":127308,"code":134063,"language":127310,"meta":31,"style":31},[139,143550,143551],{"__ignoreMap":31},[142,143552,143553,143555,143557,143559,143561,143563,143565,143567,143569,143571,143573,143575],{"class":144,"line":145},[142,143554,1063],{"class":152},[142,143556,29],{"class":51329},[142,143558,55268],{"class":1991},[142,143560,198],{"class":152},[142,143562,134078],{"class":257},[142,143564,55276],{"class":1991},[142,143566,198],{"class":152},[142,143568,134085],{"class":257},[142,143570,134088],{"class":1991},[142,143572,198],{"class":152},[142,143574,134093],{"class":257},[142,143576,51336],{"class":152},[84,143578,143580],{"id":143579},"_205-flex布局","20.5 flex布局",[29,143582],{"style":126417,"src":143583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[113,143585,143587],{"id":143586},"_2051-布局原理","20.5.1 布局原理",[14,143589,143590],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1160,143592,143593,143596,143599,143602,143605],{},[99,143594,143595],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[99,143597,143598],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[99,143600,143601],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[99,143603,143604],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[99,143606,143607],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143609,143610],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143612,143613],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[133,143615,143617],{"className":126561,"code":143616,"language":126563,"meta":31,"style":31},"\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",[139,143618,143619,143624,143631,143641,143653,143664,143675,143686],{"__ignoreMap":31},[142,143620,143621],{"class":144,"line":145},[142,143622,143623],{"class":211},"\u002F* Flex 弹性布局 *\u002F\n",[142,143625,143626,143629],{"class":144,"line":64},[142,143627,143628],{"class":1991},".container",[142,143630,15601],{"class":152},[142,143632,143633,143635,143637,143639],{"class":144,"line":1208},[142,143634,128177],{"class":201},[142,143636,51466],{"class":152},[142,143638,51506],{"class":201},[142,143640,1319],{"class":152},[142,143642,143643,143646,143648,143651],{"class":144,"line":1223},[142,143644,143645],{"class":201},"  flex-direction",[142,143647,51466],{"class":152},[142,143649,143650],{"class":201},"row",[142,143652,1319],{"class":152},[142,143654,143655,143658,143660,143662],{"class":144,"line":1229},[142,143656,143657],{"class":201},"  justify-content",[142,143659,51466],{"class":152},[142,143661,51697],{"class":201},[142,143663,1319],{"class":152},[142,143665,143666,143669,143671,143673],{"class":144,"line":1243},[142,143667,143668],{"class":201},"  align-items",[142,143670,51466],{"class":152},[142,143672,51621],{"class":201},[142,143674,1319],{"class":152},[142,143676,143677,143680,143682,143684],{"class":144,"line":1249},[142,143678,143679],{"class":201},"  flex-wrap",[142,143681,51466],{"class":152},[142,143683,78639],{"class":201},[142,143685,1319],{"class":152},[142,143687,143688],{"class":144,"line":1340},[142,143689,1593],{"class":152},[14,143691,70482],{},[14,143693,143694],{},".form-item .male-label {",[14,143696,143697],{},"   margin-right: 20px;",[14,143699,143700],{},"   display: inline-flex;",[14,143702,143703],{},"   align-items: center;",[14,143705,1099],{},[29,143707],{"style":126417,"src":143708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[29,143710],{"style":126417,"src":143711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[113,143713,143715],{"id":143714},"_2052-常见父项属性","20.5.2 常见父项属性",[96,143717,143718,143721,143724,143727,143730,143733,143736],{},[99,143719,143720],{},"flex-direction：设置主轴的方向",[99,143722,143723],{},"justify-content：设置主轴上的子元素排列方式",[99,143725,143726],{},"flex-wrap：设置子元素是否换行",[99,143728,143729],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[99,143731,143732],{},"align-items：设置侧轴上的子元素排列方式（单行）",[99,143734,143735],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[99,143737,143720],{},[29,143739],{"style":126417,"src":143740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[29,143742],{"style":126417,"src":143743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[96,143745,143746],{"start":64},[99,143747,143723],{},[29,143749],{"style":126417,"src":143750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143752,143753,143756],{},[139,143754,143755],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143758,143759],{},"跟着主轴走",[96,143761,143762],{"start":1208},[99,143763,143726],{},[29,143765],{"style":126417,"src":143766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143768,143769],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[96,143771,143772],{"start":1223},[99,143773,143729],{},[29,143775],{"style":126417,"src":143776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143778,143779],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143781,143782],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[96,143784,143785],{"start":1229},[99,143786,143732],{},[29,143788],{"style":126417,"src":143789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143791,143792],{},"align-items与align-content之间的区别：",[14,143794,143795],{},"单找items，多找content",[29,143797],{"style":126417,"src":143798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[96,143800,143801],{"start":1243},[99,143802,143735],{},[29,143804],{"style":126417,"src":143805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[113,143807,143809],{"id":143808},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[96,143811,143812],{},[99,143813,143814],{},[302,143815,143816],{},"flex 属性",[14,143818,143819],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[29,143821],{"style":126417,"src":143822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143824,143825],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143827,143828],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[96,143830,143831],{"start":64},[99,143832,143833,13824,143836],{},[302,143834,143835],{},"align-self",[302,143837,143838],{},"控制子项自己在侧轴上的排列方式",[29,143840],{"style":126417,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143843,143844],{},"单个子盒子在父盒子侧轴上的排列方式",[96,143846,143847],{"start":1208},[99,143848,143849,143851],{},[302,143850,95306],{}," 属性定义项目的排列顺序",[29,143853],{"style":126417,"src":143854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[113,143856,143858],{"id":143857},"_2054-背景线性渐变","20.5.4 背景线性渐变",[29,143860],{"style":126417,"src":143861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143863,143864],{},"必须要添加浏览器的私有前缀",[113,143866,143868],{"id":143867},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143870,143871],{},"学到最重要的知识：",[14,143873,143874],{},"flex处理这样的布局思路",[29,143876],{"style":126417,"src":143877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[133,143879,143881],{"className":126561,"code":143880,"language":126563,"meta":31,"style":31},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[139,143882,143883,143889,143899,143909,143919],{"__ignoreMap":31},[142,143884,143885,143887],{"class":144,"line":145},[142,143886,143628],{"class":1991},[142,143888,15601],{"class":152},[142,143890,143891,143893,143895,143897],{"class":144,"line":64},[142,143892,128177],{"class":201},[142,143894,51466],{"class":152},[142,143896,51506],{"class":201},[142,143898,1319],{"class":152},[142,143900,143901,143903,143905,143907],{"class":144,"line":1208},[142,143902,143657],{"class":201},[142,143904,51466],{"class":152},[142,143906,51621],{"class":201},[142,143908,1319],{"class":152},[142,143910,143911,143913,143915,143917],{"class":144,"line":1223},[142,143912,143668],{"class":201},[142,143914,51466],{"class":152},[142,143916,51621],{"class":201},[142,143918,1319],{"class":152},[142,143920,143921],{"class":144,"line":1229},[142,143922,1593],{"class":152},[14,143924,143925],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143927,143928],{},"使用属性选择器",[29,143930],{"style":126417,"src":143931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143933,68918],{},[133,143935,143937],{"className":127308,"code":143936,"language":127310,"meta":31,"style":31},"\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",[139,143938,143939,143944,143958,143963,143983,143988,144007,144012,144031,144036,144055],{"__ignoreMap":31},[142,143940,143941],{"class":144,"line":145},[142,143942,143943],{"class":211},"\u003C!-- 携程网移动端案例结构 -->\n",[142,143945,143946,143948,143950,143952,143954,143956],{"class":144,"line":64},[142,143947,1063],{"class":152},[142,143949,51640],{"class":51329},[142,143951,53515],{"class":1991},[142,143953,198],{"class":152},[142,143955,92352],{"class":257},[142,143957,51336],{"class":152},[142,143959,143960],{"class":144,"line":1208},[142,143961,143962],{"class":211},"  \u003C!-- 搜索栏 -->\n",[142,143964,143965,143967,143969,143971,143973,143976,143979,143981],{"class":144,"line":1223},[142,143966,52173],{"class":152},[142,143968,51640],{"class":51329},[142,143970,53515],{"class":1991},[142,143972,198],{"class":152},[142,143974,143975],{"class":257},"\"search-index\"",[142,143977,143978],{"class":152},">...\u003C\u002F",[142,143980,51640],{"class":51329},[142,143982,51336],{"class":152},[142,143984,143985],{"class":144,"line":1229},[142,143986,143987],{"class":211},"  \u003C!-- 焦点图 -->\n",[142,143989,143990,143992,143994,143996,143998,144001,144003,144005],{"class":144,"line":1243},[142,143991,52173],{"class":152},[142,143993,51640],{"class":51329},[142,143995,53515],{"class":1991},[142,143997,198],{"class":152},[142,143999,144000],{"class":257},"\"focus\"",[142,144002,143978],{"class":152},[142,144004,51640],{"class":51329},[142,144006,51336],{"class":152},[142,144008,144009],{"class":144,"line":1249},[142,144010,144011],{"class":211},"  \u003C!-- 主导航 -->\n",[142,144013,144014,144016,144018,144020,144022,144025,144027,144029],{"class":144,"line":1340},[142,144015,52173],{"class":152},[142,144017,51640],{"class":51329},[142,144019,53515],{"class":1991},[142,144021,198],{"class":152},[142,144023,144024],{"class":257},"\"local-nav\"",[142,144026,143978],{"class":152},[142,144028,51640],{"class":51329},[142,144030,51336],{"class":152},[142,144032,144033],{"class":144,"line":1346},[142,144034,144035],{"class":211},"  \u003C!-- 子导航 -->\n",[142,144037,144038,144040,144042,144044,144046,144049,144051,144053],{"class":144,"line":1358},[142,144039,52173],{"class":152},[142,144041,51640],{"class":51329},[142,144043,53515],{"class":1991},[142,144045,198],{"class":152},[142,144047,144048],{"class":257},"\"nav-common\"",[142,144050,143978],{"class":152},[142,144052,51640],{"class":51329},[142,144054,51336],{"class":152},[142,144056,144057,144059,144061],{"class":144,"line":1640},[142,144058,51814],{"class":152},[142,144060,51640],{"class":51329},[142,144062,51336],{"class":152},[14,144064,70482],{},[133,144066,144067],{"className":126561,"code":137013,"language":126563,"meta":31,"style":31},[139,144068,144069,144083,144099],{"__ignoreMap":31},[142,144070,144071,144073,144075,144077,144079,144081],{"class":144,"line":145},[142,144072,53850],{"class":51329},[142,144074,1043],{"class":152},[142,144076,103116],{"class":1991},[142,144078,198],{"class":148},[142,144080,62728],{"class":257},[142,144082,137030],{"class":152},[142,144084,144085,144087,144089,144091,144093,144095,144097],{"class":144,"line":64},[142,144086,70925],{"class":201},[142,144088,51466],{"class":152},[142,144090,370],{"class":201},[142,144092,51521],{"class":148},[142,144094,51550],{"class":201},[142,144096,130141],{"class":201},[142,144098,1319],{"class":152},[142,144100,144101],{"class":144,"line":1208},[142,144102,1593],{"class":152},[14,144104,144105],{},"总代码和效果展示：",[29,144107],{"style":126417,"src":144108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144110,68918],{},[133,144112,144113],{"className":127308,"code":143936,"language":127310,"meta":31,"style":31},[139,144114,144115,144119,144133,144137,144155,144159,144177,144181,144199,144203,144221],{"__ignoreMap":31},[142,144116,144117],{"class":144,"line":145},[142,144118,143943],{"class":211},[142,144120,144121,144123,144125,144127,144129,144131],{"class":144,"line":64},[142,144122,1063],{"class":152},[142,144124,51640],{"class":51329},[142,144126,53515],{"class":1991},[142,144128,198],{"class":152},[142,144130,92352],{"class":257},[142,144132,51336],{"class":152},[142,144134,144135],{"class":144,"line":1208},[142,144136,143962],{"class":211},[142,144138,144139,144141,144143,144145,144147,144149,144151,144153],{"class":144,"line":1223},[142,144140,52173],{"class":152},[142,144142,51640],{"class":51329},[142,144144,53515],{"class":1991},[142,144146,198],{"class":152},[142,144148,143975],{"class":257},[142,144150,143978],{"class":152},[142,144152,51640],{"class":51329},[142,144154,51336],{"class":152},[142,144156,144157],{"class":144,"line":1229},[142,144158,143987],{"class":211},[142,144160,144161,144163,144165,144167,144169,144171,144173,144175],{"class":144,"line":1243},[142,144162,52173],{"class":152},[142,144164,51640],{"class":51329},[142,144166,53515],{"class":1991},[142,144168,198],{"class":152},[142,144170,144000],{"class":257},[142,144172,143978],{"class":152},[142,144174,51640],{"class":51329},[142,144176,51336],{"class":152},[142,144178,144179],{"class":144,"line":1249},[142,144180,144011],{"class":211},[142,144182,144183,144185,144187,144189,144191,144193,144195,144197],{"class":144,"line":1340},[142,144184,52173],{"class":152},[142,144186,51640],{"class":51329},[142,144188,53515],{"class":1991},[142,144190,198],{"class":152},[142,144192,144024],{"class":257},[142,144194,143978],{"class":152},[142,144196,51640],{"class":51329},[142,144198,51336],{"class":152},[142,144200,144201],{"class":144,"line":1346},[142,144202,144035],{"class":211},[142,144204,144205,144207,144209,144211,144213,144215,144217,144219],{"class":144,"line":1358},[142,144206,52173],{"class":152},[142,144208,51640],{"class":51329},[142,144210,53515],{"class":1991},[142,144212,198],{"class":152},[142,144214,144048],{"class":257},[142,144216,143978],{"class":152},[142,144218,51640],{"class":51329},[142,144220,51336],{"class":152},[142,144222,144223,144225,144227],{"class":144,"line":1640},[142,144224,51814],{"class":152},[142,144226,51640],{"class":51329},[142,144228,51336],{"class":152},[14,144230,70482],{},[133,144232,144233],{"className":127308,"code":130665,"language":127310,"meta":31,"style":31},[139,144234,144235,144239,144253,144257],{"__ignoreMap":31},[142,144236,144237],{"class":144,"line":145},[142,144238,130672],{"class":211},[142,144240,144241,144243,144245,144247,144249,144251],{"class":144,"line":64},[142,144242,1063],{"class":152},[142,144244,51640],{"class":51329},[142,144246,53515],{"class":1991},[142,144248,198],{"class":152},[142,144250,130685],{"class":257},[142,144252,51336],{"class":152},[142,144254,144255],{"class":144,"line":1208},[142,144256,130692],{"class":152},[142,144258,144259,144261,144263],{"class":144,"line":1223},[142,144260,51814],{"class":152},[142,144262,51640],{"class":51329},[142,144264,51336],{"class":152},[5155,144266,137962],{},{"title":31,"searchDepth":64,"depth":64,"links":144268},[144269,144270,144274,144275,144276],{"id":143413,"depth":64,"text":143414},{"id":143445,"depth":64,"text":143446,"children":144271},[144272,144273],{"id":143449,"depth":1208,"text":143450},{"id":143466,"depth":1208,"text":143467},{"id":143485,"depth":64,"text":143486},{"id":143492,"depth":64,"text":143493},{"id":143579,"depth":64,"text":143580,"children":144277},[144278,144279,144280,144281,144282],{"id":143586,"depth":1208,"text":143587},{"id":143714,"depth":1208,"text":143715},{"id":143808,"depth":1208,"text":143809},{"id":143857,"depth":1208,"text":143858},{"id":143867,"depth":1208,"text":143868},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143405,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144289,"title":144290,"body":144291,"description":66,"extension":67,"meta":145518,"navigation":69,"path":145519,"seo":145520,"stem":145521,"__hash__":145522},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144292,"toc":145496},[144293,144296,144300,144304,144307,144310,144314,144319,144322,144325,144328,144331,144334,144391,144394,144399,144402,144405,144409,144420,144424,144427,144430,144437,144442,144446,144449,144455,144458,144462,144465,144472,144475,144478,144485,144488,144495,144498,144501,144508,144511,144514,144516,144533,144537,144540,144543,144546,144550,144553,144556,144559,144562,144565,144568,144570,144573,144576,144638,144641,144751,144758,144764,144767,144770,144774,144777,144781,144786,144789,144796,144799,144805,144810,144813,144816,144819,144822,144825,144828,144831,144834,144890,144892,144918,144922,144925,144928,144931,144939,144942,144945,144949,145005,145008,145012,145018,145029,145032,145037,145040,145043,145049,145052,145055,145058,145061,145064,145067,145070,145073,145098,145104,145107,145110,145113,145116,145119,145122,145127,145130,145133,145136,145144,145147,145154,145157,145160,145162,145186,145188,145191,145194,145197,145200,145203,145206,145209,145243,145246,145249,145283,145290,145293,145296,145299,145302,145305,145308,145315,145318,145321,145324,145327,145334,145337,145340,145347,145350,145353,145357,145360,145363,145366,145369,145372,145375,145378,145381,145383,145407,145409,145433,145437,145448,145451,145454,145457,145460,145463,145466,145469,145472,145475,145478,145481,145484,145487,145490,145493],[10,144294,144290],{"id":144295},"_21-移动端布局实战下篇",[84,144297,144299],{"id":144298},"_211-rem适配布局","21.1 rem适配布局",[113,144301,144303],{"id":144302},"_2111-rem单位","21.1.1 rem单位",[29,144305],{"style":126417,"src":144306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144308,144309],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[113,144311,144313],{"id":144312},"_2112-媒体查询","21.1.2 媒体查询",[96,144315,144316],{},[99,144317,144318],{},"参数介绍",[29,144320],{"style":126417,"src":144321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[29,144323],{"style":126417,"src":144324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[29,144326],{"style":126417,"src":144327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[29,144329],{"style":126417,"src":144330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[29,144332],{"style":126417,"src":144333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[133,144335,144337],{"className":126561,"code":144336,"language":126563,"meta":31,"style":31},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[139,144338,144339,144344,144363,144370,144383,144387],{"__ignoreMap":31},[142,144340,144341],{"class":144,"line":145},[142,144342,144343],{"class":211},"\u002F* 媒体查询 *\u002F\n",[142,144345,144346,144349,144351,144354,144356,144359,144361],{"class":144,"line":64},[142,144347,144348],{"class":148},"@media",[142,144350,1686],{"class":152},[142,144352,144353],{"class":201},"max-width",[142,144355,51466],{"class":152},[142,144357,144358],{"class":201},"768",[142,144360,51521],{"class":148},[142,144362,12471],{"class":152},[142,144364,144365,144368],{"class":144,"line":1208},[142,144366,144367],{"class":1991},"  .container",[142,144369,15601],{"class":152},[142,144371,144372,144375,144377,144379,144381],{"class":144,"line":1223},[142,144373,144374],{"class":201},"    width",[142,144376,51466],{"class":152},[142,144378,464],{"class":201},[142,144380,481],{"class":148},[142,144382,1319],{"class":152},[142,144384,144385],{"class":144,"line":1229},[142,144386,127357],{"class":152},[142,144388,144389],{"class":144,"line":1243},[142,144390,1593],{"class":152},[14,144392,144393],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[96,144395,144396],{"start":64},[99,144397,144398],{},"引入资源",[29,144400],{"style":126417,"src":144401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144403,144404],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[113,144406,144408],{"id":144407},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1160,144410,144411,144414,144417],{},[99,144412,144413],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[99,144415,144416],{},"媒体查询可以根据不同设备宽度来修改样式",[99,144418,144419],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[84,144421,144423],{"id":144422},"_212-less基础","21.2 Less基础",[14,144425,144426],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144428,144429],{},"Less可以解决该问题，它是css的扩展语言",[14,144431,144432,144433],{},"Less中文网址： ",[391,144434,144435],{"href":144435,"rel":144436},"http:\u002F\u002Flesscss.cn\u002F",[23894],[14,144438,144439],{},[302,144440,144441],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[113,144443,144445],{"id":144444},"_2121-less安装","21.2.1 less安装",[14,144447,144448],{},"如果使用vscode，则无需进行下方安装步骤",[14,144450,144451],{},[391,144452,144453],{"href":144453,"rel":144454},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23894],[29,144456],{"style":126417,"src":144457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[113,144459,144461],{"id":144460},"_2122-less使用","21.2.2 less使用",[14,144463,144464],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[96,144466,144467],{},[99,144468,144469],{},[302,144470,144471],{},"Less 变量",[29,144473],{"style":126417,"src":144474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[29,144476],{"style":126417,"src":144477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[96,144479,144480],{"start":64},[99,144481,144482],{},[302,144483,144484],{},"Less 编译",[29,144486],{"style":126417,"src":144487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[96,144489,144490],{"start":1208},[99,144491,144492],{},[302,144493,144494],{},"Less 嵌套",[29,144496],{"style":126417,"src":144497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[29,144499],{"style":126417,"src":144500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[96,144502,144503],{"start":1223},[99,144504,144505],{},[302,144506,144507],{},"Less 运算",[29,144509],{"style":126417,"src":144510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144512,144513],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144515,182],{},[1160,144517,144518,144521,144524,144527,144530],{},[99,144519,144520],{},"乘号（*）和除号（\u002F）的写法",[99,144522,144523],{},"运算符中间左右有个空格隔开 1px + 5",[99,144525,144526],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[99,144528,144529],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[99,144531,144532],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[84,144534,144536],{"id":144535},"_213-rem-适配方案","21.3 rem 适配方案",[14,144538,144539],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144541,144542],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[29,144544],{"style":126417,"src":144545},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[113,144547,144549],{"id":144548},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144551,144552],{},"rem + 媒体查询 + less 技术",[29,144554],{"style":126417,"src":144555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144557,144558],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144560,144561],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[29,144563],{"style":126417,"src":144564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144566,144567],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144569,14662],{},[29,144571],{"style":126417,"src":144572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144574,144575],{},"index.html:",[133,144577,144579],{"className":126561,"code":144578,"language":126563,"meta":31,"style":31},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[139,144580,144581,144586,144592,144608,144612,144618,144634],{"__ignoreMap":31},[142,144582,144583],{"class":144,"line":145},[142,144584,144585],{"class":211},"\u002F* rem 适配方案 *\u002F\n",[142,144587,144588,144590],{"class":144,"line":64},[142,144589,50664],{"class":51329},[142,144591,15601],{"class":152},[142,144593,144594,144596,144598,144601,144603,144605],{"class":144,"line":1208},[142,144595,70655],{"class":201},[142,144597,51466],{"class":152},[142,144599,144600],{"class":201},"62.5",[142,144602,481],{"class":148},[142,144604,130424],{"class":152},[142,144606,144607],{"class":211},"\u002F* 1rem = 10px *\u002F\n",[142,144609,144610],{"class":144,"line":1223},[142,144611,1593],{"class":152},[142,144613,144614,144616],{"class":144,"line":1229},[142,144615,130409],{"class":1991},[142,144617,15601],{"class":152},[142,144619,144620,144622,144624,144626,144629,144631],{"class":144,"line":1243},[142,144621,70597],{"class":201},[142,144623,51466],{"class":152},[142,144625,599],{"class":201},[142,144627,144628],{"class":148},"rem",[142,144630,130424],{"class":152},[142,144632,144633],{"class":211},"\u002F* 100px *\u002F\n",[142,144635,144636],{"class":144,"line":1249},[142,144637,1593],{"class":152},[14,144639,144640],{},"common.less",[133,144642,144644],{"className":126561,"code":144643,"language":126563,"meta":31,"style":31},"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",[139,144645,144646,144652,144667,144671,144677,144691,144695,144699,144703,144709,144723,144727,144733,144747],{"__ignoreMap":31},[142,144647,144648,144650],{"class":144,"line":145},[142,144649,50664],{"class":51329},[142,144651,15601],{"class":152},[142,144653,144654,144656,144658,144660,144662,144664],{"class":144,"line":64},[142,144655,70655],{"class":201},[142,144657,51466],{"class":152},[142,144659,144600],{"class":201},[142,144661,481],{"class":148},[142,144663,26096],{"class":152},[142,144665,144666],{"class":211},"\u002F* 10px *\u002F\n",[142,144668,144669],{"class":144,"line":1208},[142,144670,1593],{"class":152},[142,144672,144673,144675],{"class":144,"line":1223},[142,144674,51640],{"class":51329},[142,144676,15601],{"class":152},[142,144678,144679,144681,144683,144685,144687,144689],{"class":144,"line":1229},[142,144680,70597],{"class":201},[142,144682,51466],{"class":152},[142,144684,599],{"class":201},[142,144686,144628],{"class":148},[142,144688,26096],{"class":152},[142,144690,144633],{"class":211},[142,144692,144693],{"class":144,"line":1243},[142,144694,1593],{"class":152},[142,144696,144697],{"class":144,"line":1249},[142,144698,136022],{"class":152},[142,144700,144701],{"class":144,"line":1340},[142,144702,144585],{"class":211},[142,144704,144705,144707],{"class":144,"line":1346},[142,144706,50664],{"class":51329},[142,144708,15601],{"class":152},[142,144710,144711,144713,144715,144717,144719,144721],{"class":144,"line":1358},[142,144712,70655],{"class":201},[142,144714,51466],{"class":152},[142,144716,144600],{"class":201},[142,144718,481],{"class":148},[142,144720,130424],{"class":152},[142,144722,144607],{"class":211},[142,144724,144725],{"class":144,"line":1640},[142,144726,1593],{"class":152},[142,144728,144729,144731],{"class":144,"line":1645},[142,144730,130409],{"class":1991},[142,144732,15601],{"class":152},[142,144734,144735,144737,144739,144741,144743,144745],{"class":144,"line":1651},[142,144736,70597],{"class":201},[142,144738,51466],{"class":152},[142,144740,599],{"class":201},[142,144742,144628],{"class":148},[142,144744,130424],{"class":152},[142,144746,144633],{"class":211},[142,144748,144749],{"class":144,"line":1656},[142,144750,1593],{"class":152},[14,144752,144753,144754,144757],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23582,144755,144756],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[133,144759,144762],{"className":144760,"code":144761,"language":5216},[5214],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[139,144763,144761],{"__ignoreMap":31},[14,144765,144766],{},"less保存时会自动变成.css文件",[14,144768,144769],{},"好好搞懂上述代码写法",[113,144771,144773],{"id":144772},"_2132-样式导入样式","21.3.2 样式导入样式",[29,144775],{"style":126417,"src":144776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[113,144778,144780],{"id":144779},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[96,144782,144783],{},[99,144784,144785],{},"准备工作",[29,144787],{"style":126417,"src":144788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144790,144791,144792],{},"github地址：",[391,144793,144794],{"href":144794,"rel":144795},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23894],[14,144797,144798],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144800,144801,144802],{},"js文件引入到index.html中使用的是",[139,144803,144804],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[96,144806,144807],{"start":64},[99,144808,144809],{},"vscode插件",[29,144811],{"style":126417,"src":144812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144814,144815],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144817,144818],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[29,144820],{"style":126417,"src":144821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144823,144824],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[29,144826],{"style":126417,"src":144827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144829,144830],{},"修改成75就可以，alt+z为快捷键",[14,144832,144833],{},"index.css：",[133,144835,144836],{"className":126561,"code":144578,"language":126563,"meta":31,"style":31},[139,144837,144838,144842,144848,144862,144866,144872,144886],{"__ignoreMap":31},[142,144839,144840],{"class":144,"line":145},[142,144841,144585],{"class":211},[142,144843,144844,144846],{"class":144,"line":64},[142,144845,50664],{"class":51329},[142,144847,15601],{"class":152},[142,144849,144850,144852,144854,144856,144858,144860],{"class":144,"line":1208},[142,144851,70655],{"class":201},[142,144853,51466],{"class":152},[142,144855,144600],{"class":201},[142,144857,481],{"class":148},[142,144859,130424],{"class":152},[142,144861,144607],{"class":211},[142,144863,144864],{"class":144,"line":1223},[142,144865,1593],{"class":152},[142,144867,144868,144870],{"class":144,"line":1229},[142,144869,130409],{"class":1991},[142,144871,15601],{"class":152},[142,144873,144874,144876,144878,144880,144882,144884],{"class":144,"line":1243},[142,144875,70597],{"class":201},[142,144877,51466],{"class":152},[142,144879,599],{"class":201},[142,144881,144628],{"class":148},[142,144883,130424],{"class":152},[142,144885,144633],{"class":211},[142,144887,144888],{"class":144,"line":1249},[142,144889,1593],{"class":152},[14,144891,144575],{},[133,144893,144894],{"className":126561,"code":126965,"language":126563,"meta":31,"style":31},[139,144895,144896,144902,144914],{"__ignoreMap":31},[142,144897,144898,144900],{"class":144,"line":145},[142,144899,51829],{"class":51329},[142,144901,15601],{"class":152},[142,144903,144904,144906,144908,144910,144912],{"class":144,"line":64},[142,144905,70655],{"class":201},[142,144907,51466],{"class":152},[142,144909,754],{"class":201},[142,144911,51521],{"class":148},[142,144913,1319],{"class":152},[142,144915,144916],{"class":144,"line":1208},[142,144917,1593],{"class":152},[84,144919,144921],{"id":144920},"_214-响应式开发","21.4 响应式开发",[14,144923,144924],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[29,144926],{"style":126417,"src":144927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144929,144930],{},"做法：",[1160,144932,144933,144936],{},[99,144934,144935],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[99,144937,144938],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[29,144940],{"style":126417,"src":144941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144943,144944],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[113,144946,144948],{"id":144947},"_2141-简单代码示范","21.4.1 简单代码示范",[133,144950,144951],{"className":126561,"code":144578,"language":126563,"meta":31,"style":31},[139,144952,144953,144957,144963,144977,144981,144987,145001],{"__ignoreMap":31},[142,144954,144955],{"class":144,"line":145},[142,144956,144585],{"class":211},[142,144958,144959,144961],{"class":144,"line":64},[142,144960,50664],{"class":51329},[142,144962,15601],{"class":152},[142,144964,144965,144967,144969,144971,144973,144975],{"class":144,"line":1208},[142,144966,70655],{"class":201},[142,144968,51466],{"class":152},[142,144970,144600],{"class":201},[142,144972,481],{"class":148},[142,144974,130424],{"class":152},[142,144976,144607],{"class":211},[142,144978,144979],{"class":144,"line":1223},[142,144980,1593],{"class":152},[142,144982,144983,144985],{"class":144,"line":1229},[142,144984,130409],{"class":1991},[142,144986,15601],{"class":152},[142,144988,144989,144991,144993,144995,144997,144999],{"class":144,"line":1243},[142,144990,70597],{"class":201},[142,144992,51466],{"class":152},[142,144994,599],{"class":201},[142,144996,144628],{"class":148},[142,144998,130424],{"class":152},[142,145000,144633],{"class":211},[142,145002,145003],{"class":144,"line":1249},[142,145004,1593],{"class":152},[14,145006,145007],{},"父盒子一般命名为container",[113,145009,145011],{"id":145010},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145013,145014,145015],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[302,145016,145017],{},"使得 Web 开发更加快捷",[1160,145019,145020],{},[99,145021,145022,145023],{},"官网：",[302,145024,145025],{},[391,145026,145027],{"href":145027,"rel":145028},"http:\u002F\u002Fgetbootstrap.com\u002F",[23894],[14,145030,145031],{},"可以直接去官网拿现成的东西",[96,145033,145034],{},[99,145035,145036],{},"Bootstrap的使用",[14,145038,145039],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145041,145042],{},"Bootstrap 使用四步曲：",[14,145044,145045,145048],{},[302,145046,145047],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[29,145050],{"style":126417,"src":145051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145053,145054],{},"打开Bootstrap官网，然后下载",[29,145056],{"style":126417,"src":145057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[29,145059],{"style":126417,"src":145060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145062,145063],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145065,145066],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145068,145069],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[29,145071],{"style":126417,"src":145072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[133,145074,145076],{"className":126561,"code":145075,"language":126563,"meta":31,"style":31},".center {\n  color: red;\n}\n",[139,145077,145078,145084,145094],{"__ignoreMap":31},[142,145079,145080,145082],{"class":144,"line":145},[142,145081,126852],{"class":1991},[142,145083,15601],{"class":152},[142,145085,145086,145088,145090,145092],{"class":144,"line":64},[142,145087,70934],{"class":201},[142,145089,51466],{"class":152},[142,145091,57450],{"class":201},[142,145093,1319],{"class":152},[142,145095,145096],{"class":144,"line":1208},[142,145097,1593],{"class":152},[14,145099,145100,145103],{},[139,145101,145102],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[29,145105],{"style":126417,"src":145106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[29,145108],{"style":126417,"src":145109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[29,145111],{"style":126417,"src":145112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145114,145115],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[29,145117],{"style":126417,"src":145118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145120,145121],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[96,145123,145124],{"start":64},[99,145125,145126],{},"布局容器",[29,145128],{"style":126417,"src":145129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145131,145132],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145134,145135],{},"container-fluid用于移动式布局比较方便",[96,145137,145138],{"start":1208},[99,145139,145140,145141],{},"bootstrap ",[302,145142,145143],{},"栅格系统原理",[29,145145],{"style":126417,"src":145146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[96,145148,145149],{"start":1223},[99,145150,145151],{},[302,145152,145153],{},"栅格选项参数",[29,145155],{"style":126417,"src":145156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145158,145159],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145161,14662],{},[133,145163,145164],{"className":126561,"code":145075,"language":126563,"meta":31,"style":31},[139,145165,145166,145172,145182],{"__ignoreMap":31},[142,145167,145168,145170],{"class":144,"line":145},[142,145169,126852],{"class":1991},[142,145171,15601],{"class":152},[142,145173,145174,145176,145178,145180],{"class":144,"line":64},[142,145175,70934],{"class":201},[142,145177,51466],{"class":152},[142,145179,57450],{"class":201},[142,145181,1319],{"class":152},[142,145183,145184],{"class":144,"line":1208},[142,145185,1593],{"class":152},[14,145187,135604],{},[29,145189],{"style":126417,"src":145190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145192,145193],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145195,145196],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145198,145199],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145201,145202],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145204,145205],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145207,145208],{},"汇总展示说明：",[133,145210,145211],{"className":127308,"code":130665,"language":127310,"meta":31,"style":31},[139,145212,145213,145217,145231,145235],{"__ignoreMap":31},[142,145214,145215],{"class":144,"line":145},[142,145216,130672],{"class":211},[142,145218,145219,145221,145223,145225,145227,145229],{"class":144,"line":64},[142,145220,1063],{"class":152},[142,145222,51640],{"class":51329},[142,145224,53515],{"class":1991},[142,145226,198],{"class":152},[142,145228,130685],{"class":257},[142,145230,51336],{"class":152},[142,145232,145233],{"class":144,"line":1208},[142,145234,130692],{"class":152},[142,145236,145237,145239,145241],{"class":144,"line":1223},[142,145238,51814],{"class":152},[142,145240,51640],{"class":51329},[142,145242,51336],{"class":152},[29,145244],{"style":126417,"src":145245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145247,145248],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[133,145250,145251],{"className":127308,"code":130665,"language":127310,"meta":31,"style":31},[139,145252,145253,145257,145271,145275],{"__ignoreMap":31},[142,145254,145255],{"class":144,"line":145},[142,145256,130672],{"class":211},[142,145258,145259,145261,145263,145265,145267,145269],{"class":144,"line":64},[142,145260,1063],{"class":152},[142,145262,51640],{"class":51329},[142,145264,53515],{"class":1991},[142,145266,198],{"class":152},[142,145268,130685],{"class":257},[142,145270,51336],{"class":152},[142,145272,145273],{"class":144,"line":1208},[142,145274,130692],{"class":152},[142,145276,145277,145279,145281],{"class":144,"line":1223},[142,145278,51814],{"class":152},[142,145280,51640],{"class":51329},[142,145282,51336],{"class":152},[96,145284,145285],{"start":1229},[99,145286,145287],{},[302,145288,145289],{},"列嵌套",[29,145291],{"style":126417,"src":145292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145294,145295],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145297,145298],{},"没加row内部这样：",[29,145300],{"style":126417,"src":145301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145303,145304],{},"加上row之后内部为：",[29,145306],{"style":126417,"src":145307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[96,145309,145310],{"start":1243},[99,145311,145312],{},[302,145313,145314],{},"列偏移",[29,145316],{"style":126417,"src":145317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145319,145320],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145322,145323],{},"要加偏移量，即偏移份数",[14,145325,145326],{},"偏移的份数=12-两个盒子的份数",[96,145328,145329],{"start":1249},[99,145330,145331],{},[302,145332,145333],{},"列排序",[29,145335],{"style":126417,"src":145336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145338,145339],{},"pull拉左；push推右",[96,145341,145342],{"start":1340},[99,145343,145344],{},[302,145345,145346],{},"响应式工具",[29,145348],{"style":126417,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145351,145352],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[113,145354,145356],{"id":145355},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145358,145359],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145361,145362],{},"ul {",[14,145364,145365],{},"list-style: none;",[14,145367,145368],{},"margin:0;",[14,145370,145371],{},"padding:0; }",[29,145373],{"style":126417,"src":145374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[29,145376],{"style":126417,"src":145377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145379,145380],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145382,68918],{},[133,145384,145385],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,145386,145387,145393,145403],{"__ignoreMap":31},[142,145388,145389,145391],{"class":144,"line":145},[142,145390,130409],{"class":1991},[142,145392,15601],{"class":152},[142,145394,145395,145397,145399,145401],{"class":144,"line":64},[142,145396,131041],{"class":201},[142,145398,51466],{"class":152},[142,145400,23765],{"class":201},[142,145402,1319],{"class":152},[142,145404,145405],{"class":144,"line":1208},[142,145406,1593],{"class":152},[14,145408,70482],{},[133,145410,145411],{"className":126561,"code":139231,"language":126563,"meta":31,"style":31},[139,145412,145413,145419,145429],{"__ignoreMap":31},[142,145414,145415,145417],{"class":144,"line":145},[142,145416,130409],{"class":1991},[142,145418,15601],{"class":152},[142,145420,145421,145423,145425,145427],{"class":144,"line":64},[142,145422,131041],{"class":201},[142,145424,51466],{"class":152},[142,145426,23765],{"class":201},[142,145428,1319],{"class":152},[142,145430,145431],{"class":144,"line":1208},[142,145432,1593],{"class":152},[84,145434,145436],{"id":145435},"_215-swiper-插件使用","21.5 swiper 插件使用",[1160,145438,145439,145442,145445],{},[99,145440,145441],{},"下载需要的css和js文件html页面中 引入相关文件",[99,145443,145444],{},"官网找到类似案例，复制html结构，css样式 js 语法",[99,145446,145447],{},"根据需求定制修改模块",[29,145449],{"style":126417,"src":145450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145452,145453],{},"解压后将这两部分放到项目中",[29,145455],{"style":126417,"src":145456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145458,145459],{},"这个插件可以帮助我们实现轮播图效果",[14,145461,145462],{},"用法：",[29,145464],{"style":126417,"src":145465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145467,145468],{},"找到自己喜欢的",[29,145470],{"style":126417,"src":145471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145473,145474],{},"右键，查看网页源代码",[29,145476],{"style":126417,"src":145477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145479,145480],{},"复制人家的结构内容",[14,145482,145483],{},"然后去看API文档：",[29,145485],{"style":126417,"src":145486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145488,145489],{},"可以看看如何修改样式",[14,145491,145492],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5155,145494,145495],{},"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":31,"searchDepth":64,"depth":64,"links":145497},[145498,145503,145507,145512,145517],{"id":144298,"depth":64,"text":144299,"children":145499},[145500,145501,145502],{"id":144302,"depth":1208,"text":144303},{"id":144312,"depth":1208,"text":144313},{"id":144407,"depth":1208,"text":144408},{"id":144422,"depth":64,"text":144423,"children":145504},[145505,145506],{"id":144444,"depth":1208,"text":144445},{"id":144460,"depth":1208,"text":144461},{"id":144535,"depth":64,"text":144536,"children":145508},[145509,145510,145511],{"id":144548,"depth":1208,"text":144549},{"id":144772,"depth":1208,"text":144773},{"id":144779,"depth":1208,"text":144780},{"id":144920,"depth":64,"text":144921,"children":145513},[145514,145515,145516],{"id":144947,"depth":1208,"text":144948},{"id":145010,"depth":1208,"text":145011},{"id":145355,"depth":1208,"text":145356},{"id":145435,"depth":64,"text":145436},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144290,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145524,"title":145525,"body":145526,"description":66,"extension":67,"meta":145746,"navigation":69,"path":145747,"seo":145748,"stem":145749,"__hash__":145750},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145527,"toc":145742},[145528,145531,145535,145538,145553,145558,145561,145566,145601,145606,145618,145623,145636,145641,145658,145663,145683,145688,145706,145709,145712,145715,145718,145722,145725,145728,145731,145734,145737,145740],[10,145529,145525],{"id":145530},"_22-代码提交与新型相对单位",[84,145532,145534],{"id":145533},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145536,145537],{},"法1：",[96,145539,145540,145547,145550],{},[99,145541,145542,145543],{},"登录网站注册：",[391,145544,145545],{"href":145545,"rel":145546},"https:\u002F\u002Fgitee.com\u002F",[23894],[99,145548,145549],{},"码云创建新的仓库",[99,145551,145552],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1160,145554,145555],{},[99,145556,145557],{},"在网站根目录右键-- Git Bash Here",[29,145559],{"style":126417,"src":145560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1160,145562,145563],{},[99,145564,145565],{},"如果是第一次利用git提交，请配置好全局选项",[133,145567,145569],{"className":117305,"code":145568,"language":117307,"meta":31,"style":31},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[139,145570,145571,145587],{"__ignoreMap":31},[142,145572,145573,145576,145578,145581,145584],{"class":144,"line":145},[142,145574,145575],{"class":1991},"git",[142,145577,119728],{"class":257},[142,145579,145580],{"class":201}," --global",[142,145582,145583],{"class":257}," user.name",[142,145585,145586],{"class":257}," \"你的名字\"\n",[142,145588,145589,145591,145593,145595,145598],{"class":144,"line":64},[142,145590,145575],{"class":1991},[142,145592,119728],{"class":257},[142,145594,145580],{"class":201},[142,145596,145597],{"class":257}," user.email",[142,145599,145600],{"class":257}," \"你的邮箱\"\n",[1160,145602,145603],{},[99,145604,145605],{},"初始化仓库",[133,145607,145609],{"className":117305,"code":145608,"language":117307,"meta":31,"style":31},"git init\n",[139,145610,145611],{"__ignoreMap":31},[142,145612,145613,145615],{"class":144,"line":145},[142,145614,145575],{"class":1991},[142,145616,145617],{"class":257}," init\n",[1160,145619,145620],{},[99,145621,145622],{},"把本地文件放到暂存区",[133,145624,145626],{"className":117305,"code":145625,"language":117307,"meta":31,"style":31},"git add .\n",[139,145627,145628],{"__ignoreMap":31},[142,145629,145630,145632,145634],{"class":144,"line":145},[142,145631,145575],{"class":1991},[142,145633,5238],{"class":257},[142,145635,28770],{"class":257},[1160,145637,145638],{},[99,145639,145640],{},"把本地文件放到本地仓库里面",[133,145642,145644],{"className":117305,"code":145643,"language":117307,"meta":31,"style":31},"git commit -m \"first commit\"\n",[139,145645,145646],{"__ignoreMap":31},[142,145647,145648,145650,145653,145655],{"class":144,"line":145},[142,145649,145575],{"class":1991},[142,145651,145652],{"class":257}," commit",[142,145654,100891],{"class":201},[142,145656,145657],{"class":257}," \"first commit\"\n",[1160,145659,145660],{},[99,145661,145662],{},"链接远程仓库",[133,145664,145666],{"className":117305,"code":145665,"language":117307,"meta":31,"style":31},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[139,145667,145668],{"__ignoreMap":31},[142,145669,145670,145672,145675,145677,145680],{"class":144,"line":145},[142,145671,145575],{"class":1991},[142,145673,145674],{"class":257}," remote",[142,145676,5238],{"class":257},[142,145678,145679],{"class":257}," origin",[142,145681,145682],{"class":257}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1160,145684,145685],{},[99,145686,145687],{},"把本地仓库的文件推送到远程仓库 push",[133,145689,145691],{"className":117305,"code":145690,"language":117307,"meta":31,"style":31},"git push -u origin master\n",[139,145692,145693],{"__ignoreMap":31},[142,145694,145695,145697,145699,145701,145703],{"class":144,"line":145},[142,145696,145575],{"class":1991},[142,145698,29045],{"class":257},[142,145700,28319],{"class":201},[142,145702,145679],{"class":257},[142,145704,145705],{"class":257}," master\n",[29,145707],{"style":126417,"src":145708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145710,145711],{},"上方方法暂未实现，后边学完git后在整",[14,145713,145714],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[29,145716],{"style":126417,"src":145717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[84,145719,145721],{"id":145720},"_222-新型相对单位","22.2 新型相对单位",[29,145723],{"style":126417,"src":145724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[29,145726],{"style":126417,"src":145727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145729,145730],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145732,145733],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[29,145735],{"style":126417,"src":145736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145738,145739],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5155,145741,23987],{},{"title":31,"searchDepth":64,"depth":64,"links":145743},[145744,145745],{"id":145533,"depth":64,"text":145534},{"id":145720,"depth":64,"text":145721},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145525,"description":66},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145752,"title":145753,"body":145754,"description":145758,"extension":67,"meta":145759,"navigation":69,"path":145760,"seo":145761,"stem":145762,"__hash__":145763},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145755,"toc":145756},[],{"title":31,"searchDepth":64,"depth":64,"links":145757},[],"自己正经开始学编程的第一门语言！",{"category":92868},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145753,"description":145758},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145765,"title":145766,"body":145767,"description":66,"extension":67,"meta":146914,"navigation":69,"path":146915,"seo":146916,"stem":146917,"__hash__":146918},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145768,"toc":146890},[145769,145772,145776,145779,145782,145807,145810,145816,145820,145823,145850,145853,145893,145896,145908,145911,145917,145921,145925,145952,145969,145976,145980,145983,146009,146012,146016,146019,146059,146062,146079,146085,146089,146094,146138,146141,146159,146162,146230,146234,146241,146244,146259,146262,146271,146274,146285,146288,146297,146300,146317,146320,146335,146339,146343,146346,146348,146368,146372,146375,146378,146389,146392,146398,146402,146408,146435,146438,146450,146453,146464,146467,146473,146477,146483,146533,146536,146578,146581,146614,146617,146651,146655,146658,146678,146681,146717,146720,146733,146737,146741,146747,146750,146763,146767,146770,146776,146779,146783,146786,146789,146838,146842,146858,146864,146871,146877,146887],[10,145770,145766],{"id":145771},"_1-python环境与第一个程序",[84,145773,145775],{"id":145774},"_11-什么是python","1.1 什么是Python",[14,145777,145778],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145780,145781],{},"理解 Python 时抓住三个关键词：",[96,145783,145784,145787,145790],{},[99,145785,145786],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[99,145788,145789],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[99,145791,145792,145793,365,145796,365,145799,365,145802,365,145804,28414],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[139,145794,145795],{},"os",[139,145797,145798],{},"sys",[139,145800,145801],{},"json",[139,145803,57889],{},[139,145805,145806],{},"datetime",[14,145808,145809],{},"Python 程序的运行链路：",[133,145811,145814],{"className":145812,"code":145813,"language":5216,"meta":31},[5214],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[139,145815,145813],{"__ignoreMap":31},[84,145817,145819],{"id":145818},"_12-python解释器","1.2 Python解释器",[14,145821,145822],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[133,145824,145826],{"className":23851,"code":145825,"language":23853,"meta":31,"style":31},"python --version\npython3 --version\npython\npython3\n",[139,145827,145828,145834,145840,145845],{"__ignoreMap":31},[142,145829,145830,145832],{"class":144,"line":145},[142,145831,30409],{"class":1991},[142,145833,26322],{"class":201},[142,145835,145836,145838],{"class":144,"line":64},[142,145837,100888],{"class":1991},[142,145839,26322],{"class":201},[142,145841,145842],{"class":144,"line":1208},[142,145843,145844],{"class":1991},"python\n",[142,145846,145847],{"class":144,"line":1223},[142,145848,145849],{"class":1991},"python3\n",[14,145851,145852],{},"进入交互模式后，可以直接输入表达式：",[133,145854,145856],{"className":30407,"code":145855,"language":30409,"meta":31,"style":31},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[139,145857,145858,145869,145874,145888],{"__ignoreMap":31},[142,145859,145860,145863,145865,145867],{"class":144,"line":145},[142,145861,145862],{"class":148},">>>",[142,145864,25147],{"class":201},[142,145866,45595],{"class":148},[142,145868,47752],{"class":201},[142,145870,145871],{"class":144,"line":64},[142,145872,145873],{"class":201},"3\n",[142,145875,145876,145878,145881,145883,145886],{"class":144,"line":1208},[142,145877,145862],{"class":148},[142,145879,145880],{"class":201}," print",[142,145882,153],{"class":152},[142,145884,145885],{"class":257},"\"hello python\"",[142,145887,159],{"class":152},[142,145889,145890],{"class":144,"line":1223},[142,145891,145892],{"class":152},"hello python\n",[14,145894,145895],{},"退出交互模式：",[133,145897,145899],{"className":30407,"code":145898,"language":30409,"meta":31,"style":31},"exit()\n",[139,145900,145901],{"__ignoreMap":31},[142,145902,145903,145906],{"class":144,"line":145},[142,145904,145905],{"class":201},"exit",[142,145907,2004],{"class":152},[14,145909,145910],{},"或使用快捷键：",[133,145912,145915],{"className":145913,"code":145914,"language":5216,"meta":31},[5214],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[139,145916,145914],{"__ignoreMap":31},[84,145918,145920],{"id":145919},"_13-安装python","1.3 安装Python",[113,145922,145924],{"id":145923},"_131-windows安装","1.3.1 Windows安装",[96,145926,145927,145934,145937,145943,145949],{},[99,145928,145929,145930],{},"打开 Python 官网：",[391,145931,145932],{"href":145932,"rel":145933},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23894],[99,145935,145936],{},"下载 Windows Installer。",[99,145938,145939,145940,28414],{},"安装时勾选 ",[139,145941,145942],{},"Add Python to PATH",[99,145944,145945,145946,28414],{},"点击 ",[139,145947,145948],{},"Install Now",[99,145950,145951],{},"安装完成后打开命令提示符验证：",[133,145953,145955],{"className":23851,"code":145954,"language":23853,"meta":31,"style":31},"python --version\npip --version\n",[139,145956,145957,145963],{"__ignoreMap":31},[142,145958,145959,145961],{"class":144,"line":145},[142,145960,30409],{"class":1991},[142,145962,26322],{"class":201},[142,145964,145965,145967],{"class":144,"line":64},[142,145966,23860],{"class":1991},[142,145968,26322],{"class":201},[14,145970,145971,145972,145975],{},"如果提示 ",[139,145973,145974],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[113,145977,145979],{"id":145978},"_132-macos安装","1.3.2 macOS安装",[14,145981,145982],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[133,145984,145986],{"className":23851,"code":145985,"language":23853,"meta":31,"style":31},"brew install python\npython3 --version\npip3 --version\n",[139,145987,145988,145997,146003],{"__ignoreMap":31},[142,145989,145990,145993,145995],{"class":144,"line":145},[142,145991,145992],{"class":1991},"brew",[142,145994,23863],{"class":257},[142,145996,124327],{"class":257},[142,145998,145999,146001],{"class":144,"line":64},[142,146000,100888],{"class":1991},[142,146002,26322],{"class":201},[142,146004,146005,146007],{"class":144,"line":1208},[142,146006,119709],{"class":1991},[142,146008,26322],{"class":201},[14,146010,146011],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[113,146013,146015],{"id":146014},"_133-linux安装","1.3.3 Linux安装",[14,146017,146018],{},"Ubuntu\u002FDebian：",[133,146020,146022],{"className":23851,"code":146021,"language":23853,"meta":31,"style":31},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[139,146023,146024,146032,146047,146053],{"__ignoreMap":31},[142,146025,146026,146028,146030],{"class":144,"line":145},[142,146027,24606],{"class":1991},[142,146029,117326],{"class":257},[142,146031,26271],{"class":257},[142,146033,146034,146036,146038,146040,146042,146044],{"class":144,"line":64},[142,146035,24606],{"class":1991},[142,146037,117326],{"class":257},[142,146039,23863],{"class":257},[142,146041,104412],{"class":257},[142,146043,100807],{"class":257},[142,146045,146046],{"class":257}," python3-venv\n",[142,146048,146049,146051],{"class":144,"line":1208},[142,146050,100888],{"class":1991},[142,146052,26322],{"class":201},[142,146054,146055,146057],{"class":144,"line":1223},[142,146056,119709],{"class":1991},[142,146058,26322],{"class":201},[14,146060,146061],{},"Fedora：",[133,146063,146065],{"className":23851,"code":146064,"language":23853,"meta":31,"style":31},"sudo dnf install python3 python3-pip\n",[139,146066,146067],{"__ignoreMap":31},[142,146068,146069,146071,146073,146075,146077],{"class":144,"line":145},[142,146070,24606],{"class":1991},[142,146072,26344],{"class":257},[142,146074,23863],{"class":257},[142,146076,104412],{"class":257},[142,146078,119774],{"class":257},[14,146080,146081,146082,146084],{},"Linux 上通常使用 ",[139,146083,100888],{}," 命令，避免和系统旧版本 Python 冲突。",[84,146086,146088],{"id":146087},"_14-pip包管理器","1.4 pip包管理器",[14,146090,146091,146093],{},[139,146092,23860],{}," 用来安装第三方库。",[133,146095,146097],{"className":23851,"code":146096,"language":23853,"meta":31,"style":31},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[139,146098,146099,146108,146117,146125,146131],{"__ignoreMap":31},[142,146100,146101,146103,146105],{"class":144,"line":145},[142,146102,23860],{"class":1991},[142,146104,23863],{"class":257},[142,146106,146107],{"class":257}," requests\n",[142,146109,146110,146112,146115],{"class":144,"line":64},[142,146111,23860],{"class":1991},[142,146113,146114],{"class":257}," uninstall",[142,146116,146107],{"class":257},[142,146118,146119,146121,146123],{"class":144,"line":1208},[142,146120,23860],{"class":1991},[142,146122,117583],{"class":257},[142,146124,146107],{"class":257},[142,146126,146127,146129],{"class":144,"line":1223},[142,146128,23860],{"class":1991},[142,146130,118964],{"class":257},[142,146132,146133,146135],{"class":144,"line":1229},[142,146134,23860],{"class":1991},[142,146136,146137],{"class":257}," freeze\n",[14,146139,146140],{},"国内网络较慢时可以临时使用镜像：",[133,146142,146144],{"className":23851,"code":146143,"language":23853,"meta":31,"style":31},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[139,146145,146146],{"__ignoreMap":31},[142,146147,146148,146150,146152,146155,146157],{"class":144,"line":145},[142,146149,23860],{"class":1991},[142,146151,23863],{"class":257},[142,146153,146154],{"class":257}," requests",[142,146156,26459],{"class":201},[142,146158,119737],{"class":257},[14,146160,146161],{},"常见第三方库：",[290,146163,146164,146173],{},[293,146165,146166],{},[296,146167,146168,146171],{},[299,146169,146170],{},"库",[299,146172,102705],{},[337,146174,146175,146183,146190,146198,146206,146214,146222],{},[296,146176,146177,146180],{},[342,146178,146179],{},"requests",[342,146181,146182],{},"网络请求",[296,146184,146185,146187],{},[342,146186,100635],{},[342,146188,146189],{},"数值计算",[296,146191,146192,146195],{},[342,146193,146194],{},"pandas",[342,146196,146197],{},"表格数据处理",[296,146199,146200,146203],{},[342,146201,146202],{},"matplotlib",[342,146204,146205],{},"绘图",[296,146207,146208,146211],{},[342,146209,146210],{},"pyecharts",[342,146212,146213],{},"ECharts 图表",[296,146215,146216,146219],{},[342,146217,146218],{},"flask",[342,146220,146221],{},"Web 后端",[296,146223,146224,146227],{},[342,146225,146226],{},"pytest",[342,146228,146229],{},"自动化测试",[84,146231,146233],{"id":146232},"_15-虚拟环境","1.5 虚拟环境",[14,146235,146236,146237,146240],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[139,146238,146239],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146242,146243],{},"创建虚拟环境：",[133,146245,146247],{"className":23851,"code":146246,"language":23853,"meta":31,"style":31},"python -m venv .venv\n",[139,146248,146249],{"__ignoreMap":31},[142,146250,146251,146253,146255,146257],{"class":144,"line":145},[142,146252,30409],{"class":1991},[142,146254,100891],{"class":201},[142,146256,100894],{"class":257},[142,146258,100897],{"class":257},[14,146260,146261],{},"Windows 激活：",[133,146263,146265],{"className":23851,"code":146264,"language":23853,"meta":31,"style":31},".venv\\Scripts\\activate\n",[139,146266,146267],{"__ignoreMap":31},[142,146268,146269],{"class":144,"line":145},[142,146270,146264],{"class":1991},[14,146272,146273],{},"macOS\u002FLinux 激活：",[133,146275,146277],{"className":23851,"code":146276,"language":23853,"meta":31,"style":31},"source .venv\u002Fbin\u002Factivate\n",[139,146278,146279],{"__ignoreMap":31},[142,146280,146281,146283],{"class":144,"line":145},[142,146282,100902],{"class":201},[142,146284,100905],{"class":257},[14,146286,146287],{},"退出虚拟环境：",[133,146289,146291],{"className":23851,"code":146290,"language":23853,"meta":31,"style":31},"deactivate\n",[139,146292,146293],{"__ignoreMap":31},[142,146294,146295],{"class":144,"line":145},[142,146296,146290],{"class":1991},[14,146298,146299],{},"保存依赖：",[133,146301,146303],{"className":23851,"code":146302,"language":23853,"meta":31,"style":31},"pip freeze > requirements.txt\n",[139,146304,146305],{"__ignoreMap":31},[142,146306,146307,146309,146312,146314],{"class":144,"line":145},[142,146308,23860],{"class":1991},[142,146310,146311],{"class":257}," freeze",[142,146313,26251],{"class":148},[142,146315,146316],{"class":257}," requirements.txt\n",[14,146318,146319],{},"安装依赖：",[133,146321,146323],{"className":23851,"code":146322,"language":23853,"meta":31,"style":31},"pip install -r requirements.txt\n",[139,146324,146325],{"__ignoreMap":31},[142,146326,146327,146329,146331,146333],{"class":144,"line":145},[142,146328,23860],{"class":1991},[142,146330,23863],{"class":257},[142,146332,119648],{"class":201},[142,146334,146316],{"class":257},[84,146336,146338],{"id":146337},"_16-开发工具","1.6 开发工具",[113,146340,146342],{"id":146341},"_161-pycharm","1.6.1 PyCharm",[14,146344,146345],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146347,122071],{},[96,146349,146350,146353,146356,146362,146365],{},[99,146351,146352],{},"New Project：创建项目。",[99,146354,146355],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[99,146357,146358,146359,125992],{},"New Python File：创建 ",[139,146360,146361],{},".py",[99,146363,146364],{},"Run：运行当前文件。",[99,146366,146367],{},"Debug：断点调试。",[113,146369,146371],{"id":146370},"_162-vs-code","1.6.2 VS Code",[14,146373,146374],{},"VS Code 轻量，适合后续多语言开发。",[14,146376,146377],{},"建议安装插件：",[96,146379,146380,146383,146386],{},[99,146381,146382],{},"Python。",[99,146384,146385],{},"Pylance。",[99,146387,146388],{},"Jupyter。",[14,146390,146391],{},"选择解释器：",[133,146393,146396],{"className":146394,"code":146395,"language":5216,"meta":31},[5214],"Ctrl + Shift + P -> Python: Select Interpreter\n",[139,146397,146395],{"__ignoreMap":31},[84,146399,146401],{"id":146400},"_17-第一个python程序","1.7 第一个Python程序",[14,146403,146404,146405,24647],{},"创建文件 ",[139,146406,146407],{},"hello.py",[133,146409,146411],{"className":30407,"code":146410,"language":30409,"meta":31,"style":31},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[139,146412,146413,146424],{"__ignoreMap":31},[142,146414,146415,146417,146419,146422],{"class":144,"line":145},[142,146416,30444],{"class":201},[142,146418,153],{"class":152},[142,146420,146421],{"class":257},"\"Hello World\"",[142,146423,159],{"class":152},[142,146425,146426,146428,146430,146433],{"class":144,"line":64},[142,146427,30444],{"class":201},[142,146429,153],{"class":152},[142,146431,146432],{"class":257},"\"你好，Python\"",[142,146434,159],{"class":152},[14,146436,146437],{},"在终端运行：",[133,146439,146441],{"className":23851,"code":146440,"language":23853,"meta":31,"style":31},"python hello.py\n",[139,146442,146443],{"__ignoreMap":31},[142,146444,146445,146447],{"class":144,"line":145},[142,146446,30409],{"class":1991},[142,146448,146449],{"class":257}," hello.py\n",[14,146451,146452],{},"或：",[133,146454,146456],{"className":23851,"code":146455,"language":23853,"meta":31,"style":31},"python3 hello.py\n",[139,146457,146458],{"__ignoreMap":31},[142,146459,146460,146462],{"class":144,"line":145},[142,146461,100888],{"class":1991},[142,146463,146449],{"class":257},[14,146465,146466],{},"输出：",[133,146468,146471],{"className":146469,"code":146470,"language":5216,"meta":31},[5214],"Hello World\n你好，Python\n",[139,146472,146470],{"__ignoreMap":31},[84,146474,146476],{"id":146475},"_18-print函数","1.8 print函数",[14,146478,146479,146482],{},[139,146480,146481],{},"print()"," 用来输出内容。",[133,146484,146486],{"className":30407,"code":146485,"language":30409,"meta":31,"style":31},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[139,146487,146488,146498,146508,146518],{"__ignoreMap":31},[142,146489,146490,146492,146494,146496],{"class":144,"line":145},[142,146491,30444],{"class":201},[142,146493,153],{"class":152},[142,146495,5873],{"class":257},[142,146497,159],{"class":152},[142,146499,146500,146502,146504,146506],{"class":144,"line":64},[142,146501,30444],{"class":201},[142,146503,153],{"class":152},[142,146505,464],{"class":201},[142,146507,159],{"class":152},[142,146509,146510,146512,146514,146516],{"class":144,"line":1208},[142,146511,30444],{"class":201},[142,146513,153],{"class":152},[142,146515,202],{"class":201},[142,146517,159],{"class":152},[142,146519,146520,146522,146524,146527,146529,146531],{"class":144,"line":1223},[142,146521,30444],{"class":201},[142,146523,153],{"class":152},[142,146525,146526],{"class":257},"\"年龄:\"",[142,146528,12464],{"class":152},[142,146530,803],{"class":201},[142,146532,159],{"class":152},[14,146534,146535],{},"多个内容用逗号隔开，默认中间加空格：",[133,146537,146539],{"className":30407,"code":146538,"language":30409,"meta":31,"style":31},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[139,146540,146541,146551,146561],{"__ignoreMap":31},[142,146542,146543,146546,146548],{"class":144,"line":145},[142,146544,146545],{"class":152},"name ",[142,146547,198],{"class":148},[142,146549,146550],{"class":257}," \"张三\"\n",[142,146552,146553,146556,146558],{"class":144,"line":64},[142,146554,146555],{"class":152},"age ",[142,146557,198],{"class":148},[142,146559,146560],{"class":201}," 18\n",[142,146562,146563,146565,146567,146570,146573,146575],{"class":144,"line":1208},[142,146564,30444],{"class":201},[142,146566,153],{"class":152},[142,146568,146569],{"class":257},"\"姓名:\"",[142,146571,146572],{"class":152},", name, ",[142,146574,146526],{"class":257},[142,146576,146577],{"class":152},", age)\n",[14,146579,146580],{},"修改分隔符：",[133,146582,146584],{"className":30407,"code":146583,"language":30409,"meta":31,"style":31},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[139,146585,146586],{"__ignoreMap":31},[142,146587,146588,146590,146592,146595,146597,146599,146601,146603,146605,146608,146610,146612],{"class":144,"line":145},[142,146589,30444],{"class":201},[142,146591,153],{"class":152},[142,146593,146594],{"class":257},"\"2024\"",[142,146596,12464],{"class":152},[142,146598,54345],{"class":257},[142,146600,12464],{"class":152},[142,146602,54345],{"class":257},[142,146604,12464],{"class":152},[142,146606,146607],{"class":5245},"sep",[142,146609,198],{"class":148},[142,146611,32512],{"class":257},[142,146613,159],{"class":152},[14,146615,146616],{},"修改结尾符：",[133,146618,146620],{"className":30407,"code":146619,"language":30409,"meta":31,"style":31},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[139,146621,146622,146640],{"__ignoreMap":31},[142,146623,146624,146626,146628,146630,146632,146634,146636,146638],{"class":144,"line":145},[142,146625,30444],{"class":201},[142,146627,153],{"class":152},[142,146629,5873],{"class":257},[142,146631,12464],{"class":152},[142,146633,45830],{"class":5245},[142,146635,198],{"class":148},[142,146637,4387],{"class":257},[142,146639,159],{"class":152},[142,146641,146642,146644,146646,146649],{"class":144,"line":64},[142,146643,30444],{"class":201},[142,146645,153],{"class":152},[142,146647,146648],{"class":257},"\"python\"",[142,146650,159],{"class":152},[84,146652,146654],{"id":146653},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146656,146657],{},"交互运行适合临时验证：",[133,146659,146661],{"className":30407,"code":146660,"language":30409,"meta":31,"style":31},">>> 10 * 3\n30\n",[139,146662,146663,146673],{"__ignoreMap":31},[142,146664,146665,146667,146669,146671],{"class":144,"line":145},[142,146666,145862],{"class":148},[142,146668,2066],{"class":201},[142,146670,6547],{"class":148},[142,146672,120045],{"class":201},[142,146674,146675],{"class":144,"line":64},[142,146676,146677],{"class":201},"30\n",[14,146679,146680],{},"脚本运行适合保存程序：",[133,146682,146684],{"className":30407,"code":146683,"language":30409,"meta":31,"style":31},"price = 8\ncount = 5\nprint(price * count)\n",[139,146685,146686,146696,146705],{"__ignoreMap":31},[142,146687,146688,146691,146693],{"class":144,"line":145},[142,146689,146690],{"class":152},"price ",[142,146692,198],{"class":148},[142,146694,146695],{"class":201}," 8\n",[142,146697,146698,146701,146703],{"class":144,"line":64},[142,146699,146700],{"class":152},"count ",[142,146702,198],{"class":148},[142,146704,54456],{"class":201},[142,146706,146707,146709,146712,146714],{"class":144,"line":1208},[142,146708,30444],{"class":201},[142,146710,146711],{"class":152},"(price ",[142,146713,608],{"class":148},[142,146715,146716],{"class":152}," count)\n",[14,146718,146719],{},"实际学习中推荐：",[96,146721,146722,146725,146730],{},[99,146723,146724],{},"临时试一个语法，用交互模式。",[99,146726,146727,146728,125992],{},"写完整练习，用 ",[139,146729,146361],{},[99,146731,146732],{},"写项目，用独立目录和虚拟环境。",[84,146734,146736],{"id":146735},"_110-常见错误","1.10 常见错误",[113,146738,146740],{"id":146739},"_1101-命令找不到","1.10.1 命令找不到",[133,146742,146745],{"className":146743,"code":146744,"language":5216,"meta":31},[5214],"python: command not found\n",[139,146746,146744],{"__ignoreMap":31},[14,146748,146749],{},"原因：",[96,146751,146752,146755,146758],{},[99,146753,146754],{},"没安装 Python。",[99,146756,146757],{},"PATH 没配置。",[99,146759,146760,146761,28414],{},"Linux\u002FmacOS 应该使用 ",[139,146762,100888],{},[113,146764,146766],{"id":146765},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146768,146769],{},"不要把文件命名为：",[133,146771,146774],{"className":146772,"code":146773,"language":5216,"meta":31},[5214],"random.py\njson.py\ntime.py\nrequests.py\n",[139,146775,146773],{"__ignoreMap":31},[14,146777,146778],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[113,146780,146782],{"id":146781},"_1103-中文乱码","1.10.3 中文乱码",[14,146784,146785],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146787,146788],{},"如果读写文件出现乱码，要明确指定编码：",[133,146790,146792],{"className":30407,"code":146791,"language":30409,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[139,146793,146794,146828],{"__ignoreMap":31},[142,146795,146796,146798,146801,146803,146806,146808,146811,146813,146816,146818,146821,146823,146825],{"class":144,"line":145},[142,146797,107842],{"class":148},[142,146799,146800],{"class":201}," open",[142,146802,153],{"class":152},[142,146804,146805],{"class":257},"\"data.txt\"",[142,146807,12464],{"class":152},[142,146809,146810],{"class":257},"\"r\"",[142,146812,12464],{"class":152},[142,146814,146815],{"class":5245},"encoding",[142,146817,198],{"class":148},[142,146819,146820],{"class":257},"\"utf-8\"",[142,146822,13743],{"class":152},[142,146824,31412],{"class":148},[142,146826,146827],{"class":152}," f:\n",[142,146829,146830,146833,146835],{"class":144,"line":64},[142,146831,146832],{"class":152},"    content ",[142,146834,198],{"class":148},[142,146836,146837],{"class":152}," f.read()\n",[84,146839,146841],{"id":146840},"_111-本章练习","1.11 本章练习",[96,146843,146844,146847,146853],{},[99,146845,146846],{},"安装 Python，并在终端输出版本号。",[99,146848,146849,146850,146852],{},"新建 ",[139,146851,146407],{},"，输出自己的姓名、年龄、学习目标。",[99,146854,104375,146855,146857],{},[139,146856,146481],{}," 输出下面格式：",[133,146859,146862],{"className":146860,"code":146861,"language":5216,"meta":31},[5214],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[139,146863,146861],{"__ignoreMap":31},[96,146865,146866],{"start":1223},[99,146867,104375,146868,146870],{},[139,146869,146607],{}," 输出日期：",[133,146872,146875],{"className":146873,"code":146874,"language":5216,"meta":31},[5214],"2024-10-10\n",[139,146876,146874],{"__ignoreMap":31},[96,146878,146879],{"start":1229},[99,146880,104375,146881,146883,146884,146886],{},[139,146882,45830],{}," 让两次 ",[139,146885,146481],{}," 输出在同一行。",[5155,146888,146889],{},"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":31,"searchDepth":64,"depth":64,"links":146891},[146892,146893,146894,146899,146900,146901,146905,146906,146907,146908,146913],{"id":145774,"depth":64,"text":145775},{"id":145818,"depth":64,"text":145819},{"id":145919,"depth":64,"text":145920,"children":146895},[146896,146897,146898],{"id":145923,"depth":1208,"text":145924},{"id":145978,"depth":1208,"text":145979},{"id":146014,"depth":1208,"text":146015},{"id":146087,"depth":64,"text":146088},{"id":146232,"depth":64,"text":146233},{"id":146337,"depth":64,"text":146338,"children":146902},[146903,146904],{"id":146341,"depth":1208,"text":146342},{"id":146370,"depth":1208,"text":146371},{"id":146400,"depth":64,"text":146401},{"id":146475,"depth":64,"text":146476},{"id":146653,"depth":64,"text":146654},{"id":146735,"depth":64,"text":146736,"children":146909},[146910,146911,146912],{"id":146739,"depth":1208,"text":146740},{"id":146765,"depth":1208,"text":146766},{"id":146781,"depth":1208,"text":146782},{"id":146840,"depth":64,"text":146841},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145766,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146920,"title":146921,"body":146922,"description":66,"extension":67,"meta":149326,"navigation":69,"path":149327,"seo":149328,"stem":149329,"__hash__":149330},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146923,"toc":149311},[146924,146927,146931,146934,146937,146954,146957,146999,147002,147006,147009,147012,147049,147052,147086,147089,147181,147185,147199,147202,147229,147232,147236,147339,147346,147349,147366,147370,147377,147566,147569,147642,147646,147649,147733,147736,147768,147772,147976,147979,147983,147989,148091,148094,148350,148354,148357,148360,148374,148376,148562,148566,148928,148934,148938,148941,149065,149068,149247,149250,149254,149287,149291,149308],[10,146925,146921],{"id":146926},"_10-json与pyecharts折线图",[84,146928,146930],{"id":146929},"_101-数据可视化","10.1 数据可视化",[14,146932,146933],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146935,146936],{},"常见图表：",[96,146938,146939,146942,146945,146948,146951],{},[99,146940,146941],{},"折线图：看趋势。",[99,146943,146944],{},"柱状图：看分类对比。",[99,146946,146947],{},"饼图：看占比。",[99,146949,146950],{},"地图：看地域分布。",[99,146952,146953],{},"散点图：看两个变量之间的关系。",[14,146955,146956],{},"Python 可视化常用库：",[290,146958,146959,146967],{},[293,146960,146961],{},[296,146962,146963,146965],{},[299,146964,146170],{},[299,146966,23769],{},[337,146968,146969,146976,146984,146991],{},[296,146970,146971,146973],{},[342,146972,146202],{},[342,146974,146975],{},"基础、经典、可定制",[296,146977,146978,146981],{},[342,146979,146980],{},"seaborn",[342,146982,146983],{},"统计图表更美观",[296,146985,146986,146988],{},[342,146987,146210],{},[342,146989,146990],{},"生成交互式网页图表",[296,146992,146993,146996],{},[342,146994,146995],{},"plotly",[342,146997,146998],{},"交互图表能力强",[14,147000,147001],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[84,147003,147005],{"id":147004},"_102-json回顾","10.2 JSON回顾",[14,147007,147008],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147010,147011],{},"Python 字典：",[133,147013,147015],{"className":30407,"code":147014,"language":30409,"meta":31,"style":31},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[139,147016,147017,147025,147036,147045],{"__ignoreMap":31},[142,147018,147019,147021,147023],{"class":144,"line":145},[142,147020,101667],{"class":152},[142,147022,198],{"class":148},[142,147024,15601],{"class":152},[142,147026,147027,147030,147032,147034],{"class":144,"line":64},[142,147028,147029],{"class":257},"    \"name\"",[142,147031,51466],{"class":152},[142,147033,69298],{"class":257},[142,147035,31495],{"class":152},[142,147037,147038,147041,147043],{"class":144,"line":1208},[142,147039,147040],{"class":257},"    \"value\"",[142,147042,51466],{"class":152},[142,147044,97467],{"class":201},[142,147046,147047],{"class":144,"line":1223},[142,147048,1593],{"class":152},[14,147050,147051],{},"JSON 字符串：",[133,147053,147056],{"className":147054,"code":147055,"language":145801,"meta":31,"style":31},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[139,147057,147058,147062,147073,147082],{"__ignoreMap":31},[142,147059,147060],{"class":144,"line":145},[142,147061,1574],{"class":152},[142,147063,147064,147067,147069,147071],{"class":144,"line":64},[142,147065,147066],{"class":201},"  \"name\"",[142,147068,51466],{"class":152},[142,147070,69298],{"class":257},[142,147072,31495],{"class":152},[142,147074,147075,147078,147080],{"class":144,"line":1208},[142,147076,147077],{"class":201},"  \"value\"",[142,147079,51466],{"class":152},[142,147081,97467],{"class":201},[142,147083,147084],{"class":144,"line":1223},[142,147085,1593],{"class":152},[14,147087,147088],{},"Python 与 JSON 的转换：",[133,147090,147092],{"className":30407,"code":147091,"language":30409,"meta":31,"style":31},"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",[139,147093,147094,147101,147105,147130,147134,147153,147160,147164,147174],{"__ignoreMap":31},[142,147095,147096,147098],{"class":144,"line":145},[142,147097,30421],{"class":148},[142,147099,147100],{"class":152}," json\n",[142,147102,147103],{"class":144,"line":64},[142,147104,2428],{"emptyLinePlaceholder":69},[142,147106,147107,147109,147111,147113,147115,147117,147119,147121,147124,147126,147128],{"class":144,"line":1208},[142,147108,101667],{"class":152},[142,147110,198],{"class":148},[142,147112,4476],{"class":152},[142,147114,62708],{"class":257},[142,147116,51466],{"class":152},[142,147118,69298],{"class":257},[142,147120,12464],{"class":152},[142,147122,147123],{"class":257},"\"value\"",[142,147125,51466],{"class":152},[142,147127,464],{"class":201},[142,147129,1593],{"class":152},[142,147131,147132],{"class":144,"line":1223},[142,147133,2428],{"emptyLinePlaceholder":69},[142,147135,147136,147139,147141,147144,147147,147149,147151],{"class":144,"line":1229},[142,147137,147138],{"class":152},"json_text ",[142,147140,198],{"class":148},[142,147142,147143],{"class":152}," json.dumps(data, ",[142,147145,147146],{"class":5245},"ensure_ascii",[142,147148,198],{"class":148},[142,147150,34016],{"class":201},[142,147152,159],{"class":152},[142,147154,147155,147157],{"class":144,"line":1243},[142,147156,30444],{"class":201},[142,147158,147159],{"class":152},"(json_text)\n",[142,147161,147162],{"class":144,"line":1249},[142,147163,2428],{"emptyLinePlaceholder":69},[142,147165,147166,147169,147171],{"class":144,"line":1340},[142,147167,147168],{"class":152},"new_data ",[142,147170,198],{"class":148},[142,147172,147173],{"class":152}," json.loads(json_text)\n",[142,147175,147176,147178],{"class":144,"line":1346},[142,147177,30444],{"class":201},[142,147179,147180],{"class":152},"(new_data)\n",[84,147182,147184],{"id":147183},"_103-安装pyecharts","10.3 安装pyecharts",[133,147186,147188],{"className":23851,"code":147187,"language":23853,"meta":31,"style":31},"pip install pyecharts\n",[139,147189,147190],{"__ignoreMap":31},[142,147191,147192,147194,147196],{"class":144,"line":145},[142,147193,23860],{"class":1991},[142,147195,23863],{"class":257},[142,147197,147198],{"class":257}," pyecharts\n",[14,147200,147201],{},"验证：",[133,147203,147205],{"className":30407,"code":147204,"language":30409,"meta":31,"style":31},"import pyecharts\n\nprint(pyecharts.__version__)\n",[139,147206,147207,147213,147217],{"__ignoreMap":31},[142,147208,147209,147211],{"class":144,"line":145},[142,147210,30421],{"class":148},[142,147212,147198],{"class":152},[142,147214,147215],{"class":144,"line":64},[142,147216,2428],{"emptyLinePlaceholder":69},[142,147218,147219,147221,147224,147227],{"class":144,"line":1208},[142,147220,30444],{"class":201},[142,147222,147223],{"class":152},"(pyecharts.",[142,147225,147226],{"class":201},"__version__",[142,147228,159],{"class":152},[14,147230,147231],{},"如果使用虚拟环境，要先激活环境再安装。",[84,147233,147235],{"id":147234},"_104-第一个折线图","10.4 第一个折线图",[133,147237,147239],{"className":30407,"code":147238,"language":30409,"meta":31,"style":31},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[139,147240,147241,147253,147257,147267,147297,147329],{"__ignoreMap":31},[142,147242,147243,147245,147248,147250],{"class":144,"line":145},[142,147244,30766],{"class":148},[142,147246,147247],{"class":152}," pyecharts.charts ",[142,147249,30421],{"class":148},[142,147251,147252],{"class":152}," Line\n",[142,147254,147255],{"class":144,"line":64},[142,147256,2428],{"emptyLinePlaceholder":69},[142,147258,147259,147262,147264],{"class":144,"line":1208},[142,147260,147261],{"class":152},"line ",[142,147263,198],{"class":148},[142,147265,147266],{"class":152}," Line()\n",[142,147268,147269,147272,147275,147277,147280,147282,147285,147287,147290,147292,147295],{"class":144,"line":1223},[142,147270,147271],{"class":152},"line.add_xaxis([",[142,147273,147274],{"class":257},"\"周一\"",[142,147276,12464],{"class":152},[142,147278,147279],{"class":257},"\"周二\"",[142,147281,12464],{"class":152},[142,147283,147284],{"class":257},"\"周三\"",[142,147286,12464],{"class":152},[142,147288,147289],{"class":257},"\"周四\"",[142,147291,12464],{"class":152},[142,147293,147294],{"class":257},"\"周五\"",[142,147296,4685],{"class":152},[142,147298,147299,147302,147305,147307,147309,147311,147313,147315,147317,147319,147322,147324,147327],{"class":144,"line":1229},[142,147300,147301],{"class":152},"line.add_yaxis(",[142,147303,147304],{"class":257},"\"销售额\"",[142,147306,77547],{"class":152},[142,147308,464],{"class":201},[142,147310,12464],{"class":152},[142,147312,970],{"class":201},[142,147314,12464],{"class":152},[142,147316,1015],{"class":201},[142,147318,12464],{"class":152},[142,147320,147321],{"class":201},"150",[142,147323,12464],{"class":152},[142,147325,147326],{"class":201},"180",[142,147328,4685],{"class":152},[142,147330,147331,147334,147337],{"class":144,"line":1243},[142,147332,147333],{"class":152},"line.render(",[142,147335,147336],{"class":257},"\"line.html\"",[142,147338,159],{"class":152},[14,147340,147341,147342,147345],{},"运行后会生成 ",[139,147343,147344],{},"line.html","，用浏览器打开即可看到图表。",[14,147347,147348],{},"核心步骤：",[96,147350,147351,147354,147357,147360,147363],{},[99,147352,147353],{},"导入图表类。",[99,147355,147356],{},"创建图表对象。",[99,147358,147359],{},"添加 x 轴数据。",[99,147361,147362],{},"添加 y 轴数据。",[99,147364,147365],{},"渲染为 HTML。",[84,147367,147369],{"id":147368},"_105-全局配置","10.5 全局配置",[14,147371,147372,147373,147376],{},"常用配置在 ",[139,147374,147375],{},"pyecharts.options"," 中。",[133,147378,147380],{"className":30407,"code":147379,"language":30409,"meta":31,"style":31},"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",[139,147381,147382,147399,147409,147413,147421,147445,147473,147478,147497,147516,147534,147554,147558],{"__ignoreMap":31},[142,147383,147384,147386,147389,147391,147394,147396],{"class":144,"line":145},[142,147385,30766],{"class":148},[142,147387,147388],{"class":152}," pyecharts ",[142,147390,30421],{"class":148},[142,147392,147393],{"class":152}," options ",[142,147395,31412],{"class":148},[142,147397,147398],{"class":152}," opts\n",[142,147400,147401,147403,147405,147407],{"class":144,"line":64},[142,147402,30766],{"class":148},[142,147404,147247],{"class":152},[142,147406,30421],{"class":148},[142,147408,147252],{"class":152},[142,147410,147411],{"class":144,"line":1208},[142,147412,2428],{"emptyLinePlaceholder":69},[142,147414,147415,147417,147419],{"class":144,"line":1223},[142,147416,147261],{"class":152},[142,147418,198],{"class":148},[142,147420,147266],{"class":152},[142,147422,147423,147425,147427,147429,147431,147433,147435,147437,147439,147441,147443],{"class":144,"line":1229},[142,147424,147271],{"class":152},[142,147426,147274],{"class":257},[142,147428,12464],{"class":152},[142,147430,147279],{"class":257},[142,147432,12464],{"class":152},[142,147434,147284],{"class":257},[142,147436,12464],{"class":152},[142,147438,147289],{"class":257},[142,147440,12464],{"class":152},[142,147442,147294],{"class":257},[142,147444,4685],{"class":152},[142,147446,147447,147449,147451,147453,147455,147457,147459,147461,147463,147465,147467,147469,147471],{"class":144,"line":1243},[142,147448,147301],{"class":152},[142,147450,147304],{"class":257},[142,147452,77547],{"class":152},[142,147454,464],{"class":201},[142,147456,12464],{"class":152},[142,147458,970],{"class":201},[142,147460,12464],{"class":152},[142,147462,1015],{"class":201},[142,147464,12464],{"class":152},[142,147466,147321],{"class":201},[142,147468,12464],{"class":152},[142,147470,147326],{"class":201},[142,147472,4685],{"class":152},[142,147474,147475],{"class":144,"line":1249},[142,147476,147477],{"class":152},"line.set_global_opts(\n",[142,147479,147480,147483,147485,147488,147490,147492,147495],{"class":144,"line":1340},[142,147481,147482],{"class":5245},"    title_opts",[142,147484,198],{"class":148},[142,147486,147487],{"class":152},"opts.TitleOpts(",[142,147489,51436],{"class":5245},[142,147491,198],{"class":148},[142,147493,147494],{"class":257},"\"一周销售额\"",[142,147496,38076],{"class":152},[142,147498,147499,147502,147504,147507,147509,147511,147514],{"class":144,"line":1346},[142,147500,147501],{"class":5245},"    xaxis_opts",[142,147503,198],{"class":148},[142,147505,147506],{"class":152},"opts.AxisOpts(",[142,147508,79839],{"class":5245},[142,147510,198],{"class":148},[142,147512,147513],{"class":257},"\"日期\"",[142,147515,38076],{"class":152},[142,147517,147518,147521,147523,147525,147527,147529,147532],{"class":144,"line":1358},[142,147519,147520],{"class":5245},"    yaxis_opts",[142,147522,198],{"class":148},[142,147524,147506],{"class":152},[142,147526,79839],{"class":5245},[142,147528,198],{"class":148},[142,147530,147531],{"class":257},"\"金额\"",[142,147533,38076],{"class":152},[142,147535,147536,147539,147541,147544,147547,147549,147552],{"class":144,"line":1640},[142,147537,147538],{"class":5245},"    tooltip_opts",[142,147540,198],{"class":148},[142,147542,147543],{"class":152},"opts.TooltipOpts(",[142,147545,147546],{"class":5245},"trigger",[142,147548,198],{"class":148},[142,147550,147551],{"class":257},"\"axis\"",[142,147553,38076],{"class":152},[142,147555,147556],{"class":144,"line":1645},[142,147557,159],{"class":152},[142,147559,147560,147562,147564],{"class":144,"line":1651},[142,147561,147333],{"class":152},[142,147563,147336],{"class":257},[142,147565,159],{"class":152},[14,147567,147568],{},"常见全局配置：",[290,147570,147571,147580],{},[293,147572,147573],{},[296,147574,147575,147578],{},[299,147576,147577],{},"配置",[299,147579,102705],{},[337,147581,147582,147592,147602,147612,147622,147632],{},[296,147583,147584,147589],{},[342,147585,147586],{},[139,147587,147588],{},"TitleOpts",[342,147590,147591],{},"标题",[296,147593,147594,147599],{},[342,147595,147596],{},[139,147597,147598],{},"LegendOpts",[342,147600,147601],{},"图例",[296,147603,147604,147609],{},[342,147605,147606],{},[139,147607,147608],{},"TooltipOpts",[342,147610,147611],{},"提示框",[296,147613,147614,147619],{},[342,147615,147616],{},[139,147617,147618],{},"AxisOpts",[342,147620,147621],{},"坐标轴",[296,147623,147624,147629],{},[342,147625,147626],{},[139,147627,147628],{},"VisualMapOpts",[342,147630,147631],{},"视觉映射",[296,147633,147634,147639],{},[342,147635,147636],{},[139,147637,147638],{},"DataZoomOpts",[342,147640,147641],{},"区域缩放",[84,147643,147645],{"id":147644},"_106-系列配置","10.6 系列配置",[14,147647,147648],{},"系列配置作用于某一组数据。",[133,147650,147652],{"className":30407,"code":147651,"language":30409,"meta":31,"style":31},"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",[139,147653,147654,147659,147670,147699,147710,147729],{"__ignoreMap":31},[142,147655,147656],{"class":144,"line":145},[142,147657,147658],{"class":152},"line.add_yaxis(\n",[142,147660,147661,147664,147666,147668],{"class":144,"line":64},[142,147662,147663],{"class":5245},"    series_name",[142,147665,198],{"class":148},[142,147667,147304],{"class":257},[142,147669,31495],{"class":152},[142,147671,147672,147675,147677,147679,147681,147683,147685,147687,147689,147691,147693,147695,147697],{"class":144,"line":1208},[142,147673,147674],{"class":5245},"    y_axis",[142,147676,198],{"class":148},[142,147678,1043],{"class":152},[142,147680,464],{"class":201},[142,147682,12464],{"class":152},[142,147684,970],{"class":201},[142,147686,12464],{"class":152},[142,147688,1015],{"class":201},[142,147690,12464],{"class":152},[142,147692,147321],{"class":201},[142,147694,12464],{"class":152},[142,147696,147326],{"class":201},[142,147698,87865],{"class":152},[142,147700,147701,147704,147706,147708],{"class":144,"line":1223},[142,147702,147703],{"class":5245},"    is_smooth",[142,147705,198],{"class":148},[142,147707,31505],{"class":201},[142,147709,31495],{"class":152},[142,147711,147712,147715,147717,147720,147723,147725,147727],{"class":144,"line":1229},[142,147713,147714],{"class":5245},"    label_opts",[142,147716,198],{"class":148},[142,147718,147719],{"class":152},"opts.LabelOpts(",[142,147721,147722],{"class":5245},"is_show",[142,147724,198],{"class":148},[142,147726,31505],{"class":201},[142,147728,38076],{"class":152},[142,147730,147731],{"class":144,"line":1243},[142,147732,159],{"class":152},[14,147734,147735],{},"常用参数：",[96,147737,147738,147744,147750,147756,147762],{},[99,147739,147740,147743],{},[139,147741,147742],{},"series_name","：系列名称。",[99,147745,147746,147749],{},[139,147747,147748],{},"y_axis","：y 轴数据。",[99,147751,147752,147755],{},[139,147753,147754],{},"is_smooth","：是否平滑曲线。",[99,147757,147758,147761],{},[139,147759,147760],{},"label_opts","：标签配置。",[99,147763,147764,147767],{},[139,147765,147766],{},"symbol_size","：标记点大小。",[84,147769,147771],{"id":147770},"_107-多条折线","10.7 多条折线",[133,147773,147775],{"className":30407,"code":147774,"language":30409,"meta":31,"style":31},"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",[139,147776,147777,147791,147801,147805,147834,147838,147846,147851,147889,147926,147930,147947,147963,147967],{"__ignoreMap":31},[142,147778,147779,147781,147783,147785,147787,147789],{"class":144,"line":145},[142,147780,30766],{"class":148},[142,147782,147388],{"class":152},[142,147784,30421],{"class":148},[142,147786,147393],{"class":152},[142,147788,31412],{"class":148},[142,147790,147398],{"class":152},[142,147792,147793,147795,147797,147799],{"class":144,"line":64},[142,147794,30766],{"class":148},[142,147796,147247],{"class":152},[142,147798,30421],{"class":148},[142,147800,147252],{"class":152},[142,147802,147803],{"class":144,"line":1208},[142,147804,2428],{"emptyLinePlaceholder":69},[142,147806,147807,147810,147812,147814,147816,147818,147820,147822,147824,147826,147828,147830,147832],{"class":144,"line":1223},[142,147808,147809],{"class":152},"dates ",[142,147811,198],{"class":148},[142,147813,52255],{"class":152},[142,147815,147274],{"class":257},[142,147817,12464],{"class":152},[142,147819,147279],{"class":257},[142,147821,12464],{"class":152},[142,147823,147284],{"class":257},[142,147825,12464],{"class":152},[142,147827,147289],{"class":257},[142,147829,12464],{"class":152},[142,147831,147294],{"class":257},[142,147833,33275],{"class":152},[142,147835,147836],{"class":144,"line":1229},[142,147837,2428],{"emptyLinePlaceholder":69},[142,147839,147840,147842,147844],{"class":144,"line":1243},[142,147841,147261],{"class":152},[142,147843,198],{"class":148},[142,147845,147266],{"class":152},[142,147847,147848],{"class":144,"line":1249},[142,147849,147850],{"class":152},"line.add_xaxis(dates)\n",[142,147852,147853,147855,147858,147860,147862,147864,147867,147869,147871,147873,147875,147877,147879,147881,147883,147885,147887],{"class":144,"line":1340},[142,147854,147301],{"class":152},[142,147856,147857],{"class":257},"\"线上销售\"",[142,147859,77547],{"class":152},[142,147861,464],{"class":201},[142,147863,12464],{"class":152},[142,147865,147866],{"class":201},"130",[142,147868,12464],{"class":152},[142,147870,970],{"class":201},[142,147872,12464],{"class":152},[142,147874,21077],{"class":201},[142,147876,12464],{"class":152},[142,147878,1750],{"class":201},[142,147880,112211],{"class":152},[142,147882,147754],{"class":5245},[142,147884,198],{"class":148},[142,147886,31505],{"class":201},[142,147888,159],{"class":152},[142,147890,147891,147893,147896,147898,147900,147902,147904,147906,147908,147910,147912,147914,147916,147918,147920,147922,147924],{"class":144,"line":1346},[142,147892,147301],{"class":152},[142,147894,147895],{"class":257},"\"线下销售\"",[142,147897,77547],{"class":152},[142,147899,765],{"class":201},[142,147901,12464],{"class":152},[142,147903,1015],{"class":201},[142,147905,12464],{"class":152},[142,147907,464],{"class":201},[142,147909,12464],{"class":152},[142,147911,970],{"class":201},[142,147913,12464],{"class":152},[142,147915,147321],{"class":201},[142,147917,112211],{"class":152},[142,147919,147754],{"class":5245},[142,147921,198],{"class":148},[142,147923,31505],{"class":201},[142,147925,159],{"class":152},[142,147927,147928],{"class":144,"line":1358},[142,147929,147477],{"class":152},[142,147931,147932,147934,147936,147938,147940,147942,147945],{"class":144,"line":1640},[142,147933,147482],{"class":5245},[142,147935,198],{"class":148},[142,147937,147487],{"class":152},[142,147939,51436],{"class":5245},[142,147941,198],{"class":148},[142,147943,147944],{"class":257},"\"线上线下销售趋势\"",[142,147946,38076],{"class":152},[142,147948,147949,147951,147953,147955,147957,147959,147961],{"class":144,"line":1645},[142,147950,147538],{"class":5245},[142,147952,198],{"class":148},[142,147954,147543],{"class":152},[142,147956,147546],{"class":5245},[142,147958,198],{"class":148},[142,147960,147551],{"class":257},[142,147962,38076],{"class":152},[142,147964,147965],{"class":144,"line":1651},[142,147966,159],{"class":152},[142,147968,147969,147971,147974],{"class":144,"line":1656},[142,147970,147333],{"class":152},[142,147972,147973],{"class":257},"\"sales.html\"",[142,147975,159],{"class":152},[14,147977,147978],{},"多条折线适合比较不同指标或不同地区。",[84,147980,147982],{"id":147981},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,147984,147985,147986,24647],{},"假设 ",[139,147987,147988],{},"sales.json",[133,147990,147992],{"className":147054,"code":147991,"language":145801,"meta":31,"style":31},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[139,147993,147994,147999,148031,148059,148087],{"__ignoreMap":31},[142,147995,147996],{"class":144,"line":145},[142,147997,147998],{"class":152},"[\n",[142,148000,148001,148004,148007,148009,148011,148013,148016,148018,148020,148022,148025,148027,148029],{"class":144,"line":64},[142,148002,148003],{"class":152},"  {",[142,148005,148006],{"class":201},"\"date\"",[142,148008,51466],{"class":152},[142,148010,147274],{"class":257},[142,148012,12464],{"class":152},[142,148014,148015],{"class":201},"\"online\"",[142,148017,51466],{"class":152},[142,148019,464],{"class":201},[142,148021,12464],{"class":152},[142,148023,148024],{"class":201},"\"offline\"",[142,148026,51466],{"class":152},[142,148028,765],{"class":201},[142,148030,4958],{"class":152},[142,148032,148033,148035,148037,148039,148041,148043,148045,148047,148049,148051,148053,148055,148057],{"class":144,"line":1208},[142,148034,148003],{"class":152},[142,148036,148006],{"class":201},[142,148038,51466],{"class":152},[142,148040,147279],{"class":257},[142,148042,12464],{"class":152},[142,148044,148015],{"class":201},[142,148046,51466],{"class":152},[142,148048,147866],{"class":201},[142,148050,12464],{"class":152},[142,148052,148024],{"class":201},[142,148054,51466],{"class":152},[142,148056,1015],{"class":201},[142,148058,4958],{"class":152},[142,148060,148061,148063,148065,148067,148069,148071,148073,148075,148077,148079,148081,148083,148085],{"class":144,"line":1223},[142,148062,148003],{"class":152},[142,148064,148006],{"class":201},[142,148066,51466],{"class":152},[142,148068,147284],{"class":257},[142,148070,12464],{"class":152},[142,148072,148015],{"class":201},[142,148074,51466],{"class":152},[142,148076,970],{"class":201},[142,148078,12464],{"class":152},[142,148080,148024],{"class":201},[142,148082,51466],{"class":152},[142,148084,464],{"class":201},[142,148086,1593],{"class":152},[142,148088,148089],{"class":144,"line":1229},[142,148090,33275],{"class":152},[14,148092,148093],{},"读取并绘图：",[133,148095,148097],{"className":30407,"code":148096,"language":30409,"meta":31,"style":31},"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",[139,148098,148099,148105,148119,148129,148133,148165,148178,148182,148190,148199,148208,148212,148224,148233,148242,148251,148255,148263,148267,148284,148301,148305,148322,148338,148342],{"__ignoreMap":31},[142,148100,148101,148103],{"class":144,"line":145},[142,148102,30421],{"class":148},[142,148104,147100],{"class":152},[142,148106,148107,148109,148111,148113,148115,148117],{"class":144,"line":64},[142,148108,30766],{"class":148},[142,148110,147388],{"class":152},[142,148112,30421],{"class":148},[142,148114,147393],{"class":152},[142,148116,31412],{"class":148},[142,148118,147398],{"class":152},[142,148120,148121,148123,148125,148127],{"class":144,"line":1208},[142,148122,30766],{"class":148},[142,148124,147247],{"class":152},[142,148126,30421],{"class":148},[142,148128,147252],{"class":152},[142,148130,148131],{"class":144,"line":1223},[142,148132,2428],{"emptyLinePlaceholder":69},[142,148134,148135,148137,148139,148141,148144,148146,148148,148150,148152,148154,148156,148158,148160,148163],{"class":144,"line":1229},[142,148136,107842],{"class":148},[142,148138,146800],{"class":201},[142,148140,153],{"class":152},[142,148142,148143],{"class":257},"\"sales.json\"",[142,148145,12464],{"class":152},[142,148147,146810],{"class":257},[142,148149,12464],{"class":152},[142,148151,146815],{"class":5245},[142,148153,198],{"class":148},[142,148155,146820],{"class":257},[142,148157,13743],{"class":152},[142,148159,31412],{"class":148},[142,148161,148162],{"class":5245}," file",[142,148164,3767],{"class":152},[142,148166,148167,148169,148171,148174,148176],{"class":144,"line":1243},[142,148168,101430],{"class":152},[142,148170,198],{"class":148},[142,148172,148173],{"class":152}," json.load(",[142,148175,45383],{"class":5245},[142,148177,159],{"class":152},[142,148179,148180],{"class":144,"line":1249},[142,148181,2428],{"emptyLinePlaceholder":69},[142,148183,148184,148186,148188],{"class":144,"line":1340},[142,148185,147809],{"class":152},[142,148187,198],{"class":148},[142,148189,51867],{"class":152},[142,148191,148192,148195,148197],{"class":144,"line":1346},[142,148193,148194],{"class":152},"online_sales ",[142,148196,198],{"class":148},[142,148198,51867],{"class":152},[142,148200,148201,148204,148206],{"class":144,"line":1358},[142,148202,148203],{"class":152},"offline_sales ",[142,148205,198],{"class":148},[142,148207,51867],{"class":152},[142,148209,148210],{"class":144,"line":1640},[142,148211,2428],{"emptyLinePlaceholder":69},[142,148213,148214,148216,148219,148221],{"class":144,"line":1645},[142,148215,3053],{"class":148},[142,148217,148218],{"class":152}," item ",[142,148220,26072],{"class":148},[142,148222,148223],{"class":152}," data:\n",[142,148225,148226,148229,148231],{"class":144,"line":1651},[142,148227,148228],{"class":152},"    dates.append(item[",[142,148230,148006],{"class":257},[142,148232,4685],{"class":152},[142,148234,148235,148238,148240],{"class":144,"line":1656},[142,148236,148237],{"class":152},"    online_sales.append(item[",[142,148239,148015],{"class":257},[142,148241,4685],{"class":152},[142,148243,148244,148247,148249],{"class":144,"line":1670},[142,148245,148246],{"class":152},"    offline_sales.append(item[",[142,148248,148024],{"class":257},[142,148250,4685],{"class":152},[142,148252,148253],{"class":144,"line":1675},[142,148254,2428],{"emptyLinePlaceholder":69},[142,148256,148257,148259,148261],{"class":144,"line":1681},[142,148258,147261],{"class":152},[142,148260,198],{"class":148},[142,148262,147266],{"class":152},[142,148264,148265],{"class":144,"line":1702},[142,148266,147850],{"class":152},[142,148268,148269,148271,148273,148276,148278,148280,148282],{"class":144,"line":1707},[142,148270,147301],{"class":152},[142,148272,147857],{"class":257},[142,148274,148275],{"class":152},", online_sales, ",[142,148277,147754],{"class":5245},[142,148279,198],{"class":148},[142,148281,31505],{"class":201},[142,148283,159],{"class":152},[142,148285,148286,148288,148290,148293,148295,148297,148299],{"class":144,"line":1721},[142,148287,147301],{"class":152},[142,148289,147895],{"class":257},[142,148291,148292],{"class":152},", offline_sales, ",[142,148294,147754],{"class":5245},[142,148296,198],{"class":148},[142,148298,31505],{"class":201},[142,148300,159],{"class":152},[142,148302,148303],{"class":144,"line":1726},[142,148304,147477],{"class":152},[142,148306,148307,148309,148311,148313,148315,148317,148320],{"class":144,"line":1755},[142,148308,147482],{"class":5245},[142,148310,198],{"class":148},[142,148312,147487],{"class":152},[142,148314,51436],{"class":5245},[142,148316,198],{"class":148},[142,148318,148319],{"class":257},"\"销售趋势\"",[142,148321,38076],{"class":152},[142,148323,148324,148326,148328,148330,148332,148334,148336],{"class":144,"line":1760},[142,148325,147538],{"class":5245},[142,148327,198],{"class":148},[142,148329,147543],{"class":152},[142,148331,147546],{"class":5245},[142,148333,198],{"class":148},[142,148335,147551],{"class":257},[142,148337,38076],{"class":152},[142,148339,148340],{"class":144,"line":1777},[142,148341,159],{"class":152},[142,148343,148344,148346,148348],{"class":144,"line":1782},[142,148345,147333],{"class":152},[142,148347,147973],{"class":257},[142,148349,159],{"class":152},[84,148351,148353],{"id":148352},"_109-数据清洗","10.9 数据清洗",[14,148355,148356],{},"真实数据经常不整齐，需要清洗。",[14,148358,148359],{},"常见问题：",[96,148361,148362,148365,148368,148371],{},[99,148363,148364],{},"数字是字符串。",[99,148366,148367],{},"字段缺失。",[99,148369,148370],{},"空值。",[99,148372,148373],{},"日期格式不统一。",[14,148375,15164],{},[133,148377,148379],{"className":30407,"code":148378,"language":30409,"meta":31,"style":31},"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",[139,148380,148381,148390,148413,148433,148454,148458,148462,148470,148479,148483,148494,148508,148517,148522,148526,148534,148544,148548,148555],{"__ignoreMap":31},[142,148382,148383,148386,148388],{"class":144,"line":145},[142,148384,148385],{"class":152},"raw_data ",[142,148387,198],{"class":148},[142,148389,55476],{"class":152},[142,148391,148392,148395,148397,148399,148401,148403,148406,148408,148411],{"class":144,"line":64},[142,148393,148394],{"class":152},"    {",[142,148396,148006],{"class":257},[142,148398,51466],{"class":152},[142,148400,147274],{"class":257},[142,148402,12464],{"class":152},[142,148404,148405],{"class":257},"\"sales\"",[142,148407,51466],{"class":152},[142,148409,148410],{"class":257},"\"100\"",[142,148412,4958],{"class":152},[142,148414,148415,148417,148419,148421,148423,148425,148427,148429,148431],{"class":144,"line":1208},[142,148416,148394],{"class":152},[142,148418,148006],{"class":257},[142,148420,51466],{"class":152},[142,148422,147279],{"class":257},[142,148424,12464],{"class":152},[142,148426,148405],{"class":257},[142,148428,51466],{"class":152},[142,148430,7681],{"class":257},[142,148432,4958],{"class":152},[142,148434,148435,148437,148439,148441,148443,148445,148447,148449,148452],{"class":144,"line":1223},[142,148436,148394],{"class":152},[142,148438,148006],{"class":257},[142,148440,51466],{"class":152},[142,148442,147284],{"class":257},[142,148444,12464],{"class":152},[142,148446,148405],{"class":257},[142,148448,51466],{"class":152},[142,148450,148451],{"class":257},"\"120\"",[142,148453,4958],{"class":152},[142,148455,148456],{"class":144,"line":1229},[142,148457,33275],{"class":152},[142,148459,148460],{"class":144,"line":1243},[142,148461,2428],{"emptyLinePlaceholder":69},[142,148463,148464,148466,148468],{"class":144,"line":1249},[142,148465,147809],{"class":152},[142,148467,198],{"class":148},[142,148469,51867],{"class":152},[142,148471,148472,148475,148477],{"class":144,"line":1340},[142,148473,148474],{"class":152},"sales ",[142,148476,198],{"class":148},[142,148478,51867],{"class":152},[142,148480,148481],{"class":144,"line":1346},[142,148482,2428],{"emptyLinePlaceholder":69},[142,148484,148485,148487,148489,148491],{"class":144,"line":1358},[142,148486,3053],{"class":148},[142,148488,148218],{"class":152},[142,148490,26072],{"class":148},[142,148492,148493],{"class":152}," raw_data:\n",[142,148495,148496,148499,148501,148504,148506],{"class":144,"line":1640},[142,148497,148498],{"class":152},"    value ",[142,148500,198],{"class":148},[142,148502,148503],{"class":152}," item.get(",[142,148505,148405],{"class":257},[142,148507,159],{"class":152},[142,148509,148510,148512,148514],{"class":144,"line":1645},[142,148511,3129],{"class":148},[142,148513,38959],{"class":148},[142,148515,148516],{"class":152}," value:\n",[142,148518,148519],{"class":144,"line":1651},[142,148520,148521],{"class":148},"        continue\n",[142,148523,148524],{"class":144,"line":1656},[142,148525,2428],{"emptyLinePlaceholder":69},[142,148527,148528,148530,148532],{"class":144,"line":1670},[142,148529,148228],{"class":152},[142,148531,148006],{"class":257},[142,148533,4685],{"class":152},[142,148535,148536,148539,148541],{"class":144,"line":1675},[142,148537,148538],{"class":152},"    sales.append(",[142,148540,156],{"class":201},[142,148542,148543],{"class":152},"(value))\n",[142,148545,148546],{"class":144,"line":1681},[142,148547,2428],{"emptyLinePlaceholder":69},[142,148549,148550,148552],{"class":144,"line":1702},[142,148551,30444],{"class":201},[142,148553,148554],{"class":152},"(dates)\n",[142,148556,148557,148559],{"class":144,"line":1707},[142,148558,30444],{"class":201},[142,148560,148561],{"class":152},"(sales)\n",[84,148563,148565],{"id":148564},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[133,148567,148569],{"className":30407,"code":148568,"language":30409,"meta":31,"style":31},"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",[139,148570,148571,148585,148595,148599,148607,148628,148650,148672,148694,148716,148720,148724,148746,148767,148771,148779,148783,148787,148797,148806,148816,148832,148836,148840,148857,148873,148889,148905,148915,148919],{"__ignoreMap":31},[142,148572,148573,148575,148577,148579,148581,148583],{"class":144,"line":145},[142,148574,30766],{"class":148},[142,148576,147388],{"class":152},[142,148578,30421],{"class":148},[142,148580,147393],{"class":152},[142,148582,31412],{"class":148},[142,148584,147398],{"class":152},[142,148586,148587,148589,148591,148593],{"class":144,"line":64},[142,148588,30766],{"class":148},[142,148590,147247],{"class":152},[142,148592,30421],{"class":148},[142,148594,147252],{"class":152},[142,148596,148597],{"class":144,"line":1208},[142,148598,2428],{"emptyLinePlaceholder":69},[142,148600,148601,148603,148605],{"class":144,"line":1223},[142,148602,148474],{"class":152},[142,148604,198],{"class":148},[142,148606,55476],{"class":152},[142,148608,148609,148611,148613,148615,148618,148620,148622,148624,148626],{"class":144,"line":1229},[142,148610,148394],{"class":152},[142,148612,148006],{"class":257},[142,148614,51466],{"class":152},[142,148616,148617],{"class":257},"\"2024-10-01\"",[142,148619,12464],{"class":152},[142,148621,84113],{"class":257},[142,148623,51466],{"class":152},[142,148625,92052],{"class":201},[142,148627,4958],{"class":152},[142,148629,148630,148632,148634,148636,148639,148641,148643,148645,148648],{"class":144,"line":1243},[142,148631,148394],{"class":152},[142,148633,148006],{"class":257},[142,148635,51466],{"class":152},[142,148637,148638],{"class":257},"\"2024-10-02\"",[142,148640,12464],{"class":152},[142,148642,84113],{"class":257},[142,148644,51466],{"class":152},[142,148646,148647],{"class":201},"1800",[142,148649,4958],{"class":152},[142,148651,148652,148654,148656,148658,148661,148663,148665,148667,148670],{"class":144,"line":1249},[142,148653,148394],{"class":152},[142,148655,148006],{"class":257},[142,148657,51466],{"class":152},[142,148659,148660],{"class":257},"\"2024-10-03\"",[142,148662,12464],{"class":152},[142,148664,84113],{"class":257},[142,148666,51466],{"class":152},[142,148668,148669],{"class":201},"1500",[142,148671,4958],{"class":152},[142,148673,148674,148676,148678,148680,148683,148685,148687,148689,148692],{"class":144,"line":1340},[142,148675,148394],{"class":152},[142,148677,148006],{"class":257},[142,148679,51466],{"class":152},[142,148681,148682],{"class":257},"\"2024-10-04\"",[142,148684,12464],{"class":152},[142,148686,84113],{"class":257},[142,148688,51466],{"class":152},[142,148690,148691],{"class":201},"2100",[142,148693,4958],{"class":152},[142,148695,148696,148698,148700,148702,148705,148707,148709,148711,148714],{"class":144,"line":1346},[142,148697,148394],{"class":152},[142,148699,148006],{"class":257},[142,148701,51466],{"class":152},[142,148703,148704],{"class":257},"\"2024-10-05\"",[142,148706,12464],{"class":152},[142,148708,84113],{"class":257},[142,148710,51466],{"class":152},[142,148712,148713],{"class":201},"2600",[142,148715,4958],{"class":152},[142,148717,148718],{"class":144,"line":1358},[142,148719,33275],{"class":152},[142,148721,148722],{"class":144,"line":1640},[142,148723,2428],{"emptyLinePlaceholder":69},[142,148725,148726,148728,148730,148733,148735,148737,148739,148741,148743],{"class":144,"line":1645},[142,148727,147809],{"class":152},[142,148729,198],{"class":148},[142,148731,148732],{"class":152}," [item[",[142,148734,148006],{"class":257},[142,148736,4471],{"class":152},[142,148738,3053],{"class":148},[142,148740,148218],{"class":152},[142,148742,26072],{"class":148},[142,148744,148745],{"class":152}," sales]\n",[142,148747,148748,148751,148753,148755,148757,148759,148761,148763,148765],{"class":144,"line":1651},[142,148749,148750],{"class":152},"amounts ",[142,148752,198],{"class":148},[142,148754,148732],{"class":152},[142,148756,84113],{"class":257},[142,148758,4471],{"class":152},[142,148760,3053],{"class":148},[142,148762,148218],{"class":152},[142,148764,26072],{"class":148},[142,148766,148745],{"class":152},[142,148768,148769],{"class":144,"line":1656},[142,148770,2428],{"emptyLinePlaceholder":69},[142,148772,148773,148775,148777],{"class":144,"line":1670},[142,148774,147261],{"class":152},[142,148776,198],{"class":148},[142,148778,147266],{"class":152},[142,148780,148781],{"class":144,"line":1675},[142,148782,147850],{"class":152},[142,148784,148785],{"class":144,"line":1681},[142,148786,147658],{"class":152},[142,148788,148789,148791,148793,148795],{"class":144,"line":1702},[142,148790,147663],{"class":5245},[142,148792,198],{"class":148},[142,148794,147304],{"class":257},[142,148796,31495],{"class":152},[142,148798,148799,148801,148803],{"class":144,"line":1707},[142,148800,147674],{"class":5245},[142,148802,198],{"class":148},[142,148804,148805],{"class":152},"amounts,\n",[142,148807,148808,148810,148812,148814],{"class":144,"line":1721},[142,148809,147703],{"class":5245},[142,148811,198],{"class":148},[142,148813,31505],{"class":201},[142,148815,31495],{"class":152},[142,148817,148818,148820,148822,148824,148826,148828,148830],{"class":144,"line":1726},[142,148819,147714],{"class":5245},[142,148821,198],{"class":148},[142,148823,147719],{"class":152},[142,148825,147722],{"class":5245},[142,148827,198],{"class":148},[142,148829,31505],{"class":201},[142,148831,38076],{"class":152},[142,148833,148834],{"class":144,"line":1755},[142,148835,159],{"class":152},[142,148837,148838],{"class":144,"line":1760},[142,148839,147477],{"class":152},[142,148841,148842,148844,148846,148848,148850,148852,148855],{"class":144,"line":1777},[142,148843,147482],{"class":5245},[142,148845,198],{"class":148},[142,148847,147487],{"class":152},[142,148849,51436],{"class":5245},[142,148851,198],{"class":148},[142,148853,148854],{"class":257},"\"每日销售额\"",[142,148856,38076],{"class":152},[142,148858,148859,148861,148863,148865,148867,148869,148871],{"class":144,"line":1782},[142,148860,147501],{"class":5245},[142,148862,198],{"class":148},[142,148864,147506],{"class":152},[142,148866,79839],{"class":5245},[142,148868,198],{"class":148},[142,148870,147513],{"class":257},[142,148872,38076],{"class":152},[142,148874,148875,148877,148879,148881,148883,148885,148887],{"class":144,"line":1787},[142,148876,147520],{"class":5245},[142,148878,198],{"class":148},[142,148880,147506],{"class":152},[142,148882,79839],{"class":5245},[142,148884,198],{"class":148},[142,148886,147531],{"class":257},[142,148888,38076],{"class":152},[142,148890,148891,148893,148895,148897,148899,148901,148903],{"class":144,"line":1792},[142,148892,147538],{"class":5245},[142,148894,198],{"class":148},[142,148896,147543],{"class":152},[142,148898,147546],{"class":5245},[142,148900,198],{"class":148},[142,148902,147551],{"class":257},[142,148904,38076],{"class":152},[142,148906,148907,148910,148912],{"class":144,"line":1806},[142,148908,148909],{"class":5245},"    datazoom_opts",[142,148911,198],{"class":148},[142,148913,148914],{"class":152},"[opts.DataZoomOpts()],\n",[142,148916,148917],{"class":144,"line":1811},[142,148918,159],{"class":152},[142,148920,148921,148923,148926],{"class":144,"line":2605},[142,148922,147333],{"class":152},[142,148924,148925],{"class":257},"\"daily_sales.html\"",[142,148927,159],{"class":152},[14,148929,148930,148933],{},[139,148931,148932],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[84,148935,148937],{"id":148936},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148939,148940],{},"如果数据结构如下：",[133,148942,148944],{"className":30407,"code":148943,"language":30409,"meta":31,"style":31},"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",[139,148945,148946,148954,148962,148984,149005,149010,149017,149037,149057,149061],{"__ignoreMap":31},[142,148947,148948,148950,148952],{"class":144,"line":145},[142,148949,101667],{"class":152},[142,148951,198],{"class":148},[142,148953,15601],{"class":152},[142,148955,148956,148959],{"class":144,"line":64},[142,148957,148958],{"class":257},"    \"北京\"",[142,148960,148961],{"class":152},": [\n",[142,148963,148964,148966,148968,148970,148973,148975,148978,148980,148982],{"class":144,"line":1208},[142,148965,4945],{"class":152},[142,148967,148006],{"class":257},[142,148969,51466],{"class":152},[142,148971,148972],{"class":257},"\"2024-01-01\"",[142,148974,12464],{"class":152},[142,148976,148977],{"class":257},"\"confirm\"",[142,148979,51466],{"class":152},[142,148981,599],{"class":201},[142,148983,4958],{"class":152},[142,148985,148986,148988,148990,148992,148995,148997,148999,149001,149003],{"class":144,"line":1223},[142,148987,4945],{"class":152},[142,148989,148006],{"class":257},[142,148991,51466],{"class":152},[142,148993,148994],{"class":257},"\"2024-01-02\"",[142,148996,12464],{"class":152},[142,148998,148977],{"class":257},[142,149000,51466],{"class":152},[142,149002,651],{"class":201},[142,149004,4958],{"class":152},[142,149006,149007],{"class":144,"line":1229},[142,149008,149009],{"class":152},"    ],\n",[142,149011,149012,149015],{"class":144,"line":1243},[142,149013,149014],{"class":257},"    \"上海\"",[142,149016,148961],{"class":152},[142,149018,149019,149021,149023,149025,149027,149029,149031,149033,149035],{"class":144,"line":1249},[142,149020,4945],{"class":152},[142,149022,148006],{"class":257},[142,149024,51466],{"class":152},[142,149026,148972],{"class":257},[142,149028,12464],{"class":152},[142,149030,148977],{"class":257},[142,149032,51466],{"class":152},[142,149034,548],{"class":201},[142,149036,4958],{"class":152},[142,149038,149039,149041,149043,149045,149047,149049,149051,149053,149055],{"class":144,"line":1340},[142,149040,4945],{"class":152},[142,149042,148006],{"class":257},[142,149044,51466],{"class":152},[142,149046,148994],{"class":257},[142,149048,12464],{"class":152},[142,149050,148977],{"class":257},[142,149052,51466],{"class":152},[142,149054,676],{"class":201},[142,149056,4958],{"class":152},[142,149058,149059],{"class":144,"line":1346},[142,149060,149009],{"class":152},[142,149062,149063],{"class":144,"line":1358},[142,149064,1593],{"class":152},[14,149066,149067],{},"绘制多地区趋势：",[133,149069,149071],{"className":30407,"code":149070,"language":30409,"meta":31,"style":31},"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",[139,149072,149073,149087,149097,149101,149126,149130,149138,149142,149146,149158,149180,149193,149197,149201,149218,149234,149238],{"__ignoreMap":31},[142,149074,149075,149077,149079,149081,149083,149085],{"class":144,"line":145},[142,149076,30766],{"class":148},[142,149078,147388],{"class":152},[142,149080,30421],{"class":148},[142,149082,147393],{"class":152},[142,149084,31412],{"class":148},[142,149086,147398],{"class":152},[142,149088,149089,149091,149093,149095],{"class":144,"line":64},[142,149090,30766],{"class":148},[142,149092,147247],{"class":152},[142,149094,30421],{"class":148},[142,149096,147252],{"class":152},[142,149098,149099],{"class":144,"line":1208},[142,149100,2428],{"emptyLinePlaceholder":69},[142,149102,149103,149105,149107,149109,149111,149113,149115,149117,149119,149122,149124],{"class":144,"line":1223},[142,149104,147809],{"class":152},[142,149106,198],{"class":148},[142,149108,148732],{"class":152},[142,149110,148006],{"class":257},[142,149112,4471],{"class":152},[142,149114,3053],{"class":148},[142,149116,148218],{"class":152},[142,149118,26072],{"class":148},[142,149120,149121],{"class":152}," data[",[142,149123,69298],{"class":257},[142,149125,77556],{"class":152},[142,149127,149128],{"class":144,"line":1229},[142,149129,2428],{"emptyLinePlaceholder":69},[142,149131,149132,149134,149136],{"class":144,"line":1243},[142,149133,147261],{"class":152},[142,149135,198],{"class":148},[142,149137,147266],{"class":152},[142,149139,149140],{"class":144,"line":1249},[142,149141,147850],{"class":152},[142,149143,149144],{"class":144,"line":1340},[142,149145,2428],{"emptyLinePlaceholder":69},[142,149147,149148,149150,149153,149155],{"class":144,"line":1346},[142,149149,3053],{"class":148},[142,149151,149152],{"class":152}," city, records ",[142,149154,26072],{"class":148},[142,149156,149157],{"class":152}," data.items():\n",[142,149159,149160,149163,149165,149167,149169,149171,149173,149175,149177],{"class":144,"line":1358},[142,149161,149162],{"class":152},"    values ",[142,149164,198],{"class":148},[142,149166,148732],{"class":152},[142,149168,148977],{"class":257},[142,149170,4471],{"class":152},[142,149172,3053],{"class":148},[142,149174,148218],{"class":152},[142,149176,26072],{"class":148},[142,149178,149179],{"class":152}," records]\n",[142,149181,149182,149185,149187,149189,149191],{"class":144,"line":1640},[142,149183,149184],{"class":152},"    line.add_yaxis(city, values, ",[142,149186,147754],{"class":5245},[142,149188,198],{"class":148},[142,149190,31505],{"class":201},[142,149192,159],{"class":152},[142,149194,149195],{"class":144,"line":1645},[142,149196,2428],{"emptyLinePlaceholder":69},[142,149198,149199],{"class":144,"line":1651},[142,149200,147477],{"class":152},[142,149202,149203,149205,149207,149209,149211,149213,149216],{"class":144,"line":1656},[142,149204,147482],{"class":5245},[142,149206,198],{"class":148},[142,149208,147487],{"class":152},[142,149210,51436],{"class":5245},[142,149212,198],{"class":148},[142,149214,149215],{"class":257},"\"多地区趋势图\"",[142,149217,38076],{"class":152},[142,149219,149220,149222,149224,149226,149228,149230,149232],{"class":144,"line":1670},[142,149221,147538],{"class":5245},[142,149223,198],{"class":148},[142,149225,147543],{"class":152},[142,149227,147546],{"class":5245},[142,149229,198],{"class":148},[142,149231,147551],{"class":257},[142,149233,38076],{"class":152},[142,149235,149236],{"class":144,"line":1675},[142,149237,159],{"class":152},[142,149239,149240,149242,149245],{"class":144,"line":1681},[142,149241,147333],{"class":152},[142,149243,149244],{"class":257},"\"trend.html\"",[142,149246,159],{"class":152},[14,149248,149249],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[84,149251,149253],{"id":149252},"_1012-易错点","10.12 易错点",[96,149255,149256,149262,149268,149278,149284],{},[99,149257,149258,149261],{},[139,149259,149260],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[99,149263,149264,149267],{},[139,149265,149266],{},"render()"," 生成的是 HTML，不是图片。",[99,149269,149270,149271,149274,149275,28414],{},"JSON 字符串用 ",[139,149272,149273],{},"json.loads()","，JSON 文件用 ",[139,149276,149277],{},"json.load()",[99,149279,149280,149281,28414],{},"中文 JSON 保存时加 ",[139,149282,149283],{},"ensure_ascii=False",[99,149285,149286],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[84,149288,149290],{"id":149289},"_1013-本章练习","10.13 本章练习",[96,149292,149293,149296,149299,149302,149305],{},[99,149294,149295],{},"安装 pyecharts 并生成第一个折线图。",[99,149297,149298],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[99,149300,149301],{},"绘制两条折线，对比线上和线下销售额。",[99,149303,149304],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[99,149306,149307],{},"对含有空值的销售数据进行清洗后再绘图。",[5155,149309,149310],{},"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":31,"searchDepth":64,"depth":64,"links":149312},[149313,149314,149315,149316,149317,149318,149319,149320,149321,149322,149323,149324,149325],{"id":146929,"depth":64,"text":146930},{"id":147004,"depth":64,"text":147005},{"id":147183,"depth":64,"text":147184},{"id":147234,"depth":64,"text":147235},{"id":147368,"depth":64,"text":147369},{"id":147644,"depth":64,"text":147645},{"id":147770,"depth":64,"text":147771},{"id":147981,"depth":64,"text":147982},{"id":148352,"depth":64,"text":148353},{"id":148564,"depth":64,"text":148565},{"id":148936,"depth":64,"text":148937},{"id":149252,"depth":64,"text":149253},{"id":149289,"depth":64,"text":149290},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146921,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149332,"title":149333,"body":149334,"description":66,"extension":67,"meta":151694,"navigation":69,"path":151695,"seo":151696,"stem":151697,"__hash__":151698},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149335,"toc":151671},[149336,149339,149343,149346,149349,149425,149428,149519,149522,149526,149529,149573,149586,149590,149593,149660,149663,149667,149670,149754,149762,149766,149771,149912,149915,149926,149932,149938,150052,150056,150059,150062,150315,150318,150322,150325,150429,150432,150436,150587,150591,150598,150711,150715,150718,150824,150827,150831,150834,150865,150868,150973,150976,150980,150984,150994,151062,151066,151073,151137,151140,151144,151150,151246,151255,151259,151583,151592,151596,151624,151628,151668],[10,149337,149333],{"id":149338},"_11-面向对象基础",[84,149340,149342],{"id":149341},"_111-什么是面向对象","11.1 什么是面向对象",[14,149344,149345],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149347,149348],{},"面向过程：",[133,149350,149352],{"className":30407,"code":149351,"language":30409,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[139,149353,149354,149363,149371,149375,149385,149416,149420],{"__ignoreMap":31},[142,149355,149356,149358,149360],{"class":144,"line":145},[142,149357,146545],{"class":152},[142,149359,198],{"class":148},[142,149361,149362],{"class":257}," \"小明\"\n",[142,149364,149365,149367,149369],{"class":144,"line":64},[142,149366,146555],{"class":152},[142,149368,198],{"class":148},[142,149370,146560],{"class":201},[142,149372,149373],{"class":144,"line":1208},[142,149374,2428],{"emptyLinePlaceholder":69},[142,149376,149377,149379,149382],{"class":144,"line":1223},[142,149378,31976],{"class":148},[142,149380,149381],{"class":1991}," introduce",[142,149383,149384],{"class":152},"(name, age):\n",[142,149386,149387,149389,149391,149393,149396,149398,149400,149402,149405,149407,149409,149411,149414],{"class":144,"line":1229},[142,149388,31328],{"class":201},[142,149390,153],{"class":152},[142,149392,205],{"class":148},[142,149394,149395],{"class":257},"\"我叫",[142,149397,1049],{"class":201},[142,149399,79839],{"class":152},[142,149401,1099],{"class":201},[142,149403,149404],{"class":257},"，今年",[142,149406,1049],{"class":201},[142,149408,70250],{"class":152},[142,149410,1099],{"class":201},[142,149412,149413],{"class":257},"岁\"",[142,149415,159],{"class":152},[142,149417,149418],{"class":144,"line":1243},[142,149419,2428],{"emptyLinePlaceholder":69},[142,149421,149422],{"class":144,"line":1249},[142,149423,149424],{"class":152},"introduce(name, age)\n",[14,149426,149427],{},"面向对象：",[133,149429,149431],{"className":30407,"code":149430,"language":30409,"meta":31,"style":31},"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",[139,149432,149433,149441,149449,149478,149482,149486,149496,149505,149514],{"__ignoreMap":31},[142,149434,149435,149437,149439],{"class":144,"line":145},[142,149436,14723],{"class":148},[142,149438,7927],{"class":1991},[142,149440,3767],{"class":152},[142,149442,149443,149445,149447],{"class":144,"line":64},[142,149444,30830],{"class":148},[142,149446,149381],{"class":1991},[142,149448,30836],{"class":152},[142,149450,149451,149453,149455,149457,149459,149462,149464,149466,149468,149470,149472,149474,149476],{"class":144,"line":1208},[142,149452,32480],{"class":201},[142,149454,153],{"class":152},[142,149456,205],{"class":148},[142,149458,149395],{"class":257},[142,149460,149461],{"class":201},"{self",[142,149463,80330],{"class":152},[142,149465,1099],{"class":201},[142,149467,149404],{"class":257},[142,149469,149461],{"class":201},[142,149471,80342],{"class":152},[142,149473,1099],{"class":201},[142,149475,149413],{"class":257},[142,149477,159],{"class":152},[142,149479,149480],{"class":144,"line":1223},[142,149481,2428],{"emptyLinePlaceholder":69},[142,149483,149484],{"class":144,"line":1229},[142,149485,2428],{"emptyLinePlaceholder":69},[142,149487,149488,149491,149493],{"class":144,"line":1243},[142,149489,149490],{"class":152},"student ",[142,149492,198],{"class":148},[142,149494,149495],{"class":152}," Student()\n",[142,149497,149498,149501,149503],{"class":144,"line":1249},[142,149499,149500],{"class":152},"student.name ",[142,149502,198],{"class":148},[142,149504,149362],{"class":257},[142,149506,149507,149510,149512],{"class":144,"line":1340},[142,149508,149509],{"class":152},"student.age ",[142,149511,198],{"class":148},[142,149513,146560],{"class":201},[142,149515,149516],{"class":144,"line":1346},[142,149517,149518],{"class":152},"student.introduce()\n",[14,149520,149521],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[84,149523,149525],{"id":149524},"_112-类和对象","11.2 类和对象",[14,149527,149528],{},"类是模板，对象是根据模板创建出来的具体实例。",[133,149530,149532],{"className":30407,"code":149531,"language":30409,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[139,149533,149534,149542,149547,149551,149555,149564],{"__ignoreMap":31},[142,149535,149536,149538,149540],{"class":144,"line":145},[142,149537,14723],{"class":148},[142,149539,7927],{"class":1991},[142,149541,3767],{"class":152},[142,149543,149544],{"class":144,"line":64},[142,149545,149546],{"class":148},"    pass\n",[142,149548,149549],{"class":144,"line":1208},[142,149550,2428],{"emptyLinePlaceholder":69},[142,149552,149553],{"class":144,"line":1223},[142,149554,2428],{"emptyLinePlaceholder":69},[142,149556,149557,149560,149562],{"class":144,"line":1229},[142,149558,149559],{"class":152},"student1 ",[142,149561,198],{"class":148},[142,149563,149495],{"class":152},[142,149565,149566,149569,149571],{"class":144,"line":1243},[142,149567,149568],{"class":152},"student2 ",[142,149570,198],{"class":148},[142,149572,149495],{"class":152},[14,149574,149575,149578,149579,101027,149582,149585],{},[139,149576,149577],{},"Student"," 是类，",[139,149580,149581],{},"student1",[139,149583,149584],{},"student2"," 是对象。",[84,149587,149589],{"id":149588},"_113-属性","11.3 属性",[14,149591,149592],{},"属性是对象保存的数据。",[133,149594,149596],{"className":30407,"code":149595,"language":30409,"meta":31,"style":31},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[139,149597,149598,149606,149610,149614,149618,149626,149634,149642,149646,149653],{"__ignoreMap":31},[142,149599,149600,149602,149604],{"class":144,"line":145},[142,149601,14723],{"class":148},[142,149603,7927],{"class":1991},[142,149605,3767],{"class":152},[142,149607,149608],{"class":144,"line":64},[142,149609,149546],{"class":148},[142,149611,149612],{"class":144,"line":1208},[142,149613,2428],{"emptyLinePlaceholder":69},[142,149615,149616],{"class":144,"line":1223},[142,149617,2428],{"emptyLinePlaceholder":69},[142,149619,149620,149622,149624],{"class":144,"line":1229},[142,149621,149490],{"class":152},[142,149623,198],{"class":148},[142,149625,149495],{"class":152},[142,149627,149628,149630,149632],{"class":144,"line":1243},[142,149629,149500],{"class":152},[142,149631,198],{"class":148},[142,149633,149362],{"class":257},[142,149635,149636,149638,149640],{"class":144,"line":1249},[142,149637,149509],{"class":152},[142,149639,198],{"class":148},[142,149641,146560],{"class":201},[142,149643,149644],{"class":144,"line":1340},[142,149645,2428],{"emptyLinePlaceholder":69},[142,149647,149648,149650],{"class":144,"line":1346},[142,149649,30444],{"class":201},[142,149651,149652],{"class":152},"(student.name)\n",[142,149654,149655,149657],{"class":144,"line":1358},[142,149656,30444],{"class":201},[142,149658,149659],{"class":152},"(student.age)\n",[14,149661,149662],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[84,149664,149666],{"id":149665},"_114-方法","11.4 方法",[14,149668,149669],{},"类中的函数叫方法。",[133,149671,149672],{"className":30407,"code":149430,"language":30409,"meta":31,"style":31},[139,149673,149674,149682,149690,149718,149722,149726,149734,149742,149750],{"__ignoreMap":31},[142,149675,149676,149678,149680],{"class":144,"line":145},[142,149677,14723],{"class":148},[142,149679,7927],{"class":1991},[142,149681,3767],{"class":152},[142,149683,149684,149686,149688],{"class":144,"line":64},[142,149685,30830],{"class":148},[142,149687,149381],{"class":1991},[142,149689,30836],{"class":152},[142,149691,149692,149694,149696,149698,149700,149702,149704,149706,149708,149710,149712,149714,149716],{"class":144,"line":1208},[142,149693,32480],{"class":201},[142,149695,153],{"class":152},[142,149697,205],{"class":148},[142,149699,149395],{"class":257},[142,149701,149461],{"class":201},[142,149703,80330],{"class":152},[142,149705,1099],{"class":201},[142,149707,149404],{"class":257},[142,149709,149461],{"class":201},[142,149711,80342],{"class":152},[142,149713,1099],{"class":201},[142,149715,149413],{"class":257},[142,149717,159],{"class":152},[142,149719,149720],{"class":144,"line":1223},[142,149721,2428],{"emptyLinePlaceholder":69},[142,149723,149724],{"class":144,"line":1229},[142,149725,2428],{"emptyLinePlaceholder":69},[142,149727,149728,149730,149732],{"class":144,"line":1243},[142,149729,149490],{"class":152},[142,149731,198],{"class":148},[142,149733,149495],{"class":152},[142,149735,149736,149738,149740],{"class":144,"line":1249},[142,149737,149500],{"class":152},[142,149739,198],{"class":148},[142,149741,149362],{"class":257},[142,149743,149744,149746,149748],{"class":144,"line":1340},[142,149745,149509],{"class":152},[142,149747,198],{"class":148},[142,149749,146560],{"class":201},[142,149751,149752],{"class":144,"line":1346},[142,149753,149518],{"class":152},[14,149755,149756,149758,149759,149761],{},[139,149757,30852],{}," 表示当前对象。调用方法时不需要手动传入 ",[139,149760,30852],{},"，Python 会自动传。",[84,149763,149765],{"id":149764},"_115-构造方法__init__","11.5 构造方法__init__",[14,149767,149768,149770],{},[139,149769,30858],{}," 在对象创建时自动执行，用于初始化属性。",[133,149772,149774],{"className":30407,"code":149773,"language":30409,"meta":31,"style":31},"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",[139,149775,149776,149784,149793,149805,149817,149828,149832,149840,149878,149882,149886,149908],{"__ignoreMap":31},[142,149777,149778,149780,149782],{"class":144,"line":145},[142,149779,14723],{"class":148},[142,149781,7927],{"class":1991},[142,149783,3767],{"class":152},[142,149785,149786,149788,149790],{"class":144,"line":64},[142,149787,30830],{"class":148},[142,149789,30833],{"class":201},[142,149791,149792],{"class":152},"(self, name, age, score):\n",[142,149794,149795,149797,149800,149802],{"class":144,"line":1208},[142,149796,30874],{"class":201},[142,149798,149799],{"class":152},".name ",[142,149801,198],{"class":148},[142,149803,149804],{"class":152}," name\n",[142,149806,149807,149809,149812,149814],{"class":144,"line":1223},[142,149808,30874],{"class":201},[142,149810,149811],{"class":152},".age ",[142,149813,198],{"class":148},[142,149815,149816],{"class":152}," age\n",[142,149818,149819,149821,149824,149826],{"class":144,"line":1229},[142,149820,30874],{"class":201},[142,149822,149823],{"class":152},".score ",[142,149825,198],{"class":148},[142,149827,1607],{"class":152},[142,149829,149830],{"class":144,"line":1243},[142,149831,2428],{"emptyLinePlaceholder":69},[142,149833,149834,149836,149838],{"class":144,"line":1249},[142,149835,30830],{"class":148},[142,149837,149381],{"class":1991},[142,149839,30836],{"class":152},[142,149841,149842,149844,149846,149848,149850,149852,149854,149856,149858,149860,149862,149864,149867,149869,149872,149874,149876],{"class":144,"line":1340},[142,149843,32480],{"class":201},[142,149845,153],{"class":152},[142,149847,205],{"class":148},[142,149849,149395],{"class":257},[142,149851,149461],{"class":201},[142,149853,80330],{"class":152},[142,149855,1099],{"class":201},[142,149857,149404],{"class":257},[142,149859,149461],{"class":201},[142,149861,80342],{"class":152},[142,149863,1099],{"class":201},[142,149865,149866],{"class":257},"岁，成绩",[142,149868,149461],{"class":201},[142,149870,149871],{"class":152},".score",[142,149873,1099],{"class":201},[142,149875,404],{"class":257},[142,149877,159],{"class":152},[142,149879,149880],{"class":144,"line":1346},[142,149881,2428],{"emptyLinePlaceholder":69},[142,149883,149884],{"class":144,"line":1358},[142,149885,2428],{"emptyLinePlaceholder":69},[142,149887,149888,149890,149892,149895,149898,149900,149902,149904,149906],{"class":144,"line":1640},[142,149889,149490],{"class":152},[142,149891,198],{"class":148},[142,149893,149894],{"class":152}," Student(",[142,149896,149897],{"class":257},"\"小明\"",[142,149899,12464],{"class":152},[142,149901,803],{"class":201},[142,149903,12464],{"class":152},[142,149905,1142],{"class":201},[142,149907,159],{"class":152},[142,149909,149910],{"class":144,"line":1645},[142,149911,149518],{"class":152},[14,149913,149914],{},"构造方法的好处：",[96,149916,149917,149920,149923],{},[99,149918,149919],{},"创建对象时必须提供必要数据。",[99,149921,149922],{},"属性初始化集中，不容易漏。",[99,149924,149925],{},"对象状态更完整。",[84,149927,149929,149930],{"id":149928},"_116-str","11.6 ",[302,149931,1328],{},[14,149933,149934,149935,28414],{},"直接打印对象时，默认输出不直观。可以定义 ",[139,149936,149937],{},"__str__",[133,149939,149941],{"className":30407,"code":149940,"language":30409,"meta":31,"style":31},"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",[139,149942,149943,149951,149960,149970,149980,149984,149993,150021,150025,150029,150045],{"__ignoreMap":31},[142,149944,149945,149947,149949],{"class":144,"line":145},[142,149946,14723],{"class":148},[142,149948,7927],{"class":1991},[142,149950,3767],{"class":152},[142,149952,149953,149955,149957],{"class":144,"line":64},[142,149954,30830],{"class":148},[142,149956,30833],{"class":201},[142,149958,149959],{"class":152},"(self, name, age):\n",[142,149961,149962,149964,149966,149968],{"class":144,"line":1208},[142,149963,30874],{"class":201},[142,149965,149799],{"class":152},[142,149967,198],{"class":148},[142,149969,149804],{"class":152},[142,149971,149972,149974,149976,149978],{"class":144,"line":1223},[142,149973,30874],{"class":201},[142,149975,149811],{"class":152},[142,149977,198],{"class":148},[142,149979,149816],{"class":152},[142,149981,149982],{"class":144,"line":1229},[142,149983,2428],{"emptyLinePlaceholder":69},[142,149985,149986,149988,149991],{"class":144,"line":1243},[142,149987,30830],{"class":148},[142,149989,149990],{"class":201}," __str__",[142,149992,30836],{"class":152},[142,149994,149995,149997,150000,150003,150005,150007,150009,150012,150014,150016,150018],{"class":144,"line":1249},[142,149996,14781],{"class":148},[142,149998,149999],{"class":148}," f",[142,150001,150002],{"class":257},"\"Student(name=",[142,150004,149461],{"class":201},[142,150006,80330],{"class":152},[142,150008,1099],{"class":201},[142,150010,150011],{"class":257},", age=",[142,150013,149461],{"class":201},[142,150015,80342],{"class":152},[142,150017,1099],{"class":201},[142,150019,150020],{"class":257},")\"\n",[142,150022,150023],{"class":144,"line":1340},[142,150024,2428],{"emptyLinePlaceholder":69},[142,150026,150027],{"class":144,"line":1346},[142,150028,2428],{"emptyLinePlaceholder":69},[142,150030,150031,150033,150035,150037,150039,150041,150043],{"class":144,"line":1358},[142,150032,149490],{"class":152},[142,150034,198],{"class":148},[142,150036,149894],{"class":152},[142,150038,149897],{"class":257},[142,150040,12464],{"class":152},[142,150042,803],{"class":201},[142,150044,159],{"class":152},[142,150046,150047,150049],{"class":144,"line":1640},[142,150048,30444],{"class":201},[142,150050,150051],{"class":152},"(student)\n",[84,150053,150055],{"id":150054},"_117-封装","11.7 封装",[14,150057,150058],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150060,150061],{},"Python 中以双下划线开头的属性通常视为私有属性。",[133,150063,150065],{"className":30407,"code":150064,"language":30409,"meta":31,"style":31},"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",[139,150066,150067,150076,150085,150097,150109,150113,150122,150131,150135,150145,150158,150169,150174,150185,150189,150198,150210,150221,150225,150238,150249,150253,150264,150268,150272,150290,150299,150308],{"__ignoreMap":31},[142,150068,150069,150071,150074],{"class":144,"line":145},[142,150070,14723],{"class":148},[142,150072,150073],{"class":1991}," Account",[142,150075,3767],{"class":152},[142,150077,150078,150080,150082],{"class":144,"line":64},[142,150079,30830],{"class":148},[142,150081,30833],{"class":201},[142,150083,150084],{"class":152},"(self, owner, balance):\n",[142,150086,150087,150089,150092,150094],{"class":144,"line":1208},[142,150088,30874],{"class":201},[142,150090,150091],{"class":152},".owner ",[142,150093,198],{"class":148},[142,150095,150096],{"class":152}," owner\n",[142,150098,150099,150101,150104,150106],{"class":144,"line":1223},[142,150100,30874],{"class":201},[142,150102,150103],{"class":152},".__balance ",[142,150105,198],{"class":148},[142,150107,150108],{"class":152}," balance\n",[142,150110,150111],{"class":144,"line":1229},[142,150112,2428],{"emptyLinePlaceholder":69},[142,150114,150115,150117,150120],{"class":144,"line":1243},[142,150116,30830],{"class":148},[142,150118,150119],{"class":1991}," get_balance",[142,150121,30836],{"class":152},[142,150123,150124,150126,150128],{"class":144,"line":1249},[142,150125,14781],{"class":148},[142,150127,38902],{"class":201},[142,150129,150130],{"class":152},".__balance\n",[142,150132,150133],{"class":144,"line":1340},[142,150134,2428],{"emptyLinePlaceholder":69},[142,150136,150137,150139,150142],{"class":144,"line":1346},[142,150138,30830],{"class":148},[142,150140,150141],{"class":1991}," deposit",[142,150143,150144],{"class":152},"(self, money):\n",[142,150146,150147,150149,150152,150154,150156],{"class":144,"line":1358},[142,150148,2525],{"class":148},[142,150150,150151],{"class":152}," money ",[142,150153,1616],{"class":148},[142,150155,4121],{"class":201},[142,150157,3767],{"class":152},[142,150159,150160,150162,150164,150167],{"class":144,"line":1640},[142,150161,34679],{"class":201},[142,150163,153],{"class":152},[142,150165,150166],{"class":257},"\"存款金额必须大于0\"",[142,150168,159],{"class":152},[142,150170,150171],{"class":144,"line":1645},[142,150172,150173],{"class":148},"            return\n",[142,150175,150176,150178,150180,150182],{"class":144,"line":1651},[142,150177,30874],{"class":201},[142,150179,150103],{"class":152},[142,150181,9506],{"class":148},[142,150183,150184],{"class":152}," money\n",[142,150186,150187],{"class":144,"line":1656},[142,150188,2428],{"emptyLinePlaceholder":69},[142,150190,150191,150193,150196],{"class":144,"line":1670},[142,150192,30830],{"class":148},[142,150194,150195],{"class":1991}," withdraw",[142,150197,150144],{"class":152},[142,150199,150200,150202,150204,150206,150208],{"class":144,"line":1675},[142,150201,2525],{"class":148},[142,150203,150151],{"class":152},[142,150205,1616],{"class":148},[142,150207,4121],{"class":201},[142,150209,3767],{"class":152},[142,150211,150212,150214,150216,150219],{"class":144,"line":1681},[142,150213,34679],{"class":201},[142,150215,153],{"class":152},[142,150217,150218],{"class":257},"\"取款金额必须大于0\"",[142,150220,159],{"class":152},[142,150222,150223],{"class":144,"line":1702},[142,150224,150173],{"class":148},[142,150226,150227,150229,150231,150233,150235],{"class":144,"line":1707},[142,150228,2525],{"class":148},[142,150230,150151],{"class":152},[142,150232,1113],{"class":148},[142,150234,38902],{"class":201},[142,150236,150237],{"class":152},".__balance:\n",[142,150239,150240,150242,150244,150247],{"class":144,"line":1721},[142,150241,34679],{"class":201},[142,150243,153],{"class":152},[142,150245,150246],{"class":257},"\"余额不足\"",[142,150248,159],{"class":152},[142,150250,150251],{"class":144,"line":1726},[142,150252,150173],{"class":148},[142,150254,150255,150257,150259,150262],{"class":144,"line":1755},[142,150256,30874],{"class":201},[142,150258,150103],{"class":152},[142,150260,150261],{"class":148},"-=",[142,150263,150184],{"class":152},[142,150265,150266],{"class":144,"line":1760},[142,150267,2428],{"emptyLinePlaceholder":69},[142,150269,150270],{"class":144,"line":1777},[142,150271,2428],{"emptyLinePlaceholder":69},[142,150273,150274,150277,150279,150282,150284,150286,150288],{"class":144,"line":1782},[142,150275,150276],{"class":152},"account ",[142,150278,198],{"class":148},[142,150280,150281],{"class":152}," Account(",[142,150283,149897],{"class":257},[142,150285,12464],{"class":152},[142,150287,6439],{"class":201},[142,150289,159],{"class":152},[142,150291,150292,150295,150297],{"class":144,"line":1787},[142,150293,150294],{"class":152},"account.deposit(",[142,150296,1750],{"class":201},[142,150298,159],{"class":152},[142,150300,150301,150304,150306],{"class":144,"line":1792},[142,150302,150303],{"class":152},"account.withdraw(",[142,150305,464],{"class":201},[142,150307,159],{"class":152},[142,150309,150310,150312],{"class":144,"line":1806},[142,150311,30444],{"class":201},[142,150313,150314],{"class":152},"(account.get_balance())\n",[14,150316,150317],{},"封装的意义是避免外部随意修改内部状态。",[84,150319,150321],{"id":150320},"_118-继承","11.8 继承",[14,150323,150324],{},"继承可以让子类复用父类的属性和方法。",[133,150326,150328],{"className":30407,"code":150327,"language":30409,"meta":31,"style":31},"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",[139,150329,150330,150339,150348,150359,150363,150367,150381,150390,150401,150405,150409,150419,150424],{"__ignoreMap":31},[142,150331,150332,150334,150337],{"class":144,"line":145},[142,150333,14723],{"class":148},[142,150335,150336],{"class":1991}," Animal",[142,150338,3767],{"class":152},[142,150340,150341,150343,150346],{"class":144,"line":64},[142,150342,30830],{"class":148},[142,150344,150345],{"class":1991}," eat",[142,150347,30836],{"class":152},[142,150349,150350,150352,150354,150357],{"class":144,"line":1208},[142,150351,32480],{"class":201},[142,150353,153],{"class":152},[142,150355,150356],{"class":257},"\"吃东西\"",[142,150358,159],{"class":152},[142,150360,150361],{"class":144,"line":1223},[142,150362,2428],{"emptyLinePlaceholder":69},[142,150364,150365],{"class":144,"line":1229},[142,150366,2428],{"emptyLinePlaceholder":69},[142,150368,150369,150371,150374,150376,150379],{"class":144,"line":1243},[142,150370,14723],{"class":148},[142,150372,150373],{"class":1991}," Dog",[142,150375,153],{"class":152},[142,150377,150378],{"class":1991},"Animal",[142,150380,30815],{"class":152},[142,150382,150383,150385,150388],{"class":144,"line":1249},[142,150384,30830],{"class":148},[142,150386,150387],{"class":1991}," bark",[142,150389,30836],{"class":152},[142,150391,150392,150394,150396,150399],{"class":144,"line":1340},[142,150393,32480],{"class":201},[142,150395,153],{"class":152},[142,150397,150398],{"class":257},"\"汪汪\"",[142,150400,159],{"class":152},[142,150402,150403],{"class":144,"line":1346},[142,150404,2428],{"emptyLinePlaceholder":69},[142,150406,150407],{"class":144,"line":1358},[142,150408,2428],{"emptyLinePlaceholder":69},[142,150410,150411,150414,150416],{"class":144,"line":1640},[142,150412,150413],{"class":152},"dog ",[142,150415,198],{"class":148},[142,150417,150418],{"class":152}," Dog()\n",[142,150420,150421],{"class":144,"line":1645},[142,150422,150423],{"class":152},"dog.eat()\n",[142,150425,150426],{"class":144,"line":1651},[142,150427,150428],{"class":152},"dog.bark()\n",[14,150430,150431],{},"子类可以扩展新方法，也可以重写父类方法。",[84,150433,150435],{"id":150434},"_119-方法重写","11.9 方法重写",[133,150437,150439],{"className":30407,"code":150438,"language":30409,"meta":31,"style":31},"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",[139,150440,150441,150449,150458,150469,150473,150477,150489,150497,150507,150511,150515,150528,150536,150547,150551,150555,150563,150573,150577,150582],{"__ignoreMap":31},[142,150442,150443,150445,150447],{"class":144,"line":145},[142,150444,14723],{"class":148},[142,150446,150336],{"class":1991},[142,150448,3767],{"class":152},[142,150450,150451,150453,150456],{"class":144,"line":64},[142,150452,30830],{"class":148},[142,150454,150455],{"class":1991}," speak",[142,150457,30836],{"class":152},[142,150459,150460,150462,150464,150467],{"class":144,"line":1208},[142,150461,32480],{"class":201},[142,150463,153],{"class":152},[142,150465,150466],{"class":257},"\"动物叫\"",[142,150468,159],{"class":152},[142,150470,150471],{"class":144,"line":1223},[142,150472,2428],{"emptyLinePlaceholder":69},[142,150474,150475],{"class":144,"line":1229},[142,150476,2428],{"emptyLinePlaceholder":69},[142,150478,150479,150481,150483,150485,150487],{"class":144,"line":1243},[142,150480,14723],{"class":148},[142,150482,150373],{"class":1991},[142,150484,153],{"class":152},[142,150486,150378],{"class":1991},[142,150488,30815],{"class":152},[142,150490,150491,150493,150495],{"class":144,"line":1249},[142,150492,30830],{"class":148},[142,150494,150455],{"class":1991},[142,150496,30836],{"class":152},[142,150498,150499,150501,150503,150505],{"class":144,"line":1340},[142,150500,32480],{"class":201},[142,150502,153],{"class":152},[142,150504,150398],{"class":257},[142,150506,159],{"class":152},[142,150508,150509],{"class":144,"line":1346},[142,150510,2428],{"emptyLinePlaceholder":69},[142,150512,150513],{"class":144,"line":1358},[142,150514,2428],{"emptyLinePlaceholder":69},[142,150516,150517,150519,150522,150524,150526],{"class":144,"line":1640},[142,150518,14723],{"class":148},[142,150520,150521],{"class":1991}," Cat",[142,150523,153],{"class":152},[142,150525,150378],{"class":1991},[142,150527,30815],{"class":152},[142,150529,150530,150532,150534],{"class":144,"line":1645},[142,150531,30830],{"class":148},[142,150533,150455],{"class":1991},[142,150535,30836],{"class":152},[142,150537,150538,150540,150542,150545],{"class":144,"line":1651},[142,150539,32480],{"class":201},[142,150541,153],{"class":152},[142,150543,150544],{"class":257},"\"喵喵\"",[142,150546,159],{"class":152},[142,150548,150549],{"class":144,"line":1656},[142,150550,2428],{"emptyLinePlaceholder":69},[142,150552,150553],{"class":144,"line":1670},[142,150554,2428],{"emptyLinePlaceholder":69},[142,150556,150557,150559,150561],{"class":144,"line":1675},[142,150558,150413],{"class":152},[142,150560,198],{"class":148},[142,150562,150418],{"class":152},[142,150564,150565,150568,150570],{"class":144,"line":1681},[142,150566,150567],{"class":152},"cat ",[142,150569,198],{"class":148},[142,150571,150572],{"class":152}," Cat()\n",[142,150574,150575],{"class":144,"line":1702},[142,150576,2428],{"emptyLinePlaceholder":69},[142,150578,150579],{"class":144,"line":1707},[142,150580,150581],{"class":152},"dog.speak()\n",[142,150583,150584],{"class":144,"line":1721},[142,150585,150586],{"class":152},"cat.speak()\n",[84,150588,150590],{"id":150589},"_1110-super","11.10 super",[14,150592,150593,150594,150597],{},"子类可以通过 ",[139,150595,150596],{},"super()"," 调用父类方法。",[133,150599,150601],{"className":30407,"code":150600,"language":30409,"meta":31,"style":31},"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",[139,150602,150603,150611,150620,150630,150634,150638,150650,150659,150670,150680,150684,150688,150704],{"__ignoreMap":31},[142,150604,150605,150607,150609],{"class":144,"line":145},[142,150606,14723],{"class":148},[142,150608,15598],{"class":1991},[142,150610,3767],{"class":152},[142,150612,150613,150615,150617],{"class":144,"line":64},[142,150614,30830],{"class":148},[142,150616,30833],{"class":201},[142,150618,150619],{"class":152},"(self, name):\n",[142,150621,150622,150624,150626,150628],{"class":144,"line":1208},[142,150623,30874],{"class":201},[142,150625,149799],{"class":152},[142,150627,198],{"class":148},[142,150629,149804],{"class":152},[142,150631,150632],{"class":144,"line":1223},[142,150633,2428],{"emptyLinePlaceholder":69},[142,150635,150636],{"class":144,"line":1229},[142,150637,2428],{"emptyLinePlaceholder":69},[142,150639,150640,150642,150644,150646,150648],{"class":144,"line":1243},[142,150641,14723],{"class":148},[142,150643,7927],{"class":1991},[142,150645,153],{"class":152},[142,150647,19075],{"class":1991},[142,150649,30815],{"class":152},[142,150651,150652,150654,150656],{"class":144,"line":1249},[142,150653,30830],{"class":148},[142,150655,30833],{"class":201},[142,150657,150658],{"class":152},"(self, name, score):\n",[142,150660,150661,150663,150665,150667],{"class":144,"line":1340},[142,150662,30846],{"class":201},[142,150664,17290],{"class":152},[142,150666,30858],{"class":201},[142,150668,150669],{"class":152},"(name)\n",[142,150671,150672,150674,150676,150678],{"class":144,"line":1346},[142,150673,30874],{"class":201},[142,150675,149823],{"class":152},[142,150677,198],{"class":148},[142,150679,1607],{"class":152},[142,150681,150682],{"class":144,"line":1358},[142,150683,2428],{"emptyLinePlaceholder":69},[142,150685,150686],{"class":144,"line":1640},[142,150687,2428],{"emptyLinePlaceholder":69},[142,150689,150690,150692,150694,150696,150698,150700,150702],{"class":144,"line":1645},[142,150691,149490],{"class":152},[142,150693,198],{"class":148},[142,150695,149894],{"class":152},[142,150697,149897],{"class":257},[142,150699,12464],{"class":152},[142,150701,1142],{"class":201},[142,150703,159],{"class":152},[142,150705,150706,150708],{"class":144,"line":1651},[142,150707,30444],{"class":201},[142,150709,150710],{"class":152},"(student.name, student.score)\n",[84,150712,150714],{"id":150713},"_1111-多态","11.11 多态",[14,150716,150717],{},"多态指不同对象响应同一个方法，表现出不同结果。",[133,150719,150721],{"className":30407,"code":150720,"language":30409,"meta":31,"style":31},"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",[139,150722,150723,150731,150739,150749,150753,150757,150765,150773,150783,150787,150791,150801,150806,150810,150814,150819],{"__ignoreMap":31},[142,150724,150725,150727,150729],{"class":144,"line":145},[142,150726,14723],{"class":148},[142,150728,150373],{"class":1991},[142,150730,3767],{"class":152},[142,150732,150733,150735,150737],{"class":144,"line":64},[142,150734,30830],{"class":148},[142,150736,150455],{"class":1991},[142,150738,30836],{"class":152},[142,150740,150741,150743,150745,150747],{"class":144,"line":1208},[142,150742,32480],{"class":201},[142,150744,153],{"class":152},[142,150746,150398],{"class":257},[142,150748,159],{"class":152},[142,150750,150751],{"class":144,"line":1223},[142,150752,2428],{"emptyLinePlaceholder":69},[142,150754,150755],{"class":144,"line":1229},[142,150756,2428],{"emptyLinePlaceholder":69},[142,150758,150759,150761,150763],{"class":144,"line":1243},[142,150760,14723],{"class":148},[142,150762,150521],{"class":1991},[142,150764,3767],{"class":152},[142,150766,150767,150769,150771],{"class":144,"line":1249},[142,150768,30830],{"class":148},[142,150770,150455],{"class":1991},[142,150772,30836],{"class":152},[142,150774,150775,150777,150779,150781],{"class":144,"line":1340},[142,150776,32480],{"class":201},[142,150778,153],{"class":152},[142,150780,150544],{"class":257},[142,150782,159],{"class":152},[142,150784,150785],{"class":144,"line":1346},[142,150786,2428],{"emptyLinePlaceholder":69},[142,150788,150789],{"class":144,"line":1358},[142,150790,2428],{"emptyLinePlaceholder":69},[142,150792,150793,150795,150798],{"class":144,"line":1640},[142,150794,31976],{"class":148},[142,150796,150797],{"class":1991}," make_sound",[142,150799,150800],{"class":152},"(animal):\n",[142,150802,150803],{"class":144,"line":1645},[142,150804,150805],{"class":152},"    animal.speak()\n",[142,150807,150808],{"class":144,"line":1651},[142,150809,2428],{"emptyLinePlaceholder":69},[142,150811,150812],{"class":144,"line":1656},[142,150813,2428],{"emptyLinePlaceholder":69},[142,150815,150816],{"class":144,"line":1670},[142,150817,150818],{"class":152},"make_sound(Dog())\n",[142,150820,150821],{"class":144,"line":1675},[142,150822,150823],{"class":152},"make_sound(Cat())\n",[14,150825,150826],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[84,150828,150830],{"id":150829},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150832,150833],{},"实例属性属于对象：",[133,150835,150837],{"className":30407,"code":150836,"language":30409,"meta":31,"style":31},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[139,150838,150839,150847,150855],{"__ignoreMap":31},[142,150840,150841,150843,150845],{"class":144,"line":145},[142,150842,14723],{"class":148},[142,150844,7927],{"class":1991},[142,150846,3767],{"class":152},[142,150848,150849,150851,150853],{"class":144,"line":64},[142,150850,30830],{"class":148},[142,150852,30833],{"class":201},[142,150854,150619],{"class":152},[142,150856,150857,150859,150861,150863],{"class":144,"line":1208},[142,150858,30874],{"class":201},[142,150860,149799],{"class":152},[142,150862,198],{"class":148},[142,150864,149804],{"class":152},[14,150866,150867],{},"类属性属于类，所有对象共享：",[133,150869,150871],{"className":30407,"code":150870,"language":30409,"meta":31,"style":31},"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",[139,150872,150873,150881,150891,150895,150903,150913,150917,150921,150934,150948,150952,150959,150966],{"__ignoreMap":31},[142,150874,150875,150877,150879],{"class":144,"line":145},[142,150876,14723],{"class":148},[142,150878,7927],{"class":1991},[142,150880,3767],{"class":152},[142,150882,150883,150886,150888],{"class":144,"line":64},[142,150884,150885],{"class":152},"    school ",[142,150887,198],{"class":148},[142,150889,150890],{"class":257}," \"黑马学校\"\n",[142,150892,150893],{"class":144,"line":1208},[142,150894,2428],{"emptyLinePlaceholder":69},[142,150896,150897,150899,150901],{"class":144,"line":1223},[142,150898,30830],{"class":148},[142,150900,30833],{"class":201},[142,150902,150619],{"class":152},[142,150904,150905,150907,150909,150911],{"class":144,"line":1229},[142,150906,30874],{"class":201},[142,150908,149799],{"class":152},[142,150910,198],{"class":148},[142,150912,149804],{"class":152},[142,150914,150915],{"class":144,"line":1243},[142,150916,2428],{"emptyLinePlaceholder":69},[142,150918,150919],{"class":144,"line":1249},[142,150920,2428],{"emptyLinePlaceholder":69},[142,150922,150923,150926,150928,150930,150932],{"class":144,"line":1340},[142,150924,150925],{"class":152},"s1 ",[142,150927,198],{"class":148},[142,150929,149894],{"class":152},[142,150931,149897],{"class":257},[142,150933,159],{"class":152},[142,150935,150936,150939,150941,150943,150946],{"class":144,"line":1346},[142,150937,150938],{"class":152},"s2 ",[142,150940,198],{"class":148},[142,150942,149894],{"class":152},[142,150944,150945],{"class":257},"\"小红\"",[142,150947,159],{"class":152},[142,150949,150950],{"class":144,"line":1358},[142,150951,2428],{"emptyLinePlaceholder":69},[142,150953,150954,150956],{"class":144,"line":1640},[142,150955,30444],{"class":201},[142,150957,150958],{"class":152},"(s1.school)\n",[142,150960,150961,150963],{"class":144,"line":1645},[142,150962,30444],{"class":201},[142,150964,150965],{"class":152},"(s2.school)\n",[142,150967,150968,150970],{"class":144,"line":1651},[142,150969,30444],{"class":201},[142,150971,150972],{"class":152},"(Student.school)\n",[14,150974,150975],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[84,150977,150979],{"id":150978},"_1113-类方法和静态方法","11.13 类方法和静态方法",[113,150981,150983],{"id":150982},"_11131-类方法","11.13.1 类方法",[14,150985,150986,150987,150990,150991,28414],{},"类方法使用 ",[139,150988,150989],{},"@classmethod","，第一个参数通常是 ",[139,150992,150993],{},"cls",[133,150995,150997],{"className":30407,"code":150996,"language":30409,"meta":31,"style":31},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[139,150998,150999,151007,151015,151019,151027,151037,151047,151051,151055],{"__ignoreMap":31},[142,151000,151001,151003,151005],{"class":144,"line":145},[142,151002,14723],{"class":148},[142,151004,7927],{"class":1991},[142,151006,3767],{"class":152},[142,151008,151009,151011,151013],{"class":144,"line":64},[142,151010,150885],{"class":152},[142,151012,198],{"class":148},[142,151014,150890],{"class":257},[142,151016,151017],{"class":144,"line":1208},[142,151018,2428],{"emptyLinePlaceholder":69},[142,151020,151021,151024],{"class":144,"line":1223},[142,151022,151023],{"class":1991},"    @",[142,151025,151026],{"class":201},"classmethod\n",[142,151028,151029,151031,151034],{"class":144,"line":1229},[142,151030,30830],{"class":148},[142,151032,151033],{"class":1991}," get_school",[142,151035,151036],{"class":152},"(cls):\n",[142,151038,151039,151041,151044],{"class":144,"line":1243},[142,151040,14781],{"class":148},[142,151042,151043],{"class":201}," cls",[142,151045,151046],{"class":152},".school\n",[142,151048,151049],{"class":144,"line":1249},[142,151050,2428],{"emptyLinePlaceholder":69},[142,151052,151053],{"class":144,"line":1340},[142,151054,2428],{"emptyLinePlaceholder":69},[142,151056,151057,151059],{"class":144,"line":1346},[142,151058,30444],{"class":201},[142,151060,151061],{"class":152},"(Student.get_school())\n",[113,151063,151065],{"id":151064},"_11132-静态方法","11.13.2 静态方法",[14,151067,151068,151069,151072],{},"静态方法使用 ",[139,151070,151071],{},"@staticmethod","，不需要访问实例和类。",[133,151074,151076],{"className":30407,"code":151075,"language":30409,"meta":31,"style":31},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[139,151077,151078,151087,151094,151103,151114,151118,151122],{"__ignoreMap":31},[142,151079,151080,151082,151085],{"class":144,"line":145},[142,151081,14723],{"class":148},[142,151083,151084],{"class":1991}," MathUtils",[142,151086,3767],{"class":152},[142,151088,151089,151091],{"class":144,"line":64},[142,151090,151023],{"class":1991},[142,151092,151093],{"class":201},"staticmethod\n",[142,151095,151096,151098,151100],{"class":144,"line":1208},[142,151097,30830],{"class":148},[142,151099,5238],{"class":1991},[142,151101,151102],{"class":152},"(a, b):\n",[142,151104,151105,151107,151109,151111],{"class":144,"line":1223},[142,151106,14781],{"class":148},[142,151108,10898],{"class":152},[142,151110,634],{"class":148},[142,151112,151113],{"class":152}," b\n",[142,151115,151116],{"class":144,"line":1229},[142,151117,2428],{"emptyLinePlaceholder":69},[142,151119,151120],{"class":144,"line":1243},[142,151121,2428],{"emptyLinePlaceholder":69},[142,151123,151124,151126,151129,151131,151133,151135],{"class":144,"line":1249},[142,151125,30444],{"class":201},[142,151127,151128],{"class":152},"(MathUtils.add(",[142,151130,370],{"class":201},[142,151132,12464],{"class":152},[142,151134,230],{"class":201},[142,151136,30526],{"class":152},[14,151138,151139],{},"静态方法本质上是放在类命名空间里的普通函数。",[84,151141,151143],{"id":151142},"_1114-dataclass","11.14 dataclass",[14,151145,151146,151149],{},[139,151147,151148],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[133,151151,151153],{"className":30407,"code":151152,"language":30409,"meta":31,"style":31},"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",[139,151154,151155,151167,151171,151175,151180,151188,151196,151204,151212,151216,151220,151240],{"__ignoreMap":31},[142,151156,151157,151159,151162,151164],{"class":144,"line":145},[142,151158,30766],{"class":148},[142,151160,151161],{"class":152}," dataclasses ",[142,151163,30421],{"class":148},[142,151165,151166],{"class":152}," dataclass\n",[142,151168,151169],{"class":144,"line":64},[142,151170,2428],{"emptyLinePlaceholder":69},[142,151172,151173],{"class":144,"line":1208},[142,151174,2428],{"emptyLinePlaceholder":69},[142,151176,151177],{"class":144,"line":1223},[142,151178,151179],{"class":1991},"@dataclass\n",[142,151181,151182,151184,151186],{"class":144,"line":1229},[142,151183,14723],{"class":148},[142,151185,7927],{"class":1991},[142,151187,3767],{"class":152},[142,151189,151190,151193],{"class":144,"line":1243},[142,151191,151192],{"class":152},"    name: ",[142,151194,151195],{"class":201},"str\n",[142,151197,151198,151201],{"class":144,"line":1249},[142,151199,151200],{"class":152},"    age: ",[142,151202,151203],{"class":201},"int\n",[142,151205,151206,151209],{"class":144,"line":1340},[142,151207,151208],{"class":152},"    score: ",[142,151210,151211],{"class":201},"float\n",[142,151213,151214],{"class":144,"line":1346},[142,151215,2428],{"emptyLinePlaceholder":69},[142,151217,151218],{"class":144,"line":1358},[142,151219,2428],{"emptyLinePlaceholder":69},[142,151221,151222,151224,151226,151228,151230,151232,151234,151236,151238],{"class":144,"line":1640},[142,151223,149490],{"class":152},[142,151225,198],{"class":148},[142,151227,149894],{"class":152},[142,151229,149897],{"class":257},[142,151231,12464],{"class":152},[142,151233,803],{"class":201},[142,151235,12464],{"class":152},[142,151237,1142],{"class":201},[142,151239,159],{"class":152},[142,151241,151242,151244],{"class":144,"line":1645},[142,151243,30444],{"class":201},[142,151245,150051],{"class":152},[14,151247,151248,151249,365,151251,151254],{},"它会自动生成 ",[139,151250,30858],{},[139,151252,151253],{},"__repr__"," 等方法。适合数据模型类。",[84,151256,151258],{"id":151257},"_1115-小案例学生类","11.15 小案例：学生类",[133,151260,151262],{"className":30407,"code":151261,"language":30409,"meta":31,"style":31},"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",[139,151263,151264,151272,151281,151293,151303,151313,151323,151327,151336,151349,151353,151362,151368,151380,151392,151404,151416,151420,151424,151430,151440,151449,151459,151467,151475,151484,151488,151492,151500,151536,151540,151544,151569,151576],{"__ignoreMap":31},[142,151265,151266,151268,151270],{"class":144,"line":145},[142,151267,14723],{"class":148},[142,151269,7927],{"class":1991},[142,151271,3767],{"class":152},[142,151273,151274,151276,151278],{"class":144,"line":64},[142,151275,30830],{"class":148},[142,151277,30833],{"class":201},[142,151279,151280],{"class":152},"(self, student_id, name, age, score):\n",[142,151282,151283,151285,151288,151290],{"class":144,"line":1208},[142,151284,30874],{"class":201},[142,151286,151287],{"class":152},".student_id ",[142,151289,198],{"class":148},[142,151291,151292],{"class":152}," student_id\n",[142,151294,151295,151297,151299,151301],{"class":144,"line":1223},[142,151296,30874],{"class":201},[142,151298,149799],{"class":152},[142,151300,198],{"class":148},[142,151302,149804],{"class":152},[142,151304,151305,151307,151309,151311],{"class":144,"line":1229},[142,151306,30874],{"class":201},[142,151308,149811],{"class":152},[142,151310,198],{"class":148},[142,151312,149816],{"class":152},[142,151314,151315,151317,151319,151321],{"class":144,"line":1243},[142,151316,30874],{"class":201},[142,151318,149823],{"class":152},[142,151320,198],{"class":148},[142,151322,1607],{"class":152},[142,151324,151325],{"class":144,"line":1249},[142,151326,2428],{"emptyLinePlaceholder":69},[142,151328,151329,151331,151334],{"class":144,"line":1340},[142,151330,30830],{"class":148},[142,151332,151333],{"class":1991}," is_passed",[142,151335,30836],{"class":152},[142,151337,151338,151340,151342,151344,151346],{"class":144,"line":1346},[142,151339,14781],{"class":148},[142,151341,38902],{"class":201},[142,151343,149823],{"class":152},[142,151345,1738],{"class":148},[142,151347,151348],{"class":201}," 60\n",[142,151350,151351],{"class":144,"line":1358},[142,151352,2428],{"emptyLinePlaceholder":69},[142,151354,151355,151357,151360],{"class":144,"line":1640},[142,151356,30830],{"class":148},[142,151358,151359],{"class":1991}," to_dict",[142,151361,30836],{"class":152},[142,151363,151364,151366],{"class":144,"line":1645},[142,151365,14781],{"class":148},[142,151367,15601],{"class":152},[142,151369,151370,151373,151375,151377],{"class":144,"line":1651},[142,151371,151372],{"class":257},"            \"student_id\"",[142,151374,51466],{"class":152},[142,151376,30852],{"class":201},[142,151378,151379],{"class":152},".student_id,\n",[142,151381,151382,151385,151387,151389],{"class":144,"line":1656},[142,151383,151384],{"class":257},"            \"name\"",[142,151386,51466],{"class":152},[142,151388,30852],{"class":201},[142,151390,151391],{"class":152},".name,\n",[142,151393,151394,151397,151399,151401],{"class":144,"line":1670},[142,151395,151396],{"class":257},"            \"age\"",[142,151398,51466],{"class":152},[142,151400,30852],{"class":201},[142,151402,151403],{"class":152},".age,\n",[142,151405,151406,151409,151411,151413],{"class":144,"line":1675},[142,151407,151408],{"class":257},"            \"score\"",[142,151410,51466],{"class":152},[142,151412,30852],{"class":201},[142,151414,151415],{"class":152},".score,\n",[142,151417,151418],{"class":144,"line":1681},[142,151419,2557],{"class":152},[142,151421,151422],{"class":144,"line":1702},[142,151423,2428],{"emptyLinePlaceholder":69},[142,151425,151426,151428],{"class":144,"line":1707},[142,151427,151023],{"class":1991},[142,151429,151026],{"class":201},[142,151431,151432,151434,151437],{"class":144,"line":1721},[142,151433,30830],{"class":148},[142,151435,151436],{"class":1991}," from_dict",[142,151438,151439],{"class":152},"(cls, data):\n",[142,151441,151442,151444,151446],{"class":144,"line":1726},[142,151443,14781],{"class":148},[142,151445,151043],{"class":201},[142,151447,151448],{"class":152},"(\n",[142,151450,151451,151454,151457],{"class":144,"line":1755},[142,151452,151453],{"class":152},"            data[",[142,151455,151456],{"class":257},"\"student_id\"",[142,151458,87865],{"class":152},[142,151460,151461,151463,151465],{"class":144,"line":1760},[142,151462,151453],{"class":152},[142,151464,62708],{"class":257},[142,151466,87865],{"class":152},[142,151468,151469,151471,151473],{"class":144,"line":1777},[142,151470,151453],{"class":152},[142,151472,69153],{"class":257},[142,151474,87865],{"class":152},[142,151476,151477,151479,151482],{"class":144,"line":1782},[142,151478,151453],{"class":152},[142,151480,151481],{"class":257},"\"score\"",[142,151483,87865],{"class":152},[142,151485,151486],{"class":144,"line":1787},[142,151487,38155],{"class":152},[142,151489,151490],{"class":144,"line":1792},[142,151491,2428],{"emptyLinePlaceholder":69},[142,151493,151494,151496,151498],{"class":144,"line":1806},[142,151495,30830],{"class":148},[142,151497,149990],{"class":201},[142,151499,30836],{"class":152},[142,151501,151502,151504,151506,151508,151510,151513,151515,151518,151520,151522,151524,151526,151528,151530,151532,151534],{"class":144,"line":1811},[142,151503,14781],{"class":148},[142,151505,149999],{"class":148},[142,151507,404],{"class":257},[142,151509,149461],{"class":201},[142,151511,151512],{"class":152},".student_id",[142,151514,1099],{"class":201},[142,151516,151517],{"class":201}," {self",[142,151519,80330],{"class":152},[142,151521,1099],{"class":201},[142,151523,151517],{"class":201},[142,151525,80342],{"class":152},[142,151527,1099],{"class":201},[142,151529,151517],{"class":201},[142,151531,149871],{"class":152},[142,151533,1099],{"class":201},[142,151535,25162],{"class":257},[142,151537,151538],{"class":144,"line":2605},[142,151539,2428],{"emptyLinePlaceholder":69},[142,151541,151542],{"class":144,"line":2619},[142,151543,2428],{"emptyLinePlaceholder":69},[142,151545,151546,151548,151550,151552,151555,151557,151559,151561,151563,151565,151567],{"class":144,"line":2627},[142,151547,149490],{"class":152},[142,151549,198],{"class":148},[142,151551,149894],{"class":152},[142,151553,151554],{"class":257},"\"001\"",[142,151556,12464],{"class":152},[142,151558,149897],{"class":257},[142,151560,12464],{"class":152},[142,151562,803],{"class":201},[142,151564,12464],{"class":152},[142,151566,1142],{"class":201},[142,151568,159],{"class":152},[142,151570,151571,151573],{"class":144,"line":2632},[142,151572,30444],{"class":201},[142,151574,151575],{"class":152},"(student.is_passed())\n",[142,151577,151578,151580],{"class":144,"line":2638},[142,151579,30444],{"class":201},[142,151581,151582],{"class":152},"(student.to_dict())\n",[14,151584,151585,101027,151588,151591],{},[139,151586,151587],{},"to_dict()",[139,151589,151590],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[84,151593,151595],{"id":151594},"_1116-易错点","11.16 易错点",[96,151597,151598,151604,151610,151615,151618,151621],{},[99,151599,151600,151601,28414],{},"类名推荐使用大驼峰，如 ",[139,151602,151603],{},"StudentManager",[99,151605,151606,151607,151609],{},"方法第一个参数必须写 ",[139,151608,30852],{},"，调用时不用传。",[99,151611,151612,151614],{},[139,151613,30858],{}," 不是普通方法，它在创建对象时自动执行。",[99,151616,151617],{},"私有属性不是绝对安全，只是约定和名称改写。",[99,151619,151620],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[99,151622,151623],{},"类中方法太多时，说明职责可能过重。",[84,151625,151627],{"id":151626},"_1117-本章练习","11.17 本章练习",[96,151629,151630,151636,151642,151647,151660],{},[99,151631,151632,151633,151635],{},"定义 ",[139,151634,149577],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[99,151637,151632,151638,151641],{},[139,151639,151640],{},"Account"," 类，实现存款、取款、查询余额。",[99,151643,151632,151644,151646],{},[139,151645,17255],{}," 类，计算圆的周长和面积。",[99,151648,151632,151649,365,151652,151655,151656,151659],{},[139,151650,151651],{},"Dog",[139,151653,151654],{},"Cat"," 类，并用同一个函数调用它们的 ",[139,151657,151658],{},"speak()"," 方法。",[99,151661,104375,151662,151664,151665,28414],{},[139,151663,151148],{}," 定义一个商品类 ",[139,151666,151667],{},"Product",[5155,151669,151670],{},"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":31,"searchDepth":64,"depth":64,"links":151672},[151673,151674,151675,151676,151677,151678,151680,151681,151682,151683,151684,151685,151686,151690,151691,151692,151693],{"id":149341,"depth":64,"text":149342},{"id":149524,"depth":64,"text":149525},{"id":149588,"depth":64,"text":149589},{"id":149665,"depth":64,"text":149666},{"id":149764,"depth":64,"text":149765},{"id":149928,"depth":64,"text":151679},"11.6 str",{"id":150054,"depth":64,"text":150055},{"id":150320,"depth":64,"text":150321},{"id":150434,"depth":64,"text":150435},{"id":150589,"depth":64,"text":150590},{"id":150713,"depth":64,"text":150714},{"id":150829,"depth":64,"text":150830},{"id":150978,"depth":64,"text":150979,"children":151687},[151688,151689],{"id":150982,"depth":1208,"text":150983},{"id":151064,"depth":1208,"text":151065},{"id":151142,"depth":64,"text":151143},{"id":151257,"depth":64,"text":151258},{"id":151594,"depth":64,"text":151595},{"id":151626,"depth":64,"text":151627},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149333,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151700,"title":151701,"body":151702,"description":66,"extension":67,"meta":155015,"navigation":69,"path":155016,"seo":155017,"stem":155018,"__hash__":155019},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151703,"toc":154991},[151704,151707,151711,151714,151717,151746,151749,151757,151761,151765,151768,151791,151794,151800,151804,153250,153253,153274,153278,153281,153293,153296,153480,153483,153609,153612,153616,153620,153756,153760,153846,153850,153932,153936,153973,153977,154166,154170,154173,154403,154407,154410,154591,154594,154598,154601,154607,154610,154636,154640,154643,154657,154660,154685,154688,154702,154705,154722,154725,154742,154745,154762,154766,154792,154796,154819,154823,154826,154828,154834,154836,154857,154860,154866,154872,154876,154879,154955,154958,154962,154988],[10,151705,151701],{"id":151706},"_12-综合案例与复习路线",[84,151708,151710],{"id":151709},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151712,151713],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151715,151716],{},"一个合格的入门综合项目最好覆盖：",[96,151718,151719,151722,151725,151728,151731,151734,151737,151740,151743],{},[99,151720,151721],{},"输入输出。",[99,151723,151724],{},"判断和循环。",[99,151726,151727],{},"函数拆分。",[99,151729,151730],{},"列表、字典等容器。",[99,151732,151733],{},"文件持久化。",[99,151735,151736],{},"异常处理。",[99,151738,151739],{},"模块拆分。",[99,151741,151742],{},"可选：面向对象。",[99,151744,151745],{},"可选：数据可视化。",[14,151747,151748],{},"本章整理两个方向：",[96,151750,151751,151754],{},[99,151752,151753],{},"学生管理系统。",[99,151755,151756],{},"销售数据统计和可视化。",[84,151758,151760],{"id":151759},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[113,151762,151764],{"id":151763},"_1221-需求","12.2.1 需求",[14,151766,151767],{},"实现一个命令行学生管理系统：",[96,151769,151770,151773,151776,151779,151782,151785,151788],{},[99,151771,151772],{},"添加学生。",[99,151774,151775],{},"删除学生。",[99,151777,151778],{},"修改学生。",[99,151780,151781],{},"查询学生。",[99,151783,151784],{},"显示所有学生。",[99,151786,151787],{},"保存到 JSON 文件。",[99,151789,151790],{},"程序启动时自动读取 JSON 文件。",[14,151792,151793],{},"学生字段：",[133,151795,151798],{"className":151796,"code":151797,"language":5216,"meta":31},[5214],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[139,151799,151797],{"__ignoreMap":31},[84,151801,151803],{"id":151802},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[133,151805,151807],{"className":30407,"code":151806,"language":30409,"meta":31,"style":31},"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",[139,151808,151809,151815,151825,151829,151843,151847,151851,151860,151872,151878,151882,151888,151919,151929,151936,151947,151953,151957,151961,151971,152002,152028,152032,152036,152045,152056,152067,152078,152089,152100,152111,152122,152126,152130,152140,152152,152168,152175,152182,152186,152190,152200,152208,152215,152228,152238,152249,152253,152257,152266,152274,152280,152292,152300,152311,152315,152319,152328,152344,152348,152355,152366,152371,152375,152391,152406,152421,152425,152430,152438,152446,152454,152462,152466,152471,152482,152486,152490,152499,152514,152524,152528,152540,152551,152555,152559,152564,152568,152579,152583,152587,152596,152611,152619,152623,152635,152645,152649,152653,152668,152681,152694,152698,152711,152723,152735,152739,152743,152754,152758,152762,152771,152786,152794,152798,152810,152820,152824,152828,152833,152837,152841,152851,152857,152879,152898,152917,152936,152941,152945,152949,152958,152966,152977,152981,152985,153011,153021,153026,153030,153034,153042,153052,153056,153064,153069,153085,153089,153103,153108,153122,153127,153140,153145,153158,153163,153176,153181,153194,153205,153209,153215,153226,153230,153234,153246],{"__ignoreMap":31},[142,151810,151811,151813],{"class":144,"line":145},[142,151812,30421],{"class":148},[142,151814,147100],{"class":152},[142,151816,151817,151819,151821,151823],{"class":144,"line":64},[142,151818,30766],{"class":148},[142,151820,108320],{"class":152},[142,151822,30421],{"class":148},[142,151824,108325],{"class":152},[142,151826,151827],{"class":144,"line":1208},[142,151828,2428],{"emptyLinePlaceholder":69},[142,151830,151831,151834,151836,151838,151841],{"class":144,"line":1223},[142,151832,151833],{"class":201},"DATA_FILE",[142,151835,13593],{"class":148},[142,151837,108554],{"class":152},[142,151839,151840],{"class":257},"\"students.json\"",[142,151842,159],{"class":152},[142,151844,151845],{"class":144,"line":1229},[142,151846,2428],{"emptyLinePlaceholder":69},[142,151848,151849],{"class":144,"line":1243},[142,151850,2428],{"emptyLinePlaceholder":69},[142,151852,151853,151855,151858],{"class":144,"line":1249},[142,151854,31976],{"class":148},[142,151856,151857],{"class":1991}," load_students",[142,151859,31982],{"class":152},[142,151861,151862,151864,151866,151869],{"class":144,"line":1340},[142,151863,3129],{"class":148},[142,151865,38959],{"class":148},[142,151867,151868],{"class":201}," DATA_FILE",[142,151870,151871],{"class":152},".exists():\n",[142,151873,151874,151876],{"class":144,"line":1346},[142,151875,14781],{"class":148},[142,151877,51867],{"class":152},[142,151879,151880],{"class":144,"line":1358},[142,151881,2428],{"emptyLinePlaceholder":69},[142,151883,151884,151886],{"class":144,"line":1640},[142,151885,125793],{"class":148},[142,151887,3767],{"class":152},[142,151889,151890,151893,151895,151897,151899,151901,151903,151905,151907,151909,151911,151913,151915,151917],{"class":144,"line":1645},[142,151891,151892],{"class":148},"        with",[142,151894,146800],{"class":201},[142,151896,153],{"class":152},[142,151898,151833],{"class":201},[142,151900,12464],{"class":152},[142,151902,146810],{"class":257},[142,151904,12464],{"class":152},[142,151906,146815],{"class":5245},[142,151908,198],{"class":148},[142,151910,146820],{"class":257},[142,151912,13743],{"class":152},[142,151914,31412],{"class":148},[142,151916,148162],{"class":5245},[142,151918,3767],{"class":152},[142,151920,151921,151923,151925,151927],{"class":144,"line":1651},[142,151922,15761],{"class":148},[142,151924,148173],{"class":152},[142,151926,45383],{"class":5245},[142,151928,159],{"class":152},[142,151930,151931,151933],{"class":144,"line":1656},[142,151932,125821],{"class":148},[142,151934,151935],{"class":152}," json.JSONDecodeError:\n",[142,151937,151938,151940,151942,151945],{"class":144,"line":1670},[142,151939,32480],{"class":201},[142,151941,153],{"class":152},[142,151943,151944],{"class":257},"\"数据文件格式错误，已使用空数据启动\"",[142,151946,159],{"class":152},[142,151948,151949,151951],{"class":144,"line":1675},[142,151950,14781],{"class":148},[142,151952,51867],{"class":152},[142,151954,151955],{"class":144,"line":1681},[142,151956,2428],{"emptyLinePlaceholder":69},[142,151958,151959],{"class":144,"line":1702},[142,151960,2428],{"emptyLinePlaceholder":69},[142,151962,151963,151965,151968],{"class":144,"line":1707},[142,151964,31976],{"class":148},[142,151966,151967],{"class":1991}," save_students",[142,151969,151970],{"class":152},"(students):\n",[142,151972,151973,151975,151977,151979,151981,151983,151986,151988,151990,151992,151994,151996,151998,152000],{"class":144,"line":1721},[142,151974,34207],{"class":148},[142,151976,146800],{"class":201},[142,151978,153],{"class":152},[142,151980,151833],{"class":201},[142,151982,12464],{"class":152},[142,151984,151985],{"class":257},"\"w\"",[142,151987,12464],{"class":152},[142,151989,146815],{"class":5245},[142,151991,198],{"class":148},[142,151993,146820],{"class":257},[142,151995,13743],{"class":152},[142,151997,31412],{"class":148},[142,151999,148162],{"class":5245},[142,152001,3767],{"class":152},[142,152003,152004,152007,152009,152011,152013,152015,152017,152019,152022,152024,152026],{"class":144,"line":1726},[142,152005,152006],{"class":152},"        json.dump(students, ",[142,152008,45383],{"class":5245},[142,152010,12464],{"class":152},[142,152012,147146],{"class":5245},[142,152014,198],{"class":148},[142,152016,34016],{"class":201},[142,152018,12464],{"class":152},[142,152020,152021],{"class":5245},"indent",[142,152023,198],{"class":148},[142,152025,230],{"class":201},[142,152027,159],{"class":152},[142,152029,152030],{"class":144,"line":1755},[142,152031,2428],{"emptyLinePlaceholder":69},[142,152033,152034],{"class":144,"line":1760},[142,152035,2428],{"emptyLinePlaceholder":69},[142,152037,152038,152040,152043],{"class":144,"line":1777},[142,152039,31976],{"class":148},[142,152041,152042],{"class":1991}," show_menu",[142,152044,31982],{"class":152},[142,152046,152047,152049,152051,152054],{"class":144,"line":1782},[142,152048,31328],{"class":201},[142,152050,153],{"class":152},[142,152052,152053],{"class":257},"\"====== 学生管理系统 ======\"",[142,152055,159],{"class":152},[142,152057,152058,152060,152062,152065],{"class":144,"line":1787},[142,152059,31328],{"class":201},[142,152061,153],{"class":152},[142,152063,152064],{"class":257},"\"1. 添加学生\"",[142,152066,159],{"class":152},[142,152068,152069,152071,152073,152076],{"class":144,"line":1792},[142,152070,31328],{"class":201},[142,152072,153],{"class":152},[142,152074,152075],{"class":257},"\"2. 删除学生\"",[142,152077,159],{"class":152},[142,152079,152080,152082,152084,152087],{"class":144,"line":1806},[142,152081,31328],{"class":201},[142,152083,153],{"class":152},[142,152085,152086],{"class":257},"\"3. 修改学生\"",[142,152088,159],{"class":152},[142,152090,152091,152093,152095,152098],{"class":144,"line":1811},[142,152092,31328],{"class":201},[142,152094,153],{"class":152},[142,152096,152097],{"class":257},"\"4. 查询学生\"",[142,152099,159],{"class":152},[142,152101,152102,152104,152106,152109],{"class":144,"line":2605},[142,152103,31328],{"class":201},[142,152105,153],{"class":152},[142,152107,152108],{"class":257},"\"5. 显示所有学生\"",[142,152110,159],{"class":152},[142,152112,152113,152115,152117,152120],{"class":144,"line":2619},[142,152114,31328],{"class":201},[142,152116,153],{"class":152},[142,152118,152119],{"class":257},"\"0. 退出系统\"",[142,152121,159],{"class":152},[142,152123,152124],{"class":144,"line":2627},[142,152125,2428],{"emptyLinePlaceholder":69},[142,152127,152128],{"class":144,"line":2632},[142,152129,2428],{"emptyLinePlaceholder":69},[142,152131,152132,152134,152137],{"class":144,"line":2638},[142,152133,31976],{"class":148},[142,152135,152136],{"class":1991}," find_student",[142,152138,152139],{"class":152},"(students, student_id):\n",[142,152141,152142,152144,152147,152149],{"class":144,"line":2644},[142,152143,3229],{"class":148},[142,152145,152146],{"class":152}," student ",[142,152148,26072],{"class":148},[142,152150,152151],{"class":152}," students:\n",[142,152153,152154,152156,152159,152161,152163,152165],{"class":144,"line":2649},[142,152155,2525],{"class":148},[142,152157,152158],{"class":152}," student[",[142,152160,151456],{"class":257},[142,152162,4471],{"class":152},[142,152164,2977],{"class":148},[142,152166,152167],{"class":152}," student_id:\n",[142,152169,152170,152172],{"class":144,"line":7977},[142,152171,15761],{"class":148},[142,152173,152174],{"class":152}," student\n",[142,152176,152177,152179],{"class":144,"line":8001},[142,152178,4118],{"class":148},[142,152180,152181],{"class":201}," None\n",[142,152183,152184],{"class":144,"line":8006},[142,152185,2428],{"emptyLinePlaceholder":69},[142,152187,152188],{"class":144,"line":8012},[142,152189,2428],{"emptyLinePlaceholder":69},[142,152191,152192,152194,152197],{"class":144,"line":8039},[142,152193,31976],{"class":148},[142,152195,152196],{"class":1991}," input_int",[142,152198,152199],{"class":152},"(prompt):\n",[142,152201,152202,152204,152206],{"class":144,"line":8044},[142,152203,2279],{"class":148},[142,152205,95301],{"class":201},[142,152207,3767],{"class":152},[142,152209,152210,152213],{"class":144,"line":8050},[142,152211,152212],{"class":148},"        try",[142,152214,3767],{"class":152},[142,152216,152217,152219,152221,152223,152225],{"class":144,"line":8062},[142,152218,15761],{"class":148},[142,152220,2410],{"class":201},[142,152222,153],{"class":152},[142,152224,53850],{"class":201},[142,152226,152227],{"class":152},"(prompt))\n",[142,152229,152230,152233,152236],{"class":144,"line":8074},[142,152231,152232],{"class":148},"        except",[142,152234,152235],{"class":201}," ValueError",[142,152237,3767],{"class":152},[142,152239,152240,152242,152244,152247],{"class":144,"line":8086},[142,152241,34679],{"class":201},[142,152243,153],{"class":152},[142,152245,152246],{"class":257},"\"请输入整数\"",[142,152248,159],{"class":152},[142,152250,152251],{"class":144,"line":9745},[142,152252,2428],{"emptyLinePlaceholder":69},[142,152254,152255],{"class":144,"line":9770},[142,152256,2428],{"emptyLinePlaceholder":69},[142,152258,152259,152261,152264],{"class":144,"line":9793},[142,152260,31976],{"class":148},[142,152262,152263],{"class":1991}," input_float",[142,152265,152199],{"class":152},[142,152267,152268,152270,152272],{"class":144,"line":9817},[142,152269,2279],{"class":148},[142,152271,95301],{"class":201},[142,152273,3767],{"class":152},[142,152275,152276,152278],{"class":144,"line":9822},[142,152277,152212],{"class":148},[142,152279,3767],{"class":152},[142,152281,152282,152284,152286,152288,152290],{"class":144,"line":9827},[142,152283,15761],{"class":148},[142,152285,109806],{"class":201},[142,152287,153],{"class":152},[142,152289,53850],{"class":201},[142,152291,152227],{"class":152},[142,152293,152294,152296,152298],{"class":144,"line":9832},[142,152295,152232],{"class":148},[142,152297,152235],{"class":201},[142,152299,3767],{"class":152},[142,152301,152302,152304,152306,152309],{"class":144,"line":9841},[142,152303,34679],{"class":201},[142,152305,153],{"class":152},[142,152307,152308],{"class":257},"\"请输入数字\"",[142,152310,159],{"class":152},[142,152312,152313],{"class":144,"line":9846},[142,152314,2428],{"emptyLinePlaceholder":69},[142,152316,152317],{"class":144,"line":9852},[142,152318,2428],{"emptyLinePlaceholder":69},[142,152320,152321,152323,152326],{"class":144,"line":9873},[142,152322,31976],{"class":148},[142,152324,152325],{"class":1991}," add_student",[142,152327,151970],{"class":152},[142,152329,152330,152333,152335,152337,152339,152342],{"class":144,"line":9879},[142,152331,152332],{"class":152},"    student_id ",[142,152334,198],{"class":148},[142,152336,60634],{"class":201},[142,152338,153],{"class":152},[142,152340,152341],{"class":257},"\"请输入学号:\"",[142,152343,159],{"class":152},[142,152345,152346],{"class":144,"line":9893},[142,152347,2428],{"emptyLinePlaceholder":69},[142,152349,152350,152352],{"class":144,"line":9899},[142,152351,3129],{"class":148},[142,152353,152354],{"class":152}," find_student(students, student_id):\n",[142,152356,152357,152359,152361,152364],{"class":144,"line":9926},[142,152358,32480],{"class":201},[142,152360,153],{"class":152},[142,152362,152363],{"class":257},"\"学号已存在\"",[142,152365,159],{"class":152},[142,152367,152368],{"class":144,"line":9935},[142,152369,152370],{"class":148},"        return\n",[142,152372,152373],{"class":144,"line":9941},[142,152374,2428],{"emptyLinePlaceholder":69},[142,152376,152377,152380,152382,152384,152386,152389],{"class":144,"line":9949},[142,152378,152379],{"class":152},"    name ",[142,152381,198],{"class":148},[142,152383,60634],{"class":201},[142,152385,153],{"class":152},[142,152387,152388],{"class":257},"\"请输入姓名:\"",[142,152390,159],{"class":152},[142,152392,152393,152396,152398,152401,152404],{"class":144,"line":9954},[142,152394,152395],{"class":152},"    age ",[142,152397,198],{"class":148},[142,152399,152400],{"class":152}," input_int(",[142,152402,152403],{"class":257},"\"请输入年龄:\"",[142,152405,159],{"class":152},[142,152407,152408,152411,152413,152416,152419],{"class":144,"line":16633},[142,152409,152410],{"class":152},"    score ",[142,152412,198],{"class":148},[142,152414,152415],{"class":152}," input_float(",[142,152417,152418],{"class":257},"\"请输入成绩:\"",[142,152420,159],{"class":152},[142,152422,152423],{"class":144,"line":16639},[142,152424,2428],{"emptyLinePlaceholder":69},[142,152426,152427],{"class":144,"line":16662},[142,152428,152429],{"class":152},"    students.append({\n",[142,152431,152432,152435],{"class":144,"line":16668},[142,152433,152434],{"class":257},"        \"student_id\"",[142,152436,152437],{"class":152},": student_id,\n",[142,152439,152440,152443],{"class":144,"line":16691},[142,152441,152442],{"class":257},"        \"name\"",[142,152444,152445],{"class":152},": name,\n",[142,152447,152448,152451],{"class":144,"line":16705},[142,152449,152450],{"class":257},"        \"age\"",[142,152452,152453],{"class":152},": age,\n",[142,152455,152456,152459],{"class":144,"line":16725},[142,152457,152458],{"class":257},"        \"score\"",[142,152460,152461],{"class":152},": score,\n",[142,152463,152464],{"class":144,"line":16731},[142,152465,33490],{"class":152},[142,152467,152468],{"class":144,"line":16742},[142,152469,152470],{"class":152},"    save_students(students)\n",[142,152472,152473,152475,152477,152480],{"class":144,"line":16765},[142,152474,31328],{"class":201},[142,152476,153],{"class":152},[142,152478,152479],{"class":257},"\"添加成功\"",[142,152481,159],{"class":152},[142,152483,152484],{"class":144,"line":16787},[142,152485,2428],{"emptyLinePlaceholder":69},[142,152487,152488],{"class":144,"line":16792},[142,152489,2428],{"emptyLinePlaceholder":69},[142,152491,152492,152494,152497],{"class":144,"line":16798},[142,152493,31976],{"class":148},[142,152495,152496],{"class":1991}," delete_student",[142,152498,151970],{"class":152},[142,152500,152501,152503,152505,152507,152509,152512],{"class":144,"line":16812},[142,152502,152332],{"class":152},[142,152504,198],{"class":148},[142,152506,60634],{"class":201},[142,152508,153],{"class":152},[142,152510,152511],{"class":257},"\"请输入要删除的学号:\"",[142,152513,159],{"class":152},[142,152515,152516,152519,152521],{"class":144,"line":16825},[142,152517,152518],{"class":152},"    student ",[142,152520,198],{"class":148},[142,152522,152523],{"class":152}," find_student(students, student_id)\n",[142,152525,152526],{"class":144,"line":16830},[142,152527,2428],{"emptyLinePlaceholder":69},[142,152529,152530,152532,152534,152536,152538],{"class":144,"line":16844},[142,152531,3129],{"class":148},[142,152533,152146],{"class":152},[142,152535,38956],{"class":148},[142,152537,38962],{"class":201},[142,152539,3767],{"class":152},[142,152541,152542,152544,152546,152549],{"class":144,"line":16849},[142,152543,32480],{"class":201},[142,152545,153],{"class":152},[142,152547,152548],{"class":257},"\"学生不存在\"",[142,152550,159],{"class":152},[142,152552,152553],{"class":144,"line":16855},[142,152554,152370],{"class":148},[142,152556,152557],{"class":144,"line":16860},[142,152558,2428],{"emptyLinePlaceholder":69},[142,152560,152561],{"class":144,"line":16874},[142,152562,152563],{"class":152},"    students.remove(student)\n",[142,152565,152566],{"class":144,"line":16879},[142,152567,152470],{"class":152},[142,152569,152570,152572,152574,152577],{"class":144,"line":16884},[142,152571,31328],{"class":201},[142,152573,153],{"class":152},[142,152575,152576],{"class":257},"\"删除成功\"",[142,152578,159],{"class":152},[142,152580,152581],{"class":144,"line":16898},[142,152582,2428],{"emptyLinePlaceholder":69},[142,152584,152585],{"class":144,"line":16910},[142,152586,2428],{"emptyLinePlaceholder":69},[142,152588,152589,152591,152594],{"class":144,"line":16915},[142,152590,31976],{"class":148},[142,152592,152593],{"class":1991}," update_student",[142,152595,151970],{"class":152},[142,152597,152598,152600,152602,152604,152606,152609],{"class":144,"line":16928},[142,152599,152332],{"class":152},[142,152601,198],{"class":148},[142,152603,60634],{"class":201},[142,152605,153],{"class":152},[142,152607,152608],{"class":257},"\"请输入要修改的学号:\"",[142,152610,159],{"class":152},[142,152612,152613,152615,152617],{"class":144,"line":16933},[142,152614,152518],{"class":152},[142,152616,198],{"class":148},[142,152618,152523],{"class":152},[142,152620,152621],{"class":144,"line":16938},[142,152622,2428],{"emptyLinePlaceholder":69},[142,152624,152625,152627,152629,152631,152633],{"class":144,"line":16943},[142,152626,3129],{"class":148},[142,152628,152146],{"class":152},[142,152630,38956],{"class":148},[142,152632,38962],{"class":201},[142,152634,3767],{"class":152},[142,152636,152637,152639,152641,152643],{"class":144,"line":16956},[142,152638,32480],{"class":201},[142,152640,153],{"class":152},[142,152642,152548],{"class":257},[142,152644,159],{"class":152},[142,152646,152647],{"class":144,"line":16961},[142,152648,152370],{"class":148},[142,152650,152651],{"class":144,"line":32662},[142,152652,2428],{"emptyLinePlaceholder":69},[142,152654,152655,152657,152659,152661,152663,152666],{"class":144,"line":32668},[142,152656,152379],{"class":152},[142,152658,198],{"class":148},[142,152660,60634],{"class":201},[142,152662,153],{"class":152},[142,152664,152665],{"class":257},"\"请输入新姓名:\"",[142,152667,159],{"class":152},[142,152669,152670,152672,152674,152676,152679],{"class":144,"line":32674},[142,152671,152395],{"class":152},[142,152673,198],{"class":148},[142,152675,152400],{"class":152},[142,152677,152678],{"class":257},"\"请输入新年龄:\"",[142,152680,159],{"class":152},[142,152682,152683,152685,152687,152689,152692],{"class":144,"line":32680},[142,152684,152410],{"class":152},[142,152686,198],{"class":148},[142,152688,152415],{"class":152},[142,152690,152691],{"class":257},"\"请输入新成绩:\"",[142,152693,159],{"class":152},[142,152695,152696],{"class":144,"line":32686},[142,152697,2428],{"emptyLinePlaceholder":69},[142,152699,152700,152703,152705,152707,152709],{"class":144,"line":32697},[142,152701,152702],{"class":152},"    student[",[142,152704,62708],{"class":257},[142,152706,4471],{"class":152},[142,152708,198],{"class":148},[142,152710,149804],{"class":152},[142,152712,152713,152715,152717,152719,152721],{"class":144,"line":32703},[142,152714,152702],{"class":152},[142,152716,69153],{"class":257},[142,152718,4471],{"class":152},[142,152720,198],{"class":148},[142,152722,149816],{"class":152},[142,152724,152725,152727,152729,152731,152733],{"class":144,"line":32723},[142,152726,152702],{"class":152},[142,152728,151481],{"class":257},[142,152730,4471],{"class":152},[142,152732,198],{"class":148},[142,152734,1607],{"class":152},[142,152736,152737],{"class":144,"line":32729},[142,152738,2428],{"emptyLinePlaceholder":69},[142,152740,152741],{"class":144,"line":32740},[142,152742,152470],{"class":152},[142,152744,152745,152747,152749,152752],{"class":144,"line":32746},[142,152746,31328],{"class":201},[142,152748,153],{"class":152},[142,152750,152751],{"class":257},"\"修改成功\"",[142,152753,159],{"class":152},[142,152755,152756],{"class":144,"line":32752},[142,152757,2428],{"emptyLinePlaceholder":69},[142,152759,152760],{"class":144,"line":32758},[142,152761,2428],{"emptyLinePlaceholder":69},[142,152763,152764,152766,152769],{"class":144,"line":32764},[142,152765,31976],{"class":148},[142,152767,152768],{"class":1991}," query_student",[142,152770,151970],{"class":152},[142,152772,152773,152775,152777,152779,152781,152784],{"class":144,"line":32770},[142,152774,152332],{"class":152},[142,152776,198],{"class":148},[142,152778,60634],{"class":201},[142,152780,153],{"class":152},[142,152782,152783],{"class":257},"\"请输入要查询的学号:\"",[142,152785,159],{"class":152},[142,152787,152788,152790,152792],{"class":144,"line":32776},[142,152789,152518],{"class":152},[142,152791,198],{"class":148},[142,152793,152523],{"class":152},[142,152795,152796],{"class":144,"line":32782},[142,152797,2428],{"emptyLinePlaceholder":69},[142,152799,152800,152802,152804,152806,152808],{"class":144,"line":32802},[142,152801,3129],{"class":148},[142,152803,152146],{"class":152},[142,152805,38956],{"class":148},[142,152807,38962],{"class":201},[142,152809,3767],{"class":152},[142,152811,152812,152814,152816,152818],{"class":144,"line":32808},[142,152813,32480],{"class":201},[142,152815,153],{"class":152},[142,152817,152548],{"class":257},[142,152819,159],{"class":152},[142,152821,152822],{"class":144,"line":32824},[142,152823,152370],{"class":148},[142,152825,152826],{"class":144,"line":32830},[142,152827,2428],{"emptyLinePlaceholder":69},[142,152829,152830],{"class":144,"line":32844},[142,152831,152832],{"class":152},"    print_student(student)\n",[142,152834,152835],{"class":144,"line":32850},[142,152836,2428],{"emptyLinePlaceholder":69},[142,152838,152839],{"class":144,"line":32865},[142,152840,2428],{"emptyLinePlaceholder":69},[142,152842,152843,152845,152848],{"class":144,"line":32871},[142,152844,31976],{"class":148},[142,152846,152847],{"class":1991}," print_student",[142,152849,152850],{"class":152},"(student):\n",[142,152852,152853,152855],{"class":144,"line":32880},[142,152854,31328],{"class":201},[142,152856,151448],{"class":152},[142,152858,152859,152862,152864,152866,152869,152872,152874,152877],{"class":144,"line":32886},[142,152860,152861],{"class":148},"        f",[142,152863,404],{"class":257},[142,152865,1049],{"class":201},[142,152867,152868],{"class":152},"student[",[142,152870,152871],{"class":257},"'student_id'",[142,152873,1093],{"class":152},[142,152875,152876],{"class":201},"}\\t",[142,152878,25162],{"class":257},[142,152880,152881,152883,152885,152887,152889,152892,152894,152896],{"class":144,"line":32895},[142,152882,152861],{"class":148},[142,152884,404],{"class":257},[142,152886,1049],{"class":201},[142,152888,152868],{"class":152},[142,152890,152891],{"class":257},"'name'",[142,152893,1093],{"class":152},[142,152895,152876],{"class":201},[142,152897,25162],{"class":257},[142,152899,152900,152902,152904,152906,152908,152911,152913,152915],{"class":144,"line":32901},[142,152901,152861],{"class":148},[142,152903,404],{"class":257},[142,152905,1049],{"class":201},[142,152907,152868],{"class":152},[142,152909,152910],{"class":257},"'age'",[142,152912,1093],{"class":152},[142,152914,152876],{"class":201},[142,152916,25162],{"class":257},[142,152918,152919,152921,152923,152925,152927,152930,152932,152934],{"class":144,"line":32907},[142,152920,152861],{"class":148},[142,152922,404],{"class":257},[142,152924,1049],{"class":201},[142,152926,152868],{"class":152},[142,152928,152929],{"class":257},"'score'",[142,152931,1093],{"class":152},[142,152933,1099],{"class":201},[142,152935,25162],{"class":257},[142,152937,152938],{"class":144,"line":32916},[142,152939,152940],{"class":152},"    )\n",[142,152942,152943],{"class":144,"line":32922},[142,152944,2428],{"emptyLinePlaceholder":69},[142,152946,152947],{"class":144,"line":32933},[142,152948,2428],{"emptyLinePlaceholder":69},[142,152950,152951,152953,152956],{"class":144,"line":32939},[142,152952,31976],{"class":148},[142,152954,152955],{"class":1991}," show_all_students",[142,152957,151970],{"class":152},[142,152959,152960,152962,152964],{"class":144,"line":32958},[142,152961,3129],{"class":148},[142,152963,38959],{"class":148},[142,152965,152151],{"class":152},[142,152967,152968,152970,152972,152975],{"class":144,"line":32964},[142,152969,32480],{"class":201},[142,152971,153],{"class":152},[142,152973,152974],{"class":257},"\"暂无学生\"",[142,152976,159],{"class":152},[142,152978,152979],{"class":144,"line":32975},[142,152980,152370],{"class":148},[142,152982,152983],{"class":144,"line":32981},[142,152984,2428],{"emptyLinePlaceholder":69},[142,152986,152987,152989,152991,152994,152996,152999,153001,153004,153006,153009],{"class":144,"line":33001},[142,152988,31328],{"class":201},[142,152990,153],{"class":152},[142,152992,152993],{"class":257},"\"学号",[142,152995,1259],{"class":201},[142,152997,152998],{"class":257},"姓名",[142,153000,1259],{"class":201},[142,153002,153003],{"class":257},"年龄",[142,153005,1259],{"class":201},[142,153007,153008],{"class":257},"成绩\"",[142,153010,159],{"class":152},[142,153012,153013,153015,153017,153019],{"class":144,"line":33017},[142,153014,3229],{"class":148},[142,153016,152146],{"class":152},[142,153018,26072],{"class":148},[142,153020,152151],{"class":152},[142,153022,153023],{"class":144,"line":33023},[142,153024,153025],{"class":152},"        print_student(student)\n",[142,153027,153028],{"class":144,"line":33037},[142,153029,2428],{"emptyLinePlaceholder":69},[142,153031,153032],{"class":144,"line":33043},[142,153033,2428],{"emptyLinePlaceholder":69},[142,153035,153036,153038,153040],{"class":144,"line":33049},[142,153037,31976],{"class":148},[142,153039,2001],{"class":1991},[142,153041,31982],{"class":152},[142,153043,153044,153047,153049],{"class":144,"line":33060},[142,153045,153046],{"class":152},"    students ",[142,153048,198],{"class":148},[142,153050,153051],{"class":152}," load_students()\n",[142,153053,153054],{"class":144,"line":33066},[142,153055,2428],{"emptyLinePlaceholder":69},[142,153057,153058,153060,153062],{"class":144,"line":33072},[142,153059,2279],{"class":148},[142,153061,95301],{"class":201},[142,153063,3767],{"class":152},[142,153065,153066],{"class":144,"line":33082},[142,153067,153068],{"class":152},"        show_menu()\n",[142,153070,153071,153074,153076,153078,153080,153083],{"class":144,"line":33088},[142,153072,153073],{"class":152},"        choice ",[142,153075,198],{"class":148},[142,153077,60634],{"class":201},[142,153079,153],{"class":152},[142,153081,153082],{"class":257},"\"请输入操作:\"",[142,153084,159],{"class":152},[142,153086,153087],{"class":144,"line":33099},[142,153088,2428],{"emptyLinePlaceholder":69},[142,153090,153091,153093,153096,153098,153101],{"class":144,"line":33105},[142,153092,2525],{"class":148},[142,153094,153095],{"class":152}," choice ",[142,153097,2977],{"class":148},[142,153099,153100],{"class":257}," \"1\"",[142,153102,3767],{"class":152},[142,153104,153105],{"class":144,"line":33115},[142,153106,153107],{"class":152},"            add_student(students)\n",[142,153109,153110,153113,153115,153117,153120],{"class":144,"line":33120},[142,153111,153112],{"class":148},"        elif",[142,153114,153095],{"class":152},[142,153116,2977],{"class":148},[142,153118,153119],{"class":257}," \"2\"",[142,153121,3767],{"class":152},[142,153123,153124],{"class":144,"line":33126},[142,153125,153126],{"class":152},"            delete_student(students)\n",[142,153128,153129,153131,153133,153135,153138],{"class":144,"line":33175},[142,153130,153112],{"class":148},[142,153132,153095],{"class":152},[142,153134,2977],{"class":148},[142,153136,153137],{"class":257}," \"3\"",[142,153139,3767],{"class":152},[142,153141,153142],{"class":144,"line":33222},[142,153143,153144],{"class":152},"            update_student(students)\n",[142,153146,153147,153149,153151,153153,153156],{"class":144,"line":33227},[142,153148,153112],{"class":148},[142,153150,153095],{"class":152},[142,153152,2977],{"class":148},[142,153154,153155],{"class":257}," \"4\"",[142,153157,3767],{"class":152},[142,153159,153160],{"class":144,"line":33233},[142,153161,153162],{"class":152},"            query_student(students)\n",[142,153164,153165,153167,153169,153171,153174],{"class":144,"line":33252},[142,153166,153112],{"class":148},[142,153168,153095],{"class":152},[142,153170,2977],{"class":148},[142,153172,153173],{"class":257}," \"5\"",[142,153175,3767],{"class":152},[142,153177,153178],{"class":144,"line":33258},[142,153179,153180],{"class":152},"            show_all_students(students)\n",[142,153182,153183,153185,153187,153189,153192],{"class":144,"line":33278},[142,153184,153112],{"class":148},[142,153186,153095],{"class":152},[142,153188,2977],{"class":148},[142,153190,153191],{"class":257}," \"0\"",[142,153193,3767],{"class":152},[142,153195,153196,153198,153200,153203],{"class":144,"line":33284},[142,153197,34679],{"class":201},[142,153199,153],{"class":152},[142,153201,153202],{"class":257},"\"退出系统\"",[142,153204,159],{"class":152},[142,153206,153207],{"class":144,"line":33290},[142,153208,115107],{"class":148},[142,153210,153211,153213],{"class":144,"line":33300},[142,153212,2562],{"class":148},[142,153214,3767],{"class":152},[142,153216,153217,153219,153221,153224],{"class":144,"line":33305},[142,153218,34679],{"class":201},[142,153220,153],{"class":152},[142,153222,153223],{"class":257},"\"输入错误\"",[142,153225,159],{"class":152},[142,153227,153228],{"class":144,"line":33311},[142,153229,2428],{"emptyLinePlaceholder":69},[142,153231,153232],{"class":144,"line":33327},[142,153233,2428],{"emptyLinePlaceholder":69},[142,153235,153236,153238,153240,153242,153244],{"class":144,"line":33372},[142,153237,1559],{"class":148},[142,153239,31249],{"class":201},[142,153241,101568],{"class":148},[142,153243,101571],{"class":257},[142,153245,3767],{"class":152},[142,153247,153248],{"class":144,"line":33378},[142,153249,101578],{"class":152},[14,153251,153252],{},"这个项目串联了：",[96,153254,153255,153258,153261,153264,153267,153269],{},[99,153256,153257],{},"菜单循环。",[99,153259,153260],{},"函数封装。",[99,153262,153263],{},"列表字典。",[99,153265,153266],{},"JSON 读写。",[99,153268,151736],{},[99,153270,153271,28414],{},[139,153272,153273],{},"if __name__ == \"__main__\"",[84,153275,153277],{"id":153276},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153279,153280],{},"可以进一步拆成两个类：",[96,153282,153283,153288],{},[99,153284,153285,153287],{},[139,153286,149577],{},"：表示单个学生。",[99,153289,153290,153292],{},[139,153291,151603],{},"：负责学生增删改查和文件保存。",[14,153294,153295],{},"示意代码：",[133,153297,153299],{"className":30407,"code":153298,"language":30409,"meta":31,"style":31},"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",[139,153300,153301,153311,153315,153319,153323,153331,153338,153344,153350,153356,153360,153368,153374,153384,153394,153404,153414,153418,153422,153428,153436,153444,153452,153460,153468,153476],{"__ignoreMap":31},[142,153302,153303,153305,153307,153309],{"class":144,"line":145},[142,153304,30766],{"class":148},[142,153306,151161],{"class":152},[142,153308,30421],{"class":148},[142,153310,151166],{"class":152},[142,153312,153313],{"class":144,"line":64},[142,153314,2428],{"emptyLinePlaceholder":69},[142,153316,153317],{"class":144,"line":1208},[142,153318,2428],{"emptyLinePlaceholder":69},[142,153320,153321],{"class":144,"line":1223},[142,153322,151179],{"class":1991},[142,153324,153325,153327,153329],{"class":144,"line":1229},[142,153326,14723],{"class":148},[142,153328,7927],{"class":1991},[142,153330,3767],{"class":152},[142,153332,153333,153336],{"class":144,"line":1243},[142,153334,153335],{"class":152},"    student_id: ",[142,153337,151195],{"class":201},[142,153339,153340,153342],{"class":144,"line":1249},[142,153341,151192],{"class":152},[142,153343,151195],{"class":201},[142,153345,153346,153348],{"class":144,"line":1340},[142,153347,151200],{"class":152},[142,153349,151203],{"class":201},[142,153351,153352,153354],{"class":144,"line":1346},[142,153353,151208],{"class":152},[142,153355,151211],{"class":201},[142,153357,153358],{"class":144,"line":1358},[142,153359,2428],{"emptyLinePlaceholder":69},[142,153361,153362,153364,153366],{"class":144,"line":1640},[142,153363,30830],{"class":148},[142,153365,151359],{"class":1991},[142,153367,30836],{"class":152},[142,153369,153370,153372],{"class":144,"line":1645},[142,153371,14781],{"class":148},[142,153373,15601],{"class":152},[142,153375,153376,153378,153380,153382],{"class":144,"line":1651},[142,153377,151372],{"class":257},[142,153379,51466],{"class":152},[142,153381,30852],{"class":201},[142,153383,151379],{"class":152},[142,153385,153386,153388,153390,153392],{"class":144,"line":1656},[142,153387,151384],{"class":257},[142,153389,51466],{"class":152},[142,153391,30852],{"class":201},[142,153393,151391],{"class":152},[142,153395,153396,153398,153400,153402],{"class":144,"line":1670},[142,153397,151396],{"class":257},[142,153399,51466],{"class":152},[142,153401,30852],{"class":201},[142,153403,151403],{"class":152},[142,153405,153406,153408,153410,153412],{"class":144,"line":1675},[142,153407,151408],{"class":257},[142,153409,51466],{"class":152},[142,153411,30852],{"class":201},[142,153413,151415],{"class":152},[142,153415,153416],{"class":144,"line":1681},[142,153417,2557],{"class":152},[142,153419,153420],{"class":144,"line":1702},[142,153421,2428],{"emptyLinePlaceholder":69},[142,153423,153424,153426],{"class":144,"line":1707},[142,153425,151023],{"class":1991},[142,153427,151026],{"class":201},[142,153429,153430,153432,153434],{"class":144,"line":1721},[142,153431,30830],{"class":148},[142,153433,151436],{"class":1991},[142,153435,151439],{"class":152},[142,153437,153438,153440,153442],{"class":144,"line":1726},[142,153439,14781],{"class":148},[142,153441,151043],{"class":201},[142,153443,151448],{"class":152},[142,153445,153446,153448,153450],{"class":144,"line":1755},[142,153447,151453],{"class":152},[142,153449,151456],{"class":257},[142,153451,87865],{"class":152},[142,153453,153454,153456,153458],{"class":144,"line":1760},[142,153455,151453],{"class":152},[142,153457,62708],{"class":257},[142,153459,87865],{"class":152},[142,153461,153462,153464,153466],{"class":144,"line":1777},[142,153463,151453],{"class":152},[142,153465,69153],{"class":257},[142,153467,87865],{"class":152},[142,153469,153470,153472,153474],{"class":144,"line":1782},[142,153471,151453],{"class":152},[142,153473,151481],{"class":257},[142,153475,87865],{"class":152},[142,153477,153478],{"class":144,"line":1787},[142,153479,38155],{"class":152},[14,153481,153482],{},"管理器示意：",[133,153484,153486],{"className":30407,"code":153485,"language":30409,"meta":31,"style":31},"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",[139,153487,153488,153497,153505,153516,153520,153530,153543,153554,153561,153567,153571,153580,153589,153595,153602],{"__ignoreMap":31},[142,153489,153490,153492,153495],{"class":144,"line":145},[142,153491,14723],{"class":148},[142,153493,153494],{"class":1991}," StudentManager",[142,153496,3767],{"class":152},[142,153498,153499,153501,153503],{"class":144,"line":64},[142,153500,30830],{"class":148},[142,153502,30833],{"class":201},[142,153504,30836],{"class":152},[142,153506,153507,153509,153512,153514],{"class":144,"line":1208},[142,153508,30874],{"class":201},[142,153510,153511],{"class":152},".students ",[142,153513,198],{"class":148},[142,153515,51867],{"class":152},[142,153517,153518],{"class":144,"line":1223},[142,153519,2428],{"emptyLinePlaceholder":69},[142,153521,153522,153524,153527],{"class":144,"line":1229},[142,153523,30830],{"class":148},[142,153525,153526],{"class":1991}," find_by_id",[142,153528,153529],{"class":152},"(self, student_id):\n",[142,153531,153532,153534,153536,153538,153540],{"class":144,"line":1243},[142,153533,3431],{"class":148},[142,153535,152146],{"class":152},[142,153537,26072],{"class":148},[142,153539,38902],{"class":201},[142,153541,153542],{"class":152},".students:\n",[142,153544,153545,153547,153550,153552],{"class":144,"line":1249},[142,153546,4670],{"class":148},[142,153548,153549],{"class":152}," student.student_id ",[142,153551,2977],{"class":148},[142,153553,152167],{"class":152},[142,153555,153556,153559],{"class":144,"line":1340},[142,153557,153558],{"class":148},"                return",[142,153560,152174],{"class":152},[142,153562,153563,153565],{"class":144,"line":1346},[142,153564,14781],{"class":148},[142,153566,152181],{"class":201},[142,153568,153569],{"class":144,"line":1358},[142,153570,2428],{"emptyLinePlaceholder":69},[142,153572,153573,153575,153577],{"class":144,"line":1640},[142,153574,30830],{"class":148},[142,153576,5238],{"class":1991},[142,153578,153579],{"class":152},"(self, student):\n",[142,153581,153582,153584,153586],{"class":144,"line":1645},[142,153583,2525],{"class":148},[142,153585,38902],{"class":201},[142,153587,153588],{"class":152},".find_by_id(student.student_id):\n",[142,153590,153591,153593],{"class":144,"line":1651},[142,153592,15761],{"class":148},[142,153594,125816],{"class":201},[142,153596,153597,153599],{"class":144,"line":1656},[142,153598,30874],{"class":201},[142,153600,153601],{"class":152},".students.append(student)\n",[142,153603,153604,153606],{"class":144,"line":1670},[142,153605,14781],{"class":148},[142,153607,153608],{"class":201}," True\n",[14,153610,153611],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[84,153613,153615],{"id":153614},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[113,153617,153619],{"id":153618},"_1251-数据结构","12.5.1 数据结构",[133,153621,153623],{"className":30407,"code":153622,"language":30409,"meta":31,"style":31},"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",[139,153624,153625,153633,153664,153694,153723,153752],{"__ignoreMap":31},[142,153626,153627,153629,153631],{"class":144,"line":145},[142,153628,148474],{"class":152},[142,153630,198],{"class":148},[142,153632,55476],{"class":152},[142,153634,153635,153637,153639,153641,153643,153645,153648,153650,153653,153655,153657,153659,153662],{"class":144,"line":64},[142,153636,148394],{"class":152},[142,153638,148006],{"class":257},[142,153640,51466],{"class":152},[142,153642,148617],{"class":257},[142,153644,12464],{"class":152},[142,153646,153647],{"class":257},"\"category\"",[142,153649,51466],{"class":152},[142,153651,153652],{"class":257},"\"手机\"",[142,153654,12464],{"class":152},[142,153656,84113],{"class":257},[142,153658,51466],{"class":152},[142,153660,153661],{"class":201},"12000",[142,153663,4958],{"class":152},[142,153665,153666,153668,153670,153672,153674,153676,153678,153680,153683,153685,153687,153689,153692],{"class":144,"line":1208},[142,153667,148394],{"class":152},[142,153669,148006],{"class":257},[142,153671,51466],{"class":152},[142,153673,148617],{"class":257},[142,153675,12464],{"class":152},[142,153677,153647],{"class":257},[142,153679,51466],{"class":152},[142,153681,153682],{"class":257},"\"电脑\"",[142,153684,12464],{"class":152},[142,153686,84113],{"class":257},[142,153688,51466],{"class":152},[142,153690,153691],{"class":201},"18000",[142,153693,4958],{"class":152},[142,153695,153696,153698,153700,153702,153704,153706,153708,153710,153712,153714,153716,153718,153721],{"class":144,"line":1223},[142,153697,148394],{"class":152},[142,153699,148006],{"class":257},[142,153701,51466],{"class":152},[142,153703,148638],{"class":257},[142,153705,12464],{"class":152},[142,153707,153647],{"class":257},[142,153709,51466],{"class":152},[142,153711,153652],{"class":257},[142,153713,12464],{"class":152},[142,153715,84113],{"class":257},[142,153717,51466],{"class":152},[142,153719,153720],{"class":201},"15000",[142,153722,4958],{"class":152},[142,153724,153725,153727,153729,153731,153733,153735,153737,153739,153741,153743,153745,153747,153750],{"class":144,"line":1229},[142,153726,148394],{"class":152},[142,153728,148006],{"class":257},[142,153730,51466],{"class":152},[142,153732,148638],{"class":257},[142,153734,12464],{"class":152},[142,153736,153647],{"class":257},[142,153738,51466],{"class":152},[142,153740,153682],{"class":257},[142,153742,12464],{"class":152},[142,153744,84113],{"class":257},[142,153746,51466],{"class":152},[142,153748,153749],{"class":201},"16000",[142,153751,4958],{"class":152},[142,153753,153754],{"class":144,"line":1243},[142,153755,33275],{"class":152},[113,153757,153759],{"id":153758},"_1252-按日期统计","12.5.2 按日期统计",[133,153761,153763],{"className":30407,"code":153762,"language":30409,"meta":31,"style":31},"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",[139,153764,153765,153774,153778,153789,153803,153816,153835,153839],{"__ignoreMap":31},[142,153766,153767,153770,153772],{"class":144,"line":145},[142,153768,153769],{"class":152},"daily_total ",[142,153771,198],{"class":148},[142,153773,87897],{"class":152},[142,153775,153776],{"class":144,"line":64},[142,153777,2428],{"emptyLinePlaceholder":69},[142,153779,153780,153782,153784,153786],{"class":144,"line":1208},[142,153781,3053],{"class":148},[142,153783,148218],{"class":152},[142,153785,26072],{"class":148},[142,153787,153788],{"class":152}," sales:\n",[142,153790,153791,153794,153796,153799,153801],{"class":144,"line":1223},[142,153792,153793],{"class":152},"    date ",[142,153795,198],{"class":148},[142,153797,153798],{"class":152}," item[",[142,153800,148006],{"class":257},[142,153802,33275],{"class":152},[142,153804,153805,153808,153810,153812,153814],{"class":144,"line":1229},[142,153806,153807],{"class":152},"    amount ",[142,153809,198],{"class":148},[142,153811,153798],{"class":152},[142,153813,84113],{"class":257},[142,153815,33275],{"class":152},[142,153817,153818,153821,153823,153826,153828,153830,153832],{"class":144,"line":1243},[142,153819,153820],{"class":152},"    daily_total[date] ",[142,153822,198],{"class":148},[142,153824,153825],{"class":152}," daily_total.get(date, ",[142,153827,344],{"class":201},[142,153829,13743],{"class":152},[142,153831,634],{"class":148},[142,153833,153834],{"class":152}," amount\n",[142,153836,153837],{"class":144,"line":1249},[142,153838,2428],{"emptyLinePlaceholder":69},[142,153840,153841,153843],{"class":144,"line":1340},[142,153842,30444],{"class":201},[142,153844,153845],{"class":152},"(daily_total)\n",[113,153847,153849],{"id":153848},"_1253-按类别统计","12.5.3 按类别统计",[133,153851,153853],{"className":30407,"code":153852,"language":30409,"meta":31,"style":31},"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",[139,153854,153855,153864,153868,153878,153891,153903,153921,153925],{"__ignoreMap":31},[142,153856,153857,153860,153862],{"class":144,"line":145},[142,153858,153859],{"class":152},"category_total ",[142,153861,198],{"class":148},[142,153863,87897],{"class":152},[142,153865,153866],{"class":144,"line":64},[142,153867,2428],{"emptyLinePlaceholder":69},[142,153869,153870,153872,153874,153876],{"class":144,"line":1208},[142,153871,3053],{"class":148},[142,153873,148218],{"class":152},[142,153875,26072],{"class":148},[142,153877,153788],{"class":152},[142,153879,153880,153883,153885,153887,153889],{"class":144,"line":1223},[142,153881,153882],{"class":152},"    category ",[142,153884,198],{"class":148},[142,153886,153798],{"class":152},[142,153888,153647],{"class":257},[142,153890,33275],{"class":152},[142,153892,153893,153895,153897,153899,153901],{"class":144,"line":1229},[142,153894,153807],{"class":152},[142,153896,198],{"class":148},[142,153898,153798],{"class":152},[142,153900,84113],{"class":257},[142,153902,33275],{"class":152},[142,153904,153905,153908,153910,153913,153915,153917,153919],{"class":144,"line":1243},[142,153906,153907],{"class":152},"    category_total[category] ",[142,153909,198],{"class":148},[142,153911,153912],{"class":152}," category_total.get(category, ",[142,153914,344],{"class":201},[142,153916,13743],{"class":152},[142,153918,634],{"class":148},[142,153920,153834],{"class":152},[142,153922,153923],{"class":144,"line":1249},[142,153924,2428],{"emptyLinePlaceholder":69},[142,153926,153927,153929],{"class":144,"line":1340},[142,153928,30444],{"class":201},[142,153930,153931],{"class":152},"(category_total)\n",[113,153933,153935],{"id":153934},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[133,153937,153939],{"className":30407,"code":153938,"language":30409,"meta":31,"style":31},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[139,153940,153941,153966],{"__ignoreMap":31},[142,153942,153943,153946,153948,153950,153953,153956,153959,153962,153964],{"class":144,"line":145},[142,153944,153945],{"class":152},"top_date, top_amount ",[142,153947,198],{"class":148},[142,153949,5980],{"class":201},[142,153951,153952],{"class":152},"(daily_total.items(), ",[142,153954,153955],{"class":5245},"key",[142,153957,153958],{"class":148},"=lambda",[142,153960,153961],{"class":152}," item: item[",[142,153963,370],{"class":201},[142,153965,4685],{"class":152},[142,153967,153968,153970],{"class":144,"line":64},[142,153969,30444],{"class":201},[142,153971,153972],{"class":152},"(top_date, top_amount)\n",[84,153974,153976],{"id":153975},"_126-绘制柱状图","12.6 绘制柱状图",[133,153978,153980],{"className":30407,"code":153979,"language":30409,"meta":31,"style":31},"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",[139,153981,153982,153996,154007,154011,154019,154031,154043,154054,154058,154062,154072,154083,154097,154102,154119,154136,154152,154156],{"__ignoreMap":31},[142,153983,153984,153986,153988,153990,153992,153994],{"class":144,"line":145},[142,153985,30766],{"class":148},[142,153987,147388],{"class":152},[142,153989,30421],{"class":148},[142,153991,147393],{"class":152},[142,153993,31412],{"class":148},[142,153995,147398],{"class":152},[142,153997,153998,154000,154002,154004],{"class":144,"line":64},[142,153999,30766],{"class":148},[142,154001,147247],{"class":152},[142,154003,30421],{"class":148},[142,154005,154006],{"class":152}," Bar\n",[142,154008,154009],{"class":144,"line":1208},[142,154010,2428],{"emptyLinePlaceholder":69},[142,154012,154013,154015,154017],{"class":144,"line":1223},[142,154014,153859],{"class":152},[142,154016,198],{"class":148},[142,154018,15601],{"class":152},[142,154020,154021,154024,154026,154029],{"class":144,"line":1229},[142,154022,154023],{"class":257},"    \"手机\"",[142,154025,51466],{"class":152},[142,154027,154028],{"class":201},"27000",[142,154030,31495],{"class":152},[142,154032,154033,154036,154038,154041],{"class":144,"line":1243},[142,154034,154035],{"class":257},"    \"电脑\"",[142,154037,51466],{"class":152},[142,154039,154040],{"class":201},"34000",[142,154042,31495],{"class":152},[142,154044,154045,154048,154050,154052],{"class":144,"line":1249},[142,154046,154047],{"class":257},"    \"耳机\"",[142,154049,51466],{"class":152},[142,154051,124408],{"class":201},[142,154053,31495],{"class":152},[142,154055,154056],{"class":144,"line":1340},[142,154057,1593],{"class":152},[142,154059,154060],{"class":144,"line":1346},[142,154061,2428],{"emptyLinePlaceholder":69},[142,154063,154064,154067,154069],{"class":144,"line":1358},[142,154065,154066],{"class":152},"bar ",[142,154068,198],{"class":148},[142,154070,154071],{"class":152}," Bar()\n",[142,154073,154074,154077,154080],{"class":144,"line":1640},[142,154075,154076],{"class":152},"bar.add_xaxis(",[142,154078,154079],{"class":201},"list",[142,154081,154082],{"class":152},"(category_total.keys()))\n",[142,154084,154085,154088,154090,154092,154094],{"class":144,"line":1645},[142,154086,154087],{"class":152},"bar.add_yaxis(",[142,154089,147304],{"class":257},[142,154091,12464],{"class":152},[142,154093,154079],{"class":201},[142,154095,154096],{"class":152},"(category_total.values()))\n",[142,154098,154099],{"class":144,"line":1651},[142,154100,154101],{"class":152},"bar.set_global_opts(\n",[142,154103,154104,154106,154108,154110,154112,154114,154117],{"class":144,"line":1656},[142,154105,147482],{"class":5245},[142,154107,198],{"class":148},[142,154109,147487],{"class":152},[142,154111,51436],{"class":5245},[142,154113,198],{"class":148},[142,154115,154116],{"class":257},"\"品类销售额\"",[142,154118,38076],{"class":152},[142,154120,154121,154123,154125,154127,154129,154131,154134],{"class":144,"line":1670},[142,154122,147501],{"class":5245},[142,154124,198],{"class":148},[142,154126,147506],{"class":152},[142,154128,79839],{"class":5245},[142,154130,198],{"class":148},[142,154132,154133],{"class":257},"\"品类\"",[142,154135,38076],{"class":152},[142,154137,154138,154140,154142,154144,154146,154148,154150],{"class":144,"line":1675},[142,154139,147520],{"class":5245},[142,154141,198],{"class":148},[142,154143,147506],{"class":152},[142,154145,79839],{"class":5245},[142,154147,198],{"class":148},[142,154149,147304],{"class":257},[142,154151,38076],{"class":152},[142,154153,154154],{"class":144,"line":1681},[142,154155,159],{"class":152},[142,154157,154158,154161,154164],{"class":144,"line":1702},[142,154159,154160],{"class":152},"bar.render(",[142,154162,154163],{"class":257},"\"category_sales.html\"",[142,154165,159],{"class":152},[84,154167,154169],{"id":154168},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154171,154172],{},"时间线适合展示不同日期、月份、年份的数据变化。",[133,154174,154176],{"className":30407,"code":154175,"language":30409,"meta":31,"style":31},"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",[139,154177,154178,154192,154203,154207,154215,154239,154262,154287,154291,154295,154305,154309,154320,154329,154339,154353,154384,154389,154393],{"__ignoreMap":31},[142,154179,154180,154182,154184,154186,154188,154190],{"class":144,"line":145},[142,154181,30766],{"class":148},[142,154183,147388],{"class":152},[142,154185,30421],{"class":148},[142,154187,147393],{"class":152},[142,154189,31412],{"class":148},[142,154191,147398],{"class":152},[142,154193,154194,154196,154198,154200],{"class":144,"line":64},[142,154195,30766],{"class":148},[142,154197,147247],{"class":152},[142,154199,30421],{"class":148},[142,154201,154202],{"class":152}," Bar, Timeline\n",[142,154204,154205],{"class":144,"line":1208},[142,154206,2428],{"emptyLinePlaceholder":69},[142,154208,154209,154211,154213],{"class":144,"line":1223},[142,154210,101667],{"class":152},[142,154212,198],{"class":148},[142,154214,15601],{"class":152},[142,154216,154217,154220,154223,154225,154227,154229,154231,154233,154235,154237],{"class":144,"line":1229},[142,154218,154219],{"class":257},"    \"2024-10-01\"",[142,154221,154222],{"class":152},": {",[142,154224,153652],{"class":257},[142,154226,51466],{"class":152},[142,154228,153661],{"class":201},[142,154230,12464],{"class":152},[142,154232,153682],{"class":257},[142,154234,51466],{"class":152},[142,154236,153691],{"class":201},[142,154238,4958],{"class":152},[142,154240,154241,154244,154246,154248,154250,154252,154254,154256,154258,154260],{"class":144,"line":1243},[142,154242,154243],{"class":257},"    \"2024-10-02\"",[142,154245,154222],{"class":152},[142,154247,153652],{"class":257},[142,154249,51466],{"class":152},[142,154251,153720],{"class":201},[142,154253,12464],{"class":152},[142,154255,153682],{"class":257},[142,154257,51466],{"class":152},[142,154259,153749],{"class":201},[142,154261,4958],{"class":152},[142,154263,154264,154267,154269,154271,154273,154276,154278,154280,154282,154285],{"class":144,"line":1249},[142,154265,154266],{"class":257},"    \"2024-10-03\"",[142,154268,154222],{"class":152},[142,154270,153652],{"class":257},[142,154272,51466],{"class":152},[142,154274,154275],{"class":201},"17000",[142,154277,12464],{"class":152},[142,154279,153682],{"class":257},[142,154281,51466],{"class":152},[142,154283,154284],{"class":201},"19000",[142,154286,4958],{"class":152},[142,154288,154289],{"class":144,"line":1340},[142,154290,1593],{"class":152},[142,154292,154293],{"class":144,"line":1346},[142,154294,2428],{"emptyLinePlaceholder":69},[142,154296,154297,154300,154302],{"class":144,"line":1358},[142,154298,154299],{"class":152},"timeline ",[142,154301,198],{"class":148},[142,154303,154304],{"class":152}," Timeline()\n",[142,154306,154307],{"class":144,"line":1640},[142,154308,2428],{"emptyLinePlaceholder":69},[142,154310,154311,154313,154316,154318],{"class":144,"line":1645},[142,154312,3053],{"class":148},[142,154314,154315],{"class":152}," date, category_data ",[142,154317,26072],{"class":148},[142,154319,149157],{"class":152},[142,154321,154322,154325,154327],{"class":144,"line":1651},[142,154323,154324],{"class":152},"    bar ",[142,154326,198],{"class":148},[142,154328,154071],{"class":152},[142,154330,154331,154334,154336],{"class":144,"line":1656},[142,154332,154333],{"class":152},"    bar.add_xaxis(",[142,154335,154079],{"class":201},[142,154337,154338],{"class":152},"(category_data.keys()))\n",[142,154340,154341,154344,154346,154348,154350],{"class":144,"line":1670},[142,154342,154343],{"class":152},"    bar.add_yaxis(",[142,154345,147304],{"class":257},[142,154347,12464],{"class":152},[142,154349,154079],{"class":201},[142,154351,154352],{"class":152},"(category_data.values()))\n",[142,154354,154355,154358,154361,154363,154365,154367,154369,154371,154373,154375,154377,154379,154382],{"class":144,"line":1675},[142,154356,154357],{"class":152},"    bar.set_global_opts(",[142,154359,154360],{"class":5245},"title_opts",[142,154362,198],{"class":148},[142,154364,147487],{"class":152},[142,154366,51436],{"class":5245},[142,154368,198],{"class":148},[142,154370,205],{"class":148},[142,154372,404],{"class":257},[142,154374,1049],{"class":201},[142,154376,73955],{"class":152},[142,154378,1099],{"class":201},[142,154380,154381],{"class":257},"销售额\"",[142,154383,30526],{"class":152},[142,154385,154386],{"class":144,"line":1681},[142,154387,154388],{"class":152},"    timeline.add(bar, date)\n",[142,154390,154391],{"class":144,"line":1702},[142,154392,2428],{"emptyLinePlaceholder":69},[142,154394,154395,154398,154401],{"class":144,"line":1707},[142,154396,154397],{"class":152},"timeline.render(",[142,154399,154400],{"class":257},"\"timeline_sales.html\"",[142,154402,159],{"class":152},[84,154404,154406],{"id":154405},"_128-绘制地图","12.8 绘制地图",[14,154408,154409],{},"地图适合展示地区数据。",[133,154411,154413],{"className":30407,"code":154412,"language":30409,"meta":31,"style":31},"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",[139,154414,154415,154429,154440,154444,154452,154465,154477,154490,154503,154507,154511,154521,154536,154541,154558,154577,154581],{"__ignoreMap":31},[142,154416,154417,154419,154421,154423,154425,154427],{"class":144,"line":145},[142,154418,30766],{"class":148},[142,154420,147388],{"class":152},[142,154422,30421],{"class":148},[142,154424,147393],{"class":152},[142,154426,31412],{"class":148},[142,154428,147398],{"class":152},[142,154430,154431,154433,154435,154437],{"class":144,"line":64},[142,154432,30766],{"class":148},[142,154434,147247],{"class":152},[142,154436,30421],{"class":148},[142,154438,154439],{"class":152}," Map\n",[142,154441,154442],{"class":144,"line":1208},[142,154443,2428],{"emptyLinePlaceholder":69},[142,154445,154446,154448,154450],{"class":144,"line":1223},[142,154447,101667],{"class":152},[142,154449,198],{"class":148},[142,154451,55476],{"class":152},[142,154453,154454,154457,154459,154461,154463],{"class":144,"line":1229},[142,154455,154456],{"class":152},"    (",[142,154458,69298],{"class":257},[142,154460,12464],{"class":152},[142,154462,970],{"class":201},[142,154464,38076],{"class":152},[142,154466,154467,154469,154471,154473,154475],{"class":144,"line":1243},[142,154468,154456],{"class":152},[142,154470,69318],{"class":257},[142,154472,12464],{"class":152},[142,154474,147321],{"class":201},[142,154476,38076],{"class":152},[142,154478,154479,154481,154484,154486,154488],{"class":144,"line":1249},[142,154480,154456],{"class":152},[142,154482,154483],{"class":257},"\"广东\"",[142,154485,12464],{"class":152},[142,154487,1750],{"class":201},[142,154489,38076],{"class":152},[142,154491,154492,154494,154497,154499,154501],{"class":144,"line":1340},[142,154493,154456],{"class":152},[142,154495,154496],{"class":257},"\"浙江\"",[142,154498,12464],{"class":152},[142,154500,147326],{"class":201},[142,154502,38076],{"class":152},[142,154504,154505],{"class":144,"line":1346},[142,154506,33275],{"class":152},[142,154508,154509],{"class":144,"line":1358},[142,154510,2428],{"emptyLinePlaceholder":69},[142,154512,154513,154516,154518],{"class":144,"line":1640},[142,154514,154515],{"class":152},"map_chart ",[142,154517,198],{"class":148},[142,154519,154520],{"class":152}," Map()\n",[142,154522,154523,154526,154528,154531,154534],{"class":144,"line":1645},[142,154524,154525],{"class":152},"map_chart.add(",[142,154527,147304],{"class":257},[142,154529,154530],{"class":152},", data, ",[142,154532,154533],{"class":257},"\"china\"",[142,154535,159],{"class":152},[142,154537,154538],{"class":144,"line":1651},[142,154539,154540],{"class":152},"map_chart.set_global_opts(\n",[142,154542,154543,154545,154547,154549,154551,154553,154556],{"class":144,"line":1656},[142,154544,147482],{"class":5245},[142,154546,198],{"class":148},[142,154548,147487],{"class":152},[142,154550,51436],{"class":5245},[142,154552,198],{"class":148},[142,154554,154555],{"class":257},"\"地区销售额\"",[142,154557,38076],{"class":152},[142,154559,154560,154563,154565,154568,154571,154573,154575],{"class":144,"line":1670},[142,154561,154562],{"class":5245},"    visualmap_opts",[142,154564,198],{"class":148},[142,154566,154567],{"class":152},"opts.VisualMapOpts(",[142,154569,154570],{"class":5245},"max_",[142,154572,198],{"class":148},[142,154574,1750],{"class":201},[142,154576,38076],{"class":152},[142,154578,154579],{"class":144,"line":1675},[142,154580,159],{"class":152},[142,154582,154583,154586,154589],{"class":144,"line":1681},[142,154584,154585],{"class":152},"map_chart.render(",[142,154587,154588],{"class":257},"\"map_sales.html\"",[142,154590,159],{"class":152},[14,154592,154593],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[84,154595,154597],{"id":154596},"_129-项目拆分建议","12.9 项目拆分建议",[14,154599,154600],{},"当代码超过一个文件时，可以这样组织：",[133,154602,154605],{"className":154603,"code":154604,"language":5216,"meta":31},[5214],"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",[139,154606,154604],{"__ignoreMap":31},[14,154608,154609],{},"职责：",[96,154611,154612,154618,154624,154630],{},[99,154613,154614,154617],{},[139,154615,154616],{},"main.py","：程序入口。",[99,154619,154620,154623],{},[139,154621,154622],{},"file_utils.py","：读写 JSON。",[99,154625,154626,154629],{},[139,154627,154628],{},"sales_service.py","：统计销售数据。",[99,154631,154632,154635],{},[139,154633,154634],{},"chart_builder.py","：生成图表。",[84,154637,154639],{"id":154638},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154641,154642],{},"语法基础：",[96,154644,154645,154648,154651,154654],{},[99,154646,154647],{},"会写变量、注释、输入输出。",[99,154649,154650],{},"会使用 int、float、str、bool。",[99,154652,154653],{},"会做类型转换。",[99,154655,154656],{},"会使用 f-string 格式化输出。",[14,154658,154659],{},"流程控制：",[96,154661,154662,154668,154674,154682],{},[99,154663,154664,154665,28414],{},"会写 ",[139,154666,154667],{},"if elif else",[99,154669,154664,154670,101027,154672,28414],{},[139,154671,108672],{},[139,154673,3053],{},[99,154675,154676,154677,101027,154679,28414],{},"理解 ",[139,154678,2081],{},[139,154680,154681],{},"continue",[99,154683,154684],{},"能写嵌套循环。",[14,154686,154687],{},"函数：",[96,154689,154690,154693,154696,154699],{},[99,154691,154692],{},"会定义和调用函数。",[99,154694,154695],{},"理解参数和返回值。",[99,154697,154698],{},"知道局部变量和全局变量。",[99,154700,154701],{},"会使用默认参数、关键字参数、不定长参数。",[14,154703,154704],{},"容器：",[96,154706,154707,154710,154713,154716,154719],{},[99,154708,154709],{},"会使用列表增删改查。",[99,154711,154712],{},"会遍历列表、字典。",[99,154714,154715],{},"会使用切片。",[99,154717,154718],{},"会用集合去重。",[99,154720,154721],{},"会处理列表嵌套字典。",[14,154723,154724],{},"文件和模块：",[96,154726,154727,154730,154733,154736,154739],{},[99,154728,154729],{},"会读写文本文件。",[99,154731,154732],{},"会读写 JSON。",[99,154734,154735],{},"会捕获常见异常。",[99,154737,154738],{},"会导入模块和第三方包。",[99,154740,154741],{},"会创建简单包结构。",[14,154743,154744],{},"项目能力：",[96,154746,154747,154750,154753,154756,154759],{},[99,154748,154749],{},"能把代码拆成函数。",[99,154751,154752],{},"能把数据保存到文件。",[99,154754,154755],{},"能处理用户输入错误。",[99,154757,154758],{},"能写一个完整菜单程序。",[99,154760,154761],{},"能用 pyecharts 生成图表。",[84,154763,154765],{"id":154764},"_1211-推荐练习顺序","12.11 推荐练习顺序",[96,154767,154768,154771,154774,154777,154780,154783,154786,154789],{},[99,154769,154770],{},"猜数字游戏。",[99,154772,154773],{},"ATM 菜单程序。",[99,154775,154776],{},"学生成绩统计。",[99,154778,154779],{},"学生管理系统函数版。",[99,154781,154782],{},"学生管理系统文件持久化版。",[99,154784,154785],{},"学生管理系统面向对象版。",[99,154787,154788],{},"销售数据统计。",[99,154790,154791],{},"销售数据可视化。",[84,154793,154795],{"id":154794},"_1212-常见学习误区","12.12 常见学习误区",[96,154797,154798,154801,154804,154807,154810,154813,154816],{},[99,154799,154800],{},"只看视频不敲代码。",[99,154802,154803],{},"一报错就复制错误去搜，不先读报错位置。",[99,154805,154806],{},"变量名随便写，后续自己看不懂。",[99,154808,154809],{},"所有代码都写在一个文件一个函数里。",[99,154811,154812],{},"不保存练习代码，复习时没有材料。",[99,154814,154815],{},"还没掌握列表字典就急着学框架。",[99,154817,154818],{},"不会读官方文档，只依赖教程。",[84,154820,154822],{"id":154821},"_1213-如何读报错","12.13 如何读报错",[14,154824,154825],{},"报错通常从下往上看最后几行。",[14,154827,15164],{},[133,154829,154832],{"className":154830,"code":154831,"language":5216,"meta":31},[5214],"ValueError: invalid literal for int() with base 10: 'abc'\n",[139,154833,154831],{"__ignoreMap":31},[14,154835,19],{},[96,154837,154838,154844,154854],{},[99,154839,154840,154841,28414],{},"异常类型是 ",[139,154842,154843],{},"ValueError",[99,154845,107354,154846,154849,154850,154853],{},[139,154847,154848],{},"int()"," 无法把 ",[139,154851,154852],{},"'abc'"," 转成整数。",[99,154855,154856],{},"应该检查输入内容或增加异常处理。",[14,154858,154859],{},"再看文件名和行号：",[133,154861,154864],{"className":154862,"code":154863,"language":5216,"meta":31},[5214],"File \"main.py\", line 10, in \u003Cmodule>\n",[139,154865,154863],{"__ignoreMap":31},[14,154867,154868,154869,154871],{},"表示错误发生在 ",[139,154870,154616],{}," 第 10 行。",[84,154873,154875],{"id":154874},"_1214-后续学习方向","12.14 后续学习方向",[14,154877,154878],{},"Python 基础完成后，可以按兴趣选择方向：",[96,154880,154881,154893,154902,154914,154925,154934,154944],{},[99,154882,154883,154884,365,154887,365,154890,28414],{},"自动化办公：",[139,154885,154886],{},"openpyxl",[139,154888,154889],{},"python-docx",[139,154891,154892],{},"pdfplumber",[99,154894,154895,154896,365,154898,365,154900,28414],{},"数据分析：",[139,154897,100635],{},[139,154899,146194],{},[139,154901,146202],{},[99,154903,154904,154905,365,154908,365,154911,28414],{},"Web 后端：",[139,154906,154907],{},"Flask",[139,154909,154910],{},"FastAPI",[139,154912,154913],{},"Django",[99,154915,154916,154917,365,154919,365,154922,28414],{},"爬虫：",[139,154918,146179],{},[139,154920,154921],{},"BeautifulSoup",[139,154923,154924],{},"Scrapy",[99,154926,154927,154928,365,154930,154933],{},"测试开发：",[139,154929,146226],{},[139,154931,154932],{},"selenium","、接口测试。",[99,154935,154936,154937,365,154939,365,154941,28414],{},"人工智能：",[139,154938,100635],{},[139,154940,146194],{},[139,154942,154943],{},"pytorch",[99,154945,154946,154947,365,154949,365,154952,28414],{},"运维脚本：",[139,154948,145795],{},[139,154950,154951],{},"subprocess",[139,154953,154954],{},"paramiko",[14,154956,154957],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[84,154959,154961],{"id":154960},"_1215-结课练习","12.15 结课练习",[96,154963,154964,154967,154970,154973,154976,154979,154982,154985],{},[99,154965,154966],{},"完成函数版学生管理系统。",[99,154968,154969],{},"给学生管理系统增加 JSON 持久化。",[99,154971,154972],{},"给学生管理系统增加异常处理。",[99,154974,154975],{},"把学生管理系统改成面向对象版。",[99,154977,154978],{},"使用 pyecharts 绘制学生成绩柱状图。",[99,154980,154981],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[99,154983,154984],{},"按品类统计销售额并绘制柱状图。",[99,154986,154987],{},"写一份自己的 Python 学习路线图。",[5155,154989,154990],{},"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":31,"searchDepth":64,"depth":64,"links":154992},[154993,154994,154997,154998,154999,155005,155006,155007,155008,155009,155010,155011,155012,155013,155014],{"id":151709,"depth":64,"text":151710},{"id":151759,"depth":64,"text":151760,"children":154995},[154996],{"id":151763,"depth":1208,"text":151764},{"id":151802,"depth":64,"text":151803},{"id":153276,"depth":64,"text":153277},{"id":153614,"depth":64,"text":153615,"children":155000},[155001,155002,155003,155004],{"id":153618,"depth":1208,"text":153619},{"id":153758,"depth":1208,"text":153759},{"id":153848,"depth":1208,"text":153849},{"id":153934,"depth":1208,"text":153935},{"id":153975,"depth":64,"text":153976},{"id":154168,"depth":64,"text":154169},{"id":154405,"depth":64,"text":154406},{"id":154596,"depth":64,"text":154597},{"id":154638,"depth":64,"text":154639},{"id":154764,"depth":64,"text":154765},{"id":154794,"depth":64,"text":154795},{"id":154821,"depth":64,"text":154822},{"id":154874,"depth":64,"text":154875},{"id":154960,"depth":64,"text":154961},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151701,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155021,"title":155022,"body":155023,"description":66,"extension":67,"meta":157492,"navigation":69,"path":157493,"seo":157494,"stem":157495,"__hash__":157496},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155024,"toc":157467},[155025,155028,155032,155035,155038,155058,155061,155084,155087,155090,155112,155115,155137,155141,155144,155184,155187,155308,155312,155315,155355,155358,155382,155385,155389,155392,155406,155439,155442,155477,155480,155503,155506,155539,155542,155544,155550,155625,155628,155634,155651,155691,155695,155698,155744,155746,155784,155787,155822,155825,155860,155863,155895,155898,155917,155921,155925,156038,156040,156115,156119,156165,156168,156194,156203,156207,156210,156273,156281,156309,156313,156353,156418,156422,156425,156464,156467,156512,156515,156576,156580,156607,156610,156638,156641,156645,156649,156714,156717,156755,156758,156790,156794,156893,156897,156900,156973,156976,157024,157028,157034,157074,157077,157124,157127,157176,157180,157182,157196,157198,157379,157383,157410,157430,157437,157441,157458,157464],[10,155026,155022],{"id":155027},"_2-基础语法变量与字符串",[84,155029,155031],{"id":155030},"_21-注释","2.1 注释",[14,155033,155034],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155036,155037],{},"单行注释：",[133,155039,155041],{"className":30407,"code":155040,"language":30409,"meta":31,"style":31},"# 这是单行注释\nprint(\"hello\")\n",[139,155042,155043,155048],{"__ignoreMap":31},[142,155044,155045],{"class":144,"line":145},[142,155046,155047],{"class":211},"# 这是单行注释\n",[142,155049,155050,155052,155054,155056],{"class":144,"line":64},[142,155051,30444],{"class":201},[142,155053,153],{"class":152},[142,155055,5873],{"class":257},[142,155057,159],{"class":152},[14,155059,155060],{},"多行说明常用三引号：",[133,155062,155064],{"className":30407,"code":155063,"language":30409,"meta":31,"style":31},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[139,155065,155066,155070,155075,155080],{"__ignoreMap":31},[142,155067,155068],{"class":144,"line":145},[142,155069,95707],{"class":257},[142,155071,155072],{"class":144,"line":64},[142,155073,155074],{"class":257},"这是多行说明。\n",[142,155076,155077],{"class":144,"line":1208},[142,155078,155079],{"class":257},"常用于文件顶部说明、函数说明等。\n",[142,155081,155082],{"class":144,"line":1223},[142,155083,95707],{"class":257},[14,155085,155086],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155088,155089],{},"不好：",[133,155091,155093],{"className":30407,"code":155092,"language":30409,"meta":31,"style":31},"# age 加 1\nage = age + 1\n",[139,155094,155095,155100],{"__ignoreMap":31},[142,155096,155097],{"class":144,"line":145},[142,155098,155099],{"class":211},"# age 加 1\n",[142,155101,155102,155104,155106,155108,155110],{"class":144,"line":64},[142,155103,146555],{"class":152},[142,155105,198],{"class":148},[142,155107,15736],{"class":152},[142,155109,634],{"class":148},[142,155111,55728],{"class":201},[14,155113,155114],{},"较好：",[133,155116,155118],{"className":30407,"code":155117,"language":30409,"meta":31,"style":31},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[139,155119,155120,155125],{"__ignoreMap":31},[142,155121,155122],{"class":144,"line":145},[142,155123,155124],{"class":211},"# 用户过完生日后，年龄增加一岁\n",[142,155126,155127,155129,155131,155133,155135],{"class":144,"line":64},[142,155128,146555],{"class":152},[142,155130,198],{"class":148},[142,155132,15736],{"class":152},[142,155134,634],{"class":148},[142,155136,55728],{"class":201},[84,155138,155140],{"id":155139},"_22-字面量","2.2 字面量",[14,155142,155143],{},"字面量就是代码中直接写出来的数据。",[133,155145,155147],{"className":30407,"code":155146,"language":30409,"meta":31,"style":31},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[139,155148,155149,155156,155163,155170,155177],{"__ignoreMap":31},[142,155150,155151,155153],{"class":144,"line":145},[142,155152,464],{"class":201},[142,155154,155155],{"class":211},"          # 整数\n",[142,155157,155158,155160],{"class":144,"line":64},[142,155159,202],{"class":201},[142,155161,155162],{"class":211},"         # 小数\n",[142,155164,155165,155167],{"class":144,"line":1208},[142,155166,5873],{"class":257},[142,155168,155169],{"class":211},"      # 字符串\n",[142,155171,155172,155174],{"class":144,"line":1223},[142,155173,31505],{"class":201},[142,155175,155176],{"class":211},"         # 布尔值\n",[142,155178,155179,155181],{"class":144,"line":1229},[142,155180,95695],{"class":201},[142,155182,155183],{"class":211},"         # 空值\n",[14,155185,155186],{},"常见字面量类型：",[290,155188,155189,155199],{},[293,155190,155191],{},[296,155192,155193,155195,155197],{},[299,155194,23766],{},[299,155196,27521],{},[299,155198,25898],{},[337,155200,155201,155212,155223,155234,155246,155258,155270,155283,155295],{},[296,155202,155203,155205,155209],{},[342,155204,156],{},[342,155206,155207],{},[139,155208,464],{},[342,155210,155211],{},"整数",[296,155213,155214,155216,155220],{},[342,155215,192],{},[342,155217,155218],{},[139,155219,202],{},[342,155221,155222],{},"浮点数",[296,155224,155225,155227,155231],{},[342,155226,1328],{},[342,155228,155229],{},[139,155230,5873],{},[342,155232,155233],{},"字符串",[296,155235,155236,155238,155244],{},[342,155237,1383],{},[342,155239,155240,365,155242],{},[139,155241,31505],{},[139,155243,34016],{},[342,155245,66044],{},[296,155247,155248,155251,155255],{},[342,155249,155250],{},"NoneType",[342,155252,155253],{},[139,155254,95695],{},[342,155256,155257],{},"空值",[296,155259,155260,155262,155267],{},[342,155261,154079],{},[342,155263,155264],{},[139,155265,155266],{},"[1, 2, 3]",[342,155268,155269],{},"列表",[296,155271,155272,155275,155280],{},[342,155273,155274],{},"tuple",[342,155276,155277],{},[139,155278,155279],{},"(1, 2, 3)",[342,155281,155282],{},"元组",[296,155284,155285,155287,155292],{},[342,155286,114555],{},[342,155288,155289],{},[139,155290,155291],{},"{\"name\": \"张三\"}",[342,155293,155294],{},"字典",[296,155296,155297,155300,155305],{},[342,155298,155299],{},"set",[342,155301,155302],{},[139,155303,155304],{},"{1, 2, 3}",[342,155306,155307],{},"集合",[84,155309,155311],{"id":155310},"_23-变量","2.3 变量",[14,155313,155314],{},"变量是保存数据的名字。",[133,155316,155318],{"className":30407,"code":155317,"language":30409,"meta":31,"style":31},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[139,155319,155320,155328,155336,155346],{"__ignoreMap":31},[142,155321,155322,155324,155326],{"class":144,"line":145},[142,155323,146545],{"class":152},[142,155325,198],{"class":148},[142,155327,149362],{"class":257},[142,155329,155330,155332,155334],{"class":144,"line":64},[142,155331,146555],{"class":152},[142,155333,198],{"class":148},[142,155335,146560],{"class":201},[142,155337,155338,155341,155343],{"class":144,"line":1208},[142,155339,155340],{"class":152},"height ",[142,155342,198],{"class":148},[142,155344,155345],{"class":201}," 1.75\n",[142,155347,155348,155351,155353],{"class":144,"line":1223},[142,155349,155350],{"class":152},"is_student ",[142,155352,198],{"class":148},[142,155354,153608],{"class":201},[14,155356,155357],{},"Python 的变量不需要提前声明类型：",[133,155359,155361],{"className":30407,"code":155360,"language":30409,"meta":31,"style":31},"score = 100\nscore = \"满分\"\n",[139,155362,155363,155373],{"__ignoreMap":31},[142,155364,155365,155368,155370],{"class":144,"line":145},[142,155366,155367],{"class":152},"score ",[142,155369,198],{"class":148},[142,155371,155372],{"class":201}," 100\n",[142,155374,155375,155377,155379],{"class":144,"line":64},[142,155376,155367],{"class":152},[142,155378,198],{"class":148},[142,155380,155381],{"class":257}," \"满分\"\n",[14,155383,155384],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[84,155386,155388],{"id":155387},"_24-变量命名规则","2.4 变量命名规则",[14,155390,155391],{},"硬性规则：",[96,155393,155394,155397,155400,155403],{},[99,155395,155396],{},"只能由字母、数字、下划线组成。",[99,155398,155399],{},"不能以数字开头。",[99,155401,155402],{},"不能使用 Python 关键字。",[99,155404,155405],{},"区分大小写。",[133,155407,155409],{"className":30407,"code":155408,"language":30409,"meta":31,"style":31},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[139,155410,155411,155420,155429],{"__ignoreMap":31},[142,155412,155413,155416,155418],{"class":144,"line":145},[142,155414,155415],{"class":152},"user_name ",[142,155417,198],{"class":148},[142,155419,146550],{"class":257},[142,155421,155422,155425,155427],{"class":144,"line":64},[142,155423,155424],{"class":152},"age2 ",[142,155426,198],{"class":148},[142,155428,146560],{"class":201},[142,155430,155431,155434,155436],{"class":144,"line":1208},[142,155432,155433],{"class":152},"_token ",[142,155435,198],{"class":148},[142,155437,155438],{"class":257}," \"abc\"\n",[14,155440,155441],{},"错误写法：",[133,155443,155445],{"className":30407,"code":155444,"language":30409,"meta":31,"style":31},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[139,155446,155447,155456,155468],{"__ignoreMap":31},[142,155448,155449,155452,155454],{"class":144,"line":145},[142,155450,155451],{"class":77432},"2age",[142,155453,13593],{"class":148},[142,155455,146560],{"class":201},[142,155457,155458,155460,155462,155464,155466],{"class":144,"line":64},[142,155459,131593],{"class":152},[142,155461,685],{"class":148},[142,155463,146545],{"class":152},[142,155465,198],{"class":148},[142,155467,146550],{"class":257},[142,155469,155470,155472,155474],{"class":144,"line":1208},[142,155471,14723],{"class":148},[142,155473,13593],{"class":148},[142,155475,155476],{"class":257}," \"一班\"\n",[14,155478,155479],{},"查看关键字：",[133,155481,155483],{"className":30407,"code":155482,"language":30409,"meta":31,"style":31},"import keyword\n\nprint(keyword.kwlist)\n",[139,155484,155485,155492,155496],{"__ignoreMap":31},[142,155486,155487,155489],{"class":144,"line":145},[142,155488,30421],{"class":148},[142,155490,155491],{"class":152}," keyword\n",[142,155493,155494],{"class":144,"line":64},[142,155495,2428],{"emptyLinePlaceholder":69},[142,155497,155498,155500],{"class":144,"line":1208},[142,155499,30444],{"class":201},[142,155501,155502],{"class":152},"(keyword.kwlist)\n",[14,155504,155505],{},"推荐命名风格：",[133,155507,155509],{"className":30407,"code":155508,"language":30409,"meta":31,"style":31},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[139,155510,155511,155520,155530],{"__ignoreMap":31},[142,155512,155513,155516,155518],{"class":144,"line":145},[142,155514,155515],{"class":152},"student_name ",[142,155517,198],{"class":148},[142,155519,149362],{"class":257},[142,155521,155522,155525,155527],{"class":144,"line":64},[142,155523,155524],{"class":152},"total_price ",[142,155526,198],{"class":148},[142,155528,155529],{"class":201}," 99.8\n",[142,155531,155532,155535,155537],{"class":144,"line":1208},[142,155533,155534],{"class":152},"is_finished ",[142,155536,198],{"class":148},[142,155538,125816],{"class":201},[14,155540,155541],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[84,155543,50761],{"id":50760},[14,155545,104375,155546,155549],{},[139,155547,155548],{},"type()"," 查看数据类型：",[133,155551,155553],{"className":30407,"code":155552,"language":30409,"meta":31,"style":31},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[139,155554,155555,155569,155583,155597,155611],{"__ignoreMap":31},[142,155556,155557,155559,155561,155563,155565,155567],{"class":144,"line":145},[142,155558,30444],{"class":201},[142,155560,153],{"class":152},[142,155562,103116],{"class":201},[142,155564,153],{"class":152},[142,155566,464],{"class":201},[142,155568,30526],{"class":152},[142,155570,155571,155573,155575,155577,155579,155581],{"class":144,"line":64},[142,155572,30444],{"class":201},[142,155574,153],{"class":152},[142,155576,103116],{"class":201},[142,155578,153],{"class":152},[142,155580,202],{"class":201},[142,155582,30526],{"class":152},[142,155584,155585,155587,155589,155591,155593,155595],{"class":144,"line":1208},[142,155586,30444],{"class":201},[142,155588,153],{"class":152},[142,155590,103116],{"class":201},[142,155592,153],{"class":152},[142,155594,5873],{"class":257},[142,155596,30526],{"class":152},[142,155598,155599,155601,155603,155605,155607,155609],{"class":144,"line":1223},[142,155600,30444],{"class":201},[142,155602,153],{"class":152},[142,155604,103116],{"class":201},[142,155606,153],{"class":152},[142,155608,31505],{"class":201},[142,155610,30526],{"class":152},[142,155612,155613,155615,155617,155619,155621,155623],{"class":144,"line":1229},[142,155614,30444],{"class":201},[142,155616,153],{"class":152},[142,155618,103116],{"class":201},[142,155620,153],{"class":152},[142,155622,95695],{"class":201},[142,155624,30526],{"class":152},[14,155626,155627],{},"输出类似：",[133,155629,155632],{"className":155630,"code":155631,"language":5216,"meta":31},[5214],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[139,155633,155631],{"__ignoreMap":31},[14,155635,9054,155636,107292,155638,155640,155641,155643,155644,21529,155646,155643,155648,155650],{},[139,155637,1383],{},[139,155639,156],{}," 的子类，",[139,155642,31505],{}," 可以当作 ",[139,155645,370],{},[139,155647,34016],{},[139,155649,344],{},"，但业务代码中不要滥用。",[133,155652,155654],{"className":30407,"code":155653,"language":30409,"meta":31,"style":31},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[139,155655,155656,155674],{"__ignoreMap":31},[142,155657,155658,155660,155662,155664,155666,155668,155671],{"class":144,"line":145},[142,155659,30444],{"class":201},[142,155661,153],{"class":152},[142,155663,31505],{"class":201},[142,155665,45595],{"class":148},[142,155667,25147],{"class":201},[142,155669,155670],{"class":152},")   ",[142,155672,155673],{"class":211},"# 2\n",[142,155675,155676,155678,155680,155682,155684,155686,155688],{"class":144,"line":64},[142,155677,30444],{"class":201},[142,155679,153],{"class":152},[142,155681,34016],{"class":201},[142,155683,45595],{"class":148},[142,155685,25147],{"class":201},[142,155687,45837],{"class":152},[142,155689,155690],{"class":211},"# 1\n",[84,155692,155694],{"id":155693},"_26-类型转换","2.6 类型转换",[14,155696,155697],{},"常用转换函数：",[133,155699,155701],{"className":30407,"code":155700,"language":30409,"meta":31,"style":31},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[139,155702,155703,155713,155724,155734],{"__ignoreMap":31},[142,155704,155705,155707,155709,155711],{"class":144,"line":145},[142,155706,156],{"class":201},[142,155708,153],{"class":152},[142,155710,54345],{"class":257},[142,155712,159],{"class":152},[142,155714,155715,155717,155719,155722],{"class":144,"line":64},[142,155716,192],{"class":201},[142,155718,153],{"class":152},[142,155720,155721],{"class":257},"\"3.14\"",[142,155723,159],{"class":152},[142,155725,155726,155728,155730,155732],{"class":144,"line":1208},[142,155727,1328],{"class":201},[142,155729,153],{"class":152},[142,155731,464],{"class":201},[142,155733,159],{"class":152},[142,155735,155736,155738,155740,155742],{"class":144,"line":1223},[142,155737,1383],{"class":201},[142,155739,153],{"class":152},[142,155741,370],{"class":201},[142,155743,159],{"class":152},[14,155745,15164],{},[133,155747,155749],{"className":30407,"code":155748,"language":30409,"meta":31,"style":31},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[139,155750,155751,155760,155771],{"__ignoreMap":31},[142,155752,155753,155755,155757],{"class":144,"line":145},[142,155754,146555],{"class":152},[142,155756,198],{"class":148},[142,155758,155759],{"class":257}," \"18\"\n",[142,155761,155762,155764,155766,155768],{"class":144,"line":64},[142,155763,146555],{"class":152},[142,155765,198],{"class":148},[142,155767,2410],{"class":201},[142,155769,155770],{"class":152},"(age)\n",[142,155772,155773,155775,155778,155780,155782],{"class":144,"line":1208},[142,155774,30444],{"class":201},[142,155776,155777],{"class":152},"(age ",[142,155779,634],{"class":148},[142,155781,25147],{"class":201},[142,155783,159],{"class":152},[14,155785,155786],{},"输入得到的内容永远是字符串：",[133,155788,155790],{"className":30407,"code":155789,"language":30409,"meta":31,"style":31},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[139,155791,155792,155808],{"__ignoreMap":31},[142,155793,155794,155797,155799,155801,155803,155806],{"class":144,"line":145},[142,155795,155796],{"class":152},"num ",[142,155798,198],{"class":148},[142,155800,60634],{"class":201},[142,155802,153],{"class":152},[142,155804,155805],{"class":257},"\"请输入数字:\"",[142,155807,159],{"class":152},[142,155809,155810,155812,155814,155816,155819],{"class":144,"line":64},[142,155811,30444],{"class":201},[142,155813,153],{"class":152},[142,155815,103116],{"class":201},[142,155817,155818],{"class":152},"(num))  ",[142,155820,155821],{"class":211},"# str\n",[14,155823,155824],{},"如果要做数学运算，必须转换：",[133,155826,155828],{"className":30407,"code":155827,"language":30409,"meta":31,"style":31},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[139,155829,155830,155848],{"__ignoreMap":31},[142,155831,155832,155834,155836,155838,155840,155842,155844,155846],{"class":144,"line":145},[142,155833,155796],{"class":152},[142,155835,198],{"class":148},[142,155837,2410],{"class":201},[142,155839,153],{"class":152},[142,155841,53850],{"class":201},[142,155843,153],{"class":152},[142,155845,155805],{"class":257},[142,155847,30526],{"class":152},[142,155849,155850,155852,155854,155856,155858],{"class":144,"line":64},[142,155851,30444],{"class":201},[142,155853,45648],{"class":152},[142,155855,634],{"class":148},[142,155857,2066],{"class":201},[142,155859,159],{"class":152},[14,155861,155862],{},"常见错误：",[133,155864,155866],{"className":30407,"code":155865,"language":30409,"meta":31,"style":31},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[139,155867,155868,155881],{"__ignoreMap":31},[142,155869,155870,155872,155874,155876,155878],{"class":144,"line":145},[142,155871,156],{"class":201},[142,155873,153],{"class":152},[142,155875,155721],{"class":257},[142,155877,155670],{"class":152},[142,155879,155880],{"class":211},"# 错误\n",[142,155882,155883,155885,155887,155890,155893],{"class":144,"line":64},[142,155884,156],{"class":201},[142,155886,153],{"class":152},[142,155888,155889],{"class":257},"\"abc\"",[142,155891,155892],{"class":152},")    ",[142,155894,155880],{"class":211},[14,155896,155897],{},"正确写法：",[133,155899,155901],{"className":30407,"code":155900,"language":30409,"meta":31,"style":31},"num = float(\"3.14\")\n",[139,155902,155903],{"__ignoreMap":31},[142,155904,155905,155907,155909,155911,155913,155915],{"class":144,"line":145},[142,155906,155796],{"class":152},[142,155908,198],{"class":148},[142,155910,109806],{"class":201},[142,155912,153],{"class":152},[142,155914,155721],{"class":257},[142,155916,159],{"class":152},[84,155918,155920],{"id":155919},"_27-运算符","2.7 运算符",[113,155922,155924],{"id":155923},"_271-算术运算符","2.7.1 算术运算符",[290,155926,155927,155938],{},[293,155928,155929],{},[296,155930,155931,155934,155936],{},[299,155932,155933],{},"运算符",[299,155935,25898],{},[299,155937,27521],{},[337,155939,155940,155954,155968,155982,155996,156010,156024],{},[296,155941,155942,155946,155949],{},[342,155943,155944],{},[139,155945,634],{},[342,155947,155948],{},"加法",[342,155950,155951],{},[139,155952,155953],{},"1 + 2",[296,155955,155956,155960,155963],{},[342,155957,155958],{},[139,155959,685],{},[342,155961,155962],{},"减法",[342,155964,155965],{},[139,155966,155967],{},"5 - 3",[296,155969,155970,155974,155977],{},[342,155971,155972],{},[139,155973,608],{},[342,155975,155976],{},"乘法",[342,155978,155979],{},[139,155980,155981],{},"2 * 3",[296,155983,155984,155988,155991],{},[342,155985,155986],{},[139,155987,737],{},[342,155989,155990],{},"除法，结果是浮点数",[342,155992,155993],{},[139,155994,155995],{},"5 \u002F 2",[296,155997,155998,156002,156005],{},[342,155999,156000],{},[139,156001,33358],{},[342,156003,156004],{},"整除",[342,156006,156007],{},[139,156008,156009],{},"5 \u002F\u002F 2",[296,156011,156012,156016,156019],{},[342,156013,156014],{},[139,156015,481],{},[342,156017,156018],{},"取余",[342,156020,156021],{},[139,156022,156023],{},"5 % 2",[296,156025,156026,156030,156033],{},[342,156027,156028],{},[139,156029,10690],{},[342,156031,156032],{},"幂运算",[342,156034,156035],{},[139,156036,156037],{},"2 ** 3",[14,156039,15164],{},[133,156041,156043],{"className":30407,"code":156042,"language":30409,"meta":31,"style":31},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[139,156044,156045,156063,156080,156097],{"__ignoreMap":31},[142,156046,156047,156049,156051,156053,156056,156058,156060],{"class":144,"line":145},[142,156048,30444],{"class":201},[142,156050,153],{"class":152},[142,156052,472],{"class":201},[142,156054,156055],{"class":148}," \u002F",[142,156057,14784],{"class":201},[142,156059,155670],{"class":152},[142,156061,156062],{"class":211},"# 2.5\n",[142,156064,156065,156067,156069,156071,156074,156076,156078],{"class":144,"line":64},[142,156066,30444],{"class":201},[142,156068,153],{"class":152},[142,156070,472],{"class":201},[142,156072,156073],{"class":148}," \u002F\u002F",[142,156075,14784],{"class":201},[142,156077,45837],{"class":152},[142,156079,155673],{"class":211},[142,156081,156082,156084,156086,156088,156091,156093,156095],{"class":144,"line":1208},[142,156083,30444],{"class":201},[142,156085,153],{"class":152},[142,156087,472],{"class":201},[142,156089,156090],{"class":148}," %",[142,156092,14784],{"class":201},[142,156094,155670],{"class":152},[142,156096,155690],{"class":211},[142,156098,156099,156101,156103,156105,156108,156110,156112],{"class":144,"line":1223},[142,156100,30444],{"class":201},[142,156102,153],{"class":152},[142,156104,230],{"class":201},[142,156106,156107],{"class":148}," **",[142,156109,78099],{"class":201},[142,156111,45837],{"class":152},[142,156113,156114],{"class":211},"# 8\n",[113,156116,156118],{"id":156117},"_272-赋值运算符","2.7.2 赋值运算符",[133,156120,156122],{"className":30407,"code":156121,"language":30409,"meta":31,"style":31},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[139,156123,156124,156132,156140,156148,156156],{"__ignoreMap":31},[142,156125,156126,156128,156130],{"class":144,"line":145},[142,156127,155796],{"class":152},[142,156129,198],{"class":148},[142,156131,58457],{"class":201},[142,156133,156134,156136,156138],{"class":144,"line":64},[142,156135,155796],{"class":152},[142,156137,9506],{"class":148},[142,156139,54456],{"class":201},[142,156141,156142,156144,156146],{"class":144,"line":1208},[142,156143,155796],{"class":152},[142,156145,150261],{"class":148},[142,156147,47752],{"class":201},[142,156149,156150,156152,156154],{"class":144,"line":1223},[142,156151,155796],{"class":152},[142,156153,137157],{"class":148},[142,156155,120045],{"class":201},[142,156157,156158,156160,156163],{"class":144,"line":1229},[142,156159,155796],{"class":152},[142,156161,156162],{"class":148},"\u002F=",[142,156164,47752],{"class":201},[14,156166,156167],{},"等价关系：",[133,156169,156171],{"className":30407,"code":156170,"language":30409,"meta":31,"style":31},"num += 1\nnum = num + 1\n",[139,156172,156173,156181],{"__ignoreMap":31},[142,156174,156175,156177,156179],{"class":144,"line":145},[142,156176,155796],{"class":152},[142,156178,9506],{"class":148},[142,156180,55728],{"class":201},[142,156182,156183,156185,156187,156190,156192],{"class":144,"line":64},[142,156184,155796],{"class":152},[142,156186,198],{"class":148},[142,156188,156189],{"class":152}," num ",[142,156191,634],{"class":148},[142,156193,55728],{"class":201},[14,156195,156196,156197,101027,156200,28414],{},"Python 没有 ",[139,156198,156199],{},"num++",[139,156201,156202],{},"num--",[113,156204,156206],{"id":156205},"_273-比较运算符","2.7.3 比较运算符",[14,156208,156209],{},"比较运算结果是布尔值。",[133,156211,156213],{"className":30407,"code":156212,"language":30409,"meta":31,"style":31},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[139,156214,156215,156229,156244,156258],{"__ignoreMap":31},[142,156216,156217,156219,156221,156223,156225,156227],{"class":144,"line":145},[142,156218,30444],{"class":201},[142,156220,153],{"class":152},[142,156222,599],{"class":201},[142,156224,26251],{"class":148},[142,156226,2176],{"class":201},[142,156228,159],{"class":152},[142,156230,156231,156233,156235,156237,156240,156242],{"class":144,"line":64},[142,156232,30444],{"class":201},[142,156234,153],{"class":152},[142,156236,599],{"class":201},[142,156238,156239],{"class":148}," >=",[142,156241,2066],{"class":201},[142,156243,159],{"class":152},[142,156245,156246,156248,156250,156252,156254,156256],{"class":144,"line":1208},[142,156247,30444],{"class":201},[142,156249,153],{"class":152},[142,156251,599],{"class":201},[142,156253,101568],{"class":148},[142,156255,2111],{"class":201},[142,156257,159],{"class":152},[142,156259,156260,156262,156264,156266,156269,156271],{"class":144,"line":1223},[142,156261,30444],{"class":201},[142,156263,153],{"class":152},[142,156265,599],{"class":201},[142,156267,156268],{"class":148}," !=",[142,156270,2111],{"class":201},[142,156272,159],{"class":152},[14,156274,156275,156276,156278,156279,28414],{},"注意：判断相等用 ",[139,156277,2977],{},"，赋值用 ",[139,156280,198],{},[133,156282,156284],{"className":30407,"code":156283,"language":30409,"meta":31,"style":31},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[139,156285,156286,156298],{"__ignoreMap":31},[142,156287,156288,156290,156292,156295],{"class":144,"line":145},[142,156289,146555],{"class":152},[142,156291,198],{"class":148},[142,156293,156294],{"class":201}," 18",[142,156296,156297],{"class":211},"       # 赋值\n",[142,156299,156300,156302,156304,156306],{"class":144,"line":64},[142,156301,146555],{"class":152},[142,156303,2977],{"class":148},[142,156305,156294],{"class":201},[142,156307,156308],{"class":211},"      # 判断是否相等\n",[113,156310,156312],{"id":156311},"_274-逻辑运算符","2.7.4 逻辑运算符",[290,156314,156315,156323],{},[293,156316,156317],{},[296,156318,156319,156321],{},[299,156320,155933],{},[299,156322,25898],{},[337,156324,156325,156334,156343],{},[296,156326,156327,156331],{},[342,156328,156329],{},[139,156330,30491],{},[342,156332,156333],{},"并且",[296,156335,156336,156340],{},[342,156337,156338],{},[139,156339,115099],{},[342,156341,156342],{},"或者",[296,156344,156345,156350],{},[342,156346,156347],{},[139,156348,156349],{},"not",[342,156351,156352],{},"取反",[133,156354,156356],{"className":30407,"code":156355,"language":30409,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[139,156357,156358,156366,156375,156379,156394,156408],{"__ignoreMap":31},[142,156359,156360,156362,156364],{"class":144,"line":145},[142,156361,146555],{"class":152},[142,156363,198],{"class":148},[142,156365,88094],{"class":201},[142,156367,156368,156371,156373],{"class":144,"line":64},[142,156369,156370],{"class":152},"has_ticket ",[142,156372,198],{"class":148},[142,156374,153608],{"class":201},[142,156376,156377],{"class":144,"line":1208},[142,156378,2428],{"emptyLinePlaceholder":69},[142,156380,156381,156383,156385,156387,156389,156391],{"class":144,"line":1223},[142,156382,30444],{"class":201},[142,156384,155777],{"class":152},[142,156386,1738],{"class":148},[142,156388,156294],{"class":201},[142,156390,120438],{"class":148},[142,156392,156393],{"class":152}," has_ticket)\n",[142,156395,156396,156398,156400,156402,156404,156406],{"class":144,"line":1229},[142,156397,30444],{"class":201},[142,156399,155777],{"class":152},[142,156401,1063],{"class":148},[142,156403,156294],{"class":201},[142,156405,114210],{"class":148},[142,156407,156393],{"class":152},[142,156409,156410,156412,156414,156416],{"class":144,"line":1243},[142,156411,30444],{"class":201},[142,156413,153],{"class":152},[142,156415,156349],{"class":148},[142,156417,156393],{"class":152},[84,156419,156421],{"id":156420},"_28-字符串定义","2.8 字符串定义",[14,156423,156424],{},"三种常见写法：",[133,156426,156428],{"className":30407,"code":156427,"language":30409,"meta":31,"style":31},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[139,156429,156430,156440,156449,156459],{"__ignoreMap":31},[142,156431,156432,156435,156437],{"class":144,"line":145},[142,156433,156434],{"class":152},"name1 ",[142,156436,198],{"class":148},[142,156438,156439],{"class":257}," '小明'\n",[142,156441,156442,156445,156447],{"class":144,"line":64},[142,156443,156444],{"class":152},"name2 ",[142,156446,198],{"class":148},[142,156448,149362],{"class":257},[142,156450,156451,156454,156456],{"class":144,"line":1208},[142,156452,156453],{"class":152},"text ",[142,156455,198],{"class":148},[142,156457,156458],{"class":257}," \"\"\"这是多行字符串\n",[142,156460,156461],{"class":144,"line":1223},[142,156462,156463],{"class":257},"可以换行\"\"\"\n",[14,156465,156466],{},"字符串中包含引号：",[133,156468,156470],{"className":30407,"code":156469,"language":30409,"meta":31,"style":31},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[139,156471,156472,156482,156492],{"__ignoreMap":31},[142,156473,156474,156477,156479],{"class":144,"line":145},[142,156475,156476],{"class":152},"msg ",[142,156478,198],{"class":148},[142,156480,156481],{"class":257}," \"他说:'你好'\"\n",[142,156483,156484,156487,156489],{"class":144,"line":64},[142,156485,156486],{"class":152},"msg2 ",[142,156488,198],{"class":148},[142,156490,156491],{"class":257}," '他说:\"你好\"'\n",[142,156493,156494,156497,156499,156502,156505,156508,156510],{"class":144,"line":1208},[142,156495,156496],{"class":152},"msg3 ",[142,156498,198],{"class":148},[142,156500,156501],{"class":257}," \"他说:",[142,156503,156504],{"class":201},"\\\"",[142,156506,156507],{"class":257},"你好",[142,156509,156504],{"class":201},[142,156511,25162],{"class":257},[14,156513,156514],{},"常见转义字符：",[290,156516,156517,156526],{},[293,156518,156519],{},[296,156520,156521,156524],{},[299,156522,156523],{},"写法",[299,156525,100709],{},[337,156527,156528,156538,156547,156557,156566],{},[296,156529,156530,156535],{},[342,156531,156532],{},[139,156533,156534],{},"\\n",[342,156536,156537],{},"换行",[296,156539,156540,156544],{},[342,156541,156542],{},[139,156543,1259],{},[342,156545,156546],{},"制表符",[296,156548,156549,156554],{},[342,156550,156551],{},[139,156552,156553],{},"\\\\",[342,156555,156556],{},"反斜杠",[296,156558,156559,156563],{},[342,156560,156561],{},[139,156562,156504],{},[342,156564,156565],{},"双引号",[296,156567,156568,156573],{},[342,156569,156570],{},[139,156571,156572],{},"\\'",[342,156574,156575],{},"单引号",[84,156577,156579],{"id":156578},"_29-字符串拼接","2.9 字符串拼接",[133,156581,156583],{"className":30407,"code":156582,"language":30409,"meta":31,"style":31},"name = \"小明\"\nprint(\"你好，\" + name)\n",[139,156584,156585,156593],{"__ignoreMap":31},[142,156586,156587,156589,156591],{"class":144,"line":145},[142,156588,146545],{"class":152},[142,156590,198],{"class":148},[142,156592,149362],{"class":257},[142,156594,156595,156597,156599,156602,156604],{"class":144,"line":64},[142,156596,30444],{"class":201},[142,156598,153],{"class":152},[142,156600,156601],{"class":257},"\"你好，\"",[142,156603,45595],{"class":148},[142,156605,156606],{"class":152}," name)\n",[14,156608,156609],{},"字符串只能和字符串拼接：",[133,156611,156613],{"className":30407,"code":156612,"language":30409,"meta":31,"style":31},"age = 18\nprint(\"年龄:\" + str(age))\n",[139,156614,156615,156623],{"__ignoreMap":31},[142,156616,156617,156619,156621],{"class":144,"line":145},[142,156618,146555],{"class":152},[142,156620,198],{"class":148},[142,156622,146560],{"class":201},[142,156624,156625,156627,156629,156631,156633,156635],{"class":144,"line":64},[142,156626,30444],{"class":201},[142,156628,153],{"class":152},[142,156630,146526],{"class":257},[142,156632,45595],{"class":148},[142,156634,73948],{"class":201},[142,156636,156637],{"class":152},"(age))\n",[14,156639,156640],{},"更推荐使用格式化字符串。",[84,156642,156644],{"id":156643},"_210-字符串格式化","2.10 字符串格式化",[113,156646,156648],{"id":156647},"_2101-百分号格式化","2.10.1 百分号格式化",[133,156650,156652],{"className":30407,"code":156651,"language":30409,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[139,156653,156654,156662,156670,156679,156683],{"__ignoreMap":31},[142,156655,156656,156658,156660],{"class":144,"line":145},[142,156657,146545],{"class":152},[142,156659,198],{"class":148},[142,156661,149362],{"class":257},[142,156663,156664,156666,156668],{"class":144,"line":64},[142,156665,146555],{"class":152},[142,156667,198],{"class":148},[142,156669,146560],{"class":201},[142,156671,156672,156674,156676],{"class":144,"line":1208},[142,156673,155367],{"class":152},[142,156675,198],{"class":148},[142,156677,156678],{"class":201}," 95.5\n",[142,156680,156681],{"class":144,"line":1223},[142,156682,2428],{"emptyLinePlaceholder":69},[142,156684,156685,156687,156689,156692,156695,156698,156701,156704,156707,156709,156711],{"class":144,"line":1229},[142,156686,30444],{"class":201},[142,156688,153],{"class":152},[142,156690,156691],{"class":257},"\"姓名:",[142,156693,156694],{"class":201},"%s",[142,156696,156697],{"class":257}," 年龄:",[142,156699,156700],{"class":201},"%d",[142,156702,156703],{"class":257}," 分数:",[142,156705,156706],{"class":201},"%.1f",[142,156708,404],{"class":257},[142,156710,156090],{"class":148},[142,156712,156713],{"class":152}," (name, age, score))\n",[14,156715,156716],{},"常用占位符：",[290,156718,156719,156728],{},[293,156720,156721],{},[296,156722,156723,156726],{},[299,156724,156725],{},"占位符",[299,156727,25898],{},[337,156729,156730,156738,156746],{},[296,156731,156732,156736],{},[342,156733,156734],{},[139,156735,156694],{},[342,156737,155233],{},[296,156739,156740,156744],{},[342,156741,156742],{},[139,156743,156700],{},[342,156745,155211],{},[296,156747,156748,156753],{},[342,156749,156750],{},[139,156751,156752],{},"%f",[342,156754,155222],{},[14,156756,156757],{},"精度控制：",[133,156759,156761],{"className":30407,"code":156760,"language":30409,"meta":31,"style":31},"price = 12.3456\nprint(\"%.2f\" % price)\n",[139,156762,156763,156772],{"__ignoreMap":31},[142,156764,156765,156767,156769],{"class":144,"line":145},[142,156766,146690],{"class":152},[142,156768,198],{"class":148},[142,156770,156771],{"class":201}," 12.3456\n",[142,156773,156774,156776,156778,156780,156783,156785,156787],{"class":144,"line":64},[142,156775,30444],{"class":201},[142,156777,153],{"class":152},[142,156779,404],{"class":257},[142,156781,156782],{"class":201},"%.2f",[142,156784,404],{"class":257},[142,156786,156090],{"class":148},[142,156788,156789],{"class":152}," price)\n",[113,156791,156793],{"id":156792},"_2102-format方法","2.10.2 format方法",[133,156795,156797],{"className":30407,"code":156796,"language":30409,"meta":31,"style":31},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[139,156798,156799,156807,156815,156819,156838,156858],{"__ignoreMap":31},[142,156800,156801,156803,156805],{"class":144,"line":145},[142,156802,146545],{"class":152},[142,156804,198],{"class":148},[142,156806,149362],{"class":257},[142,156808,156809,156811,156813],{"class":144,"line":64},[142,156810,146555],{"class":152},[142,156812,198],{"class":148},[142,156814,146560],{"class":201},[142,156816,156817],{"class":144,"line":1208},[142,156818,2428],{"emptyLinePlaceholder":69},[142,156820,156821,156823,156825,156827,156829,156831,156833,156835],{"class":144,"line":1223},[142,156822,30444],{"class":201},[142,156824,153],{"class":152},[142,156826,156691],{"class":257},[142,156828,32488],{"class":201},[142,156830,156697],{"class":257},[142,156832,32488],{"class":201},[142,156834,404],{"class":257},[142,156836,156837],{"class":152},".format(name, age))\n",[142,156839,156840,156842,156844,156846,156849,156851,156854,156856],{"class":144,"line":1229},[142,156841,30444],{"class":201},[142,156843,153],{"class":152},[142,156845,156691],{"class":257},[142,156847,156848],{"class":201},"{0}",[142,156850,156697],{"class":257},[142,156852,156853],{"class":201},"{1}",[142,156855,404],{"class":257},[142,156857,156837],{"class":152},[142,156859,156860,156862,156864,156866,156869,156871,156874,156876,156879,156881,156883,156886,156888,156890],{"class":144,"line":1243},[142,156861,30444],{"class":201},[142,156863,153],{"class":152},[142,156865,156691],{"class":257},[142,156867,156868],{"class":201},"{name}",[142,156870,156697],{"class":257},[142,156872,156873],{"class":201},"{age}",[142,156875,404],{"class":257},[142,156877,156878],{"class":152},".format(",[142,156880,79839],{"class":5245},[142,156882,198],{"class":148},[142,156884,156885],{"class":152},"name, ",[142,156887,70250],{"class":5245},[142,156889,198],{"class":148},[142,156891,156892],{"class":152},"age))\n",[113,156894,156896],{"id":156895},"_2103-f-string","2.10.3 f-string",[14,156898,156899],{},"推荐写法：",[133,156901,156903],{"className":30407,"code":156902,"language":30409,"meta":31,"style":31},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[139,156904,156905,156913,156921,156929,156933],{"__ignoreMap":31},[142,156906,156907,156909,156911],{"class":144,"line":145},[142,156908,146545],{"class":152},[142,156910,198],{"class":148},[142,156912,149362],{"class":257},[142,156914,156915,156917,156919],{"class":144,"line":64},[142,156916,146555],{"class":152},[142,156918,198],{"class":148},[142,156920,146560],{"class":201},[142,156922,156923,156925,156927],{"class":144,"line":1208},[142,156924,155367],{"class":152},[142,156926,198],{"class":148},[142,156928,156678],{"class":201},[142,156930,156931],{"class":144,"line":1223},[142,156932,2428],{"emptyLinePlaceholder":69},[142,156934,156935,156937,156939,156941,156943,156945,156947,156949,156951,156953,156955,156957,156959,156961,156964,156967,156969,156971],{"class":144,"line":1229},[142,156936,30444],{"class":201},[142,156938,153],{"class":152},[142,156940,205],{"class":148},[142,156942,156691],{"class":257},[142,156944,1049],{"class":201},[142,156946,79839],{"class":152},[142,156948,1099],{"class":201},[142,156950,156697],{"class":257},[142,156952,1049],{"class":201},[142,156954,70250],{"class":152},[142,156956,1099],{"class":201},[142,156958,156703],{"class":257},[142,156960,1049],{"class":201},[142,156962,156963],{"class":152},"score",[142,156965,156966],{"class":148},":.1f",[142,156968,1099],{"class":201},[142,156970,404],{"class":257},[142,156972,159],{"class":152},[14,156974,156975],{},"表达式也可以放进去：",[133,156977,156979],{"className":30407,"code":156978,"language":30409,"meta":31,"style":31},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[139,156980,156981,156989,156997],{"__ignoreMap":31},[142,156982,156983,156985,156987],{"class":144,"line":145},[142,156984,146690],{"class":152},[142,156986,198],{"class":148},[142,156988,146695],{"class":201},[142,156990,156991,156993,156995],{"class":144,"line":64},[142,156992,146700],{"class":152},[142,156994,198],{"class":148},[142,156996,54456],{"class":201},[142,156998,156999,157001,157003,157005,157008,157010,157012,157014,157017,157019,157022],{"class":144,"line":1208},[142,157000,30444],{"class":201},[142,157002,153],{"class":152},[142,157004,205],{"class":148},[142,157006,157007],{"class":257},"\"总价:",[142,157009,1049],{"class":201},[142,157011,146690],{"class":152},[142,157013,608],{"class":148},[142,157015,157016],{"class":152}," count",[142,157018,1099],{"class":201},[142,157020,157021],{"class":257},"元\"",[142,157023,159],{"class":152},[84,157025,157027],{"id":157026},"_211-input输入","2.11 input输入",[14,157029,157030,157033],{},[139,157031,157032],{},"input()"," 会暂停程序，等待用户输入。",[133,157035,157037],{"className":30407,"code":157036,"language":30409,"meta":31,"style":31},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[139,157038,157039,157053],{"__ignoreMap":31},[142,157040,157041,157043,157045,157047,157049,157051],{"class":144,"line":145},[142,157042,146545],{"class":152},[142,157044,198],{"class":148},[142,157046,60634],{"class":201},[142,157048,153],{"class":152},[142,157050,152388],{"class":257},[142,157052,159],{"class":152},[142,157054,157055,157057,157059,157061,157064,157066,157068,157070,157072],{"class":144,"line":64},[142,157056,30444],{"class":201},[142,157058,153],{"class":152},[142,157060,205],{"class":148},[142,157062,157063],{"class":257},"\"你好，",[142,157065,1049],{"class":201},[142,157067,79839],{"class":152},[142,157069,1099],{"class":201},[142,157071,404],{"class":257},[142,157073,159],{"class":152},[14,157075,157076],{},"输入整数：",[133,157078,157080],{"className":30407,"code":157079,"language":30409,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[139,157081,157082,157100],{"__ignoreMap":31},[142,157083,157084,157086,157088,157090,157092,157094,157096,157098],{"class":144,"line":145},[142,157085,146555],{"class":152},[142,157087,198],{"class":148},[142,157089,2410],{"class":201},[142,157091,153],{"class":152},[142,157093,53850],{"class":201},[142,157095,153],{"class":152},[142,157097,152403],{"class":257},[142,157099,30526],{"class":152},[142,157101,157102,157104,157106,157108,157111,157113,157115,157117,157120,157122],{"class":144,"line":64},[142,157103,30444],{"class":201},[142,157105,153],{"class":152},[142,157107,205],{"class":148},[142,157109,157110],{"class":257},"\"明年你",[142,157112,1049],{"class":201},[142,157114,146555],{"class":152},[142,157116,634],{"class":148},[142,157118,157119],{"class":201}," 1}",[142,157121,149413],{"class":257},[142,157123,159],{"class":152},[14,157125,157126],{},"输入小数：",[133,157128,157130],{"className":30407,"code":157129,"language":30409,"meta":31,"style":31},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[139,157131,157132,157151],{"__ignoreMap":31},[142,157133,157134,157136,157138,157140,157142,157144,157146,157149],{"class":144,"line":145},[142,157135,155340],{"class":152},[142,157137,198],{"class":148},[142,157139,109806],{"class":201},[142,157141,153],{"class":152},[142,157143,53850],{"class":201},[142,157145,153],{"class":152},[142,157147,157148],{"class":257},"\"请输入身高:\"",[142,157150,30526],{"class":152},[142,157152,157153,157155,157157,157159,157162,157164,157166,157169,157171,157174],{"class":144,"line":64},[142,157154,30444],{"class":201},[142,157156,153],{"class":152},[142,157158,205],{"class":148},[142,157160,157161],{"class":257},"\"身高:",[142,157163,1049],{"class":201},[142,157165,25010],{"class":152},[142,157167,157168],{"class":148},":.2f",[142,157170,1099],{"class":201},[142,157172,157173],{"class":257},"米\"",[142,157175,159],{"class":152},[84,157177,157179],{"id":157178},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157181,123301],{},[96,157183,157184,157187,157190,157193],{},[99,157185,157186],{},"输入商品单价。",[99,157188,157189],{},"输入购买数量。",[99,157191,157192],{},"输入折扣，例如 0.8 表示八折。",[99,157194,157195],{},"输出最终金额，保留两位小数。",[14,157197,10064],{},[133,157199,157201],{"className":30407,"code":157200,"language":30409,"meta":31,"style":31},"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",[139,157202,157203,157222,157241,157261,157265,157285,157289,157312,157333,157355],{"__ignoreMap":31},[142,157204,157205,157207,157209,157211,157213,157215,157217,157220],{"class":144,"line":145},[142,157206,146690],{"class":152},[142,157208,198],{"class":148},[142,157210,109806],{"class":201},[142,157212,153],{"class":152},[142,157214,53850],{"class":201},[142,157216,153],{"class":152},[142,157218,157219],{"class":257},"\"请输入商品单价:\"",[142,157221,30526],{"class":152},[142,157223,157224,157226,157228,157230,157232,157234,157236,157239],{"class":144,"line":64},[142,157225,146700],{"class":152},[142,157227,198],{"class":148},[142,157229,2410],{"class":201},[142,157231,153],{"class":152},[142,157233,53850],{"class":201},[142,157235,153],{"class":152},[142,157237,157238],{"class":257},"\"请输入购买数量:\"",[142,157240,30526],{"class":152},[142,157242,157243,157246,157248,157250,157252,157254,157256,157259],{"class":144,"line":1208},[142,157244,157245],{"class":152},"discount ",[142,157247,198],{"class":148},[142,157249,109806],{"class":201},[142,157251,153],{"class":152},[142,157253,53850],{"class":201},[142,157255,153],{"class":152},[142,157257,157258],{"class":257},"\"请输入折扣:\"",[142,157260,30526],{"class":152},[142,157262,157263],{"class":144,"line":1223},[142,157264,2428],{"emptyLinePlaceholder":69},[142,157266,157267,157270,157272,157275,157277,157280,157282],{"class":144,"line":1229},[142,157268,157269],{"class":152},"total ",[142,157271,198],{"class":148},[142,157273,157274],{"class":152}," price ",[142,157276,608],{"class":148},[142,157278,157279],{"class":152}," count ",[142,157281,608],{"class":148},[142,157283,157284],{"class":152}," discount\n",[142,157286,157287],{"class":144,"line":1243},[142,157288,2428],{"emptyLinePlaceholder":69},[142,157290,157291,157293,157295,157297,157300,157302,157304,157306,157308,157310],{"class":144,"line":1249},[142,157292,30444],{"class":201},[142,157294,153],{"class":152},[142,157296,205],{"class":148},[142,157298,157299],{"class":257},"\"商品单价:",[142,157301,1049],{"class":201},[142,157303,79844],{"class":152},[142,157305,157168],{"class":148},[142,157307,1099],{"class":201},[142,157309,404],{"class":257},[142,157311,159],{"class":152},[142,157313,157314,157316,157318,157320,157323,157325,157327,157329,157331],{"class":144,"line":1340},[142,157315,30444],{"class":201},[142,157317,153],{"class":152},[142,157319,205],{"class":148},[142,157321,157322],{"class":257},"\"购买数量:",[142,157324,1049],{"class":201},[142,157326,84463],{"class":152},[142,157328,1099],{"class":201},[142,157330,404],{"class":257},[142,157332,159],{"class":152},[142,157334,157335,157337,157339,157341,157344,157346,157349,157351,157353],{"class":144,"line":1346},[142,157336,30444],{"class":201},[142,157338,153],{"class":152},[142,157340,205],{"class":148},[142,157342,157343],{"class":257},"\"折扣:",[142,157345,1049],{"class":201},[142,157347,157348],{"class":152},"discount",[142,157350,1099],{"class":201},[142,157352,404],{"class":257},[142,157354,159],{"class":152},[142,157356,157357,157359,157361,157363,157366,157368,157371,157373,157375,157377],{"class":144,"line":1358},[142,157358,30444],{"class":201},[142,157360,153],{"class":152},[142,157362,205],{"class":148},[142,157364,157365],{"class":257},"\"应付金额:",[142,157367,1049],{"class":201},[142,157369,157370],{"class":152},"total",[142,157372,157168],{"class":148},[142,157374,1099],{"class":201},[142,157376,157021],{"class":257},[142,157378,159],{"class":152},[84,157380,157382],{"id":157381},"_213-易错点","2.13 易错点",[96,157384,157385,157390,157396,157404,157407],{},[99,157386,157387,157389],{},[139,157388,157032],{}," 的结果是字符串，做运算前要转换。",[99,157391,157392,157393,28414],{},"字符串拼接时，数字要先 ",[139,157394,157395],{},"str()",[99,157397,157398,157400,157401,157403],{},[139,157399,198],{}," 是赋值，",[139,157402,2977],{}," 是比较。",[99,157405,157406],{},"Python 没有自增自减运算符。",[99,157408,157409],{},"浮点数计算可能有精度误差：",[133,157411,157413],{"className":30407,"code":157412,"language":30409,"meta":31,"style":31},"print(0.1 + 0.2)\n",[139,157414,157415],{"__ignoreMap":31},[142,157416,157417,157419,157421,157423,157425,157428],{"class":144,"line":145},[142,157418,30444],{"class":201},[142,157420,153],{"class":152},[142,157422,86239],{"class":201},[142,157424,45595],{"class":148},[142,157426,157427],{"class":201}," 0.2",[142,157429,159],{"class":152},[14,157431,157432,157433,157436],{},"金额计算如果要求严格，可以后续学习 ",[139,157434,157435],{},"decimal"," 模块。",[84,157438,157440],{"id":157439},"_214-本章练习","2.14 本章练习",[96,157442,157443,157446,157449,157452,157455],{},[99,157444,157445],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[99,157447,157448],{},"输入圆的半径，计算面积，保留两位小数。",[99,157450,157451],{},"输入工资和奖金，计算总收入。",[99,157453,157454],{},"输入摄氏温度，转换为华氏温度。",[99,157456,157457],{},"写一个 BMI 计算程序：",[133,157459,157462],{"className":157460,"code":157461,"language":5216,"meta":31},[5214],"BMI = 体重kg \u002F 身高m ** 2\n",[139,157463,157461],{"__ignoreMap":31},[5155,157465,157466],{},"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":31,"searchDepth":64,"depth":64,"links":157468},[157469,157470,157471,157472,157473,157474,157475,157481,157482,157483,157488,157489,157490,157491],{"id":155030,"depth":64,"text":155031},{"id":155139,"depth":64,"text":155140},{"id":155310,"depth":64,"text":155311},{"id":155387,"depth":64,"text":155388},{"id":50760,"depth":64,"text":50761},{"id":155693,"depth":64,"text":155694},{"id":155919,"depth":64,"text":155920,"children":157476},[157477,157478,157479,157480],{"id":155923,"depth":1208,"text":155924},{"id":156117,"depth":1208,"text":156118},{"id":156205,"depth":1208,"text":156206},{"id":156311,"depth":1208,"text":156312},{"id":156420,"depth":64,"text":156421},{"id":156578,"depth":64,"text":156579},{"id":156643,"depth":64,"text":156644,"children":157484},[157485,157486,157487],{"id":156647,"depth":1208,"text":156648},{"id":156792,"depth":1208,"text":156793},{"id":156895,"depth":1208,"text":156896},{"id":157026,"depth":64,"text":157027},{"id":157178,"depth":64,"text":157179},{"id":157381,"depth":64,"text":157382},{"id":157439,"depth":64,"text":157440},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155022,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157498,"title":157499,"body":157500,"description":66,"extension":67,"meta":159136,"navigation":69,"path":159137,"seo":159138,"stem":159139,"__hash__":159140},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157501,"toc":159117},[157502,157505,157509,157512,157527,157530,157558,157562,157612,157614,157630,157633,157659,157662,157666,157733,157736,157752,157756,157759,157877,157880,157887,157936,157942,157946,157949,158062,158065,158069,158073,158076,158126,158130,158133,158183,158187,158190,158228,158232,158235,158281,158284,158319,158323,158328,158331,158377,158379,158446,158450,158456,158567,158576,158580,158582,158593,158595,158761,158765,158767,158781,158783,158997,159001,159020,159037,159040,159086,159090,159114],[10,157503,157499],{"id":157504},"_3-判断语句",[84,157506,157508],{"id":157507},"_31-布尔值","3.1 布尔值",[14,157510,157511],{},"判断语句依赖布尔值：",[133,157513,157515],{"className":30407,"code":157514,"language":30409,"meta":31,"style":31},"True\nFalse\n",[139,157516,157517,157522],{"__ignoreMap":31},[142,157518,157519],{"class":144,"line":145},[142,157520,157521],{"class":201},"True\n",[142,157523,157524],{"class":144,"line":64},[142,157525,157526],{"class":201},"False\n",[14,157528,157529],{},"比较表达式会产生布尔值：",[133,157531,157533],{"className":30407,"code":157532,"language":30409,"meta":31,"style":31},"age = 18\nprint(age >= 18)  # True\n",[139,157534,157535,157543],{"__ignoreMap":31},[142,157536,157537,157539,157541],{"class":144,"line":145},[142,157538,146555],{"class":152},[142,157540,198],{"class":148},[142,157542,146560],{"class":201},[142,157544,157545,157547,157549,157551,157553,157555],{"class":144,"line":64},[142,157546,30444],{"class":201},[142,157548,155777],{"class":152},[142,157550,1738],{"class":148},[142,157552,156294],{"class":201},[142,157554,45837],{"class":152},[142,157556,157557],{"class":211},"# True\n",[84,157559,157561],{"id":157560},"_32-if基础语法","3.2 if基础语法",[133,157563,157565],{"className":30407,"code":157564,"language":30409,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[139,157566,157567,157585,157589,157601],{"__ignoreMap":31},[142,157568,157569,157571,157573,157575,157577,157579,157581,157583],{"class":144,"line":145},[142,157570,146555],{"class":152},[142,157572,198],{"class":148},[142,157574,2410],{"class":201},[142,157576,153],{"class":152},[142,157578,53850],{"class":201},[142,157580,153],{"class":152},[142,157582,152403],{"class":257},[142,157584,30526],{"class":152},[142,157586,157587],{"class":144,"line":64},[142,157588,2428],{"emptyLinePlaceholder":69},[142,157590,157591,157593,157595,157597,157599],{"class":144,"line":1208},[142,157592,1559],{"class":148},[142,157594,15736],{"class":152},[142,157596,1738],{"class":148},[142,157598,156294],{"class":201},[142,157600,3767],{"class":152},[142,157602,157603,157605,157607,157610],{"class":144,"line":1223},[142,157604,31328],{"class":201},[142,157606,153],{"class":152},[142,157608,157609],{"class":257},"\"可以进入网吧\"",[142,157611,159],{"class":152},[14,157613,9054],{},[96,157615,157616,157621,157624,157627],{},[99,157617,157618,157620],{},[139,157619,1559],{}," 后面是条件表达式。",[99,157622,157623],{},"条件后面必须写冒号。",[99,157625,157626],{},"条件成立时执行缩进代码块。",[99,157628,157629],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157631,157632],{},"错误示例：",[133,157634,157636],{"className":30407,"code":157635,"language":30409,"meta":31,"style":31},"if age >= 18\n    print(\"可以进入\")\n",[139,157637,157638,157648],{"__ignoreMap":31},[142,157639,157640,157642,157644,157646],{"class":144,"line":145},[142,157641,1559],{"class":148},[142,157643,15736],{"class":152},[142,157645,1738],{"class":148},[142,157647,146560],{"class":201},[142,157649,157650,157652,157654,157657],{"class":144,"line":64},[142,157651,31328],{"class":201},[142,157653,153],{"class":152},[142,157655,157656],{"class":257},"\"可以进入\"",[142,157658,159],{"class":152},[14,157660,157661],{},"缺少冒号。",[84,157663,157665],{"id":157664},"_33-if-else","3.3 if else",[133,157667,157669],{"className":30407,"code":157668,"language":30409,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[139,157670,157671,157689,157693,157705,157716,157722],{"__ignoreMap":31},[142,157672,157673,157675,157677,157679,157681,157683,157685,157687],{"class":144,"line":145},[142,157674,146555],{"class":152},[142,157676,198],{"class":148},[142,157678,2410],{"class":201},[142,157680,153],{"class":152},[142,157682,53850],{"class":201},[142,157684,153],{"class":152},[142,157686,152403],{"class":257},[142,157688,30526],{"class":152},[142,157690,157691],{"class":144,"line":64},[142,157692,2428],{"emptyLinePlaceholder":69},[142,157694,157695,157697,157699,157701,157703],{"class":144,"line":1208},[142,157696,1559],{"class":148},[142,157698,15736],{"class":152},[142,157700,1738],{"class":148},[142,157702,156294],{"class":201},[142,157704,3767],{"class":152},[142,157706,157707,157709,157711,157714],{"class":144,"line":1223},[142,157708,31328],{"class":201},[142,157710,153],{"class":152},[142,157712,157713],{"class":257},"\"成年人\"",[142,157715,159],{"class":152},[142,157717,157718,157720],{"class":144,"line":1229},[142,157719,1729],{"class":148},[142,157721,3767],{"class":152},[142,157723,157724,157726,157728,157731],{"class":144,"line":1243},[142,157725,31328],{"class":201},[142,157727,153],{"class":152},[142,157729,157730],{"class":257},"\"未成年人\"",[142,157732,159],{"class":152},[14,157734,157735],{},"执行逻辑：",[96,157737,157738,157744,157749],{},[99,157739,157740,157741,157743],{},"条件成立，执行 ",[139,157742,1559],{}," 代码块。",[99,157745,157746,157747,157743],{},"条件不成立，执行 ",[139,157748,1729],{},[99,157750,157751],{},"两个代码块只会执行其中一个。",[84,157753,157755],{"id":157754},"_34-if-elif-else","3.4 if elif else",[14,157757,157758],{},"多条件判断：",[133,157760,157762],{"className":30407,"code":157761,"language":30409,"meta":31,"style":31},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[139,157763,157764,157782,157786,157800,157811,157825,157836,157849,157860,157866],{"__ignoreMap":31},[142,157765,157766,157768,157770,157772,157774,157776,157778,157780],{"class":144,"line":145},[142,157767,155367],{"class":152},[142,157769,198],{"class":148},[142,157771,2410],{"class":201},[142,157773,153],{"class":152},[142,157775,53850],{"class":201},[142,157777,153],{"class":152},[142,157779,152418],{"class":257},[142,157781,30526],{"class":152},[142,157783,157784],{"class":144,"line":64},[142,157785,2428],{"emptyLinePlaceholder":69},[142,157787,157788,157790,157793,157795,157798],{"class":144,"line":1208},[142,157789,1559],{"class":148},[142,157791,157792],{"class":152}," score ",[142,157794,1738],{"class":148},[142,157796,157797],{"class":201}," 90",[142,157799,3767],{"class":152},[142,157801,157802,157804,157806,157809],{"class":144,"line":1223},[142,157803,31328],{"class":201},[142,157805,153],{"class":152},[142,157807,157808],{"class":257},"\"优秀\"",[142,157810,159],{"class":152},[142,157812,157813,157816,157818,157820,157823],{"class":144,"line":1229},[142,157814,157815],{"class":148},"elif",[142,157817,157792],{"class":152},[142,157819,1738],{"class":148},[142,157821,157822],{"class":201}," 80",[142,157824,3767],{"class":152},[142,157826,157827,157829,157831,157834],{"class":144,"line":1243},[142,157828,31328],{"class":201},[142,157830,153],{"class":152},[142,157832,157833],{"class":257},"\"良好\"",[142,157835,159],{"class":152},[142,157837,157838,157840,157842,157844,157847],{"class":144,"line":1249},[142,157839,157815],{"class":148},[142,157841,157792],{"class":152},[142,157843,1738],{"class":148},[142,157845,157846],{"class":201}," 60",[142,157848,3767],{"class":152},[142,157850,157851,157853,157855,157858],{"class":144,"line":1340},[142,157852,31328],{"class":201},[142,157854,153],{"class":152},[142,157856,157857],{"class":257},"\"及格\"",[142,157859,159],{"class":152},[142,157861,157862,157864],{"class":144,"line":1346},[142,157863,1729],{"class":148},[142,157865,3767],{"class":152},[142,157867,157868,157870,157872,157875],{"class":144,"line":1358},[142,157869,31328],{"class":201},[142,157871,153],{"class":152},[142,157873,157874],{"class":257},"\"不及格\"",[142,157876,159],{"class":152},[14,157878,157879],{},"注意判断顺序很重要。",[14,157881,157882,157883,157886],{},"如果把 ",[139,157884,157885],{},"score >= 60"," 放在最前面：",[133,157888,157890],{"className":30407,"code":157889,"language":30409,"meta":31,"style":31},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[139,157891,157892,157904,157914,157926],{"__ignoreMap":31},[142,157893,157894,157896,157898,157900,157902],{"class":144,"line":145},[142,157895,1559],{"class":148},[142,157897,157792],{"class":152},[142,157899,1738],{"class":148},[142,157901,157846],{"class":201},[142,157903,3767],{"class":152},[142,157905,157906,157908,157910,157912],{"class":144,"line":64},[142,157907,31328],{"class":201},[142,157909,153],{"class":152},[142,157911,157857],{"class":257},[142,157913,159],{"class":152},[142,157915,157916,157918,157920,157922,157924],{"class":144,"line":1208},[142,157917,157815],{"class":148},[142,157919,157792],{"class":152},[142,157921,1738],{"class":148},[142,157923,157797],{"class":201},[142,157925,3767],{"class":152},[142,157927,157928,157930,157932,157934],{"class":144,"line":1223},[142,157929,31328],{"class":201},[142,157931,153],{"class":152},[142,157933,157808],{"class":257},[142,157935,159],{"class":152},[14,157937,157938,157939,157941],{},"成绩 95 会先满足 ",[139,157940,157885],{},"，后面的优秀分支就不会执行。",[84,157943,157945],{"id":157944},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157947,157948],{},"嵌套判断就是在一个判断内部再写判断。",[133,157950,157952],{"className":30407,"code":157951,"language":30409,"meta":31,"style":31},"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",[139,157953,157954,157972,157987,157991,158003,158017,158027,158034,158045,158051],{"__ignoreMap":31},[142,157955,157956,157958,157960,157962,157964,157966,157968,157970],{"class":144,"line":145},[142,157957,146555],{"class":152},[142,157959,198],{"class":148},[142,157961,2410],{"class":201},[142,157963,153],{"class":152},[142,157965,53850],{"class":201},[142,157967,153],{"class":152},[142,157969,152403],{"class":257},[142,157971,30526],{"class":152},[142,157973,157974,157976,157978,157980,157982,157985],{"class":144,"line":64},[142,157975,156370],{"class":152},[142,157977,198],{"class":148},[142,157979,60634],{"class":201},[142,157981,153],{"class":152},[142,157983,157984],{"class":257},"\"是否有票(y\u002Fn):\"",[142,157986,159],{"class":152},[142,157988,157989],{"class":144,"line":1208},[142,157990,2428],{"emptyLinePlaceholder":69},[142,157992,157993,157995,157997,157999,158001],{"class":144,"line":1223},[142,157994,1559],{"class":148},[142,157996,15736],{"class":152},[142,157998,1738],{"class":148},[142,158000,156294],{"class":201},[142,158002,3767],{"class":152},[142,158004,158005,158007,158010,158012,158015],{"class":144,"line":1229},[142,158006,3129],{"class":148},[142,158008,158009],{"class":152}," has_ticket ",[142,158011,2977],{"class":148},[142,158013,158014],{"class":257}," \"y\"",[142,158016,3767],{"class":152},[142,158018,158019,158021,158023,158025],{"class":144,"line":1243},[142,158020,32480],{"class":201},[142,158022,153],{"class":152},[142,158024,157656],{"class":257},[142,158026,159],{"class":152},[142,158028,158029,158032],{"class":144,"line":1249},[142,158030,158031],{"class":148},"    else",[142,158033,3767],{"class":152},[142,158035,158036,158038,158040,158043],{"class":144,"line":1340},[142,158037,32480],{"class":201},[142,158039,153],{"class":152},[142,158041,158042],{"class":257},"\"请先买票\"",[142,158044,159],{"class":152},[142,158046,158047,158049],{"class":144,"line":1346},[142,158048,1729],{"class":148},[142,158050,3767],{"class":152},[142,158052,158053,158055,158057,158060],{"class":144,"line":1358},[142,158054,31328],{"class":201},[142,158056,153],{"class":152},[142,158058,158059],{"class":257},"\"未成年人禁止进入\"",[142,158061,159],{"class":152},[14,158063,158064],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[84,158066,158068],{"id":158067},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[113,158070,158072],{"id":158071},"_361-and","3.6.1 and",[14,158074,158075],{},"两个条件都成立才成立。",[133,158077,158079],{"className":30407,"code":158078,"language":30409,"meta":31,"style":31},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[139,158080,158081,158089,158097,158101,158116],{"__ignoreMap":31},[142,158082,158083,158085,158087],{"class":144,"line":145},[142,158084,146555],{"class":152},[142,158086,198],{"class":148},[142,158088,88094],{"class":201},[142,158090,158091,158093,158095],{"class":144,"line":64},[142,158092,156370],{"class":152},[142,158094,198],{"class":148},[142,158096,153608],{"class":201},[142,158098,158099],{"class":144,"line":1208},[142,158100,2428],{"emptyLinePlaceholder":69},[142,158102,158103,158105,158107,158109,158111,158113],{"class":144,"line":1223},[142,158104,1559],{"class":148},[142,158106,15736],{"class":152},[142,158108,1738],{"class":148},[142,158110,156294],{"class":201},[142,158112,120438],{"class":148},[142,158114,158115],{"class":152}," has_ticket:\n",[142,158117,158118,158120,158122,158124],{"class":144,"line":1229},[142,158119,31328],{"class":201},[142,158121,153],{"class":152},[142,158123,157656],{"class":257},[142,158125,159],{"class":152},[113,158127,158129],{"id":158128},"_362-or","3.6.2 or",[14,158131,158132],{},"只要一个条件成立就成立。",[133,158134,158136],{"className":30407,"code":158135,"language":30409,"meta":31,"style":31},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[139,158137,158138,158147,158156,158160,158172],{"__ignoreMap":31},[142,158139,158140,158143,158145],{"class":144,"line":145},[142,158141,158142],{"class":152},"is_vip ",[142,158144,198],{"class":148},[142,158146,125816],{"class":201},[142,158148,158149,158152,158154],{"class":144,"line":64},[142,158150,158151],{"class":152},"coupon ",[142,158153,198],{"class":148},[142,158155,153608],{"class":201},[142,158157,158158],{"class":144,"line":1208},[142,158159,2428],{"emptyLinePlaceholder":69},[142,158161,158162,158164,158167,158169],{"class":144,"line":1223},[142,158163,1559],{"class":148},[142,158165,158166],{"class":152}," is_vip ",[142,158168,115099],{"class":148},[142,158170,158171],{"class":152}," coupon:\n",[142,158173,158174,158176,158178,158181],{"class":144,"line":1229},[142,158175,31328],{"class":201},[142,158177,153],{"class":152},[142,158179,158180],{"class":257},"\"可以享受优惠\"",[142,158182,159],{"class":152},[113,158184,158186],{"id":158185},"_363-not","3.6.3 not",[14,158188,158189],{},"取反。",[133,158191,158193],{"className":30407,"code":158192,"language":30409,"meta":31,"style":31},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[139,158194,158195,158204,158208,158217],{"__ignoreMap":31},[142,158196,158197,158200,158202],{"class":144,"line":145},[142,158198,158199],{"class":152},"is_closed ",[142,158201,198],{"class":148},[142,158203,125816],{"class":201},[142,158205,158206],{"class":144,"line":64},[142,158207,2428],{"emptyLinePlaceholder":69},[142,158209,158210,158212,158214],{"class":144,"line":1208},[142,158211,1559],{"class":148},[142,158213,38959],{"class":148},[142,158215,158216],{"class":152}," is_closed:\n",[142,158218,158219,158221,158223,158226],{"class":144,"line":1223},[142,158220,31328],{"class":201},[142,158222,153],{"class":152},[142,158224,158225],{"class":257},"\"店铺营业中\"",[142,158227,159],{"class":152},[84,158229,158231],{"id":158230},"_37-链式比较","3.7 链式比较",[14,158233,158234],{},"Python 支持链式比较：",[133,158236,158238],{"className":30407,"code":158237,"language":30409,"meta":31,"style":31},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[139,158239,158240,158249,158253,158270],{"__ignoreMap":31},[142,158241,158242,158244,158246],{"class":144,"line":145},[142,158243,155367],{"class":152},[142,158245,198],{"class":148},[142,158247,158248],{"class":201}," 85\n",[142,158250,158251],{"class":144,"line":64},[142,158252,2428],{"emptyLinePlaceholder":69},[142,158254,158255,158257,158259,158262,158264,158266,158268],{"class":144,"line":1208},[142,158256,1559],{"class":148},[142,158258,4121],{"class":201},[142,158260,158261],{"class":148}," \u003C=",[142,158263,157792],{"class":152},[142,158265,1616],{"class":148},[142,158267,5783],{"class":201},[142,158269,3767],{"class":152},[142,158271,158272,158274,158276,158279],{"class":144,"line":1223},[142,158273,31328],{"class":201},[142,158275,153],{"class":152},[142,158277,158278],{"class":257},"\"成绩合法\"",[142,158280,159],{"class":152},[14,158282,158283],{},"等价于：",[133,158285,158287],{"className":30407,"code":158286,"language":30409,"meta":31,"style":31},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[139,158288,158289,158309],{"__ignoreMap":31},[142,158290,158291,158293,158295,158297,158299,158301,158303,158305,158307],{"class":144,"line":145},[142,158292,1559],{"class":148},[142,158294,157792],{"class":152},[142,158296,1738],{"class":148},[142,158298,4121],{"class":201},[142,158300,120438],{"class":148},[142,158302,157792],{"class":152},[142,158304,1616],{"class":148},[142,158306,5783],{"class":201},[142,158308,3767],{"class":152},[142,158310,158311,158313,158315,158317],{"class":144,"line":64},[142,158312,31328],{"class":201},[142,158314,153],{"class":152},[142,158316,158278],{"class":257},[142,158318,159],{"class":152},[84,158320,158322],{"id":158321},"_38-真值和假值","3.8 真值和假值",[14,158324,116476,158325,158327],{},[139,158326,1559],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158329,158330],{},"假值：",[133,158332,158334],{"className":30407,"code":158333,"language":30409,"meta":31,"style":31},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[139,158335,158336,158340,158345,158349,158353,158358,158362,158366,158371],{"__ignoreMap":31},[142,158337,158338],{"class":144,"line":145},[142,158339,157526],{"class":201},[142,158341,158342],{"class":144,"line":64},[142,158343,158344],{"class":201},"None\n",[142,158346,158347],{"class":144,"line":1208},[142,158348,3113],{"class":201},[142,158350,158351],{"class":144,"line":1223},[142,158352,32371],{"class":201},[142,158354,158355],{"class":144,"line":1229},[142,158356,158357],{"class":257},"\"\"\n",[142,158359,158360],{"class":144,"line":1243},[142,158361,32386],{"class":152},[142,158363,158364],{"class":144,"line":1249},[142,158365,2004],{"class":152},[142,158367,158368],{"class":144,"line":1340},[142,158369,158370],{"class":152},"{}\n",[142,158372,158373,158375],{"class":144,"line":1346},[142,158374,155299],{"class":201},[142,158376,2004],{"class":152},[14,158378,15164],{},[133,158380,158382],{"className":30407,"code":158381,"language":30409,"meta":31,"style":31},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[139,158383,158384,158398,158402,158409,158429,158435],{"__ignoreMap":31},[142,158385,158386,158388,158390,158392,158394,158396],{"class":144,"line":145},[142,158387,146545],{"class":152},[142,158389,198],{"class":148},[142,158391,60634],{"class":201},[142,158393,153],{"class":152},[142,158395,152388],{"class":257},[142,158397,159],{"class":152},[142,158399,158400],{"class":144,"line":64},[142,158401,2428],{"emptyLinePlaceholder":69},[142,158403,158404,158406],{"class":144,"line":1208},[142,158405,1559],{"class":148},[142,158407,158408],{"class":152}," name:\n",[142,158410,158411,158413,158415,158417,158419,158421,158423,158425,158427],{"class":144,"line":1223},[142,158412,31328],{"class":201},[142,158414,153],{"class":152},[142,158416,205],{"class":148},[142,158418,157063],{"class":257},[142,158420,1049],{"class":201},[142,158422,79839],{"class":152},[142,158424,1099],{"class":201},[142,158426,404],{"class":257},[142,158428,159],{"class":152},[142,158430,158431,158433],{"class":144,"line":1229},[142,158432,1729],{"class":148},[142,158434,3767],{"class":152},[142,158436,158437,158439,158441,158444],{"class":144,"line":1243},[142,158438,31328],{"class":201},[142,158440,153],{"class":152},[142,158442,158443],{"class":257},"\"姓名不能为空\"",[142,158445,159],{"class":152},[84,158447,158449],{"id":158448},"_39-match语句","3.9 match语句",[14,158451,158452,158453,158455],{},"Python 3.10 开始支持 ",[139,158454,71294],{},"。它适合处理固定选项。",[133,158457,158459],{"className":30407,"code":158458,"language":30409,"meta":31,"style":31},"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",[139,158460,158461,158477,158481,158488,158498,158509,158518,158529,158538,158549,158556],{"__ignoreMap":31},[142,158462,158463,158466,158468,158470,158472,158475],{"class":144,"line":145},[142,158464,158465],{"class":152},"command ",[142,158467,198],{"class":148},[142,158469,60634],{"class":201},[142,158471,153],{"class":152},[142,158473,158474],{"class":257},"\"请输入命令:\"",[142,158476,159],{"class":152},[142,158478,158479],{"class":144,"line":64},[142,158480,2428],{"emptyLinePlaceholder":69},[142,158482,158483,158485],{"class":144,"line":1208},[142,158484,71294],{"class":148},[142,158486,158487],{"class":152}," command:\n",[142,158489,158490,158493,158496],{"class":144,"line":1223},[142,158491,158492],{"class":148},"    case",[142,158494,158495],{"class":257}," \"start\"",[142,158497,3767],{"class":152},[142,158499,158500,158502,158504,158507],{"class":144,"line":1229},[142,158501,32480],{"class":201},[142,158503,153],{"class":152},[142,158505,158506],{"class":257},"\"启动\"",[142,158508,159],{"class":152},[142,158510,158511,158513,158516],{"class":144,"line":1243},[142,158512,158492],{"class":148},[142,158514,158515],{"class":257}," \"stop\"",[142,158517,3767],{"class":152},[142,158519,158520,158522,158524,158527],{"class":144,"line":1249},[142,158521,32480],{"class":201},[142,158523,153],{"class":152},[142,158525,158526],{"class":257},"\"停止\"",[142,158528,159],{"class":152},[142,158530,158531,158533,158536],{"class":144,"line":1340},[142,158532,158492],{"class":148},[142,158534,158535],{"class":257}," \"restart\"",[142,158537,3767],{"class":152},[142,158539,158540,158542,158544,158547],{"class":144,"line":1346},[142,158541,32480],{"class":201},[142,158543,153],{"class":152},[142,158545,158546],{"class":257},"\"重启\"",[142,158548,159],{"class":152},[142,158550,158551,158553],{"class":144,"line":1358},[142,158552,158492],{"class":148},[142,158554,158555],{"class":152}," _:\n",[142,158557,158558,158560,158562,158565],{"class":144,"line":1640},[142,158559,32480],{"class":201},[142,158561,153],{"class":152},[142,158563,158564],{"class":257},"\"未知命令\"",[142,158566,159],{"class":152},[14,158568,158569,158570,158572,158573,158575],{},"入门阶段掌握 ",[139,158571,154667],{}," 更重要，",[139,158574,71294],{}," 可以作为补充。",[84,158577,158579],{"id":158578},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158581,123301],{},[96,158583,158584,158587,158590],{},[99,158585,158586],{},"输入成绩。",[99,158588,158589],{},"判断成绩是否合法。",[99,158591,158592],{},"输出等级。",[14,158594,10064],{},[133,158596,158598],{"className":30407,"code":158597,"language":30409,"meta":31,"style":31},"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",[139,158599,158600,158618,158622,158640,158651,158663,158674,158686,158697,158710,158721,158733,158744,158750],{"__ignoreMap":31},[142,158601,158602,158604,158606,158608,158610,158612,158614,158616],{"class":144,"line":145},[142,158603,155367],{"class":152},[142,158605,198],{"class":148},[142,158607,109806],{"class":201},[142,158609,153],{"class":152},[142,158611,53850],{"class":201},[142,158613,153],{"class":152},[142,158615,152418],{"class":257},[142,158617,30526],{"class":152},[142,158619,158620],{"class":144,"line":64},[142,158621,2428],{"emptyLinePlaceholder":69},[142,158623,158624,158626,158628,158630,158632,158634,158636,158638],{"class":144,"line":1208},[142,158625,1559],{"class":148},[142,158627,38959],{"class":148},[142,158629,4121],{"class":201},[142,158631,158261],{"class":148},[142,158633,157792],{"class":152},[142,158635,1616],{"class":148},[142,158637,5783],{"class":201},[142,158639,3767],{"class":152},[142,158641,158642,158644,158646,158649],{"class":144,"line":1223},[142,158643,31328],{"class":201},[142,158645,153],{"class":152},[142,158647,158648],{"class":257},"\"成绩不合法\"",[142,158650,159],{"class":152},[142,158652,158653,158655,158657,158659,158661],{"class":144,"line":1229},[142,158654,157815],{"class":148},[142,158656,157792],{"class":152},[142,158658,1738],{"class":148},[142,158660,157797],{"class":201},[142,158662,3767],{"class":152},[142,158664,158665,158667,158669,158672],{"class":144,"line":1243},[142,158666,31328],{"class":201},[142,158668,153],{"class":152},[142,158670,158671],{"class":257},"\"等级:A\"",[142,158673,159],{"class":152},[142,158675,158676,158678,158680,158682,158684],{"class":144,"line":1249},[142,158677,157815],{"class":148},[142,158679,157792],{"class":152},[142,158681,1738],{"class":148},[142,158683,157822],{"class":201},[142,158685,3767],{"class":152},[142,158687,158688,158690,158692,158695],{"class":144,"line":1340},[142,158689,31328],{"class":201},[142,158691,153],{"class":152},[142,158693,158694],{"class":257},"\"等级:B\"",[142,158696,159],{"class":152},[142,158698,158699,158701,158703,158705,158708],{"class":144,"line":1346},[142,158700,157815],{"class":148},[142,158702,157792],{"class":152},[142,158704,1738],{"class":148},[142,158706,158707],{"class":201}," 70",[142,158709,3767],{"class":152},[142,158711,158712,158714,158716,158719],{"class":144,"line":1358},[142,158713,31328],{"class":201},[142,158715,153],{"class":152},[142,158717,158718],{"class":257},"\"等级:C\"",[142,158720,159],{"class":152},[142,158722,158723,158725,158727,158729,158731],{"class":144,"line":1640},[142,158724,157815],{"class":148},[142,158726,157792],{"class":152},[142,158728,1738],{"class":148},[142,158730,157846],{"class":201},[142,158732,3767],{"class":152},[142,158734,158735,158737,158739,158742],{"class":144,"line":1645},[142,158736,31328],{"class":201},[142,158738,153],{"class":152},[142,158740,158741],{"class":257},"\"等级:D\"",[142,158743,159],{"class":152},[142,158745,158746,158748],{"class":144,"line":1651},[142,158747,1729],{"class":148},[142,158749,3767],{"class":152},[142,158751,158752,158754,158756,158759],{"class":144,"line":1656},[142,158753,31328],{"class":201},[142,158755,153],{"class":152},[142,158757,158758],{"class":257},"\"等级:E\"",[142,158760,159],{"class":152},[84,158762,158764],{"id":158763},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158766,123301],{},[96,158768,158769,158772,158775,158778],{},[99,158770,158771],{},"输入消费金额。",[99,158773,158774],{},"输入会员等级，普通、银卡、金卡。",[99,158776,158777],{},"普通不打折，银卡 9 折，金卡 8 折。",[99,158779,158780],{},"满 500 再减 50。",[14,158782,10064],{},[133,158784,158786],{"className":30407,"code":158785,"language":30409,"meta":31,"style":31},"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",[139,158787,158788,158808,158824,158828,158836,158840,158854,158864,158877,158886,158899,158907,158913,158924,158928,158942,158946,158960,158970,158974],{"__ignoreMap":31},[142,158789,158790,158793,158795,158797,158799,158801,158803,158806],{"class":144,"line":145},[142,158791,158792],{"class":152},"amount ",[142,158794,198],{"class":148},[142,158796,109806],{"class":201},[142,158798,153],{"class":152},[142,158800,53850],{"class":201},[142,158802,153],{"class":152},[142,158804,158805],{"class":257},"\"请输入消费金额:\"",[142,158807,30526],{"class":152},[142,158809,158810,158813,158815,158817,158819,158822],{"class":144,"line":64},[142,158811,158812],{"class":152},"level ",[142,158814,198],{"class":148},[142,158816,60634],{"class":201},[142,158818,153],{"class":152},[142,158820,158821],{"class":257},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[142,158823,159],{"class":152},[142,158825,158826],{"class":144,"line":1208},[142,158827,2428],{"emptyLinePlaceholder":69},[142,158829,158830,158832,158834],{"class":144,"line":1223},[142,158831,157245],{"class":152},[142,158833,198],{"class":148},[142,158835,55728],{"class":201},[142,158837,158838],{"class":144,"line":1229},[142,158839,2428],{"emptyLinePlaceholder":69},[142,158841,158842,158844,158847,158849,158852],{"class":144,"line":1243},[142,158843,1559],{"class":148},[142,158845,158846],{"class":152}," level ",[142,158848,2977],{"class":148},[142,158850,158851],{"class":257}," \"银卡\"",[142,158853,3767],{"class":152},[142,158855,158856,158859,158861],{"class":144,"line":1249},[142,158857,158858],{"class":152},"    discount ",[142,158860,198],{"class":148},[142,158862,158863],{"class":201}," 0.9\n",[142,158865,158866,158868,158870,158872,158875],{"class":144,"line":1340},[142,158867,157815],{"class":148},[142,158869,158846],{"class":152},[142,158871,2977],{"class":148},[142,158873,158874],{"class":257}," \"金卡\"",[142,158876,3767],{"class":152},[142,158878,158879,158881,158883],{"class":144,"line":1346},[142,158880,158858],{"class":152},[142,158882,198],{"class":148},[142,158884,158885],{"class":201}," 0.8\n",[142,158887,158888,158890,158892,158894,158897],{"class":144,"line":1358},[142,158889,157815],{"class":148},[142,158891,158846],{"class":152},[142,158893,2977],{"class":148},[142,158895,158896],{"class":257}," \"普通\"",[142,158898,3767],{"class":152},[142,158900,158901,158903,158905],{"class":144,"line":1640},[142,158902,158858],{"class":152},[142,158904,198],{"class":148},[142,158906,55728],{"class":201},[142,158908,158909,158911],{"class":144,"line":1645},[142,158910,1729],{"class":148},[142,158912,3767],{"class":152},[142,158914,158915,158917,158919,158922],{"class":144,"line":1651},[142,158916,31328],{"class":201},[142,158918,153],{"class":152},[142,158920,158921],{"class":257},"\"会员等级输入错误，按普通会员计算\"",[142,158923,159],{"class":152},[142,158925,158926],{"class":144,"line":1656},[142,158927,2428],{"emptyLinePlaceholder":69},[142,158929,158930,158933,158935,158938,158940],{"class":144,"line":1670},[142,158931,158932],{"class":152},"pay ",[142,158934,198],{"class":148},[142,158936,158937],{"class":152}," amount ",[142,158939,608],{"class":148},[142,158941,157284],{"class":152},[142,158943,158944],{"class":144,"line":1675},[142,158945,2428],{"emptyLinePlaceholder":69},[142,158947,158948,158950,158953,158955,158958],{"class":144,"line":1681},[142,158949,1559],{"class":148},[142,158951,158952],{"class":152}," pay ",[142,158954,1738],{"class":148},[142,158956,158957],{"class":201}," 500",[142,158959,3767],{"class":152},[142,158961,158962,158965,158967],{"class":144,"line":1702},[142,158963,158964],{"class":152},"    pay ",[142,158966,150261],{"class":148},[142,158968,158969],{"class":201}," 50\n",[142,158971,158972],{"class":144,"line":1707},[142,158973,2428],{"emptyLinePlaceholder":69},[142,158975,158976,158978,158980,158982,158984,158986,158989,158991,158993,158995],{"class":144,"line":1721},[142,158977,30444],{"class":201},[142,158979,153],{"class":152},[142,158981,205],{"class":148},[142,158983,157365],{"class":257},[142,158985,1049],{"class":201},[142,158987,158988],{"class":152},"pay",[142,158990,157168],{"class":148},[142,158992,1099],{"class":201},[142,158994,157021],{"class":257},[142,158996,159],{"class":152},[84,158998,159000],{"id":158999},"_312-易错点","3.12 易错点",[96,159002,159003,159006,159009,159012,159017],{},[99,159004,159005],{},"冒号不能漏。",[99,159007,159008],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[99,159010,159011],{},"多分支判断要注意顺序。",[99,159013,159014,159015,28414],{},"判断相等用 ",[139,159016,2977],{},[99,159018,159019],{},"字符串比较区分大小写：",[133,159021,159023],{"className":30407,"code":159022,"language":30409,"meta":31,"style":31},"\"Y\" == \"y\"  # False\n",[139,159024,159025],{"__ignoreMap":31},[142,159026,159027,159030,159032,159034],{"class":144,"line":145},[142,159028,159029],{"class":257},"\"Y\"",[142,159031,101568],{"class":148},[142,159033,158014],{"class":257},[142,159035,159036],{"class":211},"  # False\n",[14,159038,159039],{},"可转换后再判断：",[133,159041,159043],{"className":30407,"code":159042,"language":30409,"meta":31,"style":31},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[139,159044,159045,159062,159075],{"__ignoreMap":31},[142,159046,159047,159050,159052,159054,159056,159059],{"class":144,"line":145},[142,159048,159049],{"class":152},"answer ",[142,159051,198],{"class":148},[142,159053,60634],{"class":201},[142,159055,153],{"class":152},[142,159057,159058],{"class":257},"\"是否继续(y\u002Fn):\"",[142,159060,159061],{"class":152},").lower()\n",[142,159063,159064,159066,159069,159071,159073],{"class":144,"line":64},[142,159065,1559],{"class":148},[142,159067,159068],{"class":152}," answer ",[142,159070,2977],{"class":148},[142,159072,158014],{"class":257},[142,159074,3767],{"class":152},[142,159076,159077,159079,159081,159084],{"class":144,"line":1208},[142,159078,31328],{"class":201},[142,159080,153],{"class":152},[142,159082,159083],{"class":257},"\"继续\"",[142,159085,159],{"class":152},[84,159087,159089],{"id":159088},"_313-本章练习","3.13 本章练习",[96,159091,159092,159095,159098,159101,159111],{},[99,159093,159094],{},"输入年龄，判断是否成年。",[99,159096,159097],{},"输入年份，判断是否为闰年。",[99,159099,159100],{},"输入三个数字，输出最大值。",[99,159102,159103,159104,159107,159108,159110],{},"写登录判断：用户名是 ",[139,159105,159106],{},"admin"," 且密码是 ",[139,159109,15113],{}," 才登录成功。",[99,159112,159113],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5155,159115,159116],{},"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":31,"searchDepth":64,"depth":64,"links":159118},[159119,159120,159121,159122,159123,159124,159129,159130,159131,159132,159133,159134,159135],{"id":157507,"depth":64,"text":157508},{"id":157560,"depth":64,"text":157561},{"id":157664,"depth":64,"text":157665},{"id":157754,"depth":64,"text":157755},{"id":157944,"depth":64,"text":157945},{"id":158067,"depth":64,"text":158068,"children":159125},[159126,159127,159128],{"id":158071,"depth":1208,"text":158072},{"id":158128,"depth":1208,"text":158129},{"id":158185,"depth":1208,"text":158186},{"id":158230,"depth":64,"text":158231},{"id":158321,"depth":64,"text":158322},{"id":158448,"depth":64,"text":158449},{"id":158578,"depth":64,"text":158579},{"id":158763,"depth":64,"text":158764},{"id":158999,"depth":64,"text":159000},{"id":159088,"depth":64,"text":159089},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157499,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159142,"title":159143,"body":159144,"description":66,"extension":67,"meta":160913,"navigation":69,"path":160914,"seo":160915,"stem":160916,"__hash__":160917},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159145,"toc":160893},[159146,159149,159153,159159,159162,159179,159183,159185,159202,159204,159249,159251,159268,159272,159275,159341,159344,159362,159366,159527,159536,159540,159544,159549,159596,159598,159604,159608,159613,159660,159662,159668,159672,159677,159713,159716,159763,159767,159773,159831,159836,159867,159872,159876,159931,159934,160006,160009,160068,160072,160075,160150,160153,160157,160263,160266,160292,160296,160308,160377,160380,160472,160476,160478,160489,160491,160621,160625,160827,160835,160839,160869,160873,160890],[10,159147,159143],{"id":159148},"_4-循环语句",[84,159150,159152],{"id":159151},"_41-为什么需要循环","4.1 为什么需要循环",[14,159154,159155,159156,159158],{},"如果要输出 1 到 100，不应该写 100 行 ",[139,159157,146481],{},"，而应该用循环。",[14,159160,159161],{},"循环适合处理重复任务：",[96,159163,159164,159167,159170,159173,159176],{},[99,159165,159166],{},"重复输出。",[99,159168,159169],{},"重复输入。",[99,159171,159172],{},"遍历数据。",[99,159174,159175],{},"持续执行菜单。",[99,159177,159178],{},"批量处理文件或数据。",[84,159180,159182],{"id":159181},"_42-while循环","4.2 while循环",[14,159184,5210],{},[133,159186,159188],{"className":30407,"code":159187,"language":30409,"meta":31,"style":31},"while 条件:\n    循环体\n",[139,159189,159190,159197],{"__ignoreMap":31},[142,159191,159192,159194],{"class":144,"line":145},[142,159193,108672],{"class":148},[142,159195,159196],{"class":152}," 条件:\n",[142,159198,159199],{"class":144,"line":64},[142,159200,159201],{"class":152},"    循环体\n",[14,159203,15164],{},[133,159205,159207],{"className":30407,"code":159206,"language":30409,"meta":31,"style":31},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[139,159208,159209,159217,159221,159233,159240],{"__ignoreMap":31},[142,159210,159211,159213,159215],{"class":144,"line":145},[142,159212,100157],{"class":152},[142,159214,198],{"class":148},[142,159216,55728],{"class":201},[142,159218,159219],{"class":144,"line":64},[142,159220,2428],{"emptyLinePlaceholder":69},[142,159222,159223,159225,159227,159229,159231],{"class":144,"line":1208},[142,159224,108672],{"class":148},[142,159226,9467],{"class":152},[142,159228,1616],{"class":148},[142,159230,2176],{"class":201},[142,159232,3767],{"class":152},[142,159234,159235,159237],{"class":144,"line":1223},[142,159236,31328],{"class":201},[142,159238,159239],{"class":152},"(i)\n",[142,159241,159242,159245,159247],{"class":144,"line":1229},[142,159243,159244],{"class":152},"    i ",[142,159246,9506],{"class":148},[142,159248,55728],{"class":201},[14,159250,80958],{},[96,159252,159253,159259,159262,159265],{},[99,159254,159255,159256,28414],{},"判断条件 ",[139,159257,159258],{},"i \u003C= 5",[99,159260,159261],{},"条件成立，执行循环体。",[99,159263,159264],{},"执行完后回到条件判断。",[99,159266,159267],{},"条件不成立，退出循环。",[84,159269,159271],{"id":159270},"_43-while累加","4.3 while累加",[14,159273,159274],{},"计算 1 到 100 的和：",[133,159276,159278],{"className":30407,"code":159277,"language":30409,"meta":31,"style":31},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[139,159279,159280,159288,159296,159300,159312,159322,159330,159334],{"__ignoreMap":31},[142,159281,159282,159284,159286],{"class":144,"line":145},[142,159283,100157],{"class":152},[142,159285,198],{"class":148},[142,159287,55728],{"class":201},[142,159289,159290,159292,159294],{"class":144,"line":64},[142,159291,157269],{"class":152},[142,159293,198],{"class":148},[142,159295,47362],{"class":201},[142,159297,159298],{"class":144,"line":1208},[142,159299,2428],{"emptyLinePlaceholder":69},[142,159301,159302,159304,159306,159308,159310],{"class":144,"line":1223},[142,159303,108672],{"class":148},[142,159305,9467],{"class":152},[142,159307,1616],{"class":148},[142,159309,5783],{"class":201},[142,159311,3767],{"class":152},[142,159313,159314,159317,159319],{"class":144,"line":1229},[142,159315,159316],{"class":152},"    total ",[142,159318,9506],{"class":148},[142,159320,159321],{"class":152}," i\n",[142,159323,159324,159326,159328],{"class":144,"line":1243},[142,159325,159244],{"class":152},[142,159327,9506],{"class":148},[142,159329,55728],{"class":201},[142,159331,159332],{"class":144,"line":1249},[142,159333,2428],{"emptyLinePlaceholder":69},[142,159335,159336,159338],{"class":144,"line":1340},[142,159337,30444],{"class":201},[142,159339,159340],{"class":152},"(total)\n",[14,159342,159343],{},"核心思想：",[96,159345,159346,159351,159356],{},[99,159347,159348,159350],{},[139,159349,594],{}," 控制循环次数。",[99,159352,159353,159355],{},[139,159354,157370],{}," 保存累加结果。",[99,159357,159358,159359,159361],{},"每轮循环都要更新 ",[139,159360,594],{},"，否则可能死循环。",[84,159363,159365],{"id":159364},"_44-while猜数字","4.4 while猜数字",[133,159367,159369],{"className":30407,"code":159368,"language":30409,"meta":31,"style":31},"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",[139,159370,159371,159377,159381,159398,159406,159410,159418,159438,159447,159451,159463,159474,159484,159495,159501,159523],{"__ignoreMap":31},[142,159372,159373,159375],{"class":144,"line":145},[142,159374,30421],{"class":148},[142,159376,45357],{"class":152},[142,159378,159379],{"class":144,"line":64},[142,159380,2428],{"emptyLinePlaceholder":69},[142,159382,159383,159385,159387,159390,159392,159394,159396],{"class":144,"line":1208},[142,159384,159049],{"class":152},[142,159386,198],{"class":148},[142,159388,159389],{"class":152}," random.randint(",[142,159391,370],{"class":201},[142,159393,12464],{"class":152},[142,159395,464],{"class":201},[142,159397,159],{"class":152},[142,159399,159400,159402,159404],{"class":144,"line":1223},[142,159401,146700],{"class":152},[142,159403,198],{"class":148},[142,159405,47362],{"class":201},[142,159407,159408],{"class":144,"line":1229},[142,159409,2428],{"emptyLinePlaceholder":69},[142,159411,159412,159414,159416],{"class":144,"line":1243},[142,159413,108672],{"class":148},[142,159415,95301],{"class":201},[142,159417,3767],{"class":152},[142,159419,159420,159423,159425,159427,159429,159431,159433,159436],{"class":144,"line":1249},[142,159421,159422],{"class":152},"    guess ",[142,159424,198],{"class":148},[142,159426,2410],{"class":201},[142,159428,153],{"class":152},[142,159430,53850],{"class":201},[142,159432,153],{"class":152},[142,159434,159435],{"class":257},"\"请输入1到100之间的数字:\"",[142,159437,30526],{"class":152},[142,159439,159440,159443,159445],{"class":144,"line":1340},[142,159441,159442],{"class":152},"    count ",[142,159444,9506],{"class":148},[142,159446,55728],{"class":201},[142,159448,159449],{"class":144,"line":1346},[142,159450,2428],{"emptyLinePlaceholder":69},[142,159452,159453,159455,159458,159460],{"class":144,"line":1358},[142,159454,3129],{"class":148},[142,159456,159457],{"class":152}," guess ",[142,159459,1113],{"class":148},[142,159461,159462],{"class":152}," answer:\n",[142,159464,159465,159467,159469,159472],{"class":144,"line":1640},[142,159466,32480],{"class":201},[142,159468,153],{"class":152},[142,159470,159471],{"class":257},"\"猜大了\"",[142,159473,159],{"class":152},[142,159475,159476,159478,159480,159482],{"class":144,"line":1645},[142,159477,39322],{"class":148},[142,159479,159457],{"class":152},[142,159481,1063],{"class":148},[142,159483,159462],{"class":152},[142,159485,159486,159488,159490,159493],{"class":144,"line":1651},[142,159487,32480],{"class":201},[142,159489,153],{"class":152},[142,159491,159492],{"class":257},"\"猜小了\"",[142,159494,159],{"class":152},[142,159496,159497,159499],{"class":144,"line":1656},[142,159498,158031],{"class":148},[142,159500,3767],{"class":152},[142,159502,159503,159505,159507,159509,159512,159514,159516,159518,159521],{"class":144,"line":1670},[142,159504,32480],{"class":201},[142,159506,153],{"class":152},[142,159508,205],{"class":148},[142,159510,159511],{"class":257},"\"猜对了，一共猜了",[142,159513,1049],{"class":201},[142,159515,84463],{"class":152},[142,159517,1099],{"class":201},[142,159519,159520],{"class":257},"次\"",[142,159522,159],{"class":152},[142,159524,159525],{"class":144,"line":1675},[142,159526,31656],{"class":148},[14,159528,159529,159532,159533,159535],{},[139,159530,159531],{},"while True"," 表示无限循环，通常配合 ",[139,159534,2081],{}," 使用。",[84,159537,159539],{"id":159538},"_45-break和continue","4.5 break和continue",[113,159541,159543],{"id":159542},"_451-break","4.5.1 break",[14,159545,159546,159548],{},[139,159547,2081],{}," 直接结束整个循环。",[133,159550,159552],{"className":30407,"code":159551,"language":30409,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[139,159553,159554,159574,159586,159590],{"__ignoreMap":31},[142,159555,159556,159558,159560,159562,159564,159566,159568,159570,159572],{"class":144,"line":145},[142,159557,3053],{"class":148},[142,159559,9467],{"class":152},[142,159561,26072],{"class":148},[142,159563,32472],{"class":201},[142,159565,153],{"class":152},[142,159567,370],{"class":201},[142,159569,12464],{"class":152},[142,159571,497],{"class":201},[142,159573,30815],{"class":152},[142,159575,159576,159578,159580,159582,159584],{"class":144,"line":64},[142,159577,3129],{"class":148},[142,159579,9467],{"class":152},[142,159581,2977],{"class":148},[142,159583,78099],{"class":201},[142,159585,3767],{"class":152},[142,159587,159588],{"class":144,"line":1208},[142,159589,31656],{"class":148},[142,159591,159592,159594],{"class":144,"line":1223},[142,159593,31328],{"class":201},[142,159595,159239],{"class":152},[14,159597,146466],{},[133,159599,159602],{"className":159600,"code":159601,"language":5216,"meta":31},[5214],"1\n2\n",[139,159603,159601],{"__ignoreMap":31},[113,159605,159607],{"id":159606},"_452-continue","4.5.2 continue",[14,159609,159610,159612],{},[139,159611,154681],{}," 跳过本轮剩余代码，进入下一轮循环。",[133,159614,159616],{"className":30407,"code":159615,"language":30409,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[139,159617,159618,159638,159650,159654],{"__ignoreMap":31},[142,159619,159620,159622,159624,159626,159628,159630,159632,159634,159636],{"class":144,"line":145},[142,159621,3053],{"class":148},[142,159623,9467],{"class":152},[142,159625,26072],{"class":148},[142,159627,32472],{"class":201},[142,159629,153],{"class":152},[142,159631,370],{"class":201},[142,159633,12464],{"class":152},[142,159635,497],{"class":201},[142,159637,30815],{"class":152},[142,159639,159640,159642,159644,159646,159648],{"class":144,"line":64},[142,159641,3129],{"class":148},[142,159643,9467],{"class":152},[142,159645,2977],{"class":148},[142,159647,78099],{"class":201},[142,159649,3767],{"class":152},[142,159651,159652],{"class":144,"line":1208},[142,159653,148521],{"class":148},[142,159655,159656,159658],{"class":144,"line":1223},[142,159657,31328],{"class":201},[142,159659,159239],{"class":152},[14,159661,146466],{},[133,159663,159666],{"className":159664,"code":159665,"language":5216,"meta":31},[5214],"1\n2\n4\n5\n",[139,159667,159665],{"__ignoreMap":31},[84,159669,159671],{"id":159670},"_46-for循环","4.6 for循环",[14,159673,159674,159676],{},[139,159675,3053],{}," 常用于遍历序列。",[133,159678,159680],{"className":30407,"code":159679,"language":30409,"meta":31,"style":31},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[139,159681,159682,159691,159695,159706],{"__ignoreMap":31},[142,159683,159684,159686,159688],{"class":144,"line":145},[142,159685,146545],{"class":152},[142,159687,198],{"class":148},[142,159689,159690],{"class":257}," \"python\"\n",[142,159692,159693],{"class":144,"line":64},[142,159694,2428],{"emptyLinePlaceholder":69},[142,159696,159697,159699,159702,159704],{"class":144,"line":1208},[142,159698,3053],{"class":148},[142,159700,159701],{"class":152}," ch ",[142,159703,26072],{"class":148},[142,159705,158408],{"class":152},[142,159707,159708,159710],{"class":144,"line":1223},[142,159709,31328],{"class":201},[142,159711,159712],{"class":152},"(ch)\n",[14,159714,159715],{},"遍历列表：",[133,159717,159719],{"className":30407,"code":159718,"language":30409,"meta":31,"style":31},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[139,159720,159721,159743,159747,159757],{"__ignoreMap":31},[142,159722,159723,159726,159728,159730,159732,159734,159736,159738,159741],{"class":144,"line":145},[142,159724,159725],{"class":152},"students ",[142,159727,198],{"class":148},[142,159729,52255],{"class":152},[142,159731,149897],{"class":257},[142,159733,12464],{"class":152},[142,159735,150945],{"class":257},[142,159737,12464],{"class":152},[142,159739,159740],{"class":257},"\"小刚\"",[142,159742,33275],{"class":152},[142,159744,159745],{"class":144,"line":64},[142,159746,2428],{"emptyLinePlaceholder":69},[142,159748,159749,159751,159753,159755],{"class":144,"line":1208},[142,159750,3053],{"class":148},[142,159752,152146],{"class":152},[142,159754,26072],{"class":148},[142,159756,152151],{"class":152},[142,159758,159759,159761],{"class":144,"line":1223},[142,159760,31328],{"class":201},[142,159762,150051],{"class":152},[84,159764,159766],{"id":159765},"_47-range函数","4.7 range函数",[14,159768,159769,159772],{},[139,159770,159771],{},"range()"," 用于生成整数序列。",[133,159774,159776],{"className":30407,"code":159775,"language":30409,"meta":31,"style":31},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[139,159777,159778,159792,159810],{"__ignoreMap":31},[142,159779,159780,159782,159784,159786,159789],{"class":144,"line":145},[142,159781,33445],{"class":201},[142,159783,153],{"class":152},[142,159785,472],{"class":201},[142,159787,159788],{"class":152},")          ",[142,159790,159791],{"class":211},"# 0,1,2,3,4\n",[142,159793,159794,159796,159798,159800,159802,159804,159807],{"class":144,"line":64},[142,159795,33445],{"class":201},[142,159797,153],{"class":152},[142,159799,370],{"class":201},[142,159801,12464],{"class":152},[142,159803,472],{"class":201},[142,159805,159806],{"class":152},")       ",[142,159808,159809],{"class":211},"# 1,2,3,4\n",[142,159811,159812,159814,159816,159818,159820,159822,159824,159826,159828],{"class":144,"line":1208},[142,159813,33445],{"class":201},[142,159815,153],{"class":152},[142,159817,370],{"class":201},[142,159819,12464],{"class":152},[142,159821,599],{"class":201},[142,159823,12464],{"class":152},[142,159825,230],{"class":201},[142,159827,155670],{"class":152},[142,159829,159830],{"class":211},"# 1,3,5,7,9\n",[14,159832,159833,159834,24647],{},"配合 ",[139,159835,3053],{},[133,159837,159839],{"className":30407,"code":159838,"language":30409,"meta":31,"style":31},"for i in range(1, 6):\n    print(i)\n",[139,159840,159841,159861],{"__ignoreMap":31},[142,159842,159843,159845,159847,159849,159851,159853,159855,159857,159859],{"class":144,"line":145},[142,159844,3053],{"class":148},[142,159846,9467],{"class":152},[142,159848,26072],{"class":148},[142,159850,32472],{"class":201},[142,159852,153],{"class":152},[142,159854,370],{"class":201},[142,159856,12464],{"class":152},[142,159858,497],{"class":201},[142,159860,30815],{"class":152},[142,159862,159863,159865],{"class":144,"line":64},[142,159864,31328],{"class":201},[142,159866,159239],{"class":152},[14,159868,9054,159869,159871],{},[139,159870,33445],{}," 的结束值不包含在内。",[84,159873,159875],{"id":159874},"_48-for循环求和","4.8 for循环求和",[133,159877,159879],{"className":30407,"code":159878,"language":30409,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[139,159880,159881,159889,159893,159913,159921,159925],{"__ignoreMap":31},[142,159882,159883,159885,159887],{"class":144,"line":145},[142,159884,157269],{"class":152},[142,159886,198],{"class":148},[142,159888,47362],{"class":201},[142,159890,159891],{"class":144,"line":64},[142,159892,2428],{"emptyLinePlaceholder":69},[142,159894,159895,159897,159899,159901,159903,159905,159907,159909,159911],{"class":144,"line":1208},[142,159896,3053],{"class":148},[142,159898,9467],{"class":152},[142,159900,26072],{"class":148},[142,159902,32472],{"class":201},[142,159904,153],{"class":152},[142,159906,370],{"class":201},[142,159908,12464],{"class":152},[142,159910,490],{"class":201},[142,159912,30815],{"class":152},[142,159914,159915,159917,159919],{"class":144,"line":1223},[142,159916,159316],{"class":152},[142,159918,9506],{"class":148},[142,159920,159321],{"class":152},[142,159922,159923],{"class":144,"line":1229},[142,159924,2428],{"emptyLinePlaceholder":69},[142,159926,159927,159929],{"class":144,"line":1243},[142,159928,30444],{"class":201},[142,159930,159340],{"class":152},[14,159932,159933],{},"求偶数和：",[133,159935,159937],{"className":30407,"code":159936,"language":30409,"meta":31,"style":31},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[139,159938,159939,159947,159951,159971,159987,159996,160000],{"__ignoreMap":31},[142,159940,159941,159943,159945],{"class":144,"line":145},[142,159942,157269],{"class":152},[142,159944,198],{"class":148},[142,159946,47362],{"class":201},[142,159948,159949],{"class":144,"line":64},[142,159950,2428],{"emptyLinePlaceholder":69},[142,159952,159953,159955,159957,159959,159961,159963,159965,159967,159969],{"class":144,"line":1208},[142,159954,3053],{"class":148},[142,159956,9467],{"class":152},[142,159958,26072],{"class":148},[142,159960,32472],{"class":201},[142,159962,153],{"class":152},[142,159964,370],{"class":201},[142,159966,12464],{"class":152},[142,159968,490],{"class":201},[142,159970,30815],{"class":152},[142,159972,159973,159975,159977,159979,159981,159983,159985],{"class":144,"line":1223},[142,159974,3129],{"class":148},[142,159976,9467],{"class":152},[142,159978,481],{"class":148},[142,159980,14784],{"class":201},[142,159982,101568],{"class":148},[142,159984,4121],{"class":201},[142,159986,3767],{"class":152},[142,159988,159989,159992,159994],{"class":144,"line":1229},[142,159990,159991],{"class":152},"        total ",[142,159993,9506],{"class":148},[142,159995,159321],{"class":152},[142,159997,159998],{"class":144,"line":1243},[142,159999,2428],{"emptyLinePlaceholder":69},[142,160001,160002,160004],{"class":144,"line":1249},[142,160003,30444],{"class":201},[142,160005,159340],{"class":152},[14,160007,160008],{},"也可以：",[133,160010,160012],{"className":30407,"code":160011,"language":30409,"meta":31,"style":31},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[139,160013,160014,160022,160026,160050,160058,160062],{"__ignoreMap":31},[142,160015,160016,160018,160020],{"class":144,"line":145},[142,160017,157269],{"class":152},[142,160019,198],{"class":148},[142,160021,47362],{"class":201},[142,160023,160024],{"class":144,"line":64},[142,160025,2428],{"emptyLinePlaceholder":69},[142,160027,160028,160030,160032,160034,160036,160038,160040,160042,160044,160046,160048],{"class":144,"line":1208},[142,160029,3053],{"class":148},[142,160031,9467],{"class":152},[142,160033,26072],{"class":148},[142,160035,32472],{"class":201},[142,160037,153],{"class":152},[142,160039,230],{"class":201},[142,160041,12464],{"class":152},[142,160043,490],{"class":201},[142,160045,12464],{"class":152},[142,160047,230],{"class":201},[142,160049,30815],{"class":152},[142,160051,160052,160054,160056],{"class":144,"line":1223},[142,160053,159316],{"class":152},[142,160055,9506],{"class":148},[142,160057,159321],{"class":152},[142,160059,160060],{"class":144,"line":1229},[142,160061,2428],{"emptyLinePlaceholder":69},[142,160063,160064,160066],{"class":144,"line":1243},[142,160065,30444],{"class":201},[142,160067,159340],{"class":152},[84,160069,160071],{"id":160070},"_49-循环嵌套","4.9 循环嵌套",[14,160073,160074],{},"嵌套循环就是循环里面再写循环。",[133,160076,160078],{"className":30407,"code":160077,"language":30409,"meta":31,"style":31},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[139,160079,160080,160100,160120],{"__ignoreMap":31},[142,160081,160082,160084,160086,160088,160090,160092,160094,160096,160098],{"class":144,"line":145},[142,160083,3053],{"class":148},[142,160085,9467],{"class":152},[142,160087,26072],{"class":148},[142,160089,32472],{"class":201},[142,160091,153],{"class":152},[142,160093,370],{"class":201},[142,160095,12464],{"class":152},[142,160097,446],{"class":201},[142,160099,30815],{"class":152},[142,160101,160102,160104,160106,160108,160110,160112,160114,160116,160118],{"class":144,"line":64},[142,160103,3229],{"class":148},[142,160105,9529],{"class":152},[142,160107,26072],{"class":148},[142,160109,32472],{"class":201},[142,160111,153],{"class":152},[142,160113,370],{"class":201},[142,160115,12464],{"class":152},[142,160117,446],{"class":201},[142,160119,30815],{"class":152},[142,160121,160122,160124,160126,160128,160131,160133,160135,160137,160140,160142,160144,160146,160148],{"class":144,"line":1208},[142,160123,32480],{"class":201},[142,160125,153],{"class":152},[142,160127,205],{"class":148},[142,160129,160130],{"class":257},"\"i=",[142,160132,1049],{"class":201},[142,160134,594],{"class":152},[142,160136,1099],{"class":201},[142,160138,160139],{"class":257},", j=",[142,160141,1049],{"class":201},[142,160143,620],{"class":152},[142,160145,1099],{"class":201},[142,160147,404],{"class":257},[142,160149,159],{"class":152},[14,160151,160152],{},"外层循环执行一次，内层循环执行完整一轮。",[84,160154,160156],{"id":160155},"_410-九九乘法表","4.10 九九乘法表",[133,160158,160160],{"className":30407,"code":160159,"language":30409,"meta":31,"style":31},"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",[139,160161,160162,160182,160205,160257],{"__ignoreMap":31},[142,160163,160164,160166,160168,160170,160172,160174,160176,160178,160180],{"class":144,"line":145},[142,160165,3053],{"class":148},[142,160167,9467],{"class":152},[142,160169,26072],{"class":148},[142,160171,32472],{"class":201},[142,160173,153],{"class":152},[142,160175,370],{"class":201},[142,160177,12464],{"class":152},[142,160179,599],{"class":201},[142,160181,30815],{"class":152},[142,160183,160184,160186,160188,160190,160192,160194,160196,160199,160201,160203],{"class":144,"line":64},[142,160185,3229],{"class":148},[142,160187,9529],{"class":152},[142,160189,26072],{"class":148},[142,160191,32472],{"class":201},[142,160193,153],{"class":152},[142,160195,370],{"class":201},[142,160197,160198],{"class":152},", i ",[142,160200,634],{"class":148},[142,160202,25147],{"class":201},[142,160204,30815],{"class":152},[142,160206,160207,160209,160211,160213,160215,160217,160219,160221,160223,160225,160227,160229,160231,160233,160235,160237,160239,160241,160243,160245,160247,160249,160251,160253,160255],{"class":144,"line":1208},[142,160208,32480],{"class":201},[142,160210,153],{"class":152},[142,160212,205],{"class":148},[142,160214,404],{"class":257},[142,160216,1049],{"class":201},[142,160218,620],{"class":152},[142,160220,1099],{"class":201},[142,160222,608],{"class":257},[142,160224,1049],{"class":201},[142,160226,594],{"class":152},[142,160228,1099],{"class":201},[142,160230,198],{"class":257},[142,160232,1049],{"class":201},[142,160234,100157],{"class":152},[142,160236,608],{"class":148},[142,160238,3438],{"class":152},[142,160240,1099],{"class":201},[142,160242,404],{"class":257},[142,160244,12464],{"class":152},[142,160246,45830],{"class":5245},[142,160248,198],{"class":148},[142,160250,404],{"class":257},[142,160252,1259],{"class":201},[142,160254,404],{"class":257},[142,160256,159],{"class":152},[142,160258,160259,160261],{"class":144,"line":1223},[142,160260,31328],{"class":201},[142,160262,2004],{"class":152},[14,160264,160265],{},"关键点：",[96,160267,160268,160274,160280,160286],{},[99,160269,160270,160271,160273],{},"外层 ",[139,160272,594],{}," 控制行。",[99,160275,160276,160277,160279],{},"内层 ",[139,160278,620],{}," 控制列。",[99,160281,160282,160283,160285],{},"每行结束后用 ",[139,160284,146481],{}," 换行。",[99,160287,160288,160291],{},[139,160289,160290],{},"end=\"\\t\""," 让同一行的内容横向排列。",[84,160293,160295],{"id":160294},"_411-循环else","4.11 循环else",[14,160297,160298,160299,160301,160302,160304,160305,160307],{},"Python 的循环可以带 ",[139,160300,1729],{},"。当循环正常结束时执行 ",[139,160303,1729],{},"，如果被 ",[139,160306,2081],{}," 打断，则不执行。",[133,160309,160311],{"className":30407,"code":160310,"language":30409,"meta":31,"style":31},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[139,160312,160313,160333,160345,160356,160360,160366],{"__ignoreMap":31},[142,160314,160315,160317,160319,160321,160323,160325,160327,160329,160331],{"class":144,"line":145},[142,160316,3053],{"class":148},[142,160318,9467],{"class":152},[142,160320,26072],{"class":148},[142,160322,32472],{"class":201},[142,160324,153],{"class":152},[142,160326,370],{"class":201},[142,160328,12464],{"class":152},[142,160330,497],{"class":201},[142,160332,30815],{"class":152},[142,160334,160335,160337,160339,160341,160343],{"class":144,"line":64},[142,160336,3129],{"class":148},[142,160338,9467],{"class":152},[142,160340,2977],{"class":148},[142,160342,2066],{"class":201},[142,160344,3767],{"class":152},[142,160346,160347,160349,160351,160354],{"class":144,"line":1208},[142,160348,32480],{"class":201},[142,160350,153],{"class":152},[142,160352,160353],{"class":257},"\"找到了\"",[142,160355,159],{"class":152},[142,160357,160358],{"class":144,"line":1223},[142,160359,31656],{"class":148},[142,160361,160362,160364],{"class":144,"line":1229},[142,160363,1729],{"class":148},[142,160365,3767],{"class":152},[142,160367,160368,160370,160372,160375],{"class":144,"line":1243},[142,160369,31328],{"class":201},[142,160371,153],{"class":152},[142,160373,160374],{"class":257},"\"没找到\"",[142,160376,159],{"class":152},[14,160378,160379],{},"常用于搜索。",[133,160381,160383],{"className":30407,"code":160382,"language":30409,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[139,160384,160385,160406,160415,160419,160431,160442,160452,160456,160462],{"__ignoreMap":31},[142,160386,160387,160390,160392,160394,160396,160398,160400,160402,160404],{"class":144,"line":145},[142,160388,160389],{"class":152},"names ",[142,160391,198],{"class":148},[142,160393,52255],{"class":152},[142,160395,149897],{"class":257},[142,160397,12464],{"class":152},[142,160399,150945],{"class":257},[142,160401,12464],{"class":152},[142,160403,159740],{"class":257},[142,160405,33275],{"class":152},[142,160407,160408,160410,160412],{"class":144,"line":64},[142,160409,111587],{"class":152},[142,160411,198],{"class":148},[142,160413,160414],{"class":257}," \"小李\"\n",[142,160416,160417],{"class":144,"line":1208},[142,160418,2428],{"emptyLinePlaceholder":69},[142,160420,160421,160423,160426,160428],{"class":144,"line":1223},[142,160422,3053],{"class":148},[142,160424,160425],{"class":152}," name ",[142,160427,26072],{"class":148},[142,160429,160430],{"class":152}," names:\n",[142,160432,160433,160435,160437,160439],{"class":144,"line":1229},[142,160434,3129],{"class":148},[142,160436,160425],{"class":152},[142,160438,2977],{"class":148},[142,160440,160441],{"class":152}," target:\n",[142,160443,160444,160446,160448,160450],{"class":144,"line":1243},[142,160445,32480],{"class":201},[142,160447,153],{"class":152},[142,160449,160353],{"class":257},[142,160451,159],{"class":152},[142,160453,160454],{"class":144,"line":1249},[142,160455,31656],{"class":148},[142,160457,160458,160460],{"class":144,"line":1340},[142,160459,1729],{"class":148},[142,160461,3767],{"class":152},[142,160463,160464,160466,160468,160470],{"class":144,"line":1346},[142,160465,31328],{"class":201},[142,160467,153],{"class":152},[142,160469,160374],{"class":257},[142,160471,159],{"class":152},[84,160473,160475],{"id":160474},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160477,123301],{},[96,160479,160480,160483,160486],{},[99,160481,160482],{},"用户最多输入 3 次密码。",[99,160484,160485],{},"密码正确则登录成功。",[99,160487,160488],{},"3 次都错误则锁定账号。",[14,160490,10064],{},[133,160492,160494],{"className":30407,"code":160493,"language":30409,"meta":31,"style":31},"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",[139,160495,160496,160506,160510,160526,160542,160546,160558,160569,160573,160579,160604,160610],{"__ignoreMap":31},[142,160497,160498,160501,160503],{"class":144,"line":145},[142,160499,160500],{"class":152},"password ",[142,160502,198],{"class":148},[142,160504,160505],{"class":257}," \"123456\"\n",[142,160507,160508],{"class":144,"line":64},[142,160509,2428],{"emptyLinePlaceholder":69},[142,160511,160512,160514,160516,160518,160520,160522,160524],{"class":144,"line":1208},[142,160513,3053],{"class":148},[142,160515,9467],{"class":152},[142,160517,26072],{"class":148},[142,160519,32472],{"class":201},[142,160521,153],{"class":152},[142,160523,224],{"class":201},[142,160525,30815],{"class":152},[142,160527,160528,160531,160533,160535,160537,160540],{"class":144,"line":1223},[142,160529,160530],{"class":152},"    user_password ",[142,160532,198],{"class":148},[142,160534,60634],{"class":201},[142,160536,153],{"class":152},[142,160538,160539],{"class":257},"\"请输入密码:\"",[142,160541,159],{"class":152},[142,160543,160544],{"class":144,"line":1229},[142,160545,2428],{"emptyLinePlaceholder":69},[142,160547,160548,160550,160553,160555],{"class":144,"line":1243},[142,160549,3129],{"class":148},[142,160551,160552],{"class":152}," user_password ",[142,160554,2977],{"class":148},[142,160556,160557],{"class":152}," password:\n",[142,160559,160560,160562,160564,160567],{"class":144,"line":1249},[142,160561,32480],{"class":201},[142,160563,153],{"class":152},[142,160565,160566],{"class":257},"\"登录成功\"",[142,160568,159],{"class":152},[142,160570,160571],{"class":144,"line":1340},[142,160572,31656],{"class":148},[142,160574,160575,160577],{"class":144,"line":1346},[142,160576,158031],{"class":148},[142,160578,3767],{"class":152},[142,160580,160581,160583,160585,160587,160590,160593,160595,160597,160599,160602],{"class":144,"line":1358},[142,160582,32480],{"class":201},[142,160584,153],{"class":152},[142,160586,205],{"class":148},[142,160588,160589],{"class":257},"\"密码错误，还剩",[142,160591,160592],{"class":201},"{2",[142,160594,52300],{"class":148},[142,160596,3060],{"class":152},[142,160598,1099],{"class":201},[142,160600,160601],{"class":257},"次机会\"",[142,160603,159],{"class":152},[142,160605,160606,160608],{"class":144,"line":1640},[142,160607,1729],{"class":148},[142,160609,3767],{"class":152},[142,160611,160612,160614,160616,160619],{"class":144,"line":1645},[142,160613,31328],{"class":201},[142,160615,153],{"class":152},[142,160617,160618],{"class":257},"\"账号已锁定\"",[142,160620,159],{"class":152},[84,160622,160624],{"id":160623},"_413-小案例菜单程序","4.13 小案例：菜单程序",[133,160626,160628],{"className":30407,"code":160627,"language":30409,"meta":31,"style":31},"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",[139,160629,160630,160638,160649,160660,160671,160682,160693,160697,160712,160716,160728,160739,160751,160762,160774,160785,160797,160807,160811,160817],{"__ignoreMap":31},[142,160631,160632,160634,160636],{"class":144,"line":145},[142,160633,108672],{"class":148},[142,160635,95301],{"class":201},[142,160637,3767],{"class":152},[142,160639,160640,160642,160644,160647],{"class":144,"line":64},[142,160641,31328],{"class":201},[142,160643,153],{"class":152},[142,160645,160646],{"class":257},"\"====== 菜单 ======\"",[142,160648,159],{"class":152},[142,160650,160651,160653,160655,160658],{"class":144,"line":1208},[142,160652,31328],{"class":201},[142,160654,153],{"class":152},[142,160656,160657],{"class":257},"\"1. 查询余额\"",[142,160659,159],{"class":152},[142,160661,160662,160664,160666,160669],{"class":144,"line":1223},[142,160663,31328],{"class":201},[142,160665,153],{"class":152},[142,160667,160668],{"class":257},"\"2. 存款\"",[142,160670,159],{"class":152},[142,160672,160673,160675,160677,160680],{"class":144,"line":1229},[142,160674,31328],{"class":201},[142,160676,153],{"class":152},[142,160678,160679],{"class":257},"\"3. 取款\"",[142,160681,159],{"class":152},[142,160683,160684,160686,160688,160691],{"class":144,"line":1243},[142,160685,31328],{"class":201},[142,160687,153],{"class":152},[142,160689,160690],{"class":257},"\"0. 退出\"",[142,160692,159],{"class":152},[142,160694,160695],{"class":144,"line":1249},[142,160696,2428],{"emptyLinePlaceholder":69},[142,160698,160699,160702,160704,160706,160708,160710],{"class":144,"line":1340},[142,160700,160701],{"class":152},"    choice ",[142,160703,198],{"class":148},[142,160705,60634],{"class":201},[142,160707,153],{"class":152},[142,160709,153082],{"class":257},[142,160711,159],{"class":152},[142,160713,160714],{"class":144,"line":1346},[142,160715,2428],{"emptyLinePlaceholder":69},[142,160717,160718,160720,160722,160724,160726],{"class":144,"line":1358},[142,160719,3129],{"class":148},[142,160721,153095],{"class":152},[142,160723,2977],{"class":148},[142,160725,153100],{"class":257},[142,160727,3767],{"class":152},[142,160729,160730,160732,160734,160737],{"class":144,"line":1640},[142,160731,32480],{"class":201},[142,160733,153],{"class":152},[142,160735,160736],{"class":257},"\"余额为1000元\"",[142,160738,159],{"class":152},[142,160740,160741,160743,160745,160747,160749],{"class":144,"line":1645},[142,160742,39322],{"class":148},[142,160744,153095],{"class":152},[142,160746,2977],{"class":148},[142,160748,153119],{"class":257},[142,160750,3767],{"class":152},[142,160752,160753,160755,160757,160760],{"class":144,"line":1651},[142,160754,32480],{"class":201},[142,160756,153],{"class":152},[142,160758,160759],{"class":257},"\"存款功能\"",[142,160761,159],{"class":152},[142,160763,160764,160766,160768,160770,160772],{"class":144,"line":1656},[142,160765,39322],{"class":148},[142,160767,153095],{"class":152},[142,160769,2977],{"class":148},[142,160771,153137],{"class":257},[142,160773,3767],{"class":152},[142,160775,160776,160778,160780,160783],{"class":144,"line":1670},[142,160777,32480],{"class":201},[142,160779,153],{"class":152},[142,160781,160782],{"class":257},"\"取款功能\"",[142,160784,159],{"class":152},[142,160786,160787,160789,160791,160793,160795],{"class":144,"line":1675},[142,160788,39322],{"class":148},[142,160790,153095],{"class":152},[142,160792,2977],{"class":148},[142,160794,153191],{"class":257},[142,160796,3767],{"class":152},[142,160798,160799,160801,160803,160805],{"class":144,"line":1681},[142,160800,32480],{"class":201},[142,160802,153],{"class":152},[142,160804,153202],{"class":257},[142,160806,159],{"class":152},[142,160808,160809],{"class":144,"line":1702},[142,160810,31656],{"class":148},[142,160812,160813,160815],{"class":144,"line":1707},[142,160814,158031],{"class":148},[142,160816,3767],{"class":152},[142,160818,160819,160821,160823,160825],{"class":144,"line":1721},[142,160820,32480],{"class":201},[142,160822,153],{"class":152},[142,160824,153223],{"class":257},[142,160826,159],{"class":152},[14,160828,160829,160830,160832,160833,28414],{},"菜单类程序通常使用 ",[139,160831,159531],{},"，用户选择退出时 ",[139,160834,2081],{},[84,160836,160838],{"id":160837},"_414-易错点","4.14 易错点",[96,160840,160841,160846,160852,160860,160866],{},[99,160842,160843,160845],{},[139,160844,108672],{}," 循环必须更新控制变量。",[99,160847,160848,160851],{},[139,160849,160850],{},"range(1, 10)"," 不包含 10。",[99,160853,160854,160856,160857,160859],{},[139,160855,2081],{}," 结束整个循环，",[139,160858,154681],{}," 只跳过本轮。",[99,160861,160862,160863,160865],{},"嵌套循环中，",[139,160864,2081],{}," 只跳出当前所在的一层循环。",[99,160867,160868],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[84,160870,160872],{"id":160871},"_415-本章练习","4.15 本章练习",[96,160874,160875,160878,160881,160884,160887],{},[99,160876,160877],{},"输出 1 到 100。",[99,160879,160880],{},"计算 1 到 100 的偶数和。",[99,160882,160883],{},"输出 100 以内能被 3 和 5 同时整除的数。",[99,160885,160886],{},"编写猜数字游戏，限制最多猜 7 次。",[99,160888,160889],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5155,160891,160892],{},"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":31,"searchDepth":64,"depth":64,"links":160894},[160895,160896,160897,160898,160899,160903,160904,160905,160906,160907,160908,160909,160910,160911,160912],{"id":159151,"depth":64,"text":159152},{"id":159181,"depth":64,"text":159182},{"id":159270,"depth":64,"text":159271},{"id":159364,"depth":64,"text":159365},{"id":159538,"depth":64,"text":159539,"children":160900},[160901,160902],{"id":159542,"depth":1208,"text":159543},{"id":159606,"depth":1208,"text":159607},{"id":159670,"depth":64,"text":159671},{"id":159765,"depth":64,"text":159766},{"id":159874,"depth":64,"text":159875},{"id":160070,"depth":64,"text":160071},{"id":160155,"depth":64,"text":160156},{"id":160294,"depth":64,"text":160295},{"id":160474,"depth":64,"text":160475},{"id":160623,"depth":64,"text":160624},{"id":160837,"depth":64,"text":160838},{"id":160871,"depth":64,"text":160872},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159143,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160919,"title":160920,"body":160921,"description":66,"extension":67,"meta":162926,"navigation":69,"path":162927,"seo":162928,"stem":162929,"__hash__":162930},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160922,"toc":162906},[160923,160926,160930,160933,160936,160950,160953,160967,160971,160973,160992,160994,161041,161043,161057,161061,161135,161138,161142,161145,161204,161212,161215,161268,161271,161275,161280,161335,161343,161393,161397,161402,161410,161509,161515,161519,161524,161527,161538,161579,161592,161596,161599,161635,161638,161651,161654,161714,161718,161722,161725,161776,161780,161783,161830,161836,161902,161905,161909,161912,162028,162031,162035,162038,162144,162148,162151,162189,162192,162234,162237,162297,162300,162304,162768,162771,162775,162802,162808,162869,162873,162903],[10,160924,160920],{"id":160925},"_5-函数基础",[84,160927,160929],{"id":160928},"_51-为什么需要函数","5.1 为什么需要函数",[14,160931,160932],{},"函数用于封装一段可以重复使用的代码。",[14,160934,160935],{},"不使用函数的问题：",[96,160937,160938,160941,160944,160947],{},[99,160939,160940],{},"重复代码多。",[99,160942,160943],{},"修改逻辑时容易漏改。",[99,160945,160946],{},"主流程不清晰。",[99,160948,160949],{},"程序越写越长，难以维护。",[14,160951,160952],{},"使用函数后的好处：",[96,160954,160955,160958,160961,160964],{},[99,160956,160957],{},"提高复用性。",[99,160959,160960],{},"提高可读性。",[99,160962,160963],{},"便于调试。",[99,160965,160966],{},"便于分工。",[84,160968,160970],{"id":160969},"_52-函数定义","5.2 函数定义",[14,160972,5210],{},[133,160974,160976],{"className":30407,"code":160975,"language":30409,"meta":31,"style":31},"def 函数名():\n    函数体\n",[139,160977,160978,160987],{"__ignoreMap":31},[142,160979,160980,160982,160985],{"class":144,"line":145},[142,160981,31976],{"class":148},[142,160983,160984],{"class":1991}," 函数名",[142,160986,31982],{"class":152},[142,160988,160989],{"class":144,"line":64},[142,160990,160991],{"class":152},"    函数体\n",[14,160993,15164],{},[133,160995,160997],{"className":30407,"code":160996,"language":30409,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[139,160998,160999,161008,161018,161028,161032,161036],{"__ignoreMap":31},[142,161000,161001,161003,161006],{"class":144,"line":145},[142,161002,31976],{"class":148},[142,161004,161005],{"class":1991}," say_hello",[142,161007,31982],{"class":152},[142,161009,161010,161012,161014,161016],{"class":144,"line":64},[142,161011,31328],{"class":201},[142,161013,153],{"class":152},[142,161015,5873],{"class":257},[142,161017,159],{"class":152},[142,161019,161020,161022,161024,161026],{"class":144,"line":1208},[142,161021,31328],{"class":201},[142,161023,153],{"class":152},[142,161025,146648],{"class":257},[142,161027,159],{"class":152},[142,161029,161030],{"class":144,"line":1223},[142,161031,2428],{"emptyLinePlaceholder":69},[142,161033,161034],{"class":144,"line":1229},[142,161035,2428],{"emptyLinePlaceholder":69},[142,161037,161038],{"class":144,"line":1243},[142,161039,161040],{"class":152},"say_hello()\n",[14,161042,9054],{},[96,161044,161045,161048,161051,161054],{},[99,161046,161047],{},"函数必须先定义，再调用。",[99,161049,161050],{},"函数名遵循变量命名规则。",[99,161052,161053],{},"函数体需要缩进。",[99,161055,161056],{},"函数不调用就不会执行。",[84,161058,161060],{"id":161059},"_53-函数调用","5.3 函数调用",[133,161062,161064],{"className":30407,"code":161063,"language":30409,"meta":31,"style":31},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[139,161065,161066,161075,161086,161097,161108,161118,161122,161126,161131],{"__ignoreMap":31},[142,161067,161068,161070,161073],{"class":144,"line":145},[142,161069,31976],{"class":148},[142,161071,161072],{"class":1991}," print_menu",[142,161074,31982],{"class":152},[142,161076,161077,161079,161081,161084],{"class":144,"line":64},[142,161078,31328],{"class":201},[142,161080,153],{"class":152},[142,161082,161083],{"class":257},"\"1. 查询\"",[142,161085,159],{"class":152},[142,161087,161088,161090,161092,161095],{"class":144,"line":1208},[142,161089,31328],{"class":201},[142,161091,153],{"class":152},[142,161093,161094],{"class":257},"\"2. 添加\"",[142,161096,159],{"class":152},[142,161098,161099,161101,161103,161106],{"class":144,"line":1223},[142,161100,31328],{"class":201},[142,161102,153],{"class":152},[142,161104,161105],{"class":257},"\"3. 删除\"",[142,161107,159],{"class":152},[142,161109,161110,161112,161114,161116],{"class":144,"line":1229},[142,161111,31328],{"class":201},[142,161113,153],{"class":152},[142,161115,160690],{"class":257},[142,161117,159],{"class":152},[142,161119,161120],{"class":144,"line":1243},[142,161121,2428],{"emptyLinePlaceholder":69},[142,161123,161124],{"class":144,"line":1249},[142,161125,2428],{"emptyLinePlaceholder":69},[142,161127,161128],{"class":144,"line":1340},[142,161129,161130],{"class":152},"print_menu()\n",[142,161132,161133],{"class":144,"line":1346},[142,161134,161130],{"class":152},[14,161136,161137],{},"函数可以多次调用，每次调用都会执行函数体。",[84,161139,161141],{"id":161140},"_54-参数","5.4 参数",[14,161143,161144],{},"参数用于向函数传递数据。",[133,161146,161148],{"className":30407,"code":161147,"language":30409,"meta":31,"style":31},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[139,161149,161150,161159,161179,161183,161187,161196],{"__ignoreMap":31},[142,161151,161152,161154,161156],{"class":144,"line":145},[142,161153,31976],{"class":148},[142,161155,161005],{"class":1991},[142,161157,161158],{"class":152},"(name):\n",[142,161160,161161,161163,161165,161167,161169,161171,161173,161175,161177],{"class":144,"line":64},[142,161162,31328],{"class":201},[142,161164,153],{"class":152},[142,161166,205],{"class":148},[142,161168,157063],{"class":257},[142,161170,1049],{"class":201},[142,161172,79839],{"class":152},[142,161174,1099],{"class":201},[142,161176,404],{"class":257},[142,161178,159],{"class":152},[142,161180,161181],{"class":144,"line":1208},[142,161182,2428],{"emptyLinePlaceholder":69},[142,161184,161185],{"class":144,"line":1223},[142,161186,2428],{"emptyLinePlaceholder":69},[142,161188,161189,161192,161194],{"class":144,"line":1229},[142,161190,161191],{"class":152},"say_hello(",[142,161193,149897],{"class":257},[142,161195,159],{"class":152},[142,161197,161198,161200,161202],{"class":144,"line":1243},[142,161199,161191],{"class":152},[142,161201,150945],{"class":257},[142,161203,159],{"class":152},[14,161205,161206,161208,161209,161211],{},[139,161207,79839],{}," 是形参，",[139,161210,149897],{}," 是实参。",[14,161213,161214],{},"多个参数：",[133,161216,161218],{"className":30407,"code":161217,"language":30409,"meta":31,"style":31},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[139,161219,161220,161228,161241,161247,161251,161255],{"__ignoreMap":31},[142,161221,161222,161224,161226],{"class":144,"line":145},[142,161223,31976],{"class":148},[142,161225,5238],{"class":1991},[142,161227,151102],{"class":152},[142,161229,161230,161233,161235,161237,161239],{"class":144,"line":64},[142,161231,161232],{"class":152},"    result ",[142,161234,198],{"class":148},[142,161236,10898],{"class":152},[142,161238,634],{"class":148},[142,161240,151113],{"class":152},[142,161242,161243,161245],{"class":144,"line":1208},[142,161244,31328],{"class":201},[142,161246,76614],{"class":152},[142,161248,161249],{"class":144,"line":1223},[142,161250,2428],{"emptyLinePlaceholder":69},[142,161252,161253],{"class":144,"line":1229},[142,161254,2428],{"emptyLinePlaceholder":69},[142,161256,161257,161260,161262,161264,161266],{"class":144,"line":1243},[142,161258,161259],{"class":152},"add(",[142,161261,599],{"class":201},[142,161263,12464],{"class":152},[142,161265,853],{"class":201},[142,161267,159],{"class":152},[14,161269,161270],{},"调用时参数数量必须匹配。",[84,161272,161274],{"id":161273},"_55-返回值","5.5 返回值",[14,161276,161277,161279],{},[139,161278,17075],{}," 用于把函数内部的结果返回给调用者。",[133,161281,161283],{"className":30407,"code":161282,"language":30409,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[139,161284,161285,161293,161303,161307,161311,161329],{"__ignoreMap":31},[142,161286,161287,161289,161291],{"class":144,"line":145},[142,161288,31976],{"class":148},[142,161290,5238],{"class":1991},[142,161292,151102],{"class":152},[142,161294,161295,161297,161299,161301],{"class":144,"line":64},[142,161296,4118],{"class":148},[142,161298,10898],{"class":152},[142,161300,634],{"class":148},[142,161302,151113],{"class":152},[142,161304,161305],{"class":144,"line":1208},[142,161306,2428],{"emptyLinePlaceholder":69},[142,161308,161309],{"class":144,"line":1223},[142,161310,2428],{"emptyLinePlaceholder":69},[142,161312,161313,161316,161318,161321,161323,161325,161327],{"class":144,"line":1229},[142,161314,161315],{"class":152},"result ",[142,161317,198],{"class":148},[142,161319,161320],{"class":152}," add(",[142,161322,599],{"class":201},[142,161324,12464],{"class":152},[142,161326,853],{"class":201},[142,161328,159],{"class":152},[142,161330,161331,161333],{"class":144,"line":1243},[142,161332,30444],{"class":201},[142,161334,76614],{"class":152},[14,161336,161337,161338,161340,161341,28414],{},"如果函数没有写 ",[139,161339,17075],{},"，默认返回 ",[139,161342,95695],{},[133,161344,161346],{"className":30407,"code":161345,"language":30409,"meta":31,"style":31},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[139,161347,161348,161356,161366,161370,161374,161383],{"__ignoreMap":31},[142,161349,161350,161352,161354],{"class":144,"line":145},[142,161351,31976],{"class":148},[142,161353,161005],{"class":1991},[142,161355,31982],{"class":152},[142,161357,161358,161360,161362,161364],{"class":144,"line":64},[142,161359,31328],{"class":201},[142,161361,153],{"class":152},[142,161363,5873],{"class":257},[142,161365,159],{"class":152},[142,161367,161368],{"class":144,"line":1208},[142,161369,2428],{"emptyLinePlaceholder":69},[142,161371,161372],{"class":144,"line":1223},[142,161373,2428],{"emptyLinePlaceholder":69},[142,161375,161376,161378,161380],{"class":144,"line":1229},[142,161377,161315],{"class":152},[142,161379,198],{"class":148},[142,161381,161382],{"class":152}," say_hello()\n",[142,161384,161385,161387,161390],{"class":144,"line":1243},[142,161386,30444],{"class":201},[142,161388,161389],{"class":152},"(result)  ",[142,161391,161392],{"class":211},"# None\n",[84,161394,161396],{"id":161395},"_56-return的作用","5.6 return的作用",[14,161398,161399,161401],{},[139,161400,17075],{}," 有两个作用：",[96,161403,161404,161407],{},[99,161405,161406],{},"返回结果。",[99,161408,161409],{},"结束函数。",[133,161411,161413],{"className":30407,"code":161412,"language":30409,"meta":31,"style":31},"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",[139,161414,161415,161425,161437,161444,161448,161460,161467,161471,161478,161482,161486,161497],{"__ignoreMap":31},[142,161416,161417,161419,161422],{"class":144,"line":145},[142,161418,31976],{"class":148},[142,161420,161421],{"class":1991}," check_age",[142,161423,161424],{"class":152},"(age):\n",[142,161426,161427,161429,161431,161433,161435],{"class":144,"line":64},[142,161428,3129],{"class":148},[142,161430,15736],{"class":152},[142,161432,1063],{"class":148},[142,161434,4121],{"class":201},[142,161436,3767],{"class":152},[142,161438,161439,161441],{"class":144,"line":1208},[142,161440,14781],{"class":148},[142,161442,161443],{"class":257}," \"年龄不合法\"\n",[142,161445,161446],{"class":144,"line":1223},[142,161447,2428],{"emptyLinePlaceholder":69},[142,161449,161450,161452,161454,161456,161458],{"class":144,"line":1229},[142,161451,3129],{"class":148},[142,161453,15736],{"class":152},[142,161455,1738],{"class":148},[142,161457,156294],{"class":201},[142,161459,3767],{"class":152},[142,161461,161462,161464],{"class":144,"line":1243},[142,161463,14781],{"class":148},[142,161465,161466],{"class":257}," \"成年人\"\n",[142,161468,161469],{"class":144,"line":1249},[142,161470,2428],{"emptyLinePlaceholder":69},[142,161472,161473,161475],{"class":144,"line":1340},[142,161474,4118],{"class":148},[142,161476,161477],{"class":257}," \"未成年人\"\n",[142,161479,161480],{"class":144,"line":1346},[142,161481,2428],{"emptyLinePlaceholder":69},[142,161483,161484],{"class":144,"line":1358},[142,161485,2428],{"emptyLinePlaceholder":69},[142,161487,161488,161490,161493,161495],{"class":144,"line":1640},[142,161489,30444],{"class":201},[142,161491,161492],{"class":152},"(check_age(",[142,161494,853],{"class":201},[142,161496,30526],{"class":152},[142,161498,161499,161501,161503,161505,161507],{"class":144,"line":1645},[142,161500,30444],{"class":201},[142,161502,161492],{"class":152},[142,161504,685],{"class":148},[142,161506,370],{"class":201},[142,161508,30526],{"class":152},[14,161510,161511,161512,161514],{},"函数执行到 ",[139,161513,17075],{}," 后，后面的代码不会继续执行。",[84,161516,161518],{"id":161517},"_57-none","5.7 None",[14,161520,161521,161523],{},[139,161522,95695],{}," 表示空值或没有结果。",[14,161525,161526],{},"常见使用场景：",[96,161528,161529,161532,161535],{},[99,161530,161531],{},"函数没有返回值。",[99,161533,161534],{},"变量暂时没有具体值。",[99,161536,161537],{},"表示查询不到结果。",[133,161539,161541],{"className":30407,"code":161540,"language":30409,"meta":31,"style":31},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[139,161542,161543,161551,161555,161568],{"__ignoreMap":31},[142,161544,161545,161547,161549],{"class":144,"line":145},[142,161546,161315],{"class":152},[142,161548,198],{"class":148},[142,161550,152181],{"class":201},[142,161552,161553],{"class":144,"line":64},[142,161554,2428],{"emptyLinePlaceholder":69},[142,161556,161557,161559,161562,161564,161566],{"class":144,"line":1208},[142,161558,1559],{"class":148},[142,161560,161561],{"class":152}," result ",[142,161563,38956],{"class":148},[142,161565,38962],{"class":201},[142,161567,3767],{"class":152},[142,161569,161570,161572,161574,161577],{"class":144,"line":1223},[142,161571,31328],{"class":201},[142,161573,153],{"class":152},[142,161575,161576],{"class":257},"\"没有数据\"",[142,161578,159],{"class":152},[14,161580,161581,161582,161584,161585,161588,161589,28414],{},"判断 ",[139,161583,95695],{}," 推荐使用 ",[139,161586,161587],{},"is None","，不要写成 ",[139,161590,161591],{},"== None",[84,161593,161595],{"id":161594},"_58-函数文档字符串","5.8 函数文档字符串",[14,161597,161598],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[133,161600,161602],{"className":30407,"code":161601,"language":30409,"meta":31,"style":31},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[139,161603,161604,161614,161619],{"__ignoreMap":31},[142,161605,161606,161608,161611],{"class":144,"line":145},[142,161607,31976],{"class":148},[142,161609,161610],{"class":1991}," calculate_bmi",[142,161612,161613],{"class":152},"(weight, height):\n",[142,161615,161616],{"class":144,"line":64},[142,161617,161618],{"class":257},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[142,161620,161621,161623,161626,161628,161631,161633],{"class":144,"line":1208},[142,161622,4118],{"class":148},[142,161624,161625],{"class":152}," weight ",[142,161627,737],{"class":148},[142,161629,161630],{"class":152}," height ",[142,161632,10690],{"class":148},[142,161634,47752],{"class":201},[14,161636,161637],{},"查看说明：",[133,161639,161641],{"className":30407,"code":161640,"language":30409,"meta":31,"style":31},"help(calculate_bmi)\n",[139,161642,161643],{"__ignoreMap":31},[142,161644,161645,161648],{"class":144,"line":145},[142,161646,161647],{"class":201},"help",[142,161649,161650],{"class":152},"(calculate_bmi)\n",[14,161652,161653],{},"较完整的写法：",[133,161655,161657],{"className":30407,"code":161656,"language":30409,"meta":31,"style":31},"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",[139,161658,161659,161667,161672,161677,161681,161686,161691,161696,161700],{"__ignoreMap":31},[142,161660,161661,161663,161665],{"class":144,"line":145},[142,161662,31976],{"class":148},[142,161664,161610],{"class":1991},[142,161666,161613],{"class":152},[142,161668,161669],{"class":144,"line":64},[142,161670,161671],{"class":257},"    \"\"\"\n",[142,161673,161674],{"class":144,"line":1208},[142,161675,161676],{"class":257},"    计算BMI。\n",[142,161678,161679],{"class":144,"line":1223},[142,161680,2428],{"emptyLinePlaceholder":69},[142,161682,161683],{"class":144,"line":1229},[142,161684,161685],{"class":257},"    :param weight: 体重，单位kg\n",[142,161687,161688],{"class":144,"line":1243},[142,161689,161690],{"class":257},"    :param height: 身高，单位m\n",[142,161692,161693],{"class":144,"line":1249},[142,161694,161695],{"class":257},"    :return: BMI数值\n",[142,161697,161698],{"class":144,"line":1340},[142,161699,161671],{"class":257},[142,161701,161702,161704,161706,161708,161710,161712],{"class":144,"line":1346},[142,161703,4118],{"class":148},[142,161705,161625],{"class":152},[142,161707,737],{"class":148},[142,161709,161630],{"class":152},[142,161711,10690],{"class":148},[142,161713,47752],{"class":201},[84,161715,161717],{"id":161716},"_59-变量作用域","5.9 变量作用域",[113,161719,161721],{"id":161720},"_591-局部变量","5.9.1 局部变量",[14,161723,161724],{},"在函数内部定义的变量，只能在函数内部使用。",[133,161726,161728],{"className":30407,"code":161727,"language":30409,"meta":31,"style":31},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[139,161729,161730,161739,161747,161753,161757,161761,161766],{"__ignoreMap":31},[142,161731,161732,161734,161737],{"class":144,"line":145},[142,161733,31976],{"class":148},[142,161735,161736],{"class":1991}," test",[142,161738,31982],{"class":152},[142,161740,161741,161743,161745],{"class":144,"line":64},[142,161742,45622],{"class":152},[142,161744,198],{"class":148},[142,161746,58457],{"class":201},[142,161748,161749,161751],{"class":144,"line":1208},[142,161750,31328],{"class":201},[142,161752,166],{"class":152},[142,161754,161755],{"class":144,"line":1223},[142,161756,2428],{"emptyLinePlaceholder":69},[142,161758,161759],{"class":144,"line":1229},[142,161760,2428],{"emptyLinePlaceholder":69},[142,161762,161763],{"class":144,"line":1243},[142,161764,161765],{"class":152},"test()\n",[142,161767,161768,161770,161773],{"class":144,"line":1249},[142,161769,30444],{"class":201},[142,161771,161772],{"class":152},"(num)  ",[142,161774,161775],{"class":211},"# 报错\n",[113,161777,161779],{"id":161778},"_592-全局变量","5.9.2 全局变量",[14,161781,161782],{},"在函数外部定义的变量，可以在函数内部读取。",[133,161784,161786],{"className":30407,"code":161785,"language":30409,"meta":31,"style":31},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[139,161787,161788,161796,161800,161804,161812,161818,161822,161826],{"__ignoreMap":31},[142,161789,161790,161792,161794],{"class":144,"line":145},[142,161791,146545],{"class":152},[142,161793,198],{"class":148},[142,161795,149362],{"class":257},[142,161797,161798],{"class":144,"line":64},[142,161799,2428],{"emptyLinePlaceholder":69},[142,161801,161802],{"class":144,"line":1208},[142,161803,2428],{"emptyLinePlaceholder":69},[142,161805,161806,161808,161810],{"class":144,"line":1223},[142,161807,31976],{"class":148},[142,161809,161005],{"class":1991},[142,161811,31982],{"class":152},[142,161813,161814,161816],{"class":144,"line":1229},[142,161815,31328],{"class":201},[142,161817,150669],{"class":152},[142,161819,161820],{"class":144,"line":1243},[142,161821,2428],{"emptyLinePlaceholder":69},[142,161823,161824],{"class":144,"line":1249},[142,161825,2428],{"emptyLinePlaceholder":69},[142,161827,161828],{"class":144,"line":1340},[142,161829,161040],{"class":152},[14,161831,161832,161833,28414],{},"如果要在函数内部修改全局变量，需要 ",[139,161834,161835],{},"global",[133,161837,161839],{"className":30407,"code":161838,"language":30409,"meta":31,"style":31},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[139,161840,161841,161849,161853,161857,161866,161874,161882,161886,161890,161895],{"__ignoreMap":31},[142,161842,161843,161845,161847],{"class":144,"line":145},[142,161844,146700],{"class":152},[142,161846,198],{"class":148},[142,161848,47362],{"class":201},[142,161850,161851],{"class":144,"line":64},[142,161852,2428],{"emptyLinePlaceholder":69},[142,161854,161855],{"class":144,"line":1208},[142,161856,2428],{"emptyLinePlaceholder":69},[142,161858,161859,161861,161864],{"class":144,"line":1223},[142,161860,31976],{"class":148},[142,161862,161863],{"class":1991}," add_count",[142,161865,31982],{"class":152},[142,161867,161868,161871],{"class":144,"line":1229},[142,161869,161870],{"class":148},"    global",[142,161872,161873],{"class":152}," count\n",[142,161875,161876,161878,161880],{"class":144,"line":1243},[142,161877,159442],{"class":152},[142,161879,9506],{"class":148},[142,161881,55728],{"class":201},[142,161883,161884],{"class":144,"line":1249},[142,161885,2428],{"emptyLinePlaceholder":69},[142,161887,161888],{"class":144,"line":1340},[142,161889,2428],{"emptyLinePlaceholder":69},[142,161891,161892],{"class":144,"line":1346},[142,161893,161894],{"class":152},"add_count()\n",[142,161896,161897,161899],{"class":144,"line":1358},[142,161898,30444],{"class":201},[142,161900,161901],{"class":152},"(count)\n",[14,161903,161904],{},"不建议大量使用全局变量，项目变大后很难维护。",[84,161906,161908],{"id":161907},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161910,161911],{},"一个函数中可以调用另一个函数。",[133,161913,161915],{"className":30407,"code":161914,"language":30409,"meta":31,"style":31},"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",[139,161916,161917,161926,161940,161944,161948,161957,161962,161982,162003,162007,162011,162015],{"__ignoreMap":31},[142,161918,161919,161921,161924],{"class":144,"line":145},[142,161920,31976],{"class":148},[142,161922,161923],{"class":1991}," print_line",[142,161925,31982],{"class":152},[142,161927,161928,161930,161932,161934,161936,161938],{"class":144,"line":64},[142,161929,31328],{"class":201},[142,161931,153],{"class":152},[142,161933,32512],{"class":257},[142,161935,6547],{"class":148},[142,161937,78694],{"class":201},[142,161939,159],{"class":152},[142,161941,161942],{"class":144,"line":1208},[142,161943,2428],{"emptyLinePlaceholder":69},[142,161945,161946],{"class":144,"line":1223},[142,161947,2428],{"emptyLinePlaceholder":69},[142,161949,161950,161952,161955],{"class":144,"line":1229},[142,161951,31976],{"class":148},[142,161953,161954],{"class":1991}," print_info",[142,161956,149384],{"class":152},[142,161958,161959],{"class":144,"line":1243},[142,161960,161961],{"class":152},"    print_line()\n",[142,161963,161964,161966,161968,161970,161972,161974,161976,161978,161980],{"class":144,"line":1249},[142,161965,31328],{"class":201},[142,161967,153],{"class":152},[142,161969,205],{"class":148},[142,161971,156691],{"class":257},[142,161973,1049],{"class":201},[142,161975,79839],{"class":152},[142,161977,1099],{"class":201},[142,161979,404],{"class":257},[142,161981,159],{"class":152},[142,161983,161984,161986,161988,161990,161993,161995,161997,161999,162001],{"class":144,"line":1340},[142,161985,31328],{"class":201},[142,161987,153],{"class":152},[142,161989,205],{"class":148},[142,161991,161992],{"class":257},"\"年龄:",[142,161994,1049],{"class":201},[142,161996,70250],{"class":152},[142,161998,1099],{"class":201},[142,162000,404],{"class":257},[142,162002,159],{"class":152},[142,162004,162005],{"class":144,"line":1346},[142,162006,161961],{"class":152},[142,162008,162009],{"class":144,"line":1358},[142,162010,2428],{"emptyLinePlaceholder":69},[142,162012,162013],{"class":144,"line":1640},[142,162014,2428],{"emptyLinePlaceholder":69},[142,162016,162017,162020,162022,162024,162026],{"class":144,"line":1645},[142,162018,162019],{"class":152},"print_info(",[142,162021,149897],{"class":257},[142,162023,12464],{"class":152},[142,162025,803],{"class":201},[142,162027,159],{"class":152},[14,162029,162030],{},"这种方式可以把小功能组合成大功能。",[84,162032,162034],{"id":162033},"_511-参数检查","5.11 参数检查",[14,162036,162037],{},"函数内部可以检查参数是否合法。",[133,162039,162041],{"className":30407,"code":162040,"language":30409,"meta":31,"style":31},"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",[139,162042,162043,162052,162064,162070,162080,162084,162088,162105,162109,162121,162132,162138],{"__ignoreMap":31},[142,162044,162045,162047,162050],{"class":144,"line":145},[142,162046,31976],{"class":148},[142,162048,162049],{"class":1991}," divide",[142,162051,151102],{"class":152},[142,162053,162054,162056,162058,162060,162062],{"class":144,"line":64},[142,162055,3129],{"class":148},[142,162057,10911],{"class":152},[142,162059,2977],{"class":148},[142,162061,4121],{"class":201},[142,162063,3767],{"class":152},[142,162065,162066,162068],{"class":144,"line":1208},[142,162067,14781],{"class":148},[142,162069,152181],{"class":201},[142,162071,162072,162074,162076,162078],{"class":144,"line":1223},[142,162073,4118],{"class":148},[142,162075,10898],{"class":152},[142,162077,737],{"class":148},[142,162079,151113],{"class":152},[142,162081,162082],{"class":144,"line":1229},[142,162083,2428],{"emptyLinePlaceholder":69},[142,162085,162086],{"class":144,"line":1243},[142,162087,2428],{"emptyLinePlaceholder":69},[142,162089,162090,162092,162094,162097,162099,162101,162103],{"class":144,"line":1249},[142,162091,161315],{"class":152},[142,162093,198],{"class":148},[142,162095,162096],{"class":152}," divide(",[142,162098,599],{"class":201},[142,162100,12464],{"class":152},[142,162102,344],{"class":201},[142,162104,159],{"class":152},[142,162106,162107],{"class":144,"line":1340},[142,162108,2428],{"emptyLinePlaceholder":69},[142,162110,162111,162113,162115,162117,162119],{"class":144,"line":1346},[142,162112,1559],{"class":148},[142,162114,161561],{"class":152},[142,162116,38956],{"class":148},[142,162118,38962],{"class":201},[142,162120,3767],{"class":152},[142,162122,162123,162125,162127,162130],{"class":144,"line":1358},[142,162124,31328],{"class":201},[142,162126,153],{"class":152},[142,162128,162129],{"class":257},"\"除数不能为0\"",[142,162131,159],{"class":152},[142,162133,162134,162136],{"class":144,"line":1640},[142,162135,1729],{"class":148},[142,162137,3767],{"class":152},[142,162139,162140,162142],{"class":144,"line":1645},[142,162141,31328],{"class":201},[142,162143,76614],{"class":152},[84,162145,162147],{"id":162146},"_512-类型提示","5.12 类型提示",[14,162149,162150],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[133,162152,162154],{"className":30407,"code":162153,"language":30409,"meta":31,"style":31},"def add(a: int, b: int) -> int:\n    return a + b\n",[139,162155,162156,162179],{"__ignoreMap":31},[142,162157,162158,162160,162162,162165,162167,162170,162172,162175,162177],{"class":144,"line":145},[142,162159,31976],{"class":148},[142,162161,5238],{"class":1991},[142,162163,162164],{"class":152},"(a: ",[142,162166,156],{"class":201},[142,162168,162169],{"class":152},", b: ",[142,162171,156],{"class":201},[142,162173,162174],{"class":152},") -> ",[142,162176,156],{"class":201},[142,162178,3767],{"class":152},[142,162180,162181,162183,162185,162187],{"class":144,"line":64},[142,162182,4118],{"class":148},[142,162184,10898],{"class":152},[142,162186,634],{"class":148},[142,162188,151113],{"class":152},[14,162190,162191],{},"字符串参数：",[133,162193,162195],{"className":30407,"code":162194,"language":30409,"meta":31,"style":31},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[139,162196,162197,162214],{"__ignoreMap":31},[142,162198,162199,162201,162203,162206,162208,162210,162212],{"class":144,"line":145},[142,162200,31976],{"class":148},[142,162202,161005],{"class":1991},[142,162204,162205],{"class":152},"(name: ",[142,162207,1328],{"class":201},[142,162209,162174],{"class":152},[142,162211,95695],{"class":201},[142,162213,3767],{"class":152},[142,162215,162216,162218,162220,162222,162224,162226,162228,162230,162232],{"class":144,"line":64},[142,162217,31328],{"class":201},[142,162219,153],{"class":152},[142,162221,205],{"class":148},[142,162223,157063],{"class":257},[142,162225,1049],{"class":201},[142,162227,79839],{"class":152},[142,162229,1099],{"class":201},[142,162231,404],{"class":257},[142,162233,159],{"class":152},[14,162235,162236],{},"列表参数：",[133,162238,162240],{"className":30407,"code":162239,"language":30409,"meta":31,"style":31},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[139,162241,162242,162261,162269,162281,162290],{"__ignoreMap":31},[142,162243,162244,162246,162249,162252,162254,162257,162259],{"class":144,"line":145},[142,162245,31976],{"class":148},[142,162247,162248],{"class":1991}," get_total",[142,162250,162251],{"class":152},"(numbers: list[",[142,162253,156],{"class":201},[142,162255,162256],{"class":152},"]) -> ",[142,162258,156],{"class":201},[142,162260,3767],{"class":152},[142,162262,162263,162265,162267],{"class":144,"line":64},[142,162264,159316],{"class":152},[142,162266,198],{"class":148},[142,162268,47362],{"class":201},[142,162270,162271,162273,162276,162278],{"class":144,"line":1208},[142,162272,3229],{"class":148},[142,162274,162275],{"class":152}," number ",[142,162277,26072],{"class":148},[142,162279,162280],{"class":152}," numbers:\n",[142,162282,162283,162285,162287],{"class":144,"line":1223},[142,162284,159991],{"class":152},[142,162286,9506],{"class":148},[142,162288,162289],{"class":152}," number\n",[142,162291,162292,162294],{"class":144,"line":1229},[142,162293,4118],{"class":148},[142,162295,162296],{"class":152}," total\n",[14,162298,162299],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[84,162301,162303],{"id":162302},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[133,162305,162307],{"className":30407,"code":162306,"language":30409,"meta":31,"style":31},"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",[139,162308,162309,162319,162323,162327,162335,162346,162356,162366,162376,162386,162390,162394,162403,162425,162429,162433,162442,162448,162468,162480,162491,162495,162504,162515,162520,162524,162528,162537,162543,162562,162574,162584,162588,162599,162609,162613,162621,162632,162636,162640,162644,162652,162657,162671,162675,162687,162692,162704,162709,162721,162726,162738,162748,162752,162758],{"__ignoreMap":31},[142,162310,162311,162314,162316],{"class":144,"line":145},[142,162312,162313],{"class":152},"balance ",[142,162315,198],{"class":148},[142,162317,162318],{"class":201}," 1000\n",[142,162320,162321],{"class":144,"line":64},[142,162322,2428],{"emptyLinePlaceholder":69},[142,162324,162325],{"class":144,"line":1208},[142,162326,2428],{"emptyLinePlaceholder":69},[142,162328,162329,162331,162333],{"class":144,"line":1223},[142,162330,31976],{"class":148},[142,162332,152042],{"class":1991},[142,162334,31982],{"class":152},[142,162336,162337,162339,162341,162344],{"class":144,"line":1229},[142,162338,31328],{"class":201},[142,162340,153],{"class":152},[142,162342,162343],{"class":257},"\"====== ATM ======\"",[142,162345,159],{"class":152},[142,162347,162348,162350,162352,162354],{"class":144,"line":1243},[142,162349,31328],{"class":201},[142,162351,153],{"class":152},[142,162353,160657],{"class":257},[142,162355,159],{"class":152},[142,162357,162358,162360,162362,162364],{"class":144,"line":1249},[142,162359,31328],{"class":201},[142,162361,153],{"class":152},[142,162363,160668],{"class":257},[142,162365,159],{"class":152},[142,162367,162368,162370,162372,162374],{"class":144,"line":1340},[142,162369,31328],{"class":201},[142,162371,153],{"class":152},[142,162373,160679],{"class":257},[142,162375,159],{"class":152},[142,162377,162378,162380,162382,162384],{"class":144,"line":1346},[142,162379,31328],{"class":201},[142,162381,153],{"class":152},[142,162383,160690],{"class":257},[142,162385,159],{"class":152},[142,162387,162388],{"class":144,"line":1358},[142,162389,2428],{"emptyLinePlaceholder":69},[142,162391,162392],{"class":144,"line":1640},[142,162393,2428],{"emptyLinePlaceholder":69},[142,162395,162396,162398,162401],{"class":144,"line":1645},[142,162397,31976],{"class":148},[142,162399,162400],{"class":1991}," show_balance",[142,162402,31982],{"class":152},[142,162404,162405,162407,162409,162411,162414,162416,162419,162421,162423],{"class":144,"line":1651},[142,162406,31328],{"class":201},[142,162408,153],{"class":152},[142,162410,205],{"class":148},[142,162412,162413],{"class":257},"\"当前余额:",[142,162415,1049],{"class":201},[142,162417,162418],{"class":152},"balance",[142,162420,1099],{"class":201},[142,162422,157021],{"class":257},[142,162424,159],{"class":152},[142,162426,162427],{"class":144,"line":1656},[142,162428,2428],{"emptyLinePlaceholder":69},[142,162430,162431],{"class":144,"line":1670},[142,162432,2428],{"emptyLinePlaceholder":69},[142,162434,162435,162437,162440],{"class":144,"line":1675},[142,162436,31976],{"class":148},[142,162438,162439],{"class":1991}," save_money",[142,162441,31982],{"class":152},[142,162443,162444,162446],{"class":144,"line":1681},[142,162445,161870],{"class":148},[142,162447,150108],{"class":152},[142,162449,162450,162453,162455,162457,162459,162461,162463,162466],{"class":144,"line":1702},[142,162451,162452],{"class":152},"    money ",[142,162454,198],{"class":148},[142,162456,109806],{"class":201},[142,162458,153],{"class":152},[142,162460,53850],{"class":201},[142,162462,153],{"class":152},[142,162464,162465],{"class":257},"\"请输入存款金额:\"",[142,162467,30526],{"class":152},[142,162469,162470,162472,162474,162476,162478],{"class":144,"line":1707},[142,162471,3129],{"class":148},[142,162473,150151],{"class":152},[142,162475,1616],{"class":148},[142,162477,4121],{"class":201},[142,162479,3767],{"class":152},[142,162481,162482,162484,162486,162489],{"class":144,"line":1721},[142,162483,32480],{"class":201},[142,162485,153],{"class":152},[142,162487,162488],{"class":257},"\"金额必须大于0\"",[142,162490,159],{"class":152},[142,162492,162493],{"class":144,"line":1726},[142,162494,152370],{"class":148},[142,162496,162497,162500,162502],{"class":144,"line":1755},[142,162498,162499],{"class":152},"    balance ",[142,162501,9506],{"class":148},[142,162503,150184],{"class":152},[142,162505,162506,162508,162510,162513],{"class":144,"line":1760},[142,162507,31328],{"class":201},[142,162509,153],{"class":152},[142,162511,162512],{"class":257},"\"存款成功\"",[142,162514,159],{"class":152},[142,162516,162517],{"class":144,"line":1777},[142,162518,162519],{"class":152},"    show_balance()\n",[142,162521,162522],{"class":144,"line":1782},[142,162523,2428],{"emptyLinePlaceholder":69},[142,162525,162526],{"class":144,"line":1787},[142,162527,2428],{"emptyLinePlaceholder":69},[142,162529,162530,162532,162535],{"class":144,"line":1792},[142,162531,31976],{"class":148},[142,162533,162534],{"class":1991}," withdraw_money",[142,162536,31982],{"class":152},[142,162538,162539,162541],{"class":144,"line":1806},[142,162540,161870],{"class":148},[142,162542,150108],{"class":152},[142,162544,162545,162547,162549,162551,162553,162555,162557,162560],{"class":144,"line":1811},[142,162546,162452],{"class":152},[142,162548,198],{"class":148},[142,162550,109806],{"class":201},[142,162552,153],{"class":152},[142,162554,53850],{"class":201},[142,162556,153],{"class":152},[142,162558,162559],{"class":257},"\"请输入取款金额:\"",[142,162561,30526],{"class":152},[142,162563,162564,162566,162568,162570,162572],{"class":144,"line":2605},[142,162565,3129],{"class":148},[142,162567,150151],{"class":152},[142,162569,1616],{"class":148},[142,162571,4121],{"class":201},[142,162573,3767],{"class":152},[142,162575,162576,162578,162580,162582],{"class":144,"line":2619},[142,162577,32480],{"class":201},[142,162579,153],{"class":152},[142,162581,162488],{"class":257},[142,162583,159],{"class":152},[142,162585,162586],{"class":144,"line":2627},[142,162587,152370],{"class":148},[142,162589,162590,162592,162594,162596],{"class":144,"line":2632},[142,162591,3129],{"class":148},[142,162593,150151],{"class":152},[142,162595,1113],{"class":148},[142,162597,162598],{"class":152}," balance:\n",[142,162600,162601,162603,162605,162607],{"class":144,"line":2638},[142,162602,32480],{"class":201},[142,162604,153],{"class":152},[142,162606,150246],{"class":257},[142,162608,159],{"class":152},[142,162610,162611],{"class":144,"line":2644},[142,162612,152370],{"class":148},[142,162614,162615,162617,162619],{"class":144,"line":2649},[142,162616,162499],{"class":152},[142,162618,150261],{"class":148},[142,162620,150184],{"class":152},[142,162622,162623,162625,162627,162630],{"class":144,"line":7977},[142,162624,31328],{"class":201},[142,162626,153],{"class":152},[142,162628,162629],{"class":257},"\"取款成功\"",[142,162631,159],{"class":152},[142,162633,162634],{"class":144,"line":8001},[142,162635,162519],{"class":152},[142,162637,162638],{"class":144,"line":8006},[142,162639,2428],{"emptyLinePlaceholder":69},[142,162641,162642],{"class":144,"line":8012},[142,162643,2428],{"emptyLinePlaceholder":69},[142,162645,162646,162648,162650],{"class":144,"line":8039},[142,162647,108672],{"class":148},[142,162649,95301],{"class":201},[142,162651,3767],{"class":152},[142,162653,162654],{"class":144,"line":8044},[142,162655,162656],{"class":152},"    show_menu()\n",[142,162658,162659,162661,162663,162665,162667,162669],{"class":144,"line":8050},[142,162660,160701],{"class":152},[142,162662,198],{"class":148},[142,162664,60634],{"class":201},[142,162666,153],{"class":152},[142,162668,153082],{"class":257},[142,162670,159],{"class":152},[142,162672,162673],{"class":144,"line":8062},[142,162674,2428],{"emptyLinePlaceholder":69},[142,162676,162677,162679,162681,162683,162685],{"class":144,"line":8074},[142,162678,3129],{"class":148},[142,162680,153095],{"class":152},[142,162682,2977],{"class":148},[142,162684,153100],{"class":257},[142,162686,3767],{"class":152},[142,162688,162689],{"class":144,"line":8086},[142,162690,162691],{"class":152},"        show_balance()\n",[142,162693,162694,162696,162698,162700,162702],{"class":144,"line":9745},[142,162695,39322],{"class":148},[142,162697,153095],{"class":152},[142,162699,2977],{"class":148},[142,162701,153119],{"class":257},[142,162703,3767],{"class":152},[142,162705,162706],{"class":144,"line":9770},[142,162707,162708],{"class":152},"        save_money()\n",[142,162710,162711,162713,162715,162717,162719],{"class":144,"line":9793},[142,162712,39322],{"class":148},[142,162714,153095],{"class":152},[142,162716,2977],{"class":148},[142,162718,153137],{"class":257},[142,162720,3767],{"class":152},[142,162722,162723],{"class":144,"line":9817},[142,162724,162725],{"class":152},"        withdraw_money()\n",[142,162727,162728,162730,162732,162734,162736],{"class":144,"line":9822},[142,162729,39322],{"class":148},[142,162731,153095],{"class":152},[142,162733,2977],{"class":148},[142,162735,153191],{"class":257},[142,162737,3767],{"class":152},[142,162739,162740,162742,162744,162746],{"class":144,"line":9827},[142,162741,32480],{"class":201},[142,162743,153],{"class":152},[142,162745,153202],{"class":257},[142,162747,159],{"class":152},[142,162749,162750],{"class":144,"line":9832},[142,162751,31656],{"class":148},[142,162753,162754,162756],{"class":144,"line":9841},[142,162755,158031],{"class":148},[142,162757,3767],{"class":152},[142,162759,162760,162762,162764,162766],{"class":144,"line":9846},[142,162761,32480],{"class":201},[142,162763,153],{"class":152},[142,162765,153223],{"class":257},[142,162767,159],{"class":152},[14,162769,162770],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[84,162772,162774],{"id":162773},"_514-易错点","5.14 易错点",[96,162776,162777,162780,162783,162788,162793,162796],{},[99,162778,162779],{},"函数定义后必须调用才会执行。",[99,162781,162782],{},"函数名后面有括号才是调用。",[99,162784,162785,162787],{},[139,162786,17075],{}," 后面的代码不会执行。",[99,162789,162790,162791,28414],{},"没有返回值的函数默认返回 ",[139,162792,95695],{},[99,162794,162795],{},"局部变量不能在函数外部访问。",[99,162797,162798,162799,162801],{},"不要滥用 ",[139,162800,161835],{},"，更好的方式是让函数返回新值。",[14,162803,162804,162805,162807],{},"例如不用 ",[139,162806,161835],{}," 改写存款：",[133,162809,162811],{"className":30407,"code":162810,"language":30409,"meta":31,"style":31},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[139,162812,162813,162822,162833,162837,162841,162849,162862],{"__ignoreMap":31},[142,162814,162815,162817,162819],{"class":144,"line":145},[142,162816,31976],{"class":148},[142,162818,162439],{"class":1991},[142,162820,162821],{"class":152},"(balance, money):\n",[142,162823,162824,162826,162829,162831],{"class":144,"line":64},[142,162825,4118],{"class":148},[142,162827,162828],{"class":152}," balance ",[142,162830,634],{"class":148},[142,162832,150184],{"class":152},[142,162834,162835],{"class":144,"line":1208},[142,162836,2428],{"emptyLinePlaceholder":69},[142,162838,162839],{"class":144,"line":1223},[142,162840,2428],{"emptyLinePlaceholder":69},[142,162842,162843,162845,162847],{"class":144,"line":1229},[142,162844,162313],{"class":152},[142,162846,198],{"class":148},[142,162848,162318],{"class":201},[142,162850,162851,162853,162855,162858,162860],{"class":144,"line":1243},[142,162852,162313],{"class":152},[142,162854,198],{"class":148},[142,162856,162857],{"class":152}," save_money(balance, ",[142,162859,1750],{"class":201},[142,162861,159],{"class":152},[142,162863,162864,162866],{"class":144,"line":1249},[142,162865,30444],{"class":201},[142,162867,162868],{"class":152},"(balance)\n",[84,162870,162872],{"id":162871},"_515-本章练习","5.15 本章练习",[96,162874,162875,162882,162888,162894,162900],{},[99,162876,162877,162878,162881],{},"定义函数 ",[139,162879,162880],{},"print_student(name, age)","，输出学生信息。",[99,162883,162877,162884,162887],{},[139,162885,162886],{},"get_max(a, b, c)","，返回三个数中的最大值。",[99,162889,162877,162890,162893],{},[139,162891,162892],{},"is_even(num)","，判断一个数是否为偶数。",[99,162895,162877,162896,162899],{},[139,162897,162898],{},"calculate_bmi(weight, height)","，返回 BMI。",[99,162901,162902],{},"把第 4 章的菜单程序拆分成多个函数。",[5155,162904,162905],{},"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":31,"searchDepth":64,"depth":64,"links":162907},[162908,162909,162910,162911,162912,162913,162914,162915,162916,162920,162921,162922,162923,162924,162925],{"id":160928,"depth":64,"text":160929},{"id":160969,"depth":64,"text":160970},{"id":161059,"depth":64,"text":161060},{"id":161140,"depth":64,"text":161141},{"id":161273,"depth":64,"text":161274},{"id":161395,"depth":64,"text":161396},{"id":161517,"depth":64,"text":161518},{"id":161594,"depth":64,"text":161595},{"id":161716,"depth":64,"text":161717,"children":162917},[162918,162919],{"id":161720,"depth":1208,"text":161721},{"id":161778,"depth":1208,"text":161779},{"id":161907,"depth":64,"text":161908},{"id":162033,"depth":64,"text":162034},{"id":162146,"depth":64,"text":162147},{"id":162302,"depth":64,"text":162303},{"id":162773,"depth":64,"text":162774},{"id":162871,"depth":64,"text":162872},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160920,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162932,"title":162933,"body":162934,"description":66,"extension":67,"meta":165978,"navigation":69,"path":165979,"seo":165980,"stem":165981,"__hash__":165982},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162935,"toc":165959},[162936,162939,162943,162946,162949,163053,163056,163060,163063,163143,163146,163150,163153,163213,163216,163252,163255,163270,163274,163347,163350,163405,163408,163478,163481,163565,163575,163633,163637,163682,163685,163711,163714,163820,163824,163827,163869,163872,163936,163939,163943,163946,164007,164010,164040,164043,164081,164085,164088,164097,164100,164224,164227,164268,164272,164275,164286,164326,164329,164344,164349,164352,164419,164422,164512,164516,164519,164567,164570,164597,164599,164629,164632,164652,164655,164686,164689,164722,164726,164729,164753,164756,164780,164783,164807,164811,164814,164944,164947,165027,165030,165105,165109,165112,165162,165165,165207,165210,165234,165236,165260,165263,165318,165321,165387,165391,165394,165397,165435,165438,165491,165494,165540,165543,165576,165579,165583,165902,165906,165935,165939,165956],[10,162937,162933],{"id":162938},"_6-数据容器",[84,162940,162942],{"id":162941},"_61-什么是数据容器","6.1 什么是数据容器",[14,162944,162945],{},"数据容器用于一次保存多个数据。",[14,162947,162948],{},"常见容器：",[290,162950,162951,162968],{},[293,162952,162953],{},[296,162954,162955,162957,162960,162963,162966],{},[299,162956,25800],{},[299,162958,162959],{},"是否有序",[299,162961,162962],{},"是否可变",[299,162964,162965],{},"是否允许重复",[299,162967,27521],{},[337,162969,162970,162988,163004,163019,163036],{},[296,162971,162972,162975,162978,162981,162984],{},[342,162973,162974],{},"list列表",[342,162976,162977],{},"有序",[342,162979,162980],{},"可变",[342,162982,162983],{},"允许",[342,162985,162986],{},[139,162987,155266],{},[296,162989,162990,162993,162995,162998,163000],{},[342,162991,162992],{},"tuple元组",[342,162994,162977],{},[342,162996,162997],{},"不可变",[342,162999,162983],{},[342,163001,163002],{},[139,163003,155279],{},[296,163005,163006,163009,163011,163013,163015],{},[342,163007,163008],{},"str字符串",[342,163010,162977],{},[342,163012,162997],{},[342,163014,162983],{},[342,163016,163017],{},[139,163018,155889],{},[296,163020,163021,163024,163027,163029,163032],{},[342,163022,163023],{},"set集合",[342,163025,163026],{},"无序",[342,163028,162980],{},[342,163030,163031],{},"不允许",[342,163033,163034],{},[139,163035,155304],{},[296,163037,163038,163041,163043,163045,163048],{},[342,163039,163040],{},"dict字典",[342,163042,162977],{},[342,163044,162980],{},[342,163046,163047],{},"key不允许重复",[342,163049,163050],{},[139,163051,163052],{},"{\"name\": \"小明\"}",[14,163054,163055],{},"Python 3.7 之后，字典保持插入顺序。",[84,163057,163059],{"id":163058},"_62-列表list","6.2 列表list",[14,163061,163062],{},"列表用于保存一组有顺序的数据。",[133,163064,163066],{"className":30407,"code":163065,"language":30409,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[139,163067,163068,163088,163113,163134],{"__ignoreMap":31},[142,163069,163070,163072,163074,163076,163078,163080,163082,163084,163086],{"class":144,"line":145},[142,163071,160389],{"class":152},[142,163073,198],{"class":148},[142,163075,52255],{"class":152},[142,163077,149897],{"class":257},[142,163079,12464],{"class":152},[142,163081,150945],{"class":257},[142,163083,12464],{"class":152},[142,163085,159740],{"class":257},[142,163087,33275],{"class":152},[142,163089,163090,163093,163095,163097,163099,163101,163103,163105,163107,163109,163111],{"class":144,"line":64},[142,163091,163092],{"class":152},"numbers ",[142,163094,198],{"class":148},[142,163096,52255],{"class":152},[142,163098,370],{"class":201},[142,163100,12464],{"class":152},[142,163102,230],{"class":201},[142,163104,12464],{"class":152},[142,163106,224],{"class":201},[142,163108,12464],{"class":152},[142,163110,446],{"class":201},[142,163112,33275],{"class":152},[142,163114,163115,163118,163120,163122,163124,163126,163128,163130,163132],{"class":144,"line":1208},[142,163116,163117],{"class":152},"mixed ",[142,163119,198],{"class":148},[142,163121,52255],{"class":152},[142,163123,149897],{"class":257},[142,163125,12464],{"class":152},[142,163127,803],{"class":201},[142,163129,12464],{"class":152},[142,163131,31505],{"class":201},[142,163133,33275],{"class":152},[142,163135,163136,163139,163141],{"class":144,"line":1223},[142,163137,163138],{"class":152},"empty ",[142,163140,198],{"class":148},[142,163142,51867],{"class":152},[14,163144,163145],{},"推荐一个列表中保存同类数据，代码更清晰。",[84,163147,163149],{"id":163148},"_63-列表索引","6.3 列表索引",[14,163151,163152],{},"正向索引从 0 开始：",[133,163154,163156],{"className":30407,"code":163155,"language":30409,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[139,163157,163158,163178,163182,163193,163203],{"__ignoreMap":31},[142,163159,163160,163162,163164,163166,163168,163170,163172,163174,163176],{"class":144,"line":145},[142,163161,160389],{"class":152},[142,163163,198],{"class":148},[142,163165,52255],{"class":152},[142,163167,149897],{"class":257},[142,163169,12464],{"class":152},[142,163171,150945],{"class":257},[142,163173,12464],{"class":152},[142,163175,159740],{"class":257},[142,163177,33275],{"class":152},[142,163179,163180],{"class":144,"line":64},[142,163181,2428],{"emptyLinePlaceholder":69},[142,163183,163184,163186,163189,163191],{"class":144,"line":1208},[142,163185,30444],{"class":201},[142,163187,163188],{"class":152},"(names[",[142,163190,344],{"class":201},[142,163192,4685],{"class":152},[142,163194,163195,163197,163199,163201],{"class":144,"line":1223},[142,163196,30444],{"class":201},[142,163198,163188],{"class":152},[142,163200,370],{"class":201},[142,163202,4685],{"class":152},[142,163204,163205,163207,163209,163211],{"class":144,"line":1229},[142,163206,30444],{"class":201},[142,163208,163188],{"class":152},[142,163210,230],{"class":201},[142,163212,4685],{"class":152},[14,163214,163215],{},"反向索引从 -1 开始：",[133,163217,163219],{"className":30407,"code":163218,"language":30409,"meta":31,"style":31},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[139,163220,163221,163237],{"__ignoreMap":31},[142,163222,163223,163225,163227,163229,163231,163234],{"class":144,"line":145},[142,163224,30444],{"class":201},[142,163226,163188],{"class":152},[142,163228,685],{"class":148},[142,163230,370],{"class":201},[142,163232,163233],{"class":152},"])  ",[142,163235,163236],{"class":211},"# 小刚\n",[142,163238,163239,163241,163243,163245,163247,163249],{"class":144,"line":64},[142,163240,30444],{"class":201},[142,163242,163188],{"class":152},[142,163244,685],{"class":148},[142,163246,230],{"class":201},[142,163248,163233],{"class":152},[142,163250,163251],{"class":211},"# 小红\n",[14,163253,163254],{},"索引越界会报错：",[133,163256,163258],{"className":30407,"code":163257,"language":30409,"meta":31,"style":31},"print(names[3])\n",[139,163259,163260],{"__ignoreMap":31},[142,163261,163262,163264,163266,163268],{"class":144,"line":145},[142,163263,30444],{"class":201},[142,163265,163188],{"class":152},[142,163267,224],{"class":201},[142,163269,4685],{"class":152},[84,163271,163273],{"id":163272},"_64-列表常用方法","6.4 列表常用方法",[133,163275,163277],{"className":30407,"code":163276,"language":30409,"meta":31,"style":31},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[139,163278,163279,163295,163299,163308,163322,163336,163340],{"__ignoreMap":31},[142,163280,163281,163283,163285,163287,163289,163291,163293],{"class":144,"line":145},[142,163282,160389],{"class":152},[142,163284,198],{"class":148},[142,163286,52255],{"class":152},[142,163288,149897],{"class":257},[142,163290,12464],{"class":152},[142,163292,150945],{"class":257},[142,163294,33275],{"class":152},[142,163296,163297],{"class":144,"line":64},[142,163298,2428],{"emptyLinePlaceholder":69},[142,163300,163301,163304,163306],{"class":144,"line":1208},[142,163302,163303],{"class":152},"names.append(",[142,163305,159740],{"class":257},[142,163307,159],{"class":152},[142,163309,163310,163313,163315,163317,163320],{"class":144,"line":1223},[142,163311,163312],{"class":152},"names.insert(",[142,163314,370],{"class":201},[142,163316,12464],{"class":152},[142,163318,163319],{"class":257},"\"小李\"",[142,163321,159],{"class":152},[142,163323,163324,163327,163329,163331,163334],{"class":144,"line":1229},[142,163325,163326],{"class":152},"names.extend([",[142,163328,8712],{"class":257},[142,163330,12464],{"class":152},[142,163332,163333],{"class":257},"\"小赵\"",[142,163335,4685],{"class":152},[142,163337,163338],{"class":144,"line":1243},[142,163339,2428],{"emptyLinePlaceholder":69},[142,163341,163342,163344],{"class":144,"line":1249},[142,163343,30444],{"class":201},[142,163345,163346],{"class":152},"(names)\n",[14,163348,163349],{},"删除元素：",[133,163351,163353],{"className":30407,"code":163352,"language":30409,"meta":31,"style":31},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[139,163354,163355,163364,163374,163388,163400],{"__ignoreMap":31},[142,163356,163357,163360,163362],{"class":144,"line":145},[142,163358,163359],{"class":152},"names.remove(",[142,163361,150945],{"class":257},[142,163363,159],{"class":152},[142,163365,163366,163369,163371],{"class":144,"line":64},[142,163367,163368],{"class":152},"last ",[142,163370,198],{"class":148},[142,163372,163373],{"class":152}," names.pop()\n",[142,163375,163376,163379,163381,163384,163386],{"class":144,"line":1208},[142,163377,163378],{"class":152},"first ",[142,163380,198],{"class":148},[142,163382,163383],{"class":152}," names.pop(",[142,163385,344],{"class":201},[142,163387,159],{"class":152},[142,163389,163390,163393,163396,163398],{"class":144,"line":1223},[142,163391,163392],{"class":148},"del",[142,163394,163395],{"class":152}," names[",[142,163397,344],{"class":201},[142,163399,33275],{"class":152},[142,163401,163402],{"class":144,"line":1229},[142,163403,163404],{"class":152},"names.clear()\n",[14,163406,163407],{},"查询和统计：",[133,163409,163411],{"className":30407,"code":163410,"language":30409,"meta":31,"style":31},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[139,163412,163413,163441,163445,163456,163467],{"__ignoreMap":31},[142,163414,163415,163417,163419,163421,163423,163425,163427,163429,163431,163433,163435,163437,163439],{"class":144,"line":145},[142,163416,163092],{"class":152},[142,163418,198],{"class":148},[142,163420,52255],{"class":152},[142,163422,370],{"class":201},[142,163424,12464],{"class":152},[142,163426,230],{"class":201},[142,163428,12464],{"class":152},[142,163430,224],{"class":201},[142,163432,12464],{"class":152},[142,163434,230],{"class":201},[142,163436,12464],{"class":152},[142,163438,446],{"class":201},[142,163440,33275],{"class":152},[142,163442,163443],{"class":144,"line":64},[142,163444,2428],{"emptyLinePlaceholder":69},[142,163446,163447,163449,163452,163454],{"class":144,"line":1208},[142,163448,30444],{"class":201},[142,163450,163451],{"class":152},"(numbers.index(",[142,163453,224],{"class":201},[142,163455,30526],{"class":152},[142,163457,163458,163460,163463,163465],{"class":144,"line":1223},[142,163459,30444],{"class":201},[142,163461,163462],{"class":152},"(numbers.count(",[142,163464,230],{"class":201},[142,163466,30526],{"class":152},[142,163468,163469,163471,163473,163475],{"class":144,"line":1229},[142,163470,30444],{"class":201},[142,163472,153],{"class":152},[142,163474,7387],{"class":201},[142,163476,163477],{"class":152},"(numbers))\n",[14,163479,163480],{},"排序：",[133,163482,163484],{"className":30407,"code":163483,"language":30409,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[139,163485,163486,163510,163514,163519,163526,163530,163544,163550,163554,163559],{"__ignoreMap":31},[142,163487,163488,163490,163492,163494,163496,163498,163500,163502,163504,163506,163508],{"class":144,"line":145},[142,163489,163092],{"class":152},[142,163491,198],{"class":148},[142,163493,52255],{"class":152},[142,163495,224],{"class":201},[142,163497,12464],{"class":152},[142,163499,370],{"class":201},[142,163501,12464],{"class":152},[142,163503,472],{"class":201},[142,163505,12464],{"class":152},[142,163507,230],{"class":201},[142,163509,33275],{"class":152},[142,163511,163512],{"class":144,"line":64},[142,163513,2428],{"emptyLinePlaceholder":69},[142,163515,163516],{"class":144,"line":1208},[142,163517,163518],{"class":152},"numbers.sort()\n",[142,163520,163521,163523],{"class":144,"line":1223},[142,163522,30444],{"class":201},[142,163524,163525],{"class":152},"(numbers)\n",[142,163527,163528],{"class":144,"line":1229},[142,163529,2428],{"emptyLinePlaceholder":69},[142,163531,163532,163535,163538,163540,163542],{"class":144,"line":1243},[142,163533,163534],{"class":152},"numbers.sort(",[142,163536,163537],{"class":5245},"reverse",[142,163539,198],{"class":148},[142,163541,31505],{"class":201},[142,163543,159],{"class":152},[142,163545,163546,163548],{"class":144,"line":1249},[142,163547,30444],{"class":201},[142,163549,163525],{"class":152},[142,163551,163552],{"class":144,"line":1340},[142,163553,2428],{"emptyLinePlaceholder":69},[142,163555,163556],{"class":144,"line":1346},[142,163557,163558],{"class":152},"numbers.reverse()\n",[142,163560,163561,163563],{"class":144,"line":1358},[142,163562,30444],{"class":201},[142,163564,163525],{"class":152},[14,163566,163567,163570,163571,163574],{},[139,163568,163569],{},"sort()"," 会修改原列表，",[139,163572,163573],{},"sorted()"," 返回新列表。",[133,163576,163578],{"className":30407,"code":163577,"language":30409,"meta":31,"style":31},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[139,163579,163580,163604,163616,163620,163626],{"__ignoreMap":31},[142,163581,163582,163584,163586,163588,163590,163592,163594,163596,163598,163600,163602],{"class":144,"line":145},[142,163583,163092],{"class":152},[142,163585,198],{"class":148},[142,163587,52255],{"class":152},[142,163589,224],{"class":201},[142,163591,12464],{"class":152},[142,163593,370],{"class":201},[142,163595,12464],{"class":152},[142,163597,472],{"class":201},[142,163599,12464],{"class":152},[142,163601,230],{"class":201},[142,163603,33275],{"class":152},[142,163605,163606,163609,163611,163614],{"class":144,"line":64},[142,163607,163608],{"class":152},"new_numbers ",[142,163610,198],{"class":148},[142,163612,163613],{"class":201}," sorted",[142,163615,163525],{"class":152},[142,163617,163618],{"class":144,"line":1208},[142,163619,2428],{"emptyLinePlaceholder":69},[142,163621,163622,163624],{"class":144,"line":1223},[142,163623,30444],{"class":201},[142,163625,163525],{"class":152},[142,163627,163628,163630],{"class":144,"line":1229},[142,163629,30444],{"class":201},[142,163631,163632],{"class":152},"(new_numbers)\n",[84,163634,163636],{"id":163635},"_65-列表遍历","6.5 列表遍历",[133,163638,163640],{"className":30407,"code":163639,"language":30409,"meta":31,"style":31},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[139,163641,163642,163662,163666,163676],{"__ignoreMap":31},[142,163643,163644,163646,163648,163650,163652,163654,163656,163658,163660],{"class":144,"line":145},[142,163645,160389],{"class":152},[142,163647,198],{"class":148},[142,163649,52255],{"class":152},[142,163651,149897],{"class":257},[142,163653,12464],{"class":152},[142,163655,150945],{"class":257},[142,163657,12464],{"class":152},[142,163659,159740],{"class":257},[142,163661,33275],{"class":152},[142,163663,163664],{"class":144,"line":64},[142,163665,2428],{"emptyLinePlaceholder":69},[142,163667,163668,163670,163672,163674],{"class":144,"line":1208},[142,163669,3053],{"class":148},[142,163671,160425],{"class":152},[142,163673,26072],{"class":148},[142,163675,160430],{"class":152},[142,163677,163678,163680],{"class":144,"line":1223},[142,163679,31328],{"class":201},[142,163681,150669],{"class":152},[14,163683,163684],{},"需要索引时：",[133,163686,163688],{"className":30407,"code":163687,"language":30409,"meta":31,"style":31},"for index, name in enumerate(names):\n    print(index, name)\n",[139,163689,163690,163704],{"__ignoreMap":31},[142,163691,163692,163694,163697,163699,163701],{"class":144,"line":145},[142,163693,3053],{"class":148},[142,163695,163696],{"class":152}," index, name ",[142,163698,26072],{"class":148},[142,163700,31635],{"class":201},[142,163702,163703],{"class":152},"(names):\n",[142,163705,163706,163708],{"class":144,"line":64},[142,163707,31328],{"class":201},[142,163709,163710],{"class":152},"(index, name)\n",[14,163712,163713],{},"统计总分：",[133,163715,163717],{"className":30407,"code":163716,"language":30409,"meta":31,"style":31},"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",[139,163718,163719,163744,163752,163756,163767,163775,163779,163796],{"__ignoreMap":31},[142,163720,163721,163724,163726,163728,163730,163732,163734,163736,163738,163740,163742],{"class":144,"line":145},[142,163722,163723],{"class":152},"scores ",[142,163725,198],{"class":148},[142,163727,52255],{"class":152},[142,163729,1015],{"class":201},[142,163731,12464],{"class":152},[142,163733,889],{"class":201},[142,163735,12464],{"class":152},[142,163737,407],{"class":201},[142,163739,12464],{"class":152},[142,163741,714],{"class":201},[142,163743,33275],{"class":152},[142,163745,163746,163748,163750],{"class":144,"line":64},[142,163747,157269],{"class":152},[142,163749,198],{"class":148},[142,163751,47362],{"class":201},[142,163753,163754],{"class":144,"line":1208},[142,163755,2428],{"emptyLinePlaceholder":69},[142,163757,163758,163760,163762,163764],{"class":144,"line":1223},[142,163759,3053],{"class":148},[142,163761,157792],{"class":152},[142,163763,26072],{"class":148},[142,163765,163766],{"class":152}," scores:\n",[142,163768,163769,163771,163773],{"class":144,"line":1229},[142,163770,159316],{"class":152},[142,163772,9506],{"class":148},[142,163774,1607],{"class":152},[142,163776,163777],{"class":144,"line":1243},[142,163778,2428],{"emptyLinePlaceholder":69},[142,163780,163781,163784,163786,163789,163791,163793],{"class":144,"line":1249},[142,163782,163783],{"class":152},"avg ",[142,163785,198],{"class":148},[142,163787,163788],{"class":152}," total ",[142,163790,737],{"class":148},[142,163792,7360],{"class":201},[142,163794,163795],{"class":152},"(scores)\n",[142,163797,163798,163800,163802,163804,163807,163809,163812,163814,163816,163818],{"class":144,"line":1340},[142,163799,30444],{"class":201},[142,163801,153],{"class":152},[142,163803,205],{"class":148},[142,163805,163806],{"class":257},"\"平均分:",[142,163808,1049],{"class":201},[142,163810,163811],{"class":152},"avg",[142,163813,157168],{"class":148},[142,163815,1099],{"class":201},[142,163817,404],{"class":257},[142,163819,159],{"class":152},[84,163821,163823],{"id":163822},"_66-元组tuple","6.6 元组tuple",[14,163825,163826],{},"元组和列表类似，但不可修改。",[133,163828,163830],{"className":30407,"code":163829,"language":30409,"meta":31,"style":31},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[139,163831,163832,163849],{"__ignoreMap":31},[142,163833,163834,163837,163839,163841,163843,163845,163847],{"class":144,"line":145},[142,163835,163836],{"class":152},"point ",[142,163838,198],{"class":148},[142,163840,1686],{"class":152},[142,163842,599],{"class":201},[142,163844,12464],{"class":152},[142,163846,853],{"class":201},[142,163848,159],{"class":152},[142,163850,163851,163853,163855,163857,163859,163861,163863,163865,163867],{"class":144,"line":64},[142,163852,116323],{"class":152},[142,163854,198],{"class":148},[142,163856,1686],{"class":152},[142,163858,149897],{"class":257},[142,163860,12464],{"class":152},[142,163862,803],{"class":201},[142,163864,12464],{"class":152},[142,163866,69298],{"class":257},[142,163868,159],{"class":152},[14,163870,163871],{},"单元素元组必须加逗号：",[133,163873,163875],{"className":30407,"code":163874,"language":30409,"meta":31,"style":31},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[139,163876,163877,163891,163904,163908,163922],{"__ignoreMap":31},[142,163878,163879,163882,163884,163886,163888],{"class":144,"line":145},[142,163880,163881],{"class":152},"t1 ",[142,163883,198],{"class":148},[142,163885,1686],{"class":152},[142,163887,599],{"class":201},[142,163889,163890],{"class":152},",)\n",[142,163892,163893,163896,163898,163900,163902],{"class":144,"line":64},[142,163894,163895],{"class":152},"t2 ",[142,163897,198],{"class":148},[142,163899,1686],{"class":152},[142,163901,599],{"class":201},[142,163903,159],{"class":152},[142,163905,163906],{"class":144,"line":1208},[142,163907,2428],{"emptyLinePlaceholder":69},[142,163909,163910,163912,163914,163916,163919],{"class":144,"line":1223},[142,163911,30444],{"class":201},[142,163913,153],{"class":152},[142,163915,103116],{"class":201},[142,163917,163918],{"class":152},"(t1))  ",[142,163920,163921],{"class":211},"# tuple\n",[142,163923,163924,163926,163928,163930,163933],{"class":144,"line":1229},[142,163925,30444],{"class":201},[142,163927,153],{"class":152},[142,163929,103116],{"class":201},[142,163931,163932],{"class":152},"(t2))  ",[142,163934,163935],{"class":211},"# int\n",[14,163937,163938],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[84,163940,163942],{"id":163941},"_67-字符串str","6.7 字符串str",[14,163944,163945],{},"字符串也是序列，可以索引、切片和遍历。",[133,163947,163949],{"className":30407,"code":163948,"language":30409,"meta":31,"style":31},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[139,163950,163951,163959,163963,163974,163986,163990,164001],{"__ignoreMap":31},[142,163952,163953,163955,163957],{"class":144,"line":145},[142,163954,156453],{"class":152},[142,163956,198],{"class":148},[142,163958,159690],{"class":257},[142,163960,163961],{"class":144,"line":64},[142,163962,2428],{"emptyLinePlaceholder":69},[142,163964,163965,163967,163970,163972],{"class":144,"line":1208},[142,163966,30444],{"class":201},[142,163968,163969],{"class":152},"(text[",[142,163971,344],{"class":201},[142,163973,4685],{"class":152},[142,163975,163976,163978,163980,163982,163984],{"class":144,"line":1223},[142,163977,30444],{"class":201},[142,163979,163969],{"class":152},[142,163981,685],{"class":148},[142,163983,370],{"class":201},[142,163985,4685],{"class":152},[142,163987,163988],{"class":144,"line":1229},[142,163989,2428],{"emptyLinePlaceholder":69},[142,163991,163992,163994,163996,163998],{"class":144,"line":1243},[142,163993,3053],{"class":148},[142,163995,159701],{"class":152},[142,163997,26072],{"class":148},[142,163999,164000],{"class":152}," text:\n",[142,164002,164003,164005],{"class":144,"line":1249},[142,164004,31328],{"class":201},[142,164006,159712],{"class":152},[14,164008,164009],{},"字符串不可变：",[133,164011,164013],{"className":30407,"code":164012,"language":30409,"meta":31,"style":31},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[139,164014,164015,164023],{"__ignoreMap":31},[142,164016,164017,164019,164021],{"class":144,"line":145},[142,164018,156453],{"class":152},[142,164020,198],{"class":148},[142,164022,159690],{"class":257},[142,164024,164025,164028,164030,164032,164034,164037],{"class":144,"line":64},[142,164026,164027],{"class":152},"text[",[142,164029,344],{"class":201},[142,164031,4471],{"class":152},[142,164033,198],{"class":148},[142,164035,164036],{"class":257}," \"P\"",[142,164038,164039],{"class":211},"  # 报错\n",[14,164041,164042],{},"如果要得到新字符串：",[133,164044,164046],{"className":30407,"code":164045,"language":30409,"meta":31,"style":31},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[139,164047,164048,164056,164074],{"__ignoreMap":31},[142,164049,164050,164052,164054],{"class":144,"line":145},[142,164051,156453],{"class":152},[142,164053,198],{"class":148},[142,164055,159690],{"class":257},[142,164057,164058,164060,164062,164064,164066,164069,164071],{"class":144,"line":64},[142,164059,156453],{"class":152},[142,164061,198],{"class":148},[142,164063,164036],{"class":257},[142,164065,45595],{"class":148},[142,164067,164068],{"class":152}," text[",[142,164070,370],{"class":201},[142,164072,164073],{"class":152},":]\n",[142,164075,164076,164078],{"class":144,"line":1208},[142,164077,30444],{"class":201},[142,164079,164080],{"class":152},"(text)\n",[84,164082,164084],{"id":164083},"_68-切片","6.8 切片",[14,164086,164087],{},"切片用于从序列中取一部分。",[133,164089,164091],{"className":30407,"code":164090,"language":30409,"meta":31,"style":31},"序列[开始:结束:步长]\n",[139,164092,164093],{"__ignoreMap":31},[142,164094,164095],{"class":144,"line":145},[142,164096,164090],{"class":152},[14,164098,164099],{},"结束位置不包含。",[133,164101,164103],{"className":30407,"code":164102,"language":30409,"meta":31,"style":31},"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",[139,164104,164105,164142,164146,164165,164180,164194,164208],{"__ignoreMap":31},[142,164106,164107,164110,164112,164114,164116,164118,164120,164122,164124,164126,164128,164130,164132,164134,164136,164138,164140],{"class":144,"line":145},[142,164108,164109],{"class":152},"nums ",[142,164111,198],{"class":148},[142,164113,52255],{"class":152},[142,164115,344],{"class":201},[142,164117,12464],{"class":152},[142,164119,370],{"class":201},[142,164121,12464],{"class":152},[142,164123,230],{"class":201},[142,164125,12464],{"class":152},[142,164127,224],{"class":201},[142,164129,12464],{"class":152},[142,164131,446],{"class":201},[142,164133,12464],{"class":152},[142,164135,472],{"class":201},[142,164137,12464],{"class":152},[142,164139,497],{"class":201},[142,164141,33275],{"class":152},[142,164143,164144],{"class":144,"line":64},[142,164145,2428],{"emptyLinePlaceholder":69},[142,164147,164148,164150,164153,164155,164157,164159,164162],{"class":144,"line":1208},[142,164149,30444],{"class":201},[142,164151,164152],{"class":152},"(nums[",[142,164154,370],{"class":201},[142,164156,1012],{"class":152},[142,164158,446],{"class":201},[142,164160,164161],{"class":152},"])    ",[142,164163,164164],{"class":211},"# [1, 2, 3]\n",[142,164166,164167,164169,164172,164174,164177],{"class":144,"line":1223},[142,164168,30444],{"class":201},[142,164170,164171],{"class":152},"(nums[:",[142,164173,224],{"class":201},[142,164175,164176],{"class":152},"])     ",[142,164178,164179],{"class":211},"# [0, 1, 2]\n",[142,164181,164182,164184,164186,164188,164191],{"class":144,"line":1229},[142,164183,30444],{"class":201},[142,164185,164152],{"class":152},[142,164187,224],{"class":201},[142,164189,164190],{"class":152},":])     ",[142,164192,164193],{"class":211},"# [3, 4, 5, 6]\n",[142,164195,164196,164198,164201,164203,164205],{"class":144,"line":1243},[142,164197,30444],{"class":201},[142,164199,164200],{"class":152},"(nums[::",[142,164202,230],{"class":201},[142,164204,164161],{"class":152},[142,164206,164207],{"class":211},"# [0, 2, 4, 6]\n",[142,164209,164210,164212,164214,164216,164218,164221],{"class":144,"line":1249},[142,164211,30444],{"class":201},[142,164213,164200],{"class":152},[142,164215,685],{"class":148},[142,164217,370],{"class":201},[142,164219,164220],{"class":152},"])   ",[142,164222,164223],{"class":211},"# 反转\n",[14,164225,164226],{},"字符串切片：",[133,164228,164230],{"className":30407,"code":164229,"language":30409,"meta":31,"style":31},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[139,164231,164232,164241,164255],{"__ignoreMap":31},[142,164233,164234,164236,164238],{"class":144,"line":145},[142,164235,156453],{"class":152},[142,164237,198],{"class":148},[142,164239,164240],{"class":257}," \"abcdef\"\n",[142,164242,164243,164245,164247,164249,164251,164253],{"class":144,"line":64},[142,164244,30444],{"class":201},[142,164246,163969],{"class":152},[142,164248,370],{"class":201},[142,164250,1012],{"class":152},[142,164252,446],{"class":201},[142,164254,4685],{"class":152},[142,164256,164257,164259,164262,164264,164266],{"class":144,"line":1208},[142,164258,30444],{"class":201},[142,164260,164261],{"class":152},"(text[::",[142,164263,685],{"class":148},[142,164265,370],{"class":201},[142,164267,4685],{"class":152},[84,164269,164271],{"id":164270},"_69-集合set","6.9 集合set",[14,164273,164274],{},"集合特点：",[96,164276,164277,164280,164283],{},[99,164278,164279],{},"无序。",[99,164281,164282],{},"元素不重复。",[99,164284,164285],{},"可以做交集、并集、差集。",[133,164287,164289],{"className":30407,"code":164288,"language":30409,"meta":31,"style":31},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[139,164290,164291,164319],{"__ignoreMap":31},[142,164292,164293,164295,164297,164299,164301,164303,164305,164307,164309,164311,164313,164315,164317],{"class":144,"line":145},[142,164294,164109],{"class":152},[142,164296,198],{"class":148},[142,164298,4476],{"class":152},[142,164300,370],{"class":201},[142,164302,12464],{"class":152},[142,164304,230],{"class":201},[142,164306,12464],{"class":152},[142,164308,224],{"class":201},[142,164310,12464],{"class":152},[142,164312,224],{"class":201},[142,164314,12464],{"class":152},[142,164316,446],{"class":201},[142,164318,1593],{"class":152},[142,164320,164321,164323],{"class":144,"line":64},[142,164322,30444],{"class":201},[142,164324,164325],{"class":152},"(nums)\n",[14,164327,164328],{},"创建空集合：",[133,164330,164332],{"className":30407,"code":164331,"language":30409,"meta":31,"style":31},"s = set()\n",[139,164333,164334],{"__ignoreMap":31},[142,164335,164336,164338,164340,164342],{"class":144,"line":145},[142,164337,10608],{"class":152},[142,164339,198],{"class":148},[142,164341,119731],{"class":201},[142,164343,2004],{"class":152},[14,164345,9054,164346,164348],{},[139,164347,32488],{}," 是空字典，不是空集合。",[14,164350,164351],{},"集合常用操作：",[133,164353,164355],{"className":30407,"code":164354,"language":30409,"meta":31,"style":31},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[139,164356,164357,164377,164381,164390,164399,164408],{"__ignoreMap":31},[142,164358,164359,164361,164363,164365,164367,164369,164371,164373,164375],{"class":144,"line":145},[142,164360,10608],{"class":152},[142,164362,198],{"class":148},[142,164364,4476],{"class":152},[142,164366,370],{"class":201},[142,164368,12464],{"class":152},[142,164370,230],{"class":201},[142,164372,12464],{"class":152},[142,164374,224],{"class":201},[142,164376,1593],{"class":152},[142,164378,164379],{"class":144,"line":64},[142,164380,2428],{"emptyLinePlaceholder":69},[142,164382,164383,164386,164388],{"class":144,"line":1208},[142,164384,164385],{"class":152},"s.add(",[142,164387,446],{"class":201},[142,164389,159],{"class":152},[142,164391,164392,164395,164397],{"class":144,"line":1223},[142,164393,164394],{"class":152},"s.remove(",[142,164396,230],{"class":201},[142,164398,159],{"class":152},[142,164400,164401,164404,164406],{"class":144,"line":1229},[142,164402,164403],{"class":152},"s.discard(",[142,164405,599],{"class":201},[142,164407,159],{"class":152},[142,164409,164410,164412,164414,164416],{"class":144,"line":1243},[142,164411,30444],{"class":201},[142,164413,153],{"class":152},[142,164415,7387],{"class":201},[142,164417,164418],{"class":152},"(s))\n",[14,164420,164421],{},"交并差：",[133,164423,164425],{"className":30407,"code":164424,"language":30409,"meta":31,"style":31},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[139,164426,164427,164447,164467,164471,164486,164499],{"__ignoreMap":31},[142,164428,164429,164431,164433,164435,164437,164439,164441,164443,164445],{"class":144,"line":145},[142,164430,10948],{"class":152},[142,164432,198],{"class":148},[142,164434,4476],{"class":152},[142,164436,370],{"class":201},[142,164438,12464],{"class":152},[142,164440,230],{"class":201},[142,164442,12464],{"class":152},[142,164444,224],{"class":201},[142,164446,1593],{"class":152},[142,164448,164449,164451,164453,164455,164457,164459,164461,164463,164465],{"class":144,"line":64},[142,164450,10974],{"class":152},[142,164452,198],{"class":148},[142,164454,4476],{"class":152},[142,164456,224],{"class":201},[142,164458,12464],{"class":152},[142,164460,446],{"class":201},[142,164462,12464],{"class":152},[142,164464,472],{"class":201},[142,164466,1593],{"class":152},[142,164468,164469],{"class":144,"line":1208},[142,164470,2428],{"emptyLinePlaceholder":69},[142,164472,164473,164475,164478,164480,164483],{"class":144,"line":1223},[142,164474,30444],{"class":201},[142,164476,164477],{"class":152},"(a ",[142,164479,506],{"class":148},[142,164481,164482],{"class":152}," b)  ",[142,164484,164485],{"class":211},"# 交集\n",[142,164487,164488,164490,164492,164494,164496],{"class":144,"line":1229},[142,164489,30444],{"class":201},[142,164491,164477],{"class":152},[142,164493,1074],{"class":148},[142,164495,164482],{"class":152},[142,164497,164498],{"class":211},"# 并集\n",[142,164500,164501,164503,164505,164507,164509],{"class":144,"line":1243},[142,164502,30444],{"class":201},[142,164504,164477],{"class":152},[142,164506,685],{"class":148},[142,164508,164482],{"class":152},[142,164510,164511],{"class":211},"# 差集\n",[84,164513,164515],{"id":164514},"_610-字典dict","6.10 字典dict",[14,164517,164518],{},"字典通过 key-value 保存数据。",[133,164520,164522],{"className":30407,"code":164521,"language":30409,"meta":31,"style":31},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[139,164523,164524,164532,164542,164553,164563],{"__ignoreMap":31},[142,164525,164526,164528,164530],{"class":144,"line":145},[142,164527,149490],{"class":152},[142,164529,198],{"class":148},[142,164531,15601],{"class":152},[142,164533,164534,164536,164538,164540],{"class":144,"line":64},[142,164535,147029],{"class":257},[142,164537,51466],{"class":152},[142,164539,149897],{"class":257},[142,164541,31495],{"class":152},[142,164543,164544,164547,164549,164551],{"class":144,"line":1208},[142,164545,164546],{"class":257},"    \"age\"",[142,164548,51466],{"class":152},[142,164550,803],{"class":201},[142,164552,31495],{"class":152},[142,164554,164555,164558,164560],{"class":144,"line":1223},[142,164556,164557],{"class":257},"    \"score\"",[142,164559,51466],{"class":152},[142,164561,164562],{"class":201},"95\n",[142,164564,164565],{"class":144,"line":1229},[142,164566,1593],{"class":152},[14,164568,164569],{},"获取值：",[133,164571,164573],{"className":30407,"code":164572,"language":30409,"meta":31,"style":31},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[139,164574,164575,164586],{"__ignoreMap":31},[142,164576,164577,164579,164582,164584],{"class":144,"line":145},[142,164578,30444],{"class":201},[142,164580,164581],{"class":152},"(student[",[142,164583,62708],{"class":257},[142,164585,4685],{"class":152},[142,164587,164588,164590,164593,164595],{"class":144,"line":64},[142,164589,30444],{"class":201},[142,164591,164592],{"class":152},"(student.get(",[142,164594,62708],{"class":257},[142,164596,30526],{"class":152},[14,164598,15417],{},[133,164600,164602],{"className":30407,"code":164601,"language":30409,"meta":31,"style":31},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[139,164603,164604,164617],{"__ignoreMap":31},[142,164605,164606,164608,164611,164614],{"class":144,"line":145},[142,164607,152868],{"class":152},[142,164609,164610],{"class":257},"\"address\"",[142,164612,164613],{"class":152},"]     ",[142,164615,164616],{"class":211},"# key不存在会报错\n",[142,164618,164619,164622,164624,164626],{"class":144,"line":64},[142,164620,164621],{"class":152},"student.get(",[142,164623,164610],{"class":257},[142,164625,13743],{"class":152},[142,164627,164628],{"class":211},"# key不存在返回None\n",[14,164630,164631],{},"设置默认值：",[133,164633,164635],{"className":30407,"code":164634,"language":30409,"meta":31,"style":31},"print(student.get(\"address\", \"未知\"))\n",[139,164636,164637],{"__ignoreMap":31},[142,164638,164639,164641,164643,164645,164647,164650],{"class":144,"line":145},[142,164640,30444],{"class":201},[142,164642,164592],{"class":152},[142,164644,164610],{"class":257},[142,164646,12464],{"class":152},[142,164648,164649],{"class":257},"\"未知\"",[142,164651,30526],{"class":152},[14,164653,164654],{},"新增和修改：",[133,164656,164658],{"className":30407,"code":164657,"language":30409,"meta":31,"style":31},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[139,164659,164660,164673],{"__ignoreMap":31},[142,164661,164662,164664,164666,164668,164670],{"class":144,"line":145},[142,164663,152868],{"class":152},[142,164665,69153],{"class":257},[142,164667,4471],{"class":152},[142,164669,198],{"class":148},[142,164671,164672],{"class":201}," 19\n",[142,164674,164675,164677,164679,164681,164683],{"class":144,"line":64},[142,164676,152868],{"class":152},[142,164678,164610],{"class":257},[142,164680,4471],{"class":152},[142,164682,198],{"class":148},[142,164684,164685],{"class":257}," \"北京\"\n",[14,164687,164688],{},"删除：",[133,164690,164692],{"className":30407,"code":164691,"language":30409,"meta":31,"style":31},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[139,164693,164694,164707,164717],{"__ignoreMap":31},[142,164695,164696,164698,164700,164703,164705],{"class":144,"line":145},[142,164697,155367],{"class":152},[142,164699,198],{"class":148},[142,164701,164702],{"class":152}," student.pop(",[142,164704,151481],{"class":257},[142,164706,159],{"class":152},[142,164708,164709,164711,164713,164715],{"class":144,"line":64},[142,164710,163392],{"class":148},[142,164712,152158],{"class":152},[142,164714,69153],{"class":257},[142,164716,33275],{"class":152},[142,164718,164719],{"class":144,"line":1208},[142,164720,164721],{"class":152},"student.clear()\n",[84,164723,164725],{"id":164724},"_611-字典遍历","6.11 字典遍历",[14,164727,164728],{},"遍历 key：",[133,164730,164732],{"className":30407,"code":164731,"language":30409,"meta":31,"style":31},"for key in student:\n    print(key, student[key])\n",[139,164733,164734,164746],{"__ignoreMap":31},[142,164735,164736,164738,164741,164743],{"class":144,"line":145},[142,164737,3053],{"class":148},[142,164739,164740],{"class":152}," key ",[142,164742,26072],{"class":148},[142,164744,164745],{"class":152}," student:\n",[142,164747,164748,164750],{"class":144,"line":64},[142,164749,31328],{"class":201},[142,164751,164752],{"class":152},"(key, student[key])\n",[14,164754,164755],{},"遍历 value：",[133,164757,164759],{"className":30407,"code":164758,"language":30409,"meta":31,"style":31},"for value in student.values():\n    print(value)\n",[139,164760,164761,164773],{"__ignoreMap":31},[142,164762,164763,164765,164768,164770],{"class":144,"line":145},[142,164764,3053],{"class":148},[142,164766,164767],{"class":152}," value ",[142,164769,26072],{"class":148},[142,164771,164772],{"class":152}," student.values():\n",[142,164774,164775,164777],{"class":144,"line":64},[142,164776,31328],{"class":201},[142,164778,164779],{"class":152},"(value)\n",[14,164781,164782],{},"遍历 key 和 value：",[133,164784,164786],{"className":30407,"code":164785,"language":30409,"meta":31,"style":31},"for key, value in student.items():\n    print(key, value)\n",[139,164787,164788,164800],{"__ignoreMap":31},[142,164789,164790,164792,164795,164797],{"class":144,"line":145},[142,164791,3053],{"class":148},[142,164793,164794],{"class":152}," key, value ",[142,164796,26072],{"class":148},[142,164798,164799],{"class":152}," student.items():\n",[142,164801,164802,164804],{"class":144,"line":64},[142,164803,31328],{"class":201},[142,164805,164806],{"class":152},"(key, value)\n",[84,164808,164810],{"id":164809},"_612-嵌套容器","6.12 嵌套容器",[14,164812,164813],{},"列表中保存字典，是项目中最常见的结构之一。",[133,164815,164817],{"className":30407,"code":164816,"language":30409,"meta":31,"style":31},"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",[139,164818,164819,164827,164855,164883,164911,164915,164919,164929],{"__ignoreMap":31},[142,164820,164821,164823,164825],{"class":144,"line":145},[142,164822,159725],{"class":152},[142,164824,198],{"class":148},[142,164826,55476],{"class":152},[142,164828,164829,164831,164833,164835,164837,164839,164841,164843,164845,164847,164849,164851,164853],{"class":144,"line":64},[142,164830,148394],{"class":152},[142,164832,62708],{"class":257},[142,164834,51466],{"class":152},[142,164836,149897],{"class":257},[142,164838,12464],{"class":152},[142,164840,69153],{"class":257},[142,164842,51466],{"class":152},[142,164844,803],{"class":201},[142,164846,12464],{"class":152},[142,164848,151481],{"class":257},[142,164850,51466],{"class":152},[142,164852,1142],{"class":201},[142,164854,4958],{"class":152},[142,164856,164857,164859,164861,164863,164865,164867,164869,164871,164873,164875,164877,164879,164881],{"class":144,"line":1208},[142,164858,148394],{"class":152},[142,164860,62708],{"class":257},[142,164862,51466],{"class":152},[142,164864,150945],{"class":257},[142,164866,12464],{"class":152},[142,164868,69153],{"class":257},[142,164870,51466],{"class":152},[142,164872,778],{"class":201},[142,164874,12464],{"class":152},[142,164876,151481],{"class":257},[142,164878,51466],{"class":152},[142,164880,964],{"class":201},[142,164882,4958],{"class":152},[142,164884,164885,164887,164889,164891,164893,164895,164897,164899,164901,164903,164905,164907,164909],{"class":144,"line":1223},[142,164886,148394],{"class":152},[142,164888,62708],{"class":257},[142,164890,51466],{"class":152},[142,164892,159740],{"class":257},[142,164894,12464],{"class":152},[142,164896,69153],{"class":257},[142,164898,51466],{"class":152},[142,164900,828],{"class":201},[142,164902,12464],{"class":152},[142,164904,151481],{"class":257},[142,164906,51466],{"class":152},[142,164908,559],{"class":201},[142,164910,4958],{"class":152},[142,164912,164913],{"class":144,"line":1229},[142,164914,33275],{"class":152},[142,164916,164917],{"class":144,"line":1243},[142,164918,2428],{"emptyLinePlaceholder":69},[142,164920,164921,164923,164925,164927],{"class":144,"line":1249},[142,164922,3053],{"class":148},[142,164924,152146],{"class":152},[142,164926,26072],{"class":148},[142,164928,152151],{"class":152},[142,164930,164931,164933,164935,164937,164940,164942],{"class":144,"line":1340},[142,164932,31328],{"class":201},[142,164934,164581],{"class":152},[142,164936,62708],{"class":257},[142,164938,164939],{"class":152},"], student[",[142,164941,151481],{"class":257},[142,164943,4685],{"class":152},[14,164945,164946],{},"统计平均分：",[133,164948,164950],{"className":30407,"code":164949,"language":30409,"meta":31,"style":31},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[139,164951,164952,164960,164964,164974,164986,164990,165005],{"__ignoreMap":31},[142,164953,164954,164956,164958],{"class":144,"line":145},[142,164955,157269],{"class":152},[142,164957,198],{"class":148},[142,164959,47362],{"class":201},[142,164961,164962],{"class":144,"line":64},[142,164963,2428],{"emptyLinePlaceholder":69},[142,164965,164966,164968,164970,164972],{"class":144,"line":1208},[142,164967,3053],{"class":148},[142,164969,152146],{"class":152},[142,164971,26072],{"class":148},[142,164973,152151],{"class":152},[142,164975,164976,164978,164980,164982,164984],{"class":144,"line":1223},[142,164977,159316],{"class":152},[142,164979,9506],{"class":148},[142,164981,152158],{"class":152},[142,164983,151481],{"class":257},[142,164985,33275],{"class":152},[142,164987,164988],{"class":144,"line":1229},[142,164989,2428],{"emptyLinePlaceholder":69},[142,164991,164992,164994,164996,164998,165000,165002],{"class":144,"line":1243},[142,164993,163783],{"class":152},[142,164995,198],{"class":148},[142,164997,163788],{"class":152},[142,164999,737],{"class":148},[142,165001,7360],{"class":201},[142,165003,165004],{"class":152},"(students)\n",[142,165006,165007,165009,165011,165013,165015,165017,165019,165021,165023,165025],{"class":144,"line":1249},[142,165008,30444],{"class":201},[142,165010,153],{"class":152},[142,165012,205],{"class":148},[142,165014,163806],{"class":257},[142,165016,1049],{"class":201},[142,165018,163811],{"class":152},[142,165020,157168],{"class":148},[142,165022,1099],{"class":201},[142,165024,404],{"class":257},[142,165026,159],{"class":152},[14,165028,165029],{},"查找学生：",[133,165031,165033],{"className":30407,"code":165032,"language":30409,"meta":31,"style":31},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[139,165034,165035,165050,165054,165064,165078,165084,165088,165094],{"__ignoreMap":31},[142,165036,165037,165039,165041,165043,165045,165048],{"class":144,"line":145},[142,165038,111587],{"class":152},[142,165040,198],{"class":148},[142,165042,60634],{"class":201},[142,165044,153],{"class":152},[142,165046,165047],{"class":257},"\"请输入学生姓名:\"",[142,165049,159],{"class":152},[142,165051,165052],{"class":144,"line":64},[142,165053,2428],{"emptyLinePlaceholder":69},[142,165055,165056,165058,165060,165062],{"class":144,"line":1208},[142,165057,3053],{"class":148},[142,165059,152146],{"class":152},[142,165061,26072],{"class":148},[142,165063,152151],{"class":152},[142,165065,165066,165068,165070,165072,165074,165076],{"class":144,"line":1223},[142,165067,3129],{"class":148},[142,165069,152158],{"class":152},[142,165071,62708],{"class":257},[142,165073,4471],{"class":152},[142,165075,2977],{"class":148},[142,165077,160441],{"class":152},[142,165079,165080,165082],{"class":144,"line":1229},[142,165081,32480],{"class":201},[142,165083,150051],{"class":152},[142,165085,165086],{"class":144,"line":1243},[142,165087,31656],{"class":148},[142,165089,165090,165092],{"class":144,"line":1249},[142,165091,1729],{"class":148},[142,165093,3767],{"class":152},[142,165095,165096,165098,165100,165103],{"class":144,"line":1340},[142,165097,31328],{"class":201},[142,165099,153],{"class":152},[142,165101,165102],{"class":257},"\"没有找到\"",[142,165104,159],{"class":152},[84,165106,165108],{"id":165107},"_613-容器通用操作","6.13 容器通用操作",[14,165110,165111],{},"长度：",[133,165113,165115],{"className":30407,"code":165114,"language":30409,"meta":31,"style":31},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[139,165116,165117,165136,165146],{"__ignoreMap":31},[142,165118,165119,165121,165124,165126,165128,165130,165132,165134],{"class":144,"line":145},[142,165120,7387],{"class":201},[142,165122,165123],{"class":152},"([",[142,165125,370],{"class":201},[142,165127,12464],{"class":152},[142,165129,230],{"class":201},[142,165131,12464],{"class":152},[142,165133,224],{"class":201},[142,165135,4685],{"class":152},[142,165137,165138,165140,165142,165144],{"class":144,"line":64},[142,165139,7387],{"class":201},[142,165141,153],{"class":152},[142,165143,155889],{"class":257},[142,165145,159],{"class":152},[142,165147,165148,165150,165153,165155,165157,165159],{"class":144,"line":1208},[142,165149,7387],{"class":201},[142,165151,165152],{"class":152},"({",[142,165154,62708],{"class":257},[142,165156,51466],{"class":152},[142,165158,149897],{"class":257},[142,165160,165161],{"class":152},"})\n",[14,165163,165164],{},"最大最小：",[133,165166,165168],{"className":30407,"code":165167,"language":30409,"meta":31,"style":31},"max([1, 2, 3])\nmin([1, 2, 3])\n",[139,165169,165170,165188],{"__ignoreMap":31},[142,165171,165172,165174,165176,165178,165180,165182,165184,165186],{"class":144,"line":145},[142,165173,6044],{"class":201},[142,165175,165123],{"class":152},[142,165177,370],{"class":201},[142,165179,12464],{"class":152},[142,165181,230],{"class":201},[142,165183,12464],{"class":152},[142,165185,224],{"class":201},[142,165187,4685],{"class":152},[142,165189,165190,165193,165195,165197,165199,165201,165203,165205],{"class":144,"line":64},[142,165191,165192],{"class":201},"min",[142,165194,165123],{"class":152},[142,165196,370],{"class":201},[142,165198,12464],{"class":152},[142,165200,230],{"class":201},[142,165202,12464],{"class":152},[142,165204,224],{"class":201},[142,165206,4685],{"class":152},[14,165208,165209],{},"求和：",[133,165211,165213],{"className":30407,"code":165212,"language":30409,"meta":31,"style":31},"sum([1, 2, 3])\n",[139,165214,165215],{"__ignoreMap":31},[142,165216,165217,165220,165222,165224,165226,165228,165230,165232],{"class":144,"line":145},[142,165218,165219],{"class":201},"sum",[142,165221,165123],{"class":152},[142,165223,370],{"class":201},[142,165225,12464],{"class":152},[142,165227,230],{"class":201},[142,165229,12464],{"class":152},[142,165231,224],{"class":201},[142,165233,4685],{"class":152},[14,165235,163480],{},[133,165237,165239],{"className":30407,"code":165238,"language":30409,"meta":31,"style":31},"sorted([3, 1, 2])\n",[139,165240,165241],{"__ignoreMap":31},[142,165242,165243,165246,165248,165250,165252,165254,165256,165258],{"class":144,"line":145},[142,165244,165245],{"class":201},"sorted",[142,165247,165123],{"class":152},[142,165249,224],{"class":201},[142,165251,12464],{"class":152},[142,165253,370],{"class":201},[142,165255,12464],{"class":152},[142,165257,230],{"class":201},[142,165259,4685],{"class":152},[14,165261,165262],{},"类型转换：",[133,165264,165266],{"className":30407,"code":165265,"language":30409,"meta":31,"style":31},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[139,165267,165268,165278,165296],{"__ignoreMap":31},[142,165269,165270,165272,165274,165276],{"class":144,"line":145},[142,165271,154079],{"class":201},[142,165273,153],{"class":152},[142,165275,155889],{"class":257},[142,165277,159],{"class":152},[142,165279,165280,165282,165284,165286,165288,165290,165292,165294],{"class":144,"line":64},[142,165281,155274],{"class":201},[142,165283,165123],{"class":152},[142,165285,370],{"class":201},[142,165287,12464],{"class":152},[142,165289,230],{"class":201},[142,165291,12464],{"class":152},[142,165293,224],{"class":201},[142,165295,4685],{"class":152},[142,165297,165298,165300,165302,165304,165306,165308,165310,165312,165314,165316],{"class":144,"line":1208},[142,165299,155299],{"class":201},[142,165301,165123],{"class":152},[142,165303,370],{"class":201},[142,165305,12464],{"class":152},[142,165307,370],{"class":201},[142,165309,12464],{"class":152},[142,165311,230],{"class":201},[142,165313,12464],{"class":152},[142,165315,224],{"class":201},[142,165317,4685],{"class":152},[14,165319,165320],{},"成员判断：",[133,165322,165324],{"className":30407,"code":165323,"language":30409,"meta":31,"style":31},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[139,165325,165326,165343,165367],{"__ignoreMap":31},[142,165327,165328,165330,165332,165335,165338,165341],{"class":144,"line":145},[142,165329,30444],{"class":201},[142,165331,153],{"class":152},[142,165333,165334],{"class":257},"\"a\"",[142,165336,165337],{"class":148}," in",[142,165339,165340],{"class":257}," \"abc\"",[142,165342,159],{"class":152},[142,165344,165345,165347,165349,165351,165353,165355,165357,165359,165361,165363,165365],{"class":144,"line":64},[142,165346,30444],{"class":201},[142,165348,153],{"class":152},[142,165350,370],{"class":201},[142,165352,165337],{"class":148},[142,165354,52255],{"class":152},[142,165356,370],{"class":201},[142,165358,12464],{"class":152},[142,165360,230],{"class":201},[142,165362,12464],{"class":152},[142,165364,224],{"class":201},[142,165366,4685],{"class":152},[142,165368,165369,165371,165373,165375,165377,165379,165381,165383,165385],{"class":144,"line":1208},[142,165370,30444],{"class":201},[142,165372,153],{"class":152},[142,165374,62708],{"class":257},[142,165376,165337],{"class":148},[142,165378,4476],{"class":152},[142,165380,62708],{"class":257},[142,165382,51466],{"class":152},[142,165384,149897],{"class":257},[142,165386,165161],{"class":152},[84,165388,165390],{"id":165389},"_614-推导式","6.14 推导式",[14,165392,165393],{},"推导式用于快速生成容器。",[14,165395,165396],{},"列表推导式：",[133,165398,165400],{"className":30407,"code":165399,"language":30409,"meta":31,"style":31},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[139,165401,165402,165429],{"__ignoreMap":31},[142,165403,165404,165406,165408,165411,165413,165415,165417,165419,165421,165423,165425,165427],{"class":144,"line":145},[142,165405,164109],{"class":152},[142,165407,198],{"class":148},[142,165409,165410],{"class":152}," [i ",[142,165412,3053],{"class":148},[142,165414,9467],{"class":152},[142,165416,26072],{"class":148},[142,165418,32472],{"class":201},[142,165420,153],{"class":152},[142,165422,370],{"class":201},[142,165424,12464],{"class":152},[142,165426,497],{"class":201},[142,165428,97309],{"class":152},[142,165430,165431,165433],{"class":144,"line":64},[142,165432,30444],{"class":201},[142,165434,164325],{"class":152},[14,165436,165437],{},"带条件：",[133,165439,165441],{"className":30407,"code":165440,"language":30409,"meta":31,"style":31},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[139,165442,165443,165484],{"__ignoreMap":31},[142,165444,165445,165448,165450,165452,165454,165456,165458,165460,165462,165464,165466,165468,165470,165472,165474,165476,165478,165480,165482],{"class":144,"line":145},[142,165446,165447],{"class":152},"even_nums ",[142,165449,198],{"class":148},[142,165451,165410],{"class":152},[142,165453,3053],{"class":148},[142,165455,9467],{"class":152},[142,165457,26072],{"class":148},[142,165459,32472],{"class":201},[142,165461,153],{"class":152},[142,165463,370],{"class":201},[142,165465,12464],{"class":152},[142,165467,490],{"class":201},[142,165469,13743],{"class":152},[142,165471,1559],{"class":148},[142,165473,9467],{"class":152},[142,165475,481],{"class":148},[142,165477,14784],{"class":201},[142,165479,101568],{"class":148},[142,165481,4121],{"class":201},[142,165483,33275],{"class":152},[142,165485,165486,165488],{"class":144,"line":64},[142,165487,30444],{"class":201},[142,165489,165490],{"class":152},"(even_nums)\n",[14,165492,165493],{},"字典推导式：",[133,165495,165497],{"className":30407,"code":165496,"language":30409,"meta":31,"style":31},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[139,165498,165499,165533],{"__ignoreMap":31},[142,165500,165501,165504,165506,165509,165511,165513,165516,165518,165520,165522,165524,165526,165528,165530],{"class":144,"line":145},[142,165502,165503],{"class":152},"squares ",[142,165505,198],{"class":148},[142,165507,165508],{"class":152}," {i: i ",[142,165510,10690],{"class":148},[142,165512,14784],{"class":201},[142,165514,165515],{"class":148}," for",[142,165517,9467],{"class":152},[142,165519,26072],{"class":148},[142,165521,32472],{"class":201},[142,165523,153],{"class":152},[142,165525,370],{"class":201},[142,165527,12464],{"class":152},[142,165529,497],{"class":201},[142,165531,165532],{"class":152},")}\n",[142,165534,165535,165537],{"class":144,"line":64},[142,165536,30444],{"class":201},[142,165538,165539],{"class":152},"(squares)\n",[14,165541,165542],{},"集合推导式：",[133,165544,165546],{"className":30407,"code":165545,"language":30409,"meta":31,"style":31},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[139,165547,165548,165569],{"__ignoreMap":31},[142,165549,165550,165553,165555,165558,165560,165562,165564,165567],{"class":144,"line":145},[142,165551,165552],{"class":152},"chars ",[142,165554,198],{"class":148},[142,165556,165557],{"class":152}," {ch ",[142,165559,3053],{"class":148},[142,165561,159701],{"class":152},[142,165563,26072],{"class":148},[142,165565,165566],{"class":257}," \"hello\"",[142,165568,1593],{"class":152},[142,165570,165571,165573],{"class":144,"line":64},[142,165572,30444],{"class":201},[142,165574,165575],{"class":152},"(chars)\n",[14,165577,165578],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[84,165580,165582],{"id":165581},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[133,165584,165586],{"className":30407,"code":165585,"language":30409,"meta":31,"style":31},"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",[139,165587,165588,165596,165616,165636,165656,165676,165680,165684,165692,165706,165715,165719,165729,165741,165745,165765,165774,165778,165794,165799,165803,165817,165821,165843,165879],{"__ignoreMap":31},[142,165589,165590,165592,165594],{"class":144,"line":145},[142,165591,159725],{"class":152},[142,165593,198],{"class":148},[142,165595,55476],{"class":152},[142,165597,165598,165600,165602,165604,165606,165608,165610,165612,165614],{"class":144,"line":64},[142,165599,148394],{"class":152},[142,165601,62708],{"class":257},[142,165603,51466],{"class":152},[142,165605,149897],{"class":257},[142,165607,12464],{"class":152},[142,165609,151481],{"class":257},[142,165611,51466],{"class":152},[142,165613,1142],{"class":201},[142,165615,4958],{"class":152},[142,165617,165618,165620,165622,165624,165626,165628,165630,165632,165634],{"class":144,"line":1208},[142,165619,148394],{"class":152},[142,165621,62708],{"class":257},[142,165623,51466],{"class":152},[142,165625,150945],{"class":257},[142,165627,12464],{"class":152},[142,165629,151481],{"class":257},[142,165631,51466],{"class":152},[142,165633,964],{"class":201},[142,165635,4958],{"class":152},[142,165637,165638,165640,165642,165644,165646,165648,165650,165652,165654],{"class":144,"line":1223},[142,165639,148394],{"class":152},[142,165641,62708],{"class":257},[142,165643,51466],{"class":152},[142,165645,159740],{"class":257},[142,165647,12464],{"class":152},[142,165649,151481],{"class":257},[142,165651,51466],{"class":152},[142,165653,559],{"class":201},[142,165655,4958],{"class":152},[142,165657,165658,165660,165662,165664,165666,165668,165670,165672,165674],{"class":144,"line":1229},[142,165659,148394],{"class":152},[142,165661,62708],{"class":257},[142,165663,51466],{"class":152},[142,165665,163319],{"class":257},[142,165667,12464],{"class":152},[142,165669,151481],{"class":257},[142,165671,51466],{"class":152},[142,165673,1035],{"class":201},[142,165675,4958],{"class":152},[142,165677,165678],{"class":144,"line":1243},[142,165679,33275],{"class":152},[142,165681,165682],{"class":144,"line":1249},[142,165683,2428],{"emptyLinePlaceholder":69},[142,165685,165686,165688,165690],{"class":144,"line":1340},[142,165687,157269],{"class":152},[142,165689,198],{"class":148},[142,165691,47362],{"class":201},[142,165693,165694,165697,165699,165702,165704],{"class":144,"line":1346},[142,165695,165696],{"class":152},"max_student ",[142,165698,198],{"class":148},[142,165700,165701],{"class":152}," students[",[142,165703,344],{"class":201},[142,165705,33275],{"class":152},[142,165707,165708,165711,165713],{"class":144,"line":1358},[142,165709,165710],{"class":152},"passed ",[142,165712,198],{"class":148},[142,165714,51867],{"class":152},[142,165716,165717],{"class":144,"line":1640},[142,165718,2428],{"emptyLinePlaceholder":69},[142,165720,165721,165723,165725,165727],{"class":144,"line":1645},[142,165722,3053],{"class":148},[142,165724,152146],{"class":152},[142,165726,26072],{"class":148},[142,165728,152151],{"class":152},[142,165730,165731,165733,165735,165737,165739],{"class":144,"line":1651},[142,165732,159316],{"class":152},[142,165734,9506],{"class":148},[142,165736,152158],{"class":152},[142,165738,151481],{"class":257},[142,165740,33275],{"class":152},[142,165742,165743],{"class":144,"line":1656},[142,165744,2428],{"emptyLinePlaceholder":69},[142,165746,165747,165749,165751,165753,165755,165757,165760,165762],{"class":144,"line":1670},[142,165748,3129],{"class":148},[142,165750,152158],{"class":152},[142,165752,151481],{"class":257},[142,165754,4471],{"class":152},[142,165756,1113],{"class":148},[142,165758,165759],{"class":152}," max_student[",[142,165761,151481],{"class":257},[142,165763,165764],{"class":152},"]:\n",[142,165766,165767,165770,165772],{"class":144,"line":1675},[142,165768,165769],{"class":152},"        max_student ",[142,165771,198],{"class":148},[142,165773,152174],{"class":152},[142,165775,165776],{"class":144,"line":1681},[142,165777,2428],{"emptyLinePlaceholder":69},[142,165779,165780,165782,165784,165786,165788,165790,165792],{"class":144,"line":1702},[142,165781,3129],{"class":148},[142,165783,152158],{"class":152},[142,165785,151481],{"class":257},[142,165787,4471],{"class":152},[142,165789,1738],{"class":148},[142,165791,157846],{"class":201},[142,165793,3767],{"class":152},[142,165795,165796],{"class":144,"line":1707},[142,165797,165798],{"class":152},"        passed.append(student)\n",[142,165800,165801],{"class":144,"line":1721},[142,165802,2428],{"emptyLinePlaceholder":69},[142,165804,165805,165807,165809,165811,165813,165815],{"class":144,"line":1726},[142,165806,163783],{"class":152},[142,165808,198],{"class":148},[142,165810,163788],{"class":152},[142,165812,737],{"class":148},[142,165814,7360],{"class":201},[142,165816,165004],{"class":152},[142,165818,165819],{"class":144,"line":1755},[142,165820,2428],{"emptyLinePlaceholder":69},[142,165822,165823,165825,165827,165829,165831,165833,165835,165837,165839,165841],{"class":144,"line":1760},[142,165824,30444],{"class":201},[142,165826,153],{"class":152},[142,165828,205],{"class":148},[142,165830,163806],{"class":257},[142,165832,1049],{"class":201},[142,165834,163811],{"class":152},[142,165836,157168],{"class":148},[142,165838,1099],{"class":201},[142,165840,404],{"class":257},[142,165842,159],{"class":152},[142,165844,165845,165847,165849,165851,165854,165856,165859,165861,165863,165865,165867,165869,165871,165873,165875,165877],{"class":144,"line":1777},[142,165846,30444],{"class":201},[142,165848,153],{"class":152},[142,165850,205],{"class":148},[142,165852,165853],{"class":257},"\"最高分学生:",[142,165855,1049],{"class":201},[142,165857,165858],{"class":152},"max_student[",[142,165860,152891],{"class":257},[142,165862,1093],{"class":152},[142,165864,1099],{"class":201},[142,165866,4476],{"class":201},[142,165868,165858],{"class":152},[142,165870,152929],{"class":257},[142,165872,1093],{"class":152},[142,165874,1099],{"class":201},[142,165876,404],{"class":257},[142,165878,159],{"class":152},[142,165880,165881,165883,165885,165887,165890,165893,165896,165898,165900],{"class":144,"line":1782},[142,165882,30444],{"class":201},[142,165884,153],{"class":152},[142,165886,205],{"class":148},[142,165888,165889],{"class":257},"\"及格人数:",[142,165891,165892],{"class":201},"{len",[142,165894,165895],{"class":152},"(passed)",[142,165897,1099],{"class":201},[142,165899,404],{"class":257},[142,165901,159],{"class":152},[84,165903,165905],{"id":165904},"_616-易错点","6.16 易错点",[96,165907,165908,165911,165914,165917,165923,165932],{},[99,165909,165910],{},"列表可变，元组和字符串不可变。",[99,165912,165913],{},"切片结束位置不包含。",[99,165915,165916],{},"字典通过 key 取值，不是通过索引。",[99,165918,165919,165920,28414],{},"空集合要用 ",[139,165921,165922],{},"set()",[99,165924,104375,165925,165928,165929,28414],{},[139,165926,165927],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[139,165930,165931],{},"get()",[99,165933,165934],{},"嵌套容器要先看清楚每一层是什么类型。",[84,165936,165938],{"id":165937},"_617-本章练习","6.17 本章练习",[96,165940,165941,165944,165947,165950,165953],{},[99,165942,165943],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[99,165945,165946],{},"输入一句话，统计每个字符出现次数。",[99,165948,165949],{},"使用集合去除列表中的重复元素。",[99,165951,165952],{},"使用字典保存一个学生的信息，并实现修改成绩。",[99,165954,165955],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5155,165957,165958],{},"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":31,"searchDepth":64,"depth":64,"links":165960},[165961,165962,165963,165964,165965,165966,165967,165968,165969,165970,165971,165972,165973,165974,165975,165976,165977],{"id":162941,"depth":64,"text":162942},{"id":163058,"depth":64,"text":163059},{"id":163148,"depth":64,"text":163149},{"id":163272,"depth":64,"text":163273},{"id":163635,"depth":64,"text":163636},{"id":163822,"depth":64,"text":163823},{"id":163941,"depth":64,"text":163942},{"id":164083,"depth":64,"text":164084},{"id":164270,"depth":64,"text":164271},{"id":164514,"depth":64,"text":164515},{"id":164724,"depth":64,"text":164725},{"id":164809,"depth":64,"text":164810},{"id":165107,"depth":64,"text":165108},{"id":165389,"depth":64,"text":165390},{"id":165581,"depth":64,"text":165582},{"id":165904,"depth":64,"text":165905},{"id":165937,"depth":64,"text":165938},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162933,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165984,"title":165985,"body":165986,"description":66,"extension":67,"meta":168158,"navigation":69,"path":168159,"seo":168160,"stem":168161,"__hash__":168162},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165987,"toc":168133},[165988,165991,165995,165998,166078,166081,166102,166105,166109,166112,166174,166177,166194,166198,166201,166246,166248,166256,166260,166263,166345,166348,166351,166376,166379,166402,166406,166409,166411,166473,166476,166478,166529,166533,166537,166543,166648,166652,166658,166729,166733,166736,166804,166807,166887,166891,166897,166933,166936,166939,167049,167055,167059,167062,167134,167137,167141,167145,167150,167212,167216,167221,167289,167293,167298,167414,167418,167421,167501,167504,167508,167511,167615,167617,167632,167635,167639,167777,167785,167789,167791,167802,167804,168062,168066,168098,168102,168130],[10,165989,165985],{"id":165990},"_7-函数进阶",[84,165992,165994],{"id":165993},"_71-多返回值","7.1 多返回值",[14,165996,165997],{},"Python 函数可以返回多个值，本质上返回的是元组。",[133,165999,166001],{"className":30407,"code":166000,"language":30409,"meta":31,"style":31},"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",[139,166002,166003,166012,166020,166028,166037,166044,166048,166052,166061,166067],{"__ignoreMap":31},[142,166004,166005,166007,166010],{"class":144,"line":145},[142,166006,31976],{"class":148},[142,166008,166009],{"class":1991}," get_info",[142,166011,31982],{"class":152},[142,166013,166014,166016,166018],{"class":144,"line":64},[142,166015,152379],{"class":152},[142,166017,198],{"class":148},[142,166019,149362],{"class":257},[142,166021,166022,166024,166026],{"class":144,"line":1208},[142,166023,152395],{"class":152},[142,166025,198],{"class":148},[142,166027,146560],{"class":201},[142,166029,166030,166032,166034],{"class":144,"line":1223},[142,166031,152410],{"class":152},[142,166033,198],{"class":148},[142,166035,166036],{"class":201}," 95\n",[142,166038,166039,166041],{"class":144,"line":1229},[142,166040,4118],{"class":148},[142,166042,166043],{"class":152}," name, age, score\n",[142,166045,166046],{"class":144,"line":1243},[142,166047,2428],{"emptyLinePlaceholder":69},[142,166049,166050],{"class":144,"line":1249},[142,166051,2428],{"emptyLinePlaceholder":69},[142,166053,166054,166056,166058],{"class":144,"line":1340},[142,166055,161315],{"class":152},[142,166057,198],{"class":148},[142,166059,166060],{"class":152}," get_info()\n",[142,166062,166063,166065],{"class":144,"line":1346},[142,166064,30444],{"class":201},[142,166066,76614],{"class":152},[142,166068,166069,166071,166073,166075],{"class":144,"line":1358},[142,166070,30444],{"class":201},[142,166072,153],{"class":152},[142,166074,103116],{"class":201},[142,166076,166077],{"class":152},"(result))\n",[14,166079,166080],{},"可以直接解包：",[133,166082,166084],{"className":30407,"code":166083,"language":30409,"meta":31,"style":31},"name, age, score = get_info()\nprint(name, age, score)\n",[139,166085,166086,166095],{"__ignoreMap":31},[142,166087,166088,166091,166093],{"class":144,"line":145},[142,166089,166090],{"class":152},"name, age, score ",[142,166092,198],{"class":148},[142,166094,166060],{"class":152},[142,166096,166097,166099],{"class":144,"line":64},[142,166098,30444],{"class":201},[142,166100,166101],{"class":152},"(name, age, score)\n",[14,166103,166104],{},"返回多个值适合函数需要同时给出多个结果时使用。",[84,166106,166108],{"id":166107},"_72-位置参数","7.2 位置参数",[14,166110,166111],{},"位置参数按顺序传递。",[133,166113,166115],{"className":30407,"code":166114,"language":30409,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[139,166116,166117,166125,166153,166157,166161],{"__ignoreMap":31},[142,166118,166119,166121,166123],{"class":144,"line":145},[142,166120,31976],{"class":148},[142,166122,149381],{"class":1991},[142,166124,149384],{"class":152},[142,166126,166127,166129,166131,166133,166135,166137,166139,166141,166143,166145,166147,166149,166151],{"class":144,"line":64},[142,166128,31328],{"class":201},[142,166130,153],{"class":152},[142,166132,205],{"class":148},[142,166134,149395],{"class":257},[142,166136,1049],{"class":201},[142,166138,79839],{"class":152},[142,166140,1099],{"class":201},[142,166142,149404],{"class":257},[142,166144,1049],{"class":201},[142,166146,70250],{"class":152},[142,166148,1099],{"class":201},[142,166150,149413],{"class":257},[142,166152,159],{"class":152},[142,166154,166155],{"class":144,"line":1208},[142,166156,2428],{"emptyLinePlaceholder":69},[142,166158,166159],{"class":144,"line":1223},[142,166160,2428],{"emptyLinePlaceholder":69},[142,166162,166163,166166,166168,166170,166172],{"class":144,"line":1229},[142,166164,166165],{"class":152},"introduce(",[142,166167,149897],{"class":257},[142,166169,12464],{"class":152},[142,166171,803],{"class":201},[142,166173,159],{"class":152},[14,166175,166176],{},"顺序错了就会得到错误含义：",[133,166178,166180],{"className":30407,"code":166179,"language":30409,"meta":31,"style":31},"introduce(18, \"小明\")\n",[139,166181,166182],{"__ignoreMap":31},[142,166183,166184,166186,166188,166190,166192],{"class":144,"line":145},[142,166185,166165],{"class":152},[142,166187,803],{"class":201},[142,166189,12464],{"class":152},[142,166191,149897],{"class":257},[142,166193,159],{"class":152},[84,166195,166197],{"id":166196},"_73-关键字参数","7.3 关键字参数",[14,166199,166200],{},"关键字参数按参数名传递。",[133,166202,166204],{"className":30407,"code":166203,"language":30409,"meta":31,"style":31},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[139,166205,166206,166226],{"__ignoreMap":31},[142,166207,166208,166210,166212,166214,166216,166218,166220,166222,166224],{"class":144,"line":145},[142,166209,166165],{"class":152},[142,166211,79839],{"class":5245},[142,166213,198],{"class":148},[142,166215,149897],{"class":257},[142,166217,12464],{"class":152},[142,166219,70250],{"class":5245},[142,166221,198],{"class":148},[142,166223,803],{"class":201},[142,166225,159],{"class":152},[142,166227,166228,166230,166232,166234,166236,166238,166240,166242,166244],{"class":144,"line":64},[142,166229,166165],{"class":152},[142,166231,70250],{"class":5245},[142,166233,198],{"class":148},[142,166235,803],{"class":201},[142,166237,12464],{"class":152},[142,166239,79839],{"class":5245},[142,166241,198],{"class":148},[142,166243,149897],{"class":257},[142,166245,159],{"class":152},[14,166247,117943],{},[96,166249,166250,166253],{},[99,166251,166252],{},"顺序不容易错。",[99,166254,166255],{},"调用时可读性更强。",[84,166257,166259],{"id":166258},"_74-默认参数","7.4 默认参数",[14,166261,166262],{},"默认参数给参数设置默认值。",[133,166264,166266],{"className":30407,"code":166265,"language":30409,"meta":31,"style":31},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[139,166267,166268,166284,166314,166318,166322,166332],{"__ignoreMap":31},[142,166269,166270,166272,166274,166277,166279,166282],{"class":144,"line":145},[142,166271,31976],{"class":148},[142,166273,122102],{"class":1991},[142,166275,166276],{"class":152},"(host, port",[142,166278,198],{"class":148},[142,166280,166281],{"class":201},"3306",[142,166283,30815],{"class":152},[142,166285,166286,166288,166290,166292,166295,166297,166299,166301,166303,166305,166308,166310,166312],{"class":144,"line":64},[142,166287,31328],{"class":201},[142,166289,153],{"class":152},[142,166291,205],{"class":148},[142,166293,166294],{"class":257},"\"连接",[142,166296,1049],{"class":201},[142,166298,27424],{"class":152},[142,166300,1099],{"class":201},[142,166302,1012],{"class":257},[142,166304,1049],{"class":201},[142,166306,166307],{"class":152},"port",[142,166309,1099],{"class":201},[142,166311,404],{"class":257},[142,166313,159],{"class":152},[142,166315,166316],{"class":144,"line":1208},[142,166317,2428],{"emptyLinePlaceholder":69},[142,166319,166320],{"class":144,"line":1223},[142,166321,2428],{"emptyLinePlaceholder":69},[142,166323,166324,166327,166330],{"class":144,"line":1229},[142,166325,166326],{"class":152},"connect(",[142,166328,166329],{"class":257},"\"localhost\"",[142,166331,159],{"class":152},[142,166333,166334,166336,166338,166340,166343],{"class":144,"line":1243},[142,166335,166326],{"class":152},[142,166337,166329],{"class":257},[142,166339,12464],{"class":152},[142,166341,166342],{"class":201},"6379",[142,166344,159],{"class":152},[14,166346,166347],{},"注意：默认参数必须放在非默认参数后面。",[14,166349,166350],{},"错误：",[133,166352,166354],{"className":30407,"code":166353,"language":30409,"meta":31,"style":31},"def connect(port=3306, host):\n    pass\n",[139,166355,166356,166372],{"__ignoreMap":31},[142,166357,166358,166360,166362,166365,166367,166369],{"class":144,"line":145},[142,166359,31976],{"class":148},[142,166361,122102],{"class":1991},[142,166363,166364],{"class":152},"(port",[142,166366,198],{"class":148},[142,166368,166281],{"class":201},[142,166370,166371],{"class":152},", host):\n",[142,166373,166374],{"class":144,"line":64},[142,166375,149546],{"class":148},[14,166377,166378],{},"正确：",[133,166380,166382],{"className":30407,"code":166381,"language":30409,"meta":31,"style":31},"def connect(host, port=3306):\n    pass\n",[139,166383,166384,166398],{"__ignoreMap":31},[142,166385,166386,166388,166390,166392,166394,166396],{"class":144,"line":145},[142,166387,31976],{"class":148},[142,166389,122102],{"class":1991},[142,166391,166276],{"class":152},[142,166393,198],{"class":148},[142,166395,166281],{"class":201},[142,166397,30815],{"class":152},[142,166399,166400],{"class":144,"line":64},[142,166401,149546],{"class":148},[84,166403,166405],{"id":166404},"_75-默认参数的坑","7.5 默认参数的坑",[14,166407,166408],{},"不要使用可变对象作为默认参数。",[14,166410,157632],{},[133,166412,166414],{"className":30407,"code":166413,"language":30409,"meta":31,"style":31},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[139,166415,166416,166431,166436,166443,166447,166451,166462],{"__ignoreMap":31},[142,166417,166418,166420,166423,166426,166428],{"class":144,"line":145},[142,166419,31976],{"class":148},[142,166421,166422],{"class":1991}," add_item",[142,166424,166425],{"class":152},"(item, items",[142,166427,198],{"class":148},[142,166429,166430],{"class":152},"[]):\n",[142,166432,166433],{"class":144,"line":64},[142,166434,166435],{"class":152},"    items.append(item)\n",[142,166437,166438,166440],{"class":144,"line":1208},[142,166439,4118],{"class":148},[142,166441,166442],{"class":152}," items\n",[142,166444,166445],{"class":144,"line":1223},[142,166446,2428],{"emptyLinePlaceholder":69},[142,166448,166449],{"class":144,"line":1229},[142,166450,2428],{"emptyLinePlaceholder":69},[142,166452,166453,166455,166458,166460],{"class":144,"line":1243},[142,166454,30444],{"class":201},[142,166456,166457],{"class":152},"(add_item(",[142,166459,165334],{"class":257},[142,166461,30526],{"class":152},[142,166463,166464,166466,166468,166471],{"class":144,"line":1249},[142,166465,30444],{"class":201},[142,166467,166457],{"class":152},[142,166469,166470],{"class":257},"\"b\"",[142,166472,30526],{"class":152},[14,166474,166475],{},"第二次调用会复用第一次的列表。",[14,166477,155897],{},[133,166479,166481],{"className":30407,"code":166480,"language":30409,"meta":31,"style":31},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[139,166482,166483,166497,166510,166519,166523],{"__ignoreMap":31},[142,166484,166485,166487,166489,166491,166493,166495],{"class":144,"line":145},[142,166486,31976],{"class":148},[142,166488,166422],{"class":1991},[142,166490,166425],{"class":152},[142,166492,198],{"class":148},[142,166494,95695],{"class":201},[142,166496,30815],{"class":152},[142,166498,166499,166501,166504,166506,166508],{"class":144,"line":64},[142,166500,3129],{"class":148},[142,166502,166503],{"class":152}," items ",[142,166505,38956],{"class":148},[142,166507,38962],{"class":201},[142,166509,3767],{"class":152},[142,166511,166512,166515,166517],{"class":144,"line":1208},[142,166513,166514],{"class":152},"        items ",[142,166516,198],{"class":148},[142,166518,51867],{"class":152},[142,166520,166521],{"class":144,"line":1223},[142,166522,166435],{"class":152},[142,166524,166525,166527],{"class":144,"line":1229},[142,166526,4118],{"class":148},[142,166528,166442],{"class":152},[84,166530,166532],{"id":166531},"_76-不定长参数","7.6 不定长参数",[113,166534,166536],{"id":166535},"_761-args","7.6.1 *args",[14,166538,166539,166542],{},[139,166540,166541],{},"*args"," 接收任意数量的位置参数，得到元组。",[133,166544,166546],{"className":30407,"code":166545,"language":30409,"meta":31,"style":31},"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",[139,166547,166548,166561,166569,166580,166589,166595,166599,166603,166622],{"__ignoreMap":31},[142,166549,166550,166552,166554,166556,166558],{"class":144,"line":145},[142,166551,31976],{"class":148},[142,166553,5238],{"class":1991},[142,166555,153],{"class":152},[142,166557,608],{"class":148},[142,166559,166560],{"class":152},"args):\n",[142,166562,166563,166565,166567],{"class":144,"line":64},[142,166564,159316],{"class":152},[142,166566,198],{"class":148},[142,166568,47362],{"class":201},[142,166570,166571,166573,166575,166577],{"class":144,"line":1208},[142,166572,3229],{"class":148},[142,166574,156189],{"class":152},[142,166576,26072],{"class":148},[142,166578,166579],{"class":152}," args:\n",[142,166581,166582,166584,166586],{"class":144,"line":1223},[142,166583,159991],{"class":152},[142,166585,9506],{"class":148},[142,166587,166588],{"class":152}," num\n",[142,166590,166591,166593],{"class":144,"line":1229},[142,166592,4118],{"class":148},[142,166594,162296],{"class":152},[142,166596,166597],{"class":144,"line":1243},[142,166598,2428],{"emptyLinePlaceholder":69},[142,166600,166601],{"class":144,"line":1249},[142,166602,2428],{"emptyLinePlaceholder":69},[142,166604,166605,166607,166610,166612,166614,166616,166618,166620],{"class":144,"line":1340},[142,166606,30444],{"class":201},[142,166608,166609],{"class":152},"(add(",[142,166611,370],{"class":201},[142,166613,12464],{"class":152},[142,166615,230],{"class":201},[142,166617,12464],{"class":152},[142,166619,224],{"class":201},[142,166621,30526],{"class":152},[142,166623,166624,166626,166628,166630,166632,166634,166636,166638,166640,166642,166644,166646],{"class":144,"line":1346},[142,166625,30444],{"class":201},[142,166627,166609],{"class":152},[142,166629,370],{"class":201},[142,166631,12464],{"class":152},[142,166633,230],{"class":201},[142,166635,12464],{"class":152},[142,166637,224],{"class":201},[142,166639,12464],{"class":152},[142,166641,446],{"class":201},[142,166643,12464],{"class":152},[142,166645,472],{"class":201},[142,166647,30526],{"class":152},[113,166649,166651],{"id":166650},"_762-kwargs","7.6.2 **kwargs",[14,166653,166654,166657],{},[139,166655,166656],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[133,166659,166661],{"className":30407,"code":166660,"language":30409,"meta":31,"style":31},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[139,166662,166663,166676,166687,166693,166697,166701],{"__ignoreMap":31},[142,166664,166665,166667,166669,166671,166673],{"class":144,"line":145},[142,166666,31976],{"class":148},[142,166668,161954],{"class":1991},[142,166670,153],{"class":152},[142,166672,10690],{"class":148},[142,166674,166675],{"class":152},"kwargs):\n",[142,166677,166678,166680,166682,166684],{"class":144,"line":64},[142,166679,3229],{"class":148},[142,166681,164794],{"class":152},[142,166683,26072],{"class":148},[142,166685,166686],{"class":152}," kwargs.items():\n",[142,166688,166689,166691],{"class":144,"line":1208},[142,166690,32480],{"class":201},[142,166692,164806],{"class":152},[142,166694,166695],{"class":144,"line":1223},[142,166696,2428],{"emptyLinePlaceholder":69},[142,166698,166699],{"class":144,"line":1229},[142,166700,2428],{"emptyLinePlaceholder":69},[142,166702,166703,166705,166707,166709,166711,166713,166715,166717,166719,166721,166723,166725,166727],{"class":144,"line":1243},[142,166704,162019],{"class":152},[142,166706,79839],{"class":5245},[142,166708,198],{"class":148},[142,166710,149897],{"class":257},[142,166712,12464],{"class":152},[142,166714,70250],{"class":5245},[142,166716,198],{"class":148},[142,166718,803],{"class":201},[142,166720,12464],{"class":152},[142,166722,70301],{"class":5245},[142,166724,198],{"class":148},[142,166726,69298],{"class":257},[142,166728,159],{"class":152},[84,166730,166732],{"id":166731},"_77-参数解包","7.7 参数解包",[14,166734,166735],{},"列表或元组解包为位置参数：",[133,166737,166739],{"className":30407,"code":166738,"language":30409,"meta":31,"style":31},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[139,166740,166741,166750,166765,166769,166773,166793],{"__ignoreMap":31},[142,166742,166743,166745,166747],{"class":144,"line":145},[142,166744,31976],{"class":148},[142,166746,5238],{"class":1991},[142,166748,166749],{"class":152},"(a, b, c):\n",[142,166751,166752,166754,166756,166758,166760,166762],{"class":144,"line":64},[142,166753,4118],{"class":148},[142,166755,10898],{"class":152},[142,166757,634],{"class":148},[142,166759,10911],{"class":152},[142,166761,634],{"class":148},[142,166763,166764],{"class":152}," c\n",[142,166766,166767],{"class":144,"line":1208},[142,166768,2428],{"emptyLinePlaceholder":69},[142,166770,166771],{"class":144,"line":1223},[142,166772,2428],{"emptyLinePlaceholder":69},[142,166774,166775,166777,166779,166781,166783,166785,166787,166789,166791],{"class":144,"line":1229},[142,166776,164109],{"class":152},[142,166778,198],{"class":148},[142,166780,52255],{"class":152},[142,166782,370],{"class":201},[142,166784,12464],{"class":152},[142,166786,230],{"class":201},[142,166788,12464],{"class":152},[142,166790,224],{"class":201},[142,166792,33275],{"class":152},[142,166794,166795,166797,166799,166801],{"class":144,"line":1243},[142,166796,30444],{"class":201},[142,166798,166609],{"class":152},[142,166800,608],{"class":148},[142,166802,166803],{"class":152},"nums))\n",[14,166805,166806],{},"字典解包为关键字参数：",[133,166808,166810],{"className":30407,"code":166809,"language":30409,"meta":31,"style":31},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[139,166811,166812,166820,166846,166850,166854,166878],{"__ignoreMap":31},[142,166813,166814,166816,166818],{"class":144,"line":145},[142,166815,31976],{"class":148},[142,166817,149381],{"class":1991},[142,166819,149384],{"class":152},[142,166821,166822,166824,166826,166828,166830,166832,166834,166836,166838,166840,166842,166844],{"class":144,"line":64},[142,166823,31328],{"class":201},[142,166825,153],{"class":152},[142,166827,205],{"class":148},[142,166829,404],{"class":257},[142,166831,1049],{"class":201},[142,166833,79839],{"class":152},[142,166835,1099],{"class":201},[142,166837,4476],{"class":201},[142,166839,70250],{"class":152},[142,166841,1099],{"class":201},[142,166843,404],{"class":257},[142,166845,159],{"class":152},[142,166847,166848],{"class":144,"line":1208},[142,166849,2428],{"emptyLinePlaceholder":69},[142,166851,166852],{"class":144,"line":1223},[142,166853,2428],{"emptyLinePlaceholder":69},[142,166855,166856,166858,166860,166862,166864,166866,166868,166870,166872,166874,166876],{"class":144,"line":1229},[142,166857,116323],{"class":152},[142,166859,198],{"class":148},[142,166861,4476],{"class":152},[142,166863,62708],{"class":257},[142,166865,51466],{"class":152},[142,166867,149897],{"class":257},[142,166869,12464],{"class":152},[142,166871,69153],{"class":257},[142,166873,51466],{"class":152},[142,166875,803],{"class":201},[142,166877,1593],{"class":152},[142,166879,166880,166882,166884],{"class":144,"line":1243},[142,166881,166165],{"class":152},[142,166883,10690],{"class":148},[142,166885,166886],{"class":152},"info)\n",[84,166888,166890],{"id":166889},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166892,166893,166896],{},[139,166894,166895],{},"lambda"," 用于定义简单匿名函数。",[133,166898,166900],{"className":30407,"code":166899,"language":30409,"meta":31,"style":31},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[139,166901,166902,166919],{"__ignoreMap":31},[142,166903,166904,166907,166909,166912,166915,166917],{"class":144,"line":145},[142,166905,166906],{"class":152},"add ",[142,166908,198],{"class":148},[142,166910,166911],{"class":148}," lambda",[142,166913,166914],{"class":152}," a, b: a ",[142,166916,634],{"class":148},[142,166918,151113],{"class":152},[142,166920,166921,166923,166925,166927,166929,166931],{"class":144,"line":64},[142,166922,30444],{"class":201},[142,166924,166609],{"class":152},[142,166926,370],{"class":201},[142,166928,12464],{"class":152},[142,166930,230],{"class":201},[142,166932,30526],{"class":152},[14,166934,166935],{},"常和排序、过滤等函数一起使用。",[14,166937,166938],{},"按分数排序：",[133,166940,166942],{"className":30407,"code":166941,"language":30409,"meta":31,"style":31},"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",[139,166943,166944,166952,166972,166992,167012,167016,167020,167043],{"__ignoreMap":31},[142,166945,166946,166948,166950],{"class":144,"line":145},[142,166947,159725],{"class":152},[142,166949,198],{"class":148},[142,166951,55476],{"class":152},[142,166953,166954,166956,166958,166960,166962,166964,166966,166968,166970],{"class":144,"line":64},[142,166955,148394],{"class":152},[142,166957,62708],{"class":257},[142,166959,51466],{"class":152},[142,166961,149897],{"class":257},[142,166963,12464],{"class":152},[142,166965,151481],{"class":257},[142,166967,51466],{"class":152},[142,166969,1142],{"class":201},[142,166971,4958],{"class":152},[142,166973,166974,166976,166978,166980,166982,166984,166986,166988,166990],{"class":144,"line":1208},[142,166975,148394],{"class":152},[142,166977,62708],{"class":257},[142,166979,51466],{"class":152},[142,166981,150945],{"class":257},[142,166983,12464],{"class":152},[142,166985,151481],{"class":257},[142,166987,51466],{"class":152},[142,166989,964],{"class":201},[142,166991,4958],{"class":152},[142,166993,166994,166996,166998,167000,167002,167004,167006,167008,167010],{"class":144,"line":1223},[142,166995,148394],{"class":152},[142,166997,62708],{"class":257},[142,166999,51466],{"class":152},[142,167001,159740],{"class":257},[142,167003,12464],{"class":152},[142,167005,151481],{"class":257},[142,167007,51466],{"class":152},[142,167009,559],{"class":201},[142,167011,4958],{"class":152},[142,167013,167014],{"class":144,"line":1229},[142,167015,33275],{"class":152},[142,167017,167018],{"class":144,"line":1243},[142,167019,2428],{"emptyLinePlaceholder":69},[142,167021,167022,167025,167027,167029,167031,167033,167035,167037,167039,167041],{"class":144,"line":1249},[142,167023,167024],{"class":152},"students.sort(",[142,167026,153955],{"class":5245},[142,167028,153958],{"class":148},[142,167030,153961],{"class":152},[142,167032,151481],{"class":257},[142,167034,112211],{"class":152},[142,167036,163537],{"class":5245},[142,167038,198],{"class":148},[142,167040,31505],{"class":201},[142,167042,159],{"class":152},[142,167044,167045,167047],{"class":144,"line":1340},[142,167046,30444],{"class":201},[142,167048,165004],{"class":152},[14,167050,167051,167052,167054],{},"如果逻辑复杂，不要硬写 ",[139,167053,166895],{},"，定义普通函数更清晰。",[84,167056,167058],{"id":167057},"_79-函数作为参数","7.9 函数作为参数",[14,167060,167061],{},"函数可以作为参数传给另一个函数。",[133,167063,167065],{"className":30407,"code":167064,"language":30409,"meta":31,"style":31},"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",[139,167066,167067,167075,167085,167089,167093,167103,167110,167114,167118],{"__ignoreMap":31},[142,167068,167069,167071,167073],{"class":144,"line":145},[142,167070,31976],{"class":148},[142,167072,5238],{"class":1991},[142,167074,151102],{"class":152},[142,167076,167077,167079,167081,167083],{"class":144,"line":64},[142,167078,4118],{"class":148},[142,167080,10898],{"class":152},[142,167082,634],{"class":148},[142,167084,151113],{"class":152},[142,167086,167087],{"class":144,"line":1208},[142,167088,2428],{"emptyLinePlaceholder":69},[142,167090,167091],{"class":144,"line":1223},[142,167092,2428],{"emptyLinePlaceholder":69},[142,167094,167095,167097,167100],{"class":144,"line":1229},[142,167096,31976],{"class":148},[142,167098,167099],{"class":1991}," calculate",[142,167101,167102],{"class":152},"(a, b, func):\n",[142,167104,167105,167107],{"class":144,"line":1243},[142,167106,4118],{"class":148},[142,167108,167109],{"class":152}," func(a, b)\n",[142,167111,167112],{"class":144,"line":1249},[142,167113,2428],{"emptyLinePlaceholder":69},[142,167115,167116],{"class":144,"line":1340},[142,167117,2428],{"emptyLinePlaceholder":69},[142,167119,167120,167122,167125,167127,167129,167131],{"class":144,"line":1346},[142,167121,30444],{"class":201},[142,167123,167124],{"class":152},"(calculate(",[142,167126,599],{"class":201},[142,167128,12464],{"class":152},[142,167130,853],{"class":201},[142,167132,167133],{"class":152},", add))\n",[14,167135,167136],{},"这种思想在排序、回调、框架中经常出现。",[84,167138,167140],{"id":167139},"_710-mapfiltersorted","7.10 map、filter、sorted",[113,167142,167144],{"id":167143},"_7101-map","7.10.1 map",[14,167146,167147,167149],{},[139,167148,74073],{}," 对每个元素执行函数。",[133,167151,167153],{"className":30407,"code":167152,"language":30409,"meta":31,"style":31},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[139,167154,167155,167179,167202],{"__ignoreMap":31},[142,167156,167157,167159,167161,167163,167165,167167,167169,167171,167173,167175,167177],{"class":144,"line":145},[142,167158,164109],{"class":152},[142,167160,198],{"class":148},[142,167162,52255],{"class":152},[142,167164,370],{"class":201},[142,167166,12464],{"class":152},[142,167168,230],{"class":201},[142,167170,12464],{"class":152},[142,167172,224],{"class":201},[142,167174,12464],{"class":152},[142,167176,446],{"class":201},[142,167178,33275],{"class":152},[142,167180,167181,167183,167185,167188,167190,167192,167195,167197,167199],{"class":144,"line":64},[142,167182,161315],{"class":152},[142,167184,198],{"class":148},[142,167186,167187],{"class":201}," map",[142,167189,153],{"class":152},[142,167191,166895],{"class":148},[142,167193,167194],{"class":152}," x: x ",[142,167196,608],{"class":148},[142,167198,14784],{"class":201},[142,167200,167201],{"class":152},", nums)\n",[142,167203,167204,167206,167208,167210],{"class":144,"line":1208},[142,167205,30444],{"class":201},[142,167207,153],{"class":152},[142,167209,154079],{"class":201},[142,167211,166077],{"class":152},[113,167213,167215],{"id":167214},"_7102-filter","7.10.2 filter",[14,167217,167218,167220],{},[139,167219,80080],{}," 保留满足条件的元素。",[133,167222,167224],{"className":30407,"code":167223,"language":30409,"meta":31,"style":31},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[139,167225,167226,167254,167279],{"__ignoreMap":31},[142,167227,167228,167230,167232,167234,167236,167238,167240,167242,167244,167246,167248,167250,167252],{"class":144,"line":145},[142,167229,164109],{"class":152},[142,167231,198],{"class":148},[142,167233,52255],{"class":152},[142,167235,370],{"class":201},[142,167237,12464],{"class":152},[142,167239,230],{"class":201},[142,167241,12464],{"class":152},[142,167243,224],{"class":201},[142,167245,12464],{"class":152},[142,167247,446],{"class":201},[142,167249,12464],{"class":152},[142,167251,472],{"class":201},[142,167253,33275],{"class":152},[142,167255,167256,167258,167260,167263,167265,167267,167269,167271,167273,167275,167277],{"class":144,"line":64},[142,167257,161315],{"class":152},[142,167259,198],{"class":148},[142,167261,167262],{"class":201}," filter",[142,167264,153],{"class":152},[142,167266,166895],{"class":148},[142,167268,167194],{"class":152},[142,167270,481],{"class":148},[142,167272,14784],{"class":201},[142,167274,101568],{"class":148},[142,167276,4121],{"class":201},[142,167278,167201],{"class":152},[142,167280,167281,167283,167285,167287],{"class":144,"line":1208},[142,167282,30444],{"class":201},[142,167284,153],{"class":152},[142,167286,154079],{"class":201},[142,167288,166077],{"class":152},[113,167290,167292],{"id":167291},"_7103-sorted","7.10.3 sorted",[14,167294,167295,167297],{},[139,167296,165245],{}," 返回排序后的新列表。",[133,167299,167301],{"className":30407,"code":167300,"language":30409,"meta":31,"style":31},"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",[139,167302,167303,167311,167331,167351,167371,167375,167379,167408],{"__ignoreMap":31},[142,167304,167305,167307,167309],{"class":144,"line":145},[142,167306,159725],{"class":152},[142,167308,198],{"class":148},[142,167310,55476],{"class":152},[142,167312,167313,167315,167317,167319,167321,167323,167325,167327,167329],{"class":144,"line":64},[142,167314,148394],{"class":152},[142,167316,62708],{"class":257},[142,167318,51466],{"class":152},[142,167320,149897],{"class":257},[142,167322,12464],{"class":152},[142,167324,151481],{"class":257},[142,167326,51466],{"class":152},[142,167328,1142],{"class":201},[142,167330,4958],{"class":152},[142,167332,167333,167335,167337,167339,167341,167343,167345,167347,167349],{"class":144,"line":1208},[142,167334,148394],{"class":152},[142,167336,62708],{"class":257},[142,167338,51466],{"class":152},[142,167340,150945],{"class":257},[142,167342,12464],{"class":152},[142,167344,151481],{"class":257},[142,167346,51466],{"class":152},[142,167348,964],{"class":201},[142,167350,4958],{"class":152},[142,167352,167353,167355,167357,167359,167361,167363,167365,167367,167369],{"class":144,"line":1223},[142,167354,148394],{"class":152},[142,167356,62708],{"class":257},[142,167358,51466],{"class":152},[142,167360,159740],{"class":257},[142,167362,12464],{"class":152},[142,167364,151481],{"class":257},[142,167366,51466],{"class":152},[142,167368,559],{"class":201},[142,167370,4958],{"class":152},[142,167372,167373],{"class":144,"line":1229},[142,167374,33275],{"class":152},[142,167376,167377],{"class":144,"line":1243},[142,167378,2428],{"emptyLinePlaceholder":69},[142,167380,167381,167383,167385,167387,167390,167392,167394,167396,167398,167400,167402,167404,167406],{"class":144,"line":1249},[142,167382,161315],{"class":152},[142,167384,198],{"class":148},[142,167386,163613],{"class":201},[142,167388,167389],{"class":152},"(students, ",[142,167391,153955],{"class":5245},[142,167393,153958],{"class":148},[142,167395,153961],{"class":152},[142,167397,151481],{"class":257},[142,167399,112211],{"class":152},[142,167401,163537],{"class":5245},[142,167403,198],{"class":148},[142,167405,31505],{"class":201},[142,167407,159],{"class":152},[142,167409,167410,167412],{"class":144,"line":1340},[142,167411,30444],{"class":201},[142,167413,76614],{"class":152},[84,167415,167417],{"id":167416},"_711-闭包入门","7.11 闭包入门",[14,167419,167420],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[133,167422,167424],{"className":30407,"code":167423,"language":30409,"meta":31,"style":31},"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",[139,167425,167426,167436,167446,167457,167461,167468,167472,167476,167490],{"__ignoreMap":31},[142,167427,167428,167430,167433],{"class":144,"line":145},[142,167429,31976],{"class":148},[142,167431,167432],{"class":1991}," outer",[142,167434,167435],{"class":152},"(base):\n",[142,167437,167438,167440,167443],{"class":144,"line":64},[142,167439,30830],{"class":148},[142,167441,167442],{"class":1991}," inner",[142,167444,167445],{"class":152},"(num):\n",[142,167447,167448,167450,167453,167455],{"class":144,"line":1208},[142,167449,14781],{"class":148},[142,167451,167452],{"class":152}," base ",[142,167454,634],{"class":148},[142,167456,166588],{"class":152},[142,167458,167459],{"class":144,"line":1223},[142,167460,2428],{"emptyLinePlaceholder":69},[142,167462,167463,167465],{"class":144,"line":1229},[142,167464,4118],{"class":148},[142,167466,167467],{"class":152}," inner\n",[142,167469,167470],{"class":144,"line":1243},[142,167471,2428],{"emptyLinePlaceholder":69},[142,167473,167474],{"class":144,"line":1249},[142,167475,2428],{"emptyLinePlaceholder":69},[142,167477,167478,167481,167483,167486,167488],{"class":144,"line":1340},[142,167479,167480],{"class":152},"add_10 ",[142,167482,198],{"class":148},[142,167484,167485],{"class":152}," outer(",[142,167487,599],{"class":201},[142,167489,159],{"class":152},[142,167491,167492,167494,167497,167499],{"class":144,"line":1346},[142,167493,30444],{"class":201},[142,167495,167496],{"class":152},"(add_10(",[142,167498,472],{"class":201},[142,167500,30526],{"class":152},[14,167502,167503],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[84,167505,167507],{"id":167506},"_712-装饰器入门","7.12 装饰器入门",[14,167509,167510],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[133,167512,167514],{"className":30407,"code":167513,"language":30409,"meta":31,"style":31},"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",[139,167515,167516,167525,167534,167545,167550,167561,167565,167572,167576,167580,167585,167593,167603,167607,167611],{"__ignoreMap":31},[142,167517,167518,167520,167522],{"class":144,"line":145},[142,167519,31976],{"class":148},[142,167521,87220],{"class":1991},[142,167523,167524],{"class":152},"(func):\n",[142,167526,167527,167529,167532],{"class":144,"line":64},[142,167528,30830],{"class":148},[142,167530,167531],{"class":1991}," wrapper",[142,167533,31982],{"class":152},[142,167535,167536,167538,167540,167543],{"class":144,"line":1208},[142,167537,32480],{"class":201},[142,167539,153],{"class":152},[142,167541,167542],{"class":257},"\"函数开始执行\"",[142,167544,159],{"class":152},[142,167546,167547],{"class":144,"line":1223},[142,167548,167549],{"class":152},"        func()\n",[142,167551,167552,167554,167556,167559],{"class":144,"line":1229},[142,167553,32480],{"class":201},[142,167555,153],{"class":152},[142,167557,167558],{"class":257},"\"函数执行结束\"",[142,167560,159],{"class":152},[142,167562,167563],{"class":144,"line":1243},[142,167564,2428],{"emptyLinePlaceholder":69},[142,167566,167567,167569],{"class":144,"line":1249},[142,167568,4118],{"class":148},[142,167570,167571],{"class":152}," wrapper\n",[142,167573,167574],{"class":144,"line":1340},[142,167575,2428],{"emptyLinePlaceholder":69},[142,167577,167578],{"class":144,"line":1346},[142,167579,2428],{"emptyLinePlaceholder":69},[142,167581,167582],{"class":144,"line":1358},[142,167583,167584],{"class":1991},"@log\n",[142,167586,167587,167589,167591],{"class":144,"line":1640},[142,167588,31976],{"class":148},[142,167590,161005],{"class":1991},[142,167592,31982],{"class":152},[142,167594,167595,167597,167599,167601],{"class":144,"line":1645},[142,167596,31328],{"class":201},[142,167598,153],{"class":152},[142,167600,5873],{"class":257},[142,167602,159],{"class":152},[142,167604,167605],{"class":144,"line":1651},[142,167606,2428],{"emptyLinePlaceholder":69},[142,167608,167609],{"class":144,"line":1656},[142,167610,2428],{"emptyLinePlaceholder":69},[142,167612,167613],{"class":144,"line":1670},[142,167614,161040],{"class":152},[14,167616,158283],{},[133,167618,167620],{"className":30407,"code":167619,"language":30409,"meta":31,"style":31},"say_hello = log(say_hello)\n",[139,167621,167622],{"__ignoreMap":31},[142,167623,167624,167627,167629],{"class":144,"line":145},[142,167625,167626],{"class":152},"say_hello ",[142,167628,198],{"class":148},[142,167630,167631],{"class":152}," log(say_hello)\n",[14,167633,167634],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[84,167636,167638],{"id":167637},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[133,167640,167642],{"className":30407,"code":167641,"language":30409,"meta":31,"style":31},"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",[139,167643,167644,167652,167669,167679,167698,167708,167715,167719,167725,167729,167733,167737,167745,167755,167759,167763],{"__ignoreMap":31},[142,167645,167646,167648,167650],{"class":144,"line":145},[142,167647,31976],{"class":148},[142,167649,87220],{"class":1991},[142,167651,167524],{"class":152},[142,167653,167654,167656,167658,167660,167662,167665,167667],{"class":144,"line":64},[142,167655,30830],{"class":148},[142,167657,167531],{"class":1991},[142,167659,153],{"class":152},[142,167661,608],{"class":148},[142,167663,167664],{"class":152},"args, ",[142,167666,10690],{"class":148},[142,167668,166675],{"class":152},[142,167670,167671,167673,167675,167677],{"class":144,"line":1208},[142,167672,32480],{"class":201},[142,167674,153],{"class":152},[142,167676,167542],{"class":257},[142,167678,159],{"class":152},[142,167680,167681,167684,167686,167689,167691,167693,167695],{"class":144,"line":1223},[142,167682,167683],{"class":152},"        result ",[142,167685,198],{"class":148},[142,167687,167688],{"class":152}," func(",[142,167690,608],{"class":148},[142,167692,167664],{"class":152},[142,167694,10690],{"class":148},[142,167696,167697],{"class":152},"kwargs)\n",[142,167699,167700,167702,167704,167706],{"class":144,"line":1229},[142,167701,32480],{"class":201},[142,167703,153],{"class":152},[142,167705,167558],{"class":257},[142,167707,159],{"class":152},[142,167709,167710,167712],{"class":144,"line":1243},[142,167711,14781],{"class":148},[142,167713,167714],{"class":152}," result\n",[142,167716,167717],{"class":144,"line":1249},[142,167718,2428],{"emptyLinePlaceholder":69},[142,167720,167721,167723],{"class":144,"line":1340},[142,167722,4118],{"class":148},[142,167724,167571],{"class":152},[142,167726,167727],{"class":144,"line":1346},[142,167728,2428],{"emptyLinePlaceholder":69},[142,167730,167731],{"class":144,"line":1358},[142,167732,2428],{"emptyLinePlaceholder":69},[142,167734,167735],{"class":144,"line":1640},[142,167736,167584],{"class":1991},[142,167738,167739,167741,167743],{"class":144,"line":1645},[142,167740,31976],{"class":148},[142,167742,5238],{"class":1991},[142,167744,151102],{"class":152},[142,167746,167747,167749,167751,167753],{"class":144,"line":1651},[142,167748,4118],{"class":148},[142,167750,10898],{"class":152},[142,167752,634],{"class":148},[142,167754,151113],{"class":152},[142,167756,167757],{"class":144,"line":1656},[142,167758,2428],{"emptyLinePlaceholder":69},[142,167760,167761],{"class":144,"line":1670},[142,167762,2428],{"emptyLinePlaceholder":69},[142,167764,167765,167767,167769,167771,167773,167775],{"class":144,"line":1675},[142,167766,30444],{"class":201},[142,167768,166609],{"class":152},[142,167770,599],{"class":201},[142,167772,12464],{"class":152},[142,167774,853],{"class":201},[142,167776,30526],{"class":152},[14,167778,167779,167780,101027,167782,167784],{},"这个写法使用 ",[139,167781,166541],{},[139,167783,166656],{}," 接收原函数的所有参数。",[84,167786,167788],{"id":167787},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167790,123301],{},[96,167792,167793,167796,167799],{},[99,167794,167795],{},"给定一组学生数据。",[99,167797,167798],{},"封装函数，根据传入规则筛选学生。",[99,167800,167801],{},"筛选及格、优秀、未成年学生。",[14,167803,10064],{},[133,167805,167807],{"className":30407,"code":167806,"language":30409,"meta":31,"style":31},"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",[139,167808,167809,167817,167845,167873,167901,167905,167909,167913,167923,167931,167941,167948,167953,167959,167963,167967,167991,168014,168037,168041,168048,168055],{"__ignoreMap":31},[142,167810,167811,167813,167815],{"class":144,"line":145},[142,167812,159725],{"class":152},[142,167814,198],{"class":148},[142,167816,55476],{"class":152},[142,167818,167819,167821,167823,167825,167827,167829,167831,167833,167835,167837,167839,167841,167843],{"class":144,"line":64},[142,167820,148394],{"class":152},[142,167822,62708],{"class":257},[142,167824,51466],{"class":152},[142,167826,149897],{"class":257},[142,167828,12464],{"class":152},[142,167830,69153],{"class":257},[142,167832,51466],{"class":152},[142,167834,803],{"class":201},[142,167836,12464],{"class":152},[142,167838,151481],{"class":257},[142,167840,51466],{"class":152},[142,167842,1142],{"class":201},[142,167844,4958],{"class":152},[142,167846,167847,167849,167851,167853,167855,167857,167859,167861,167863,167865,167867,167869,167871],{"class":144,"line":1208},[142,167848,148394],{"class":152},[142,167850,62708],{"class":257},[142,167852,51466],{"class":152},[142,167854,150945],{"class":257},[142,167856,12464],{"class":152},[142,167858,69153],{"class":257},[142,167860,51466],{"class":152},[142,167862,778],{"class":201},[142,167864,12464],{"class":152},[142,167866,151481],{"class":257},[142,167868,51466],{"class":152},[142,167870,964],{"class":201},[142,167872,4958],{"class":152},[142,167874,167875,167877,167879,167881,167883,167885,167887,167889,167891,167893,167895,167897,167899],{"class":144,"line":1223},[142,167876,148394],{"class":152},[142,167878,62708],{"class":257},[142,167880,51466],{"class":152},[142,167882,159740],{"class":257},[142,167884,12464],{"class":152},[142,167886,69153],{"class":257},[142,167888,51466],{"class":152},[142,167890,828],{"class":201},[142,167892,12464],{"class":152},[142,167894,151481],{"class":257},[142,167896,51466],{"class":152},[142,167898,1035],{"class":201},[142,167900,4958],{"class":152},[142,167902,167903],{"class":144,"line":1229},[142,167904,33275],{"class":152},[142,167906,167907],{"class":144,"line":1243},[142,167908,2428],{"emptyLinePlaceholder":69},[142,167910,167911],{"class":144,"line":1249},[142,167912,2428],{"emptyLinePlaceholder":69},[142,167914,167915,167917,167920],{"class":144,"line":1340},[142,167916,31976],{"class":148},[142,167918,167919],{"class":1991}," filter_students",[142,167921,167922],{"class":152},"(students, condition):\n",[142,167924,167925,167927,167929],{"class":144,"line":1346},[142,167926,161232],{"class":152},[142,167928,198],{"class":148},[142,167930,51867],{"class":152},[142,167932,167933,167935,167937,167939],{"class":144,"line":1358},[142,167934,3229],{"class":148},[142,167936,152146],{"class":152},[142,167938,26072],{"class":148},[142,167940,152151],{"class":152},[142,167942,167943,167945],{"class":144,"line":1640},[142,167944,2525],{"class":148},[142,167946,167947],{"class":152}," condition(student):\n",[142,167949,167950],{"class":144,"line":1645},[142,167951,167952],{"class":152},"            result.append(student)\n",[142,167954,167955,167957],{"class":144,"line":1651},[142,167956,4118],{"class":148},[142,167958,167714],{"class":152},[142,167960,167961],{"class":144,"line":1656},[142,167962,2428],{"emptyLinePlaceholder":69},[142,167964,167965],{"class":144,"line":1670},[142,167966,2428],{"emptyLinePlaceholder":69},[142,167968,167969,167971,167973,167976,167978,167981,167983,167985,167987,167989],{"class":144,"line":1675},[142,167970,165710],{"class":152},[142,167972,198],{"class":148},[142,167974,167975],{"class":152}," filter_students(students, ",[142,167977,166895],{"class":148},[142,167979,167980],{"class":152}," s: s[",[142,167982,151481],{"class":257},[142,167984,4471],{"class":152},[142,167986,1738],{"class":148},[142,167988,157846],{"class":201},[142,167990,159],{"class":152},[142,167992,167993,167996,167998,168000,168002,168004,168006,168008,168010,168012],{"class":144,"line":1681},[142,167994,167995],{"class":152},"excellent ",[142,167997,198],{"class":148},[142,167999,167975],{"class":152},[142,168001,166895],{"class":148},[142,168003,167980],{"class":152},[142,168005,151481],{"class":257},[142,168007,4471],{"class":152},[142,168009,1738],{"class":148},[142,168011,157797],{"class":201},[142,168013,159],{"class":152},[142,168015,168016,168019,168021,168023,168025,168027,168029,168031,168033,168035],{"class":144,"line":1702},[142,168017,168018],{"class":152},"under_age ",[142,168020,198],{"class":148},[142,168022,167975],{"class":152},[142,168024,166895],{"class":148},[142,168026,167980],{"class":152},[142,168028,69153],{"class":257},[142,168030,4471],{"class":152},[142,168032,1063],{"class":148},[142,168034,156294],{"class":201},[142,168036,159],{"class":152},[142,168038,168039],{"class":144,"line":1707},[142,168040,2428],{"emptyLinePlaceholder":69},[142,168042,168043,168045],{"class":144,"line":1721},[142,168044,30444],{"class":201},[142,168046,168047],{"class":152},"(passed)\n",[142,168049,168050,168052],{"class":144,"line":1726},[142,168051,30444],{"class":201},[142,168053,168054],{"class":152},"(excellent)\n",[142,168056,168057,168059],{"class":144,"line":1755},[142,168058,30444],{"class":201},[142,168060,168061],{"class":152},"(under_age)\n",[84,168063,168065],{"id":168064},"_715-易错点","7.15 易错点",[96,168067,168068,168071,168079,168084,168095],{},[99,168069,168070],{},"默认参数不要写可变对象。",[99,168072,168073,168075,168076,168078],{},[139,168074,166541],{}," 是元组，",[139,168077,166656],{}," 是字典。",[99,168080,168081,168083],{},[139,168082,166895],{}," 只适合简单表达式。",[99,168085,168086,101027,168088,168090,168091,168094],{},[139,168087,74073],{},[139,168089,80080],{}," 的结果是迭代器，常用 ",[139,168092,168093],{},"list()"," 转换查看。",[99,168096,168097],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[84,168099,168101],{"id":168100},"_716-本章练习","7.16 本章练习",[96,168103,168104,168111,168117,168122,168127],{},[99,168105,168106,168107,168110],{},"写函数 ",[139,168108,168109],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[99,168112,168106,168113,168116],{},[139,168114,168115],{},"print_user(**kwargs)","，输出用户所有字段。",[99,168118,104375,168119,168121],{},[139,168120,166895],{}," 对学生列表按年龄排序。",[99,168123,104375,168124,168126],{},[139,168125,80080],{}," 找出成绩不及格的学生。",[99,168128,168129],{},"写一个装饰器，统计函数执行前后的提示信息。",[5155,168131,168132],{},"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":31,"searchDepth":64,"depth":64,"links":168134},[168135,168136,168137,168138,168139,168140,168144,168145,168146,168147,168152,168153,168154,168155,168156,168157],{"id":165993,"depth":64,"text":165994},{"id":166107,"depth":64,"text":166108},{"id":166196,"depth":64,"text":166197},{"id":166258,"depth":64,"text":166259},{"id":166404,"depth":64,"text":166405},{"id":166531,"depth":64,"text":166532,"children":168141},[168142,168143],{"id":166535,"depth":1208,"text":166536},{"id":166650,"depth":1208,"text":166651},{"id":166731,"depth":64,"text":166732},{"id":166889,"depth":64,"text":166890},{"id":167057,"depth":64,"text":167058},{"id":167139,"depth":64,"text":167140,"children":168148},[168149,168150,168151],{"id":167143,"depth":1208,"text":167144},{"id":167214,"depth":1208,"text":167215},{"id":167291,"depth":1208,"text":167292},{"id":167416,"depth":64,"text":167417},{"id":167506,"depth":64,"text":167507},{"id":167637,"depth":64,"text":167638},{"id":167787,"depth":64,"text":167788},{"id":168064,"depth":64,"text":168065},{"id":168100,"depth":64,"text":168101},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165985,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168164,"title":168165,"body":168166,"description":66,"extension":67,"meta":170685,"navigation":69,"path":170686,"seo":170687,"stem":170688,"__hash__":170689},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168167,"toc":170660},[168168,168171,168175,168178,168181,168212,168216,168220,168223,168250,168254,168257,168308,168311,168326,168329,168364,168368,168370,168394,168397,168457,168461,168465,168468,168525,168528,168548,168552,168555,168618,168622,168625,168681,168688,168712,168716,168719,168782,168786,168791,168842,168845,168849,168854,168921,168924,169006,169010,169015,169066,169069,169073,169076,169079,169087,169090,169136,169139,169185,169189,169195,169239,169242,169288,169291,169331,169334,169395,169399,169402,169492,169495,169637,169640,169707,169711,169714,169717,169858,169861,169939,169942,170118,170122,170124,170135,170137,170336,170340,170584,170588,170622,170626,170657],[10,168169,168165],{"id":168170},"_8-文件操作",[84,168172,168174],{"id":168173},"_81-文件操作的意义","8.1 文件操作的意义",[14,168176,168177],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168179,168180],{},"常见文件类型：",[96,168182,168183,168189,168195,168201,168207],{},[99,168184,168185,168188],{},[139,168186,168187],{},".txt","：普通文本。",[99,168190,168191,168194],{},[139,168192,168193],{},".csv","：表格文本。",[99,168196,168197,168200],{},[139,168198,168199],{},".json","：结构化数据。",[99,168202,168203,168206],{},[139,168204,168205],{},".log","：日志文件。",[99,168208,168209,168211],{},[139,168210,146361],{},"：Python 源代码。",[84,168213,168215],{"id":168214},"_82-路径","8.2 路径",[113,168217,168219],{"id":168218},"_821-相对路径","8.2.1 相对路径",[14,168221,168222],{},"相对当前运行目录：",[133,168224,168226],{"className":30407,"code":168225,"language":30409,"meta":31,"style":31},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[139,168227,168228],{"__ignoreMap":31},[142,168229,168230,168232,168234,168236,168238,168240,168242,168244,168246,168248],{"class":144,"line":145},[142,168231,86944],{"class":201},[142,168233,153],{"class":152},[142,168235,146805],{"class":257},[142,168237,12464],{"class":152},[142,168239,146810],{"class":257},[142,168241,12464],{"class":152},[142,168243,146815],{"class":5245},[142,168245,198],{"class":148},[142,168247,146820],{"class":257},[142,168249,159],{"class":152},[113,168251,168253],{"id":168252},"_822-绝对路径","8.2.2 绝对路径",[14,168255,168256],{},"从根目录或盘符开始：",[133,168258,168260],{"className":30407,"code":168259,"language":30409,"meta":31,"style":31},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[139,168261,168262,168285],{"__ignoreMap":31},[142,168263,168264,168266,168268,168271,168273,168275,168277,168279,168281,168283],{"class":144,"line":145},[142,168265,86944],{"class":201},[142,168267,153],{"class":152},[142,168269,168270],{"class":257},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[142,168272,12464],{"class":152},[142,168274,146810],{"class":257},[142,168276,12464],{"class":152},[142,168278,146815],{"class":5245},[142,168280,198],{"class":148},[142,168282,146820],{"class":257},[142,168284,159],{"class":152},[142,168286,168287,168289,168291,168294,168296,168298,168300,168302,168304,168306],{"class":144,"line":64},[142,168288,86944],{"class":201},[142,168290,153],{"class":152},[142,168292,168293],{"class":257},"\"D:\u002Fdata\u002Fdata.txt\"",[142,168295,12464],{"class":152},[142,168297,146810],{"class":257},[142,168299,12464],{"class":152},[142,168301,146815],{"class":5245},[142,168303,198],{"class":148},[142,168305,146820],{"class":257},[142,168307,159],{"class":152},[14,168309,168310],{},"Windows 路径建议写成：",[133,168312,168314],{"className":30407,"code":168313,"language":30409,"meta":31,"style":31},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[139,168315,168316],{"__ignoreMap":31},[142,168317,168318,168321,168323],{"class":144,"line":145},[142,168319,168320],{"class":152},"path ",[142,168322,198],{"class":148},[142,168324,168325],{"class":257}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168327,168328],{},"或原始字符串：",[133,168330,168332],{"className":30407,"code":168331,"language":30409,"meta":31,"style":31},"path = r\"D:\\data\\data.txt\"\n",[139,168333,168334],{"__ignoreMap":31},[142,168335,168336,168338,168340,168342,168344,168347,168350,168353,168355,168357,168359,168362],{"class":144,"line":145},[142,168337,168320],{"class":152},[142,168339,198],{"class":148},[142,168341,17150],{"class":148},[142,168343,404],{"class":257},[142,168345,168346],{"class":48006},"D:",[142,168348,168349],{"class":201},"\\d",[142,168351,168352],{"class":48006},"ata",[142,168354,168349],{"class":201},[142,168356,168352],{"class":48006},[142,168358,711],{"class":201},[142,168360,168361],{"class":48006},"txt",[142,168363,25162],{"class":257},[84,168365,168367],{"id":168366},"_83-open函数","8.3 open函数",[14,168369,5210],{},[133,168371,168373],{"className":30407,"code":168372,"language":30409,"meta":31,"style":31},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[139,168374,168375],{"__ignoreMap":31},[142,168376,168377,168379,168381,168383,168386,168388,168390,168392],{"class":144,"line":145},[142,168378,45383],{"class":5245},[142,168380,13593],{"class":148},[142,168382,146800],{"class":201},[142,168384,168385],{"class":152},"(文件路径, 打开模式, ",[142,168387,146815],{"class":5245},[142,168389,198],{"class":148},[142,168391,146820],{"class":257},[142,168393,159],{"class":152},[14,168395,168396],{},"常见模式：",[290,168398,168399,168408],{},[293,168400,168401],{},[296,168402,168403,168406],{},[299,168404,168405],{},"模式",[299,168407,25898],{},[337,168409,168410,168419,168428,168437,168447],{},[296,168411,168412,168416],{},[342,168413,168414],{},[139,168415,823],{},[342,168417,168418],{},"只读，文件不存在会报错",[296,168420,168421,168425],{},[342,168422,168423],{},[139,168424,948],{},[342,168426,168427],{},"只写，文件不存在会创建，存在会清空",[296,168429,168430,168434],{},[342,168431,168432],{},[139,168433,391],{},[342,168435,168436],{},"追加，文件不存在会创建",[296,168438,168439,168444],{},[342,168440,168441],{},[139,168442,168443],{},"rb",[342,168445,168446],{},"二进制只读",[296,168448,168449,168454],{},[342,168450,168451],{},[139,168452,168453],{},"wb",[342,168455,168456],{},"二进制只写",[84,168458,168460],{"id":168459},"_84-读取文件","8.4 读取文件",[113,168462,168464],{"id":168463},"_841-read","8.4.1 read",[14,168466,168467],{},"一次读取全部内容：",[133,168469,168471],{"className":30407,"code":168470,"language":30409,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[139,168472,168473,168499,168511,168518],{"__ignoreMap":31},[142,168474,168475,168477,168479,168481,168483,168485,168487,168489,168491,168493,168495,168497],{"class":144,"line":145},[142,168476,45383],{"class":5245},[142,168478,13593],{"class":148},[142,168480,146800],{"class":201},[142,168482,153],{"class":152},[142,168484,146805],{"class":257},[142,168486,12464],{"class":152},[142,168488,146810],{"class":257},[142,168490,12464],{"class":152},[142,168492,146815],{"class":5245},[142,168494,198],{"class":148},[142,168496,146820],{"class":257},[142,168498,159],{"class":152},[142,168500,168501,168504,168506,168508],{"class":144,"line":64},[142,168502,168503],{"class":152},"content ",[142,168505,198],{"class":148},[142,168507,148162],{"class":5245},[142,168509,168510],{"class":152},".read()\n",[142,168512,168513,168515],{"class":144,"line":1208},[142,168514,30444],{"class":201},[142,168516,168517],{"class":152},"(content)\n",[142,168519,168520,168522],{"class":144,"line":1223},[142,168521,45383],{"class":5245},[142,168523,168524],{"class":152},".close()\n",[14,168526,168527],{},"可以指定读取字符数：",[133,168529,168531],{"className":30407,"code":168530,"language":30409,"meta":31,"style":31},"content = file.read(10)\n",[139,168532,168533],{"__ignoreMap":31},[142,168534,168535,168537,168539,168541,168544,168546],{"class":144,"line":145},[142,168536,168503],{"class":152},[142,168538,198],{"class":148},[142,168540,148162],{"class":5245},[142,168542,168543],{"class":152},".read(",[142,168545,599],{"class":201},[142,168547,159],{"class":152},[113,168549,168551],{"id":168550},"_842-readline","8.4.2 readline",[14,168553,168554],{},"一次读取一行：",[133,168556,168558],{"className":30407,"code":168557,"language":30409,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[139,168559,168560,168586,168590,168601,168608,168612],{"__ignoreMap":31},[142,168561,168562,168564,168566,168568,168570,168572,168574,168576,168578,168580,168582,168584],{"class":144,"line":145},[142,168563,45383],{"class":5245},[142,168565,13593],{"class":148},[142,168567,146800],{"class":201},[142,168569,153],{"class":152},[142,168571,146805],{"class":257},[142,168573,12464],{"class":152},[142,168575,146810],{"class":257},[142,168577,12464],{"class":152},[142,168579,146815],{"class":5245},[142,168581,198],{"class":148},[142,168583,146820],{"class":257},[142,168585,159],{"class":152},[142,168587,168588],{"class":144,"line":64},[142,168589,2428],{"emptyLinePlaceholder":69},[142,168591,168592,168594,168596,168598],{"class":144,"line":1208},[142,168593,147261],{"class":152},[142,168595,198],{"class":148},[142,168597,148162],{"class":5245},[142,168599,168600],{"class":152},".readline()\n",[142,168602,168603,168605],{"class":144,"line":1223},[142,168604,30444],{"class":201},[142,168606,168607],{"class":152},"(line)\n",[142,168609,168610],{"class":144,"line":1229},[142,168611,2428],{"emptyLinePlaceholder":69},[142,168613,168614,168616],{"class":144,"line":1243},[142,168615,45383],{"class":5245},[142,168617,168524],{"class":152},[113,168619,168621],{"id":168620},"_843-readlines","8.4.3 readlines",[14,168623,168624],{},"读取所有行，返回列表：",[133,168626,168628],{"className":30407,"code":168627,"language":30409,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[139,168629,168630,168656,168668,168675],{"__ignoreMap":31},[142,168631,168632,168634,168636,168638,168640,168642,168644,168646,168648,168650,168652,168654],{"class":144,"line":145},[142,168633,45383],{"class":5245},[142,168635,13593],{"class":148},[142,168637,146800],{"class":201},[142,168639,153],{"class":152},[142,168641,146805],{"class":257},[142,168643,12464],{"class":152},[142,168645,146810],{"class":257},[142,168647,12464],{"class":152},[142,168649,146815],{"class":5245},[142,168651,198],{"class":148},[142,168653,146820],{"class":257},[142,168655,159],{"class":152},[142,168657,168658,168661,168663,168665],{"class":144,"line":64},[142,168659,168660],{"class":152},"lines ",[142,168662,198],{"class":148},[142,168664,148162],{"class":5245},[142,168666,168667],{"class":152},".readlines()\n",[142,168669,168670,168672],{"class":144,"line":1208},[142,168671,30444],{"class":201},[142,168673,168674],{"class":152},"(lines)\n",[142,168676,168677,168679],{"class":144,"line":1223},[142,168678,45383],{"class":5245},[142,168680,168524],{"class":152},[14,168682,168683,168684,168687],{},"每一行通常带有换行符，可以用 ",[139,168685,168686],{},"strip()"," 去掉：",[133,168689,168691],{"className":30407,"code":168690,"language":30409,"meta":31,"style":31},"for line in lines:\n    print(line.strip())\n",[139,168692,168693,168705],{"__ignoreMap":31},[142,168694,168695,168697,168700,168702],{"class":144,"line":145},[142,168696,3053],{"class":148},[142,168698,168699],{"class":152}," line ",[142,168701,26072],{"class":148},[142,168703,168704],{"class":152}," lines:\n",[142,168706,168707,168709],{"class":144,"line":64},[142,168708,31328],{"class":201},[142,168710,168711],{"class":152},"(line.strip())\n",[113,168713,168715],{"id":168714},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168717,168718],{},"推荐读取大文件时使用：",[133,168720,168722],{"className":30407,"code":168721,"language":30409,"meta":31,"style":31},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[139,168723,168724,168750,168754,168766,168772,168776],{"__ignoreMap":31},[142,168725,168726,168728,168730,168732,168734,168736,168738,168740,168742,168744,168746,168748],{"class":144,"line":145},[142,168727,45383],{"class":5245},[142,168729,13593],{"class":148},[142,168731,146800],{"class":201},[142,168733,153],{"class":152},[142,168735,146805],{"class":257},[142,168737,12464],{"class":152},[142,168739,146810],{"class":257},[142,168741,12464],{"class":152},[142,168743,146815],{"class":5245},[142,168745,198],{"class":148},[142,168747,146820],{"class":257},[142,168749,159],{"class":152},[142,168751,168752],{"class":144,"line":64},[142,168753,2428],{"emptyLinePlaceholder":69},[142,168755,168756,168758,168760,168762,168764],{"class":144,"line":1208},[142,168757,3053],{"class":148},[142,168759,168699],{"class":152},[142,168761,26072],{"class":148},[142,168763,148162],{"class":5245},[142,168765,3767],{"class":152},[142,168767,168768,168770],{"class":144,"line":1223},[142,168769,31328],{"class":201},[142,168771,168711],{"class":152},[142,168773,168774],{"class":144,"line":1229},[142,168775,2428],{"emptyLinePlaceholder":69},[142,168777,168778,168780],{"class":144,"line":1243},[142,168779,45383],{"class":5245},[142,168781,168524],{"class":152},[84,168783,168785],{"id":168784},"_85-with语句","8.5 with语句",[14,168787,168788,168790],{},[139,168789,107842],{}," 会自动关闭文件，推荐使用。",[133,168792,168794],{"className":30407,"code":168793,"language":30409,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[139,168795,168796,168826,168836],{"__ignoreMap":31},[142,168797,168798,168800,168802,168804,168806,168808,168810,168812,168814,168816,168818,168820,168822,168824],{"class":144,"line":145},[142,168799,107842],{"class":148},[142,168801,146800],{"class":201},[142,168803,153],{"class":152},[142,168805,146805],{"class":257},[142,168807,12464],{"class":152},[142,168809,146810],{"class":257},[142,168811,12464],{"class":152},[142,168813,146815],{"class":5245},[142,168815,198],{"class":148},[142,168817,146820],{"class":257},[142,168819,13743],{"class":152},[142,168821,31412],{"class":148},[142,168823,148162],{"class":5245},[142,168825,3767],{"class":152},[142,168827,168828,168830,168832,168834],{"class":144,"line":64},[142,168829,146832],{"class":152},[142,168831,198],{"class":148},[142,168833,148162],{"class":5245},[142,168835,168510],{"class":152},[142,168837,168838,168840],{"class":144,"line":1208},[142,168839,31328],{"class":201},[142,168841,168517],{"class":152},[14,168843,168844],{},"等价于打开文件、读取、最后关闭，但更安全。",[84,168846,168848],{"id":168847},"_86-写入文件","8.6 写入文件",[14,168850,168851,168853],{},[139,168852,948],{}," 模式会清空原文件。",[133,168855,168857],{"className":30407,"code":168856,"language":30409,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[139,168858,168859,168889,168906],{"__ignoreMap":31},[142,168860,168861,168863,168865,168867,168869,168871,168873,168875,168877,168879,168881,168883,168885,168887],{"class":144,"line":145},[142,168862,107842],{"class":148},[142,168864,146800],{"class":201},[142,168866,153],{"class":152},[142,168868,146805],{"class":257},[142,168870,12464],{"class":152},[142,168872,151985],{"class":257},[142,168874,12464],{"class":152},[142,168876,146815],{"class":5245},[142,168878,198],{"class":148},[142,168880,146820],{"class":257},[142,168882,13743],{"class":152},[142,168884,31412],{"class":148},[142,168886,148162],{"class":5245},[142,168888,3767],{"class":152},[142,168890,168891,168894,168897,168900,168902,168904],{"class":144,"line":64},[142,168892,168893],{"class":5245},"    file",[142,168895,168896],{"class":152},".write(",[142,168898,168899],{"class":257},"\"hello",[142,168901,156534],{"class":201},[142,168903,404],{"class":257},[142,168905,159],{"class":152},[142,168907,168908,168910,168912,168915,168917,168919],{"class":144,"line":1208},[142,168909,168893],{"class":5245},[142,168911,168896],{"class":152},[142,168913,168914],{"class":257},"\"python",[142,168916,156534],{"class":201},[142,168918,404],{"class":257},[142,168920,159],{"class":152},[14,168922,168923],{},"写入多行：",[133,168925,168927],{"className":30407,"code":168926,"language":30409,"meta":31,"style":31},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[139,168928,168929,168964,168968,168999],{"__ignoreMap":31},[142,168930,168931,168933,168935,168937,168940,168942,168944,168946,168949,168951,168953,168955,168958,168960,168962],{"class":144,"line":145},[142,168932,168660],{"class":152},[142,168934,198],{"class":148},[142,168936,52255],{"class":152},[142,168938,168939],{"class":257},"\"小明,18",[142,168941,156534],{"class":201},[142,168943,404],{"class":257},[142,168945,12464],{"class":152},[142,168947,168948],{"class":257},"\"小红,17",[142,168950,156534],{"class":201},[142,168952,404],{"class":257},[142,168954,12464],{"class":152},[142,168956,168957],{"class":257},"\"小刚,19",[142,168959,156534],{"class":201},[142,168961,404],{"class":257},[142,168963,33275],{"class":152},[142,168965,168966],{"class":144,"line":64},[142,168967,2428],{"emptyLinePlaceholder":69},[142,168969,168970,168972,168974,168976,168979,168981,168983,168985,168987,168989,168991,168993,168995,168997],{"class":144,"line":1208},[142,168971,107842],{"class":148},[142,168973,146800],{"class":201},[142,168975,153],{"class":152},[142,168977,168978],{"class":257},"\"students.txt\"",[142,168980,12464],{"class":152},[142,168982,151985],{"class":257},[142,168984,12464],{"class":152},[142,168986,146815],{"class":5245},[142,168988,198],{"class":148},[142,168990,146820],{"class":257},[142,168992,13743],{"class":152},[142,168994,31412],{"class":148},[142,168996,148162],{"class":5245},[142,168998,3767],{"class":152},[142,169000,169001,169003],{"class":144,"line":1223},[142,169002,168893],{"class":5245},[142,169004,169005],{"class":152},".writelines(lines)\n",[84,169007,169009],{"id":169008},"_87-追加文件","8.7 追加文件",[14,169011,169012,169014],{},[139,169013,391],{}," 模式不会清空原内容，而是在末尾追加。",[133,169016,169018],{"className":30407,"code":169017,"language":30409,"meta":31,"style":31},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[139,169019,169020,169051],{"__ignoreMap":31},[142,169021,169022,169024,169026,169028,169031,169033,169035,169037,169039,169041,169043,169045,169047,169049],{"class":144,"line":145},[142,169023,107842],{"class":148},[142,169025,146800],{"class":201},[142,169027,153],{"class":152},[142,169029,169030],{"class":257},"\"log.txt\"",[142,169032,12464],{"class":152},[142,169034,165334],{"class":257},[142,169036,12464],{"class":152},[142,169038,146815],{"class":5245},[142,169040,198],{"class":148},[142,169042,146820],{"class":257},[142,169044,13743],{"class":152},[142,169046,31412],{"class":148},[142,169048,148162],{"class":5245},[142,169050,3767],{"class":152},[142,169052,169053,169055,169057,169060,169062,169064],{"class":144,"line":64},[142,169054,168893],{"class":5245},[142,169056,168896],{"class":152},[142,169058,169059],{"class":257},"\"程序启动",[142,169061,156534],{"class":201},[142,169063,404],{"class":257},[142,169065,159],{"class":152},[14,169067,169068],{},"日志类文件常用追加模式。",[84,169070,169072],{"id":169071},"_88-文件编码","8.8 文件编码",[14,169074,169075],{},"编码决定文字如何保存为字节。",[14,169077,169078],{},"常见编码：",[96,169080,169081,169084],{},[99,169082,169083],{},"UTF-8：推荐。",[99,169085,169086],{},"GBK：部分 Windows 中文文件常见。",[14,169088,169089],{},"读取文件乱码时，可以尝试：",[133,169091,169093],{"className":30407,"code":169092,"language":30409,"meta":31,"style":31},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[139,169094,169095,169126],{"__ignoreMap":31},[142,169096,169097,169099,169101,169103,169105,169107,169109,169111,169113,169115,169118,169120,169122,169124],{"class":144,"line":145},[142,169098,107842],{"class":148},[142,169100,146800],{"class":201},[142,169102,153],{"class":152},[142,169104,146805],{"class":257},[142,169106,12464],{"class":152},[142,169108,146810],{"class":257},[142,169110,12464],{"class":152},[142,169112,146815],{"class":5245},[142,169114,198],{"class":148},[142,169116,169117],{"class":257},"\"gbk\"",[142,169119,13743],{"class":152},[142,169121,31412],{"class":148},[142,169123,148162],{"class":5245},[142,169125,3767],{"class":152},[142,169127,169128,169130,169132,169134],{"class":144,"line":64},[142,169129,146832],{"class":152},[142,169131,198],{"class":148},[142,169133,148162],{"class":5245},[142,169135,168510],{"class":152},[14,169137,169138],{},"写文件时建议统一 UTF-8：",[133,169140,169142],{"className":30407,"code":169141,"language":30409,"meta":31,"style":31},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[139,169143,169144,169174],{"__ignoreMap":31},[142,169145,169146,169148,169150,169152,169154,169156,169158,169160,169162,169164,169166,169168,169170,169172],{"class":144,"line":145},[142,169147,107842],{"class":148},[142,169149,146800],{"class":201},[142,169151,153],{"class":152},[142,169153,146805],{"class":257},[142,169155,12464],{"class":152},[142,169157,151985],{"class":257},[142,169159,12464],{"class":152},[142,169161,146815],{"class":5245},[142,169163,198],{"class":148},[142,169165,146820],{"class":257},[142,169167,13743],{"class":152},[142,169169,31412],{"class":148},[142,169171,148162],{"class":5245},[142,169173,3767],{"class":152},[142,169175,169176,169178,169180,169183],{"class":144,"line":64},[142,169177,168893],{"class":5245},[142,169179,168896],{"class":152},[142,169181,169182],{"class":257},"\"中文内容\"",[142,169184,159],{"class":152},[84,169186,169188],{"id":169187},"_89-pathlib","8.9 pathlib",[14,169190,169191,169194],{},[139,169192,169193],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[133,169196,169198],{"className":30407,"code":169197,"language":30409,"meta":31,"style":31},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[139,169199,169200,169210,169214,169232],{"__ignoreMap":31},[142,169201,169202,169204,169206,169208],{"class":144,"line":145},[142,169203,30766],{"class":148},[142,169205,108320],{"class":152},[142,169207,30421],{"class":148},[142,169209,108325],{"class":152},[142,169211,169212],{"class":144,"line":64},[142,169213,2428],{"emptyLinePlaceholder":69},[142,169215,169216,169218,169220,169222,169225,169227,169229],{"class":144,"line":1208},[142,169217,168320],{"class":152},[142,169219,198],{"class":148},[142,169221,108554],{"class":152},[142,169223,169224],{"class":257},"\"data\"",[142,169226,13743],{"class":152},[142,169228,737],{"class":148},[142,169230,169231],{"class":257}," \"students.txt\"\n",[142,169233,169234,169236],{"class":144,"line":1223},[142,169235,30444],{"class":201},[142,169237,169238],{"class":152},"(path)\n",[14,169240,169241],{},"创建目录：",[133,169243,169245],{"className":30407,"code":169244,"language":30409,"meta":31,"style":31},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[139,169246,169247,169257,169261,169274],{"__ignoreMap":31},[142,169248,169249,169251,169253,169255],{"class":144,"line":145},[142,169250,30766],{"class":148},[142,169252,108320],{"class":152},[142,169254,30421],{"class":148},[142,169256,108325],{"class":152},[142,169258,169259],{"class":144,"line":64},[142,169260,2428],{"emptyLinePlaceholder":69},[142,169262,169263,169266,169268,169270,169272],{"class":144,"line":1208},[142,169264,169265],{"class":152},"data_dir ",[142,169267,198],{"class":148},[142,169269,108554],{"class":152},[142,169271,169224],{"class":257},[142,169273,159],{"class":152},[142,169275,169276,169279,169282,169284,169286],{"class":144,"line":1223},[142,169277,169278],{"class":152},"data_dir.mkdir(",[142,169280,169281],{"class":5245},"exist_ok",[142,169283,198],{"class":148},[142,169285,31505],{"class":201},[142,169287,159],{"class":152},[14,169289,169290],{},"判断文件是否存在：",[133,169292,169294],{"className":30407,"code":169293,"language":30409,"meta":31,"style":31},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[139,169295,169296,169309,169313,169320],{"__ignoreMap":31},[142,169297,169298,169300,169302,169304,169307],{"class":144,"line":145},[142,169299,168320],{"class":152},[142,169301,198],{"class":148},[142,169303,108554],{"class":152},[142,169305,169306],{"class":257},"\"data\u002Fstudents.txt\"",[142,169308,159],{"class":152},[142,169310,169311],{"class":144,"line":64},[142,169312,2428],{"emptyLinePlaceholder":69},[142,169314,169315,169317],{"class":144,"line":1208},[142,169316,1559],{"class":148},[142,169318,169319],{"class":152}," path.exists():\n",[142,169321,169322,169324,169326,169329],{"class":144,"line":1223},[142,169323,31328],{"class":201},[142,169325,153],{"class":152},[142,169327,169328],{"class":257},"\"文件存在\"",[142,169330,159],{"class":152},[14,169332,169333],{},"读写文本：",[133,169335,169337],{"className":30407,"code":169336,"language":30409,"meta":31,"style":31},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[139,169338,169339,169351,169355,169372,169389],{"__ignoreMap":31},[142,169340,169341,169343,169345,169347,169349],{"class":144,"line":145},[142,169342,168320],{"class":152},[142,169344,198],{"class":148},[142,169346,108554],{"class":152},[142,169348,146805],{"class":257},[142,169350,159],{"class":152},[142,169352,169353],{"class":144,"line":64},[142,169354,2428],{"emptyLinePlaceholder":69},[142,169356,169357,169360,169362,169364,169366,169368,169370],{"class":144,"line":1208},[142,169358,169359],{"class":152},"path.write_text(",[142,169361,145885],{"class":257},[142,169363,12464],{"class":152},[142,169365,146815],{"class":5245},[142,169367,198],{"class":148},[142,169369,146820],{"class":257},[142,169371,159],{"class":152},[142,169373,169374,169376,169378,169381,169383,169385,169387],{"class":144,"line":1223},[142,169375,168503],{"class":152},[142,169377,198],{"class":148},[142,169379,169380],{"class":152}," path.read_text(",[142,169382,146815],{"class":5245},[142,169384,198],{"class":148},[142,169386,146820],{"class":257},[142,169388,159],{"class":152},[142,169390,169391,169393],{"class":144,"line":1229},[142,169392,30444],{"class":201},[142,169394,168517],{"class":152},[84,169396,169398],{"id":169397},"_810-json文件","8.10 JSON文件",[14,169400,169401],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[133,169403,169405],{"className":30407,"code":169404,"language":30409,"meta":31,"style":31},"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",[139,169406,169407,169413,169417,169425,169435,169445,169453,169457,169461,169486],{"__ignoreMap":31},[142,169408,169409,169411],{"class":144,"line":145},[142,169410,30421],{"class":148},[142,169412,147100],{"class":152},[142,169414,169415],{"class":144,"line":64},[142,169416,2428],{"emptyLinePlaceholder":69},[142,169418,169419,169421,169423],{"class":144,"line":1208},[142,169420,149490],{"class":152},[142,169422,198],{"class":148},[142,169424,15601],{"class":152},[142,169426,169427,169429,169431,169433],{"class":144,"line":1223},[142,169428,147029],{"class":257},[142,169430,51466],{"class":152},[142,169432,149897],{"class":257},[142,169434,31495],{"class":152},[142,169436,169437,169439,169441,169443],{"class":144,"line":1229},[142,169438,164546],{"class":257},[142,169440,51466],{"class":152},[142,169442,803],{"class":201},[142,169444,31495],{"class":152},[142,169446,169447,169449,169451],{"class":144,"line":1243},[142,169448,164557],{"class":257},[142,169450,51466],{"class":152},[142,169452,164562],{"class":201},[142,169454,169455],{"class":144,"line":1249},[142,169456,1593],{"class":152},[142,169458,169459],{"class":144,"line":1340},[142,169460,2428],{"emptyLinePlaceholder":69},[142,169462,169463,169465,169467,169470,169472,169474,169476,169478,169480,169482,169484],{"class":144,"line":1346},[142,169464,156453],{"class":152},[142,169466,198],{"class":148},[142,169468,169469],{"class":152}," json.dumps(student, ",[142,169471,147146],{"class":5245},[142,169473,198],{"class":148},[142,169475,34016],{"class":201},[142,169477,12464],{"class":152},[142,169479,152021],{"class":5245},[142,169481,198],{"class":148},[142,169483,230],{"class":201},[142,169485,159],{"class":152},[142,169487,169488,169490],{"class":144,"line":1358},[142,169489,30444],{"class":201},[142,169491,164080],{"class":152},[14,169493,169494],{},"写入 JSON 文件：",[133,169496,169498],{"className":30407,"code":169497,"language":30409,"meta":31,"style":31},"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",[139,169499,169500,169506,169510,169518,169546,169574,169578,169582,169612],{"__ignoreMap":31},[142,169501,169502,169504],{"class":144,"line":145},[142,169503,30421],{"class":148},[142,169505,147100],{"class":152},[142,169507,169508],{"class":144,"line":64},[142,169509,2428],{"emptyLinePlaceholder":69},[142,169511,169512,169514,169516],{"class":144,"line":1208},[142,169513,159725],{"class":152},[142,169515,198],{"class":148},[142,169517,55476],{"class":152},[142,169519,169520,169522,169524,169526,169528,169530,169532,169534,169536,169538,169540,169542,169544],{"class":144,"line":1223},[142,169521,148394],{"class":152},[142,169523,62708],{"class":257},[142,169525,51466],{"class":152},[142,169527,149897],{"class":257},[142,169529,12464],{"class":152},[142,169531,69153],{"class":257},[142,169533,51466],{"class":152},[142,169535,803],{"class":201},[142,169537,12464],{"class":152},[142,169539,151481],{"class":257},[142,169541,51466],{"class":152},[142,169543,1142],{"class":201},[142,169545,4958],{"class":152},[142,169547,169548,169550,169552,169554,169556,169558,169560,169562,169564,169566,169568,169570,169572],{"class":144,"line":1229},[142,169549,148394],{"class":152},[142,169551,62708],{"class":257},[142,169553,51466],{"class":152},[142,169555,150945],{"class":257},[142,169557,12464],{"class":152},[142,169559,69153],{"class":257},[142,169561,51466],{"class":152},[142,169563,778],{"class":201},[142,169565,12464],{"class":152},[142,169567,151481],{"class":257},[142,169569,51466],{"class":152},[142,169571,964],{"class":201},[142,169573,4958],{"class":152},[142,169575,169576],{"class":144,"line":1243},[142,169577,33275],{"class":152},[142,169579,169580],{"class":144,"line":1249},[142,169581,2428],{"emptyLinePlaceholder":69},[142,169583,169584,169586,169588,169590,169592,169594,169596,169598,169600,169602,169604,169606,169608,169610],{"class":144,"line":1340},[142,169585,107842],{"class":148},[142,169587,146800],{"class":201},[142,169589,153],{"class":152},[142,169591,151840],{"class":257},[142,169593,12464],{"class":152},[142,169595,151985],{"class":257},[142,169597,12464],{"class":152},[142,169599,146815],{"class":5245},[142,169601,198],{"class":148},[142,169603,146820],{"class":257},[142,169605,13743],{"class":152},[142,169607,31412],{"class":148},[142,169609,148162],{"class":5245},[142,169611,3767],{"class":152},[142,169613,169614,169617,169619,169621,169623,169625,169627,169629,169631,169633,169635],{"class":144,"line":1346},[142,169615,169616],{"class":152},"    json.dump(students, ",[142,169618,45383],{"class":5245},[142,169620,12464],{"class":152},[142,169622,147146],{"class":5245},[142,169624,198],{"class":148},[142,169626,34016],{"class":201},[142,169628,12464],{"class":152},[142,169630,152021],{"class":5245},[142,169632,198],{"class":148},[142,169634,230],{"class":201},[142,169636,159],{"class":152},[14,169638,169639],{},"读取 JSON 文件：",[133,169641,169643],{"className":30407,"code":169642,"language":30409,"meta":31,"style":31},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[139,169644,169645,169651,169655,169685,169697,169701],{"__ignoreMap":31},[142,169646,169647,169649],{"class":144,"line":145},[142,169648,30421],{"class":148},[142,169650,147100],{"class":152},[142,169652,169653],{"class":144,"line":64},[142,169654,2428],{"emptyLinePlaceholder":69},[142,169656,169657,169659,169661,169663,169665,169667,169669,169671,169673,169675,169677,169679,169681,169683],{"class":144,"line":1208},[142,169658,107842],{"class":148},[142,169660,146800],{"class":201},[142,169662,153],{"class":152},[142,169664,151840],{"class":257},[142,169666,12464],{"class":152},[142,169668,146810],{"class":257},[142,169670,12464],{"class":152},[142,169672,146815],{"class":5245},[142,169674,198],{"class":148},[142,169676,146820],{"class":257},[142,169678,13743],{"class":152},[142,169680,31412],{"class":148},[142,169682,148162],{"class":5245},[142,169684,3767],{"class":152},[142,169686,169687,169689,169691,169693,169695],{"class":144,"line":1223},[142,169688,153046],{"class":152},[142,169690,198],{"class":148},[142,169692,148173],{"class":152},[142,169694,45383],{"class":5245},[142,169696,159],{"class":152},[142,169698,169699],{"class":144,"line":1229},[142,169700,2428],{"emptyLinePlaceholder":69},[142,169702,169703,169705],{"class":144,"line":1243},[142,169704,30444],{"class":201},[142,169706,165004],{"class":152},[84,169708,169710],{"id":169709},"_811-csv文件","8.11 CSV文件",[14,169712,169713],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169715,169716],{},"写入 CSV：",[133,169718,169720],{"className":30407,"code":169719,"language":30409,"meta":31,"style":31},"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",[139,169721,169722,169729,169733,169741,169759,169775,169791,169795,169799,169839,169853],{"__ignoreMap":31},[142,169723,169724,169726],{"class":144,"line":145},[142,169725,30421],{"class":148},[142,169727,169728],{"class":152}," csv\n",[142,169730,169731],{"class":144,"line":64},[142,169732,2428],{"emptyLinePlaceholder":69},[142,169734,169735,169737,169739],{"class":144,"line":1208},[142,169736,159725],{"class":152},[142,169738,198],{"class":148},[142,169740,55476],{"class":152},[142,169742,169743,169746,169748,169750,169752,169754,169757],{"class":144,"line":1223},[142,169744,169745],{"class":152},"    [",[142,169747,73128],{"class":257},[142,169749,12464],{"class":152},[142,169751,73161],{"class":257},[142,169753,12464],{"class":152},[142,169755,169756],{"class":257},"\"成绩\"",[142,169758,87865],{"class":152},[142,169760,169761,169763,169765,169767,169769,169771,169773],{"class":144,"line":1229},[142,169762,169745],{"class":152},[142,169764,149897],{"class":257},[142,169766,12464],{"class":152},[142,169768,803],{"class":201},[142,169770,12464],{"class":152},[142,169772,1142],{"class":201},[142,169774,87865],{"class":152},[142,169776,169777,169779,169781,169783,169785,169787,169789],{"class":144,"line":1243},[142,169778,169745],{"class":152},[142,169780,150945],{"class":257},[142,169782,12464],{"class":152},[142,169784,778],{"class":201},[142,169786,12464],{"class":152},[142,169788,964],{"class":201},[142,169790,87865],{"class":152},[142,169792,169793],{"class":144,"line":1249},[142,169794,33275],{"class":152},[142,169796,169797],{"class":144,"line":1340},[142,169798,2428],{"emptyLinePlaceholder":69},[142,169800,169801,169803,169805,169807,169810,169812,169814,169816,169818,169820,169822,169824,169827,169829,169831,169833,169835,169837],{"class":144,"line":1346},[142,169802,107842],{"class":148},[142,169804,146800],{"class":201},[142,169806,153],{"class":152},[142,169808,169809],{"class":257},"\"students.csv\"",[142,169811,12464],{"class":152},[142,169813,151985],{"class":257},[142,169815,12464],{"class":152},[142,169817,146815],{"class":5245},[142,169819,198],{"class":148},[142,169821,146820],{"class":257},[142,169823,12464],{"class":152},[142,169825,169826],{"class":5245},"newline",[142,169828,198],{"class":148},[142,169830,7681],{"class":257},[142,169832,13743],{"class":152},[142,169834,31412],{"class":148},[142,169836,148162],{"class":5245},[142,169838,3767],{"class":152},[142,169840,169841,169844,169846,169849,169851],{"class":144,"line":1358},[142,169842,169843],{"class":152},"    writer ",[142,169845,198],{"class":148},[142,169847,169848],{"class":152}," csv.writer(",[142,169850,45383],{"class":5245},[142,169852,159],{"class":152},[142,169854,169855],{"class":144,"line":1640},[142,169856,169857],{"class":152},"    writer.writerows(students)\n",[14,169859,169860],{},"读取 CSV：",[133,169862,169864],{"className":30407,"code":169863,"language":30409,"meta":31,"style":31},"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",[139,169865,169866,169872,169876,169906,169920,169932],{"__ignoreMap":31},[142,169867,169868,169870],{"class":144,"line":145},[142,169869,30421],{"class":148},[142,169871,169728],{"class":152},[142,169873,169874],{"class":144,"line":64},[142,169875,2428],{"emptyLinePlaceholder":69},[142,169877,169878,169880,169882,169884,169886,169888,169890,169892,169894,169896,169898,169900,169902,169904],{"class":144,"line":1208},[142,169879,107842],{"class":148},[142,169881,146800],{"class":201},[142,169883,153],{"class":152},[142,169885,169809],{"class":257},[142,169887,12464],{"class":152},[142,169889,146810],{"class":257},[142,169891,12464],{"class":152},[142,169893,146815],{"class":5245},[142,169895,198],{"class":148},[142,169897,146820],{"class":257},[142,169899,13743],{"class":152},[142,169901,31412],{"class":148},[142,169903,148162],{"class":5245},[142,169905,3767],{"class":152},[142,169907,169908,169911,169913,169916,169918],{"class":144,"line":1223},[142,169909,169910],{"class":152},"    reader ",[142,169912,198],{"class":148},[142,169914,169915],{"class":152}," csv.reader(",[142,169917,45383],{"class":5245},[142,169919,159],{"class":152},[142,169921,169922,169924,169927,169929],{"class":144,"line":1229},[142,169923,3229],{"class":148},[142,169925,169926],{"class":152}," row ",[142,169928,26072],{"class":148},[142,169930,169931],{"class":152}," reader:\n",[142,169933,169934,169936],{"class":144,"line":1243},[142,169935,32480],{"class":201},[142,169937,169938],{"class":152},"(row)\n",[14,169940,169941],{},"使用字典写入：",[133,169943,169945],{"className":30407,"code":169944,"language":30409,"meta":31,"style":31},"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",[139,169946,169947,169953,169957,169965,169993,170021,170025,170029,170067,170088,170109,170114],{"__ignoreMap":31},[142,169948,169949,169951],{"class":144,"line":145},[142,169950,30421],{"class":148},[142,169952,169728],{"class":152},[142,169954,169955],{"class":144,"line":64},[142,169956,2428],{"emptyLinePlaceholder":69},[142,169958,169959,169961,169963],{"class":144,"line":1208},[142,169960,159725],{"class":152},[142,169962,198],{"class":148},[142,169964,55476],{"class":152},[142,169966,169967,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989,169991],{"class":144,"line":1223},[142,169968,148394],{"class":152},[142,169970,62708],{"class":257},[142,169972,51466],{"class":152},[142,169974,149897],{"class":257},[142,169976,12464],{"class":152},[142,169978,69153],{"class":257},[142,169980,51466],{"class":152},[142,169982,803],{"class":201},[142,169984,12464],{"class":152},[142,169986,151481],{"class":257},[142,169988,51466],{"class":152},[142,169990,1142],{"class":201},[142,169992,4958],{"class":152},[142,169994,169995,169997,169999,170001,170003,170005,170007,170009,170011,170013,170015,170017,170019],{"class":144,"line":1229},[142,169996,148394],{"class":152},[142,169998,62708],{"class":257},[142,170000,51466],{"class":152},[142,170002,150945],{"class":257},[142,170004,12464],{"class":152},[142,170006,69153],{"class":257},[142,170008,51466],{"class":152},[142,170010,778],{"class":201},[142,170012,12464],{"class":152},[142,170014,151481],{"class":257},[142,170016,51466],{"class":152},[142,170018,964],{"class":201},[142,170020,4958],{"class":152},[142,170022,170023],{"class":144,"line":1243},[142,170024,33275],{"class":152},[142,170026,170027],{"class":144,"line":1249},[142,170028,2428],{"emptyLinePlaceholder":69},[142,170030,170031,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057,170059,170061,170063,170065],{"class":144,"line":1340},[142,170032,107842],{"class":148},[142,170034,146800],{"class":201},[142,170036,153],{"class":152},[142,170038,169809],{"class":257},[142,170040,12464],{"class":152},[142,170042,151985],{"class":257},[142,170044,12464],{"class":152},[142,170046,146815],{"class":5245},[142,170048,198],{"class":148},[142,170050,146820],{"class":257},[142,170052,12464],{"class":152},[142,170054,169826],{"class":5245},[142,170056,198],{"class":148},[142,170058,7681],{"class":257},[142,170060,13743],{"class":152},[142,170062,31412],{"class":148},[142,170064,148162],{"class":5245},[142,170066,3767],{"class":152},[142,170068,170069,170072,170074,170076,170078,170080,170082,170084,170086],{"class":144,"line":1346},[142,170070,170071],{"class":152},"    fieldnames ",[142,170073,198],{"class":148},[142,170075,52255],{"class":152},[142,170077,62708],{"class":257},[142,170079,12464],{"class":152},[142,170081,69153],{"class":257},[142,170083,12464],{"class":152},[142,170085,151481],{"class":257},[142,170087,33275],{"class":152},[142,170089,170090,170092,170094,170097,170099,170101,170104,170106],{"class":144,"line":1358},[142,170091,169843],{"class":152},[142,170093,198],{"class":148},[142,170095,170096],{"class":152}," csv.DictWriter(",[142,170098,45383],{"class":5245},[142,170100,12464],{"class":152},[142,170102,170103],{"class":5245},"fieldnames",[142,170105,198],{"class":148},[142,170107,170108],{"class":152},"fieldnames)\n",[142,170110,170111],{"class":144,"line":1640},[142,170112,170113],{"class":152},"    writer.writeheader()\n",[142,170115,170116],{"class":144,"line":1645},[142,170117,169857],{"class":152},[84,170119,170121],{"id":170120},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170123,123301],{},[96,170125,170126,170129,170132],{},[99,170127,170128],{},"读取文本文件。",[99,170130,170131],{},"统计每个单词出现次数。",[99,170133,170134],{},"输出出现次数最多的前 10 个单词。",[14,170136,10064],{},[133,170138,170140],{"className":30407,"code":170139,"language":30409,"meta":31,"style":31},"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",[139,170141,170142,170152,170156,170169,170185,170189,170199,170208,170212,170224,170244,170253,170257,170275,170279,170309,170313,170329],{"__ignoreMap":31},[142,170143,170144,170146,170148,170150],{"class":144,"line":145},[142,170145,30766],{"class":148},[142,170147,108320],{"class":152},[142,170149,30421],{"class":148},[142,170151,108325],{"class":152},[142,170153,170154],{"class":144,"line":64},[142,170155,2428],{"emptyLinePlaceholder":69},[142,170157,170158,170160,170162,170164,170167],{"class":144,"line":1208},[142,170159,168320],{"class":152},[142,170161,198],{"class":148},[142,170163,108554],{"class":152},[142,170165,170166],{"class":257},"\"article.txt\"",[142,170168,159],{"class":152},[142,170170,170171,170173,170175,170177,170179,170181,170183],{"class":144,"line":1223},[142,170172,168503],{"class":152},[142,170174,198],{"class":148},[142,170176,169380],{"class":152},[142,170178,146815],{"class":5245},[142,170180,198],{"class":148},[142,170182,146820],{"class":257},[142,170184,159],{"class":152},[142,170186,170187],{"class":144,"line":1229},[142,170188,2428],{"emptyLinePlaceholder":69},[142,170190,170191,170194,170196],{"class":144,"line":1243},[142,170192,170193],{"class":152},"words ",[142,170195,198],{"class":148},[142,170197,170198],{"class":152}," content.lower().split()\n",[142,170200,170201,170204,170206],{"class":144,"line":1249},[142,170202,170203],{"class":152},"counter ",[142,170205,198],{"class":148},[142,170207,87897],{"class":152},[142,170209,170210],{"class":144,"line":1340},[142,170211,2428],{"emptyLinePlaceholder":69},[142,170213,170214,170216,170219,170221],{"class":144,"line":1346},[142,170215,3053],{"class":148},[142,170217,170218],{"class":152}," word ",[142,170220,26072],{"class":148},[142,170222,170223],{"class":152}," words:\n",[142,170225,170226,170229,170231,170234,170237,170239,170242],{"class":144,"line":1358},[142,170227,170228],{"class":152},"    word ",[142,170230,198],{"class":148},[142,170232,170233],{"class":152}," word.strip(",[142,170235,170236],{"class":257},"\".,!?;:",[142,170238,156504],{"class":201},[142,170240,170241],{"class":257},"'()[]\"",[142,170243,159],{"class":152},[142,170245,170246,170248,170250],{"class":144,"line":1640},[142,170247,3129],{"class":148},[142,170249,38959],{"class":148},[142,170251,170252],{"class":152}," word:\n",[142,170254,170255],{"class":144,"line":1645},[142,170256,148521],{"class":148},[142,170258,170259,170262,170264,170267,170269,170271,170273],{"class":144,"line":1651},[142,170260,170261],{"class":152},"    counter[word] ",[142,170263,198],{"class":148},[142,170265,170266],{"class":152}," counter.get(word, ",[142,170268,344],{"class":201},[142,170270,13743],{"class":152},[142,170272,634],{"class":148},[142,170274,55728],{"class":201},[142,170276,170277],{"class":144,"line":1656},[142,170278,2428],{"emptyLinePlaceholder":69},[142,170280,170281,170284,170286,170288,170291,170293,170295,170297,170299,170301,170303,170305,170307],{"class":144,"line":1670},[142,170282,170283],{"class":152},"items ",[142,170285,198],{"class":148},[142,170287,163613],{"class":201},[142,170289,170290],{"class":152},"(counter.items(), ",[142,170292,153955],{"class":5245},[142,170294,153958],{"class":148},[142,170296,153961],{"class":152},[142,170298,370],{"class":201},[142,170300,112211],{"class":152},[142,170302,163537],{"class":5245},[142,170304,198],{"class":148},[142,170306,31505],{"class":201},[142,170308,159],{"class":152},[142,170310,170311],{"class":144,"line":1675},[142,170312,2428],{"emptyLinePlaceholder":69},[142,170314,170315,170317,170320,170322,170325,170327],{"class":144,"line":1681},[142,170316,3053],{"class":148},[142,170318,170319],{"class":152}," word, count ",[142,170321,26072],{"class":148},[142,170323,170324],{"class":152}," items[:",[142,170326,599],{"class":201},[142,170328,165764],{"class":152},[142,170330,170331,170333],{"class":144,"line":1702},[142,170332,31328],{"class":201},[142,170334,170335],{"class":152},"(word, count)\n",[84,170337,170339],{"id":170338},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[133,170341,170343],{"className":30407,"code":170342,"language":30409,"meta":31,"style":31},"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",[139,170344,170345,170351,170361,170365,170377,170381,170385,170393,170403,170409,170413,170443,170453,170457,170461,170469,170499,170523,170527,170531,170539,170568,170573],{"__ignoreMap":31},[142,170346,170347,170349],{"class":144,"line":145},[142,170348,30421],{"class":148},[142,170350,147100],{"class":152},[142,170352,170353,170355,170357,170359],{"class":144,"line":64},[142,170354,30766],{"class":148},[142,170356,108320],{"class":152},[142,170358,30421],{"class":148},[142,170360,108325],{"class":152},[142,170362,170363],{"class":144,"line":1208},[142,170364,2428],{"emptyLinePlaceholder":69},[142,170366,170367,170369,170371,170373,170375],{"class":144,"line":1223},[142,170368,151833],{"class":201},[142,170370,13593],{"class":148},[142,170372,108554],{"class":152},[142,170374,151840],{"class":257},[142,170376,159],{"class":152},[142,170378,170379],{"class":144,"line":1229},[142,170380,2428],{"emptyLinePlaceholder":69},[142,170382,170383],{"class":144,"line":1243},[142,170384,2428],{"emptyLinePlaceholder":69},[142,170386,170387,170389,170391],{"class":144,"line":1249},[142,170388,31976],{"class":148},[142,170390,151857],{"class":1991},[142,170392,31982],{"class":152},[142,170394,170395,170397,170399,170401],{"class":144,"line":1340},[142,170396,3129],{"class":148},[142,170398,38959],{"class":148},[142,170400,151868],{"class":201},[142,170402,151871],{"class":152},[142,170404,170405,170407],{"class":144,"line":1346},[142,170406,14781],{"class":148},[142,170408,51867],{"class":152},[142,170410,170411],{"class":144,"line":1358},[142,170412,2428],{"emptyLinePlaceholder":69},[142,170414,170415,170417,170419,170421,170423,170425,170427,170429,170431,170433,170435,170437,170439,170441],{"class":144,"line":1640},[142,170416,34207],{"class":148},[142,170418,146800],{"class":201},[142,170420,153],{"class":152},[142,170422,151833],{"class":201},[142,170424,12464],{"class":152},[142,170426,146810],{"class":257},[142,170428,12464],{"class":152},[142,170430,146815],{"class":5245},[142,170432,198],{"class":148},[142,170434,146820],{"class":257},[142,170436,13743],{"class":152},[142,170438,31412],{"class":148},[142,170440,148162],{"class":5245},[142,170442,3767],{"class":152},[142,170444,170445,170447,170449,170451],{"class":144,"line":1645},[142,170446,14781],{"class":148},[142,170448,148173],{"class":152},[142,170450,45383],{"class":5245},[142,170452,159],{"class":152},[142,170454,170455],{"class":144,"line":1651},[142,170456,2428],{"emptyLinePlaceholder":69},[142,170458,170459],{"class":144,"line":1656},[142,170460,2428],{"emptyLinePlaceholder":69},[142,170462,170463,170465,170467],{"class":144,"line":1670},[142,170464,31976],{"class":148},[142,170466,151967],{"class":1991},[142,170468,151970],{"class":152},[142,170470,170471,170473,170475,170477,170479,170481,170483,170485,170487,170489,170491,170493,170495,170497],{"class":144,"line":1675},[142,170472,34207],{"class":148},[142,170474,146800],{"class":201},[142,170476,153],{"class":152},[142,170478,151833],{"class":201},[142,170480,12464],{"class":152},[142,170482,151985],{"class":257},[142,170484,12464],{"class":152},[142,170486,146815],{"class":5245},[142,170488,198],{"class":148},[142,170490,146820],{"class":257},[142,170492,13743],{"class":152},[142,170494,31412],{"class":148},[142,170496,148162],{"class":5245},[142,170498,3767],{"class":152},[142,170500,170501,170503,170505,170507,170509,170511,170513,170515,170517,170519,170521],{"class":144,"line":1681},[142,170502,152006],{"class":152},[142,170504,45383],{"class":5245},[142,170506,12464],{"class":152},[142,170508,147146],{"class":5245},[142,170510,198],{"class":148},[142,170512,34016],{"class":201},[142,170514,12464],{"class":152},[142,170516,152021],{"class":5245},[142,170518,198],{"class":148},[142,170520,230],{"class":201},[142,170522,159],{"class":152},[142,170524,170525],{"class":144,"line":1702},[142,170526,2428],{"emptyLinePlaceholder":69},[142,170528,170529],{"class":144,"line":1707},[142,170530,2428],{"emptyLinePlaceholder":69},[142,170532,170533,170535,170537],{"class":144,"line":1721},[142,170534,159725],{"class":152},[142,170536,198],{"class":148},[142,170538,153051],{"class":152},[142,170540,170541,170544,170546,170548,170550,170552,170554,170556,170558,170560,170562,170564,170566],{"class":144,"line":1726},[142,170542,170543],{"class":152},"students.append({",[142,170545,62708],{"class":257},[142,170547,51466],{"class":152},[142,170549,149897],{"class":257},[142,170551,12464],{"class":152},[142,170553,69153],{"class":257},[142,170555,51466],{"class":152},[142,170557,803],{"class":201},[142,170559,12464],{"class":152},[142,170561,151481],{"class":257},[142,170563,51466],{"class":152},[142,170565,1142],{"class":201},[142,170567,165161],{"class":152},[142,170569,170570],{"class":144,"line":1755},[142,170571,170572],{"class":152},"save_students(students)\n",[142,170574,170575,170577,170579,170582],{"class":144,"line":1760},[142,170576,30444],{"class":201},[142,170578,153],{"class":152},[142,170580,170581],{"class":257},"\"保存成功\"",[142,170583,159],{"class":152},[84,170585,170587],{"id":170586},"_814-易错点","8.14 易错点",[96,170589,170590,170594,170600,170605,170612,170619],{},[99,170591,170592,168853],{},[139,170593,948],{},[99,170595,170596,170597,28414],{},"读写中文要指定 ",[139,170598,170599],{},"encoding=\"utf-8\"",[99,170601,170602,170603,28414],{},"打开文件后要关闭，推荐使用 ",[139,170604,107842],{},[99,170606,170607,170608,170611],{},"读取大文件不要直接 ",[139,170609,170610],{},"read()"," 全部内容。",[99,170613,170614,170615,170618],{},"Windows 写 CSV 时建议加 ",[139,170616,170617],{},"newline=\"\"","，避免空行。",[99,170620,170621],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[84,170623,170625],{"id":170624},"_815-本章练习","8.15 本章练习",[96,170627,170628,170635,170640,170643,170646],{},[99,170629,170630,170631,170634],{},"写入一个 ",[139,170632,170633],{},"students.txt","，每行保存一个学生姓名。",[99,170636,104364,170637,170639],{},[139,170638,170633],{}," 并输出所有学生。",[99,170641,170642],{},"把学生列表保存为 JSON 文件。",[99,170644,170645],{},"从 JSON 文件读取学生数据，计算平均分。",[99,170647,170648,170649,170652,170653,170656],{},"写一个日志函数 ",[139,170650,170651],{},"write_log(message)","，每次调用向 ",[139,170654,170655],{},"app.log"," 追加一行。",[5155,170658,170659],{},"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":31,"searchDepth":64,"depth":64,"links":170661},[170662,170663,170667,170668,170674,170675,170676,170677,170678,170679,170680,170681,170682,170683,170684],{"id":168173,"depth":64,"text":168174},{"id":168214,"depth":64,"text":168215,"children":170664},[170665,170666],{"id":168218,"depth":1208,"text":168219},{"id":168252,"depth":1208,"text":168253},{"id":168366,"depth":64,"text":168367},{"id":168459,"depth":64,"text":168460,"children":170669},[170670,170671,170672,170673],{"id":168463,"depth":1208,"text":168464},{"id":168550,"depth":1208,"text":168551},{"id":168620,"depth":1208,"text":168621},{"id":168714,"depth":1208,"text":168715},{"id":168784,"depth":64,"text":168785},{"id":168847,"depth":64,"text":168848},{"id":169008,"depth":64,"text":169009},{"id":169071,"depth":64,"text":169072},{"id":169187,"depth":64,"text":169188},{"id":169397,"depth":64,"text":169398},{"id":169709,"depth":64,"text":169710},{"id":170120,"depth":64,"text":170121},{"id":170338,"depth":64,"text":170339},{"id":170586,"depth":64,"text":170587},{"id":170624,"depth":64,"text":170625},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168165,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170691,"title":170692,"body":170693,"description":66,"extension":67,"meta":172879,"navigation":69,"path":172880,"seo":172881,"stem":172882,"__hash__":172883},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170694,"toc":172846},[170695,170698,170702,170705,170708,170800,170802,170821,170826,170830,170833,170836,170865,170872,170875,170879,170882,170911,170913,170965,170971,171024,171028,171126,171129,171196,171200,171257,171259,171265,171269,171274,171280,171371,171376,171380,171383,171461,171464,171502,171506,171624,171627,171631,171634,171679,171682,171686,171691,171697,171747,171750,171781,171785,171789,171819,171823,171858,171862,171897,171937,171941,171957,171960,171964,171968,172047,172051,172092,172096,172151,172155,172189,172193,172223,172232,172239,172245,172302,172305,172313,172316,172320,172327,172330,172336,172339,172356,172361,172365,172371,172384,172387,172424,172427,172438,172441,172455,172458,172472,172476,172483,172516,172519,172521,172527,172530,172534,172536,172542,172547,172720,172724,172787,172791,172815,172819,172843],[10,170696,170692],{"id":170697},"_9-异常模块与包",[84,170699,170701],{"id":170700},"_91-什么是异常","9.1 什么是异常",[14,170703,170704],{},"异常是程序运行过程中出现的错误。",[14,170706,170707],{},"常见异常：",[290,170709,170710,170719],{},[293,170711,170712],{},[296,170713,170714,170717],{},[299,170715,170716],{},"异常",[299,170718,25898],{},[337,170720,170721,170731,170741,170750,170760,170770,170780,170790],{},[296,170722,170723,170728],{},[342,170724,170725],{},[139,170726,170727],{},"NameError",[342,170729,170730],{},"使用了未定义变量",[296,170732,170733,170738],{},[342,170734,170735],{},[139,170736,170737],{},"TypeError",[342,170739,170740],{},"类型不匹配",[296,170742,170743,170747],{},[342,170744,170745],{},[139,170746,154843],{},[342,170748,170749],{},"值不合法",[296,170751,170752,170757],{},[342,170753,170754],{},[139,170755,170756],{},"IndexError",[342,170758,170759],{},"列表索引越界",[296,170761,170762,170767],{},[342,170763,170764],{},[139,170765,170766],{},"KeyError",[342,170768,170769],{},"字典 key 不存在",[296,170771,170772,170777],{},[342,170773,170774],{},[139,170775,170776],{},"FileNotFoundError",[342,170778,170779],{},"文件不存在",[296,170781,170782,170787],{},[342,170783,170784],{},[139,170785,170786],{},"ZeroDivisionError",[342,170788,170789],{},"除数为 0",[296,170791,170792,170797],{},[342,170793,170794],{},[139,170795,170796],{},"ImportError",[342,170798,170799],{},"导入失败",[14,170801,15164],{},[133,170803,170805],{"className":30407,"code":170804,"language":30409,"meta":31,"style":31},"num = int(\"abc\")\n",[139,170806,170807],{"__ignoreMap":31},[142,170808,170809,170811,170813,170815,170817,170819],{"class":144,"line":145},[142,170810,155796],{"class":152},[142,170812,198],{"class":148},[142,170814,2410],{"class":201},[142,170816,153],{"class":152},[142,170818,155889],{"class":257},[142,170820,159],{"class":152},[14,170822,170823,170824,28414],{},"会触发 ",[139,170825,154843],{},[84,170827,170829],{"id":170828},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170831,170832],{},"如果不处理异常，程序会直接终止。",[14,170834,170835],{},"例如用户输入年龄：",[133,170837,170839],{"className":30407,"code":170838,"language":30409,"meta":31,"style":31},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[139,170840,170841,170859],{"__ignoreMap":31},[142,170842,170843,170845,170847,170849,170851,170853,170855,170857],{"class":144,"line":145},[142,170844,146555],{"class":152},[142,170846,198],{"class":148},[142,170848,2410],{"class":201},[142,170850,153],{"class":152},[142,170852,53850],{"class":201},[142,170854,153],{"class":152},[142,170856,152403],{"class":257},[142,170858,30526],{"class":152},[142,170860,170861,170863],{"class":144,"line":64},[142,170862,30444],{"class":201},[142,170864,155770],{"class":152},[14,170866,170867,170868,170871],{},"用户输入 ",[139,170869,170870],{},"abc","，程序就会报错退出。",[14,170873,170874],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[84,170876,170878],{"id":170877},"_93-try-except","9.3 try except",[14,170880,170881],{},"基础语法：",[133,170883,170885],{"className":30407,"code":170884,"language":30409,"meta":31,"style":31},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[139,170886,170887,170894,170899,170906],{"__ignoreMap":31},[142,170888,170889,170892],{"class":144,"line":145},[142,170890,170891],{"class":148},"try",[142,170893,3767],{"class":152},[142,170895,170896],{"class":144,"line":64},[142,170897,170898],{"class":152},"    可能出错的代码\n",[142,170900,170901,170904],{"class":144,"line":1208},[142,170902,170903],{"class":148},"except",[142,170905,3767],{"class":152},[142,170907,170908],{"class":144,"line":1223},[142,170909,170910],{"class":152},"    出错后的处理代码\n",[14,170912,15164],{},[133,170914,170916],{"className":30407,"code":170915,"language":30409,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[139,170917,170918,170924,170942,170948,170954],{"__ignoreMap":31},[142,170919,170920,170922],{"class":144,"line":145},[142,170921,170891],{"class":148},[142,170923,3767],{"class":152},[142,170925,170926,170928,170930,170932,170934,170936,170938,170940],{"class":144,"line":64},[142,170927,152395],{"class":152},[142,170929,198],{"class":148},[142,170931,2410],{"class":201},[142,170933,153],{"class":152},[142,170935,53850],{"class":201},[142,170937,153],{"class":152},[142,170939,152403],{"class":257},[142,170941,30526],{"class":152},[142,170943,170944,170946],{"class":144,"line":1208},[142,170945,31328],{"class":201},[142,170947,155770],{"class":152},[142,170949,170950,170952],{"class":144,"line":1223},[142,170951,170903],{"class":148},[142,170953,3767],{"class":152},[142,170955,170956,170958,170960,170963],{"class":144,"line":1229},[142,170957,31328],{"class":201},[142,170959,153],{"class":152},[142,170961,170962],{"class":257},"\"年龄必须是数字\"",[142,170964,159],{"class":152},[14,170966,170967,170968,170970],{},"不建议裸写 ",[139,170969,170903],{},"，最好指定异常类型。",[133,170972,170974],{"className":30407,"code":170973,"language":30409,"meta":31,"style":31},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[139,170975,170976,170982,171000,171006,171014],{"__ignoreMap":31},[142,170977,170978,170980],{"class":144,"line":145},[142,170979,170891],{"class":148},[142,170981,3767],{"class":152},[142,170983,170984,170986,170988,170990,170992,170994,170996,170998],{"class":144,"line":64},[142,170985,152395],{"class":152},[142,170987,198],{"class":148},[142,170989,2410],{"class":201},[142,170991,153],{"class":152},[142,170993,53850],{"class":201},[142,170995,153],{"class":152},[142,170997,152403],{"class":257},[142,170999,30526],{"class":152},[142,171001,171002,171004],{"class":144,"line":1208},[142,171003,31328],{"class":201},[142,171005,155770],{"class":152},[142,171007,171008,171010,171012],{"class":144,"line":1223},[142,171009,170903],{"class":148},[142,171011,152235],{"class":201},[142,171013,3767],{"class":152},[142,171015,171016,171018,171020,171022],{"class":144,"line":1229},[142,171017,31328],{"class":201},[142,171019,153],{"class":152},[142,171021,170962],{"class":257},[142,171023,159],{"class":152},[84,171025,171027],{"id":171026},"_94-捕获多个异常","9.4 捕获多个异常",[133,171029,171031],{"className":30407,"code":171030,"language":30409,"meta":31,"style":31},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[139,171032,171033,171039,171060,171080,171087,171095,171106,171115],{"__ignoreMap":31},[142,171034,171035,171037],{"class":144,"line":145},[142,171036,170891],{"class":148},[142,171038,3767],{"class":152},[142,171040,171041,171044,171046,171048,171050,171052,171054,171056,171058],{"class":144,"line":64},[142,171042,171043],{"class":152},"    nums ",[142,171045,198],{"class":148},[142,171047,52255],{"class":152},[142,171049,370],{"class":201},[142,171051,12464],{"class":152},[142,171053,230],{"class":201},[142,171055,12464],{"class":152},[142,171057,224],{"class":201},[142,171059,33275],{"class":152},[142,171061,171062,171065,171067,171069,171071,171073,171075,171078],{"class":144,"line":1208},[142,171063,171064],{"class":152},"    index ",[142,171066,198],{"class":148},[142,171068,2410],{"class":201},[142,171070,153],{"class":152},[142,171072,53850],{"class":201},[142,171074,153],{"class":152},[142,171076,171077],{"class":257},"\"请输入索引:\"",[142,171079,30526],{"class":152},[142,171081,171082,171084],{"class":144,"line":1223},[142,171083,31328],{"class":201},[142,171085,171086],{"class":152},"(nums[index])\n",[142,171088,171089,171091,171093],{"class":144,"line":1229},[142,171090,170903],{"class":148},[142,171092,152235],{"class":201},[142,171094,3767],{"class":152},[142,171096,171097,171099,171101,171104],{"class":144,"line":1243},[142,171098,31328],{"class":201},[142,171100,153],{"class":152},[142,171102,171103],{"class":257},"\"索引必须是整数\"",[142,171105,159],{"class":152},[142,171107,171108,171110,171113],{"class":144,"line":1249},[142,171109,170903],{"class":148},[142,171111,171112],{"class":201}," IndexError",[142,171114,3767],{"class":152},[142,171116,171117,171119,171121,171124],{"class":144,"line":1340},[142,171118,31328],{"class":201},[142,171120,153],{"class":152},[142,171122,171123],{"class":257},"\"索引越界\"",[142,171125,159],{"class":152},[14,171127,171128],{},"多个异常使用相同处理逻辑：",[133,171130,171132],{"className":30407,"code":171131,"language":30409,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[139,171133,171134,171140,171158,171171,171185],{"__ignoreMap":31},[142,171135,171136,171138],{"class":144,"line":145},[142,171137,170891],{"class":148},[142,171139,3767],{"class":152},[142,171141,171142,171144,171146,171148,171150,171152,171154,171156],{"class":144,"line":64},[142,171143,45622],{"class":152},[142,171145,198],{"class":148},[142,171147,2410],{"class":201},[142,171149,153],{"class":152},[142,171151,53850],{"class":201},[142,171153,153],{"class":152},[142,171155,155805],{"class":257},[142,171157,30526],{"class":152},[142,171159,171160,171162,171164,171166,171168],{"class":144,"line":1208},[142,171161,31328],{"class":201},[142,171163,153],{"class":152},[142,171165,599],{"class":201},[142,171167,156055],{"class":148},[142,171169,171170],{"class":152}," num)\n",[142,171172,171173,171175,171177,171179,171181,171183],{"class":144,"line":1223},[142,171174,170903],{"class":148},[142,171176,1686],{"class":152},[142,171178,154843],{"class":201},[142,171180,12464],{"class":152},[142,171182,170786],{"class":201},[142,171184,30815],{"class":152},[142,171186,171187,171189,171191,171194],{"class":144,"line":1229},[142,171188,31328],{"class":201},[142,171190,153],{"class":152},[142,171192,171193],{"class":257},"\"输入不合法\"",[142,171195,159],{"class":152},[84,171197,171199],{"id":171198},"_95-获取异常信息","9.5 获取异常信息",[133,171201,171203],{"className":30407,"code":171202,"language":30409,"meta":31,"style":31},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[139,171204,171205,171211,171225,171236],{"__ignoreMap":31},[142,171206,171207,171209],{"class":144,"line":145},[142,171208,170891],{"class":148},[142,171210,3767],{"class":152},[142,171212,171213,171215,171217,171219,171221,171223],{"class":144,"line":64},[142,171214,45622],{"class":152},[142,171216,198],{"class":148},[142,171218,2410],{"class":201},[142,171220,153],{"class":152},[142,171222,155889],{"class":257},[142,171224,159],{"class":152},[142,171226,171227,171229,171231,171233],{"class":144,"line":1208},[142,171228,170903],{"class":148},[142,171230,152235],{"class":201},[142,171232,64633],{"class":148},[142,171234,171235],{"class":152}," e:\n",[142,171237,171238,171240,171242,171244,171247,171249,171251,171253,171255],{"class":144,"line":1223},[142,171239,31328],{"class":201},[142,171241,153],{"class":152},[142,171243,205],{"class":148},[142,171245,171246],{"class":257},"\"出错了:",[142,171248,1049],{"class":201},[142,171250,227],{"class":152},[142,171252,1099],{"class":201},[142,171254,404],{"class":257},[142,171256,159],{"class":152},[14,171258,146466],{},[133,171260,171263],{"className":171261,"code":171262,"language":5216,"meta":31},[5214],"出错了:invalid literal for int() with base 10: 'abc'\n",[139,171264,171262],{"__ignoreMap":31},[84,171266,171268],{"id":171267},"_96-else和finally","9.6 else和finally",[14,171270,171271,171273],{},[139,171272,1729],{},"：没有异常时执行。",[14,171275,171276,171279],{},[139,171277,171278],{},"finally","：无论是否异常都会执行。",[133,171281,171283],{"className":30407,"code":171282,"language":30409,"meta":31,"style":31},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[139,171284,171285,171291,171309,171317,171327,171333,171354,171360],{"__ignoreMap":31},[142,171286,171287,171289],{"class":144,"line":145},[142,171288,170891],{"class":148},[142,171290,3767],{"class":152},[142,171292,171293,171295,171297,171299,171301,171303,171305,171307],{"class":144,"line":64},[142,171294,45622],{"class":152},[142,171296,198],{"class":148},[142,171298,2410],{"class":201},[142,171300,153],{"class":152},[142,171302,53850],{"class":201},[142,171304,153],{"class":152},[142,171306,155805],{"class":257},[142,171308,30526],{"class":152},[142,171310,171311,171313,171315],{"class":144,"line":1208},[142,171312,170903],{"class":148},[142,171314,152235],{"class":201},[142,171316,3767],{"class":152},[142,171318,171319,171321,171323,171325],{"class":144,"line":1223},[142,171320,31328],{"class":201},[142,171322,153],{"class":152},[142,171324,153223],{"class":257},[142,171326,159],{"class":152},[142,171328,171329,171331],{"class":144,"line":1229},[142,171330,1729],{"class":148},[142,171332,3767],{"class":152},[142,171334,171335,171337,171339,171341,171344,171346,171348,171350,171352],{"class":144,"line":1243},[142,171336,31328],{"class":201},[142,171338,153],{"class":152},[142,171340,205],{"class":148},[142,171342,171343],{"class":257},"\"输入正确:",[142,171345,1049],{"class":201},[142,171347,1693],{"class":152},[142,171349,1099],{"class":201},[142,171351,404],{"class":257},[142,171353,159],{"class":152},[142,171355,171356,171358],{"class":144,"line":1249},[142,171357,171278],{"class":148},[142,171359,3767],{"class":152},[142,171361,171362,171364,171366,171369],{"class":144,"line":1340},[142,171363,31328],{"class":201},[142,171365,153],{"class":152},[142,171367,171368],{"class":257},"\"程序结束\"",[142,171370,159],{"class":152},[14,171372,171373,171375],{},[139,171374,171278],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[84,171377,171379],{"id":171378},"_97-抛出异常","9.7 抛出异常",[14,171381,171382],{},"程序可以主动抛出异常。",[133,171384,171386],{"className":30407,"code":171385,"language":30409,"meta":31,"style":31},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[139,171387,171388,171397,171409,171422,171442,171446,171450],{"__ignoreMap":31},[142,171389,171390,171392,171395],{"class":144,"line":145},[142,171391,31976],{"class":148},[142,171393,171394],{"class":1991}," set_age",[142,171396,161424],{"class":152},[142,171398,171399,171401,171403,171405,171407],{"class":144,"line":64},[142,171400,3129],{"class":148},[142,171402,15736],{"class":152},[142,171404,1063],{"class":148},[142,171406,4121],{"class":201},[142,171408,3767],{"class":152},[142,171410,171411,171413,171415,171417,171420],{"class":144,"line":1208},[142,171412,103441],{"class":148},[142,171414,152235],{"class":201},[142,171416,153],{"class":152},[142,171418,171419],{"class":257},"\"年龄不能为负数\"",[142,171421,159],{"class":152},[142,171423,171424,171426,171428,171430,171432,171434,171436,171438,171440],{"class":144,"line":1223},[142,171425,31328],{"class":201},[142,171427,153],{"class":152},[142,171429,205],{"class":148},[142,171431,161992],{"class":257},[142,171433,1049],{"class":201},[142,171435,70250],{"class":152},[142,171437,1099],{"class":201},[142,171439,404],{"class":257},[142,171441,159],{"class":152},[142,171443,171444],{"class":144,"line":1229},[142,171445,2428],{"emptyLinePlaceholder":69},[142,171447,171448],{"class":144,"line":1243},[142,171449,2428],{"emptyLinePlaceholder":69},[142,171451,171452,171455,171457,171459],{"class":144,"line":1249},[142,171453,171454],{"class":152},"set_age(",[142,171456,685],{"class":148},[142,171458,370],{"class":201},[142,171460,159],{"class":152},[14,171462,171463],{},"调用者可以捕获：",[133,171465,171467],{"className":30407,"code":171466,"language":30409,"meta":31,"style":31},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[139,171468,171469,171475,171486,171496],{"__ignoreMap":31},[142,171470,171471,171473],{"class":144,"line":145},[142,171472,170891],{"class":148},[142,171474,3767],{"class":152},[142,171476,171477,171480,171482,171484],{"class":144,"line":64},[142,171478,171479],{"class":152},"    set_age(",[142,171481,685],{"class":148},[142,171483,370],{"class":201},[142,171485,159],{"class":152},[142,171487,171488,171490,171492,171494],{"class":144,"line":1208},[142,171489,170903],{"class":148},[142,171491,152235],{"class":201},[142,171493,64633],{"class":148},[142,171495,171235],{"class":152},[142,171497,171498,171500],{"class":144,"line":1223},[142,171499,31328],{"class":201},[142,171501,67028],{"class":152},[84,171503,171505],{"id":171504},"_98-自定义异常","9.8 自定义异常",[133,171507,171509],{"className":30407,"code":171508,"language":30409,"meta":31,"style":31},"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",[139,171510,171511,171525,171529,171533,171537,171545,171555,171566,171576,171580,171584,171590,171607,171618],{"__ignoreMap":31},[142,171512,171513,171515,171518,171520,171523],{"class":144,"line":145},[142,171514,14723],{"class":148},[142,171516,171517],{"class":1991}," BalanceNotEnoughError",[142,171519,153],{"class":152},[142,171521,171522],{"class":201},"Exception",[142,171524,30815],{"class":152},[142,171526,171527],{"class":144,"line":64},[142,171528,149546],{"class":148},[142,171530,171531],{"class":144,"line":1208},[142,171532,2428],{"emptyLinePlaceholder":69},[142,171534,171535],{"class":144,"line":1223},[142,171536,2428],{"emptyLinePlaceholder":69},[142,171538,171539,171541,171543],{"class":144,"line":1229},[142,171540,31976],{"class":148},[142,171542,150195],{"class":1991},[142,171544,162821],{"class":152},[142,171546,171547,171549,171551,171553],{"class":144,"line":1243},[142,171548,3129],{"class":148},[142,171550,150151],{"class":152},[142,171552,1113],{"class":148},[142,171554,162598],{"class":152},[142,171556,171557,171559,171562,171564],{"class":144,"line":1249},[142,171558,103441],{"class":148},[142,171560,171561],{"class":152}," BalanceNotEnoughError(",[142,171563,150246],{"class":257},[142,171565,159],{"class":152},[142,171567,171568,171570,171572,171574],{"class":144,"line":1340},[142,171569,4118],{"class":148},[142,171571,162828],{"class":152},[142,171573,685],{"class":148},[142,171575,150184],{"class":152},[142,171577,171578],{"class":144,"line":1346},[142,171579,2428],{"emptyLinePlaceholder":69},[142,171581,171582],{"class":144,"line":1358},[142,171583,2428],{"emptyLinePlaceholder":69},[142,171585,171586,171588],{"class":144,"line":1640},[142,171587,170891],{"class":148},[142,171589,3767],{"class":152},[142,171591,171592,171594,171596,171599,171601,171603,171605],{"class":144,"line":1645},[142,171593,162499],{"class":152},[142,171595,198],{"class":148},[142,171597,171598],{"class":152}," withdraw(",[142,171600,464],{"class":201},[142,171602,12464],{"class":152},[142,171604,1750],{"class":201},[142,171606,159],{"class":152},[142,171608,171609,171611,171614,171616],{"class":144,"line":1651},[142,171610,170903],{"class":148},[142,171612,171613],{"class":152}," BalanceNotEnoughError ",[142,171615,31412],{"class":148},[142,171617,171235],{"class":152},[142,171619,171620,171622],{"class":144,"line":1656},[142,171621,31328],{"class":201},[142,171623,67028],{"class":152},[14,171625,171626],{},"入门阶段大多数情况使用内置异常即可。",[84,171628,171630],{"id":171629},"_99-traceback","9.9 traceback",[14,171632,171633],{},"调试时可以输出完整异常堆栈。",[133,171635,171637],{"className":30407,"code":171636,"language":30409,"meta":31,"style":31},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[139,171638,171639,171646,171650,171656,171666,171674],{"__ignoreMap":31},[142,171640,171641,171643],{"class":144,"line":145},[142,171642,30421],{"class":148},[142,171644,171645],{"class":152}," traceback\n",[142,171647,171648],{"class":144,"line":64},[142,171649,2428],{"emptyLinePlaceholder":69},[142,171651,171652,171654],{"class":144,"line":1208},[142,171653,170891],{"class":148},[142,171655,3767],{"class":152},[142,171657,171658,171660,171662,171664],{"class":144,"line":1223},[142,171659,2013],{"class":201},[142,171661,153],{"class":152},[142,171663,155889],{"class":257},[142,171665,159],{"class":152},[142,171667,171668,171670,171672],{"class":144,"line":1229},[142,171669,170903],{"class":148},[142,171671,152235],{"class":201},[142,171673,3767],{"class":152},[142,171675,171676],{"class":144,"line":1243},[142,171677,171678],{"class":152},"    traceback.print_exc()\n",[14,171680,171681],{},"日志系统中常把异常堆栈记录到文件。",[84,171683,171685],{"id":171684},"_910-什么是模块","9.10 什么是模块",[14,171687,171688,171689,125992],{},"模块就是一个 ",[139,171690,146361],{},[14,171692,171693,171694,24647],{},"例如创建 ",[139,171695,171696],{},"my_math.py",[133,171698,171700],{"className":30407,"code":171699,"language":30409,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[139,171701,171702,171710,171720,171724,171728,171737],{"__ignoreMap":31},[142,171703,171704,171706,171708],{"class":144,"line":145},[142,171705,31976],{"class":148},[142,171707,5238],{"class":1991},[142,171709,151102],{"class":152},[142,171711,171712,171714,171716,171718],{"class":144,"line":64},[142,171713,4118],{"class":148},[142,171715,10898],{"class":152},[142,171717,634],{"class":148},[142,171719,151113],{"class":152},[142,171721,171722],{"class":144,"line":1208},[142,171723,2428],{"emptyLinePlaceholder":69},[142,171725,171726],{"class":144,"line":1223},[142,171727,2428],{"emptyLinePlaceholder":69},[142,171729,171730,171732,171735],{"class":144,"line":1229},[142,171731,31976],{"class":148},[142,171733,171734],{"class":1991}," sub",[142,171736,151102],{"class":152},[142,171738,171739,171741,171743,171745],{"class":144,"line":1243},[142,171740,4118],{"class":148},[142,171742,10898],{"class":152},[142,171744,685],{"class":148},[142,171746,151113],{"class":152},[14,171748,171749],{},"在另一个文件中导入：",[133,171751,171753],{"className":30407,"code":171752,"language":30409,"meta":31,"style":31},"import my_math\n\nprint(my_math.add(1, 2))\n",[139,171754,171755,171762,171766],{"__ignoreMap":31},[142,171756,171757,171759],{"class":144,"line":145},[142,171758,30421],{"class":148},[142,171760,171761],{"class":152}," my_math\n",[142,171763,171764],{"class":144,"line":64},[142,171765,2428],{"emptyLinePlaceholder":69},[142,171767,171768,171770,171773,171775,171777,171779],{"class":144,"line":1208},[142,171769,30444],{"class":201},[142,171771,171772],{"class":152},"(my_math.add(",[142,171774,370],{"class":201},[142,171776,12464],{"class":152},[142,171778,230],{"class":201},[142,171780,30526],{"class":152},[84,171782,171784],{"id":171783},"_911-import导入","9.11 import导入",[113,171786,171788],{"id":171787},"_9111-导入模块","9.11.1 导入模块",[133,171790,171792],{"className":30407,"code":171791,"language":30409,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\n",[139,171793,171794,171800,171804],{"__ignoreMap":31},[142,171795,171796,171798],{"class":144,"line":145},[142,171797,30421],{"class":148},[142,171799,45357],{"class":152},[142,171801,171802],{"class":144,"line":64},[142,171803,2428],{"emptyLinePlaceholder":69},[142,171805,171806,171808,171811,171813,171815,171817],{"class":144,"line":1208},[142,171807,30444],{"class":201},[142,171809,171810],{"class":152},"(random.randint(",[142,171812,370],{"class":201},[142,171814,12464],{"class":152},[142,171816,599],{"class":201},[142,171818,30526],{"class":152},[113,171820,171822],{"id":171821},"_9112-导入指定内容","9.11.2 导入指定内容",[133,171824,171826],{"className":30407,"code":171825,"language":30409,"meta":31,"style":31},"from random import randint\n\nprint(randint(1, 10))\n",[139,171827,171828,171839,171843],{"__ignoreMap":31},[142,171829,171830,171832,171834,171836],{"class":144,"line":145},[142,171831,30766],{"class":148},[142,171833,57825],{"class":152},[142,171835,30421],{"class":148},[142,171837,171838],{"class":152}," randint\n",[142,171840,171841],{"class":144,"line":64},[142,171842,2428],{"emptyLinePlaceholder":69},[142,171844,171845,171847,171850,171852,171854,171856],{"class":144,"line":1208},[142,171846,30444],{"class":201},[142,171848,171849],{"class":152},"(randint(",[142,171851,370],{"class":201},[142,171853,12464],{"class":152},[142,171855,599],{"class":201},[142,171857,30526],{"class":152},[113,171859,171861],{"id":171860},"_9113-起别名","9.11.3 起别名",[133,171863,171865],{"className":30407,"code":171864,"language":30409,"meta":31,"style":31},"import random as rd\n\nprint(rd.randint(1, 10))\n",[139,171866,171867,171878,171882],{"__ignoreMap":31},[142,171868,171869,171871,171873,171875],{"class":144,"line":145},[142,171870,30421],{"class":148},[142,171872,57825],{"class":152},[142,171874,31412],{"class":148},[142,171876,171877],{"class":152}," rd\n",[142,171879,171880],{"class":144,"line":64},[142,171881,2428],{"emptyLinePlaceholder":69},[142,171883,171884,171886,171889,171891,171893,171895],{"class":144,"line":1208},[142,171885,30444],{"class":201},[142,171887,171888],{"class":152},"(rd.randint(",[142,171890,370],{"class":201},[142,171892,12464],{"class":152},[142,171894,599],{"class":201},[142,171896,30526],{"class":152},[133,171898,171900],{"className":30407,"code":171899,"language":30409,"meta":31,"style":31},"from random import randint as rint\n\nprint(rint(1, 10))\n",[139,171901,171902,171918,171922],{"__ignoreMap":31},[142,171903,171904,171906,171908,171910,171913,171915],{"class":144,"line":145},[142,171905,30766],{"class":148},[142,171907,57825],{"class":152},[142,171909,30421],{"class":148},[142,171911,171912],{"class":152}," randint ",[142,171914,31412],{"class":148},[142,171916,171917],{"class":152}," rint\n",[142,171919,171920],{"class":144,"line":64},[142,171921,2428],{"emptyLinePlaceholder":69},[142,171923,171924,171926,171929,171931,171933,171935],{"class":144,"line":1208},[142,171925,30444],{"class":201},[142,171927,171928],{"class":152},"(rint(",[142,171930,370],{"class":201},[142,171932,12464],{"class":152},[142,171934,599],{"class":201},[142,171936,30526],{"class":152},[113,171938,171940],{"id":171939},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[133,171942,171944],{"className":30407,"code":171943,"language":30409,"meta":31,"style":31},"from random import *\n",[139,171945,171946],{"__ignoreMap":31},[142,171947,171948,171950,171952,171954],{"class":144,"line":145},[142,171949,30766],{"class":148},[142,171951,57825],{"class":152},[142,171953,30421],{"class":148},[142,171955,171956],{"class":148}," *\n",[14,171958,171959],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[84,171961,171963],{"id":171962},"_912-常用内置模块","9.12 常用内置模块",[113,171965,171967],{"id":171966},"_9121-random","9.12.1 random",[133,171969,171971],{"className":30407,"code":171970,"language":30409,"meta":31,"style":31},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[139,171972,171973,171979,171983,171997,172016],{"__ignoreMap":31},[142,171974,171975,171977],{"class":144,"line":145},[142,171976,30421],{"class":148},[142,171978,45357],{"class":152},[142,171980,171981],{"class":144,"line":64},[142,171982,2428],{"emptyLinePlaceholder":69},[142,171984,171985,171987,171989,171991,171993,171995],{"class":144,"line":1208},[142,171986,30444],{"class":201},[142,171988,171810],{"class":152},[142,171990,370],{"class":201},[142,171992,12464],{"class":152},[142,171994,599],{"class":201},[142,171996,30526],{"class":152},[142,171998,171999,172001,172004,172006,172008,172010,172012,172014],{"class":144,"line":1223},[142,172000,30444],{"class":201},[142,172002,172003],{"class":152},"(random.choice([",[142,172005,149897],{"class":257},[142,172007,12464],{"class":152},[142,172009,150945],{"class":257},[142,172011,12464],{"class":152},[142,172013,159740],{"class":257},[142,172015,33172],{"class":152},[142,172017,172018,172020,172023,172025,172027,172029,172031,172033,172035,172037,172039,172041,172043,172045],{"class":144,"line":1229},[142,172019,30444],{"class":201},[142,172021,172022],{"class":152},"(random.sample([",[142,172024,370],{"class":201},[142,172026,12464],{"class":152},[142,172028,230],{"class":201},[142,172030,12464],{"class":152},[142,172032,224],{"class":201},[142,172034,12464],{"class":152},[142,172036,446],{"class":201},[142,172038,12464],{"class":152},[142,172040,472],{"class":201},[142,172042,112211],{"class":152},[142,172044,230],{"class":201},[142,172046,30526],{"class":152},[113,172048,172050],{"id":172049},"_9122-time","9.12.2 time",[133,172052,172054],{"className":30407,"code":172053,"language":30409,"meta":31,"style":31},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[139,172055,172056,172062,172066,172073,172081],{"__ignoreMap":31},[142,172057,172058,172060],{"class":144,"line":145},[142,172059,30421],{"class":148},[142,172061,31858],{"class":152},[142,172063,172064],{"class":144,"line":64},[142,172065,2428],{"emptyLinePlaceholder":69},[142,172067,172068,172070],{"class":144,"line":1208},[142,172069,30444],{"class":201},[142,172071,172072],{"class":152},"(time.time())\n",[142,172074,172075,172077,172079],{"class":144,"line":1223},[142,172076,95100],{"class":152},[142,172078,370],{"class":201},[142,172080,159],{"class":152},[142,172082,172083,172085,172087,172090],{"class":144,"line":1229},[142,172084,30444],{"class":201},[142,172086,153],{"class":152},[142,172088,172089],{"class":257},"\"1秒后执行\"",[142,172091,159],{"class":152},[113,172093,172095],{"id":172094},"_9123-datetime","9.12.3 datetime",[133,172097,172099],{"className":30407,"code":172098,"language":30409,"meta":31,"style":31},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[139,172100,172101,172113,172117,172127,172134],{"__ignoreMap":31},[142,172102,172103,172105,172108,172110],{"class":144,"line":145},[142,172104,30766],{"class":148},[142,172106,172107],{"class":152}," datetime ",[142,172109,30421],{"class":148},[142,172111,172112],{"class":152}," datetime\n",[142,172114,172115],{"class":144,"line":64},[142,172116,2428],{"emptyLinePlaceholder":69},[142,172118,172119,172122,172124],{"class":144,"line":1208},[142,172120,172121],{"class":152},"now ",[142,172123,198],{"class":148},[142,172125,172126],{"class":152}," datetime.now()\n",[142,172128,172129,172131],{"class":144,"line":1223},[142,172130,30444],{"class":201},[142,172132,172133],{"class":152},"(now)\n",[142,172135,172136,172138,172141,172144,172146,172149],{"class":144,"line":1229},[142,172137,30444],{"class":201},[142,172139,172140],{"class":152},"(now.strftime(",[142,172142,172143],{"class":257},"\"%Y-%m-",[142,172145,156700],{"class":201},[142,172147,172148],{"class":257}," %H:%M:%S\"",[142,172150,30526],{"class":152},[113,172152,172154],{"id":172153},"_9124-os","9.12.4 os",[133,172156,172158],{"className":30407,"code":172157,"language":30409,"meta":31,"style":31},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[139,172159,172160,172166,172170,172177],{"__ignoreMap":31},[142,172161,172162,172164],{"class":144,"line":145},[142,172163,30421],{"class":148},[142,172165,45334],{"class":152},[142,172167,172168],{"class":144,"line":64},[142,172169,2428],{"emptyLinePlaceholder":69},[142,172171,172172,172174],{"class":144,"line":1208},[142,172173,30444],{"class":201},[142,172175,172176],{"class":152},"(os.getcwd())\n",[142,172178,172179,172181,172184,172187],{"class":144,"line":1223},[142,172180,30444],{"class":201},[142,172182,172183],{"class":152},"(os.listdir(",[142,172185,172186],{"class":257},"\".\"",[142,172188,30526],{"class":152},[113,172190,172192],{"id":172191},"_9125-sys","9.12.5 sys",[133,172194,172196],{"className":30407,"code":172195,"language":30409,"meta":31,"style":31},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[139,172197,172198,172205,172209,172216],{"__ignoreMap":31},[142,172199,172200,172202],{"class":144,"line":145},[142,172201,30421],{"class":148},[142,172203,172204],{"class":152}," sys\n",[142,172206,172207],{"class":144,"line":64},[142,172208,2428],{"emptyLinePlaceholder":69},[142,172210,172211,172213],{"class":144,"line":1208},[142,172212,30444],{"class":201},[142,172214,172215],{"class":152},"(sys.version)\n",[142,172217,172218,172220],{"class":144,"line":1223},[142,172219,30444],{"class":201},[142,172221,172222],{"class":152},"(sys.path)\n",[84,172224,172226,172227,172229,172230,404],{"id":172225},"_913-if-name-main","9.13 if ",[302,172228,79839],{}," == \"",[302,172231,102067],{},[14,172233,172234,172235,172238],{},"模块被直接运行和被导入时，",[139,172236,172237],{},"__name__"," 的值不同。",[14,172240,172241,172242,24647],{},"创建 ",[139,172243,172244],{},"my_module.py",[133,172246,172248],{"className":30407,"code":172247,"language":30409,"meta":31,"style":31},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[139,172249,172250,172258,172268,172272,172276,172288],{"__ignoreMap":31},[142,172251,172252,172254,172256],{"class":144,"line":145},[142,172253,31976],{"class":148},[142,172255,5238],{"class":1991},[142,172257,151102],{"class":152},[142,172259,172260,172262,172264,172266],{"class":144,"line":64},[142,172261,4118],{"class":148},[142,172263,10898],{"class":152},[142,172265,634],{"class":148},[142,172267,151113],{"class":152},[142,172269,172270],{"class":144,"line":1208},[142,172271,2428],{"emptyLinePlaceholder":69},[142,172273,172274],{"class":144,"line":1223},[142,172275,2428],{"emptyLinePlaceholder":69},[142,172277,172278,172280,172282,172284,172286],{"class":144,"line":1229},[142,172279,1559],{"class":148},[142,172281,31249],{"class":201},[142,172283,101568],{"class":148},[142,172285,101571],{"class":257},[142,172287,3767],{"class":152},[142,172289,172290,172292,172294,172296,172298,172300],{"class":144,"line":1243},[142,172291,31328],{"class":201},[142,172293,166609],{"class":152},[142,172295,370],{"class":201},[142,172297,12464],{"class":152},[142,172299,230],{"class":201},[142,172301,30526],{"class":152},[14,172303,172304],{},"作用：",[96,172306,172307,172310],{},[99,172308,172309],{},"直接运行该文件时，执行测试代码。",[99,172311,172312],{},"被其他文件导入时，不执行测试代码。",[14,172314,172315],{},"这是写模块时很常用的习惯。",[84,172317,172319],{"id":172318},"_914-包","9.14 包",[14,172321,172322,172323,172326],{},"包是包含 ",[139,172324,172325],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172328,172329],{},"目录结构：",[133,172331,172334],{"className":172332,"code":172333,"language":5216,"meta":31},[5214],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[139,172335,172333],{"__ignoreMap":31},[14,172337,172338],{},"导入：",[133,172340,172342],{"className":30407,"code":172341,"language":30409,"meta":31,"style":31},"from utils.file_utils import read_file\n",[139,172343,172344],{"__ignoreMap":31},[142,172345,172346,172348,172351,172353],{"class":144,"line":145},[142,172347,30766],{"class":148},[142,172349,172350],{"class":152}," utils.file_utils ",[142,172352,30421],{"class":148},[142,172354,172355],{"class":152}," read_file\n",[14,172357,172358,172360],{},[139,172359,172325],{}," 可以为空，也可以写包初始化逻辑。",[84,172362,172364],{"id":172363},"_915-第三方包","9.15 第三方包",[14,172366,172367,172368,172370],{},"第三方包通过 ",[139,172369,23860],{}," 安装。",[133,172372,172374],{"className":23851,"code":172373,"language":23853,"meta":31,"style":31},"pip install requests\n",[139,172375,172376],{"__ignoreMap":31},[142,172377,172378,172380,172382],{"class":144,"line":145},[142,172379,23860],{"class":1991},[142,172381,23863],{"class":257},[142,172383,146107],{"class":257},[14,172385,172386],{},"使用：",[133,172388,172390],{"className":30407,"code":172389,"language":30409,"meta":31,"style":31},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[139,172391,172392,172398,172402,172417],{"__ignoreMap":31},[142,172393,172394,172396],{"class":144,"line":145},[142,172395,30421],{"class":148},[142,172397,146107],{"class":152},[142,172399,172400],{"class":144,"line":64},[142,172401,2428],{"emptyLinePlaceholder":69},[142,172403,172404,172407,172409,172412,172415],{"class":144,"line":1208},[142,172405,172406],{"class":152},"response ",[142,172408,198],{"class":148},[142,172410,172411],{"class":152}," requests.get(",[142,172413,172414],{"class":257},"\"https:\u002F\u002Fwww.example.com\"",[142,172416,159],{"class":152},[142,172418,172419,172421],{"class":144,"line":1223},[142,172420,30444],{"class":201},[142,172422,172423],{"class":152},"(response.status_code)\n",[14,172425,172426],{},"查看已安装包：",[133,172428,172430],{"className":23851,"code":172429,"language":23853,"meta":31,"style":31},"pip list\n",[139,172431,172432],{"__ignoreMap":31},[142,172433,172434,172436],{"class":144,"line":145},[142,172435,23860],{"class":1991},[142,172437,118964],{"class":257},[14,172439,172440],{},"导出项目依赖：",[133,172442,172443],{"className":23851,"code":146302,"language":23853,"meta":31,"style":31},[139,172444,172445],{"__ignoreMap":31},[142,172446,172447,172449,172451,172453],{"class":144,"line":145},[142,172448,23860],{"class":1991},[142,172450,146311],{"class":257},[142,172452,26251],{"class":148},[142,172454,146316],{"class":257},[14,172456,172457],{},"安装项目依赖：",[133,172459,172460],{"className":23851,"code":146322,"language":23853,"meta":31,"style":31},[139,172461,172462],{"__ignoreMap":31},[142,172463,172464,172466,172468,172470],{"class":144,"line":145},[142,172465,23860],{"class":1991},[142,172467,23863],{"class":257},[142,172469,119648],{"class":201},[142,172471,146316],{"class":257},[84,172473,172475],{"id":172474},"_916-模块搜索路径","9.16 模块搜索路径",[14,172477,172478,172479,172482],{},"Python 导入模块时会在 ",[139,172480,172481],{},"sys.path"," 中查找。",[133,172484,172486],{"className":30407,"code":172485,"language":30409,"meta":31,"style":31},"import sys\n\nfor path in sys.path:\n    print(path)\n",[139,172487,172488,172494,172498,172510],{"__ignoreMap":31},[142,172489,172490,172492],{"class":144,"line":145},[142,172491,30421],{"class":148},[142,172493,172204],{"class":152},[142,172495,172496],{"class":144,"line":64},[142,172497,2428],{"emptyLinePlaceholder":69},[142,172499,172500,172502,172505,172507],{"class":144,"line":1208},[142,172501,3053],{"class":148},[142,172503,172504],{"class":152}," path ",[142,172506,26072],{"class":148},[142,172508,172509],{"class":152}," sys.path:\n",[142,172511,172512,172514],{"class":144,"line":1223},[142,172513,31328],{"class":201},[142,172515,169238],{"class":152},[14,172517,172518],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172520,157632],{},[133,172522,172525],{"className":172523,"code":172524,"language":5216,"meta":31},[5214],"random.py\njson.py\ntime.py\n",[139,172526,172524],{"__ignoreMap":31},[14,172528,172529],{},"这些文件名可能导致导入异常。",[84,172531,172533],{"id":172532},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172535,172329],{},[133,172537,172540],{"className":172538,"code":172539,"language":5216,"meta":31},[5214],"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",[139,172541,172539],{"__ignoreMap":31},[14,172543,172544,24647],{},[139,172545,172546],{},"utils\u002Ffile_utils.py",[133,172548,172550],{"className":30407,"code":172549,"language":30409,"meta":31,"style":31},"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",[139,172551,172552,172558,172568,172572,172576,172586,172596,172604,172610,172614,172641,172651,172655,172659,172669,172695],{"__ignoreMap":31},[142,172553,172554,172556],{"class":144,"line":145},[142,172555,30421],{"class":148},[142,172557,147100],{"class":152},[142,172559,172560,172562,172564,172566],{"class":144,"line":64},[142,172561,30766],{"class":148},[142,172563,108320],{"class":152},[142,172565,30421],{"class":148},[142,172567,108325],{"class":152},[142,172569,172570],{"class":144,"line":1208},[142,172571,2428],{"emptyLinePlaceholder":69},[142,172573,172574],{"class":144,"line":1223},[142,172575,2428],{"emptyLinePlaceholder":69},[142,172577,172578,172580,172583],{"class":144,"line":1229},[142,172579,31976],{"class":148},[142,172581,172582],{"class":1991}," read_json",[142,172584,172585],{"class":152},"(path):\n",[142,172587,172588,172591,172593],{"class":144,"line":1243},[142,172589,172590],{"class":152},"    path ",[142,172592,198],{"class":148},[142,172594,172595],{"class":152}," Path(path)\n",[142,172597,172598,172600,172602],{"class":144,"line":1249},[142,172599,3129],{"class":148},[142,172601,38959],{"class":148},[142,172603,169319],{"class":152},[142,172605,172606,172608],{"class":144,"line":1340},[142,172607,14781],{"class":148},[142,172609,51867],{"class":152},[142,172611,172612],{"class":144,"line":1346},[142,172613,2428],{"emptyLinePlaceholder":69},[142,172615,172616,172618,172620,172623,172625,172627,172629,172631,172633,172635,172637,172639],{"class":144,"line":1358},[142,172617,34207],{"class":148},[142,172619,146800],{"class":201},[142,172621,172622],{"class":152},"(path, ",[142,172624,146810],{"class":257},[142,172626,12464],{"class":152},[142,172628,146815],{"class":5245},[142,172630,198],{"class":148},[142,172632,146820],{"class":257},[142,172634,13743],{"class":152},[142,172636,31412],{"class":148},[142,172638,148162],{"class":5245},[142,172640,3767],{"class":152},[142,172642,172643,172645,172647,172649],{"class":144,"line":1640},[142,172644,14781],{"class":148},[142,172646,148173],{"class":152},[142,172648,45383],{"class":5245},[142,172650,159],{"class":152},[142,172652,172653],{"class":144,"line":1645},[142,172654,2428],{"emptyLinePlaceholder":69},[142,172656,172657],{"class":144,"line":1651},[142,172658,2428],{"emptyLinePlaceholder":69},[142,172660,172661,172663,172666],{"class":144,"line":1656},[142,172662,31976],{"class":148},[142,172664,172665],{"class":1991}," write_json",[142,172667,172668],{"class":152},"(path, data):\n",[142,172670,172671,172673,172675,172677,172679,172681,172683,172685,172687,172689,172691,172693],{"class":144,"line":1670},[142,172672,34207],{"class":148},[142,172674,146800],{"class":201},[142,172676,172622],{"class":152},[142,172678,151985],{"class":257},[142,172680,12464],{"class":152},[142,172682,146815],{"class":5245},[142,172684,198],{"class":148},[142,172686,146820],{"class":257},[142,172688,13743],{"class":152},[142,172690,31412],{"class":148},[142,172692,148162],{"class":5245},[142,172694,3767],{"class":152},[142,172696,172697,172700,172702,172704,172706,172708,172710,172712,172714,172716,172718],{"class":144,"line":1675},[142,172698,172699],{"class":152},"        json.dump(data, ",[142,172701,45383],{"class":5245},[142,172703,12464],{"class":152},[142,172705,147146],{"class":5245},[142,172707,198],{"class":148},[142,172709,34016],{"class":201},[142,172711,12464],{"class":152},[142,172713,152021],{"class":5245},[142,172715,198],{"class":148},[142,172717,230],{"class":201},[142,172719,159],{"class":152},[14,172721,172722,24647],{},[139,172723,154616],{},[133,172725,172727],{"className":30407,"code":172726,"language":30409,"meta":31,"style":31},"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",[139,172728,172729,172740,172744,172757,172777],{"__ignoreMap":31},[142,172730,172731,172733,172735,172737],{"class":144,"line":145},[142,172732,30766],{"class":148},[142,172734,172350],{"class":152},[142,172736,30421],{"class":148},[142,172738,172739],{"class":152}," read_json, write_json\n",[142,172741,172742],{"class":144,"line":64},[142,172743,2428],{"emptyLinePlaceholder":69},[142,172745,172746,172748,172750,172753,172755],{"class":144,"line":1208},[142,172747,159725],{"class":152},[142,172749,198],{"class":148},[142,172751,172752],{"class":152}," read_json(",[142,172754,151840],{"class":257},[142,172756,159],{"class":152},[142,172758,172759,172761,172763,172765,172767,172769,172771,172773,172775],{"class":144,"line":1223},[142,172760,170543],{"class":152},[142,172762,62708],{"class":257},[142,172764,51466],{"class":152},[142,172766,149897],{"class":257},[142,172768,12464],{"class":152},[142,172770,151481],{"class":257},[142,172772,51466],{"class":152},[142,172774,1142],{"class":201},[142,172776,165161],{"class":152},[142,172778,172779,172782,172784],{"class":144,"line":1229},[142,172780,172781],{"class":152},"write_json(",[142,172783,151840],{"class":257},[142,172785,172786],{"class":152},", students)\n",[84,172788,172790],{"id":172789},"_918-易错点","9.18 易错点",[96,172792,172793,172796,172801,172806,172809,172812],{},[99,172794,172795],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[99,172797,172798,172799,28414],{},"能指定异常类型就不要裸写 ",[139,172800,170903],{},[99,172802,172803,172805],{},[139,172804,171278],{}," 无论是否出错都会执行。",[99,172807,172808],{},"模块文件名不要和标准库重名。",[99,172810,172811],{},"导入自己写的模块时，要注意运行目录。",[99,172813,172814],{},"第三方包要安装到当前解释器或虚拟环境中。",[84,172816,172818],{"id":172817},"_919-本章练习","9.19 本章练习",[96,172820,172821,172824,172827,172833,172840],{},[99,172822,172823],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[99,172825,172826],{},"写函数读取文件，如果文件不存在则返回空字符串。",[99,172828,172241,172829,172832],{},[139,172830,172831],{},"math_utils.py","，实现加减乘除函数并导入使用。",[99,172834,172835,172836,172839],{},"创建一个 ",[139,172837,172838],{},"utils"," 包，把 JSON 读写函数放进去。",[99,172841,172842],{},"写一个程序，捕获除零异常和输入格式异常。",[5155,172844,172845],{},"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":31,"searchDepth":64,"depth":64,"links":172847},[172848,172849,172850,172851,172852,172853,172854,172855,172856,172857,172858,172864,172871,172873,172874,172875,172876,172877,172878],{"id":170700,"depth":64,"text":170701},{"id":170828,"depth":64,"text":170829},{"id":170877,"depth":64,"text":170878},{"id":171026,"depth":64,"text":171027},{"id":171198,"depth":64,"text":171199},{"id":171267,"depth":64,"text":171268},{"id":171378,"depth":64,"text":171379},{"id":171504,"depth":64,"text":171505},{"id":171629,"depth":64,"text":171630},{"id":171684,"depth":64,"text":171685},{"id":171783,"depth":64,"text":171784,"children":172859},[172860,172861,172862,172863],{"id":171787,"depth":1208,"text":171788},{"id":171821,"depth":1208,"text":171822},{"id":171860,"depth":1208,"text":171861},{"id":171939,"depth":1208,"text":171940},{"id":171962,"depth":64,"text":171963,"children":172865},[172866,172867,172868,172869,172870],{"id":171966,"depth":1208,"text":171967},{"id":172049,"depth":1208,"text":172050},{"id":172094,"depth":1208,"text":172095},{"id":172153,"depth":1208,"text":172154},{"id":172191,"depth":1208,"text":172192},{"id":172225,"depth":64,"text":172872},"9.13 if name == \"main\"",{"id":172318,"depth":64,"text":172319},{"id":172363,"depth":64,"text":172364},{"id":172474,"depth":64,"text":172475},{"id":172532,"depth":64,"text":172533},{"id":172789,"depth":64,"text":172790},{"id":172817,"depth":64,"text":172818},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170692,"description":66},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172885,"title":172886,"body":172887,"description":173050,"extension":67,"meta":173051,"navigation":69,"path":173052,"seo":173053,"stem":173054,"__hash__":173055},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172888,"toc":173045},[172889,172892,172895,172898,172909,172911,172985,172988,172991,172994,172997,173000,173003,173006,173009,173012,173015],[10,172890,172886],{"id":172891},"python教程",[14,172893,172894],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172896,172897],{},"建议学习环境：",[96,172899,172900,172903,172906],{},[99,172901,172902],{},"Python 版本：Python 3.10 及以上。",[99,172904,172905],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[99,172907,172908],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[84,172910,117087],{"id":117087},[96,172912,172913,172919,172925,172931,172937,172943,172949,172955,172961,172967,172973,172979],{},[99,172914,172915],{},[391,172916,172918],{"href":172917},".\u002Fch1-Python","Python环境与第一个程序",[99,172920,172921],{},[391,172922,172924],{"href":172923},".\u002Fch2","基础语法、变量与字符串",[99,172926,172927],{},[391,172928,172930],{"href":172929},".\u002Fch3","判断语句",[99,172932,172933],{},[391,172934,172936],{"href":172935},".\u002Fch4","循环语句",[99,172938,172939],{},[391,172940,172942],{"href":172941},".\u002Fch5","函数基础",[99,172944,172945],{},[391,172946,172948],{"href":172947},".\u002Fch6","数据容器",[99,172950,172951],{},[391,172952,172954],{"href":172953},".\u002Fch7","函数进阶",[99,172956,172957],{},[391,172958,172960],{"href":172959},".\u002Fch8","文件操作",[99,172962,172963],{},[391,172964,172966],{"href":172965},".\u002Fch9","异常、模块与包",[99,172968,172969],{},[391,172970,172972],{"href":172971},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[99,172974,172975],{},[391,172976,172978],{"href":172977},".\u002Fch11","面向对象基础",[99,172980,172981],{},[391,172982,172984],{"href":172983},".\u002Fch12","综合案例与复习路线",[84,172986,172987],{"id":172987},"学习路线",[14,172989,172990],{},"第一阶段：能运行程序。",[14,172992,172993],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,172995,172996],{},"第二阶段：能组织数据。",[14,172998,172999],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173001,173002],{},"第三阶段：能封装逻辑。",[14,173004,173005],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173007,173008],{},"第四阶段：能做小项目。",[14,173010,173011],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[84,173013,173014],{"id":173014},"参考资料",[96,173016,173017,173024,173031,173038],{},[99,173018,173019,173020],{},"黑马程序员 Python 入门教程推荐：",[391,173021,173022],{"href":173022,"rel":173023},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23894],[99,173025,173026,173027],{},"Python 官方中文教程：",[391,173028,173029],{"href":173029,"rel":173030},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23894],[99,173032,173033,173034],{},"Python 标准库文档：",[391,173035,173036],{"href":173036,"rel":173037},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23894],[99,173039,173040,173041],{},"pyecharts 文档：",[391,173042,173043],{"href":173043,"rel":173044},"https:\u002F\u002Fpyecharts.org\u002F",[23894],{"title":31,"searchDepth":64,"depth":64,"links":173046},[173047,173048,173049],{"id":117087,"depth":64,"text":117087},{"id":172987,"depth":64,"text":172987},{"id":173014,"depth":64,"text":173014},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23407},"\u002Fwiki\u002F2024-10-10-python",{"title":172886,"description":173050},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331461940]