[{"data":1,"prerenderedAt":173098},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-01-lerobot101-act-suan-fa-fu-xian\u002Fch8-ce-l-e-bu-shu-yu-zi-dong-cai-ji":3,"wiki-doc-nav":139},{"id":4,"title":5,"body":6,"description":131,"extension":132,"meta":133,"navigation":134,"path":135,"seo":136,"stem":137,"__hash__":138},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":8,"toc":129},"minimark",[9,13,17,115,125],[10,11,5],"h1",{"id":12},"_8-策略部署与自动采集",[14,15,16],"p",{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[18,19,24],"pre",{"className":20,"code":21,"language":22,"meta":23,"style":23},"language-bash shiki shiki-themes github-light github-dark","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","bash","",[25,26,27,40,48,56,68,76,84,95,106],"code",{"__ignoreMap":23},[28,29,32,36],"span",{"class":30,"line":31},"line",1,[28,33,35],{"class":34},"sScJk","lerobot-record",[28,37,39],{"class":38},"sj4cs"," \\\n",[28,41,43,46],{"class":30,"line":42},2,[28,44,45],{"class":38},"  --robot.type=so101_follower",[28,47,39],{"class":38},[28,49,51,54],{"class":30,"line":50},3,[28,52,53],{"class":38},"  --robot.port=\u002Fdev\u002FttyACM1",[28,55,39],{"class":38},[28,57,59,62,66],{"class":30,"line":58},4,[28,60,61],{"class":38},"  --robot.cameras=",[28,63,65],{"class":64},"sZZnC","\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[28,67,39],{"class":38},[28,69,71,74],{"class":30,"line":70},5,[28,72,73],{"class":38},"  --robot.id=my_awesome_follower_arm",[28,75,39],{"class":38},[28,77,79,82],{"class":30,"line":78},6,[28,80,81],{"class":38},"  --display_data=false",[28,83,39],{"class":38},[28,85,87,90,93],{"class":30,"line":86},7,[28,88,89],{"class":38},"  --dataset.repo_id=",[28,91,92],{"class":64},"\"Embodied-AI-6\u002Fso101_test\"",[28,94,39],{"class":38},[28,96,98,101,104],{"class":30,"line":97},8,[28,99,100],{"class":38},"  --dataset.single_task=",[28,102,103],{"class":64},"\"Grab the green cube\"",[28,105,39],{"class":38},[28,107,109,112],{"class":30,"line":108},9,[28,110,111],{"class":38},"  --policy.path=",[28,113,114],{"class":64},"\"Embodied-AI-6\u002Flerobot_new\"\n",[116,117,118],"ul",{},[119,120,121,124],"li",{},[25,122,123],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[126,127,128],"style",{},"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":23,"searchDepth":42,"depth":42,"links":130},[],null,"md",{},true,"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":5,"description":131},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",[140,5239,6347,7767,10756,12107,13596,14685,23448,23460,24057,24083,24207,24448,24513,24531,24544,24591,24715,24881,25078,25258,25456,25591,25674,25711,25724,26034,26775,27483,27504,28524,30155,30306,30319,30331,30632,50444,50459,50476,50509,53381,76729,92874,92895,93008,93129,93899,94562,94923,94961,95067,95167,95210,95236,95297,96951,97052,97077,97568,98068,99148,99431,100173,100675,100687,102703,104367,105870,107568,109485,111404,113426,116896,117328,117791,118540,121484,121832,121854,122210,125517,125529,125932,125955,126102,126269,126474,126775,127332,127989,129920,131518,132167,133661,135092,136327,138021,139773,142183,142299,143234,143445,144330,145565,145793,145806,146961,149373,151741,155062,157539,159183,160960,162973,166025,168205,170732,172926],{"id":141,"title":142,"body":143,"description":23,"extension":132,"meta":5234,"navigation":134,"path":5235,"seo":5236,"stem":5237,"__hash__":5238},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":144,"toc":5206},[145,148,153,156,160,172,176,181,184,187,190,193,196,226,230,233,236,239,242,294,298,316,318,332,335,343,346,1209,1216,1232,1236,1322,1326,1332,1419,1423,1461,1465,1529,1533,1537,1544,1555,1559,1564,1568,1573,1577,1582,1586,1590,1595,1865,1870,2008,2013,2269,2272,2280,2284,2289,2392,2395,2701,2710,2811,2814,2817,2820,2823,3083,3088,3228,3231,3410,3413,3541,3544,3696,3700,3705,3708,3719,3727,3730,3837,3841,3845,3850,3900,3905,3910,3934,3939,3992,3995,4000,4177,4182,4467,4472,4869,4873,4878,4935,4940,4948,4951,5091,5094,5203],[10,146,142],{"id":147},"_1基础入门",[149,150,152],"h2",{"id":151},"_11注释","1.1注释",[14,154,155],{},"\u002F\u002F或者\u002F* *\u002F",[149,157,159],{"id":158},"_12命名","1.2命名",[161,162,163,166,169],"ol",{},[119,164,165],{},"字母数字下划线",[119,167,168],{},"开头必须是字母或_",[119,170,171],{},"不能使用关键词",[149,173,175],{"id":174},"_13数据类型","1.3数据类型",[177,178,180],"h3",{"id":179},"_131整形","1.3.1整形",[14,182,183],{},"short 短整形 2",[14,185,186],{},"int 整形 4",[14,188,189],{},"long 长整形 win4 linux32位4 linux64位8",[14,191,192],{},"long long 长长整形 8",[14,194,195],{},"利用sizeof可以求数据类型占用的内存空间大小",[18,197,201],{"className":198,"code":199,"language":200,"meta":23,"style":23},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[25,202,203,219],{"__ignoreMap":23},[28,204,205,209,213,216],{"class":30,"line":31},[28,206,208],{"class":207},"szBVR","sizeof",[28,210,212],{"class":211},"sVt8B","(",[28,214,215],{"class":207},"int",[28,217,218],{"class":211},")\n",[28,220,221,223],{"class":30,"line":42},[28,222,208],{"class":207},[28,224,225],{"class":211},"(num)\n",[177,227,229],{"id":228},"_132浮点型","1.3.2浮点型",[14,231,232],{},"float 单精度 4节 7位有效数字",[14,234,235],{},"double 双精度 8节 15-16有效数字",[14,237,238],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,240,241],{},"注意点：",[18,243,245],{"className":198,"code":244,"language":200,"meta":23,"style":23},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[25,246,247,271],{"__ignoreMap":23},[28,248,249,252,255,258,261,264,267],{"class":30,"line":31},[28,250,251],{"class":207},"float",[28,253,254],{"class":211}," f1",[28,256,257],{"class":207},"=",[28,259,260],{"class":38},"3.14",[28,262,263],{"class":207},"f",[28,265,266],{"class":211},";",[28,268,270],{"class":269},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[28,272,273,275,278,280,283,286,289,291],{"class":30,"line":42},[28,274,251],{"class":207},[28,276,277],{"class":211}," f2",[28,279,257],{"class":207},[28,281,282],{"class":38},"3",[28,284,285],{"class":207},"e",[28,287,288],{"class":38},"2",[28,290,266],{"class":211},[28,292,293],{"class":269}," \u002F\u002F科学记数法\n",[177,295,297],{"id":296},"_133字符型","1.3.3字符型",[18,299,301],{"className":198,"code":300,"language":200,"meta":23,"style":23},"char ch='a'\n",[25,302,303],{"__ignoreMap":23},[28,304,305,308,311,313],{"class":30,"line":31},[28,306,307],{"class":207},"char",[28,309,310],{"class":211}," ch",[28,312,257],{"class":207},[28,314,315],{"class":64},"'a'\n",[14,317,241],{},[161,319,320,323,326,329],{},[119,321,322],{},"在显示字符型变量时，只能单引号，双引号x",[119,324,325],{},"单引号内只能一个字符，不能字符串",[119,327,328],{},"c和c++字符型变量只占用一个字符",[119,330,331],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,333,334],{},"ASCII码大致由以下两部分组成：",[161,336,337,340],{},[119,338,339],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[119,341,342],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,344,345],{},"ASCII码表格：",[347,348,349,393],"table",{},[350,351,352],"thead",{},[353,354,355,363,368,372,377,381,385,389],"tr",{},[356,357,358,362],"th",{},[359,360,361],"strong",{},"ASCII","值",[356,364,365],{},[359,366,367],{},"控制字符",[356,369,370,362],{},[359,371,361],{},[356,373,374],{},[359,375,376],{},"字符",[356,378,379,362],{},[359,380,361],{},[356,382,383],{},[359,384,376],{},[356,386,387,362],{},[359,388,361],{},[356,390,391],{},[359,392,376],{},[394,395,396,423,449,474,499,525,550,575,601,626,652,678,704,729,755,781,807,831,856,881,906,931,956,981,1006,1031,1056,1082,1107,1132,1157,1183],"tbody",{},[353,397,398,402,405,408,411,414,417,420],{},[399,400,401],"td",{},"0",[399,403,404],{},"NUT",[399,406,407],{},"32",[399,409,410],{},"(space)",[399,412,413],{},"64",[399,415,416],{},"@",[399,418,419],{},"96",[399,421,422],{},"、",[353,424,425,428,431,434,437,440,443,446],{},[399,426,427],{},"1",[399,429,430],{},"SOH",[399,432,433],{},"33",[399,435,436],{},"!",[399,438,439],{},"65",[399,441,442],{},"A",[399,444,445],{},"97",[399,447,448],{},"a",[353,450,451,453,456,459,462,465,468,471],{},[399,452,288],{},[399,454,455],{},"STX",[399,457,458],{},"34",[399,460,461],{},"\"",[399,463,464],{},"66",[399,466,467],{},"B",[399,469,470],{},"98",[399,472,473],{},"b",[353,475,476,478,481,484,487,490,493,496],{},[399,477,282],{},[399,479,480],{},"ETX",[399,482,483],{},"35",[399,485,486],{},"#",[399,488,489],{},"67",[399,491,492],{},"C",[399,494,495],{},"99",[399,497,498],{},"c",[353,500,501,504,507,510,513,516,519,522],{},[399,502,503],{},"4",[399,505,506],{},"EOT",[399,508,509],{},"36",[399,511,512],{},"$",[399,514,515],{},"68",[399,517,518],{},"D",[399,520,521],{},"100",[399,523,524],{},"d",[353,526,527,530,533,536,539,542,545,548],{},[399,528,529],{},"5",[399,531,532],{},"ENQ",[399,534,535],{},"37",[399,537,538],{},"%",[399,540,541],{},"69",[399,543,544],{},"E",[399,546,547],{},"101",[399,549,285],{},[353,551,552,555,558,561,564,567,570,573],{},[399,553,554],{},"6",[399,556,557],{},"ACK",[399,559,560],{},"38",[399,562,563],{},"&",[399,565,566],{},"70",[399,568,569],{},"F",[399,571,572],{},"102",[399,574,263],{},[353,576,577,580,583,586,589,592,595,598],{},[399,578,579],{},"7",[399,581,582],{},"BEL",[399,584,585],{},"39",[399,587,588],{},",",[399,590,591],{},"71",[399,593,594],{},"G",[399,596,597],{},"103",[399,599,600],{},"g",[353,602,603,606,609,612,614,617,620,623],{},[399,604,605],{},"8",[399,607,608],{},"BS",[399,610,611],{},"40",[399,613,212],{},[399,615,616],{},"72",[399,618,619],{},"H",[399,621,622],{},"104",[399,624,625],{},"h",[353,627,628,631,634,637,640,643,646,649],{},[399,629,630],{},"9",[399,632,633],{},"HT",[399,635,636],{},"41",[399,638,639],{},")",[399,641,642],{},"73",[399,644,645],{},"I",[399,647,648],{},"105",[399,650,651],{},"i",[353,653,654,657,660,663,666,669,672,675],{},[399,655,656],{},"10",[399,658,659],{},"LF",[399,661,662],{},"42",[399,664,665],{},"*",[399,667,668],{},"74",[399,670,671],{},"J",[399,673,674],{},"106",[399,676,677],{},"j",[353,679,680,683,686,689,692,695,698,701],{},[399,681,682],{},"11",[399,684,685],{},"VT",[399,687,688],{},"43",[399,690,691],{},"+",[399,693,694],{},"75",[399,696,697],{},"K",[399,699,700],{},"107",[399,702,703],{},"k",[353,705,706,709,712,715,717,720,723,726],{},[399,707,708],{},"12",[399,710,711],{},"FF",[399,713,714],{},"44",[399,716,588],{},[399,718,719],{},"76",[399,721,722],{},"L",[399,724,725],{},"108",[399,727,728],{},"l",[353,730,731,734,737,740,743,746,749,752],{},[399,732,733],{},"13",[399,735,736],{},"CR",[399,738,739],{},"45",[399,741,742],{},"-",[399,744,745],{},"77",[399,747,748],{},"M",[399,750,751],{},"109",[399,753,754],{},"m",[353,756,757,760,763,766,769,772,775,778],{},[399,758,759],{},"14",[399,761,762],{},"SO",[399,764,765],{},"46",[399,767,768],{},".",[399,770,771],{},"78",[399,773,774],{},"N",[399,776,777],{},"110",[399,779,780],{},"n",[353,782,783,786,789,792,795,798,801,804],{},[399,784,785],{},"15",[399,787,788],{},"SI",[399,790,791],{},"47",[399,793,794],{},"\u002F",[399,796,797],{},"79",[399,799,800],{},"O",[399,802,803],{},"111",[399,805,806],{},"o",[353,808,809,812,815,818,820,823,826,829],{},[399,810,811],{},"16",[399,813,814],{},"DLE",[399,816,817],{},"48",[399,819,401],{},[399,821,822],{},"80",[399,824,825],{},"P",[399,827,828],{},"112",[399,830,14],{},[353,832,833,836,839,842,844,847,850,853],{},[399,834,835],{},"17",[399,837,838],{},"DCI",[399,840,841],{},"49",[399,843,427],{},[399,845,846],{},"81",[399,848,849],{},"Q",[399,851,852],{},"113",[399,854,855],{},"q",[353,857,858,861,864,867,869,872,875,878],{},[399,859,860],{},"18",[399,862,863],{},"DC2",[399,865,866],{},"50",[399,868,288],{},[399,870,871],{},"82",[399,873,874],{},"R",[399,876,877],{},"114",[399,879,880],{},"r",[353,882,883,886,889,892,894,897,900,903],{},[399,884,885],{},"19",[399,887,888],{},"DC3",[399,890,891],{},"51",[399,893,282],{},[399,895,896],{},"83",[399,898,899],{},"S",[399,901,902],{},"115",[399,904,905],{},"s",[353,907,908,911,914,917,919,922,925,928],{},[399,909,910],{},"20",[399,912,913],{},"DC4",[399,915,916],{},"52",[399,918,503],{},[399,920,921],{},"84",[399,923,924],{},"T",[399,926,927],{},"116",[399,929,930],{},"t",[353,932,933,936,939,942,944,947,950,953],{},[399,934,935],{},"21",[399,937,938],{},"NAK",[399,940,941],{},"53",[399,943,529],{},[399,945,946],{},"85",[399,948,949],{},"U",[399,951,952],{},"117",[399,954,955],{},"u",[353,957,958,961,964,967,969,972,975,978],{},[399,959,960],{},"22",[399,962,963],{},"SYN",[399,965,966],{},"54",[399,968,554],{},[399,970,971],{},"86",[399,973,974],{},"V",[399,976,977],{},"118",[399,979,980],{},"v",[353,982,983,986,989,992,994,997,1000,1003],{},[399,984,985],{},"23",[399,987,988],{},"TB",[399,990,991],{},"55",[399,993,579],{},[399,995,996],{},"87",[399,998,999],{},"W",[399,1001,1002],{},"119",[399,1004,1005],{},"w",[353,1007,1008,1011,1014,1017,1019,1022,1025,1028],{},[399,1009,1010],{},"24",[399,1012,1013],{},"CAN",[399,1015,1016],{},"56",[399,1018,605],{},[399,1020,1021],{},"88",[399,1023,1024],{},"X",[399,1026,1027],{},"120",[399,1029,1030],{},"x",[353,1032,1033,1036,1039,1042,1044,1047,1050,1053],{},[399,1034,1035],{},"25",[399,1037,1038],{},"EM",[399,1040,1041],{},"57",[399,1043,630],{},[399,1045,1046],{},"89",[399,1048,1049],{},"Y",[399,1051,1052],{},"121",[399,1054,1055],{},"y",[353,1057,1058,1061,1064,1067,1070,1073,1076,1079],{},[399,1059,1060],{},"26",[399,1062,1063],{},"SUB",[399,1065,1066],{},"58",[399,1068,1069],{},":",[399,1071,1072],{},"90",[399,1074,1075],{},"Z",[399,1077,1078],{},"122",[399,1080,1081],{},"z",[353,1083,1084,1087,1090,1093,1095,1098,1101,1104],{},[399,1085,1086],{},"27",[399,1088,1089],{},"ESC",[399,1091,1092],{},"59",[399,1094,266],{},[399,1096,1097],{},"91",[399,1099,1100],{},"[",[399,1102,1103],{},"123",[399,1105,1106],{},"{",[353,1108,1109,1112,1115,1118,1121,1124,1126,1129],{},[399,1110,1111],{},"28",[399,1113,1114],{},"FS",[399,1116,1117],{},"60",[399,1119,1120],{},"\u003C",[399,1122,1123],{},"92",[399,1125,794],{},[399,1127,1128],{},"124",[399,1130,1131],{},"|",[353,1133,1134,1137,1140,1143,1145,1148,1151,1154],{},[399,1135,1136],{},"29",[399,1138,1139],{},"GS",[399,1141,1142],{},"61",[399,1144,257],{},[399,1146,1147],{},"93",[399,1149,1150],{},"]",[399,1152,1153],{},"125",[399,1155,1156],{},"}",[353,1158,1159,1162,1165,1168,1171,1174,1177,1180],{},[399,1160,1161],{},"30",[399,1163,1164],{},"RS",[399,1166,1167],{},"62",[399,1169,1170],{},">",[399,1172,1173],{},"94",[399,1175,1176],{},"^",[399,1178,1179],{},"126",[399,1181,1182],{},"`",[353,1184,1185,1188,1191,1194,1197,1200,1203,1206],{},[399,1186,1187],{},"31",[399,1189,1190],{},"US",[399,1192,1193],{},"63",[399,1195,1196],{},"?",[399,1198,1199],{},"95",[399,1201,1202],{},"_",[399,1204,1205],{},"127",[399,1207,1208],{},"DEL",[14,1210,1211,1212,1215],{},"ASCII 码大致由以下",[359,1213,1214],{},"两部分组","成：",[116,1217,1218,1225],{},[119,1219,1220,1221,1224],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[359,1222,1223],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[119,1226,1227,1228,1231],{},"ASCII 打印字符：数字 ",[359,1229,1230],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[177,1233,1235],{"id":1234},"_134转义字符","1.3.4转义字符",[18,1237,1239],{"className":198,"code":1238,"language":200,"meta":23,"style":23},"\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",[25,1240,1241,1246,1262,1276,1281,1294,1299],{"__ignoreMap":23},[28,1242,1243],{"class":30,"line":31},[28,1244,1245],{"class":269},"\u002F\u002F换行符\n",[28,1247,1248,1251,1254,1257,1259],{"class":30,"line":42},[28,1249,1250],{"class":211},"cout ",[28,1252,1253],{"class":207},"\u003C\u003C",[28,1255,1256],{"class":64},"\"hello world\u002Fn\"",[28,1258,266],{"class":211},[28,1260,1261],{"class":269}," \u002F\u002F就等同于如下：\n",[28,1263,1264,1266,1268,1271,1273],{"class":30,"line":50},[28,1265,1250],{"class":211},[28,1267,1253],{"class":207},[28,1269,1270],{"class":64},"\"hello world\"",[28,1272,1253],{"class":207},[28,1274,1275],{"class":211},"endl;\n",[28,1277,1278],{"class":30,"line":58},[28,1279,1280],{"class":269},"\u002F\u002F反斜杠\n",[28,1282,1283,1285,1287,1290,1292],{"class":30,"line":70},[28,1284,1250],{"class":211},[28,1286,1253],{"class":207},[28,1288,1289],{"class":64},"\"\u002F\u002F\"",[28,1291,1253],{"class":207},[28,1293,1275],{"class":211},[28,1295,1296],{"class":30,"line":78},[28,1297,1298],{"class":269},"\u002F\u002F水平制表符\n",[28,1300,1301,1303,1305,1308,1311,1314,1316,1319],{"class":30,"line":86},[28,1302,1250],{"class":211},[28,1304,1253],{"class":207},[28,1306,1307],{"class":64},"\"aaaa",[28,1309,1310],{"class":38},"\\t",[28,1312,1313],{"class":64},"helloworld\"",[28,1315,1253],{"class":207},[28,1317,1318],{"class":211},"endl;",[28,1320,1321],{"class":269}," \u002F\u002F输出窗口时有对齐效果\n",[177,1323,1325],{"id":1324},"_135字符串型","1.3.5字符串型",[14,1327,1328,1329,1331],{},"char 变量名",[28,1330],{},"=\"字符串值\"",[18,1333,1335],{"className":198,"code":1334,"language":200,"meta":23,"style":23},"\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",[25,1336,1337,1342,1347,1352,1357,1371,1384,1389,1394,1405],{"__ignoreMap":23},[28,1338,1339],{"class":30,"line":31},[28,1340,1341],{"class":269},"\u002F\u002Fc风格字符串\n",[28,1343,1344],{"class":30,"line":42},[28,1345,1346],{"class":269},"\u002F\u002F注意事项：\n",[28,1348,1349],{"class":30,"line":50},[28,1350,1351],{"class":269},"\u002F\u002F1.char字符串名[]\n",[28,1353,1354],{"class":30,"line":58},[28,1355,1356],{"class":269},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[28,1358,1359,1361,1364,1366,1368],{"class":30,"line":70},[28,1360,307],{"class":207},[28,1362,1363],{"class":211}," str[]",[28,1365,257],{"class":207},[28,1367,1270],{"class":64},[28,1369,1370],{"class":211},";\n",[28,1372,1373,1375,1377,1380,1382],{"class":30,"line":78},[28,1374,1250],{"class":211},[28,1376,1253],{"class":207},[28,1378,1379],{"class":211},"str",[28,1381,1253],{"class":207},[28,1383,1275],{"class":211},[28,1385,1386],{"class":30,"line":86},[28,1387,1388],{"class":269},"\u002F\u002Fc++风格字符串\n",[28,1390,1391],{"class":30,"line":97},[28,1392,1393],{"class":269},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[28,1395,1396,1399,1401,1403],{"class":30,"line":108},[28,1397,1398],{"class":211},"string str2",[28,1400,257],{"class":207},[28,1402,1270],{"class":64},[28,1404,1370],{"class":211},[28,1406,1408,1410,1412,1415,1417],{"class":30,"line":1407},10,[28,1409,1250],{"class":211},[28,1411,1253],{"class":207},[28,1413,1414],{"class":211},"str2",[28,1416,1253],{"class":207},[28,1418,1275],{"class":211},[177,1420,1422],{"id":1421},"_136布尔类型bool","1.3.6布尔类型bool",[18,1424,1426],{"className":198,"code":1425,"language":200,"meta":23,"style":23},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[25,1427,1428,1443],{"__ignoreMap":23},[28,1429,1430,1433,1436,1438,1441],{"class":30,"line":31},[28,1431,1432],{"class":207},"bool",[28,1434,1435],{"class":211}," flag",[28,1437,257],{"class":207},[28,1439,1440],{"class":38},"true",[28,1442,1370],{"class":211},[28,1444,1445,1448,1451,1454,1456,1458],{"class":30,"line":42},[28,1446,1447],{"class":211},"cout",[28,1449,1450],{"class":207},"\u003C\u003Csizeof",[28,1452,1453],{"class":211},"(flag)",[28,1455,1253],{"class":207},[28,1457,1318],{"class":211},[28,1459,1460],{"class":269}," \u002F\u002F查看布尔占内存空间\n",[149,1462,1464],{"id":1463},"_14键盘输入cin","1.4键盘输入cin",[18,1466,1468],{"className":198,"code":1467,"language":200,"meta":23,"style":23},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[25,1469,1470,1483,1500,1511],{"__ignoreMap":23},[28,1471,1472,1474,1477,1479,1481],{"class":30,"line":31},[28,1473,215],{"class":207},[28,1475,1476],{"class":211}," a",[28,1478,257],{"class":207},[28,1480,401],{"class":38},[28,1482,1370],{"class":211},[28,1484,1485,1487,1489,1492,1494,1496,1498],{"class":30,"line":42},[28,1486,1447],{"class":211},[28,1488,1253],{"class":207},[28,1490,1491],{"class":64},"\"请给整型变量a赋值\"",[28,1493,1253],{"class":207},[28,1495,448],{"class":211},[28,1497,1253],{"class":207},[28,1499,1275],{"class":211},[28,1501,1502,1505,1508],{"class":30,"line":50},[28,1503,1504],{"class":211},"cin ",[28,1506,1507],{"class":207},">>",[28,1509,1510],{"class":211}," a;\n",[28,1512,1513,1515,1517,1520,1523,1525,1527],{"class":30,"line":58},[28,1514,1250],{"class":211},[28,1516,1253],{"class":207},[28,1518,1519],{"class":64}," \"整型变量a=\"",[28,1521,1522],{"class":207}," \u003C\u003C",[28,1524,448],{"class":211},[28,1526,1253],{"class":207},[28,1528,1275],{"class":211},[149,1530,1532],{"id":1531},"_15运算符","1.5运算符",[177,1534,1536],{"id":1535},"_151算术运算符","1.5.1算术运算符",[14,1538,1539,1543],{},[1540,1541],"img",{"alt":23,"src":1542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[161,1545,1546,1549,1552],{},[119,1547,1548],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[119,1550,1551],{},"两个小数不可以做取模运算",[119,1553,1554],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[177,1556,1558],{"id":1557},"_152赋值运算符","1.5.2赋值运算符",[14,1560,1561],{},[1540,1562],{"alt":23,"src":1563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[177,1565,1567],{"id":1566},"_153比较运算符","1.5.3比较运算符",[14,1569,1570],{},[1540,1571],{"alt":23,"src":1572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[177,1574,1576],{"id":1575},"_154逻辑运算符","1.5.4逻辑运算符",[14,1578,1579],{},[1540,1580],{"alt":23,"src":1581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[149,1583,1585],{"id":1584},"_16程序流程结构","1.6程序流程结构",[177,1587,1589],{"id":1588},"_161选择结构","1.6.1选择结构",[161,1591,1592],{},[119,1593,1594],{},"if语句\n单行、多行、多条件if语句",[18,1596,1598],{"className":198,"code":1597,"language":200,"meta":23,"style":23},"\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",[25,1599,1600,1605,1620,1625,1639,1644,1649,1658,1671,1675,1688,1693,1699,1704,1718,1723,1729,1750,1755,1769,1774,1803,1808,1825,1830,1835,1840,1854,1859],{"__ignoreMap":23},[28,1601,1602],{"class":30,"line":31},[28,1603,1604],{"class":269},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[28,1606,1607,1610,1613,1615,1618],{"class":30,"line":42},[28,1608,1609],{"class":207},"if",[28,1611,1612],{"class":211},"(score",[28,1614,1170],{"class":207},[28,1616,1617],{"class":38},"600",[28,1619,218],{"class":211},[28,1621,1622],{"class":30,"line":50},[28,1623,1624],{"class":211},"{\n",[28,1626,1627,1630,1632,1635,1637],{"class":30,"line":58},[28,1628,1629],{"class":211},"    cout",[28,1631,1253],{"class":207},[28,1633,1634],{"class":64},"'这是单行if语句'",[28,1636,1253],{"class":207},[28,1638,1275],{"class":211},[28,1640,1641],{"class":30,"line":70},[28,1642,1643],{"class":211},"}\n",[28,1645,1646],{"class":30,"line":78},[28,1647,1648],{"class":269},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[28,1650,1651,1653,1655],{"class":30,"line":86},[28,1652,1504],{"class":211},[28,1654,1507],{"class":207},[28,1656,1657],{"class":211}," score\n",[28,1659,1660,1662,1664,1667,1669],{"class":30,"line":97},[28,1661,1609],{"class":207},[28,1663,1612],{"class":211},[28,1665,1666],{"class":207},"\u003C=",[28,1668,1617],{"class":38},[28,1670,218],{"class":211},[28,1672,1673],{"class":30,"line":108},[28,1674,1624],{"class":211},[28,1676,1677,1679,1681,1684,1686],{"class":30,"line":1407},[28,1678,1629],{"class":211},[28,1680,1507],{"class":207},[28,1682,1683],{"class":64},"\"小于等于600\"",[28,1685,1253],{"class":207},[28,1687,1275],{"class":211},[28,1689,1691],{"class":30,"line":1690},11,[28,1692,1643],{"class":211},[28,1694,1696],{"class":30,"line":1695},12,[28,1697,1698],{"class":207},"else\n",[28,1700,1702],{"class":30,"line":1701},13,[28,1703,1624],{"class":211},[28,1705,1707,1709,1711,1714,1716],{"class":30,"line":1706},14,[28,1708,1629],{"class":211},[28,1710,1507],{"class":207},[28,1712,1713],{"class":64},"\"大于600\"",[28,1715,1507],{"class":207},[28,1717,1275],{"class":211},[28,1719,1721],{"class":30,"line":1720},15,[28,1722,1643],{"class":211},[28,1724,1726],{"class":30,"line":1725},16,[28,1727,1728],{"class":269},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[28,1730,1732,1734,1737,1739,1741,1744,1746,1748],{"class":30,"line":1731},17,[28,1733,1609],{"class":207},[28,1735,1736],{"class":211}," (",[28,1738,401],{"class":38},[28,1740,1120],{"class":207},[28,1742,1743],{"class":211},"num",[28,1745,1120],{"class":207},[28,1747,521],{"class":38},[28,1749,218],{"class":211},[28,1751,1753],{"class":30,"line":1752},18,[28,1754,1624],{"class":211},[28,1756,1758,1760,1762,1765,1767],{"class":30,"line":1757},19,[28,1759,1629],{"class":211},[28,1761,1253],{"class":207},[28,1763,1764],{"class":64},"\"小于100\"",[28,1766,1253],{"class":207},[28,1768,1275],{"class":211},[28,1770,1772],{"class":30,"line":1771},20,[28,1773,1643],{"class":211},[28,1775,1777,1780,1783,1786,1789,1791,1794,1796,1798,1801],{"class":30,"line":1776},21,[28,1778,1779],{"class":207},"else",[28,1781,1782],{"class":207}," if",[28,1784,1785],{"class":211}," (nmu",[28,1787,1788],{"class":207},">=",[28,1790,521],{"class":38},[28,1792,1793],{"class":207},"&&",[28,1795,1743],{"class":211},[28,1797,1120],{"class":207},[28,1799,1800],{"class":38},"200",[28,1802,218],{"class":211},[28,1804,1806],{"class":30,"line":1805},22,[28,1807,1624],{"class":211},[28,1809,1811,1813,1815,1818,1820,1822],{"class":30,"line":1810},23,[28,1812,1629],{"class":211},[28,1814,1253],{"class":207},[28,1816,1817],{"class":64},"\"不小于100且小于200\"",[28,1819,1253],{"class":207},[28,1821,1318],{"class":211},[28,1823,1824],{"class":269}," \u002F\u002F可以无限else if,python中是elif：\n",[28,1826,1828],{"class":30,"line":1827},24,[28,1829,1643],{"class":211},[28,1831,1833],{"class":30,"line":1832},25,[28,1834,1698],{"class":207},[28,1836,1838],{"class":30,"line":1837},26,[28,1839,1624],{"class":211},[28,1841,1843,1845,1847,1850,1852],{"class":30,"line":1842},27,[28,1844,1629],{"class":211},[28,1846,1253],{"class":207},[28,1848,1849],{"class":64},"\"不小于200\"",[28,1851,1253],{"class":207},[28,1853,1275],{"class":211},[28,1855,1857],{"class":30,"line":1856},28,[28,1858,1643],{"class":211},[28,1860,1862],{"class":30,"line":1861},29,[28,1863,1864],{"class":269},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[161,1866,1867],{"start":42},[119,1868,1869],{},"三目运算符",[18,1871,1873],{"className":198,"code":1872,"language":200,"meta":23,"style":23},"\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",[25,1874,1875,1880,1885,1911,1933,1950,1955,1978,1993],{"__ignoreMap":23},[28,1876,1877],{"class":30,"line":31},[28,1878,1879],{"class":269},"\u002F\u002F创建三个变量a,b,c\n",[28,1881,1882],{"class":30,"line":42},[28,1883,1884],{"class":269},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[28,1886,1887,1889,1891,1893,1895,1898,1900,1902,1905,1907,1909],{"class":30,"line":50},[28,1888,215],{"class":207},[28,1890,1476],{"class":211},[28,1892,257],{"class":207},[28,1894,910],{"class":38},[28,1896,1897],{"class":211},",b",[28,1899,257],{"class":207},[28,1901,656],{"class":38},[28,1903,1904],{"class":211},",c",[28,1906,257],{"class":207},[28,1908,401],{"class":38},[28,1910,1370],{"class":211},[28,1912,1913,1915,1917,1920,1922,1924,1926,1928,1930],{"class":30,"line":58},[28,1914,498],{"class":211},[28,1916,257],{"class":207},[28,1918,1919],{"class":211},"(a",[28,1921,1170],{"class":207},[28,1923,473],{"class":211},[28,1925,1196],{"class":207},[28,1927,448],{"class":211},[28,1929,1069],{"class":207},[28,1931,1932],{"class":211},"b)\n",[28,1934,1935,1937,1939,1942,1944,1946,1948],{"class":30,"line":70},[28,1936,1447],{"class":211},[28,1938,1253],{"class":207},[28,1940,1941],{"class":64},"\"c=\"",[28,1943,1253],{"class":207},[28,1945,498],{"class":211},[28,1947,1253],{"class":207},[28,1949,1275],{"class":211},[28,1951,1952],{"class":30,"line":78},[28,1953,1954],{"class":269},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[28,1956,1957,1959,1961,1963,1965,1967,1969,1972,1974,1976],{"class":30,"line":86},[28,1958,1919],{"class":211},[28,1960,1170],{"class":207},[28,1962,473],{"class":211},[28,1964,1196],{"class":207},[28,1966,448],{"class":211},[28,1968,1069],{"class":207},[28,1970,1971],{"class":211},"b)",[28,1973,257],{"class":207},[28,1975,521],{"class":38},[28,1977,1370],{"class":211},[28,1979,1980,1982,1984,1986,1988,1990],{"class":30,"line":97},[28,1981,1447],{"class":211},[28,1983,1253],{"class":207},[28,1985,448],{"class":211},[28,1987,1253],{"class":207},[28,1989,1318],{"class":211},[28,1991,1992],{"class":269}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[28,1994,1995,1997,1999,2001,2003,2005],{"class":30,"line":108},[28,1996,1447],{"class":211},[28,1998,1253],{"class":207},[28,2000,473],{"class":211},[28,2002,1253],{"class":207},[28,2004,1318],{"class":211},[28,2006,2007],{"class":269}," \u002F\u002F10   a>b,b还是原值\n",[161,2009,2010],{"start":50},[119,2011,2012],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[18,2014,2016],{"className":198,"code":2015,"language":200,"meta":23,"style":23},"\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",[25,2017,2018,2023,2031,2044,2054,2058,2072,2085,2095,2103,2108,2133,2154,2176,2197,2219,2240,2260,2265],{"__ignoreMap":23},[28,2019,2020],{"class":30,"line":31},[28,2021,2022],{"class":269},"\u002F\u002F案例-电影打分\n",[28,2024,2025,2028],{"class":30,"line":42},[28,2026,2027],{"class":207},"#include",[28,2029,2030],{"class":64},"\u003Ciostream>\n",[28,2032,2033,2036,2039,2042],{"class":30,"line":50},[28,2034,2035],{"class":207},"using",[28,2037,2038],{"class":207}," namespace",[28,2040,2041],{"class":34}," std",[28,2043,1370],{"class":211},[28,2045,2046,2048,2051],{"class":30,"line":58},[28,2047,215],{"class":207},[28,2049,2050],{"class":34}," main",[28,2052,2053],{"class":211},"()\n",[28,2055,2056],{"class":30,"line":70},[28,2057,1624],{"class":211},[28,2059,2060,2063,2066,2068,2070],{"class":30,"line":78},[28,2061,2062],{"class":207},"    int",[28,2064,2065],{"class":211}," score",[28,2067,257],{"class":207},[28,2069,401],{"class":38},[28,2071,1370],{"class":211},[28,2073,2074,2076,2078,2081,2083],{"class":30,"line":86},[28,2075,1629],{"class":211},[28,2077,1253],{"class":207},[28,2079,2080],{"class":64},"\"电影打分：\"",[28,2082,1253],{"class":207},[28,2084,1275],{"class":211},[28,2086,2087,2090,2092],{"class":30,"line":97},[28,2088,2089],{"class":211},"    cin",[28,2091,1507],{"class":207},[28,2093,2094],{"class":211},"score;\n",[28,2096,2097,2100],{"class":30,"line":108},[28,2098,2099],{"class":207},"    switch",[28,2101,2102],{"class":211},"(score)\n",[28,2104,2105],{"class":30,"line":1407},[28,2106,2107],{"class":211},"    {\n",[28,2109,2110,2113,2116,2119,2121,2124,2126,2128,2131],{"class":30,"line":1690},[28,2111,2112],{"class":207},"        case",[28,2114,2115],{"class":38}," 10",[28,2117,2118],{"class":211},":cout",[28,2120,1253],{"class":207},[28,2122,2123],{"class":64},"\"经典\"",[28,2125,1253],{"class":207},[28,2127,1318],{"class":211},[28,2129,2130],{"class":207},"break",[28,2132,1370],{"class":211},[28,2134,2135,2137,2140,2142,2144,2146,2148,2150,2152],{"class":30,"line":1695},[28,2136,2112],{"class":207},[28,2138,2139],{"class":38}," 9",[28,2141,2118],{"class":211},[28,2143,1253],{"class":207},[28,2145,2123],{"class":64},[28,2147,1253],{"class":207},[28,2149,1318],{"class":211},[28,2151,2130],{"class":207},[28,2153,1370],{"class":211},[28,2155,2156,2158,2161,2163,2165,2168,2170,2172,2174],{"class":30,"line":1701},[28,2157,2112],{"class":207},[28,2159,2160],{"class":38}," 8",[28,2162,2118],{"class":211},[28,2164,1253],{"class":207},[28,2166,2167],{"class":64},"\"非常好\"",[28,2169,1253],{"class":207},[28,2171,1318],{"class":211},[28,2173,2130],{"class":207},[28,2175,1370],{"class":211},[28,2177,2178,2180,2183,2185,2187,2189,2191,2193,2195],{"class":30,"line":1706},[28,2179,2112],{"class":207},[28,2181,2182],{"class":38}," 7",[28,2184,2118],{"class":211},[28,2186,1253],{"class":207},[28,2188,2167],{"class":64},[28,2190,1253],{"class":207},[28,2192,1318],{"class":211},[28,2194,2130],{"class":207},[28,2196,1370],{"class":211},[28,2198,2199,2201,2204,2206,2208,2211,2213,2215,2217],{"class":30,"line":1720},[28,2200,2112],{"class":207},[28,2202,2203],{"class":38}," 6",[28,2205,2118],{"class":211},[28,2207,1253],{"class":207},[28,2209,2210],{"class":64},"\"一般\"",[28,2212,1253],{"class":207},[28,2214,1318],{"class":211},[28,2216,2130],{"class":207},[28,2218,1370],{"class":211},[28,2220,2221,2223,2226,2228,2230,2232,2234,2236,2238],{"class":30,"line":1725},[28,2222,2112],{"class":207},[28,2224,2225],{"class":38}," 5",[28,2227,2118],{"class":211},[28,2229,1253],{"class":207},[28,2231,2210],{"class":64},[28,2233,1253],{"class":207},[28,2235,1318],{"class":211},[28,2237,2130],{"class":207},[28,2239,1370],{"class":211},[28,2241,2242,2245,2247,2249,2252,2254,2256,2258],{"class":30,"line":1731},[28,2243,2244],{"class":207},"        default",[28,2246,2118],{"class":211},[28,2248,1253],{"class":207},[28,2250,2251],{"class":64},"\"烂片\"",[28,2253,1253],{"class":207},[28,2255,1318],{"class":211},[28,2257,2130],{"class":207},[28,2259,1370],{"class":211},[28,2261,2262],{"class":30,"line":1752},[28,2263,2264],{"class":211},"    }\n",[28,2266,2267],{"class":30,"line":1757},[28,2268,1643],{"class":211},[14,2270,2271],{},"if和switch区别：",[116,2273,2274,2277],{},[119,2275,2276],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[119,2278,2279],{},"switch优点：结构清晰，执行效率高",[177,2281,2283],{"id":2282},"_162循环结构","1.6.2循环结构",[161,2285,2286],{},[119,2287,2288],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[18,2290,2292],{"className":198,"code":2291,"language":200,"meta":23,"style":23},"\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",[25,2293,2294,2299,2307,2311,2324,2338,2342,2362,2372,2376,2388],{"__ignoreMap":23},[28,2295,2296],{"class":30,"line":31},[28,2297,2298],{"class":269},"\u002F\u002F打印0-9数字\n",[28,2300,2301,2303,2305],{"class":30,"line":42},[28,2302,215],{"class":207},[28,2304,2050],{"class":34},[28,2306,2053],{"class":211},[28,2308,2309],{"class":30,"line":50},[28,2310,1624],{"class":211},[28,2312,2313,2315,2318,2320,2322],{"class":30,"line":58},[28,2314,2062],{"class":207},[28,2316,2317],{"class":211}," num",[28,2319,257],{"class":207},[28,2321,401],{"class":38},[28,2323,1370],{"class":211},[28,2325,2326,2329,2332,2334,2336],{"class":30,"line":70},[28,2327,2328],{"class":207},"    while",[28,2330,2331],{"class":211},"(num",[28,2333,1120],{"class":207},[28,2335,656],{"class":38},[28,2337,218],{"class":211},[28,2339,2340],{"class":30,"line":78},[28,2341,2107],{"class":211},[28,2343,2344,2347,2350,2352,2354,2356,2359],{"class":30,"line":86},[28,2345,2346],{"class":34},"       std",[28,2348,2349],{"class":211},"::cout",[28,2351,1253],{"class":207},[28,2353,1743],{"class":211},[28,2355,1253],{"class":207},[28,2357,2358],{"class":34},"std",[28,2360,2361],{"class":211},"::endl;\n",[28,2363,2364,2367,2370],{"class":30,"line":97},[28,2365,2366],{"class":211},"        num",[28,2368,2369],{"class":207},"++",[28,2371,1370],{"class":211},[28,2373,2374],{"class":30,"line":108},[28,2375,2264],{"class":211},[28,2377,2378,2381,2383,2386],{"class":30,"line":1407},[28,2379,2380],{"class":34},"    system",[28,2382,212],{"class":211},[28,2384,2385],{"class":64},"\"pause\"",[28,2387,218],{"class":211},[28,2389,2390],{"class":30,"line":1690},[28,2391,1643],{"class":211},[14,2393,2394],{},"注意：写好循环条件，避免死循环情况",[18,2396,2398],{"className":198,"code":2397,"language":200,"meta":23,"style":23},"\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",[25,2399,2400,2405,2412,2419,2429,2437,2441,2446,2473,2478,2483,2491,2518,2523,2528,2541,2551,2555,2565,2570,2583,2588,2602,2607,2622,2626,2639,2643,2648,2652,2666,2674,2679,2685,2691,2696],{"__ignoreMap":23},[28,2401,2402],{"class":30,"line":31},[28,2403,2404],{"class":269},"\u002F\u002F循环结构-猜数字\n",[28,2406,2407,2409],{"class":30,"line":42},[28,2408,2027],{"class":207},[28,2410,2411],{"class":64}," \u003Ciostream>\n",[28,2413,2414,2416],{"class":30,"line":50},[28,2415,2027],{"class":207},[28,2417,2418],{"class":64}," \u003Cctime>\n",[28,2420,2421,2423,2425,2427],{"class":30,"line":58},[28,2422,2035],{"class":207},[28,2424,2038],{"class":207},[28,2426,2041],{"class":34},[28,2428,1370],{"class":211},[28,2430,2431,2433,2435],{"class":30,"line":70},[28,2432,215],{"class":207},[28,2434,2050],{"class":34},[28,2436,2053],{"class":211},[28,2438,2439],{"class":30,"line":78},[28,2440,1624],{"class":211},[28,2442,2443],{"class":30,"line":86},[28,2444,2445],{"class":269},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[28,2447,2448,2451,2454,2457,2460,2462,2465,2467,2470],{"class":30,"line":97},[28,2449,2450],{"class":34},"    srand",[28,2452,2453],{"class":211},"((",[28,2455,2456],{"class":207},"unsigned",[28,2458,2459],{"class":207}," int",[28,2461,639],{"class":211},[28,2463,2464],{"class":34},"time",[28,2466,212],{"class":211},[28,2468,2469],{"class":38},"NULL",[28,2471,2472],{"class":211},"));\n",[28,2474,2475],{"class":30,"line":108},[28,2476,2477],{"emptyLinePlaceholder":134},"\n",[28,2479,2480],{"class":30,"line":1407},[28,2481,2482],{"class":269},"    \u002F\u002F1.系统生成随机数\n",[28,2484,2485,2488],{"class":30,"line":1690},[28,2486,2487],{"class":269},"    \u002F\u002Frand()%100",[28,2489,2490],{"class":269}," \u002F\u002F生成0-99的随机数\n",[28,2492,2493,2495,2497,2499,2502,2505,2507,2509,2511,2513,2515],{"class":30,"line":1695},[28,2494,2062],{"class":207},[28,2496,2317],{"class":211},[28,2498,257],{"class":207},[28,2500,2501],{"class":34},"rand",[28,2503,2504],{"class":211},"()",[28,2506,538],{"class":207},[28,2508,521],{"class":38},[28,2510,691],{"class":207},[28,2512,427],{"class":38},[28,2514,266],{"class":211},[28,2516,2517],{"class":269}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[28,2519,2520],{"class":30,"line":1701},[28,2521,2522],{"class":269},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[28,2524,2525],{"class":30,"line":1706},[28,2526,2527],{"class":269},"    \u002F\u002F2.玩家猜测\n",[28,2529,2530,2532,2535,2537,2539],{"class":30,"line":1720},[28,2531,2062],{"class":207},[28,2533,2534],{"class":211}," val",[28,2536,257],{"class":207},[28,2538,401],{"class":38},[28,2540,1370],{"class":211},[28,2542,2543,2545,2547,2549],{"class":30,"line":1725},[28,2544,2328],{"class":207},[28,2546,1736],{"class":211},[28,2548,427],{"class":38},[28,2550,218],{"class":211},[28,2552,2553],{"class":30,"line":1731},[28,2554,2107],{"class":211},[28,2556,2557,2560,2562],{"class":30,"line":1752},[28,2558,2559],{"class":211},"        cin",[28,2561,1507],{"class":207},[28,2563,2564],{"class":211},"val;\n",[28,2566,2567],{"class":30,"line":1757},[28,2568,2569],{"class":269},"        \u002F\u002F3.判断玩家猜测\n",[28,2571,2572,2575,2578,2580],{"class":30,"line":1771},[28,2573,2574],{"class":207},"        if",[28,2576,2577],{"class":211},"(val",[28,2579,1120],{"class":207},[28,2581,2582],{"class":211},"num) \n",[28,2584,2585],{"class":30,"line":1776},[28,2586,2587],{"class":211},"        {\n",[28,2589,2590,2593,2595,2598,2600],{"class":30,"line":1805},[28,2591,2592],{"class":211},"            cout",[28,2594,1253],{"class":207},[28,2596,2597],{"class":64},"\"猜小了！\"",[28,2599,1253],{"class":207},[28,2601,1275],{"class":211},[28,2603,2604],{"class":30,"line":1810},[28,2605,2606],{"class":211},"        }\n",[28,2608,2609,2612,2614,2617,2619],{"class":30,"line":1827},[28,2610,2611],{"class":207},"        else",[28,2613,1782],{"class":207},[28,2615,2616],{"class":211}," (val",[28,2618,1170],{"class":207},[28,2620,2621],{"class":211},"num)\n",[28,2623,2624],{"class":30,"line":1832},[28,2625,2587],{"class":211},[28,2627,2628,2630,2632,2635,2637],{"class":30,"line":1837},[28,2629,2592],{"class":211},[28,2631,1253],{"class":207},[28,2633,2634],{"class":64},"\"猜大了！\"",[28,2636,1253],{"class":207},[28,2638,1275],{"class":211},[28,2640,2641],{"class":30,"line":1842},[28,2642,2606],{"class":211},[28,2644,2645],{"class":30,"line":1856},[28,2646,2647],{"class":207},"        else\n",[28,2649,2650],{"class":30,"line":1861},[28,2651,2587],{"class":211},[28,2653,2655,2657,2659,2662,2664],{"class":30,"line":2654},30,[28,2656,2592],{"class":211},[28,2658,1253],{"class":207},[28,2660,2661],{"class":64},"\"猜对了！\"",[28,2663,1253],{"class":207},[28,2665,1275],{"class":211},[28,2667,2669,2672],{"class":30,"line":2668},31,[28,2670,2671],{"class":207},"            break",[28,2673,1370],{"class":211},[28,2675,2677],{"class":30,"line":2676},32,[28,2678,2606],{"class":211},[28,2680,2682],{"class":30,"line":2681},33,[28,2683,2684],{"class":269},"        \u002F\u002F猜对 退出游戏\n",[28,2686,2688],{"class":30,"line":2687},34,[28,2689,2690],{"class":269},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[28,2692,2694],{"class":30,"line":2693},35,[28,2695,2264],{"class":211},[28,2697,2699],{"class":30,"line":2698},36,[28,2700,1643],{"class":211},[161,2702,2703],{"start":42},[119,2704,2705,2706,2709],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[359,2707,2708],{},"do...while会先执行一次循环语句","，在判断循环语句",[18,2711,2713],{"className":198,"code":2712,"language":200,"meta":23,"style":23},"\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",[25,2714,2715,2720,2728,2732,2744,2752,2756,2773,2780,2784,2797,2807],{"__ignoreMap":23},[28,2716,2717],{"class":30,"line":31},[28,2718,2719],{"class":269},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[28,2721,2722,2724,2726],{"class":30,"line":42},[28,2723,215],{"class":207},[28,2725,2050],{"class":34},[28,2727,2053],{"class":211},[28,2729,2730],{"class":30,"line":50},[28,2731,1624],{"class":211},[28,2733,2734,2736,2738,2740,2742],{"class":30,"line":58},[28,2735,2062],{"class":207},[28,2737,2317],{"class":211},[28,2739,257],{"class":207},[28,2741,401],{"class":38},[28,2743,1370],{"class":211},[28,2745,2746,2749],{"class":30,"line":70},[28,2747,2748],{"class":207},"    do",[28,2750,2751],{"class":211}," \n",[28,2753,2754],{"class":30,"line":78},[28,2755,2107],{"class":211},[28,2757,2758,2761,2763,2765,2767,2769,2771],{"class":30,"line":86},[28,2759,2760],{"class":34},"        std",[28,2762,2349],{"class":211},[28,2764,1253],{"class":207},[28,2766,1743],{"class":211},[28,2768,1253],{"class":207},[28,2770,2358],{"class":34},[28,2772,2361],{"class":211},[28,2774,2775,2777],{"class":30,"line":97},[28,2776,2366],{"class":211},[28,2778,2779],{"class":207},"++\n",[28,2781,2782],{"class":30,"line":108},[28,2783,2264],{"class":211},[28,2785,2786,2788,2790,2792,2794],{"class":30,"line":1407},[28,2787,2328],{"class":207},[28,2789,2331],{"class":211},[28,2791,1120],{"class":207},[28,2793,656],{"class":38},[28,2795,2796],{"class":211},");\n",[28,2798,2799,2801,2803,2805],{"class":30,"line":1690},[28,2800,2380],{"class":34},[28,2802,212],{"class":211},[28,2804,2385],{"class":64},[28,2806,2796],{"class":211},[28,2808,2809],{"class":30,"line":1695},[28,2810,1643],{"class":211},[14,2812,2813],{},"案例-水仙花数",[14,2815,2816],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2818,2819],{},"例如：1^3+5^3+3^3=153",[14,2821,2822],{},"请用do...while语句，求出所有3位数的水仙花数",[18,2824,2826],{"className":198,"code":2825,"language":200,"meta":23,"style":23},"#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",[25,2827,2828,2834,2844,2852,2856,2861,2873,2879,2883,2888,2904,2920,2936,2951,2970,2985,3033,3037,3049,3053,3061,3065,3079],{"__ignoreMap":23},[28,2829,2830,2832],{"class":30,"line":31},[28,2831,2027],{"class":207},[28,2833,2411],{"class":64},[28,2835,2836,2838,2840,2842],{"class":30,"line":42},[28,2837,2035],{"class":207},[28,2839,2038],{"class":207},[28,2841,2041],{"class":34},[28,2843,1370],{"class":211},[28,2845,2846,2848,2850],{"class":30,"line":50},[28,2847,215],{"class":207},[28,2849,2050],{"class":34},[28,2851,2053],{"class":211},[28,2853,2854],{"class":30,"line":58},[28,2855,1624],{"class":211},[28,2857,2858],{"class":30,"line":70},[28,2859,2860],{"class":269},"    \u002F\u002F1.先打印所有三位数字\n",[28,2862,2863,2865,2867,2869,2871],{"class":30,"line":78},[28,2864,2062],{"class":207},[28,2866,2317],{"class":211},[28,2868,257],{"class":207},[28,2870,521],{"class":38},[28,2872,1370],{"class":211},[28,2874,2875,2877],{"class":30,"line":86},[28,2876,2748],{"class":207},[28,2878,2751],{"class":211},[28,2880,2881],{"class":30,"line":97},[28,2882,2107],{"class":211},[28,2884,2885],{"class":30,"line":108},[28,2886,2887],{"class":269},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[28,2889,2890,2893,2895,2897,2899,2901],{"class":30,"line":1407},[28,2891,2892],{"class":207},"        int",[28,2894,1476],{"class":211},[28,2896,257],{"class":207},[28,2898,401],{"class":38},[28,2900,266],{"class":211},[28,2902,2903],{"class":269}," \u002F\u002F个位\n",[28,2905,2906,2908,2911,2913,2915,2917],{"class":30,"line":1690},[28,2907,2892],{"class":207},[28,2909,2910],{"class":211}," b",[28,2912,257],{"class":207},[28,2914,401],{"class":38},[28,2916,266],{"class":211},[28,2918,2919],{"class":269}," \u002F\u002F十位\n",[28,2921,2922,2924,2927,2929,2931,2933],{"class":30,"line":1695},[28,2923,2892],{"class":207},[28,2925,2926],{"class":211}," c",[28,2928,257],{"class":207},[28,2930,401],{"class":38},[28,2932,266],{"class":211},[28,2934,2935],{"class":269}," \u002F\u002F百位\n",[28,2937,2938,2941,2943,2945,2947,2949],{"class":30,"line":1701},[28,2939,2940],{"class":211},"        a",[28,2942,257],{"class":207},[28,2944,1743],{"class":211},[28,2946,538],{"class":207},[28,2948,656],{"class":38},[28,2950,1370],{"class":211},[28,2952,2953,2956,2958,2960,2962,2964,2966,2968],{"class":30,"line":1706},[28,2954,2955],{"class":211},"        b",[28,2957,257],{"class":207},[28,2959,1743],{"class":211},[28,2961,794],{"class":207},[28,2963,656],{"class":38},[28,2965,538],{"class":207},[28,2967,656],{"class":38},[28,2969,1370],{"class":211},[28,2971,2972,2975,2977,2979,2981,2983],{"class":30,"line":1720},[28,2973,2974],{"class":211},"        c",[28,2976,257],{"class":207},[28,2978,1743],{"class":211},[28,2980,794],{"class":207},[28,2982,521],{"class":38},[28,2984,1370],{"class":211},[28,2986,2987,2989,2991,2993,2995,2997,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3024,3027,3030],{"class":30,"line":1725},[28,2988,2574],{"class":207},[28,2990,1919],{"class":211},[28,2992,665],{"class":207},[28,2994,448],{"class":211},[28,2996,665],{"class":207},[28,2998,448],{"class":211},[28,3000,691],{"class":207},[28,3002,473],{"class":211},[28,3004,665],{"class":207},[28,3006,473],{"class":211},[28,3008,665],{"class":207},[28,3010,473],{"class":211},[28,3012,691],{"class":207},[28,3014,498],{"class":211},[28,3016,665],{"class":207},[28,3018,498],{"class":211},[28,3020,665],{"class":207},[28,3022,3023],{"class":211},"c ",[28,3025,3026],{"class":207},"==",[28,3028,3029],{"class":211}," num)",[28,3031,3032],{"class":269}," \u002F\u002F如果是水仙花数，才打印\n",[28,3034,3035],{"class":30,"line":1731},[28,3036,2587],{"class":211},[28,3038,3039,3041,3043,3045,3047],{"class":30,"line":1752},[28,3040,2592],{"class":211},[28,3042,1253],{"class":207},[28,3044,1743],{"class":211},[28,3046,1253],{"class":207},[28,3048,1275],{"class":211},[28,3050,3051],{"class":30,"line":1757},[28,3052,2606],{"class":211},[28,3054,3055,3057,3059],{"class":30,"line":1771},[28,3056,2366],{"class":211},[28,3058,2369],{"class":207},[28,3060,1370],{"class":211},[28,3062,3063],{"class":30,"line":1776},[28,3064,2264],{"class":211},[28,3066,3067,3069,3072,3074,3077],{"class":30,"line":1805},[28,3068,2328],{"class":207},[28,3070,3071],{"class":211}," (num ",[28,3073,1120],{"class":207},[28,3075,3076],{"class":38}," 1000",[28,3078,2796],{"class":211},[28,3080,3081],{"class":30,"line":1810},[28,3082,1643],{"class":211},[161,3084,3085],{"start":50},[119,3086,3087],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[18,3089,3091],{"className":198,"code":3090,"language":200,"meta":23,"style":23},"\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",[25,3092,3093,3098,3127,3131,3143,3147,3152,3163,3170,3174,3188,3192,3199,3203,3215,3224],{"__ignoreMap":23},[28,3094,3095],{"class":30,"line":31},[28,3096,3097],{"class":269},"\u002F\u002F从数字0-9打印\n",[28,3099,3100,3103,3105,3107,3110,3112,3114,3117,3119,3121,3123,3125],{"class":30,"line":42},[28,3101,3102],{"class":207},"for",[28,3104,212],{"class":211},[28,3106,215],{"class":207},[28,3108,3109],{"class":211}," i",[28,3111,257],{"class":207},[28,3113,401],{"class":38},[28,3115,3116],{"class":211},";i",[28,3118,1120],{"class":207},[28,3120,656],{"class":38},[28,3122,3116],{"class":211},[28,3124,2369],{"class":207},[28,3126,218],{"class":211},[28,3128,3129],{"class":30,"line":50},[28,3130,1624],{"class":211},[28,3132,3133,3135,3137,3139,3141],{"class":30,"line":58},[28,3134,1629],{"class":211},[28,3136,1253],{"class":207},[28,3138,651],{"class":211},[28,3140,1253],{"class":207},[28,3142,1275],{"class":211},[28,3144,3145],{"class":30,"line":70},[28,3146,1643],{"class":211},[28,3148,3149],{"class":30,"line":78},[28,3150,3151],{"class":269},"\u002F\u002F上式可以进行拆分\n",[28,3153,3154,3156,3158,3160],{"class":30,"line":86},[28,3155,215],{"class":207},[28,3157,3109],{"class":211},[28,3159,257],{"class":207},[28,3161,3162],{"class":38},"0\n",[28,3164,3165,3167],{"class":30,"line":97},[28,3166,3102],{"class":207},[28,3168,3169],{"class":211},"(;;;)\n",[28,3171,3172],{"class":30,"line":108},[28,3173,1624],{"class":211},[28,3175,3176,3179,3182,3184,3186],{"class":30,"line":1407},[28,3177,3178],{"class":207},"    if",[28,3180,3181],{"class":211},"(i",[28,3183,1788],{"class":207},[28,3185,656],{"class":38},[28,3187,218],{"class":211},[28,3189,3190],{"class":30,"line":1690},[28,3191,2107],{"class":211},[28,3193,3194,3197],{"class":30,"line":1695},[28,3195,3196],{"class":207},"        break",[28,3198,1370],{"class":211},[28,3200,3201],{"class":30,"line":1701},[28,3202,2264],{"class":211},[28,3204,3205,3207,3209,3211,3213],{"class":30,"line":1706},[28,3206,1629],{"class":211},[28,3208,1253],{"class":207},[28,3210,651],{"class":211},[28,3212,1253],{"class":207},[28,3214,1275],{"class":211},[28,3216,3217,3220,3222],{"class":30,"line":1720},[28,3218,3219],{"class":211},"    i",[28,3221,2369],{"class":207},[28,3223,1370],{"class":211},[28,3225,3226],{"class":30,"line":1725},[28,3227,1643],{"class":211},[14,3229,3230],{},"小练习",[18,3232,3234],{"className":198,"code":3233,"language":200,"meta":23,"style":23},"#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",[25,3235,3236,3242,3252,3260,3264,3269,3274,3302,3306,3311,3316,3357,3361,3374,3378,3382,3386,3398,3402,3406],{"__ignoreMap":23},[28,3237,3238,3240],{"class":30,"line":31},[28,3239,2027],{"class":207},[28,3241,2030],{"class":64},[28,3243,3244,3246,3248,3250],{"class":30,"line":42},[28,3245,2035],{"class":207},[28,3247,2038],{"class":207},[28,3249,2041],{"class":34},[28,3251,1370],{"class":211},[28,3253,3254,3256,3258],{"class":30,"line":50},[28,3255,215],{"class":207},[28,3257,2050],{"class":34},[28,3259,2053],{"class":211},[28,3261,3262],{"class":30,"line":58},[28,3263,1624],{"class":211},[28,3265,3266],{"class":30,"line":70},[28,3267,3268],{"class":269},"    \u002F\u002F敲桌子案例\n",[28,3270,3271],{"class":30,"line":78},[28,3272,3273],{"class":269},"    \u002F\u002F1.先输出1-100的数字\n",[28,3275,3276,3279,3281,3283,3285,3287,3289,3292,3294,3296,3298,3300],{"class":30,"line":86},[28,3277,3278],{"class":207},"    for",[28,3280,212],{"class":211},[28,3282,215],{"class":207},[28,3284,3109],{"class":211},[28,3286,257],{"class":207},[28,3288,427],{"class":38},[28,3290,3291],{"class":211},"; i",[28,3293,1666],{"class":207},[28,3295,521],{"class":38},[28,3297,3291],{"class":211},[28,3299,2369],{"class":207},[28,3301,218],{"class":211},[28,3303,3304],{"class":30,"line":97},[28,3305,2107],{"class":211},[28,3307,3308],{"class":30,"line":108},[28,3309,3310],{"class":269},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[28,3312,3313],{"class":30,"line":1407},[28,3314,3315],{"class":269},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[28,3317,3318,3320,3322,3324,3326,3328,3330,3333,3335,3337,3339,3341,3343,3345,3347,3349,3351,3353,3355],{"class":30,"line":1690},[28,3319,2574],{"class":207},[28,3321,3181],{"class":211},[28,3323,538],{"class":207},[28,3325,579],{"class":38},[28,3327,3026],{"class":207},[28,3329,401],{"class":38},[28,3331,3332],{"class":207}," ||",[28,3334,3109],{"class":211},[28,3336,538],{"class":207},[28,3338,656],{"class":38},[28,3340,3026],{"class":207},[28,3342,579],{"class":38},[28,3344,3332],{"class":207},[28,3346,3109],{"class":211},[28,3348,794],{"class":207},[28,3350,656],{"class":38},[28,3352,3026],{"class":207},[28,3354,579],{"class":38},[28,3356,218],{"class":211},[28,3358,3359],{"class":30,"line":1695},[28,3360,2587],{"class":211},[28,3362,3363,3365,3367,3370,3372],{"class":30,"line":1701},[28,3364,2592],{"class":211},[28,3366,1253],{"class":207},[28,3368,3369],{"class":64},"\"敲桌子\"",[28,3371,1253],{"class":207},[28,3373,1275],{"class":211},[28,3375,3376],{"class":30,"line":1706},[28,3377,2606],{"class":211},[28,3379,3380],{"class":30,"line":1720},[28,3381,2647],{"class":207},[28,3383,3384],{"class":30,"line":1725},[28,3385,2587],{"class":211},[28,3387,3388,3390,3392,3394,3396],{"class":30,"line":1731},[28,3389,2592],{"class":211},[28,3391,1253],{"class":207},[28,3393,651],{"class":211},[28,3395,1253],{"class":207},[28,3397,1275],{"class":211},[28,3399,3400],{"class":30,"line":1752},[28,3401,2606],{"class":211},[28,3403,3404],{"class":30,"line":1757},[28,3405,2264],{"class":211},[28,3407,3408],{"class":30,"line":1771},[28,3409,1643],{"class":211},[14,3411,3412],{},"嵌套实现星图",[18,3414,3416],{"className":198,"code":3415,"language":200,"meta":23,"style":23},"#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",[25,3417,3418,3424,3434,3442,3446,3472,3476,3505,3509,3520,3524,3533,3537],{"__ignoreMap":23},[28,3419,3420,3422],{"class":30,"line":31},[28,3421,2027],{"class":207},[28,3423,2030],{"class":64},[28,3425,3426,3428,3430,3432],{"class":30,"line":42},[28,3427,2035],{"class":207},[28,3429,2038],{"class":207},[28,3431,2041],{"class":34},[28,3433,1370],{"class":211},[28,3435,3436,3438,3440],{"class":30,"line":50},[28,3437,215],{"class":207},[28,3439,2050],{"class":34},[28,3441,2053],{"class":211},[28,3443,3444],{"class":30,"line":58},[28,3445,1624],{"class":211},[28,3447,3448,3450,3452,3454,3456,3458,3460,3462,3464,3466,3468,3470],{"class":30,"line":70},[28,3449,3278],{"class":207},[28,3451,1736],{"class":211},[28,3453,215],{"class":207},[28,3455,3109],{"class":211},[28,3457,257],{"class":207},[28,3459,401],{"class":38},[28,3461,3116],{"class":211},[28,3463,1120],{"class":207},[28,3465,656],{"class":38},[28,3467,3116],{"class":211},[28,3469,2369],{"class":207},[28,3471,218],{"class":211},[28,3473,3474],{"class":30,"line":78},[28,3475,2107],{"class":211},[28,3477,3478,3481,3483,3485,3488,3490,3492,3495,3497,3499,3501,3503],{"class":30,"line":86},[28,3479,3480],{"class":207},"        for",[28,3482,1736],{"class":211},[28,3484,215],{"class":207},[28,3486,3487],{"class":211}," j",[28,3489,257],{"class":207},[28,3491,401],{"class":38},[28,3493,3494],{"class":211},";j",[28,3496,1120],{"class":207},[28,3498,656],{"class":38},[28,3500,3494],{"class":211},[28,3502,2369],{"class":207},[28,3504,218],{"class":211},[28,3506,3507],{"class":30,"line":97},[28,3508,2587],{"class":211},[28,3510,3511,3513,3515,3518],{"class":30,"line":108},[28,3512,2592],{"class":211},[28,3514,1253],{"class":207},[28,3516,3517],{"class":64},"\"*\"",[28,3519,1370],{"class":211},[28,3521,3522],{"class":30,"line":1407},[28,3523,2606],{"class":211},[28,3525,3526,3529,3531],{"class":30,"line":1690},[28,3527,3528],{"class":211},"        cout",[28,3530,1253],{"class":207},[28,3532,1275],{"class":211},[28,3534,3535],{"class":30,"line":1695},[28,3536,2264],{"class":211},[28,3538,3539],{"class":30,"line":1701},[28,3540,1643],{"class":211},[14,3542,3543],{},"乘法口诀表",[18,3545,3547],{"className":198,"code":3546,"language":200,"meta":23,"style":23},"#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",[25,3548,3549,3555,3565,3573,3577,3603,3607,3632,3636,3676,3680,3688,3692],{"__ignoreMap":23},[28,3550,3551,3553],{"class":30,"line":31},[28,3552,2027],{"class":207},[28,3554,2411],{"class":64},[28,3556,3557,3559,3561,3563],{"class":30,"line":42},[28,3558,2035],{"class":207},[28,3560,2038],{"class":207},[28,3562,2041],{"class":34},[28,3564,1370],{"class":211},[28,3566,3567,3569,3571],{"class":30,"line":50},[28,3568,215],{"class":207},[28,3570,2050],{"class":34},[28,3572,2053],{"class":211},[28,3574,3575],{"class":30,"line":58},[28,3576,1624],{"class":211},[28,3578,3579,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601],{"class":30,"line":70},[28,3580,3278],{"class":207},[28,3582,212],{"class":211},[28,3584,215],{"class":207},[28,3586,3109],{"class":211},[28,3588,257],{"class":207},[28,3590,427],{"class":38},[28,3592,3116],{"class":211},[28,3594,1120],{"class":207},[28,3596,656],{"class":38},[28,3598,3116],{"class":211},[28,3600,2369],{"class":207},[28,3602,218],{"class":211},[28,3604,3605],{"class":30,"line":78},[28,3606,2107],{"class":211},[28,3608,3609,3611,3613,3615,3617,3619,3621,3623,3625,3628,3630],{"class":30,"line":86},[28,3610,3480],{"class":207},[28,3612,212],{"class":211},[28,3614,215],{"class":207},[28,3616,3487],{"class":211},[28,3618,257],{"class":207},[28,3620,427],{"class":38},[28,3622,3494],{"class":211},[28,3624,1666],{"class":207},[28,3626,3627],{"class":211},"i;j",[28,3629,2369],{"class":207},[28,3631,218],{"class":211},[28,3633,3634],{"class":30,"line":97},[28,3635,2587],{"class":211},[28,3637,3638,3640,3642,3644,3646,3648,3650,3652,3654,3657,3659,3661,3663,3665,3667,3670,3672,3674],{"class":30,"line":108},[28,3639,2592],{"class":211},[28,3641,1253],{"class":207},[28,3643,677],{"class":211},[28,3645,1253],{"class":207},[28,3647,3517],{"class":64},[28,3649,1253],{"class":207},[28,3651,651],{"class":211},[28,3653,1253],{"class":207},[28,3655,3656],{"class":64},"\"=\"",[28,3658,1253],{"class":207},[28,3660,651],{"class":211},[28,3662,665],{"class":207},[28,3664,677],{"class":211},[28,3666,1253],{"class":207},[28,3668,3669],{"class":64},"'",[28,3671,1310],{"class":38},[28,3673,3669],{"class":64},[28,3675,1370],{"class":211},[28,3677,3678],{"class":30,"line":1407},[28,3679,2606],{"class":211},[28,3681,3682,3684,3686],{"class":30,"line":1690},[28,3683,3528],{"class":211},[28,3685,1253],{"class":207},[28,3687,1275],{"class":211},[28,3689,3690],{"class":30,"line":1695},[28,3691,2264],{"class":211},[28,3693,3694],{"class":30,"line":1701},[28,3695,1643],{"class":211},[177,3697,3699],{"id":3698},"_163跳出语句","1.6.3跳出语句",[161,3701,3702],{},[119,3703,3704],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3706,3707],{},"break使用时机：",[116,3709,3710,3713,3716],{},[119,3711,3712],{},"出现在switch条件语句中，作用是终止case并跳出switch",[119,3714,3715],{},"出现在循环结构中，作用是跳出当前的循环结构",[119,3717,3718],{},"出现在嵌套循环中，跳出最近的内层循环语句",[161,3720,3721,3724],{"start":42},[119,3722,3723],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[119,3725,3726],{},"goto语句\n语法：goto 标记;",[14,3728,3729],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[18,3731,3733],{"className":198,"code":3732,"language":200,"meta":23,"style":23},"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",[25,3734,3735,3743,3747,3760,3770,3783,3796,3809,3817,3833],{"__ignoreMap":23},[28,3736,3737,3739,3741],{"class":30,"line":31},[28,3738,215],{"class":207},[28,3740,2050],{"class":34},[28,3742,2053],{"class":211},[28,3744,3745],{"class":30,"line":42},[28,3746,1624],{"class":211},[28,3748,3749,3751,3753,3756,3758],{"class":30,"line":50},[28,3750,1629],{"class":211},[28,3752,1253],{"class":207},[28,3754,3755],{"class":64},"\"1\"",[28,3757,1253],{"class":207},[28,3759,1275],{"class":211},[28,3761,3762,3765,3768],{"class":30,"line":58},[28,3763,3764],{"class":207},"    goto",[28,3766,3767],{"class":34}," FLAG",[28,3769,1370],{"class":211},[28,3771,3772,3774,3776,3779,3781],{"class":30,"line":70},[28,3773,1629],{"class":211},[28,3775,1253],{"class":207},[28,3777,3778],{"class":64},"\"2\"",[28,3780,1253],{"class":207},[28,3782,1275],{"class":211},[28,3784,3785,3787,3789,3792,3794],{"class":30,"line":78},[28,3786,1629],{"class":211},[28,3788,1253],{"class":207},[28,3790,3791],{"class":64},"\"3\"",[28,3793,1253],{"class":207},[28,3795,1275],{"class":211},[28,3797,3798,3800,3802,3805,3807],{"class":30,"line":86},[28,3799,1629],{"class":211},[28,3801,1253],{"class":207},[28,3803,3804],{"class":64},"\"4\"",[28,3806,1253],{"class":207},[28,3808,1275],{"class":211},[28,3810,3811,3814],{"class":30,"line":97},[28,3812,3813],{"class":34},"    FLAG",[28,3815,3816],{"class":211},":\n",[28,3818,3819,3821,3823,3826,3828,3830],{"class":30,"line":108},[28,3820,1629],{"class":211},[28,3822,1253],{"class":207},[28,3824,3825],{"class":64},"\"5\"",[28,3827,1253],{"class":207},[28,3829,1318],{"class":211},[28,3831,3832],{"class":269},"\u002F\u002F跳过了2,3,4,直接到5\n",[28,3834,3835],{"class":30,"line":1407},[28,3836,1643],{"class":211},[149,3838,3840],{"id":3839},"_17数组","1.7数组",[177,3842,3844],{"id":3843},"_171一维数组","1.7.1一维数组",[161,3846,3847],{},[119,3848,3849],{},"一维数组定义方式",[347,3851,3852,3862],{},[350,3853,3854],{},[353,3855,3856,3859],{},[356,3857,3858],{},"方式",[356,3860,3861],{},"注意事项",[394,3863,3864,3878,3888],{},[353,3865,3866,3872],{},[399,3867,3868,3869,266],{},"数据类型 数组名",[28,3870,3871],{},"数组长度",[399,3873,3874,3875,3877],{},"这种方式是先定义再arr",[28,3876,651],{},"赋值",[353,3879,3880,3885],{},[399,3881,3868,3882,3884],{},[28,3883,3871],{},"={值1,值2....};",[399,3886,3887],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[353,3889,3890,3894],{},[399,3891,3868,3892,3884],{},[28,3893],{},[399,3895,3896,3897,3899],{},"int arr",[28,3898],{},";这是不正确的，按照这样的方式定义必须有初始长度",[161,3901,3902],{"start":42},[119,3903,3904],{},"一维数组数组名\n用途：",[116,3906,3907],{},[119,3908,3909],{},"1.可以统计整个数组在内存中的长度：",[18,3911,3913],{"className":198,"code":3912,"language":200,"meta":23,"style":23},"sizeof(arr);\nsizeof(arr[0]);\n",[25,3914,3915,3922],{"__ignoreMap":23},[28,3916,3917,3919],{"class":30,"line":31},[28,3918,208],{"class":207},[28,3920,3921],{"class":211},"(arr);\n",[28,3923,3924,3926,3929,3931],{"class":30,"line":42},[28,3925,208],{"class":207},[28,3927,3928],{"class":211},"(arr[",[28,3930,401],{"class":38},[28,3932,3933],{"class":211},"]);\n",[116,3935,3936],{},[119,3937,3938],{},"2.可以获取数组在内存中的首地址:",[18,3940,3942],{"className":198,"code":3941,"language":200,"meta":23,"style":23},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[25,3943,3944,3949,3962,3967],{"__ignoreMap":23},[28,3945,3946],{"class":30,"line":31},[28,3947,3948],{"class":269},"\u002F\u002F查看16进制的首地址\n",[28,3950,3951,3953,3955,3958,3960],{"class":30,"line":42},[28,3952,1447],{"class":211},[28,3954,1253],{"class":207},[28,3956,3957],{"class":211},"arr",[28,3959,1253],{"class":207},[28,3961,1275],{"class":211},[28,3963,3964],{"class":30,"line":50},[28,3965,3966],{"class":269},"\u002F\u002F看10进制数\n",[28,3968,3969,3971,3973,3975,3977,3979,3981,3984,3986,3988,3990],{"class":30,"line":58},[28,3970,1447],{"class":211},[28,3972,1253],{"class":207},[28,3974,212],{"class":211},[28,3976,215],{"class":207},[28,3978,639],{"class":211},[28,3980,563],{"class":207},[28,3982,3983],{"class":211},"arr[",[28,3985,401],{"class":38},[28,3987,1150],{"class":211},[28,3989,1253],{"class":207},[28,3991,1275],{"class":211},[14,3993,3994],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[116,3996,3997],{},[119,3998,3999],{},"1️⃣五只小猪称体重",[18,4001,4003],{"className":198,"code":4002,"language":200,"meta":23,"style":23},"#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",[25,4004,4005,4011,4021,4029,4033,4073,4086,4112,4116,4128,4132,4142,4146,4150,4163,4173],{"__ignoreMap":23},[28,4006,4007,4009],{"class":30,"line":31},[28,4008,2027],{"class":207},[28,4010,2030],{"class":64},[28,4012,4013,4015,4017,4019],{"class":30,"line":42},[28,4014,2035],{"class":207},[28,4016,2038],{"class":207},[28,4018,2041],{"class":34},[28,4020,1370],{"class":211},[28,4022,4023,4025,4027],{"class":30,"line":50},[28,4024,215],{"class":207},[28,4026,2050],{"class":34},[28,4028,2053],{"class":211},[28,4030,4031],{"class":30,"line":58},[28,4032,1624],{"class":211},[28,4034,4035,4037,4040,4042,4044,4046,4048,4051,4053,4056,4058,4060,4062,4065,4067,4070],{"class":30,"line":70},[28,4036,2062],{"class":207},[28,4038,4039],{"class":211}," arr[",[28,4041,529],{"class":38},[28,4043,1150],{"class":211},[28,4045,257],{"class":207},[28,4047,1106],{"class":211},[28,4049,4050],{"class":38},"300",[28,4052,588],{"class":211},[28,4054,4055],{"class":38},"350",[28,4057,588],{"class":211},[28,4059,1800],{"class":38},[28,4061,588],{"class":211},[28,4063,4064],{"class":38},"400",[28,4066,588],{"class":211},[28,4068,4069],{"class":38},"250",[28,4071,4072],{"class":211},"};\n",[28,4074,4075,4077,4080,4082,4084],{"class":30,"line":78},[28,4076,2062],{"class":207},[28,4078,4079],{"class":211}," tmp",[28,4081,257],{"class":207},[28,4083,401],{"class":38},[28,4085,1370],{"class":211},[28,4087,4088,4090,4092,4094,4096,4098,4100,4102,4104,4106,4108,4110],{"class":30,"line":86},[28,4089,3278],{"class":207},[28,4091,1736],{"class":211},[28,4093,215],{"class":207},[28,4095,3109],{"class":211},[28,4097,257],{"class":207},[28,4099,401],{"class":38},[28,4101,3116],{"class":211},[28,4103,1120],{"class":207},[28,4105,529],{"class":38},[28,4107,3116],{"class":211},[28,4109,2369],{"class":207},[28,4111,218],{"class":211},[28,4113,4114],{"class":30,"line":97},[28,4115,2107],{"class":211},[28,4117,4118,4120,4123,4125],{"class":30,"line":108},[28,4119,2574],{"class":207},[28,4121,4122],{"class":211},"(tmp",[28,4124,1120],{"class":207},[28,4126,4127],{"class":211},"arr[i])\n",[28,4129,4130],{"class":30,"line":1407},[28,4131,2587],{"class":211},[28,4133,4134,4137,4139],{"class":30,"line":1690},[28,4135,4136],{"class":211},"            tmp",[28,4138,257],{"class":207},[28,4140,4141],{"class":211},"arr[i];\n",[28,4143,4144],{"class":30,"line":1695},[28,4145,2606],{"class":211},[28,4147,4148],{"class":30,"line":1701},[28,4149,2264],{"class":211},[28,4151,4152,4154,4156,4159,4161],{"class":30,"line":1706},[28,4153,1629],{"class":211},[28,4155,1253],{"class":207},[28,4157,4158],{"class":211},"tmp",[28,4160,1253],{"class":207},[28,4162,1275],{"class":211},[28,4164,4165,4168,4171],{"class":30,"line":1720},[28,4166,4167],{"class":207},"    return",[28,4169,4170],{"class":38}," 0",[28,4172,1370],{"class":211},[28,4174,4175],{"class":30,"line":1725},[28,4176,1643],{"class":211},[116,4178,4179],{},[119,4180,4181],{},"2️⃣数组元素逆置",[18,4183,4185],{"className":198,"code":4184,"language":200,"meta":23,"style":23},"\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",[25,4186,4187,4192,4198,4208,4216,4220,4255,4271,4303,4316,4321,4326,4338,4348,4358,4363,4372,4382,4387,4392,4419,4423,4439,4443,4454,4463],{"__ignoreMap":23},[28,4188,4189],{"class":30,"line":31},[28,4190,4191],{"class":269},"\u002F\u002F元素逆置\n",[28,4193,4194,4196],{"class":30,"line":42},[28,4195,2027],{"class":207},[28,4197,2030],{"class":64},[28,4199,4200,4202,4204,4206],{"class":30,"line":50},[28,4201,2035],{"class":207},[28,4203,2038],{"class":207},[28,4205,2041],{"class":34},[28,4207,1370],{"class":211},[28,4209,4210,4212,4214],{"class":30,"line":58},[28,4211,215],{"class":207},[28,4213,2050],{"class":34},[28,4215,2053],{"class":211},[28,4217,4218],{"class":30,"line":70},[28,4219,1624],{"class":211},[28,4221,4222,4225,4227,4229,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249,4251,4253],{"class":30,"line":78},[28,4223,4224],{"class":207},"   int",[28,4226,4039],{"class":211},[28,4228,529],{"class":38},[28,4230,1150],{"class":211},[28,4232,257],{"class":207},[28,4234,1106],{"class":211},[28,4236,427],{"class":38},[28,4238,588],{"class":211},[28,4240,288],{"class":38},[28,4242,588],{"class":211},[28,4244,282],{"class":38},[28,4246,588],{"class":211},[28,4248,503],{"class":38},[28,4250,588],{"class":211},[28,4252,529],{"class":38},[28,4254,4072],{"class":211},[28,4256,4257,4259,4262,4264,4266,4268],{"class":30,"line":86},[28,4258,4224],{"class":207},[28,4260,4261],{"class":211}," start",[28,4263,257],{"class":207},[28,4265,401],{"class":38},[28,4267,266],{"class":211},[28,4269,4270],{"class":269},"\u002F\u002F起始下标\n",[28,4272,4273,4275,4278,4281,4284,4287,4289,4291,4294,4296,4298,4300],{"class":30,"line":97},[28,4274,4224],{"class":207},[28,4276,4277],{"class":211}," end",[28,4279,4280],{"class":207},"=sizeof",[28,4282,4283],{"class":211},"(arr)",[28,4285,4286],{"class":207},"\u002Fsizeof",[28,4288,3928],{"class":211},[28,4290,401],{"class":38},[28,4292,4293],{"class":211},"])",[28,4295,742],{"class":207},[28,4297,427],{"class":38},[28,4299,266],{"class":211},[28,4301,4302],{"class":269},"\u002F\u002F结束下标\n",[28,4304,4305,4308,4311,4313],{"class":30,"line":108},[28,4306,4307],{"class":207},"   while",[28,4309,4310],{"class":211}," (start",[28,4312,1120],{"class":207},[28,4314,4315],{"class":211},"end)\n",[28,4317,4318],{"class":30,"line":1407},[28,4319,4320],{"class":211},"   {\n",[28,4322,4323],{"class":30,"line":1690},[28,4324,4325],{"class":269},"    \u002F\u002F实现元素互换代码\n",[28,4327,4328,4330,4333,4335],{"class":30,"line":1695},[28,4329,2062],{"class":207},[28,4331,4332],{"class":211}," temp",[28,4334,257],{"class":207},[28,4336,4337],{"class":211},"arr[start];\n",[28,4339,4340,4343,4345],{"class":30,"line":1701},[28,4341,4342],{"class":211},"    arr[start]",[28,4344,257],{"class":207},[28,4346,4347],{"class":211},"arr[end];\n",[28,4349,4350,4353,4355],{"class":30,"line":1706},[28,4351,4352],{"class":211},"    arr[end]",[28,4354,257],{"class":207},[28,4356,4357],{"class":211},"temp;\n",[28,4359,4360],{"class":30,"line":1720},[28,4361,4362],{"class":269},"    \u002F\u002F下标更新\n",[28,4364,4365,4368,4370],{"class":30,"line":1725},[28,4366,4367],{"class":211},"    start",[28,4369,2369],{"class":207},[28,4371,1370],{"class":211},[28,4373,4374,4377,4380],{"class":30,"line":1731},[28,4375,4376],{"class":211},"    end",[28,4378,4379],{"class":207},"--",[28,4381,1370],{"class":211},[28,4383,4384],{"class":30,"line":1752},[28,4385,4386],{"class":211},"   }\n",[28,4388,4389],{"class":30,"line":1757},[28,4390,4391],{"class":269},"   \u002F\u002F输出逆置后的数组\n",[28,4393,4394,4397,4399,4401,4403,4405,4407,4409,4411,4413,4415,4417],{"class":30,"line":1771},[28,4395,4396],{"class":207},"   for",[28,4398,1736],{"class":211},[28,4400,215],{"class":207},[28,4402,3109],{"class":211},[28,4404,257],{"class":207},[28,4406,401],{"class":38},[28,4408,3116],{"class":211},[28,4410,1120],{"class":207},[28,4412,529],{"class":38},[28,4414,3116],{"class":211},[28,4416,2369],{"class":207},[28,4418,218],{"class":211},[28,4420,4421],{"class":30,"line":1776},[28,4422,4320],{"class":211},[28,4424,4425,4427,4429,4432,4434,4437],{"class":30,"line":1805},[28,4426,1629],{"class":211},[28,4428,1253],{"class":207},[28,4430,4431],{"class":211},"arr[i]",[28,4433,1253],{"class":207},[28,4435,4436],{"class":64},"\" \"",[28,4438,1370],{"class":211},[28,4440,4441],{"class":30,"line":1810},[28,4442,4386],{"class":211},[28,4444,4445,4448,4450,4452],{"class":30,"line":1827},[28,4446,4447],{"class":34},"   system",[28,4449,212],{"class":211},[28,4451,2385],{"class":64},[28,4453,2796],{"class":211},[28,4455,4456,4459,4461],{"class":30,"line":1832},[28,4457,4458],{"class":207},"   return",[28,4460,4170],{"class":38},[28,4462,1370],{"class":211},[28,4464,4465],{"class":30,"line":1837},[28,4466,1643],{"class":211},[116,4468,4469],{},[119,4470,4471],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[18,4473,4475],{"className":198,"code":4474,"language":200,"meta":23,"style":23},"\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",[25,4476,4477,4482,4488,4498,4506,4510,4562,4575,4601,4605,4619,4623,4628,4633,4663,4667,4672,4706,4710,4715,4735,4740,4752,4768,4783,4788,4792,4796,4809,4835,4839,4853,4857,4865],{"__ignoreMap":23},[28,4478,4479],{"class":30,"line":31},[28,4480,4481],{"class":269},"\u002F\u002F冒泡排序,升序\n",[28,4483,4484,4486],{"class":30,"line":42},[28,4485,2027],{"class":207},[28,4487,2030],{"class":64},[28,4489,4490,4492,4494,4496],{"class":30,"line":50},[28,4491,2035],{"class":207},[28,4493,2038],{"class":207},[28,4495,2041],{"class":34},[28,4497,1370],{"class":211},[28,4499,4500,4502,4504],{"class":30,"line":58},[28,4501,215],{"class":207},[28,4503,2050],{"class":34},[28,4505,2053],{"class":211},[28,4507,4508],{"class":30,"line":70},[28,4509,1624],{"class":211},[28,4511,4512,4514,4516,4518,4521,4523,4526,4528,4530,4532,4534,4536,4538,4540,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560],{"class":30,"line":78},[28,4513,2062],{"class":207},[28,4515,4039],{"class":211},[28,4517,630],{"class":38},[28,4519,4520],{"class":211},"] ",[28,4522,257],{"class":207},[28,4524,4525],{"class":211}," {",[28,4527,503],{"class":38},[28,4529,588],{"class":211},[28,4531,288],{"class":38},[28,4533,588],{"class":211},[28,4535,605],{"class":38},[28,4537,588],{"class":211},[28,4539,401],{"class":38},[28,4541,588],{"class":211},[28,4543,529],{"class":38},[28,4545,588],{"class":211},[28,4547,579],{"class":38},[28,4549,588],{"class":211},[28,4551,427],{"class":38},[28,4553,588],{"class":211},[28,4555,282],{"class":38},[28,4557,588],{"class":211},[28,4559,630],{"class":38},[28,4561,4072],{"class":211},[28,4563,4564,4566,4568,4571,4573],{"class":30,"line":86},[28,4565,1629],{"class":211},[28,4567,1253],{"class":207},[28,4569,4570],{"class":64},"\"排序前：\"",[28,4572,1253],{"class":207},[28,4574,1275],{"class":211},[28,4576,4577,4579,4581,4583,4585,4587,4589,4591,4593,4595,4597,4599],{"class":30,"line":97},[28,4578,3278],{"class":207},[28,4580,1736],{"class":211},[28,4582,215],{"class":207},[28,4584,3109],{"class":211},[28,4586,257],{"class":207},[28,4588,401],{"class":38},[28,4590,3116],{"class":211},[28,4592,1120],{"class":207},[28,4594,630],{"class":38},[28,4596,3116],{"class":211},[28,4598,2369],{"class":207},[28,4600,218],{"class":211},[28,4602,4603],{"class":30,"line":108},[28,4604,2107],{"class":211},[28,4606,4607,4609,4611,4613,4615,4617],{"class":30,"line":1407},[28,4608,3528],{"class":211},[28,4610,1253],{"class":207},[28,4612,4431],{"class":211},[28,4614,1253],{"class":207},[28,4616,4436],{"class":64},[28,4618,1370],{"class":211},[28,4620,4621],{"class":30,"line":1690},[28,4622,2264],{"class":211},[28,4624,4625],{"class":30,"line":1695},[28,4626,4627],{"class":269},"    \u002F\u002F开始冒泡排序\n",[28,4629,4630],{"class":30,"line":1701},[28,4631,4632],{"class":269},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[28,4634,4635,4637,4639,4641,4643,4645,4647,4649,4651,4653,4655,4657,4659,4661],{"class":30,"line":1706},[28,4636,3278],{"class":207},[28,4638,1736],{"class":211},[28,4640,215],{"class":207},[28,4642,3109],{"class":211},[28,4644,257],{"class":207},[28,4646,401],{"class":38},[28,4648,3116],{"class":211},[28,4650,1120],{"class":207},[28,4652,630],{"class":38},[28,4654,742],{"class":207},[28,4656,427],{"class":38},[28,4658,3116],{"class":211},[28,4660,2369],{"class":207},[28,4662,218],{"class":211},[28,4664,4665],{"class":30,"line":1720},[28,4666,2107],{"class":211},[28,4668,4669],{"class":30,"line":1725},[28,4670,4671],{"class":269},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[28,4673,4674,4676,4678,4680,4682,4684,4686,4688,4690,4692,4694,4696,4698,4700,4702,4704],{"class":30,"line":1731},[28,4675,3480],{"class":207},[28,4677,1736],{"class":211},[28,4679,215],{"class":207},[28,4681,3487],{"class":211},[28,4683,257],{"class":207},[28,4685,401],{"class":38},[28,4687,3494],{"class":211},[28,4689,1120],{"class":207},[28,4691,630],{"class":38},[28,4693,742],{"class":207},[28,4695,651],{"class":211},[28,4697,742],{"class":207},[28,4699,427],{"class":38},[28,4701,3494],{"class":211},[28,4703,2369],{"class":207},[28,4705,218],{"class":211},[28,4707,4708],{"class":30,"line":1752},[28,4709,2587],{"class":211},[28,4711,4712],{"class":30,"line":1757},[28,4713,4714],{"class":269},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[28,4716,4717,4720,4723,4725,4728,4730,4732],{"class":30,"line":1771},[28,4718,4719],{"class":207},"            if",[28,4721,4722],{"class":211},"(arr[j]",[28,4724,1170],{"class":207},[28,4726,4727],{"class":211},"arr[j",[28,4729,691],{"class":207},[28,4731,427],{"class":38},[28,4733,4734],{"class":211},"])\n",[28,4736,4737],{"class":30,"line":1776},[28,4738,4739],{"class":211},"            {\n",[28,4741,4742,4745,4747,4749],{"class":30,"line":1805},[28,4743,4744],{"class":207},"                int",[28,4746,4332],{"class":211},[28,4748,257],{"class":207},[28,4750,4751],{"class":211},"arr[j];\n",[28,4753,4754,4757,4759,4761,4763,4765],{"class":30,"line":1810},[28,4755,4756],{"class":211},"                arr[j]",[28,4758,257],{"class":207},[28,4760,4727],{"class":211},[28,4762,691],{"class":207},[28,4764,427],{"class":38},[28,4766,4767],{"class":211},"];\n",[28,4769,4770,4773,4775,4777,4779,4781],{"class":30,"line":1827},[28,4771,4772],{"class":211},"                arr[j",[28,4774,691],{"class":207},[28,4776,427],{"class":38},[28,4778,1150],{"class":211},[28,4780,257],{"class":207},[28,4782,4357],{"class":211},[28,4784,4785],{"class":30,"line":1832},[28,4786,4787],{"class":211},"            }\n",[28,4789,4790],{"class":30,"line":1837},[28,4791,2606],{"class":211},[28,4793,4794],{"class":30,"line":1842},[28,4795,2264],{"class":211},[28,4797,4798,4800,4802,4805,4807],{"class":30,"line":1856},[28,4799,1629],{"class":211},[28,4801,1253],{"class":207},[28,4803,4804],{"class":64},"\"排序后：\"",[28,4806,1253],{"class":207},[28,4808,1275],{"class":211},[28,4810,4811,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831,4833],{"class":30,"line":1861},[28,4812,3278],{"class":207},[28,4814,1736],{"class":211},[28,4816,215],{"class":207},[28,4818,3109],{"class":211},[28,4820,257],{"class":207},[28,4822,401],{"class":38},[28,4824,3116],{"class":211},[28,4826,1120],{"class":207},[28,4828,630],{"class":38},[28,4830,3116],{"class":211},[28,4832,2369],{"class":207},[28,4834,218],{"class":211},[28,4836,4837],{"class":30,"line":2654},[28,4838,2107],{"class":211},[28,4840,4841,4843,4845,4847,4849,4851],{"class":30,"line":2668},[28,4842,3528],{"class":211},[28,4844,1253],{"class":207},[28,4846,4431],{"class":211},[28,4848,1253],{"class":207},[28,4850,4436],{"class":64},[28,4852,1370],{"class":211},[28,4854,4855],{"class":30,"line":2676},[28,4856,2264],{"class":211},[28,4858,4859,4861,4863],{"class":30,"line":2681},[28,4860,4167],{"class":207},[28,4862,4170],{"class":38},[28,4864,1370],{"class":211},[28,4866,4867],{"class":30,"line":2687},[28,4868,1643],{"class":211},[177,4870,4872],{"id":4871},"_172二维数组","1.7.2二维数组",[161,4874,4875],{},[119,4876,4877],{},"二维数组的四种定义方式",[347,4879,4880,4889],{},[350,4881,4882],{},[353,4883,4884,4887],{},[356,4885,4886],{},"序号",[356,4888,3858],{},[394,4890,4891,4901,4910,4919,4928],{},[353,4892,4893,4895],{},[399,4894,427],{},[399,4896,4897,4898,266],{},"数据类型 数组名[行数]",[28,4899,4900],{},"列数",[353,4902,4903,4905],{},[399,4904,288],{},[399,4906,4897,4907,4909],{},[28,4908,4900],{},"={ {数据1,数据2}，{数据3，数据4}... }",[353,4911,4912,4914],{},[399,4913,282],{},[399,4915,4897,4916,4918],{},[28,4917,4900],{},"={数据1,数据2,数据3...}",[353,4920,4921,4923],{},[399,4922,503],{},[399,4924,4925,4926,4918],{},"数据类型 数组名[]",[28,4927,4900],{},[353,4929,4930,4933],{},[399,4931,4932],{},"注意：不能只省略列数",[399,4934],{},[161,4936,4937],{"start":42},[119,4938,4939],{},"二维数组数组名",[116,4941,4942,4945],{},[119,4943,4944],{},"1.查看二维数组所占内存空间",[119,4946,4947],{},"2.获取二维数组首地址",[14,4949,4950],{},"已知二维数组，求二维数组的行数与列数",[18,4952,4954],{"className":198,"code":4953,"language":200,"meta":23,"style":23},"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",[25,4955,4956,4964,4968,4986,4990,5008,5024,5029,5054,5087],{"__ignoreMap":23},[28,4957,4958,4960,4962],{"class":30,"line":31},[28,4959,215],{"class":207},[28,4961,2050],{"class":34},[28,4963,2053],{"class":211},[28,4965,4966],{"class":30,"line":42},[28,4967,1624],{"class":211},[28,4969,4970,4972,4974,4976,4979,4981,4983],{"class":30,"line":50},[28,4971,2062],{"class":207},[28,4973,4039],{"class":211},[28,4975,288],{"class":38},[28,4977,4978],{"class":211},"][",[28,4980,282],{"class":38},[28,4982,1150],{"class":211},[28,4984,4985],{"class":207},"=\n",[28,4987,4988],{"class":30,"line":58},[28,4989,2107],{"class":211},[28,4991,4992,4995,4997,4999,5001,5003,5005],{"class":30,"line":70},[28,4993,4994],{"class":211},"        {",[28,4996,427],{"class":38},[28,4998,588],{"class":211},[28,5000,288],{"class":38},[28,5002,588],{"class":211},[28,5004,282],{"class":38},[28,5006,5007],{"class":211},"},\n",[28,5009,5010,5012,5014,5016,5018,5020,5022],{"class":30,"line":78},[28,5011,4994],{"class":211},[28,5013,503],{"class":38},[28,5015,588],{"class":211},[28,5017,529],{"class":38},[28,5019,588],{"class":211},[28,5021,554],{"class":38},[28,5023,1643],{"class":211},[28,5025,5026],{"class":30,"line":86},[28,5027,5028],{"class":211},"    };\n",[28,5030,5031,5033,5035,5038,5040,5042,5044,5046,5048,5050,5052],{"class":30,"line":97},[28,5032,1629],{"class":211},[28,5034,1253],{"class":207},[28,5036,5037],{"class":64},"\"二维数组的行数\"",[28,5039,1450],{"class":207},[28,5041,4283],{"class":211},[28,5043,4286],{"class":207},[28,5045,3928],{"class":211},[28,5047,401],{"class":38},[28,5049,4293],{"class":211},[28,5051,1253],{"class":207},[28,5053,1275],{"class":211},[28,5055,5056,5058,5060,5063,5065,5067,5069,5071,5073,5075,5077,5079,5081,5083,5085],{"class":30,"line":108},[28,5057,1629],{"class":211},[28,5059,1253],{"class":207},[28,5061,5062],{"class":64},"\"二维数组的列数\"",[28,5064,1450],{"class":207},[28,5066,3928],{"class":211},[28,5068,401],{"class":38},[28,5070,4293],{"class":211},[28,5072,4286],{"class":207},[28,5074,3928],{"class":211},[28,5076,401],{"class":38},[28,5078,4978],{"class":211},[28,5080,401],{"class":38},[28,5082,4293],{"class":211},[28,5084,1253],{"class":207},[28,5086,1275],{"class":211},[28,5088,5089],{"class":30,"line":1407},[28,5090,1643],{"class":211},[14,5092,5093],{},"查看二维数组首地址",[18,5095,5097],{"className":198,"code":5096,"language":200,"meta":23,"style":23},"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",[25,5098,5099,5116,5142,5167],{"__ignoreMap":23},[28,5100,5101,5103,5105,5108,5110,5112,5114],{"class":30,"line":31},[28,5102,1447],{"class":211},[28,5104,1253],{"class":207},[28,5106,5107],{"class":64},"\"二维数组首地址：\"",[28,5109,1253],{"class":207},[28,5111,3957],{"class":211},[28,5113,1253],{"class":207},[28,5115,1275],{"class":211},[28,5117,5118,5120,5122,5125,5127,5129,5131,5134,5136,5138,5140],{"class":30,"line":42},[28,5119,1447],{"class":211},[28,5121,1253],{"class":207},[28,5123,5124],{"class":64},"\"二维数组第一行的首地址：\"",[28,5126,1253],{"class":207},[28,5128,212],{"class":211},[28,5130,215],{"class":207},[28,5132,5133],{"class":211},")arr[",[28,5135,401],{"class":38},[28,5137,1150],{"class":211},[28,5139,1253],{"class":207},[28,5141,1275],{"class":211},[28,5143,5144,5146,5148,5151,5153,5155,5157,5159,5161,5163,5165],{"class":30,"line":50},[28,5145,1447],{"class":211},[28,5147,1253],{"class":207},[28,5149,5150],{"class":64},"\"二维数组第二行的首地址：\"",[28,5152,1253],{"class":207},[28,5154,212],{"class":211},[28,5156,215],{"class":207},[28,5158,5133],{"class":211},[28,5160,427],{"class":38},[28,5162,1150],{"class":211},[28,5164,1253],{"class":207},[28,5166,1275],{"class":211},[28,5168,5169,5171,5173,5176,5178,5180,5182,5184,5186,5188,5190,5192,5194,5196,5198,5200],{"class":30,"line":58},[28,5170,1447],{"class":211},[28,5172,1253],{"class":207},[28,5174,5175],{"class":64},"\"二维数组第一个元素的首地址:\"",[28,5177,1253],{"class":207},[28,5179,212],{"class":211},[28,5181,215],{"class":207},[28,5183,639],{"class":211},[28,5185,563],{"class":207},[28,5187,3983],{"class":211},[28,5189,401],{"class":38},[28,5191,4978],{"class":211},[28,5193,401],{"class":38},[28,5195,1150],{"class":211},[28,5197,1253],{"class":207},[28,5199,1318],{"class":211},[28,5201,5202],{"class":269},"\u002F\u002F对于数，要加取址符\n",[126,5204,5205],{},"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":23,"searchDepth":42,"depth":42,"links":5207},[5208,5209,5210,5218,5219,5225,5230],{"id":151,"depth":42,"text":152},{"id":158,"depth":42,"text":159},{"id":174,"depth":42,"text":175,"children":5211},[5212,5213,5214,5215,5216,5217],{"id":179,"depth":50,"text":180},{"id":228,"depth":50,"text":229},{"id":296,"depth":50,"text":297},{"id":1234,"depth":50,"text":1235},{"id":1324,"depth":50,"text":1325},{"id":1421,"depth":50,"text":1422},{"id":1463,"depth":42,"text":1464},{"id":1531,"depth":42,"text":1532,"children":5220},[5221,5222,5223,5224],{"id":1535,"depth":50,"text":1536},{"id":1557,"depth":50,"text":1558},{"id":1566,"depth":50,"text":1567},{"id":1575,"depth":50,"text":1576},{"id":1584,"depth":42,"text":1585,"children":5226},[5227,5228,5229],{"id":1588,"depth":50,"text":1589},{"id":2282,"depth":50,"text":2283},{"id":3698,"depth":50,"text":3699},{"id":3839,"depth":42,"text":3840,"children":5231},[5232,5233],{"id":3843,"depth":50,"text":3844},{"id":4871,"depth":50,"text":4872},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":142,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5240,"title":5241,"body":5242,"description":23,"extension":132,"meta":6342,"navigation":134,"path":6343,"seo":6344,"stem":6345,"__hash__":6346},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5243,"toc":6334},[5244,5247,5251,5259,5267,5270,5336,5340,5343,5419,5423,5426,5429,5432,5645,5649,5654,5718,5723,5790,5795,5886,5889,5994,5998,6001,6007,6151,6155,6158,6172,6175,6220,6223,6331],[10,5245,5241],{"id":5246},"_2函数",[149,5248,5250],{"id":5249},"_21函数概述","2.1函数概述",[161,5252,5253,5256],{},[119,5254,5255],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[119,5257,5258],{},"语法：",[18,5260,5265],{"className":5261,"code":5263,"language":5264,"meta":23},[5262],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[25,5266,5263],{"__ignoreMap":23},[14,5268,5269],{},"小案例",[18,5271,5273],{"className":198,"code":5272,"language":200,"meta":23,"style":23},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[25,5274,5275,5280,5304,5308,5325,5332],{"__ignoreMap":23},[28,5276,5277],{"class":30,"line":31},[28,5278,5279],{"class":269},"\u002F\u002Fnum1,num2形参\n",[28,5281,5282,5284,5287,5289,5291,5295,5297,5299,5302],{"class":30,"line":42},[28,5283,215],{"class":207},[28,5285,5286],{"class":34}," add",[28,5288,212],{"class":211},[28,5290,215],{"class":207},[28,5292,5294],{"class":5293},"s4XuR"," num1",[28,5296,588],{"class":211},[28,5298,215],{"class":207},[28,5300,5301],{"class":5293}," num2",[28,5303,218],{"class":211},[28,5305,5306],{"class":30,"line":50},[28,5307,1624],{"class":211},[28,5309,5310,5312,5315,5317,5320,5322],{"class":30,"line":58},[28,5311,2062],{"class":207},[28,5313,5314],{"class":211}," sum",[28,5316,257],{"class":207},[28,5318,5319],{"class":211},"num1",[28,5321,691],{"class":207},[28,5323,5324],{"class":211},"num2;\n",[28,5326,5327,5329],{"class":30,"line":70},[28,5328,4167],{"class":207},[28,5330,5331],{"class":211}," sum;\n",[28,5333,5334],{"class":30,"line":78},[28,5335,1643],{"class":211},[149,5337,5339],{"id":5338},"_22函数调用","2.2函数调用",[14,5341,5342],{},"调用刚刚写的求和函数",[18,5344,5346],{"className":198,"code":5345,"language":200,"meta":23,"style":23},"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",[25,5347,5348,5356,5360,5365,5377,5389,5398,5403,5415],{"__ignoreMap":23},[28,5349,5350,5352,5354],{"class":30,"line":31},[28,5351,215],{"class":207},[28,5353,2050],{"class":34},[28,5355,2053],{"class":211},[28,5357,5358],{"class":30,"line":42},[28,5359,1624],{"class":211},[28,5361,5362],{"class":30,"line":50},[28,5363,5364],{"class":269},"    \u002F\u002Fa,b实参\n",[28,5366,5367,5369,5371,5373,5375],{"class":30,"line":58},[28,5368,2062],{"class":207},[28,5370,1476],{"class":211},[28,5372,257],{"class":207},[28,5374,401],{"class":38},[28,5376,1370],{"class":211},[28,5378,5379,5381,5383,5385,5387],{"class":30,"line":70},[28,5380,2062],{"class":207},[28,5382,2910],{"class":211},[28,5384,257],{"class":207},[28,5386,401],{"class":38},[28,5388,1370],{"class":211},[28,5390,5391,5393,5395],{"class":30,"line":78},[28,5392,2089],{"class":211},[28,5394,1507],{"class":207},[28,5396,5397],{"class":211},"a,b;\n",[28,5399,5400],{"class":30,"line":86},[28,5401,5402],{"class":269},"    \u002F\u002F调用函数时，实参值传给了形参\n",[28,5404,5405,5407,5409,5412],{"class":30,"line":97},[28,5406,1629],{"class":211},[28,5408,1253],{"class":207},[28,5410,5411],{"class":34},"add",[28,5413,5414],{"class":211},"(a,b);\n",[28,5416,5417],{"class":30,"line":108},[28,5418,1643],{"class":211},[149,5420,5422],{"id":5421},"_23值传递","2.3值传递",[14,5424,5425],{},"值传递就是函数调用时实参将数值传给形参",[14,5427,5428],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5430,5431],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[18,5433,5435],{"className":198,"code":5434,"language":200,"meta":23,"style":23},"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",[25,5436,5437,5459,5463,5476,5493,5511,5522,5531,5540,5553,5569,5585,5594,5598,5606,5610,5622,5634,5641],{"__ignoreMap":23},[28,5438,5439,5442,5445,5447,5449,5451,5453,5455,5457],{"class":30,"line":31},[28,5440,5441],{"class":207},"void",[28,5443,5444],{"class":34}," swap",[28,5446,212],{"class":211},[28,5448,215],{"class":207},[28,5450,5294],{"class":5293},[28,5452,588],{"class":211},[28,5454,215],{"class":207},[28,5456,5301],{"class":5293},[28,5458,218],{"class":211},[28,5460,5461],{"class":30,"line":42},[28,5462,1624],{"class":211},[28,5464,5465,5467,5469,5472,5474],{"class":30,"line":50},[28,5466,1629],{"class":211},[28,5468,1253],{"class":207},[28,5470,5471],{"class":64},"\"交换前：\"",[28,5473,1253],{"class":207},[28,5475,1275],{"class":211},[28,5477,5478,5480,5482,5485,5487,5489,5491],{"class":30,"line":58},[28,5479,1629],{"class":211},[28,5481,1253],{"class":207},[28,5483,5484],{"class":64},"\"num1=\"",[28,5486,1253],{"class":207},[28,5488,5319],{"class":211},[28,5490,1253],{"class":207},[28,5492,1275],{"class":211},[28,5494,5495,5497,5499,5502,5504,5507,5509],{"class":30,"line":70},[28,5496,1629],{"class":211},[28,5498,1253],{"class":207},[28,5500,5501],{"class":64},"\"num2=\"",[28,5503,1253],{"class":207},[28,5505,5506],{"class":211},"num2",[28,5508,1253],{"class":207},[28,5510,1275],{"class":211},[28,5512,5513,5515,5517,5519],{"class":30,"line":78},[28,5514,2062],{"class":207},[28,5516,4332],{"class":211},[28,5518,257],{"class":207},[28,5520,5521],{"class":211},"num1;\n",[28,5523,5524,5527,5529],{"class":30,"line":86},[28,5525,5526],{"class":211},"    num1",[28,5528,257],{"class":207},[28,5530,5324],{"class":211},[28,5532,5533,5536,5538],{"class":30,"line":97},[28,5534,5535],{"class":211},"    num2",[28,5537,257],{"class":207},[28,5539,4357],{"class":211},[28,5541,5542,5544,5546,5549,5551],{"class":30,"line":108},[28,5543,1629],{"class":211},[28,5545,1253],{"class":207},[28,5547,5548],{"class":64},"\"交换后：\"",[28,5550,1253],{"class":207},[28,5552,1275],{"class":211},[28,5554,5555,5557,5559,5561,5563,5565,5567],{"class":30,"line":1407},[28,5556,1629],{"class":211},[28,5558,1253],{"class":207},[28,5560,5484],{"class":64},[28,5562,1253],{"class":207},[28,5564,5319],{"class":211},[28,5566,1253],{"class":207},[28,5568,1275],{"class":211},[28,5570,5571,5573,5575,5577,5579,5581,5583],{"class":30,"line":1690},[28,5572,1629],{"class":211},[28,5574,1253],{"class":207},[28,5576,5501],{"class":64},[28,5578,1253],{"class":207},[28,5580,5506],{"class":211},[28,5582,1253],{"class":207},[28,5584,1275],{"class":211},[28,5586,5587,5589,5591],{"class":30,"line":1695},[28,5588,4167],{"class":207},[28,5590,266],{"class":211},[28,5592,5593],{"class":269},"\u002F\u002F或者不写\n",[28,5595,5596],{"class":30,"line":1701},[28,5597,1643],{"class":211},[28,5599,5600,5602,5604],{"class":30,"line":1706},[28,5601,215],{"class":207},[28,5603,2050],{"class":34},[28,5605,2053],{"class":211},[28,5607,5608],{"class":30,"line":1720},[28,5609,1624],{"class":211},[28,5611,5612,5614,5616,5618,5620],{"class":30,"line":1725},[28,5613,2062],{"class":207},[28,5615,1476],{"class":211},[28,5617,257],{"class":207},[28,5619,656],{"class":38},[28,5621,1370],{"class":211},[28,5623,5624,5626,5628,5630,5632],{"class":30,"line":1731},[28,5625,2062],{"class":207},[28,5627,2910],{"class":211},[28,5629,257],{"class":207},[28,5631,910],{"class":38},[28,5633,1370],{"class":211},[28,5635,5636,5639],{"class":30,"line":1752},[28,5637,5638],{"class":34},"    swap",[28,5640,5414],{"class":211},[28,5642,5643],{"class":30,"line":1757},[28,5644,1643],{"class":211},[149,5646,5648],{"id":5647},"_24函数的常见形式","2.4函数的常见形式",[161,5650,5651],{},[119,5652,5653],{},"无参无返",[18,5655,5657],{"className":198,"code":5656,"language":200,"meta":23,"style":23},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[25,5658,5659,5668,5672,5685,5689,5697,5701,5706,5714],{"__ignoreMap":23},[28,5660,5661,5663,5666],{"class":30,"line":31},[28,5662,5441],{"class":207},[28,5664,5665],{"class":34}," test01",[28,5667,2053],{"class":211},[28,5669,5670],{"class":30,"line":42},[28,5671,1624],{"class":211},[28,5673,5674,5676,5678,5681,5683],{"class":30,"line":50},[28,5675,1629],{"class":211},[28,5677,1253],{"class":207},[28,5679,5680],{"class":64},"\"你好\"",[28,5682,1253],{"class":207},[28,5684,1275],{"class":211},[28,5686,5687],{"class":30,"line":58},[28,5688,1643],{"class":211},[28,5690,5691,5693,5695],{"class":30,"line":70},[28,5692,215],{"class":207},[28,5694,2050],{"class":34},[28,5696,2053],{"class":211},[28,5698,5699],{"class":30,"line":78},[28,5700,1624],{"class":211},[28,5702,5703],{"class":30,"line":86},[28,5704,5705],{"class":269},"    \u002F\u002F函数调用\n",[28,5707,5708,5711],{"class":30,"line":97},[28,5709,5710],{"class":34},"    test01",[28,5712,5713],{"class":211},"();\n",[28,5715,5716],{"class":30,"line":108},[28,5717,1643],{"class":211},[161,5719,5720],{"start":42},[119,5721,5722],{},"有参无返",[18,5724,5726],{"className":198,"code":5725,"language":200,"meta":23,"style":23},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[25,5727,5728,5743,5747,5759,5763,5771,5775,5786],{"__ignoreMap":23},[28,5729,5730,5732,5735,5737,5739,5741],{"class":30,"line":31},[28,5731,5441],{"class":207},[28,5733,5734],{"class":34}," test02",[28,5736,212],{"class":211},[28,5738,215],{"class":207},[28,5740,1476],{"class":5293},[28,5742,218],{"class":211},[28,5744,5745],{"class":30,"line":42},[28,5746,1624],{"class":211},[28,5748,5749,5751,5753,5755,5757],{"class":30,"line":50},[28,5750,1629],{"class":211},[28,5752,1253],{"class":207},[28,5754,5680],{"class":64},[28,5756,1253],{"class":207},[28,5758,1275],{"class":211},[28,5760,5761],{"class":30,"line":58},[28,5762,1643],{"class":211},[28,5764,5765,5767,5769],{"class":30,"line":70},[28,5766,215],{"class":207},[28,5768,2050],{"class":34},[28,5770,2053],{"class":211},[28,5772,5773],{"class":30,"line":78},[28,5774,1624],{"class":211},[28,5776,5777,5780,5782,5784],{"class":30,"line":86},[28,5778,5779],{"class":34},"    test02",[28,5781,212],{"class":211},[28,5783,521],{"class":38},[28,5785,2796],{"class":211},[28,5787,5788],{"class":30,"line":97},[28,5789,1643],{"class":211},[161,5791,5792],{"start":50},[119,5793,5794],{},"无参有返",[18,5796,5798],{"className":198,"code":5797,"language":200,"meta":23,"style":23},"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",[25,5799,5800,5809,5813,5825,5834,5838,5846,5850,5863,5882],{"__ignoreMap":23},[28,5801,5802,5804,5807],{"class":30,"line":31},[28,5803,215],{"class":207},[28,5805,5806],{"class":34}," test03",[28,5808,2053],{"class":211},[28,5810,5811],{"class":30,"line":42},[28,5812,1624],{"class":211},[28,5814,5815,5817,5819,5821,5823],{"class":30,"line":50},[28,5816,1629],{"class":211},[28,5818,1253],{"class":207},[28,5820,5680],{"class":64},[28,5822,1253],{"class":207},[28,5824,1275],{"class":211},[28,5826,5827,5829,5832],{"class":30,"line":58},[28,5828,4167],{"class":207},[28,5830,5831],{"class":38}," 100",[28,5833,1370],{"class":211},[28,5835,5836],{"class":30,"line":70},[28,5837,1643],{"class":211},[28,5839,5840,5842,5844],{"class":30,"line":78},[28,5841,215],{"class":207},[28,5843,2050],{"class":34},[28,5845,2053],{"class":211},[28,5847,5848],{"class":30,"line":86},[28,5849,1624],{"class":211},[28,5851,5852,5854,5856,5858,5861],{"class":30,"line":97},[28,5853,2062],{"class":207},[28,5855,5294],{"class":211},[28,5857,257],{"class":207},[28,5859,5860],{"class":34},"test03",[28,5862,5713],{"class":211},[28,5864,5865,5867,5869,5871,5873,5875,5877,5879],{"class":30,"line":108},[28,5866,1629],{"class":211},[28,5868,1253],{"class":207},[28,5870,5484],{"class":64},[28,5872,1253],{"class":207},[28,5874,5319],{"class":211},[28,5876,1253],{"class":207},[28,5878,1318],{"class":211},[28,5880,5881],{"class":269}," \u002F\u002F100\n",[28,5883,5884],{"class":30,"line":1407},[28,5885,1643],{"class":211},[14,5887,5888],{},"4.有参有返",[18,5890,5892],{"className":198,"code":5891,"language":200,"meta":23,"style":23},"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",[25,5893,5894,5909,5913,5926,5932,5936,5945,5949,5961,5975,5990],{"__ignoreMap":23},[28,5895,5896,5898,5901,5903,5905,5907],{"class":30,"line":31},[28,5897,215],{"class":207},[28,5899,5900],{"class":34}," test04",[28,5902,212],{"class":211},[28,5904,215],{"class":207},[28,5906,1476],{"class":5293},[28,5908,218],{"class":211},[28,5910,5911],{"class":30,"line":42},[28,5912,1624],{"class":211},[28,5914,5915,5917,5919,5922,5924],{"class":30,"line":50},[28,5916,1629],{"class":211},[28,5918,1253],{"class":207},[28,5920,5921],{"class":64},"\"hello\"",[28,5923,1253],{"class":207},[28,5925,1275],{"class":211},[28,5927,5928,5930],{"class":30,"line":58},[28,5929,4167],{"class":207},[28,5931,1510],{"class":211},[28,5933,5934],{"class":30,"line":70},[28,5935,1643],{"class":211},[28,5937,5938,5940,5943],{"class":30,"line":78},[28,5939,215],{"class":207},[28,5941,5942],{"class":34}," mian",[28,5944,2053],{"class":211},[28,5946,5947],{"class":30,"line":86},[28,5948,1624],{"class":211},[28,5950,5951,5953,5955,5957,5959],{"class":30,"line":97},[28,5952,2062],{"class":207},[28,5954,2910],{"class":211},[28,5956,257],{"class":207},[28,5958,427],{"class":38},[28,5960,1370],{"class":211},[28,5962,5963,5965,5967,5969,5972],{"class":30,"line":108},[28,5964,2062],{"class":207},[28,5966,2926],{"class":211},[28,5968,257],{"class":207},[28,5970,5971],{"class":34},"test04",[28,5973,5974],{"class":211},"(b);\n",[28,5976,5977,5979,5981,5983,5985,5987],{"class":30,"line":1407},[28,5978,1629],{"class":211},[28,5980,1253],{"class":207},[28,5982,498],{"class":211},[28,5984,1253],{"class":207},[28,5986,1318],{"class":211},[28,5988,5989],{"class":269}," \u002F\u002F1\n",[28,5991,5992],{"class":30,"line":1690},[28,5993,1643],{"class":211},[149,5995,5997],{"id":5996},"_25函数的声明","2.5函数的声明",[14,5999,6000],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,6002,6003,6004],{},"函数的",[359,6005,6006],{},"声明可以多次，但是函数的定义只能有一次",[18,6008,6010],{"className":198,"code":6009,"language":200,"meta":23,"style":23},"\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",[25,6011,6012,6017,6022,6047,6056,6060,6072,6084,6100,6104,6124,6128,6147],{"__ignoreMap":23},[28,6013,6014],{"class":30,"line":31},[28,6015,6016],{"class":269},"\u002F\u002F函数声明\n",[28,6018,6019],{"class":30,"line":42},[28,6020,6021],{"class":269},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[28,6023,6024,6026,6029,6031,6033,6035,6037,6039,6041,6044],{"class":30,"line":50},[28,6025,215],{"class":207},[28,6027,6028],{"class":34}," max",[28,6030,212],{"class":211},[28,6032,215],{"class":207},[28,6034,1476],{"class":5293},[28,6036,588],{"class":211},[28,6038,215],{"class":207},[28,6040,2910],{"class":5293},[28,6042,6043],{"class":211},");",[28,6045,6046],{"class":269},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[28,6048,6049,6051,6053],{"class":30,"line":58},[28,6050,215],{"class":207},[28,6052,2050],{"class":34},[28,6054,6055],{"class":211},"() \n",[28,6057,6058],{"class":30,"line":70},[28,6059,1624],{"class":211},[28,6061,6062,6064,6066,6068,6070],{"class":30,"line":78},[28,6063,2062],{"class":207},[28,6065,1476],{"class":211},[28,6067,257],{"class":207},[28,6069,656],{"class":38},[28,6071,1370],{"class":211},[28,6073,6074,6076,6078,6080,6082],{"class":30,"line":86},[28,6075,2062],{"class":207},[28,6077,2910],{"class":211},[28,6079,257],{"class":207},[28,6081,910],{"class":38},[28,6083,1370],{"class":211},[28,6085,6086,6088,6090,6093,6096,6098],{"class":30,"line":97},[28,6087,1629],{"class":211},[28,6089,1253],{"class":207},[28,6091,6092],{"class":34},"max",[28,6094,6095],{"class":211},"(a,b)",[28,6097,1253],{"class":207},[28,6099,1275],{"class":211},[28,6101,6102],{"class":30,"line":108},[28,6103,1643],{"class":211},[28,6105,6106,6108,6110,6112,6114,6116,6118,6120,6122],{"class":30,"line":1407},[28,6107,215],{"class":207},[28,6109,6028],{"class":34},[28,6111,212],{"class":211},[28,6113,215],{"class":207},[28,6115,1476],{"class":5293},[28,6117,588],{"class":211},[28,6119,215],{"class":207},[28,6121,2910],{"class":5293},[28,6123,218],{"class":211},[28,6125,6126],{"class":30,"line":1690},[28,6127,1624],{"class":211},[28,6129,6130,6132,6134,6136,6138,6140,6142,6144],{"class":30,"line":1695},[28,6131,4167],{"class":207},[28,6133,1476],{"class":211},[28,6135,1170],{"class":207},[28,6137,473],{"class":211},[28,6139,1196],{"class":207},[28,6141,448],{"class":211},[28,6143,1069],{"class":207},[28,6145,6146],{"class":211},"b;\n",[28,6148,6149],{"class":30,"line":1701},[28,6150,1643],{"class":211},[149,6152,6154],{"id":6153},"_26函数的分文件编写","2.6函数的分文件编写",[14,6156,6157],{},"4个步骤：",[116,6159,6160,6163,6166,6169],{},[119,6161,6162],{},"1.创建后缀名为.h的头文件",[119,6164,6165],{},"2.创建后缀名为.cpp的源文件",[119,6167,6168],{},"3.在头文件中写函数的定义",[119,6170,6171],{},"4.在源文件中写函数的定义\n示例：",[14,6173,6174],{},"头文件：swap.h",[18,6176,6178],{"className":198,"code":6177,"language":200,"meta":23,"style":23},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[25,6179,6180,6186,6196,6200],{"__ignoreMap":23},[28,6181,6182,6184],{"class":30,"line":31},[28,6183,2027],{"class":207},[28,6185,2030],{"class":64},[28,6187,6188,6190,6192,6194],{"class":30,"line":42},[28,6189,2035],{"class":207},[28,6191,2038],{"class":207},[28,6193,2041],{"class":34},[28,6195,1370],{"class":211},[28,6197,6198],{"class":30,"line":50},[28,6199,6016],{"class":269},[28,6201,6202,6204,6206,6208,6210,6212,6214,6216,6218],{"class":30,"line":58},[28,6203,5441],{"class":207},[28,6205,5444],{"class":34},[28,6207,212],{"class":211},[28,6209,215],{"class":207},[28,6211,1476],{"class":5293},[28,6213,588],{"class":211},[28,6215,215],{"class":207},[28,6217,2910],{"class":5293},[28,6219,2796],{"class":211},[14,6221,6222],{},"源文件：swap.cpp",[18,6224,6226],{"className":198,"code":6225,"language":200,"meta":23,"style":23},"#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",[25,6227,6228,6235,6240,6260,6264,6275,6284,6293,6310,6327],{"__ignoreMap":23},[28,6229,6230,6232],{"class":30,"line":31},[28,6231,2027],{"class":207},[28,6233,6234],{"class":64}," \"swap.h\"\n",[28,6236,6237],{"class":30,"line":42},[28,6238,6239],{"class":269},"\u002F\u002F函数的定义\n",[28,6241,6242,6244,6246,6248,6250,6252,6254,6256,6258],{"class":30,"line":50},[28,6243,5441],{"class":207},[28,6245,5444],{"class":34},[28,6247,212],{"class":211},[28,6249,215],{"class":207},[28,6251,1476],{"class":5293},[28,6253,588],{"class":211},[28,6255,215],{"class":207},[28,6257,2910],{"class":5293},[28,6259,218],{"class":211},[28,6261,6262],{"class":30,"line":58},[28,6263,1624],{"class":211},[28,6265,6266,6268,6270,6272],{"class":30,"line":70},[28,6267,2062],{"class":207},[28,6269,4332],{"class":211},[28,6271,257],{"class":207},[28,6273,6274],{"class":211},"a;\n",[28,6276,6277,6280,6282],{"class":30,"line":78},[28,6278,6279],{"class":211},"    a",[28,6281,257],{"class":207},[28,6283,6146],{"class":211},[28,6285,6286,6289,6291],{"class":30,"line":86},[28,6287,6288],{"class":211},"    b",[28,6290,257],{"class":207},[28,6292,4357],{"class":211},[28,6294,6295,6297,6299,6302,6304,6306,6308],{"class":30,"line":97},[28,6296,1629],{"class":211},[28,6298,1253],{"class":207},[28,6300,6301],{"class":64},"\"a=\"",[28,6303,1253],{"class":207},[28,6305,448],{"class":211},[28,6307,1253],{"class":207},[28,6309,1275],{"class":211},[28,6311,6312,6314,6316,6319,6321,6323,6325],{"class":30,"line":108},[28,6313,1629],{"class":211},[28,6315,1253],{"class":207},[28,6317,6318],{"class":64},"\"b=\"",[28,6320,1253],{"class":207},[28,6322,473],{"class":211},[28,6324,1253],{"class":207},[28,6326,1275],{"class":211},[28,6328,6329],{"class":30,"line":1407},[28,6330,1643],{"class":211},[126,6332,6333],{},"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":23,"searchDepth":42,"depth":42,"links":6335},[6336,6337,6338,6339,6340,6341],{"id":5249,"depth":42,"text":5250},{"id":5338,"depth":42,"text":5339},{"id":5421,"depth":42,"text":5422},{"id":5647,"depth":42,"text":5648},{"id":5996,"depth":42,"text":5997},{"id":6153,"depth":42,"text":6154},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5241,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6348,"title":6349,"body":6350,"description":6357,"extension":132,"meta":7762,"navigation":134,"path":7763,"seo":7764,"stem":7765,"__hash__":7766},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6351,"toc":7752},[6352,6355,6358,6362,6524,6528,6531,6534,6537,6540,6680,6684,6687,6690,6693,6758,6762,6767,6834,6837,6841,6844,6855,6860,6880,6883,6888,6907,6910,6914,6933,6936,6940,7175,7179,7182,7185,7188,7350,7353,7357,7360,7366,7749],[10,6353,6349],{"id":6354},"_3指针",[14,6356,6357],{},"通过指针保存一个地址，指针就是个地址",[149,6359,6361],{"id":6360},"_31定义指针","3.1定义指针",[18,6363,6365],{"className":198,"code":6364,"language":200,"meta":23,"style":23},"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",[25,6366,6367,6375,6379,6384,6396,6401,6409,6419,6437,6457,6461,6466,6471,6476,6490,6506,6520],{"__ignoreMap":23},[28,6368,6369,6371,6373],{"class":30,"line":31},[28,6370,215],{"class":207},[28,6372,2050],{"class":34},[28,6374,2053],{"class":211},[28,6376,6377],{"class":30,"line":42},[28,6378,1624],{"class":211},[28,6380,6381],{"class":30,"line":50},[28,6382,6383],{"class":269},"    \u002F\u002F1.定义指针\n",[28,6385,6386,6388,6390,6392,6394],{"class":30,"line":58},[28,6387,2062],{"class":207},[28,6389,1476],{"class":211},[28,6391,257],{"class":207},[28,6393,656],{"class":38},[28,6395,1370],{"class":211},[28,6397,6398],{"class":30,"line":70},[28,6399,6400],{"class":269},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[28,6402,6403,6406],{"class":30,"line":78},[28,6404,6405],{"class":207},"    int*",[28,6407,6408],{"class":211},"p;\n",[28,6410,6411,6414,6417],{"class":30,"line":86},[28,6412,6413],{"class":211},"    p",[28,6415,6416],{"class":207},"=&",[28,6418,6274],{"class":211},[28,6420,6421,6423,6425,6428,6431,6433,6435],{"class":30,"line":97},[28,6422,1629],{"class":211},[28,6424,1253],{"class":207},[28,6426,6427],{"class":64},"\"a的地址为：\"",[28,6429,6430],{"class":207},"\u003C\u003C&",[28,6432,448],{"class":211},[28,6434,1253],{"class":207},[28,6436,1275],{"class":211},[28,6438,6439,6441,6443,6446,6448,6450,6452,6454],{"class":30,"line":108},[28,6440,1629],{"class":211},[28,6442,1253],{"class":207},[28,6444,6445],{"class":64},"\"指针p为：\"",[28,6447,1253],{"class":207},[28,6449,14],{"class":211},[28,6451,1253],{"class":207},[28,6453,1318],{"class":211},[28,6455,6456],{"class":269},"\u002F\u002F指针p表示的就是a的地址\n",[28,6458,6459],{"class":30,"line":1407},[28,6460,2477],{"emptyLinePlaceholder":134},[28,6462,6463],{"class":30,"line":1690},[28,6464,6465],{"class":269},"    \u002F\u002F2.使用指针\n",[28,6467,6468],{"class":30,"line":1695},[28,6469,6470],{"class":269},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[28,6472,6473],{"class":30,"line":1701},[28,6474,6475],{"class":269},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[28,6477,6478,6481,6483,6485,6488],{"class":30,"line":1706},[28,6479,6480],{"class":207},"    *",[28,6482,14],{"class":211},[28,6484,257],{"class":207},[28,6486,6487],{"class":38},"1000",[28,6489,1370],{"class":211},[28,6491,6492,6494,6497,6499,6501,6503],{"class":30,"line":1720},[28,6493,1629],{"class":211},[28,6495,6496],{"class":207},"\u003C\u003C*",[28,6498,14],{"class":211},[28,6500,1253],{"class":207},[28,6502,1318],{"class":211},[28,6504,6505],{"class":269},"\u002F\u002F1000\n",[28,6507,6508,6510,6512,6514,6516,6518],{"class":30,"line":1725},[28,6509,1629],{"class":211},[28,6511,1253],{"class":207},[28,6513,448],{"class":211},[28,6515,1253],{"class":207},[28,6517,1318],{"class":211},[28,6519,6505],{"class":269},[28,6521,6522],{"class":30,"line":1731},[28,6523,1643],{"class":211},[149,6525,6527],{"id":6526},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6529,6530],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6532,6533],{},"在32位操作系统下：占用4个字节空间",[14,6535,6536],{},"在64位操作系统下：占用8个字节空间",[14,6538,6539],{},"上方是不管啥数据类型的",[18,6541,6543],{"className":198,"code":6542,"language":200,"meta":23,"style":23},"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",[25,6544,6545,6553,6557,6562,6574,6579,6584,6589,6602,6624,6650,6676],{"__ignoreMap":23},[28,6546,6547,6549,6551],{"class":30,"line":31},[28,6548,215],{"class":207},[28,6550,2050],{"class":34},[28,6552,2053],{"class":211},[28,6554,6555],{"class":30,"line":42},[28,6556,1624],{"class":211},[28,6558,6559],{"class":30,"line":50},[28,6560,6561],{"class":269},"    \u002F\u002F指针所占内存空间\n",[28,6563,6564,6566,6568,6570,6572],{"class":30,"line":58},[28,6565,2062],{"class":207},[28,6567,1476],{"class":211},[28,6569,257],{"class":207},[28,6571,656],{"class":38},[28,6573,1370],{"class":211},[28,6575,6576],{"class":30,"line":70},[28,6577,6578],{"class":269},"    \u002F\u002Fint *p;\n",[28,6580,6581],{"class":30,"line":78},[28,6582,6583],{"class":269},"    \u002F\u002Fp=&a;\n",[28,6585,6586],{"class":30,"line":86},[28,6587,6588],{"class":269},"    \u002F\u002F上述可以写为以下：\n",[28,6590,6591,6593,6596,6598,6600],{"class":30,"line":97},[28,6592,2062],{"class":207},[28,6594,6595],{"class":207}," *",[28,6597,14],{"class":211},[28,6599,6416],{"class":207},[28,6601,6274],{"class":211},[28,6603,6604,6607,6609,6612,6614,6617,6619,6621],{"class":30,"line":108},[28,6605,6606],{"class":211},"    cout ",[28,6608,1253],{"class":207},[28,6610,6611],{"class":64},"\"sizeof(int *)\"",[28,6613,1450],{"class":207},[28,6615,6616],{"class":211},"(p)",[28,6618,1253],{"class":207},[28,6620,1318],{"class":211},[28,6622,6623],{"class":269},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[28,6625,6626,6628,6630,6632,6634,6636,6638,6640,6642,6644,6647],{"class":30,"line":1407},[28,6627,6606],{"class":211},[28,6629,1253],{"class":207},[28,6631,6611],{"class":64},[28,6633,1450],{"class":207},[28,6635,212],{"class":211},[28,6637,215],{"class":207},[28,6639,6595],{"class":207},[28,6641,639],{"class":211},[28,6643,1253],{"class":207},[28,6645,6646],{"class":211},"endl",[28,6648,6649],{"class":269},"  \u002F\u002F4字节(32位的话)\n",[28,6651,6652,6654,6656,6659,6661,6663,6665,6667,6669,6671,6673],{"class":30,"line":1690},[28,6653,6606],{"class":211},[28,6655,1253],{"class":207},[28,6657,6658],{"class":64},"\"sizeof(char *)\"",[28,6660,1450],{"class":207},[28,6662,212],{"class":211},[28,6664,307],{"class":207},[28,6666,6595],{"class":207},[28,6668,639],{"class":211},[28,6670,1253],{"class":207},[28,6672,1318],{"class":211},[28,6674,6675],{"class":269}," \u002F\u002F4字节(32位的话)\n",[28,6677,6678],{"class":30,"line":1695},[28,6679,1643],{"class":211},[149,6681,6683],{"id":6682},"_33空指针","3.3空指针",[14,6685,6686],{},"空指针：指针变量指向内存中编号为0的空间",[14,6688,6689],{},"用途：初始化指针变量",[14,6691,6692],{},"注意：空指针指向的内存是不可以访问的",[18,6694,6696],{"className":198,"code":6695,"language":200,"meta":23,"style":23},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[25,6697,6698,6706,6710,6715,6729,6734,6749,6754],{"__ignoreMap":23},[28,6699,6700,6702,6704],{"class":30,"line":31},[28,6701,215],{"class":207},[28,6703,2050],{"class":34},[28,6705,2053],{"class":211},[28,6707,6708],{"class":30,"line":42},[28,6709,1624],{"class":211},[28,6711,6712],{"class":30,"line":50},[28,6713,6714],{"class":269},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[28,6716,6717,6719,6721,6723,6725,6727],{"class":30,"line":58},[28,6718,2062],{"class":207},[28,6720,6595],{"class":207},[28,6722,14],{"class":211},[28,6724,257],{"class":207},[28,6726,2469],{"class":38},[28,6728,1370],{"class":211},[28,6730,6731],{"class":30,"line":70},[28,6732,6733],{"class":269},"    \u002F\u002F2.空指针不能进行访问\n",[28,6735,6736,6738,6740,6742,6744,6746],{"class":30,"line":78},[28,6737,6480],{"class":207},[28,6739,14],{"class":211},[28,6741,257],{"class":207},[28,6743,521],{"class":38},[28,6745,266],{"class":211},[28,6747,6748],{"class":269},"\u002F\u002F直接报错，压根不能访问\n",[28,6750,6751],{"class":30,"line":86},[28,6752,6753],{"class":269},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[28,6755,6756],{"class":30,"line":97},[28,6757,1643],{"class":211},[149,6759,6761],{"id":6760},"_34野指针","3.4野指针",[14,6763,6764],{},[359,6765,6766],{},"指针变量指向非法的内存空间",[18,6768,6770],{"className":198,"code":6769,"language":200,"meta":23,"style":23},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[25,6771,6772,6780,6784,6813,6818,6830],{"__ignoreMap":23},[28,6773,6774,6776,6778],{"class":30,"line":31},[28,6775,215],{"class":207},[28,6777,2050],{"class":34},[28,6779,2053],{"class":211},[28,6781,6782],{"class":30,"line":42},[28,6783,1624],{"class":211},[28,6785,6786,6788,6790,6792,6794,6796,6798,6800,6802,6805,6808,6810],{"class":30,"line":50},[28,6787,2062],{"class":207},[28,6789,6595],{"class":207},[28,6791,14],{"class":211},[28,6793,257],{"class":207},[28,6795,212],{"class":211},[28,6797,215],{"class":207},[28,6799,6595],{"class":207},[28,6801,639],{"class":211},[28,6803,6804],{"class":207},"0x",[28,6806,6807],{"class":38},"1100",[28,6809,266],{"class":211},[28,6811,6812],{"class":269}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[28,6814,6815],{"class":30,"line":58},[28,6816,6817],{"class":269},"    \u002F\u002F访问野指针报错\n",[28,6819,6820,6822,6824,6826,6828],{"class":30,"line":70},[28,6821,1629],{"class":211},[28,6823,6496],{"class":207},[28,6825,14],{"class":211},[28,6827,1253],{"class":207},[28,6829,1275],{"class":211},[28,6831,6832],{"class":30,"line":78},[28,6833,1643],{"class":211},[14,6835,6836],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[149,6838,6840],{"id":6839},"_35const修饰指针","3.5const修饰指针",[14,6842,6843],{},"三种情况：",[116,6845,6846,6849,6852],{},[119,6847,6848],{},"const修饰指针 常量指针",[119,6850,6851],{},"const修饰常量 指针常量",[119,6853,6854],{},"const即修饰指针，又修饰常量",[161,6856,6857],{},[119,6858,6859],{},"常量指针",[18,6861,6863],{"className":198,"code":6862,"language":200,"meta":23,"style":23},"const int *p=&a;\n",[25,6864,6865],{"__ignoreMap":23},[28,6866,6867,6870,6872,6874,6876,6878],{"class":30,"line":31},[28,6868,6869],{"class":207},"const",[28,6871,2459],{"class":207},[28,6873,6595],{"class":207},[28,6875,14],{"class":211},[28,6877,6416],{"class":207},[28,6879,6274],{"class":211},[14,6881,6882],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[161,6884,6885],{"start":42},[119,6886,6887],{},"指针常量",[18,6889,6891],{"className":198,"code":6890,"language":200,"meta":23,"style":23},"int *const p=&a;\n",[25,6892,6893],{"__ignoreMap":23},[28,6894,6895,6897,6900,6903,6905],{"class":30,"line":31},[28,6896,215],{"class":207},[28,6898,6899],{"class":207}," *const",[28,6901,6902],{"class":211}," p",[28,6904,6416],{"class":207},[28,6906,6274],{"class":211},[14,6908,6909],{},"指针的指向不可以改，指针指向的值可以改",[161,6911,6912],{"start":50},[119,6913,6854],{},[18,6915,6917],{"className":198,"code":6916,"language":200,"meta":23,"style":23},"const int *const p=&a;\n",[25,6918,6919],{"__ignoreMap":23},[28,6920,6921,6923,6925,6927,6929,6931],{"class":30,"line":31},[28,6922,6869],{"class":207},[28,6924,2459],{"class":207},[28,6926,6899],{"class":207},[28,6928,6902],{"class":211},[28,6930,6416],{"class":207},[28,6932,6274],{"class":211},[14,6934,6935],{},"指针的指向和指针指向的值都不可以改变",[149,6937,6939],{"id":6938},"_36指针和数组","3.6指针和数组",[18,6941,6943],{"className":198,"code":6942,"language":200,"meta":23,"style":23},"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",[25,6944,6945,6953,6957,6962,7016,7037,7053,7069,7080,7097,7102,7116,7142,7146,7158,7167,7171],{"__ignoreMap":23},[28,6946,6947,6949,6951],{"class":30,"line":31},[28,6948,215],{"class":207},[28,6950,2050],{"class":34},[28,6952,2053],{"class":211},[28,6954,6955],{"class":30,"line":42},[28,6956,1624],{"class":211},[28,6958,6959],{"class":30,"line":50},[28,6960,6961],{"class":269},"    \u002F\u002F利用指针访问数组中的元素\n",[28,6963,6964,6966,6968,6970,6972,6974,6976,6978,6980,6982,6984,6986,6988,6990,6992,6994,6996,6998,7000,7002,7004,7006,7008,7010,7012,7014],{"class":30,"line":58},[28,6965,2062],{"class":207},[28,6967,4039],{"class":211},[28,6969,656],{"class":38},[28,6971,1150],{"class":211},[28,6973,257],{"class":207},[28,6975,1106],{"class":211},[28,6977,427],{"class":38},[28,6979,588],{"class":211},[28,6981,288],{"class":38},[28,6983,588],{"class":211},[28,6985,282],{"class":38},[28,6987,588],{"class":211},[28,6989,503],{"class":38},[28,6991,588],{"class":211},[28,6993,529],{"class":38},[28,6995,588],{"class":211},[28,6997,554],{"class":38},[28,6999,588],{"class":211},[28,7001,579],{"class":38},[28,7003,588],{"class":211},[28,7005,605],{"class":38},[28,7007,588],{"class":211},[28,7009,630],{"class":38},[28,7011,588],{"class":211},[28,7013,656],{"class":38},[28,7015,4072],{"class":211},[28,7017,7018,7020,7022,7025,7027,7029,7031,7033,7035],{"class":30,"line":70},[28,7019,1629],{"class":211},[28,7021,1253],{"class":207},[28,7023,7024],{"class":64},"\"数组的第一个元素为：\"",[28,7026,1253],{"class":207},[28,7028,3983],{"class":211},[28,7030,401],{"class":38},[28,7032,1150],{"class":211},[28,7034,1253],{"class":207},[28,7036,1275],{"class":211},[28,7038,7039,7041,7043,7045,7047,7050],{"class":30,"line":78},[28,7040,2062],{"class":207},[28,7042,6595],{"class":207},[28,7044,14],{"class":211},[28,7046,257],{"class":207},[28,7048,7049],{"class":211},"arr;",[28,7051,7052],{"class":269},"\u002F\u002F注意数才要加取地址符号&\n",[28,7054,7055,7057,7059,7061,7063,7065,7067],{"class":30,"line":86},[28,7056,1629],{"class":211},[28,7058,1253],{"class":207},[28,7060,7024],{"class":64},[28,7062,6496],{"class":207},[28,7064,14],{"class":211},[28,7066,1253],{"class":207},[28,7068,1275],{"class":211},[28,7070,7071,7073,7075,7077],{"class":30,"line":97},[28,7072,6413],{"class":211},[28,7074,2369],{"class":207},[28,7076,266],{"class":211},[28,7078,7079],{"class":269}," \u002F\u002F让指针向后偏移4个字节\n",[28,7081,7082,7084,7086,7089,7091,7093,7095],{"class":30,"line":108},[28,7083,1629],{"class":211},[28,7085,1253],{"class":207},[28,7087,7088],{"class":64},"\"数组的第二个元素为：\"",[28,7090,6496],{"class":207},[28,7092,14],{"class":211},[28,7094,1253],{"class":207},[28,7096,1275],{"class":211},[28,7098,7099],{"class":30,"line":1407},[28,7100,7101],{"class":269},"    \u002F\u002F利用指针遍历数组\n",[28,7103,7104,7106,7108,7111,7113],{"class":30,"line":1690},[28,7105,2062],{"class":207},[28,7107,6595],{"class":207},[28,7109,7110],{"class":211},"p2",[28,7112,257],{"class":207},[28,7114,7115],{"class":211},"arr;\n",[28,7117,7118,7120,7122,7124,7126,7128,7130,7132,7134,7136,7138,7140],{"class":30,"line":1695},[28,7119,3278],{"class":207},[28,7121,1736],{"class":211},[28,7123,215],{"class":207},[28,7125,3109],{"class":211},[28,7127,257],{"class":207},[28,7129,401],{"class":38},[28,7131,3116],{"class":211},[28,7133,1120],{"class":207},[28,7135,656],{"class":38},[28,7137,3116],{"class":211},[28,7139,2369],{"class":207},[28,7141,218],{"class":211},[28,7143,7144],{"class":30,"line":1701},[28,7145,2107],{"class":211},[28,7147,7148,7150,7152,7154,7156],{"class":30,"line":1706},[28,7149,3528],{"class":211},[28,7151,6496],{"class":207},[28,7153,7110],{"class":211},[28,7155,1253],{"class":207},[28,7157,1275],{"class":211},[28,7159,7160,7163,7165],{"class":30,"line":1720},[28,7161,7162],{"class":211},"        p2",[28,7164,2369],{"class":207},[28,7166,1370],{"class":211},[28,7168,7169],{"class":30,"line":1725},[28,7170,2264],{"class":211},[28,7172,7173],{"class":30,"line":1731},[28,7174,1643],{"class":211},[149,7176,7178],{"id":7177},"_37指针和函数","3.7指针和函数",[14,7180,7181],{},"利用指针做函数参数，可以修改实参的值",[14,7183,7184],{},"值传递：只改变形参，不改变实参",[14,7186,7187],{},"地址传递：",[18,7189,7191],{"className":198,"code":7190,"language":200,"meta":23,"style":23},"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",[25,7192,7193,7218,7222,7234,7245,7255,7259,7267,7271,7283,7295,7300,7316,7331,7346],{"__ignoreMap":23},[28,7194,7195,7197,7199,7201,7203,7205,7208,7210,7212,7214,7216],{"class":30,"line":31},[28,7196,5441],{"class":207},[28,7198,5444],{"class":34},[28,7200,212],{"class":211},[28,7202,215],{"class":207},[28,7204,6595],{"class":207},[28,7206,7207],{"class":5293},"p1",[28,7209,588],{"class":211},[28,7211,215],{"class":207},[28,7213,6595],{"class":207},[28,7215,7110],{"class":5293},[28,7217,218],{"class":211},[28,7219,7220],{"class":30,"line":42},[28,7221,1624],{"class":211},[28,7223,7224,7226,7228,7231],{"class":30,"line":50},[28,7225,2062],{"class":207},[28,7227,4332],{"class":211},[28,7229,7230],{"class":207},"=*",[28,7232,7233],{"class":211},"p1;\n",[28,7235,7236,7238,7240,7242],{"class":30,"line":58},[28,7237,6480],{"class":207},[28,7239,7207],{"class":211},[28,7241,7230],{"class":207},[28,7243,7244],{"class":211},"p2;\n",[28,7246,7247,7249,7251,7253],{"class":30,"line":70},[28,7248,6480],{"class":207},[28,7250,7110],{"class":211},[28,7252,257],{"class":207},[28,7254,4357],{"class":211},[28,7256,7257],{"class":30,"line":78},[28,7258,1643],{"class":211},[28,7260,7261,7263,7265],{"class":30,"line":86},[28,7262,215],{"class":207},[28,7264,2050],{"class":34},[28,7266,2053],{"class":211},[28,7268,7269],{"class":30,"line":97},[28,7270,1624],{"class":211},[28,7272,7273,7275,7277,7279,7281],{"class":30,"line":108},[28,7274,2062],{"class":207},[28,7276,1476],{"class":211},[28,7278,257],{"class":207},[28,7280,656],{"class":38},[28,7282,1370],{"class":211},[28,7284,7285,7287,7289,7291,7293],{"class":30,"line":1407},[28,7286,2062],{"class":207},[28,7288,2910],{"class":211},[28,7290,257],{"class":207},[28,7292,910],{"class":38},[28,7294,1370],{"class":211},[28,7296,7297],{"class":30,"line":1690},[28,7298,7299],{"class":269},"    \u002F\u002F地址传递\n",[28,7301,7302,7304,7306,7308,7311,7313],{"class":30,"line":1695},[28,7303,5638],{"class":34},[28,7305,212],{"class":211},[28,7307,563],{"class":207},[28,7309,7310],{"class":211},"a,",[28,7312,563],{"class":207},[28,7314,7315],{"class":211},"b);\n",[28,7317,7318,7320,7322,7324,7326,7328],{"class":30,"line":1701},[28,7319,1629],{"class":211},[28,7321,1253],{"class":207},[28,7323,448],{"class":211},[28,7325,1253],{"class":207},[28,7327,1318],{"class":211},[28,7329,7330],{"class":269},"\u002F\u002F20\n",[28,7332,7333,7335,7337,7339,7341,7343],{"class":30,"line":1706},[28,7334,1629],{"class":211},[28,7336,1253],{"class":207},[28,7338,473],{"class":211},[28,7340,1253],{"class":207},[28,7342,1318],{"class":211},[28,7344,7345],{"class":269},"\u002F\u002F10\n",[28,7347,7348],{"class":30,"line":1720},[28,7349,1643],{"class":211},[14,7351,7352],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[149,7354,7356],{"id":7355},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7358,7359],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7361,7362,7363,7365],{},"例如数组：int arr",[28,7364,656],{},"={4,3,6,9,1,2,10,8,7,5}",[18,7367,7369],{"className":198,"code":7368,"language":200,"meta":23,"style":23},"#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",[25,7370,7371,7377,7387,7411,7415,7446,7450,7484,7488,7506,7510,7521,7536,7551,7555,7559,7563,7567,7571,7579,7583,7588,7642,7654,7666,7671,7679,7683,7688,7713,7717,7732,7741,7745],{"__ignoreMap":23},[28,7372,7373,7375],{"class":30,"line":31},[28,7374,2027],{"class":207},[28,7376,2030],{"class":64},[28,7378,7379,7381,7383,7385],{"class":30,"line":42},[28,7380,2035],{"class":207},[28,7382,2038],{"class":207},[28,7384,2041],{"class":34},[28,7386,1370],{"class":211},[28,7388,7389,7391,7394,7396,7398,7400,7402,7404,7406,7409],{"class":30,"line":50},[28,7390,5441],{"class":207},[28,7392,7393],{"class":34}," bubbleSort",[28,7395,212],{"class":211},[28,7397,215],{"class":207},[28,7399,6595],{"class":207},[28,7401,14],{"class":5293},[28,7403,588],{"class":211},[28,7405,215],{"class":207},[28,7407,7408],{"class":5293}," len",[28,7410,218],{"class":211},[28,7412,7413],{"class":30,"line":58},[28,7414,1624],{"class":211},[28,7416,7417,7419,7421,7423,7425,7427,7429,7431,7433,7436,7438,7440,7442,7444],{"class":30,"line":70},[28,7418,3278],{"class":207},[28,7420,212],{"class":211},[28,7422,215],{"class":207},[28,7424,3109],{"class":211},[28,7426,257],{"class":207},[28,7428,401],{"class":38},[28,7430,3116],{"class":211},[28,7432,1120],{"class":207},[28,7434,7435],{"class":211},"len",[28,7437,742],{"class":207},[28,7439,427],{"class":38},[28,7441,3116],{"class":211},[28,7443,2369],{"class":207},[28,7445,218],{"class":211},[28,7447,7448],{"class":30,"line":78},[28,7449,2107],{"class":211},[28,7451,7452,7454,7456,7458,7460,7462,7464,7466,7468,7470,7472,7474,7476,7478,7480,7482],{"class":30,"line":86},[28,7453,3480],{"class":207},[28,7455,212],{"class":211},[28,7457,215],{"class":207},[28,7459,3487],{"class":211},[28,7461,257],{"class":207},[28,7463,401],{"class":38},[28,7465,3494],{"class":211},[28,7467,1120],{"class":207},[28,7469,7435],{"class":211},[28,7471,742],{"class":207},[28,7473,651],{"class":211},[28,7475,742],{"class":207},[28,7477,427],{"class":38},[28,7479,3494],{"class":211},[28,7481,2369],{"class":207},[28,7483,218],{"class":211},[28,7485,7486],{"class":30,"line":97},[28,7487,2587],{"class":211},[28,7489,7490,7492,7495,7497,7500,7502,7504],{"class":30,"line":108},[28,7491,4719],{"class":207},[28,7493,7494],{"class":211},"(p[j]",[28,7496,1170],{"class":207},[28,7498,7499],{"class":211},"p[j",[28,7501,691],{"class":207},[28,7503,427],{"class":38},[28,7505,4734],{"class":211},[28,7507,7508],{"class":30,"line":1407},[28,7509,4739],{"class":211},[28,7511,7512,7514,7516,7518],{"class":30,"line":1690},[28,7513,4744],{"class":207},[28,7515,4332],{"class":211},[28,7517,257],{"class":207},[28,7519,7520],{"class":211},"p[j];\n",[28,7522,7523,7526,7528,7530,7532,7534],{"class":30,"line":1695},[28,7524,7525],{"class":211},"                p[j]",[28,7527,257],{"class":207},[28,7529,7499],{"class":211},[28,7531,691],{"class":207},[28,7533,427],{"class":38},[28,7535,4767],{"class":211},[28,7537,7538,7541,7543,7545,7547,7549],{"class":30,"line":1701},[28,7539,7540],{"class":211},"                p[j",[28,7542,691],{"class":207},[28,7544,427],{"class":38},[28,7546,1150],{"class":211},[28,7548,257],{"class":207},[28,7550,4357],{"class":211},[28,7552,7553],{"class":30,"line":1706},[28,7554,4787],{"class":211},[28,7556,7557],{"class":30,"line":1720},[28,7558,2606],{"class":211},[28,7560,7561],{"class":30,"line":1725},[28,7562,2264],{"class":211},[28,7564,7565],{"class":30,"line":1731},[28,7566,1643],{"class":211},[28,7568,7569],{"class":30,"line":1752},[28,7570,2477],{"emptyLinePlaceholder":134},[28,7572,7573,7575,7577],{"class":30,"line":1757},[28,7574,215],{"class":207},[28,7576,2050],{"class":34},[28,7578,2053],{"class":211},[28,7580,7581],{"class":30,"line":1771},[28,7582,1624],{"class":211},[28,7584,7585],{"class":30,"line":1776},[28,7586,7587],{"class":269},"    \u002F\u002F 1.创建数组\n",[28,7589,7590,7592,7594,7596,7598,7600,7602,7604,7606,7608,7610,7612,7614,7616,7618,7620,7622,7624,7626,7628,7630,7632,7634,7636,7638,7640],{"class":30,"line":1805},[28,7591,2062],{"class":207},[28,7593,4039],{"class":211},[28,7595,656],{"class":38},[28,7597,1150],{"class":211},[28,7599,257],{"class":207},[28,7601,1106],{"class":211},[28,7603,503],{"class":38},[28,7605,588],{"class":211},[28,7607,282],{"class":38},[28,7609,588],{"class":211},[28,7611,554],{"class":38},[28,7613,588],{"class":211},[28,7615,630],{"class":38},[28,7617,588],{"class":211},[28,7619,427],{"class":38},[28,7621,588],{"class":211},[28,7623,288],{"class":38},[28,7625,588],{"class":211},[28,7627,656],{"class":38},[28,7629,588],{"class":211},[28,7631,605],{"class":38},[28,7633,588],{"class":211},[28,7635,579],{"class":38},[28,7637,588],{"class":211},[28,7639,529],{"class":38},[28,7641,4072],{"class":211},[28,7643,7644,7646,7648,7650,7652],{"class":30,"line":1810},[28,7645,2062],{"class":207},[28,7647,7408],{"class":211},[28,7649,257],{"class":207},[28,7651,656],{"class":38},[28,7653,1370],{"class":211},[28,7655,7656,7658,7660,7662,7664],{"class":30,"line":1827},[28,7657,2062],{"class":207},[28,7659,6595],{"class":207},[28,7661,14],{"class":211},[28,7663,257],{"class":207},[28,7665,7115],{"class":211},[28,7667,7668],{"class":30,"line":1832},[28,7669,7670],{"class":269},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[28,7672,7673,7676],{"class":30,"line":1837},[28,7674,7675],{"class":34},"    bubbleSort",[28,7677,7678],{"class":211},"(p,len);\n",[28,7680,7681],{"class":30,"line":1842},[28,7682,2477],{"emptyLinePlaceholder":134},[28,7684,7685],{"class":30,"line":1856},[28,7686,7687],{"class":269},"    \u002F\u002F 3.打印排序后的数组\n",[28,7689,7690,7692,7694,7696,7698,7700,7702,7704,7706,7709,7711],{"class":30,"line":1861},[28,7691,3278],{"class":207},[28,7693,1736],{"class":211},[28,7695,215],{"class":207},[28,7697,3109],{"class":211},[28,7699,257],{"class":207},[28,7701,401],{"class":38},[28,7703,3291],{"class":211},[28,7705,1120],{"class":207},[28,7707,7708],{"class":211},"len; i",[28,7710,2369],{"class":207},[28,7712,218],{"class":211},[28,7714,7715],{"class":30,"line":2654},[28,7716,2107],{"class":211},[28,7718,7719,7721,7723,7725,7727,7730],{"class":30,"line":2668},[28,7720,3528],{"class":211},[28,7722,6496],{"class":207},[28,7724,14],{"class":211},[28,7726,1253],{"class":207},[28,7728,7729],{"class":64},"\"\"",[28,7731,1370],{"class":211},[28,7733,7734,7737,7739],{"class":30,"line":2676},[28,7735,7736],{"class":211},"        p",[28,7738,2369],{"class":207},[28,7740,1370],{"class":211},[28,7742,7743],{"class":30,"line":2681},[28,7744,2264],{"class":211},[28,7746,7747],{"class":30,"line":2687},[28,7748,1643],{"class":211},[126,7750,7751],{},"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":23,"searchDepth":42,"depth":42,"links":7753},[7754,7755,7756,7757,7758,7759,7760,7761],{"id":6360,"depth":42,"text":6361},{"id":6526,"depth":42,"text":6527},{"id":6682,"depth":42,"text":6683},{"id":6760,"depth":42,"text":6761},{"id":6839,"depth":42,"text":6840},{"id":6938,"depth":42,"text":6939},{"id":7177,"depth":42,"text":7178},{"id":7355,"depth":42,"text":7356},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6349,"description":6357},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7768,"title":7769,"body":7770,"description":7777,"extension":132,"meta":10751,"navigation":134,"path":10752,"seo":10753,"stem":10754,"__hash__":10755},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7771,"toc":10742},[7772,7775,7778,7782,7785,7788,7799,8137,8140,8144,8147,8154,8409,8413,8416,8419,8574,8578,8581,8584,8790,8794,8797,9100,9103,9111,9115,9118,9269,9271,9282,9339,9343,9348,10005,10013,10016,10110,10113,10733,10739],[10,7773,7769],{"id":7774},"_4结构体",[14,7776,7777],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[149,7779,7781],{"id":7780},"_41结构体定义与使用","4.1结构体定义与使用",[14,7783,7784],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7786,7787],{},"通过结构体创建变量的方式：",[116,7789,7790,7793,7796],{},[119,7791,7792],{},"struct 结构体名 变量名",[119,7794,7795],{},"struct 结构体名 变量名={成员1值，成员2值...}",[119,7797,7798],{},"定义结构体时顺便创建变量",[18,7800,7802],{"className":198,"code":7801,"language":200,"meta":23,"style":23},"#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",[25,7803,7804,7810,7820,7827,7832,7840,7844,7849,7853,7858,7863,7868,7875,7880,7887,7891,7898,7902,7906,7910,7914,7918,7922,7928,7932,7938,7946,7954,7958,7963,7968,7979,7984,7996,8007,8018,8023,8047,8052,8058,8085,8090,8096,8108,8120,8132],{"__ignoreMap":23},[28,7805,7806,7808],{"class":30,"line":31},[28,7807,2027],{"class":207},[28,7809,2030],{"class":64},[28,7811,7812,7814,7816,7818],{"class":30,"line":42},[28,7813,2035],{"class":207},[28,7815,2038],{"class":207},[28,7817,2041],{"class":34},[28,7819,1370],{"class":211},[28,7821,7822,7824],{"class":30,"line":50},[28,7823,2027],{"class":207},[28,7825,7826],{"class":64},"\u003Cstring>\n",[28,7828,7829],{"class":30,"line":58},[28,7830,7831],{"class":269},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[28,7833,7834,7837],{"class":30,"line":70},[28,7835,7836],{"class":207},"struct",[28,7838,7839],{"class":34}," Student\n",[28,7841,7842],{"class":30,"line":78},[28,7843,1624],{"class":211},[28,7845,7846],{"class":30,"line":86},[28,7847,7848],{"class":269},"    \u002F\u002F成员列表\n",[28,7850,7851],{"class":30,"line":97},[28,7852,2477],{"emptyLinePlaceholder":134},[28,7854,7855],{"class":30,"line":108},[28,7856,7857],{"class":269},"    \u002F\u002F姓名\n",[28,7859,7860],{"class":30,"line":1407},[28,7861,7862],{"class":211},"    string name;\n",[28,7864,7865],{"class":30,"line":1690},[28,7866,7867],{"class":269},"    \u002F\u002F年龄\n",[28,7869,7870,7872],{"class":30,"line":1695},[28,7871,2062],{"class":207},[28,7873,7874],{"class":211}," age;\n",[28,7876,7877],{"class":30,"line":1701},[28,7878,7879],{"class":269},"    \u002F\u002F分数\n",[28,7881,7882,7884],{"class":30,"line":1706},[28,7883,2062],{"class":207},[28,7885,7886],{"class":211}," score;\n",[28,7888,7889],{"class":30,"line":1720},[28,7890,4072],{"class":211},[28,7892,7893,7895],{"class":30,"line":1725},[28,7894,7836],{"class":207},[28,7896,7897],{"class":34}," School\n",[28,7899,7900],{"class":30,"line":1731},[28,7901,1624],{"class":211},[28,7903,7904],{"class":30,"line":1752},[28,7905,7848],{"class":269},[28,7907,7908],{"class":30,"line":1757},[28,7909,2477],{"emptyLinePlaceholder":134},[28,7911,7912],{"class":30,"line":1771},[28,7913,7857],{"class":269},[28,7915,7916],{"class":30,"line":1776},[28,7917,7862],{"class":211},[28,7919,7920],{"class":30,"line":1805},[28,7921,7867],{"class":269},[28,7923,7924,7926],{"class":30,"line":1810},[28,7925,2062],{"class":207},[28,7927,7874],{"class":211},[28,7929,7930],{"class":30,"line":1827},[28,7931,7879],{"class":269},[28,7933,7934,7936],{"class":30,"line":1832},[28,7935,2062],{"class":207},[28,7937,7886],{"class":211},[28,7939,7940,7943],{"class":30,"line":1837},[28,7941,7942],{"class":211},"} s3;",[28,7944,7945],{"class":269}," \u002F\u002F创建结构体时就创建了变量\n",[28,7947,7948,7950,7952],{"class":30,"line":1842},[28,7949,215],{"class":207},[28,7951,2050],{"class":34},[28,7953,2053],{"class":211},[28,7955,7956],{"class":30,"line":1856},[28,7957,1624],{"class":211},[28,7959,7960],{"class":30,"line":1861},[28,7961,7962],{"class":269},"    \u002F\u002F2.通过学生类型创建具体学生\n",[28,7964,7965],{"class":30,"line":2654},[28,7966,7967],{"class":269},"    \u002F\u002F2.1 struct Student s1;\n",[28,7969,7970,7973,7976],{"class":30,"line":2668},[28,7971,7972],{"class":207},"    struct",[28,7974,7975],{"class":34}," Student",[28,7977,7978],{"class":211}," s1;\n",[28,7980,7981],{"class":30,"line":2676},[28,7982,7983],{"class":269},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[28,7985,7986,7989,7991,7994],{"class":30,"line":2681},[28,7987,7988],{"class":211},"    s1.name",[28,7990,257],{"class":207},[28,7992,7993],{"class":64},"\"张三\"",[28,7995,1370],{"class":211},[28,7997,7998,8001,8003,8005],{"class":30,"line":2687},[28,7999,8000],{"class":211},"    s1.age",[28,8002,257],{"class":207},[28,8004,860],{"class":38},[28,8006,1370],{"class":211},[28,8008,8009,8012,8014,8016],{"class":30,"line":2693},[28,8010,8011],{"class":211},"    s1.score",[28,8013,257],{"class":207},[28,8015,464],{"class":38},[28,8017,1370],{"class":211},[28,8019,8020],{"class":30,"line":2698},[28,8021,8022],{"class":269},"    \u002F\u002F输出结果\n",[28,8024,8026,8028,8030,8033,8035,8038,8040,8043,8045],{"class":30,"line":8025},37,[28,8027,1629],{"class":211},[28,8029,1253],{"class":207},[28,8031,8032],{"class":211},"s1.name",[28,8034,1253],{"class":207},[28,8036,8037],{"class":211},"s1.age",[28,8039,1253],{"class":207},[28,8041,8042],{"class":211},"s1.score",[28,8044,1253],{"class":207},[28,8046,1275],{"class":211},[28,8048,8050],{"class":30,"line":8049},38,[28,8051,2477],{"emptyLinePlaceholder":134},[28,8053,8055],{"class":30,"line":8054},39,[28,8056,8057],{"class":269},"    \u002F\u002F2.2 struct Student s2={...}\n",[28,8059,8061,8063,8065,8068,8070,8072,8075,8077,8079,8081,8083],{"class":30,"line":8060},40,[28,8062,7972],{"class":207},[28,8064,7975],{"class":34},[28,8066,8067],{"class":211}," s2",[28,8069,257],{"class":207},[28,8071,1106],{"class":211},[28,8073,8074],{"class":64},"\"王五\"",[28,8076,588],{"class":211},[28,8078,860],{"class":38},[28,8080,588],{"class":211},[28,8082,464],{"class":38},[28,8084,4072],{"class":211},[28,8086,8088],{"class":30,"line":8087},41,[28,8089,2477],{"emptyLinePlaceholder":134},[28,8091,8093],{"class":30,"line":8092},42,[28,8094,8095],{"class":269},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[28,8097,8099,8102,8104,8106],{"class":30,"line":8098},43,[28,8100,8101],{"class":211},"    s3.name",[28,8103,257],{"class":207},[28,8105,3755],{"class":64},[28,8107,1370],{"class":211},[28,8109,8111,8114,8116,8118],{"class":30,"line":8110},44,[28,8112,8113],{"class":211},"    s3.age",[28,8115,257],{"class":207},[28,8117,860],{"class":38},[28,8119,1370],{"class":211},[28,8121,8123,8126,8128,8130],{"class":30,"line":8122},45,[28,8124,8125],{"class":211},"    s3.score",[28,8127,257],{"class":207},[28,8129,910],{"class":38},[28,8131,1370],{"class":211},[28,8133,8135],{"class":30,"line":8134},46,[28,8136,1643],{"class":211},[14,8138,8139],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[149,8141,8143],{"id":8142},"_42结构体数组","4.2结构体数组",[14,8145,8146],{},"将自定义的结构体放入到数组中方便维护",[14,8148,8149,8150,8153],{},"语法：struct 结构体名 数组名",[28,8151,8152],{},"元素个数","={ {}，{},...{} };",[18,8155,8157],{"className":198,"code":8156,"language":200,"meta":23,"style":23},"#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",[25,8158,8159,8165,8175,8181,8186,8192,8196,8200,8206,8212,8216,8220,8228,8232,8237,8252,8256,8272,8288,8292,8297,8313,8328,8343,8348,8374,8378,8401,8405],{"__ignoreMap":23},[28,8160,8161,8163],{"class":30,"line":31},[28,8162,2027],{"class":207},[28,8164,2030],{"class":64},[28,8166,8167,8169,8171,8173],{"class":30,"line":42},[28,8168,2035],{"class":207},[28,8170,2038],{"class":207},[28,8172,2041],{"class":34},[28,8174,1370],{"class":211},[28,8176,8177,8179],{"class":30,"line":50},[28,8178,2027],{"class":207},[28,8180,7826],{"class":64},[28,8182,8183],{"class":30,"line":58},[28,8184,8185],{"class":269},"\u002F\u002F1.定义结构体\n",[28,8187,8188,8190],{"class":30,"line":70},[28,8189,7836],{"class":207},[28,8191,7839],{"class":34},[28,8193,8194],{"class":30,"line":78},[28,8195,1624],{"class":211},[28,8197,8198],{"class":30,"line":86},[28,8199,7862],{"class":211},[28,8201,8202,8204],{"class":30,"line":97},[28,8203,2062],{"class":207},[28,8205,7874],{"class":211},[28,8207,8208,8210],{"class":30,"line":108},[28,8209,2062],{"class":207},[28,8211,7886],{"class":211},[28,8213,8214],{"class":30,"line":1407},[28,8215,2477],{"emptyLinePlaceholder":134},[28,8217,8218],{"class":30,"line":1690},[28,8219,4072],{"class":211},[28,8221,8222,8224,8226],{"class":30,"line":1695},[28,8223,215],{"class":207},[28,8225,2050],{"class":34},[28,8227,2053],{"class":211},[28,8229,8230],{"class":30,"line":1701},[28,8231,1624],{"class":211},[28,8233,8234],{"class":30,"line":1706},[28,8235,8236],{"class":269},"    \u002F\u002F2.创建结构体数组\n",[28,8238,8239,8241,8243,8246,8248,8250],{"class":30,"line":1720},[28,8240,7972],{"class":207},[28,8242,7975],{"class":34},[28,8244,8245],{"class":211}," stuArray[",[28,8247,288],{"class":38},[28,8249,1150],{"class":211},[28,8251,4985],{"class":207},[28,8253,8254],{"class":30,"line":1725},[28,8255,2107],{"class":211},[28,8257,8258,8260,8262,8264,8266,8268,8270],{"class":30,"line":1731},[28,8259,4994],{"class":211},[28,8261,7993],{"class":64},[28,8263,588],{"class":211},[28,8265,860],{"class":38},[28,8267,588],{"class":211},[28,8269,521],{"class":38},[28,8271,5007],{"class":211},[28,8273,8274,8276,8278,8280,8282,8284,8286],{"class":30,"line":1752},[28,8275,4994],{"class":211},[28,8277,3755],{"class":64},[28,8279,588],{"class":211},[28,8281,785],{"class":38},[28,8283,588],{"class":211},[28,8285,785],{"class":38},[28,8287,1643],{"class":211},[28,8289,8290],{"class":30,"line":1757},[28,8291,2264],{"class":211},[28,8293,8294],{"class":30,"line":1771},[28,8295,8296],{"class":269},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[28,8298,8299,8302,8304,8307,8309,8311],{"class":30,"line":1776},[28,8300,8301],{"class":211},"    stuArray[",[28,8303,427],{"class":38},[28,8305,8306],{"class":211},"].name",[28,8308,257],{"class":207},[28,8310,3778],{"class":64},[28,8312,1370],{"class":211},[28,8314,8315,8317,8319,8322,8324,8326],{"class":30,"line":1805},[28,8316,8301],{"class":211},[28,8318,427],{"class":38},[28,8320,8321],{"class":211},"].age",[28,8323,257],{"class":207},[28,8325,288],{"class":38},[28,8327,1370],{"class":211},[28,8329,8330,8332,8334,8337,8339,8341],{"class":30,"line":1810},[28,8331,8301],{"class":211},[28,8333,427],{"class":38},[28,8335,8336],{"class":211},"].score",[28,8338,257],{"class":207},[28,8340,288],{"class":38},[28,8342,1370],{"class":211},[28,8344,8345],{"class":30,"line":1827},[28,8346,8347],{"class":269},"    \u002F\u002F4.遍历结构体数组\n",[28,8349,8350,8352,8354,8356,8358,8360,8362,8364,8366,8368,8370,8372],{"class":30,"line":1832},[28,8351,3278],{"class":207},[28,8353,1736],{"class":211},[28,8355,215],{"class":207},[28,8357,3109],{"class":211},[28,8359,257],{"class":207},[28,8361,401],{"class":38},[28,8363,3116],{"class":211},[28,8365,1120],{"class":207},[28,8367,288],{"class":38},[28,8369,3116],{"class":211},[28,8371,2369],{"class":207},[28,8373,218],{"class":211},[28,8375,8376],{"class":30,"line":1837},[28,8377,2107],{"class":211},[28,8379,8380,8382,8384,8387,8389,8392,8394,8397,8399],{"class":30,"line":1842},[28,8381,3528],{"class":211},[28,8383,1253],{"class":207},[28,8385,8386],{"class":211},"stuArray[i].name",[28,8388,1253],{"class":207},[28,8390,8391],{"class":211},"stuArray[i].age",[28,8393,1253],{"class":207},[28,8395,8396],{"class":211},"stuArray[i].score",[28,8398,1253],{"class":207},[28,8400,1275],{"class":211},[28,8402,8403],{"class":30,"line":1856},[28,8404,2264],{"class":211},[28,8406,8407],{"class":30,"line":1861},[28,8408,1643],{"class":211},[149,8410,8412],{"id":8411},"_43结构体指针","4.3结构体指针",[14,8414,8415],{},"作用：通过指针访问结构体中的成员",[14,8417,8418],{},"利用操作符->可以通过结构体指针访问结构体属性",[18,8420,8422],{"className":198,"code":8421,"language":200,"meta":23,"style":23},"#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",[25,8423,8424,8430,8440,8446,8450,8456,8460,8464,8470,8476,8480,8488,8492,8497,8522,8527,8542,8547,8570],{"__ignoreMap":23},[28,8425,8426,8428],{"class":30,"line":31},[28,8427,2027],{"class":207},[28,8429,2030],{"class":64},[28,8431,8432,8434,8436,8438],{"class":30,"line":42},[28,8433,2035],{"class":207},[28,8435,2038],{"class":207},[28,8437,2041],{"class":34},[28,8439,1370],{"class":211},[28,8441,8442,8444],{"class":30,"line":50},[28,8443,2027],{"class":207},[28,8445,7826],{"class":64},[28,8447,8448],{"class":30,"line":58},[28,8449,8185],{"class":269},[28,8451,8452,8454],{"class":30,"line":70},[28,8453,7836],{"class":207},[28,8455,7839],{"class":34},[28,8457,8458],{"class":30,"line":78},[28,8459,1624],{"class":211},[28,8461,8462],{"class":30,"line":86},[28,8463,7862],{"class":211},[28,8465,8466,8468],{"class":30,"line":97},[28,8467,2062],{"class":207},[28,8469,7874],{"class":211},[28,8471,8472,8474],{"class":30,"line":108},[28,8473,2062],{"class":207},[28,8475,7886],{"class":211},[28,8477,8478],{"class":30,"line":1407},[28,8479,4072],{"class":211},[28,8481,8482,8484,8486],{"class":30,"line":1690},[28,8483,215],{"class":207},[28,8485,2050],{"class":34},[28,8487,2053],{"class":211},[28,8489,8490],{"class":30,"line":1695},[28,8491,1624],{"class":211},[28,8493,8494],{"class":30,"line":1701},[28,8495,8496],{"class":269},"    \u002F\u002F创建学生结构体变量\n",[28,8498,8499,8501,8503,8506,8508,8510,8512,8514,8516,8518,8520],{"class":30,"line":1706},[28,8500,7972],{"class":207},[28,8502,7975],{"class":34},[28,8504,8505],{"class":211}," s",[28,8507,257],{"class":207},[28,8509,1106],{"class":211},[28,8511,7993],{"class":64},[28,8513,588],{"class":211},[28,8515,860],{"class":38},[28,8517,588],{"class":211},[28,8519,1800],{"class":38},[28,8521,4072],{"class":211},[28,8523,8524],{"class":30,"line":1720},[28,8525,8526],{"class":269},"    \u002F\u002F通过指针指向结构体变量\n",[28,8528,8529,8531,8533,8535,8537,8539],{"class":30,"line":1725},[28,8530,7972],{"class":207},[28,8532,7975],{"class":34},[28,8534,6595],{"class":207},[28,8536,14],{"class":211},[28,8538,6416],{"class":207},[28,8540,8541],{"class":211},"s\n",[28,8543,8544],{"class":30,"line":1731},[28,8545,8546],{"class":269},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[28,8548,8549,8551,8553,8556,8558,8561,8563,8566,8568],{"class":30,"line":1752},[28,8550,1629],{"class":211},[28,8552,1253],{"class":207},[28,8554,8555],{"class":211},"p->name",[28,8557,1253],{"class":207},[28,8559,8560],{"class":211},"p->age",[28,8562,1253],{"class":207},[28,8564,8565],{"class":211},"p->score",[28,8567,1253],{"class":207},[28,8569,1275],{"class":211},[28,8571,8572],{"class":30,"line":1757},[28,8573,1643],{"class":211},[149,8575,8577],{"id":8576},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8579,8580],{},"作用：结构体中的成员可以是另一个结构体",[14,8582,8583],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[18,8585,8587],{"className":198,"code":8586,"language":200,"meta":23,"style":23},"#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",[25,8588,8589,8595,8605,8611,8616,8624,8628,8632,8638,8644,8648,8653,8660,8664,8671,8675,8681,8686,8690,8698,8702,8707,8712,8717,8728,8740,8751,8764,8775,8786],{"__ignoreMap":23},[28,8590,8591,8593],{"class":30,"line":31},[28,8592,2027],{"class":207},[28,8594,2030],{"class":64},[28,8596,8597,8599,8601,8603],{"class":30,"line":42},[28,8598,2035],{"class":207},[28,8600,2038],{"class":207},[28,8602,2041],{"class":34},[28,8604,1370],{"class":211},[28,8606,8607,8609],{"class":30,"line":50},[28,8608,2027],{"class":207},[28,8610,7826],{"class":64},[28,8612,8613],{"class":30,"line":58},[28,8614,8615],{"class":269},"\u002F\u002F定义学生结构体\n",[28,8617,8618,8620,8622],{"class":30,"line":70},[28,8619,7836],{"class":207},[28,8621,7975],{"class":34},[28,8623,2751],{"class":211},[28,8625,8626],{"class":30,"line":78},[28,8627,1624],{"class":211},[28,8629,8630],{"class":30,"line":86},[28,8631,7862],{"class":211},[28,8633,8634,8636],{"class":30,"line":97},[28,8635,2062],{"class":207},[28,8637,7874],{"class":211},[28,8639,8640,8642],{"class":30,"line":108},[28,8641,2062],{"class":207},[28,8643,7886],{"class":211},[28,8645,8646],{"class":30,"line":1407},[28,8647,1643],{"class":211},[28,8649,8650],{"class":30,"line":1690},[28,8651,8652],{"class":269},"\u002F\u002F定义老师结构体\n",[28,8654,8655,8657],{"class":30,"line":1695},[28,8656,7836],{"class":207},[28,8658,8659],{"class":34}," Teacher\n",[28,8661,8662],{"class":30,"line":1701},[28,8663,1624],{"class":211},[28,8665,8666,8668],{"class":30,"line":1706},[28,8667,2062],{"class":207},[28,8669,8670],{"class":211}," id;\n",[28,8672,8673],{"class":30,"line":1720},[28,8674,7862],{"class":211},[28,8676,8677,8679],{"class":30,"line":1725},[28,8678,2062],{"class":207},[28,8680,7874],{"class":211},[28,8682,8683],{"class":30,"line":1731},[28,8684,8685],{"class":211},"    Student stu;\n",[28,8687,8688],{"class":30,"line":1752},[28,8689,1643],{"class":211},[28,8691,8692,8694,8696],{"class":30,"line":1757},[28,8693,215],{"class":207},[28,8695,2050],{"class":34},[28,8697,6055],{"class":211},[28,8699,8700],{"class":30,"line":1771},[28,8701,1624],{"class":211},[28,8703,8704],{"class":30,"line":1776},[28,8705,8706],{"class":269},"    \u002F\u002F结构体嵌套结构体\n",[28,8708,8709],{"class":30,"line":1805},[28,8710,8711],{"class":269},"    \u002F\u002F创建老师\n",[28,8713,8714],{"class":30,"line":1810},[28,8715,8716],{"class":211},"    Teacher t;\n",[28,8718,8719,8722,8724,8726],{"class":30,"line":1827},[28,8720,8721],{"class":211},"    t.id",[28,8723,257],{"class":207},[28,8725,521],{"class":38},[28,8727,1370],{"class":211},[28,8729,8730,8733,8735,8738],{"class":30,"line":1832},[28,8731,8732],{"class":211},"    t.name",[28,8734,257],{"class":207},[28,8736,8737],{"class":64},"\"老王\"",[28,8739,1370],{"class":211},[28,8741,8742,8745,8747,8749],{"class":30,"line":1837},[28,8743,8744],{"class":211},"    t.age",[28,8746,257],{"class":207},[28,8748,860],{"class":38},[28,8750,1370],{"class":211},[28,8752,8753,8756,8758,8761],{"class":30,"line":1842},[28,8754,8755],{"class":211},"    t.stu.name",[28,8757,257],{"class":207},[28,8759,8760],{"class":64},"\"小王\"",[28,8762,8763],{"class":211},"；\n",[28,8765,8766,8769,8771,8773],{"class":30,"line":1856},[28,8767,8768],{"class":211},"    t.stu.age",[28,8770,257],{"class":207},[28,8772,910],{"class":38},[28,8774,1370],{"class":211},[28,8776,8777,8780,8782,8784],{"class":30,"line":1861},[28,8778,8779],{"class":211},"    t.stu.score",[28,8781,257],{"class":207},[28,8783,554],{"class":38},[28,8785,1370],{"class":211},[28,8787,8788],{"class":30,"line":2654},[28,8789,1643],{"class":211},[149,8791,8793],{"id":8792},"_45结构体做函数参数","4.5结构体做函数参数",[14,8795,8796],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[18,8798,8800],{"className":198,"code":8799,"language":200,"meta":23,"style":23},"#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",[25,8801,8802,8808,8818,8824,8830,8834,8838,8844,8850,8854,8859,8864,8881,8885,8918,8922,8927,8946,8950,8981,8985,8993,8997,9006,9018,9030,9042,9055,9063,9076,9088,9096],{"__ignoreMap":23},[28,8803,8804,8806],{"class":30,"line":31},[28,8805,2027],{"class":207},[28,8807,2030],{"class":64},[28,8809,8810,8812,8814,8816],{"class":30,"line":42},[28,8811,2035],{"class":207},[28,8813,2038],{"class":207},[28,8815,2041],{"class":34},[28,8817,1370],{"class":211},[28,8819,8820,8822],{"class":30,"line":50},[28,8821,2027],{"class":207},[28,8823,7826],{"class":64},[28,8825,8826,8828],{"class":30,"line":58},[28,8827,7836],{"class":207},[28,8829,7839],{"class":34},[28,8831,8832],{"class":30,"line":70},[28,8833,1624],{"class":211},[28,8835,8836],{"class":30,"line":78},[28,8837,7862],{"class":211},[28,8839,8840,8842],{"class":30,"line":86},[28,8841,2062],{"class":207},[28,8843,7874],{"class":211},[28,8845,8846,8848],{"class":30,"line":97},[28,8847,2062],{"class":207},[28,8849,7886],{"class":211},[28,8851,8852],{"class":30,"line":108},[28,8853,4072],{"class":211},[28,8855,8856],{"class":30,"line":1407},[28,8857,8858],{"class":269},"\u002F\u002F打印学生信息的函数\n",[28,8860,8861],{"class":30,"line":1690},[28,8862,8863],{"class":269},"\u002F\u002F值传递\n",[28,8865,8866,8868,8871,8873,8875,8877,8879],{"class":30,"line":1695},[28,8867,5441],{"class":207},[28,8869,8870],{"class":34}," printStudent1",[28,8872,212],{"class":211},[28,8874,7836],{"class":207},[28,8876,7975],{"class":34},[28,8878,8505],{"class":5293},[28,8880,218],{"class":211},[28,8882,8883],{"class":30,"line":1701},[28,8884,1624],{"class":211},[28,8886,8887,8889,8891,8894,8896,8899,8901,8904,8906,8908,8910,8913,8915],{"class":30,"line":1706},[28,8888,6606],{"class":211},[28,8890,1253],{"class":207},[28,8892,8893],{"class":211}," s.name ",[28,8895,1253],{"class":207},[28,8897,8898],{"class":64}," \" \"",[28,8900,1522],{"class":207},[28,8902,8903],{"class":211}," s.age ",[28,8905,1253],{"class":207},[28,8907,8898],{"class":64},[28,8909,1522],{"class":207},[28,8911,8912],{"class":211}," s.score ",[28,8914,1253],{"class":207},[28,8916,8917],{"class":211}," endl;\n",[28,8919,8920],{"class":30,"line":1720},[28,8921,1643],{"class":211},[28,8923,8924],{"class":30,"line":1725},[28,8925,8926],{"class":269},"\u002F\u002F地址传递\n",[28,8928,8929,8931,8934,8936,8938,8940,8942,8944],{"class":30,"line":1731},[28,8930,5441],{"class":207},[28,8932,8933],{"class":34}," printStudent2",[28,8935,212],{"class":211},[28,8937,7836],{"class":207},[28,8939,7975],{"class":34},[28,8941,6595],{"class":207},[28,8943,905],{"class":5293},[28,8945,218],{"class":211},[28,8947,8948],{"class":30,"line":1752},[28,8949,1624],{"class":211},[28,8951,8952,8954,8956,8959,8961,8963,8965,8968,8970,8972,8974,8977,8979],{"class":30,"line":1757},[28,8953,6606],{"class":211},[28,8955,1253],{"class":207},[28,8957,8958],{"class":211}," s->name ",[28,8960,1253],{"class":207},[28,8962,8898],{"class":64},[28,8964,1522],{"class":207},[28,8966,8967],{"class":211}," s->age ",[28,8969,1253],{"class":207},[28,8971,8898],{"class":64},[28,8973,1522],{"class":207},[28,8975,8976],{"class":211}," s->score ",[28,8978,1253],{"class":207},[28,8980,8917],{"class":211},[28,8982,8983],{"class":30,"line":1771},[28,8984,1643],{"class":211},[28,8986,8987,8989,8991],{"class":30,"line":1776},[28,8988,215],{"class":207},[28,8990,2050],{"class":34},[28,8992,2053],{"class":211},[28,8994,8995],{"class":30,"line":1805},[28,8996,1624],{"class":211},[28,8998,8999,9001,9003],{"class":30,"line":1810},[28,9000,7972],{"class":207},[28,9002,7975],{"class":34},[28,9004,9005],{"class":211}," s;\n",[28,9007,9008,9011,9013,9016],{"class":30,"line":1827},[28,9009,9010],{"class":211},"    s.name ",[28,9012,257],{"class":207},[28,9014,9015],{"class":64}," \"张三\"",[28,9017,1370],{"class":211},[28,9019,9020,9023,9025,9028],{"class":30,"line":1832},[28,9021,9022],{"class":211},"    s.age ",[28,9024,257],{"class":207},[28,9026,9027],{"class":38}," 20",[28,9029,1370],{"class":211},[28,9031,9032,9035,9037,9040],{"class":30,"line":1837},[28,9033,9034],{"class":211},"    s.score ",[28,9036,257],{"class":207},[28,9038,9039],{"class":38}," 85",[28,9041,1370],{"class":211},[28,9043,9044,9046,9048,9051,9053],{"class":30,"line":1842},[28,9045,1629],{"class":211},[28,9047,1253],{"class":207},[28,9049,9050],{"class":64},"\"值传递:\"",[28,9052,1253],{"class":207},[28,9054,1275],{"class":211},[28,9056,9057,9060],{"class":30,"line":1856},[28,9058,9059],{"class":34},"    printStudent1",[28,9061,9062],{"class":211},"(s);\n",[28,9064,9065,9067,9069,9072,9074],{"class":30,"line":1861},[28,9066,1629],{"class":211},[28,9068,1253],{"class":207},[28,9070,9071],{"class":64},"\"地址传递:\"",[28,9073,1253],{"class":207},[28,9075,1275],{"class":211},[28,9077,9078,9081,9083,9085],{"class":30,"line":2654},[28,9079,9080],{"class":34},"    printStudent2",[28,9082,212],{"class":211},[28,9084,563],{"class":207},[28,9086,9087],{"class":211},"s); \n",[28,9089,9090,9092,9094],{"class":30,"line":2668},[28,9091,4167],{"class":207},[28,9093,4170],{"class":38},[28,9095,1370],{"class":211},[28,9097,9098],{"class":30,"line":2676},[28,9099,1643],{"class":211},[14,9101,9102],{},"注意：",[116,9104,9105,9108],{},[119,9106,9107],{},"1.先定义结构体，不要在函数中写结构体的定义",[119,9109,9110],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[149,9112,9114],{"id":9113},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9116,9117],{},"用const防止误操作",[18,9119,9121],{"className":198,"code":9120,"language":200,"meta":23,"style":23},"#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",[25,9122,9123,9129,9139,9145,9150,9154,9158,9164,9170,9174,9190,9194,9217,9221,9229,9233,9254,9261,9265],{"__ignoreMap":23},[28,9124,9125,9127],{"class":30,"line":31},[28,9126,2027],{"class":207},[28,9128,2030],{"class":64},[28,9130,9131,9133,9135,9137],{"class":30,"line":42},[28,9132,2035],{"class":207},[28,9134,2038],{"class":207},[28,9136,2041],{"class":34},[28,9138,1370],{"class":211},[28,9140,9141,9143],{"class":30,"line":50},[28,9142,2027],{"class":207},[28,9144,7826],{"class":64},[28,9146,9147],{"class":30,"line":58},[28,9148,9149],{"class":211},"sctuct Student\n",[28,9151,9152],{"class":30,"line":70},[28,9153,1624],{"class":211},[28,9155,9156],{"class":30,"line":78},[28,9157,7862],{"class":211},[28,9159,9160,9162],{"class":30,"line":86},[28,9161,2062],{"class":207},[28,9163,7874],{"class":211},[28,9165,9166,9168],{"class":30,"line":97},[28,9167,2062],{"class":207},[28,9169,7886],{"class":211},[28,9171,9172],{"class":30,"line":108},[28,9173,4072],{"class":211},[28,9175,9176,9178,9181,9183,9186,9188],{"class":30,"line":1407},[28,9177,5441],{"class":207},[28,9179,9180],{"class":34}," printStudents",[28,9182,212],{"class":211},[28,9184,9185],{"class":34},"student",[28,9187,8505],{"class":5293},[28,9189,218],{"class":211},[28,9191,9192],{"class":30,"line":1690},[28,9193,1624],{"class":211},[28,9195,9196,9198,9200,9203,9205,9208,9210,9213,9215],{"class":30,"line":1695},[28,9197,1629],{"class":211},[28,9199,1253],{"class":207},[28,9201,9202],{"class":211},"s.name",[28,9204,1253],{"class":207},[28,9206,9207],{"class":211},"s.age",[28,9209,1253],{"class":207},[28,9211,9212],{"class":211},"s.score",[28,9214,1253],{"class":207},[28,9216,1275],{"class":211},[28,9218,9219],{"class":30,"line":1701},[28,9220,1643],{"class":211},[28,9222,9223,9225,9227],{"class":30,"line":1706},[28,9224,215],{"class":207},[28,9226,2050],{"class":34},[28,9228,6055],{"class":211},[28,9230,9231],{"class":30,"line":1720},[28,9232,1624],{"class":211},[28,9234,9235,9238,9240,9242,9244,9246,9248,9250,9252],{"class":30,"line":1725},[28,9236,9237],{"class":211},"    Student s",[28,9239,257],{"class":207},[28,9241,1106],{"class":211},[28,9243,7993],{"class":64},[28,9245,588],{"class":211},[28,9247,860],{"class":38},[28,9249,588],{"class":211},[28,9251,860],{"class":38},[28,9253,4072],{"class":211},[28,9255,9256,9259],{"class":30,"line":1731},[28,9257,9258],{"class":34},"    printStudent",[28,9260,9062],{"class":211},[28,9262,9263],{"class":30,"line":1752},[28,9264,2477],{"emptyLinePlaceholder":134},[28,9266,9267],{"class":30,"line":1757},[28,9268,1643],{"class":211},[14,9270,9102],{},[116,9272,9273,9276,9279],{},[119,9274,9275],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[119,9277,9278],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[119,9280,9281],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[18,9283,9285],{"className":198,"code":9284,"language":200,"meta":23,"style":23},"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",[25,9286,9287,9306,9310,9315,9335],{"__ignoreMap":23},[28,9288,9289,9291,9293,9295,9297,9300,9302,9304],{"class":30,"line":31},[28,9290,5441],{"class":207},[28,9292,9180],{"class":34},[28,9294,212],{"class":211},[28,9296,6869],{"class":207},[28,9298,9299],{"class":34}," student",[28,9301,6595],{"class":207},[28,9303,905],{"class":5293},[28,9305,218],{"class":211},[28,9307,9308],{"class":30,"line":42},[28,9309,1624],{"class":211},[28,9311,9312],{"class":30,"line":50},[28,9313,9314],{"class":269},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[28,9316,9317,9319,9321,9323,9325,9327,9329,9331,9333],{"class":30,"line":58},[28,9318,1629],{"class":211},[28,9320,1253],{"class":207},[28,9322,9202],{"class":211},[28,9324,1253],{"class":207},[28,9326,9207],{"class":211},[28,9328,1253],{"class":207},[28,9330,9212],{"class":211},[28,9332,1253],{"class":207},[28,9334,1275],{"class":211},[28,9336,9337],{"class":30,"line":70},[28,9338,1643],{"class":211},[149,9340,9342],{"id":9341},"_47案例","4.7案例",[161,9344,9345],{},[119,9346,9347],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[18,9349,9351],{"className":198,"code":9350,"language":200,"meta":23,"style":23},"#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",[25,9352,9353,9359,9369,9375,9382,9386,9392,9396,9401,9407,9413,9417,9421,9427,9431,9436,9441,9454,9458,9463,9489,9493,9505,9532,9536,9548,9558,9562,9567,9596,9600,9612,9621,9648,9659,9669,9673,9677,9681,9686,9710,9714,9738,9742,9761,9787,9791,9816,9839,9863,9868,9873,9878,9887,9892,9898,9919,9925,9939,9945,9972,9981,9987,9995,10000],{"__ignoreMap":23},[28,9354,9355,9357],{"class":30,"line":31},[28,9356,2027],{"class":207},[28,9358,2030],{"class":64},[28,9360,9361,9363,9365,9367],{"class":30,"line":42},[28,9362,2035],{"class":207},[28,9364,2038],{"class":207},[28,9366,2041],{"class":34},[28,9368,1370],{"class":211},[28,9370,9371,9373],{"class":30,"line":50},[28,9372,2027],{"class":207},[28,9374,7826],{"class":64},[28,9376,9377,9379],{"class":30,"line":58},[28,9378,2027],{"class":207},[28,9380,9381],{"class":64},"\u003Cctime>\n",[28,9383,9384],{"class":30,"line":70},[28,9385,8615],{"class":269},[28,9387,9388,9390],{"class":30,"line":78},[28,9389,7836],{"class":207},[28,9391,7839],{"class":34},[28,9393,9394],{"class":30,"line":86},[28,9395,1624],{"class":211},[28,9397,9398],{"class":30,"line":97},[28,9399,9400],{"class":211},"    string sName;\n",[28,9402,9403,9405],{"class":30,"line":108},[28,9404,2062],{"class":207},[28,9406,7874],{"class":211},[28,9408,9409,9411],{"class":30,"line":1407},[28,9410,2062],{"class":207},[28,9412,7886],{"class":211},[28,9414,9415],{"class":30,"line":1690},[28,9416,4072],{"class":211},[28,9418,9419],{"class":30,"line":1695},[28,9420,8652],{"class":269},[28,9422,9423,9425],{"class":30,"line":1701},[28,9424,7836],{"class":207},[28,9426,8659],{"class":34},[28,9428,9429],{"class":30,"line":1706},[28,9430,1624],{"class":211},[28,9432,9433],{"class":30,"line":1720},[28,9434,9435],{"class":211},"    string tName;\n",[28,9437,9438],{"class":30,"line":1725},[28,9439,9440],{"class":269},"    \u002F\u002F学生数组\n",[28,9442,9443,9445,9447,9450,9452],{"class":30,"line":1731},[28,9444,7972],{"class":207},[28,9446,7975],{"class":34},[28,9448,9449],{"class":211}," sArray[",[28,9451,529],{"class":38},[28,9453,4767],{"class":211},[28,9455,9456],{"class":30,"line":1752},[28,9457,4072],{"class":211},[28,9459,9460],{"class":30,"line":1757},[28,9461,9462],{"class":269},"\u002F\u002F给老师和学生赋值的函数\n",[28,9464,9465,9467,9470,9472,9474,9477,9480,9483,9485,9487],{"class":30,"line":1771},[28,9466,5441],{"class":207},[28,9468,9469],{"class":34}," allocateSpace",[28,9471,212],{"class":211},[28,9473,7836],{"class":207},[28,9475,9476],{"class":34}," Teacher",[28,9478,9479],{"class":5293}," tArray",[28,9481,9482],{"class":211},"[],",[28,9484,215],{"class":207},[28,9486,7408],{"class":5293},[28,9488,218],{"class":211},[28,9490,9491],{"class":30,"line":1776},[28,9492,1624],{"class":211},[28,9494,9495,9498,9500,9503],{"class":30,"line":1805},[28,9496,9497],{"class":211},"    string nameSeed",[28,9499,257],{"class":207},[28,9501,9502],{"class":64},"\"ABCDE\"",[28,9504,1370],{"class":211},[28,9506,9507,9509,9511,9513,9516,9518,9520,9523,9525,9528,9530],{"class":30,"line":1810},[28,9508,3278],{"class":207},[28,9510,1736],{"class":211},[28,9512,215],{"class":207},[28,9514,9515],{"class":211}," i ",[28,9517,257],{"class":207},[28,9519,4170],{"class":38},[28,9521,9522],{"class":211},"; i ",[28,9524,1120],{"class":207},[28,9526,9527],{"class":211}," len; i",[28,9529,2369],{"class":207},[28,9531,218],{"class":211},[28,9533,9534],{"class":30,"line":1827},[28,9535,2107],{"class":211},[28,9537,9538,9541,9543,9546],{"class":30,"line":1832},[28,9539,9540],{"class":211},"        tArray[i].tName ",[28,9542,257],{"class":207},[28,9544,9545],{"class":64}," \"Teacher_\"",[28,9547,1370],{"class":211},[28,9549,9550,9552,9555],{"class":30,"line":1837},[28,9551,9540],{"class":211},[28,9553,9554],{"class":207},"+=",[28,9556,9557],{"class":211},"nameSeed[i];\n",[28,9559,9560],{"class":30,"line":1842},[28,9561,2477],{"emptyLinePlaceholder":134},[28,9563,9564],{"class":30,"line":1856},[28,9565,9566],{"class":269},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[28,9568,9569,9571,9573,9575,9578,9580,9582,9585,9587,9589,9592,9594],{"class":30,"line":1861},[28,9570,3480],{"class":207},[28,9572,1736],{"class":211},[28,9574,215],{"class":207},[28,9576,9577],{"class":211}," j ",[28,9579,257],{"class":207},[28,9581,4170],{"class":38},[28,9583,9584],{"class":211},"; j ",[28,9586,1120],{"class":207},[28,9588,2225],{"class":38},[28,9590,9591],{"class":211},"; j",[28,9593,2369],{"class":207},[28,9595,218],{"class":211},[28,9597,9598],{"class":30,"line":2654},[28,9599,2587],{"class":211},[28,9601,9602,9605,9607,9610],{"class":30,"line":2668},[28,9603,9604],{"class":211},"            tArray[i].sArray[j].sName ",[28,9606,257],{"class":207},[28,9608,9609],{"class":64}," \"Student_\"",[28,9611,1370],{"class":211},[28,9613,9614,9616,9618],{"class":30,"line":2676},[28,9615,9604],{"class":211},[28,9617,9554],{"class":207},[28,9619,9620],{"class":211}," nameSeed[j];\n",[28,9622,9623,9626,9629,9631,9633,9635,9637,9639,9641,9643,9645],{"class":30,"line":2681},[28,9624,9625],{"class":207},"            int",[28,9627,9628],{"class":211}," random",[28,9630,257],{"class":207},[28,9632,2501],{"class":34},[28,9634,2504],{"class":211},[28,9636,538],{"class":207},[28,9638,1117],{"class":38},[28,9640,691],{"class":207},[28,9642,611],{"class":38},[28,9644,266],{"class":211},[28,9646,9647],{"class":269},"\u002F\u002F40~99\n",[28,9649,9650,9653,9655,9657],{"class":30,"line":2687},[28,9651,9652],{"class":211},"            tArray[i].sArray[j].age ",[28,9654,257],{"class":207},[28,9656,9027],{"class":38},[28,9658,1370],{"class":211},[28,9660,9661,9664,9666],{"class":30,"line":2693},[28,9662,9663],{"class":211},"            tArray[i].sArray[j].score ",[28,9665,257],{"class":207},[28,9667,9668],{"class":211}," random;\n",[28,9670,9671],{"class":30,"line":2698},[28,9672,2606],{"class":211},[28,9674,9675],{"class":30,"line":8025},[28,9676,2264],{"class":211},[28,9678,9679],{"class":30,"line":8049},[28,9680,1643],{"class":211},[28,9682,9683],{"class":30,"line":8054},[28,9684,9685],{"class":269},"\u002F\u002F打印所有信息的函数\n",[28,9687,9688,9690,9693,9695,9697,9699,9701,9704,9706,9708],{"class":30,"line":8060},[28,9689,5441],{"class":207},[28,9691,9692],{"class":34}," printInfo",[28,9694,212],{"class":211},[28,9696,7836],{"class":207},[28,9698,9476],{"class":34},[28,9700,9479],{"class":5293},[28,9702,9703],{"class":211},"[], ",[28,9705,215],{"class":207},[28,9707,7408],{"class":5293},[28,9709,218],{"class":211},[28,9711,9712],{"class":30,"line":8087},[28,9713,1624],{"class":211},[28,9715,9716,9718,9720,9722,9724,9726,9728,9730,9732,9734,9736],{"class":30,"line":8092},[28,9717,3278],{"class":207},[28,9719,1736],{"class":211},[28,9721,215],{"class":207},[28,9723,9515],{"class":211},[28,9725,257],{"class":207},[28,9727,4170],{"class":38},[28,9729,9522],{"class":211},[28,9731,1120],{"class":207},[28,9733,9527],{"class":211},[28,9735,2369],{"class":207},[28,9737,218],{"class":211},[28,9739,9740],{"class":30,"line":8098},[28,9741,2107],{"class":211},[28,9743,9744,9747,9749,9752,9754,9757,9759],{"class":30,"line":8110},[28,9745,9746],{"class":211},"        cout ",[28,9748,1253],{"class":207},[28,9750,9751],{"class":64}," \"Teacher: \"",[28,9753,1522],{"class":207},[28,9755,9756],{"class":211}," tArray[i].tName ",[28,9758,1253],{"class":207},[28,9760,8917],{"class":211},[28,9762,9763,9765,9767,9769,9771,9773,9775,9777,9779,9781,9783,9785],{"class":30,"line":8122},[28,9764,3480],{"class":207},[28,9766,1736],{"class":211},[28,9768,215],{"class":207},[28,9770,9577],{"class":211},[28,9772,257],{"class":207},[28,9774,4170],{"class":38},[28,9776,9584],{"class":211},[28,9778,1120],{"class":207},[28,9780,2225],{"class":38},[28,9782,9591],{"class":211},[28,9784,2369],{"class":207},[28,9786,218],{"class":211},[28,9788,9789],{"class":30,"line":8134},[28,9790,2587],{"class":211},[28,9792,9794,9797,9799,9802,9804,9807,9809,9812,9814],{"class":30,"line":9793},47,[28,9795,9796],{"class":211},"            cout ",[28,9798,1253],{"class":207},[28,9800,9801],{"class":64}," \"",[28,9803,1310],{"class":38},[28,9805,9806],{"class":64},"Student: \"",[28,9808,1522],{"class":207},[28,9810,9811],{"class":211}," tArray[i].sArray[j].sName",[28,9813,1253],{"class":207},[28,9815,1275],{"class":211},[28,9817,9819,9821,9823,9825,9827,9830,9832,9835,9837],{"class":30,"line":9818},48,[28,9820,9796],{"class":211},[28,9822,1253],{"class":207},[28,9824,9801],{"class":64},[28,9826,1310],{"class":38},[28,9828,9829],{"class":64},"Age: \"",[28,9831,1522],{"class":207},[28,9833,9834],{"class":211}," tArray[i].sArray[j].age ",[28,9836,1253],{"class":207},[28,9838,8917],{"class":211},[28,9840,9842,9844,9846,9848,9850,9853,9855,9858,9860],{"class":30,"line":9841},49,[28,9843,9796],{"class":211},[28,9845,1253],{"class":207},[28,9847,9801],{"class":64},[28,9849,1310],{"class":38},[28,9851,9852],{"class":64},"Score: \"",[28,9854,1522],{"class":207},[28,9856,9857],{"class":211}," tArray[i].sArray[j].score ",[28,9859,1253],{"class":207},[28,9861,9862],{"class":211}," endl;   \n",[28,9864,9866],{"class":30,"line":9865},50,[28,9867,2606],{"class":211},[28,9869,9871],{"class":30,"line":9870},51,[28,9872,2264],{"class":211},[28,9874,9876],{"class":30,"line":9875},52,[28,9877,1643],{"class":211},[28,9879,9881,9883,9885],{"class":30,"line":9880},53,[28,9882,215],{"class":207},[28,9884,2050],{"class":34},[28,9886,2053],{"class":211},[28,9888,9890],{"class":30,"line":9889},54,[28,9891,1624],{"class":211},[28,9893,9895],{"class":30,"line":9894},55,[28,9896,9897],{"class":269},"    \u002F\u002F随机数种子\n",[28,9899,9901,9903,9905,9907,9909,9911,9913,9915,9917],{"class":30,"line":9900},56,[28,9902,2450],{"class":34},[28,9904,2453],{"class":211},[28,9906,2456],{"class":207},[28,9908,2459],{"class":207},[28,9910,639],{"class":211},[28,9912,2464],{"class":34},[28,9914,212],{"class":211},[28,9916,2469],{"class":38},[28,9918,2472],{"class":211},[28,9920,9922],{"class":30,"line":9921},57,[28,9923,9924],{"class":269},"    \u002F\u002F1.创建3名老师的数组\n",[28,9926,9928,9930,9932,9935,9937],{"class":30,"line":9927},58,[28,9929,7972],{"class":207},[28,9931,9476],{"class":34},[28,9933,9934],{"class":211}," tArray[",[28,9936,282],{"class":38},[28,9938,4767],{"class":211},[28,9940,9942],{"class":30,"line":9941},59,[28,9943,9944],{"class":269},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[28,9946,9948,9950,9953,9955,9958,9961,9963,9965,9968,9970],{"class":30,"line":9947},60,[28,9949,2062],{"class":207},[28,9951,9952],{"class":211}," len ",[28,9954,257],{"class":207},[28,9956,9957],{"class":207}," sizeof",[28,9959,9960],{"class":211},"(tArray) ",[28,9962,794],{"class":207},[28,9964,9957],{"class":207},[28,9966,9967],{"class":211},"(tArray[",[28,9969,401],{"class":38},[28,9971,3933],{"class":211},[28,9973,9975,9978],{"class":30,"line":9974},61,[28,9976,9977],{"class":34},"    allocateSpace",[28,9979,9980],{"class":211},"(tArray, len);\n",[28,9982,9984],{"class":30,"line":9983},62,[28,9985,9986],{"class":269},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[28,9988,9990,9993],{"class":30,"line":9989},63,[28,9991,9992],{"class":34},"    printInfo",[28,9994,9980],{"class":211},[28,9996,9998],{"class":30,"line":9997},64,[28,9999,2477],{"emptyLinePlaceholder":134},[28,10001,10003],{"class":30,"line":10002},65,[28,10004,1643],{"class":211},[161,10006,10007],{"start":42},[119,10008,10009,10012],{},[359,10010,10011],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,10014,10015],{},"五名英雄信息如下：",[18,10017,10021],{"className":10018,"code":10019,"language":10020,"meta":23,"style":23},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[25,10022,10023,10041,10058,10075,10092],{"__ignoreMap":23},[28,10024,10025,10027,10030,10032,10034,10036,10039],{"class":30,"line":31},[28,10026,4994],{"class":211},[28,10028,10029],{"class":64},"\"刘备\"",[28,10031,588],{"class":211},[28,10033,985],{"class":38},[28,10035,588],{"class":211},[28,10037,10038],{"class":64},"\"男\"",[28,10040,5007],{"class":211},[28,10042,10043,10045,10048,10050,10052,10054,10056],{"class":30,"line":42},[28,10044,4994],{"class":211},[28,10046,10047],{"class":64},"\"关羽\"",[28,10049,588],{"class":211},[28,10051,960],{"class":38},[28,10053,588],{"class":211},[28,10055,10038],{"class":64},[28,10057,5007],{"class":211},[28,10059,10060,10062,10065,10067,10069,10071,10073],{"class":30,"line":50},[28,10061,4994],{"class":211},[28,10063,10064],{"class":64},"\"张飞\"",[28,10066,588],{"class":211},[28,10068,910],{"class":38},[28,10070,588],{"class":211},[28,10072,10038],{"class":64},[28,10074,5007],{"class":211},[28,10076,10077,10079,10082,10084,10086,10088,10090],{"class":30,"line":58},[28,10078,4994],{"class":211},[28,10080,10081],{"class":64},"\"赵云\"",[28,10083,588],{"class":211},[28,10085,935],{"class":38},[28,10087,588],{"class":211},[28,10089,10038],{"class":64},[28,10091,5007],{"class":211},[28,10093,10094,10096,10099,10101,10103,10105,10108],{"class":30,"line":70},[28,10095,4994],{"class":211},[28,10097,10098],{"class":64},"\"貂蝉\"",[28,10100,588],{"class":211},[28,10102,885],{"class":38},[28,10104,588],{"class":211},[28,10106,10107],{"class":64},"\"女\"",[28,10109,5007],{"class":211},[14,10111,10112],{},"代码：",[18,10114,10116],{"className":198,"code":10115,"language":200,"meta":23,"style":23},"#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",[25,10117,10118,10124,10134,10140,10147,10151,10155,10161,10166,10170,10175,10198,10202,10227,10231,10264,10269,10298,10303,10318,10344,10364,10369,10374,10378,10382,10387,10409,10413,10437,10441,10503,10507,10511,10519,10523,10528,10539,10543,10559,10575,10591,10607,10623,10627,10647,10669,10674,10687,10694,10699,10705,10710,10723,10729],{"__ignoreMap":23},[28,10119,10120,10122],{"class":30,"line":31},[28,10121,2027],{"class":207},[28,10123,2030],{"class":64},[28,10125,10126,10128,10130,10132],{"class":30,"line":42},[28,10127,2035],{"class":207},[28,10129,2038],{"class":207},[28,10131,2041],{"class":34},[28,10133,1370],{"class":211},[28,10135,10136,10138],{"class":30,"line":50},[28,10137,2027],{"class":207},[28,10139,7826],{"class":64},[28,10141,10142,10144],{"class":30,"line":58},[28,10143,7836],{"class":207},[28,10145,10146],{"class":34}," Sanguo\n",[28,10148,10149],{"class":30,"line":70},[28,10150,1624],{"class":211},[28,10152,10153],{"class":30,"line":78},[28,10154,7862],{"class":211},[28,10156,10157,10159],{"class":30,"line":86},[28,10158,2062],{"class":207},[28,10160,7874],{"class":211},[28,10162,10163],{"class":30,"line":97},[28,10164,10165],{"class":211},"    string gender;\n",[28,10167,10168],{"class":30,"line":108},[28,10169,4072],{"class":211},[28,10171,10172],{"class":30,"line":1407},[28,10173,10174],{"class":269},"\u002F\u002F定义排序函数\n",[28,10176,10177,10179,10181,10183,10186,10188,10190,10192,10194,10196],{"class":30,"line":1690},[28,10178,5441],{"class":207},[28,10180,7393],{"class":34},[28,10182,212],{"class":211},[28,10184,10185],{"class":34},"Sanguo",[28,10187,6595],{"class":207},[28,10189,905],{"class":5293},[28,10191,588],{"class":211},[28,10193,215],{"class":207},[28,10195,7408],{"class":5293},[28,10197,218],{"class":211},[28,10199,10200],{"class":30,"line":1695},[28,10201,1624],{"class":211},[28,10203,10204,10206,10208,10210,10212,10214,10216,10218,10220,10223,10225],{"class":30,"line":1701},[28,10205,3278],{"class":207},[28,10207,212],{"class":211},[28,10209,215],{"class":207},[28,10211,3109],{"class":211},[28,10213,257],{"class":207},[28,10215,401],{"class":38},[28,10217,3116],{"class":211},[28,10219,1120],{"class":207},[28,10221,10222],{"class":211},"len;i",[28,10224,2369],{"class":207},[28,10226,218],{"class":211},[28,10228,10229],{"class":30,"line":1706},[28,10230,2107],{"class":211},[28,10232,10233,10236,10238,10240,10242,10244,10246,10248,10250,10252,10254,10256,10258,10260,10262],{"class":30,"line":1720},[28,10234,10235],{"class":207},"     for",[28,10237,1736],{"class":211},[28,10239,215],{"class":207},[28,10241,3487],{"class":211},[28,10243,257],{"class":207},[28,10245,401],{"class":38},[28,10247,3494],{"class":211},[28,10249,1120],{"class":207},[28,10251,7435],{"class":211},[28,10253,742],{"class":207},[28,10255,427],{"class":38},[28,10257,742],{"class":207},[28,10259,3627],{"class":211},[28,10261,2369],{"class":207},[28,10263,218],{"class":211},[28,10265,10266],{"class":30,"line":1725},[28,10267,10268],{"class":211},"     {\n",[28,10270,10271,10274,10277,10279,10282,10284,10287,10289,10291,10293,10295],{"class":30,"line":1731},[28,10272,10273],{"class":207},"         if",[28,10275,10276],{"class":211}," ((s",[28,10278,691],{"class":207},[28,10280,10281],{"class":211},"j)->age ",[28,10283,1170],{"class":207},[28,10285,10286],{"class":211}," (s",[28,10288,691],{"class":207},[28,10290,677],{"class":211},[28,10292,691],{"class":207},[28,10294,427],{"class":38},[28,10296,10297],{"class":211},")->age)\n",[28,10299,10300],{"class":30,"line":1752},[28,10301,10302],{"class":211},"         {\n",[28,10304,10305,10308,10310,10313,10315],{"class":30,"line":1757},[28,10306,10307],{"class":211},"             Sanguo temp",[28,10309,7230],{"class":207},[28,10311,10312],{"class":211},"(s",[28,10314,691],{"class":207},[28,10316,10317],{"class":211},"j);\n",[28,10319,10320,10323,10325,10327,10330,10332,10334,10336,10338,10340,10342],{"class":30,"line":1771},[28,10321,10322],{"class":207},"             *",[28,10324,10312],{"class":211},[28,10326,691],{"class":207},[28,10328,10329],{"class":211},"j)",[28,10331,7230],{"class":207},[28,10333,10312],{"class":211},[28,10335,691],{"class":207},[28,10337,677],{"class":211},[28,10339,691],{"class":207},[28,10341,427],{"class":38},[28,10343,2796],{"class":211},[28,10345,10346,10348,10350,10352,10354,10356,10358,10360,10362],{"class":30,"line":1776},[28,10347,10322],{"class":207},[28,10349,10312],{"class":211},[28,10351,691],{"class":207},[28,10353,677],{"class":211},[28,10355,691],{"class":207},[28,10357,427],{"class":38},[28,10359,639],{"class":211},[28,10361,257],{"class":207},[28,10363,4357],{"class":211},[28,10365,10366],{"class":30,"line":1805},[28,10367,10368],{"class":211},"         }\n",[28,10370,10371],{"class":30,"line":1810},[28,10372,10373],{"class":211},"     }\n",[28,10375,10376],{"class":30,"line":1827},[28,10377,2264],{"class":211},[28,10379,10380],{"class":30,"line":1832},[28,10381,1643],{"class":211},[28,10383,10384],{"class":30,"line":1837},[28,10385,10386],{"class":269},"\u002F\u002F定义打印函数\n",[28,10388,10389,10391,10393,10395,10397,10399,10401,10403,10405,10407],{"class":30,"line":1842},[28,10390,5441],{"class":207},[28,10392,9692],{"class":34},[28,10394,212],{"class":211},[28,10396,10185],{"class":34},[28,10398,6595],{"class":207},[28,10400,905],{"class":5293},[28,10402,588],{"class":211},[28,10404,215],{"class":207},[28,10406,7408],{"class":5293},[28,10408,218],{"class":211},[28,10410,10411],{"class":30,"line":1856},[28,10412,1624],{"class":211},[28,10414,10415,10417,10419,10421,10423,10425,10427,10429,10431,10433,10435],{"class":30,"line":1861},[28,10416,3278],{"class":207},[28,10418,1736],{"class":211},[28,10420,215],{"class":207},[28,10422,3109],{"class":211},[28,10424,257],{"class":207},[28,10426,401],{"class":38},[28,10428,3116],{"class":211},[28,10430,1120],{"class":207},[28,10432,10222],{"class":211},[28,10434,2369],{"class":207},[28,10436,218],{"class":211},[28,10438,10439],{"class":30,"line":2654},[28,10440,2107],{"class":211},[28,10442,10443,10445,10447,10449,10451,10454,10456,10458,10460,10463,10465,10467,10469,10472,10474,10476,10478,10481,10483,10485,10487,10490,10492,10494,10496,10499,10501],{"class":30,"line":2668},[28,10444,3528],{"class":211},[28,10446,1253],{"class":207},[28,10448,461],{"class":64},[28,10450,1310],{"class":38},[28,10452,10453],{"class":64},"姓名：\"",[28,10455,1253],{"class":207},[28,10457,10312],{"class":211},[28,10459,691],{"class":207},[28,10461,10462],{"class":211},"i)->name",[28,10464,1253],{"class":207},[28,10466,461],{"class":64},[28,10468,1310],{"class":38},[28,10470,10471],{"class":64},"年龄：\"",[28,10473,1253],{"class":207},[28,10475,10312],{"class":211},[28,10477,691],{"class":207},[28,10479,10480],{"class":211},"i)->age",[28,10482,1253],{"class":207},[28,10484,461],{"class":64},[28,10486,1310],{"class":38},[28,10488,10489],{"class":64},"性别：\"",[28,10491,1253],{"class":207},[28,10493,10312],{"class":211},[28,10495,691],{"class":207},[28,10497,10498],{"class":211},"i)->gender",[28,10500,1253],{"class":207},[28,10502,1275],{"class":211},[28,10504,10505],{"class":30,"line":2676},[28,10506,2264],{"class":211},[28,10508,10509],{"class":30,"line":2681},[28,10510,1643],{"class":211},[28,10512,10513,10515,10517],{"class":30,"line":2687},[28,10514,215],{"class":207},[28,10516,2050],{"class":34},[28,10518,2053],{"class":211},[28,10520,10521],{"class":30,"line":2693},[28,10522,1624],{"class":211},[28,10524,10525],{"class":30,"line":2698},[28,10526,10527],{"class":269},"    \u002F\u002F定义结构体变量\n",[28,10529,10530,10533,10535,10537],{"class":30,"line":8025},[28,10531,10532],{"class":211},"    Sanguo s1[",[28,10534,529],{"class":38},[28,10536,1150],{"class":211},[28,10538,4985],{"class":207},[28,10540,10541],{"class":30,"line":8049},[28,10542,2107],{"class":211},[28,10544,10545,10547,10549,10551,10553,10555,10557],{"class":30,"line":8054},[28,10546,4994],{"class":211},[28,10548,10029],{"class":64},[28,10550,588],{"class":211},[28,10552,985],{"class":38},[28,10554,588],{"class":211},[28,10556,10038],{"class":64},[28,10558,5007],{"class":211},[28,10560,10561,10563,10565,10567,10569,10571,10573],{"class":30,"line":8060},[28,10562,4994],{"class":211},[28,10564,10047],{"class":64},[28,10566,588],{"class":211},[28,10568,960],{"class":38},[28,10570,588],{"class":211},[28,10572,10038],{"class":64},[28,10574,5007],{"class":211},[28,10576,10577,10579,10581,10583,10585,10587,10589],{"class":30,"line":8087},[28,10578,4994],{"class":211},[28,10580,10064],{"class":64},[28,10582,588],{"class":211},[28,10584,910],{"class":38},[28,10586,588],{"class":211},[28,10588,10038],{"class":64},[28,10590,5007],{"class":211},[28,10592,10593,10595,10597,10599,10601,10603,10605],{"class":30,"line":8092},[28,10594,4994],{"class":211},[28,10596,10081],{"class":64},[28,10598,588],{"class":211},[28,10600,935],{"class":38},[28,10602,588],{"class":211},[28,10604,10038],{"class":64},[28,10606,5007],{"class":211},[28,10608,10609,10611,10613,10615,10617,10619,10621],{"class":30,"line":8098},[28,10610,4994],{"class":211},[28,10612,10098],{"class":64},[28,10614,588],{"class":211},[28,10616,885],{"class":38},[28,10618,588],{"class":211},[28,10620,10107],{"class":64},[28,10622,5007],{"class":211},[28,10624,10625],{"class":30,"line":8110},[28,10626,5028],{"class":211},[28,10628,10629,10631,10633,10635,10638,10640,10643,10645],{"class":30,"line":8122},[28,10630,2062],{"class":207},[28,10632,7408],{"class":211},[28,10634,4280],{"class":207},[28,10636,10637],{"class":211},"(s1)",[28,10639,4286],{"class":207},[28,10641,10642],{"class":211},"(s1[",[28,10644,401],{"class":38},[28,10646,3933],{"class":211},[28,10648,10649,10652,10654,10657,10659,10662,10665,10667],{"class":30,"line":8134},[28,10650,10651],{"class":211},"    Sanguo ",[28,10653,665],{"class":207},[28,10655,10656],{"class":211},"s ",[28,10658,257],{"class":207},[28,10660,10661],{"class":207}," &",[28,10663,10664],{"class":211},"s1[",[28,10666,401],{"class":38},[28,10668,4767],{"class":211},[28,10670,10671],{"class":30,"line":9793},[28,10672,10673],{"class":269},"    \u002F\u002F排序前：\n",[28,10675,10676,10678,10680,10683,10685],{"class":30,"line":9818},[28,10677,6606],{"class":211},[28,10679,1253],{"class":207},[28,10681,10682],{"class":64}," \"排序前：\"",[28,10684,1522],{"class":207},[28,10686,8917],{"class":211},[28,10688,10689,10691],{"class":30,"line":9841},[28,10690,9992],{"class":34},[28,10692,10693],{"class":211},"(s,len);\n",[28,10695,10696],{"class":30,"line":9865},[28,10697,10698],{"class":269},"    \u002F\u002F调用排序函数\n",[28,10700,10701,10703],{"class":30,"line":9870},[28,10702,7675],{"class":34},[28,10704,10693],{"class":211},[28,10706,10707],{"class":30,"line":9875},[28,10708,10709],{"class":269},"    \u002F\u002F排序后\n",[28,10711,10712,10714,10716,10719,10721],{"class":30,"line":9880},[28,10713,6606],{"class":211},[28,10715,1253],{"class":207},[28,10717,10718],{"class":64}," \"排序后：\"",[28,10720,1522],{"class":207},[28,10722,8917],{"class":211},[28,10724,10725,10727],{"class":30,"line":9889},[28,10726,9992],{"class":34},[28,10728,10693],{"class":211},[28,10730,10731],{"class":30,"line":9894},[28,10732,1643],{"class":211},[14,10734,10735,10736,10738],{},"注意：使用指针时直接用传首地址**&s",[28,10737,401],{},"**",[126,10740,10741],{},"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":23,"searchDepth":42,"depth":42,"links":10743},[10744,10745,10746,10747,10748,10749,10750],{"id":7780,"depth":42,"text":7781},{"id":8142,"depth":42,"text":8143},{"id":8411,"depth":42,"text":8412},{"id":8576,"depth":42,"text":8577},{"id":8792,"depth":42,"text":8793},{"id":9113,"depth":42,"text":9114},{"id":9341,"depth":42,"text":9342},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7769,"description":7777},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10757,"title":10758,"body":10759,"description":23,"extension":132,"meta":12102,"navigation":134,"path":12103,"seo":12104,"stem":12105,"__hash__":12106},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10760,"toc":12096},[10761,10764,10768,10774,10788,10793,10796,10800,10807,10813,10816,10823,10829,10834,10837,10840,10843,11407,11410,11424,11428,11433,11449,11589,11592,11598,11601,11606,11614,11722,11725,11730,11733,11738,11741,11747,11750,12093],[10,10762,10758],{"id":10763},"_5程序内存模型",[149,10765,10767],{"id":10766},"_51内存分区模型","5.1内存分区模型",[14,10769,10770,10771],{},"C++程序在执行时，将内存大方向划分为",[359,10772,10773],{},"4个区域",[116,10775,10776,10779,10782,10785],{},[119,10777,10778],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[119,10780,10781],{},"全局区：存放全局变量和静态变量以及常量",[119,10783,10784],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[119,10786,10787],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10789,10790],{},[359,10791,10792],{},"内存四区意义：",[14,10794,10795],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[177,10797,10799],{"id":10798},"_511程序运行前","5.1.1程序运行前",[14,10801,10802,10803,10806],{},"​\t在程序编译后，生成了exe可执行程序，",[359,10804,10805],{},"未执行该程序前","分为两个区域",[14,10808,10809,10810],{},"​\t",[359,10811,10812],{},"代码区：",[14,10814,10815],{},"​\t\t存放 CPU 执行的机器指令",[14,10817,10818,10819,10822],{},"​\t\t代码区是",[359,10820,10821],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10824,10818,10825,10828],{},[359,10826,10827],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10830,10809,10831],{},[359,10832,10833],{},"全局区：",[14,10835,10836],{},"​\t\t全局变量和静态变量存放在此.",[14,10838,10839],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10841,10842],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[18,10844,10846],{"className":198,"code":10845,"language":200,"meta":23,"style":23},"\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",[25,10847,10848,10853,10866,10879,10883,10888,10903,10918,10922,10931,10935,10940,10953,10966,10970,10975,11001,11027,11031,11058,11084,11088,11093,11109,11124,11128,11154,11180,11184,11209,11234,11238,11264,11290,11294,11310,11325,11351,11377,11381,11391,11395,11403],{"__ignoreMap":23},[28,10849,10850],{"class":30,"line":31},[28,10851,10852],{"class":269},"\u002F\u002F全局变量\n",[28,10854,10855,10857,10860,10862,10864],{"class":30,"line":42},[28,10856,215],{"class":207},[28,10858,10859],{"class":211}," g_a ",[28,10861,257],{"class":207},[28,10863,2115],{"class":38},[28,10865,1370],{"class":211},[28,10867,10868,10870,10873,10875,10877],{"class":30,"line":50},[28,10869,215],{"class":207},[28,10871,10872],{"class":211}," g_b ",[28,10874,257],{"class":207},[28,10876,2115],{"class":38},[28,10878,1370],{"class":211},[28,10880,10881],{"class":30,"line":58},[28,10882,2477],{"emptyLinePlaceholder":134},[28,10884,10885],{"class":30,"line":70},[28,10886,10887],{"class":269},"\u002F\u002F全局常量\n",[28,10889,10890,10892,10894,10897,10899,10901],{"class":30,"line":78},[28,10891,6869],{"class":207},[28,10893,2459],{"class":207},[28,10895,10896],{"class":211}," c_g_a ",[28,10898,257],{"class":207},[28,10900,2115],{"class":38},[28,10902,1370],{"class":211},[28,10904,10905,10907,10909,10912,10914,10916],{"class":30,"line":86},[28,10906,6869],{"class":207},[28,10908,2459],{"class":207},[28,10910,10911],{"class":211}," c_g_b ",[28,10913,257],{"class":207},[28,10915,2115],{"class":38},[28,10917,1370],{"class":211},[28,10919,10920],{"class":30,"line":97},[28,10921,2477],{"emptyLinePlaceholder":134},[28,10923,10924,10926,10928],{"class":30,"line":108},[28,10925,215],{"class":207},[28,10927,2050],{"class":34},[28,10929,10930],{"class":211},"() {\n",[28,10932,10933],{"class":30,"line":1407},[28,10934,2477],{"emptyLinePlaceholder":134},[28,10936,10937],{"class":30,"line":1690},[28,10938,10939],{"class":269},"    \u002F\u002F局部变量\n",[28,10941,10942,10944,10947,10949,10951],{"class":30,"line":1695},[28,10943,2062],{"class":207},[28,10945,10946],{"class":211}," a ",[28,10948,257],{"class":207},[28,10950,2115],{"class":38},[28,10952,1370],{"class":211},[28,10954,10955,10957,10960,10962,10964],{"class":30,"line":1701},[28,10956,2062],{"class":207},[28,10958,10959],{"class":211}," b ",[28,10961,257],{"class":207},[28,10963,2115],{"class":38},[28,10965,1370],{"class":211},[28,10967,10968],{"class":30,"line":1706},[28,10969,2477],{"emptyLinePlaceholder":134},[28,10971,10972],{"class":30,"line":1720},[28,10973,10974],{"class":269},"    \u002F\u002F打印地址\n",[28,10976,10977,10979,10981,10984,10986,10988,10990,10992,10994,10997,10999],{"class":30,"line":1725},[28,10978,6606],{"class":211},[28,10980,1253],{"class":207},[28,10982,10983],{"class":64}," \"局部变量a地址为： \"",[28,10985,1522],{"class":207},[28,10987,1736],{"class":211},[28,10989,215],{"class":207},[28,10991,639],{"class":211},[28,10993,563],{"class":207},[28,10995,10996],{"class":211},"a ",[28,10998,1253],{"class":207},[28,11000,8917],{"class":211},[28,11002,11003,11005,11007,11010,11012,11014,11016,11018,11020,11023,11025],{"class":30,"line":1731},[28,11004,6606],{"class":211},[28,11006,1253],{"class":207},[28,11008,11009],{"class":64}," \"局部变量b地址为： \"",[28,11011,1522],{"class":207},[28,11013,1736],{"class":211},[28,11015,215],{"class":207},[28,11017,639],{"class":211},[28,11019,563],{"class":207},[28,11021,11022],{"class":211},"b ",[28,11024,1253],{"class":207},[28,11026,8917],{"class":211},[28,11028,11029],{"class":30,"line":1752},[28,11030,2477],{"emptyLinePlaceholder":134},[28,11032,11033,11035,11037,11040,11042,11045,11047,11049,11051,11054,11056],{"class":30,"line":1757},[28,11034,6606],{"class":211},[28,11036,1253],{"class":207},[28,11038,11039],{"class":64}," \"全局变量g_a地址为： \"",[28,11041,1522],{"class":207},[28,11043,11044],{"class":211},"  (",[28,11046,215],{"class":207},[28,11048,639],{"class":211},[28,11050,563],{"class":207},[28,11052,11053],{"class":211},"g_a ",[28,11055,1253],{"class":207},[28,11057,8917],{"class":211},[28,11059,11060,11062,11064,11067,11069,11071,11073,11075,11077,11080,11082],{"class":30,"line":1771},[28,11061,6606],{"class":211},[28,11063,1253],{"class":207},[28,11065,11066],{"class":64}," \"全局变量g_b地址为： \"",[28,11068,1522],{"class":207},[28,11070,11044],{"class":211},[28,11072,215],{"class":207},[28,11074,639],{"class":211},[28,11076,563],{"class":207},[28,11078,11079],{"class":211},"g_b ",[28,11081,1253],{"class":207},[28,11083,8917],{"class":211},[28,11085,11086],{"class":30,"line":1776},[28,11087,2477],{"emptyLinePlaceholder":134},[28,11089,11090],{"class":30,"line":1805},[28,11091,11092],{"class":269},"    \u002F\u002F静态变量\n",[28,11094,11095,11098,11100,11103,11105,11107],{"class":30,"line":1810},[28,11096,11097],{"class":207},"    static",[28,11099,2459],{"class":207},[28,11101,11102],{"class":211}," s_a ",[28,11104,257],{"class":207},[28,11106,2115],{"class":38},[28,11108,1370],{"class":211},[28,11110,11111,11113,11115,11118,11120,11122],{"class":30,"line":1827},[28,11112,11097],{"class":207},[28,11114,2459],{"class":207},[28,11116,11117],{"class":211}," s_b ",[28,11119,257],{"class":207},[28,11121,2115],{"class":38},[28,11123,1370],{"class":211},[28,11125,11126],{"class":30,"line":1832},[28,11127,2477],{"emptyLinePlaceholder":134},[28,11129,11130,11132,11134,11137,11139,11141,11143,11145,11147,11150,11152],{"class":30,"line":1837},[28,11131,6606],{"class":211},[28,11133,1253],{"class":207},[28,11135,11136],{"class":64}," \"静态变量s_a地址为： \"",[28,11138,1522],{"class":207},[28,11140,1736],{"class":211},[28,11142,215],{"class":207},[28,11144,639],{"class":211},[28,11146,563],{"class":207},[28,11148,11149],{"class":211},"s_a ",[28,11151,1253],{"class":207},[28,11153,8917],{"class":211},[28,11155,11156,11158,11160,11163,11165,11167,11169,11171,11173,11176,11178],{"class":30,"line":1842},[28,11157,6606],{"class":211},[28,11159,1253],{"class":207},[28,11161,11162],{"class":64}," \"静态变量s_b地址为： \"",[28,11164,1522],{"class":207},[28,11166,1736],{"class":211},[28,11168,215],{"class":207},[28,11170,639],{"class":211},[28,11172,563],{"class":207},[28,11174,11175],{"class":211},"s_b ",[28,11177,1253],{"class":207},[28,11179,8917],{"class":211},[28,11181,11182],{"class":30,"line":1856},[28,11183,2477],{"emptyLinePlaceholder":134},[28,11185,11186,11188,11190,11193,11195,11197,11199,11201,11203,11205,11207],{"class":30,"line":1861},[28,11187,6606],{"class":211},[28,11189,1253],{"class":207},[28,11191,11192],{"class":64}," \"字符串常量地址为： \"",[28,11194,1522],{"class":207},[28,11196,1736],{"class":211},[28,11198,215],{"class":207},[28,11200,639],{"class":211},[28,11202,563],{"class":207},[28,11204,1270],{"class":64},[28,11206,1522],{"class":207},[28,11208,8917],{"class":211},[28,11210,11211,11213,11215,11217,11219,11221,11223,11225,11227,11230,11232],{"class":30,"line":2654},[28,11212,6606],{"class":211},[28,11214,1253],{"class":207},[28,11216,11192],{"class":64},[28,11218,1522],{"class":207},[28,11220,1736],{"class":211},[28,11222,215],{"class":207},[28,11224,639],{"class":211},[28,11226,563],{"class":207},[28,11228,11229],{"class":64},"\"hello world1\"",[28,11231,1522],{"class":207},[28,11233,8917],{"class":211},[28,11235,11236],{"class":30,"line":2668},[28,11237,2477],{"emptyLinePlaceholder":134},[28,11239,11240,11242,11244,11247,11249,11251,11253,11255,11257,11260,11262],{"class":30,"line":2676},[28,11241,6606],{"class":211},[28,11243,1253],{"class":207},[28,11245,11246],{"class":64}," \"全局常量c_g_a地址为： \"",[28,11248,1522],{"class":207},[28,11250,1736],{"class":211},[28,11252,215],{"class":207},[28,11254,639],{"class":211},[28,11256,563],{"class":207},[28,11258,11259],{"class":211},"c_g_a ",[28,11261,1253],{"class":207},[28,11263,8917],{"class":211},[28,11265,11266,11268,11270,11273,11275,11277,11279,11281,11283,11286,11288],{"class":30,"line":2681},[28,11267,6606],{"class":211},[28,11269,1253],{"class":207},[28,11271,11272],{"class":64}," \"全局常量c_g_b地址为： \"",[28,11274,1522],{"class":207},[28,11276,1736],{"class":211},[28,11278,215],{"class":207},[28,11280,639],{"class":211},[28,11282,563],{"class":207},[28,11284,11285],{"class":211},"c_g_b ",[28,11287,1253],{"class":207},[28,11289,8917],{"class":211},[28,11291,11292],{"class":30,"line":2687},[28,11293,2477],{"emptyLinePlaceholder":134},[28,11295,11296,11299,11301,11304,11306,11308],{"class":30,"line":2693},[28,11297,11298],{"class":207},"    const",[28,11300,2459],{"class":207},[28,11302,11303],{"class":211}," c_l_a ",[28,11305,257],{"class":207},[28,11307,2115],{"class":38},[28,11309,1370],{"class":211},[28,11311,11312,11314,11316,11319,11321,11323],{"class":30,"line":2698},[28,11313,11298],{"class":207},[28,11315,2459],{"class":207},[28,11317,11318],{"class":211}," c_l_b ",[28,11320,257],{"class":207},[28,11322,2115],{"class":38},[28,11324,1370],{"class":211},[28,11326,11327,11329,11331,11334,11336,11338,11340,11342,11344,11347,11349],{"class":30,"line":8025},[28,11328,6606],{"class":211},[28,11330,1253],{"class":207},[28,11332,11333],{"class":64}," \"局部常量c_l_a地址为： \"",[28,11335,1522],{"class":207},[28,11337,1736],{"class":211},[28,11339,215],{"class":207},[28,11341,639],{"class":211},[28,11343,563],{"class":207},[28,11345,11346],{"class":211},"c_l_a ",[28,11348,1253],{"class":207},[28,11350,8917],{"class":211},[28,11352,11353,11355,11357,11360,11362,11364,11366,11368,11370,11373,11375],{"class":30,"line":8049},[28,11354,6606],{"class":211},[28,11356,1253],{"class":207},[28,11358,11359],{"class":64}," \"局部常量c_l_b地址为： \"",[28,11361,1522],{"class":207},[28,11363,1736],{"class":211},[28,11365,215],{"class":207},[28,11367,639],{"class":211},[28,11369,563],{"class":207},[28,11371,11372],{"class":211},"c_l_b ",[28,11374,1253],{"class":207},[28,11376,8917],{"class":211},[28,11378,11379],{"class":30,"line":8054},[28,11380,2477],{"emptyLinePlaceholder":134},[28,11382,11383,11385,11387,11389],{"class":30,"line":8060},[28,11384,2380],{"class":34},[28,11386,212],{"class":211},[28,11388,2385],{"class":64},[28,11390,2796],{"class":211},[28,11392,11393],{"class":30,"line":8087},[28,11394,2477],{"emptyLinePlaceholder":134},[28,11396,11397,11399,11401],{"class":30,"line":8092},[28,11398,4167],{"class":207},[28,11400,4170],{"class":38},[28,11402,1370],{"class":211},[28,11404,11405],{"class":30,"line":8098},[28,11406,1643],{"class":211},[14,11408,11409],{},"总结：",[116,11411,11412,11415,11418,11421],{},[119,11413,11414],{},"c++中程序运行前分为全局区和代码区",[119,11416,11417],{},"代码区特点是共享和只读",[119,11419,11420],{},"全局区中存放全局变量、静态变量、常量",[119,11422,11423],{},"常量区中存放const修饰的全局常量和字符串常量",[177,11425,11427],{"id":11426},"_512程序运行后","5.1.2程序运行后",[161,11429,11430],{},[119,11431,11432],{},"栈区：",[116,11434,11435,11442],{},[119,11436,11437,11438,11441],{},"由编译器自动分配释放, 存放",[359,11439,11440],{},"函数的参数值,局部变量","等",[119,11443,11444,11445,11448],{},"注意事项：",[359,11446,11447],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[18,11450,11452],{"className":198,"code":11451,"language":200,"meta":23,"style":23},"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",[25,11453,11454,11465,11469,11484,11496,11500,11504,11512,11517,11532,11550,11567,11577,11585],{"__ignoreMap":23},[28,11455,11456,11458,11460,11463],{"class":30,"line":31},[28,11457,215],{"class":207},[28,11459,6595],{"class":207},[28,11461,11462],{"class":34}," func",[28,11464,2053],{"class":211},[28,11466,11467],{"class":30,"line":42},[28,11468,1624],{"class":211},[28,11470,11471,11473,11475,11477,11479,11481],{"class":30,"line":50},[28,11472,2062],{"class":207},[28,11474,10946],{"class":211},[28,11476,257],{"class":207},[28,11478,2115],{"class":38},[28,11480,266],{"class":211},[28,11482,11483],{"class":269}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[28,11485,11486,11488,11490,11493],{"class":30,"line":58},[28,11487,4167],{"class":207},[28,11489,10661],{"class":207},[28,11491,11492],{"class":211},"a;",[28,11494,11495],{"class":269}," \u002F\u002F放回局部变量的地址\n",[28,11497,11498],{"class":30,"line":70},[28,11499,1643],{"class":211},[28,11501,11502],{"class":30,"line":78},[28,11503,2477],{"emptyLinePlaceholder":134},[28,11505,11506,11508,11510],{"class":30,"line":86},[28,11507,215],{"class":207},[28,11509,2050],{"class":34},[28,11511,10930],{"class":211},[28,11513,11514],{"class":30,"line":97},[28,11515,11516],{"class":269},"    \u002F\u002F接受func的返回值\n",[28,11518,11519,11521,11523,11526,11528,11530],{"class":30,"line":108},[28,11520,2062],{"class":207},[28,11522,6595],{"class":207},[28,11524,11525],{"class":211},"p ",[28,11527,257],{"class":207},[28,11529,11462],{"class":34},[28,11531,5713],{"class":211},[28,11533,11534,11536,11538,11540,11542,11544,11547],{"class":30,"line":1407},[28,11535,6606],{"class":211},[28,11537,1253],{"class":207},[28,11539,6595],{"class":207},[28,11541,11525],{"class":211},[28,11543,1253],{"class":207},[28,11545,11546],{"class":211}," endl;",[28,11548,11549],{"class":269}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[28,11551,11552,11554,11556,11558,11560,11562,11564],{"class":30,"line":1690},[28,11553,6606],{"class":211},[28,11555,1253],{"class":207},[28,11557,6595],{"class":207},[28,11559,11525],{"class":211},[28,11561,1253],{"class":207},[28,11563,11546],{"class":211},[28,11565,11566],{"class":269}," \u002F\u002F第二次这个数据不再保留\n",[28,11568,11569,11571,11573,11575],{"class":30,"line":1695},[28,11570,2380],{"class":34},[28,11572,212],{"class":211},[28,11574,2385],{"class":64},[28,11576,2796],{"class":211},[28,11578,11579,11581,11583],{"class":30,"line":1701},[28,11580,4167],{"class":207},[28,11582,4170],{"class":38},[28,11584,1370],{"class":211},[28,11586,11587],{"class":30,"line":1706},[28,11588,1643],{"class":211},[14,11590,11591],{},"输出结果：",[14,11593,11594],{},[1540,11595],{"alt":11596,"src":11597},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11599,11600],{},"总结：不要返回局部变量的地址",[161,11602,11603],{"start":42},[119,11604,11605],{},"堆区",[116,11607,11608,11611],{},[119,11609,11610],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[119,11612,11613],{},"在c++中主要利用new在堆区开辟内存",[18,11615,11617],{"className":198,"code":11616,"language":200,"meta":23,"style":23},"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",[25,11618,11619,11634,11638,11643,11664,11671,11675,11683,11687,11692,11706,11718],{"__ignoreMap":23},[28,11620,11621,11623,11626,11629,11631],{"class":30,"line":31},[28,11622,215],{"class":207},[28,11624,11625],{"class":207},"  *",[28,11627,11628],{"class":34},"func",[28,11630,2504],{"class":211},[28,11632,11633],{"class":269},"  \u002F\u002F函数返回指针\n",[28,11635,11636],{"class":30,"line":42},[28,11637,1624],{"class":211},[28,11639,11640],{"class":30,"line":50},[28,11641,11642],{"class":269},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[28,11644,11645,11647,11649,11651,11653,11656,11658,11660,11662],{"class":30,"line":58},[28,11646,4224],{"class":207},[28,11648,6595],{"class":207},[28,11650,14],{"class":211},[28,11652,257],{"class":207},[28,11654,11655],{"class":207}," new",[28,11657,2459],{"class":207},[28,11659,212],{"class":211},[28,11661,656],{"class":38},[28,11663,2796],{"class":211},[28,11665,11666,11668],{"class":30,"line":70},[28,11667,4458],{"class":207},[28,11669,11670],{"class":211}," p;\n",[28,11672,11673],{"class":30,"line":78},[28,11674,1643],{"class":211},[28,11676,11677,11679,11681],{"class":30,"line":86},[28,11678,215],{"class":207},[28,11680,2050],{"class":34},[28,11682,2053],{"class":211},[28,11684,11685],{"class":30,"line":97},[28,11686,1624],{"class":211},[28,11688,11689],{"class":30,"line":108},[28,11690,11691],{"class":269},"    \u002F\u002F在堆区开辟数据\n",[28,11693,11694,11696,11698,11700,11702,11704],{"class":30,"line":1407},[28,11695,2062],{"class":207},[28,11697,6595],{"class":207},[28,11699,14],{"class":211},[28,11701,257],{"class":207},[28,11703,11628],{"class":34},[28,11705,5713],{"class":211},[28,11707,11708,11710,11712,11714,11716],{"class":30,"line":1690},[28,11709,1629],{"class":211},[28,11711,6496],{"class":207},[28,11713,14],{"class":211},[28,11715,1253],{"class":207},[28,11717,1275],{"class":211},[28,11719,11720],{"class":30,"line":1695},[28,11721,1643],{"class":211},[14,11723,11724],{},"图片展示：",[14,11726,11727],{},[1540,11728],{"alt":11596,"src":11729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11731,11732],{},"堆区内存由程序员管生死！！！",[161,11734,11735],{"start":50},[119,11736,11737],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11739,11740],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11742,11743,11744],{},"​语法：",[25,11745,11746],{}," new 数据类型",[14,11748,11749],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[18,11751,11753],{"className":198,"code":11752,"language":200,"meta":23,"style":23},"\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",[25,11754,11755,11760,11770,11774,11779,11784,11806,11810,11818,11822,11836,11848,11860,11872,11877,11882,11893,11897,11902,11910,11914,11919,11941,11967,11971,11989,11993,12019,12023,12035,12039,12044,12049,12057,12061,12065,12073,12077,12083,12089],{"__ignoreMap":23},[28,11756,11757],{"class":30,"line":31},[28,11758,11759],{"class":269},"\u002F\u002F1.new的基本语法\n",[28,11761,11762,11764,11766,11768],{"class":30,"line":42},[28,11763,215],{"class":207},[28,11765,6595],{"class":207},[28,11767,11628],{"class":34},[28,11769,2053],{"class":211},[28,11771,11772],{"class":30,"line":50},[28,11773,1624],{"class":211},[28,11775,11776],{"class":30,"line":58},[28,11777,11778],{"class":269},"    \u002F\u002F在堆区创建整型数据\n",[28,11780,11781],{"class":30,"line":70},[28,11782,11783],{"class":269},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[28,11785,11786,11788,11790,11792,11795,11797,11799,11801,11803],{"class":30,"line":78},[28,11787,2062],{"class":207},[28,11789,6595],{"class":207},[28,11791,14],{"class":211},[28,11793,11794],{"class":207},"=new",[28,11796,2459],{"class":207},[28,11798,212],{"class":211},[28,11800,656],{"class":38},[28,11802,6043],{"class":211},[28,11804,11805],{"class":269},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[28,11807,11808],{"class":30,"line":86},[28,11809,1643],{"class":211},[28,11811,11812,11814,11816],{"class":30,"line":97},[28,11813,5441],{"class":207},[28,11815,5665],{"class":34},[28,11817,2053],{"class":211},[28,11819,11820],{"class":30,"line":108},[28,11821,1624],{"class":211},[28,11823,11824,11826,11828,11830,11832,11834],{"class":30,"line":1407},[28,11825,2062],{"class":207},[28,11827,6595],{"class":207},[28,11829,14],{"class":211},[28,11831,257],{"class":207},[28,11833,11628],{"class":34},[28,11835,5713],{"class":211},[28,11837,11838,11840,11842,11844,11846],{"class":30,"line":1690},[28,11839,1629],{"class":211},[28,11841,6496],{"class":207},[28,11843,14],{"class":211},[28,11845,1253],{"class":207},[28,11847,1275],{"class":211},[28,11849,11850,11852,11854,11856,11858],{"class":30,"line":1695},[28,11851,1629],{"class":211},[28,11853,6496],{"class":207},[28,11855,14],{"class":211},[28,11857,1253],{"class":207},[28,11859,1275],{"class":211},[28,11861,11862,11864,11866,11868,11870],{"class":30,"line":1701},[28,11863,1629],{"class":211},[28,11865,6496],{"class":207},[28,11867,14],{"class":211},[28,11869,1253],{"class":207},[28,11871,1275],{"class":211},[28,11873,11874],{"class":30,"line":1706},[28,11875,11876],{"class":269},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[28,11878,11879],{"class":30,"line":1720},[28,11880,11881],{"class":269},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[28,11883,11884,11887,11890],{"class":30,"line":1725},[28,11885,11886],{"class":207},"    delete",[28,11888,11889],{"class":211}," p;",[28,11891,11892],{"class":269},"\u002F\u002F删除这块地址\n",[28,11894,11895],{"class":30,"line":1731},[28,11896,1643],{"class":211},[28,11898,11899],{"class":30,"line":1752},[28,11900,11901],{"class":269},"\u002F\u002F2.在堆区利用new开辟数组\n",[28,11903,11904,11906,11908],{"class":30,"line":1757},[28,11905,5441],{"class":207},[28,11907,5734],{"class":34},[28,11909,2053],{"class":211},[28,11911,11912],{"class":30,"line":1771},[28,11913,1624],{"class":211},[28,11915,11916],{"class":30,"line":1776},[28,11917,11918],{"class":269},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[28,11920,11921,11923,11925,11927,11929,11931,11933,11935,11938],{"class":30,"line":1805},[28,11922,2062],{"class":207},[28,11924,6595],{"class":207},[28,11926,3957],{"class":211},[28,11928,11794],{"class":207},[28,11930,2459],{"class":207},[28,11932,1100],{"class":211},[28,11934,656],{"class":38},[28,11936,11937],{"class":211},"];",[28,11939,11940],{"class":269},"\u002F\u002F10代表数组有10个元素\n",[28,11942,11943,11945,11947,11949,11951,11953,11955,11957,11959,11961,11963,11965],{"class":30,"line":1810},[28,11944,3278],{"class":207},[28,11946,1736],{"class":211},[28,11948,215],{"class":207},[28,11950,3109],{"class":211},[28,11952,257],{"class":207},[28,11954,401],{"class":38},[28,11956,3116],{"class":211},[28,11958,1120],{"class":207},[28,11960,656],{"class":38},[28,11962,3116],{"class":211},[28,11964,2369],{"class":207},[28,11966,218],{"class":211},[28,11968,11969],{"class":30,"line":1827},[28,11970,2107],{"class":211},[28,11972,11973,11976,11978,11980,11982,11984,11986],{"class":30,"line":1832},[28,11974,11975],{"class":211},"        arr[i]",[28,11977,257],{"class":207},[28,11979,651],{"class":211},[28,11981,691],{"class":207},[28,11983,521],{"class":38},[28,11985,266],{"class":211},[28,11987,11988],{"class":269},"\u002F\u002F给10个元素赋值100～109\n",[28,11990,11991],{"class":30,"line":1837},[28,11992,2264],{"class":211},[28,11994,11995,11997,11999,12001,12003,12005,12007,12009,12011,12013,12015,12017],{"class":30,"line":1842},[28,11996,3278],{"class":207},[28,11998,1736],{"class":211},[28,12000,215],{"class":207},[28,12002,3109],{"class":211},[28,12004,257],{"class":207},[28,12006,401],{"class":38},[28,12008,3116],{"class":211},[28,12010,1120],{"class":207},[28,12012,656],{"class":38},[28,12014,3116],{"class":211},[28,12016,2369],{"class":207},[28,12018,218],{"class":211},[28,12020,12021],{"class":30,"line":1856},[28,12022,2107],{"class":211},[28,12024,12025,12027,12029,12031,12033],{"class":30,"line":1861},[28,12026,3528],{"class":211},[28,12028,1253],{"class":207},[28,12030,4431],{"class":211},[28,12032,1253],{"class":207},[28,12034,1275],{"class":211},[28,12036,12037],{"class":30,"line":2654},[28,12038,2264],{"class":211},[28,12040,12041],{"class":30,"line":2668},[28,12042,12043],{"class":269},"    \u002F\u002F释放堆区数组\n",[28,12045,12046],{"class":30,"line":2676},[28,12047,12048],{"class":269},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[28,12050,12051,12054],{"class":30,"line":2681},[28,12052,12053],{"class":207},"    delete[]",[28,12055,12056],{"class":211}," arr;\n",[28,12058,12059],{"class":30,"line":2687},[28,12060,1643],{"class":211},[28,12062,12063],{"class":30,"line":2693},[28,12064,2477],{"emptyLinePlaceholder":134},[28,12066,12067,12069,12071],{"class":30,"line":2698},[28,12068,215],{"class":207},[28,12070,2050],{"class":34},[28,12072,2053],{"class":211},[28,12074,12075],{"class":30,"line":8025},[28,12076,1624],{"class":211},[28,12078,12079,12081],{"class":30,"line":8049},[28,12080,5710],{"class":34},[28,12082,5713],{"class":211},[28,12084,12085,12087],{"class":30,"line":8054},[28,12086,5779],{"class":34},[28,12088,5713],{"class":211},[28,12090,12091],{"class":30,"line":8060},[28,12092,1643],{"class":211},[126,12094,12095],{},"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":23,"searchDepth":42,"depth":42,"links":12097},[12098],{"id":10766,"depth":42,"text":10767,"children":12099},[12100,12101],{"id":10798,"depth":50,"text":10799},{"id":11426,"depth":50,"text":11427},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10758,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12108,"title":12109,"body":12110,"description":23,"extension":132,"meta":13591,"navigation":134,"path":13592,"seo":13593,"stem":13594,"__hash__":13595},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12111,"toc":13583},[12112,12115,12119,12122,12125,12294,12298,12303,12320,12325,12477,12481,12484,12487,12881,12885,12888,12893,12896,13208,13212,13218,13378,13380,13388,13392,13395,13402,13580],[10,12113,12109],{"id":12114},"_6引用",[149,12116,12118],{"id":12117},"_61引用基本用法","6.1引用基本用法",[14,12120,12121],{},"引用的本质：给变量起别名",[14,12123,12124],{},"语法：数据类型 &别名=原名",[18,12126,12128],{"className":198,"code":12127,"language":200,"meta":23,"style":23},"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",[25,12129,12130,12138,12142,12154,12166,12170,12189,12208,12212,12223,12227,12246,12264,12268,12278,12282,12290],{"__ignoreMap":23},[28,12131,12132,12134,12136],{"class":30,"line":31},[28,12133,215],{"class":207},[28,12135,2050],{"class":34},[28,12137,10930],{"class":211},[28,12139,12140],{"class":30,"line":42},[28,12141,2477],{"emptyLinePlaceholder":134},[28,12143,12144,12146,12148,12150,12152],{"class":30,"line":50},[28,12145,2062],{"class":207},[28,12147,10946],{"class":211},[28,12149,257],{"class":207},[28,12151,2115],{"class":38},[28,12153,1370],{"class":211},[28,12155,12156,12158,12160,12162,12164],{"class":30,"line":58},[28,12157,2062],{"class":207},[28,12159,10661],{"class":207},[28,12161,11022],{"class":211},[28,12163,257],{"class":207},[28,12165,1510],{"class":211},[28,12167,12168],{"class":30,"line":70},[28,12169,2477],{"emptyLinePlaceholder":134},[28,12171,12172,12174,12176,12179,12181,12183,12185,12187],{"class":30,"line":78},[28,12173,6606],{"class":211},[28,12175,1253],{"class":207},[28,12177,12178],{"class":64}," \"a = \"",[28,12180,1522],{"class":207},[28,12182,10946],{"class":211},[28,12184,1253],{"class":207},[28,12186,11546],{"class":211},[28,12188,7345],{"class":269},[28,12190,12191,12193,12195,12198,12200,12202,12204,12206],{"class":30,"line":86},[28,12192,6606],{"class":211},[28,12194,1253],{"class":207},[28,12196,12197],{"class":64}," \"b = \"",[28,12199,1522],{"class":207},[28,12201,10959],{"class":211},[28,12203,1253],{"class":207},[28,12205,11546],{"class":211},[28,12207,7345],{"class":269},[28,12209,12210],{"class":30,"line":97},[28,12211,2477],{"emptyLinePlaceholder":134},[28,12213,12214,12217,12219,12221],{"class":30,"line":108},[28,12215,12216],{"class":211},"    b ",[28,12218,257],{"class":207},[28,12220,5831],{"class":38},[28,12222,1370],{"class":211},[28,12224,12225],{"class":30,"line":1407},[28,12226,2477],{"emptyLinePlaceholder":134},[28,12228,12229,12231,12233,12235,12237,12239,12241,12243],{"class":30,"line":1690},[28,12230,6606],{"class":211},[28,12232,1253],{"class":207},[28,12234,12178],{"class":64},[28,12236,1522],{"class":207},[28,12238,10946],{"class":211},[28,12240,1253],{"class":207},[28,12242,11546],{"class":211},[28,12244,12245],{"class":269},"\u002F\u002F100\n",[28,12247,12248,12250,12252,12254,12256,12258,12260,12262],{"class":30,"line":1695},[28,12249,6606],{"class":211},[28,12251,1253],{"class":207},[28,12253,12197],{"class":64},[28,12255,1522],{"class":207},[28,12257,10959],{"class":211},[28,12259,1253],{"class":207},[28,12261,11546],{"class":211},[28,12263,12245],{"class":269},[28,12265,12266],{"class":30,"line":1701},[28,12267,2477],{"emptyLinePlaceholder":134},[28,12269,12270,12272,12274,12276],{"class":30,"line":1706},[28,12271,2380],{"class":34},[28,12273,212],{"class":211},[28,12275,2385],{"class":64},[28,12277,2796],{"class":211},[28,12279,12280],{"class":30,"line":1720},[28,12281,2477],{"emptyLinePlaceholder":134},[28,12283,12284,12286,12288],{"class":30,"line":1725},[28,12285,4167],{"class":207},[28,12287,4170],{"class":38},[28,12289,1370],{"class":211},[28,12291,12292],{"class":30,"line":1731},[28,12293,1643],{"class":211},[149,12295,12297],{"id":12296},"_62引用的注意事项","6.2引用的注意事项",[161,12299,12300],{},[119,12301,12302],{},"引用必须要初始化",[18,12304,12306],{"className":198,"code":12305,"language":200,"meta":23,"style":23},"int &b;\u002F\u002F非常错误！\n",[25,12307,12308],{"__ignoreMap":23},[28,12309,12310,12312,12314,12317],{"class":30,"line":31},[28,12311,215],{"class":207},[28,12313,10661],{"class":207},[28,12315,12316],{"class":211},"b;",[28,12318,12319],{"class":269},"\u002F\u002F非常错误！\n",[161,12321,12322],{"start":42},[119,12323,12324],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[18,12326,12328],{"className":198,"code":12327,"language":200,"meta":23,"style":23},"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",[25,12329,12330,12338,12350,12362,12370,12386,12399,12417,12435,12455,12465,12473],{"__ignoreMap":23},[28,12331,12332,12334,12336],{"class":30,"line":31},[28,12333,215],{"class":207},[28,12335,2050],{"class":34},[28,12337,10930],{"class":211},[28,12339,12340,12342,12344,12346,12348],{"class":30,"line":42},[28,12341,2062],{"class":207},[28,12343,10946],{"class":211},[28,12345,257],{"class":207},[28,12347,2115],{"class":38},[28,12349,1370],{"class":211},[28,12351,12352,12354,12356,12358,12360],{"class":30,"line":50},[28,12353,2062],{"class":207},[28,12355,10959],{"class":211},[28,12357,257],{"class":207},[28,12359,9027],{"class":38},[28,12361,1370],{"class":211},[28,12363,12364,12367],{"class":30,"line":58},[28,12365,12366],{"class":269},"    \u002F\u002Fint &c;",[28,12368,12369],{"class":269}," \u002F\u002F错误，引用必须初始化\n",[28,12371,12372,12374,12376,12378,12380,12383],{"class":30,"line":70},[28,12373,2062],{"class":207},[28,12375,10661],{"class":207},[28,12377,3023],{"class":211},[28,12379,257],{"class":207},[28,12381,12382],{"class":211}," a;",[28,12384,12385],{"class":269}," \u002F\u002F一旦初始化后，就不可以更改\n",[28,12387,12388,12391,12393,12396],{"class":30,"line":78},[28,12389,12390],{"class":211},"    c ",[28,12392,257],{"class":207},[28,12394,12395],{"class":211}," b;",[28,12397,12398],{"class":269}," \u002F\u002F这是赋值操作，不是更改引用\n",[28,12400,12401,12403,12405,12407,12409,12411,12413,12415],{"class":30,"line":86},[28,12402,6606],{"class":211},[28,12404,1253],{"class":207},[28,12406,12178],{"class":64},[28,12408,1522],{"class":207},[28,12410,10946],{"class":211},[28,12412,1253],{"class":207},[28,12414,11546],{"class":211},[28,12416,7330],{"class":269},[28,12418,12419,12421,12423,12425,12427,12429,12431,12433],{"class":30,"line":97},[28,12420,6606],{"class":211},[28,12422,1253],{"class":207},[28,12424,12197],{"class":64},[28,12426,1522],{"class":207},[28,12428,10959],{"class":211},[28,12430,1253],{"class":207},[28,12432,11546],{"class":211},[28,12434,7330],{"class":269},[28,12436,12437,12439,12441,12444,12446,12449,12451,12453],{"class":30,"line":108},[28,12438,6606],{"class":211},[28,12440,1253],{"class":207},[28,12442,12443],{"class":64}," \"c = \"",[28,12445,1522],{"class":207},[28,12447,12448],{"class":211}," c ",[28,12450,1253],{"class":207},[28,12452,11546],{"class":211},[28,12454,7330],{"class":269},[28,12456,12457,12459,12461,12463],{"class":30,"line":1407},[28,12458,2380],{"class":34},[28,12460,212],{"class":211},[28,12462,2385],{"class":64},[28,12464,2796],{"class":211},[28,12466,12467,12469,12471],{"class":30,"line":1690},[28,12468,4167],{"class":207},[28,12470,4170],{"class":38},[28,12472,1370],{"class":211},[28,12474,12475],{"class":30,"line":1695},[28,12476,1643],{"class":211},[149,12478,12480],{"id":12479},"_63引用做函数参数","6.3引用做函数参数",[14,12482,12483],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12485,12486],{},"优点：可以简化指针修改实参",[18,12488,12490],{"className":198,"code":12489,"language":200,"meta":23,"style":23},"\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",[25,12491,12492,12497,12520,12531,12541,12550,12554,12558,12563,12585,12597,12609,12619,12623,12627,12632,12654,12664,12672,12680,12684,12688,12696,12700,12712,12724,12728,12739,12765,12769,12789,12813,12817,12827,12851,12855,12865,12869,12877],{"__ignoreMap":23},[28,12493,12494],{"class":30,"line":31},[28,12495,12496],{"class":269},"\u002F\u002F1. 值传递\n",[28,12498,12499,12501,12504,12506,12508,12510,12513,12515,12517],{"class":30,"line":42},[28,12500,5441],{"class":207},[28,12502,12503],{"class":34}," mySwap01",[28,12505,212],{"class":211},[28,12507,215],{"class":207},[28,12509,1476],{"class":5293},[28,12511,12512],{"class":211},", ",[28,12514,215],{"class":207},[28,12516,2910],{"class":5293},[28,12518,12519],{"class":211},") {\n",[28,12521,12522,12524,12527,12529],{"class":30,"line":50},[28,12523,2062],{"class":207},[28,12525,12526],{"class":211}," temp ",[28,12528,257],{"class":207},[28,12530,1510],{"class":211},[28,12532,12533,12536,12538],{"class":30,"line":58},[28,12534,12535],{"class":211},"    a ",[28,12537,257],{"class":207},[28,12539,12540],{"class":211}," b;\n",[28,12542,12543,12545,12547],{"class":30,"line":70},[28,12544,12216],{"class":211},[28,12546,257],{"class":207},[28,12548,12549],{"class":211}," temp;\n",[28,12551,12552],{"class":30,"line":78},[28,12553,1643],{"class":211},[28,12555,12556],{"class":30,"line":86},[28,12557,2477],{"emptyLinePlaceholder":134},[28,12559,12560],{"class":30,"line":97},[28,12561,12562],{"class":269},"\u002F\u002F2. 地址传递\n",[28,12564,12565,12567,12570,12572,12575,12577,12579,12581,12583],{"class":30,"line":108},[28,12566,5441],{"class":207},[28,12568,12569],{"class":34}," mySwap02",[28,12571,212],{"class":211},[28,12573,12574],{"class":207},"int*",[28,12576,1476],{"class":5293},[28,12578,12512],{"class":211},[28,12580,12574],{"class":207},[28,12582,2910],{"class":5293},[28,12584,12519],{"class":211},[28,12586,12587,12589,12591,12593,12595],{"class":30,"line":1407},[28,12588,2062],{"class":207},[28,12590,12526],{"class":211},[28,12592,257],{"class":207},[28,12594,6595],{"class":207},[28,12596,6274],{"class":211},[28,12598,12599,12601,12603,12605,12607],{"class":30,"line":1690},[28,12600,6480],{"class":207},[28,12602,10996],{"class":211},[28,12604,257],{"class":207},[28,12606,6595],{"class":207},[28,12608,6146],{"class":211},[28,12610,12611,12613,12615,12617],{"class":30,"line":1695},[28,12612,6480],{"class":207},[28,12614,11022],{"class":211},[28,12616,257],{"class":207},[28,12618,12549],{"class":211},[28,12620,12621],{"class":30,"line":1701},[28,12622,1643],{"class":211},[28,12624,12625],{"class":30,"line":1706},[28,12626,2477],{"emptyLinePlaceholder":134},[28,12628,12629],{"class":30,"line":1720},[28,12630,12631],{"class":269},"\u002F\u002F3. 引用传递\n",[28,12633,12634,12636,12639,12641,12644,12646,12648,12650,12652],{"class":30,"line":1725},[28,12635,5441],{"class":207},[28,12637,12638],{"class":34}," mySwap03",[28,12640,212],{"class":211},[28,12642,12643],{"class":207},"int&",[28,12645,1476],{"class":5293},[28,12647,12512],{"class":211},[28,12649,12643],{"class":207},[28,12651,2910],{"class":5293},[28,12653,12519],{"class":211},[28,12655,12656,12658,12660,12662],{"class":30,"line":1731},[28,12657,2062],{"class":207},[28,12659,12526],{"class":211},[28,12661,257],{"class":207},[28,12663,1510],{"class":211},[28,12665,12666,12668,12670],{"class":30,"line":1752},[28,12667,12535],{"class":211},[28,12669,257],{"class":207},[28,12671,12540],{"class":211},[28,12673,12674,12676,12678],{"class":30,"line":1757},[28,12675,12216],{"class":211},[28,12677,257],{"class":207},[28,12679,12549],{"class":211},[28,12681,12682],{"class":30,"line":1771},[28,12683,1643],{"class":211},[28,12685,12686],{"class":30,"line":1776},[28,12687,2477],{"emptyLinePlaceholder":134},[28,12689,12690,12692,12694],{"class":30,"line":1805},[28,12691,215],{"class":207},[28,12693,2050],{"class":34},[28,12695,10930],{"class":211},[28,12697,12698],{"class":30,"line":1810},[28,12699,2477],{"emptyLinePlaceholder":134},[28,12701,12702,12704,12706,12708,12710],{"class":30,"line":1827},[28,12703,2062],{"class":207},[28,12705,10946],{"class":211},[28,12707,257],{"class":207},[28,12709,2115],{"class":38},[28,12711,1370],{"class":211},[28,12713,12714,12716,12718,12720,12722],{"class":30,"line":1832},[28,12715,2062],{"class":207},[28,12717,10959],{"class":211},[28,12719,257],{"class":207},[28,12721,9027],{"class":38},[28,12723,1370],{"class":211},[28,12725,12726],{"class":30,"line":1837},[28,12727,2477],{"emptyLinePlaceholder":134},[28,12729,12730,12733,12736],{"class":30,"line":1842},[28,12731,12732],{"class":34},"    mySwap01",[28,12734,12735],{"class":211},"(a, b);",[28,12737,12738],{"class":269},"\u002F\u002F值传递，形参不会修饰实参\n",[28,12740,12741,12743,12745,12748,12750,12752,12754,12757,12759,12761,12763],{"class":30,"line":1856},[28,12742,6606],{"class":211},[28,12744,1253],{"class":207},[28,12746,12747],{"class":64}," \"a:\"",[28,12749,1522],{"class":207},[28,12751,10946],{"class":211},[28,12753,1253],{"class":207},[28,12755,12756],{"class":64}," \" b:\"",[28,12758,1522],{"class":207},[28,12760,10959],{"class":211},[28,12762,1253],{"class":207},[28,12764,8917],{"class":211},[28,12766,12767],{"class":30,"line":1861},[28,12768,2477],{"emptyLinePlaceholder":134},[28,12770,12771,12774,12776,12778,12781,12783,12786],{"class":30,"line":2654},[28,12772,12773],{"class":34},"    mySwap02",[28,12775,212],{"class":211},[28,12777,563],{"class":207},[28,12779,12780],{"class":211},"a, ",[28,12782,563],{"class":207},[28,12784,12785],{"class":211},"b);",[28,12787,12788],{"class":269},"\u002F\u002F地址传递，形参会修饰实参\n",[28,12790,12791,12793,12795,12797,12799,12801,12803,12805,12807,12809,12811],{"class":30,"line":2668},[28,12792,6606],{"class":211},[28,12794,1253],{"class":207},[28,12796,12747],{"class":64},[28,12798,1522],{"class":207},[28,12800,10946],{"class":211},[28,12802,1253],{"class":207},[28,12804,12756],{"class":64},[28,12806,1522],{"class":207},[28,12808,10959],{"class":211},[28,12810,1253],{"class":207},[28,12812,8917],{"class":211},[28,12814,12815],{"class":30,"line":2676},[28,12816,2477],{"emptyLinePlaceholder":134},[28,12818,12819,12822,12824],{"class":30,"line":2681},[28,12820,12821],{"class":34},"    mySwap03",[28,12823,12735],{"class":211},[28,12825,12826],{"class":269},"\u002F\u002F引用传递，形参会修饰实参\n",[28,12828,12829,12831,12833,12835,12837,12839,12841,12843,12845,12847,12849],{"class":30,"line":2687},[28,12830,6606],{"class":211},[28,12832,1253],{"class":207},[28,12834,12747],{"class":64},[28,12836,1522],{"class":207},[28,12838,10946],{"class":211},[28,12840,1253],{"class":207},[28,12842,12756],{"class":64},[28,12844,1522],{"class":207},[28,12846,10959],{"class":211},[28,12848,1253],{"class":207},[28,12850,8917],{"class":211},[28,12852,12853],{"class":30,"line":2693},[28,12854,2477],{"emptyLinePlaceholder":134},[28,12856,12857,12859,12861,12863],{"class":30,"line":2698},[28,12858,2380],{"class":34},[28,12860,212],{"class":211},[28,12862,2385],{"class":64},[28,12864,2796],{"class":211},[28,12866,12867],{"class":30,"line":8025},[28,12868,2477],{"emptyLinePlaceholder":134},[28,12870,12871,12873,12875],{"class":30,"line":8049},[28,12872,4167],{"class":207},[28,12874,4170],{"class":38},[28,12876,1370],{"class":211},[28,12878,12879],{"class":30,"line":8054},[28,12880,1643],{"class":211},[149,12882,12884],{"id":12883},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12886,12887],{},"作用：引用是可以作为函数的返回值存在的",[14,12889,9102,12890],{},[359,12891,12892],{},"不要返回局部变量引用",[14,12894,12895],{},"用法：函数调用作为左值",[18,12897,12899],{"className":10018,"code":12898,"language":10020,"meta":23,"style":23},"\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",[25,12900,12901,12906,12914,12929,12935,12939,12943,12948,12956,12973,12979,12983,12987,12995,12999,13004,13018,13038,13057,13061,13066,13079,13099,13117,13121,13137,13141,13160,13178,13182,13192,13196,13204],{"__ignoreMap":23},[28,12902,12903],{"class":30,"line":31},[28,12904,12905],{"class":269},"\u002F\u002F返回局部变量引用\n",[28,12907,12908,12910,12912],{"class":30,"line":42},[28,12909,12643],{"class":207},[28,12911,5665],{"class":34},[28,12913,10930],{"class":211},[28,12915,12916,12918,12920,12922,12924,12926],{"class":30,"line":50},[28,12917,2062],{"class":207},[28,12919,10946],{"class":211},[28,12921,257],{"class":207},[28,12923,2115],{"class":38},[28,12925,266],{"class":211},[28,12927,12928],{"class":269}," \u002F\u002F局部变量\n",[28,12930,12931,12933],{"class":30,"line":58},[28,12932,4167],{"class":207},[28,12934,1510],{"class":211},[28,12936,12937],{"class":30,"line":70},[28,12938,1643],{"class":211},[28,12940,12941],{"class":30,"line":78},[28,12942,2477],{"emptyLinePlaceholder":134},[28,12944,12945],{"class":30,"line":86},[28,12946,12947],{"class":269},"\u002F\u002F返回静态变量引用\n",[28,12949,12950,12952,12954],{"class":30,"line":97},[28,12951,12643],{"class":207},[28,12953,5734],{"class":34},[28,12955,10930],{"class":211},[28,12957,12958,12960,12962,12964,12966,12968,12970],{"class":30,"line":108},[28,12959,11097],{"class":207},[28,12961,2459],{"class":207},[28,12963,10946],{"class":211},[28,12965,257],{"class":207},[28,12967,9027],{"class":38},[28,12969,266],{"class":211},[28,12971,12972],{"class":269},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[28,12974,12975,12977],{"class":30,"line":1407},[28,12976,4167],{"class":207},[28,12978,1510],{"class":211},[28,12980,12981],{"class":30,"line":1690},[28,12982,1643],{"class":211},[28,12984,12985],{"class":30,"line":1695},[28,12986,2477],{"emptyLinePlaceholder":134},[28,12988,12989,12991,12993],{"class":30,"line":1701},[28,12990,215],{"class":207},[28,12992,2050],{"class":34},[28,12994,10930],{"class":211},[28,12996,12997],{"class":30,"line":1706},[28,12998,2477],{"emptyLinePlaceholder":134},[28,13000,13001],{"class":30,"line":1720},[28,13002,13003],{"class":269},"    \u002F\u002F不能返回局部变量的引用\n",[28,13005,13006,13009,13012,13014,13016],{"class":30,"line":1725},[28,13007,13008],{"class":207},"    int&",[28,13010,13011],{"class":211}," ref ",[28,13013,257],{"class":207},[28,13015,5665],{"class":34},[28,13017,5713],{"class":211},[28,13019,13020,13022,13024,13027,13029,13031,13033,13035],{"class":30,"line":1731},[28,13021,6606],{"class":211},[28,13023,1253],{"class":207},[28,13025,13026],{"class":64}," \"ref = \"",[28,13028,1522],{"class":207},[28,13030,13011],{"class":211},[28,13032,1253],{"class":207},[28,13034,11546],{"class":211},[28,13036,13037],{"class":269},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[28,13039,13040,13042,13044,13046,13048,13050,13052,13054],{"class":30,"line":1752},[28,13041,6606],{"class":211},[28,13043,1253],{"class":207},[28,13045,13026],{"class":64},[28,13047,1522],{"class":207},[28,13049,13011],{"class":211},[28,13051,1253],{"class":207},[28,13053,11546],{"class":211},[28,13055,13056],{"class":269},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[28,13058,13059],{"class":30,"line":1757},[28,13060,2477],{"emptyLinePlaceholder":134},[28,13062,13063],{"class":30,"line":1771},[28,13064,13065],{"class":269},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[28,13067,13068,13070,13073,13075,13077],{"class":30,"line":1776},[28,13069,13008],{"class":207},[28,13071,13072],{"class":211}," ref2 ",[28,13074,257],{"class":207},[28,13076,5734],{"class":34},[28,13078,5713],{"class":211},[28,13080,13081,13083,13085,13088,13090,13092,13094,13096],{"class":30,"line":1805},[28,13082,6606],{"class":211},[28,13084,1253],{"class":207},[28,13086,13087],{"class":64}," \"ref2 = \"",[28,13089,1522],{"class":207},[28,13091,13072],{"class":211},[28,13093,1253],{"class":207},[28,13095,11546],{"class":211},[28,13097,13098],{"class":269}," \u002F\u002F20\n",[28,13100,13101,13103,13105,13107,13109,13111,13113,13115],{"class":30,"line":1810},[28,13102,6606],{"class":211},[28,13104,1253],{"class":207},[28,13106,13087],{"class":64},[28,13108,1522],{"class":207},[28,13110,13072],{"class":211},[28,13112,1253],{"class":207},[28,13114,11546],{"class":211},[28,13116,13098],{"class":269},[28,13118,13119],{"class":30,"line":1827},[28,13120,2477],{"emptyLinePlaceholder":134},[28,13122,13123,13125,13128,13130,13132,13134],{"class":30,"line":1832},[28,13124,5779],{"class":34},[28,13126,13127],{"class":211},"() ",[28,13129,257],{"class":207},[28,13131,3076],{"class":38},[28,13133,266],{"class":211},[28,13135,13136],{"class":269},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[28,13138,13139],{"class":30,"line":1837},[28,13140,2477],{"emptyLinePlaceholder":134},[28,13142,13143,13145,13147,13149,13151,13153,13155,13157],{"class":30,"line":1842},[28,13144,6606],{"class":211},[28,13146,1253],{"class":207},[28,13148,13087],{"class":64},[28,13150,1522],{"class":207},[28,13152,13072],{"class":211},[28,13154,1253],{"class":207},[28,13156,11546],{"class":211},[28,13158,13159],{"class":269}," \u002F\u002F1000\n",[28,13161,13162,13164,13166,13168,13170,13172,13174,13176],{"class":30,"line":1856},[28,13163,6606],{"class":211},[28,13165,1253],{"class":207},[28,13167,13087],{"class":64},[28,13169,1522],{"class":207},[28,13171,13072],{"class":211},[28,13173,1253],{"class":207},[28,13175,11546],{"class":211},[28,13177,13159],{"class":269},[28,13179,13180],{"class":30,"line":1861},[28,13181,2477],{"emptyLinePlaceholder":134},[28,13183,13184,13186,13188,13190],{"class":30,"line":2654},[28,13185,2380],{"class":34},[28,13187,212],{"class":211},[28,13189,2385],{"class":64},[28,13191,2796],{"class":211},[28,13193,13194],{"class":30,"line":2668},[28,13195,2477],{"emptyLinePlaceholder":134},[28,13197,13198,13200,13202],{"class":30,"line":2676},[28,13199,4167],{"class":207},[28,13201,4170],{"class":38},[28,13203,1370],{"class":211},[28,13205,13206],{"class":30,"line":2681},[28,13207,1643],{"class":211},[149,13209,13211],{"id":13210},"_65引用的本质","6.5引用的本质",[14,13213,13214,13215],{},"本质：",[359,13216,13217],{},"引用的本质在c++内部实现是一个指针常量.",[18,13219,13221],{"className":198,"code":13220,"language":200,"meta":23,"style":23},"\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",[25,13222,13223,13228,13244,13258,13262,13271,13283,13288,13293,13304,13317,13321,13337,13354,13358,13366,13374],{"__ignoreMap":23},[28,13224,13225],{"class":30,"line":31},[28,13226,13227],{"class":269},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[28,13229,13230,13232,13234,13236,13238,13241],{"class":30,"line":42},[28,13231,5441],{"class":207},[28,13233,11462],{"class":34},[28,13235,212],{"class":211},[28,13237,12643],{"class":207},[28,13239,13240],{"class":5293}," ref",[28,13242,13243],{"class":211},"){\n",[28,13245,13246,13249,13251,13253,13255],{"class":30,"line":50},[28,13247,13248],{"class":211},"    ref ",[28,13250,257],{"class":207},[28,13252,5831],{"class":38},[28,13254,266],{"class":211},[28,13256,13257],{"class":269}," \u002F\u002F ref是引用，转换为*ref = 100\n",[28,13259,13260],{"class":30,"line":58},[28,13261,1643],{"class":211},[28,13263,13264,13266,13268],{"class":30,"line":70},[28,13265,215],{"class":207},[28,13267,2050],{"class":34},[28,13269,13270],{"class":211},"(){\n",[28,13272,13273,13275,13277,13279,13281],{"class":30,"line":78},[28,13274,2062],{"class":207},[28,13276,10946],{"class":211},[28,13278,257],{"class":207},[28,13280,2115],{"class":38},[28,13282,1370],{"class":211},[28,13284,13285],{"class":30,"line":86},[28,13286,13287],{"class":211},"    \n",[28,13289,13290],{"class":30,"line":97},[28,13291,13292],{"class":269},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[28,13294,13295,13297,13299,13301],{"class":30,"line":108},[28,13296,13008],{"class":207},[28,13298,13011],{"class":211},[28,13300,257],{"class":207},[28,13302,13303],{"class":211}," a; \n",[28,13305,13306,13308,13310,13312,13314],{"class":30,"line":1407},[28,13307,13248],{"class":211},[28,13309,257],{"class":207},[28,13311,9027],{"class":38},[28,13313,266],{"class":211},[28,13315,13316],{"class":269}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[28,13318,13319],{"class":30,"line":1690},[28,13320,13287],{"class":211},[28,13322,13323,13325,13327,13329,13331,13333,13335],{"class":30,"line":1695},[28,13324,6606],{"class":211},[28,13326,1253],{"class":207},[28,13328,12747],{"class":64},[28,13330,1522],{"class":207},[28,13332,10946],{"class":211},[28,13334,1253],{"class":207},[28,13336,8917],{"class":211},[28,13338,13339,13341,13343,13346,13348,13350,13352],{"class":30,"line":1701},[28,13340,6606],{"class":211},[28,13342,1253],{"class":207},[28,13344,13345],{"class":64}," \"ref:\"",[28,13347,1522],{"class":207},[28,13349,13011],{"class":211},[28,13351,1253],{"class":207},[28,13353,8917],{"class":211},[28,13355,13356],{"class":30,"line":1706},[28,13357,13287],{"class":211},[28,13359,13360,13363],{"class":30,"line":1720},[28,13361,13362],{"class":34},"    func",[28,13364,13365],{"class":211},"(a);\n",[28,13367,13368,13370,13372],{"class":30,"line":1725},[28,13369,4167],{"class":207},[28,13371,4170],{"class":38},[28,13373,1370],{"class":211},[28,13375,13376],{"class":30,"line":1731},[28,13377,1643],{"class":211},[14,13379,11409],{},[161,13381,13382,13385],{},[119,13383,13384],{},"引用的本质，就是一个指针常量",[119,13386,13387],{},"引用一旦初始化，就不可以发生改变",[149,13389,13391],{"id":13390},"_66常量引用","6.6常量引用",[14,13393,13394],{},"作用：常量引用主要用来修饰形参",[14,13396,13397,13398,13401],{},"在函数形参列表中，可以加",[359,13399,13400],{},"const修饰形参","，防止形参改变实参",[18,13403,13405],{"className":198,"code":13404,"language":200,"meta":23,"style":23},"\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",[25,13406,13407,13412,13417,13436,13441,13454,13458,13462,13470,13474,13479,13484,13498,13502,13510,13522,13526,13531,13543,13550,13554,13564,13568,13576],{"__ignoreMap":23},[28,13408,13409],{"class":30,"line":31},[28,13410,13411],{"class":269},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[28,13413,13414],{"class":30,"line":42},[28,13415,13416],{"class":269},"\u002F\u002F加上const就不能修改实参的\n",[28,13418,13419,13421,13424,13426,13428,13431,13434],{"class":30,"line":50},[28,13420,5441],{"class":207},[28,13422,13423],{"class":34}," showValue",[28,13425,212],{"class":211},[28,13427,6869],{"class":207},[28,13429,13430],{"class":207}," int&",[28,13432,13433],{"class":5293}," v",[28,13435,12519],{"class":211},[28,13437,13438],{"class":30,"line":58},[28,13439,13440],{"class":269},"    \u002F\u002Fv += 100;\n",[28,13442,13443,13445,13447,13450,13452],{"class":30,"line":70},[28,13444,6606],{"class":211},[28,13446,1253],{"class":207},[28,13448,13449],{"class":211}," v ",[28,13451,1253],{"class":207},[28,13453,8917],{"class":211},[28,13455,13456],{"class":30,"line":78},[28,13457,1643],{"class":211},[28,13459,13460],{"class":30,"line":86},[28,13461,2477],{"emptyLinePlaceholder":134},[28,13463,13464,13466,13468],{"class":30,"line":97},[28,13465,215],{"class":207},[28,13467,2050],{"class":34},[28,13469,10930],{"class":211},[28,13471,13472],{"class":30,"line":108},[28,13473,2477],{"emptyLinePlaceholder":134},[28,13475,13476],{"class":30,"line":1407},[28,13477,13478],{"class":269},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[28,13480,13481],{"class":30,"line":1690},[28,13482,13483],{"class":269},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[28,13485,13486,13488,13490,13492,13494,13496],{"class":30,"line":1695},[28,13487,11298],{"class":207},[28,13489,13430],{"class":207},[28,13491,13011],{"class":211},[28,13493,257],{"class":207},[28,13495,2115],{"class":38},[28,13497,1370],{"class":211},[28,13499,13500],{"class":30,"line":1701},[28,13501,2477],{"emptyLinePlaceholder":134},[28,13503,13504,13507],{"class":30,"line":1706},[28,13505,13506],{"class":269},"    \u002F\u002Fref = 100;",[28,13508,13509],{"class":269},"  \u002F\u002F加入const后不可以修改变量\n",[28,13511,13512,13514,13516,13518,13520],{"class":30,"line":1720},[28,13513,6606],{"class":211},[28,13515,1253],{"class":207},[28,13517,13011],{"class":211},[28,13519,1253],{"class":207},[28,13521,8917],{"class":211},[28,13523,13524],{"class":30,"line":1725},[28,13525,2477],{"emptyLinePlaceholder":134},[28,13527,13528],{"class":30,"line":1731},[28,13529,13530],{"class":269},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[28,13532,13533,13535,13537,13539,13541],{"class":30,"line":1752},[28,13534,2062],{"class":207},[28,13536,10946],{"class":211},[28,13538,257],{"class":207},[28,13540,2115],{"class":38},[28,13542,1370],{"class":211},[28,13544,13545,13548],{"class":30,"line":1757},[28,13546,13547],{"class":34},"    showValue",[28,13549,13365],{"class":211},[28,13551,13552],{"class":30,"line":1771},[28,13553,2477],{"emptyLinePlaceholder":134},[28,13555,13556,13558,13560,13562],{"class":30,"line":1776},[28,13557,2380],{"class":34},[28,13559,212],{"class":211},[28,13561,2385],{"class":64},[28,13563,2796],{"class":211},[28,13565,13566],{"class":30,"line":1805},[28,13567,2477],{"emptyLinePlaceholder":134},[28,13569,13570,13572,13574],{"class":30,"line":1810},[28,13571,4167],{"class":207},[28,13573,4170],{"class":38},[28,13575,1370],{"class":211},[28,13577,13578],{"class":30,"line":1827},[28,13579,1643],{"class":211},[126,13581,13582],{},"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":23,"searchDepth":42,"depth":42,"links":13584},[13585,13586,13587,13588,13589,13590],{"id":12117,"depth":42,"text":12118},{"id":12296,"depth":42,"text":12297},{"id":12479,"depth":42,"text":12480},{"id":12883,"depth":42,"text":12884},{"id":13210,"depth":42,"text":13211},{"id":13390,"depth":42,"text":13391},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12109,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13597,"title":13598,"body":13599,"description":23,"extension":132,"meta":14680,"navigation":134,"path":14681,"seo":14682,"stem":14683,"__hash__":14684},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13600,"toc":14672},[13601,13604,13608,13611,13616,13848,13850,13861,13865,13868,13876,13980,13983,13987,13990,13994,13997,14002,14024,14030,14357,14360,14364,14372,14669],[10,13602,13598],{"id":13603},"_7函数高级部分",[149,13605,13607],{"id":13606},"_71函数默认参数","7.1函数默认参数",[14,13609,13610],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13612,5258,13613],{},[25,13614,13615],{}," 返回值类型  函数名 （参数= 默认值）{}",[18,13617,13619],{"className":198,"code":13618,"language":200,"meta":23,"style":23},"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",[25,13620,13621,13656,13671,13675,13679,13684,13689,13718,13738,13748,13752,13756,13764,13768,13796,13818,13822,13832,13836,13844],{"__ignoreMap":23},[28,13622,13623,13625,13627,13629,13631,13633,13635,13637,13639,13642,13644,13646,13648,13650,13652,13654],{"class":30,"line":31},[28,13624,215],{"class":207},[28,13626,11462],{"class":34},[28,13628,212],{"class":211},[28,13630,215],{"class":207},[28,13632,1476],{"class":5293},[28,13634,12512],{"class":211},[28,13636,215],{"class":207},[28,13638,2910],{"class":5293},[28,13640,13641],{"class":207}," =",[28,13643,2115],{"class":38},[28,13645,12512],{"class":211},[28,13647,215],{"class":207},[28,13649,2926],{"class":5293},[28,13651,13641],{"class":207},[28,13653,2115],{"class":38},[28,13655,12519],{"class":211},[28,13657,13658,13660,13662,13664,13666,13668],{"class":30,"line":42},[28,13659,4167],{"class":207},[28,13661,10946],{"class":211},[28,13663,691],{"class":207},[28,13665,10959],{"class":211},[28,13667,691],{"class":207},[28,13669,13670],{"class":211}," c;\n",[28,13672,13673],{"class":30,"line":50},[28,13674,1643],{"class":211},[28,13676,13677],{"class":30,"line":58},[28,13678,2477],{"emptyLinePlaceholder":134},[28,13680,13681],{"class":30,"line":70},[28,13682,13683],{"class":269},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[28,13685,13686],{"class":30,"line":78},[28,13687,13688],{"class":269},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[28,13690,13691,13693,13696,13698,13700,13702,13704,13706,13708,13710,13712,13714,13716],{"class":30,"line":86},[28,13692,215],{"class":207},[28,13694,13695],{"class":34}," func2",[28,13697,212],{"class":211},[28,13699,215],{"class":207},[28,13701,1476],{"class":5293},[28,13703,13641],{"class":207},[28,13705,2115],{"class":38},[28,13707,12512],{"class":211},[28,13709,215],{"class":207},[28,13711,2910],{"class":5293},[28,13713,13641],{"class":207},[28,13715,2115],{"class":38},[28,13717,2796],{"class":211},[28,13719,13720,13722,13724,13726,13728,13730,13732,13734,13736],{"class":30,"line":97},[28,13721,215],{"class":207},[28,13723,13695],{"class":34},[28,13725,212],{"class":211},[28,13727,215],{"class":207},[28,13729,1476],{"class":5293},[28,13731,12512],{"class":211},[28,13733,215],{"class":207},[28,13735,2910],{"class":5293},[28,13737,12519],{"class":211},[28,13739,13740,13742,13744,13746],{"class":30,"line":108},[28,13741,4167],{"class":207},[28,13743,10946],{"class":211},[28,13745,691],{"class":207},[28,13747,12540],{"class":211},[28,13749,13750],{"class":30,"line":1407},[28,13751,1643],{"class":211},[28,13753,13754],{"class":30,"line":1690},[28,13755,2477],{"emptyLinePlaceholder":134},[28,13757,13758,13760,13762],{"class":30,"line":1695},[28,13759,215],{"class":207},[28,13761,2050],{"class":34},[28,13763,10930],{"class":211},[28,13765,13766],{"class":30,"line":1701},[28,13767,2477],{"emptyLinePlaceholder":134},[28,13769,13770,13772,13774,13777,13779,13781,13783,13785,13787,13789,13792,13794],{"class":30,"line":1706},[28,13771,6606],{"class":211},[28,13773,1253],{"class":207},[28,13775,13776],{"class":64}," \"ret = \"",[28,13778,1522],{"class":207},[28,13780,11462],{"class":34},[28,13782,212],{"class":211},[28,13784,910],{"class":38},[28,13786,12512],{"class":211},[28,13788,910],{"class":38},[28,13790,13791],{"class":211},") ",[28,13793,1253],{"class":207},[28,13795,8917],{"class":211},[28,13797,13798,13800,13802,13804,13806,13808,13810,13812,13814,13816],{"class":30,"line":1720},[28,13799,6606],{"class":211},[28,13801,1253],{"class":207},[28,13803,13776],{"class":64},[28,13805,1522],{"class":207},[28,13807,11462],{"class":34},[28,13809,212],{"class":211},[28,13811,521],{"class":38},[28,13813,13791],{"class":211},[28,13815,1253],{"class":207},[28,13817,8917],{"class":211},[28,13819,13820],{"class":30,"line":1725},[28,13821,2477],{"emptyLinePlaceholder":134},[28,13823,13824,13826,13828,13830],{"class":30,"line":1731},[28,13825,2380],{"class":34},[28,13827,212],{"class":211},[28,13829,2385],{"class":64},[28,13831,2796],{"class":211},[28,13833,13834],{"class":30,"line":1752},[28,13835,2477],{"emptyLinePlaceholder":134},[28,13837,13838,13840,13842],{"class":30,"line":1757},[28,13839,4167],{"class":207},[28,13841,4170],{"class":38},[28,13843,1370],{"class":211},[28,13845,13846],{"class":30,"line":1771},[28,13847,1643],{"class":211},[14,13849,11409],{},[161,13851,13852,13855,13858],{},[119,13853,13854],{},"我传就用我；没传就用你",[119,13856,13857],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[119,13859,13860],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[149,13862,13864],{"id":13863},"_72函数的占位参数","7.2函数的占位参数",[14,13866,13867],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13869,13870,13872,13873],{},[359,13871,5258],{}," ",[25,13874,13875],{},"返回值类型 函数名 (数据类型){}",[18,13877,13879],{"className":198,"code":13878,"language":200,"meta":23,"style":23},"\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",[25,13880,13881,13886,13904,13917,13921,13929,13933,13950,13954,13964,13968,13976],{"__ignoreMap":23},[28,13882,13883],{"class":30,"line":31},[28,13884,13885],{"class":269},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[28,13887,13888,13890,13892,13894,13896,13898,13900,13902],{"class":30,"line":42},[28,13889,5441],{"class":207},[28,13891,11462],{"class":34},[28,13893,212],{"class":211},[28,13895,215],{"class":207},[28,13897,1476],{"class":5293},[28,13899,12512],{"class":211},[28,13901,215],{"class":207},[28,13903,12519],{"class":211},[28,13905,13906,13908,13910,13913,13915],{"class":30,"line":50},[28,13907,6606],{"class":211},[28,13909,1253],{"class":207},[28,13911,13912],{"class":64}," \"this is func\"",[28,13914,1522],{"class":207},[28,13916,8917],{"class":211},[28,13918,13919],{"class":30,"line":58},[28,13920,1643],{"class":211},[28,13922,13923,13925,13927],{"class":30,"line":70},[28,13924,215],{"class":207},[28,13926,2050],{"class":34},[28,13928,10930],{"class":211},[28,13930,13931],{"class":30,"line":78},[28,13932,2477],{"emptyLinePlaceholder":134},[28,13934,13935,13937,13939,13941,13943,13945,13947],{"class":30,"line":86},[28,13936,13362],{"class":34},[28,13938,212],{"class":211},[28,13940,656],{"class":38},[28,13942,588],{"class":211},[28,13944,656],{"class":38},[28,13946,6043],{"class":211},[28,13948,13949],{"class":269}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[28,13951,13952],{"class":30,"line":97},[28,13953,2477],{"emptyLinePlaceholder":134},[28,13955,13956,13958,13960,13962],{"class":30,"line":108},[28,13957,2380],{"class":34},[28,13959,212],{"class":211},[28,13961,2385],{"class":64},[28,13963,2796],{"class":211},[28,13965,13966],{"class":30,"line":1407},[28,13967,2477],{"emptyLinePlaceholder":134},[28,13969,13970,13972,13974],{"class":30,"line":1690},[28,13971,4167],{"class":207},[28,13973,4170],{"class":38},[28,13975,1370],{"class":211},[28,13977,13978],{"class":30,"line":1695},[28,13979,1643],{"class":211},[14,13981,13982],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[149,13984,13986],{"id":13985},"_73函数重载","7.3函数重载",[14,13988,13989],{},"意思是函数名是可以相同的",[177,13991,13993],{"id":13992},"_731基本语法","7.3.1基本语法",[14,13995,13996],{},"作用：函数名可以相同，提高复用性",[14,13998,13999],{},[359,14000,14001],{},"函数重载满足条件：",[116,14003,14004,14007,14010],{},[119,14005,14006],{},"同一个作用域下",[119,14008,14009],{},"函数名称相同",[119,14011,14012,14013,14016,14017,14020,14021],{},"函数参数",[359,14014,14015],{},"类型不同","  或者 ",[359,14018,14019],{},"个数不同"," 或者 ",[359,14022,14023],{},"顺序不同",[14,14025,14026,14029],{},[359,14027,14028],{},"注意:","  函数的返回值不可以作为函数重载的条件",[18,14031,14033],{"className":10018,"code":14032,"language":10020,"meta":23,"style":23},"\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",[25,14034,14035,14040,14048,14052,14065,14069,14083,14087,14100,14104,14119,14123,14136,14140,14161,14165,14178,14182,14202,14206,14219,14223,14227,14232,14237,14242,14247,14252,14256,14260,14268,14272,14278,14288,14298,14312,14327,14331,14341,14345,14353],{"__ignoreMap":23},[28,14036,14037],{"class":30,"line":31},[28,14038,14039],{"class":269},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[28,14041,14042,14044,14046],{"class":30,"line":42},[28,14043,5441],{"class":207},[28,14045,11462],{"class":34},[28,14047,2053],{"class":211},[28,14049,14050],{"class":30,"line":50},[28,14051,1624],{"class":211},[28,14053,14054,14056,14058,14061,14063],{"class":30,"line":58},[28,14055,6606],{"class":211},[28,14057,1253],{"class":207},[28,14059,14060],{"class":64}," \"func 的调用！\"",[28,14062,1522],{"class":207},[28,14064,8917],{"class":211},[28,14066,14067],{"class":30,"line":70},[28,14068,1643],{"class":211},[28,14070,14071,14073,14075,14077,14079,14081],{"class":30,"line":78},[28,14072,5441],{"class":207},[28,14074,11462],{"class":34},[28,14076,212],{"class":211},[28,14078,215],{"class":207},[28,14080,1476],{"class":5293},[28,14082,218],{"class":211},[28,14084,14085],{"class":30,"line":86},[28,14086,1624],{"class":211},[28,14088,14089,14091,14093,14096,14098],{"class":30,"line":97},[28,14090,6606],{"class":211},[28,14092,1253],{"class":207},[28,14094,14095],{"class":64}," \"func (int a) 的调用！\"",[28,14097,1522],{"class":207},[28,14099,8917],{"class":211},[28,14101,14102],{"class":30,"line":108},[28,14103,1643],{"class":211},[28,14105,14106,14108,14110,14112,14115,14117],{"class":30,"line":1407},[28,14107,5441],{"class":207},[28,14109,11462],{"class":34},[28,14111,212],{"class":211},[28,14113,14114],{"class":207},"double",[28,14116,1476],{"class":5293},[28,14118,218],{"class":211},[28,14120,14121],{"class":30,"line":1690},[28,14122,1624],{"class":211},[28,14124,14125,14127,14129,14132,14134],{"class":30,"line":1695},[28,14126,6606],{"class":211},[28,14128,1253],{"class":207},[28,14130,14131],{"class":64}," \"func (double a)的调用！\"",[28,14133,1522],{"class":207},[28,14135,8917],{"class":211},[28,14137,14138],{"class":30,"line":1701},[28,14139,1643],{"class":211},[28,14141,14142,14144,14146,14148,14150,14152,14155,14157,14159],{"class":30,"line":1706},[28,14143,5441],{"class":207},[28,14145,11462],{"class":34},[28,14147,212],{"class":211},[28,14149,215],{"class":207},[28,14151,1476],{"class":5293},[28,14153,14154],{"class":211}," ,",[28,14156,14114],{"class":207},[28,14158,2910],{"class":5293},[28,14160,218],{"class":211},[28,14162,14163],{"class":30,"line":1720},[28,14164,1624],{"class":211},[28,14166,14167,14169,14171,14174,14176],{"class":30,"line":1725},[28,14168,6606],{"class":211},[28,14170,1253],{"class":207},[28,14172,14173],{"class":64}," \"func (int a ,double b) 的调用！\"",[28,14175,1522],{"class":207},[28,14177,8917],{"class":211},[28,14179,14180],{"class":30,"line":1731},[28,14181,1643],{"class":211},[28,14183,14184,14186,14188,14190,14192,14194,14196,14198,14200],{"class":30,"line":1752},[28,14185,5441],{"class":207},[28,14187,11462],{"class":34},[28,14189,212],{"class":211},[28,14191,14114],{"class":207},[28,14193,1476],{"class":5293},[28,14195,14154],{"class":211},[28,14197,215],{"class":207},[28,14199,2910],{"class":5293},[28,14201,218],{"class":211},[28,14203,14204],{"class":30,"line":1757},[28,14205,1624],{"class":211},[28,14207,14208,14210,14212,14215,14217],{"class":30,"line":1771},[28,14209,6606],{"class":211},[28,14211,1253],{"class":207},[28,14213,14214],{"class":64}," \"func (double a ,int b)的调用！\"",[28,14216,1522],{"class":207},[28,14218,8917],{"class":211},[28,14220,14221],{"class":30,"line":1776},[28,14222,1643],{"class":211},[28,14224,14225],{"class":30,"line":1805},[28,14226,2477],{"emptyLinePlaceholder":134},[28,14228,14229],{"class":30,"line":1810},[28,14230,14231],{"class":269},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[28,14233,14234],{"class":30,"line":1827},[28,14235,14236],{"class":269},"\u002F\u002Fint func(double a, int b)\n",[28,14238,14239],{"class":30,"line":1832},[28,14240,14241],{"class":269},"\u002F\u002F{\n",[28,14243,14244],{"class":30,"line":1837},[28,14245,14246],{"class":269},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[28,14248,14249],{"class":30,"line":1842},[28,14250,14251],{"class":269},"\u002F\u002F}\n",[28,14253,14254],{"class":30,"line":1856},[28,14255,2477],{"emptyLinePlaceholder":134},[28,14257,14258],{"class":30,"line":1861},[28,14259,2477],{"emptyLinePlaceholder":134},[28,14261,14262,14264,14266],{"class":30,"line":2654},[28,14263,215],{"class":207},[28,14265,2050],{"class":34},[28,14267,10930],{"class":211},[28,14269,14270],{"class":30,"line":2668},[28,14271,2477],{"emptyLinePlaceholder":134},[28,14273,14274,14276],{"class":30,"line":2676},[28,14275,13362],{"class":34},[28,14277,5713],{"class":211},[28,14279,14280,14282,14284,14286],{"class":30,"line":2681},[28,14281,13362],{"class":34},[28,14283,212],{"class":211},[28,14285,656],{"class":38},[28,14287,2796],{"class":211},[28,14289,14290,14292,14294,14296],{"class":30,"line":2687},[28,14291,13362],{"class":34},[28,14293,212],{"class":211},[28,14295,260],{"class":38},[28,14297,2796],{"class":211},[28,14299,14300,14302,14304,14306,14308,14310],{"class":30,"line":2693},[28,14301,13362],{"class":34},[28,14303,212],{"class":211},[28,14305,656],{"class":38},[28,14307,588],{"class":211},[28,14309,260],{"class":38},[28,14311,2796],{"class":211},[28,14313,14314,14316,14318,14320,14323,14325],{"class":30,"line":2698},[28,14315,13362],{"class":34},[28,14317,212],{"class":211},[28,14319,260],{"class":38},[28,14321,14322],{"class":211}," , ",[28,14324,656],{"class":38},[28,14326,2796],{"class":211},[28,14328,14329],{"class":30,"line":8025},[28,14330,13287],{"class":211},[28,14332,14333,14335,14337,14339],{"class":30,"line":8049},[28,14334,2380],{"class":34},[28,14336,212],{"class":211},[28,14338,2385],{"class":64},[28,14340,2796],{"class":211},[28,14342,14343],{"class":30,"line":8054},[28,14344,2477],{"emptyLinePlaceholder":134},[28,14346,14347,14349,14351],{"class":30,"line":8060},[28,14348,4167],{"class":207},[28,14350,4170],{"class":38},[28,14352,1370],{"class":211},[28,14354,14355],{"class":30,"line":8087},[28,14356,1643],{"class":211},[14,14358,14359],{},"重点：函数返回值不可以作为函数重载条件！",[177,14361,14363],{"id":14362},"_732注意事项","7.3.2注意事项",[116,14365,14366,14369],{},[119,14367,14368],{},"引用作为重载条件!!!",[119,14370,14371],{},"函数重载碰到函数默认参数",[18,14373,14375],{"className":198,"code":14374,"language":200,"meta":23,"style":23},"\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",[25,14376,14377,14382,14387,14391,14407,14411,14424,14428,14432,14450,14454,14467,14471,14475,14479,14484,14488,14512,14516,14529,14533,14537,14551,14555,14568,14572,14576,14584,14588,14600,14610,14623,14627,14631,14639,14643,14653,14657,14665],{"__ignoreMap":23},[28,14378,14379],{"class":30,"line":31},[28,14380,14381],{"class":269},"\u002F\u002F函数重载注意事项\n",[28,14383,14384],{"class":30,"line":42},[28,14385,14386],{"class":269},"\u002F\u002F1、引用作为重载条件\n",[28,14388,14389],{"class":30,"line":50},[28,14390,2477],{"emptyLinePlaceholder":134},[28,14392,14393,14395,14397,14399,14401,14403,14405],{"class":30,"line":58},[28,14394,5441],{"class":207},[28,14396,11462],{"class":34},[28,14398,212],{"class":211},[28,14400,215],{"class":207},[28,14402,10661],{"class":207},[28,14404,448],{"class":5293},[28,14406,218],{"class":211},[28,14408,14409],{"class":30,"line":70},[28,14410,1624],{"class":211},[28,14412,14413,14415,14417,14420,14422],{"class":30,"line":78},[28,14414,6606],{"class":211},[28,14416,1253],{"class":207},[28,14418,14419],{"class":64}," \"func (int &a) 调用 \"",[28,14421,1522],{"class":207},[28,14423,8917],{"class":211},[28,14425,14426],{"class":30,"line":86},[28,14427,1643],{"class":211},[28,14429,14430],{"class":30,"line":97},[28,14431,2477],{"emptyLinePlaceholder":134},[28,14433,14434,14436,14438,14440,14442,14444,14446,14448],{"class":30,"line":108},[28,14435,5441],{"class":207},[28,14437,11462],{"class":34},[28,14439,212],{"class":211},[28,14441,6869],{"class":207},[28,14443,2459],{"class":207},[28,14445,10661],{"class":207},[28,14447,448],{"class":5293},[28,14449,218],{"class":211},[28,14451,14452],{"class":30,"line":1407},[28,14453,1624],{"class":211},[28,14455,14456,14458,14460,14463,14465],{"class":30,"line":1690},[28,14457,6606],{"class":211},[28,14459,1253],{"class":207},[28,14461,14462],{"class":64}," \"func (const int &a) 调用 \"",[28,14464,1522],{"class":207},[28,14466,8917],{"class":211},[28,14468,14469],{"class":30,"line":1695},[28,14470,1643],{"class":211},[28,14472,14473],{"class":30,"line":1701},[28,14474,2477],{"emptyLinePlaceholder":134},[28,14476,14477],{"class":30,"line":1706},[28,14478,2477],{"emptyLinePlaceholder":134},[28,14480,14481],{"class":30,"line":1720},[28,14482,14483],{"class":269},"\u002F\u002F2、函数重载碰到函数默认参数\n",[28,14485,14486],{"class":30,"line":1725},[28,14487,2477],{"emptyLinePlaceholder":134},[28,14489,14490,14492,14494,14496,14498,14500,14502,14504,14506,14508,14510],{"class":30,"line":1731},[28,14491,5441],{"class":207},[28,14493,13695],{"class":34},[28,14495,212],{"class":211},[28,14497,215],{"class":207},[28,14499,1476],{"class":5293},[28,14501,12512],{"class":211},[28,14503,215],{"class":207},[28,14505,2910],{"class":5293},[28,14507,13641],{"class":207},[28,14509,2115],{"class":38},[28,14511,218],{"class":211},[28,14513,14514],{"class":30,"line":1752},[28,14515,1624],{"class":211},[28,14517,14518,14520,14522,14525,14527],{"class":30,"line":1757},[28,14519,6606],{"class":211},[28,14521,1253],{"class":207},[28,14523,14524],{"class":64}," \"func2(int a, int b = 10) 调用\"",[28,14526,1522],{"class":207},[28,14528,8917],{"class":211},[28,14530,14531],{"class":30,"line":1771},[28,14532,1643],{"class":211},[28,14534,14535],{"class":30,"line":1776},[28,14536,2477],{"emptyLinePlaceholder":134},[28,14538,14539,14541,14543,14545,14547,14549],{"class":30,"line":1805},[28,14540,5441],{"class":207},[28,14542,13695],{"class":34},[28,14544,212],{"class":211},[28,14546,215],{"class":207},[28,14548,1476],{"class":5293},[28,14550,218],{"class":211},[28,14552,14553],{"class":30,"line":1810},[28,14554,1624],{"class":211},[28,14556,14557,14559,14561,14564,14566],{"class":30,"line":1827},[28,14558,6606],{"class":211},[28,14560,1253],{"class":207},[28,14562,14563],{"class":64}," \"func2(int a) 调用\"",[28,14565,1522],{"class":207},[28,14567,8917],{"class":211},[28,14569,14570],{"class":30,"line":1832},[28,14571,1643],{"class":211},[28,14573,14574],{"class":30,"line":1837},[28,14575,2477],{"emptyLinePlaceholder":134},[28,14577,14578,14580,14582],{"class":30,"line":1842},[28,14579,215],{"class":207},[28,14581,2050],{"class":34},[28,14583,10930],{"class":211},[28,14585,14586],{"class":30,"line":1856},[28,14587,13287],{"class":211},[28,14589,14590,14592,14594,14596,14598],{"class":30,"line":1861},[28,14591,2062],{"class":207},[28,14593,10946],{"class":211},[28,14595,257],{"class":207},[28,14597,2115],{"class":38},[28,14599,1370],{"class":211},[28,14601,14602,14604,14607],{"class":30,"line":2654},[28,14603,13362],{"class":34},[28,14605,14606],{"class":211},"(a);",[28,14608,14609],{"class":269}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[28,14611,14612,14614,14616,14618,14620],{"class":30,"line":2668},[28,14613,13362],{"class":34},[28,14615,212],{"class":211},[28,14617,656],{"class":38},[28,14619,6043],{"class":211},[28,14621,14622],{"class":269},"\u002F\u002F调用有const   10是个常量\n",[28,14624,14625],{"class":30,"line":2676},[28,14626,2477],{"emptyLinePlaceholder":134},[28,14628,14629],{"class":30,"line":2681},[28,14630,2477],{"emptyLinePlaceholder":134},[28,14632,14633,14636],{"class":30,"line":2687},[28,14634,14635],{"class":269},"    \u002F\u002Ffunc2(10);",[28,14637,14638],{"class":269}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[28,14640,14641],{"class":30,"line":2693},[28,14642,2477],{"emptyLinePlaceholder":134},[28,14644,14645,14647,14649,14651],{"class":30,"line":2698},[28,14646,2380],{"class":34},[28,14648,212],{"class":211},[28,14650,2385],{"class":64},[28,14652,2796],{"class":211},[28,14654,14655],{"class":30,"line":8025},[28,14656,2477],{"emptyLinePlaceholder":134},[28,14658,14659,14661,14663],{"class":30,"line":8049},[28,14660,4167],{"class":207},[28,14662,4170],{"class":38},[28,14664,1370],{"class":211},[28,14666,14667],{"class":30,"line":8054},[28,14668,1643],{"class":211},[126,14670,14671],{},"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":23,"searchDepth":42,"depth":42,"links":14673},[14674,14675,14676],{"id":13606,"depth":42,"text":13607},{"id":13863,"depth":42,"text":13864},{"id":13985,"depth":42,"text":13986,"children":14677},[14678,14679],{"id":13992,"depth":50,"text":13993},{"id":14362,"depth":50,"text":14363},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13598,"description":23},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14686,"title":14687,"body":14688,"description":23442,"extension":132,"meta":23443,"navigation":134,"path":23444,"seo":23445,"stem":23446,"__hash__":23447},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14689,"toc":23423},[14690,14693,14699,14706,14711,14714,14717,14720,14724,14728,14731,14734,14742,14747,14750,14757,14762,14921,14924,15177,15180,15183,15186,15191,15194,15197,15208,15213,15449,15453,15463,15466,15474,15621,15625,15628,15631,15635,16080,16084,16092,16100,17012,17019,17024,17652,17655,17658,17661,17780,17783,17870,17873,17999,18002,18096,18099,18452,18456,18464,18468,18475,18478,18481,18492,18498,18503,18515,18523,18543,18551,18568,18754,18757,18761,18764,18767,18770,18773,18776,18779,18782,19242,19248,19252,19255,19266,19853,19856,20345,20349,20352,20355,20358,20361,20364,20372,20768,20772,20775,20778,21225,21228,21231,21236,21239,21244,21247,21251,21254,21256,21262,21265,21571,21581,21622,21626,21629,21631,21664,21667,21974,21976,21991,21994,22017,22026,22032,22035,22039,22042,22045,22050,22061,22066,22074,22079,22209,22212,22215,22390,22395,22607,22611,22614,22728,22733,22972,22976,22980,22983,22986,22991,23096,23099,23102,23105,23109,23220,23223,23226,23231,23283,23286,23289,23294,23340,23343,23348,23416,23418,23421],[10,14691,14687],{"id":14692},"_8类和对象",[14,14694,14695,14696],{},"C++面向对象的三大特性为",[359,14697,14698],{},"封装、继承、多态",[14,14700,14701,14702,14705],{},"C++认为",[359,14703,14704],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14707,14708],{},[359,14709,14710],{},"例如：",[14,14712,14713],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14715,14716],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14718,14719],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[149,14721,14723],{"id":14722},"_81封装","8.1封装",[177,14725,14727],{"id":14726},"_811封装的意义","8.1.1封装的意义",[14,14729,14730],{},"封装是C++面向对象三大特性之一",[14,14732,14733],{},"封装的意义：",[116,14735,14736,14739],{},[119,14737,14738],{},"将属性和行为作为一个整体，表现生活中的事物",[119,14740,14741],{},"将属性和行为加以权限控制",[14,14743,14744],{},[359,14745,14746],{},"封装意义一：",[14,14748,14749],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14751,14752,13872,14754],{},[359,14753,5258],{},[25,14755,14756],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[161,14758,14759],{},[119,14760,14761],{},"**示例1：**设计一个圆类，求圆的周长",[18,14763,14765],{"className":198,"code":14764,"language":200,"meta":23,"style":23},"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",[25,14766,14767,14775,14779,14784,14789,14794,14799,14806,14811,14821,14825,14843,14847,14851,14859,14863,14868,14873,14878,14883,14894,14917],{"__ignoreMap":23},[28,14768,14769,14772],{"class":30,"line":31},[28,14770,14771],{"class":207},"class",[28,14773,14774],{"class":34}," Circle\n",[28,14776,14777],{"class":30,"line":42},[28,14778,1624],{"class":211},[28,14780,14781],{"class":30,"line":50},[28,14782,14783],{"class":269},"    \u002F\u002F访问权限\n",[28,14785,14786],{"class":30,"line":58},[28,14787,14788],{"class":269},"    \u002F\u002F公共权限\n",[28,14790,14791],{"class":30,"line":70},[28,14792,14793],{"class":207},"public:\n",[28,14795,14796],{"class":30,"line":78},[28,14797,14798],{"class":269},"    \u002F\u002F属性\n",[28,14800,14801,14803],{"class":30,"line":86},[28,14802,2062],{"class":207},[28,14804,14805],{"class":211}," m_r;\n",[28,14807,14808],{"class":30,"line":97},[28,14809,14810],{"class":269},"    \u002F\u002F行为\n",[28,14812,14813,14816,14819],{"class":30,"line":108},[28,14814,14815],{"class":207},"    double",[28,14817,14818],{"class":34}," calculateZC",[28,14820,2053],{"class":211},[28,14822,14823],{"class":30,"line":1407},[28,14824,2107],{"class":211},[28,14826,14827,14830,14833,14835,14838,14840],{"class":30,"line":1690},[28,14828,14829],{"class":207},"        return",[28,14831,14832],{"class":38}," 2",[28,14834,665],{"class":207},[28,14836,14837],{"class":211},"PI",[28,14839,665],{"class":207},[28,14841,14842],{"class":211},"m_r;\n",[28,14844,14845],{"class":30,"line":1695},[28,14846,2264],{"class":211},[28,14848,14849],{"class":30,"line":1701},[28,14850,4072],{"class":211},[28,14852,14853,14855,14857],{"class":30,"line":1706},[28,14854,215],{"class":207},[28,14856,2050],{"class":34},[28,14858,2053],{"class":211},[28,14860,14861],{"class":30,"line":1720},[28,14862,1624],{"class":211},[28,14864,14865],{"class":30,"line":1725},[28,14866,14867],{"class":269},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[28,14869,14870],{"class":30,"line":1731},[28,14871,14872],{"class":269},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[28,14874,14875],{"class":30,"line":1752},[28,14876,14877],{"class":211},"    Circle c1;\n",[28,14879,14880],{"class":30,"line":1757},[28,14881,14882],{"class":269},"    \u002F\u002F给圆对象 的属性进行赋值\n",[28,14884,14885,14888,14890,14892],{"class":30,"line":1771},[28,14886,14887],{"class":211},"    c1.m_r",[28,14889,257],{"class":207},[28,14891,656],{"class":38},[28,14893,1370],{"class":211},[28,14895,14896,14898,14900,14903,14905,14908,14911,14913,14915],{"class":30,"line":1776},[28,14897,1629],{"class":211},[28,14899,1253],{"class":207},[28,14901,14902],{"class":64},"\"圆的周长\"",[28,14904,1253],{"class":207},[28,14906,14907],{"class":211},"c1.",[28,14909,14910],{"class":34},"calculateZC",[28,14912,2504],{"class":211},[28,14914,1253],{"class":207},[28,14916,1275],{"class":211},[28,14918,14919],{"class":30,"line":1805},[28,14920,1643],{"class":211},[14,14922,14923],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[18,14925,14927],{"className":198,"code":14926,"language":200,"meta":23,"style":23},"#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",[25,14928,14929,14935,14945,14951,14957,14961,14965,14970,14977,14982,15000,15004,15014,15018,15023,15039,15043,15053,15057,15062,15070,15074,15106,15110,15114,15122,15126,15131,15136,15150,15164,15173],{"__ignoreMap":23},[28,14930,14931,14933],{"class":30,"line":31},[28,14932,2027],{"class":207},[28,14934,2030],{"class":64},[28,14936,14937,14939,14941,14943],{"class":30,"line":42},[28,14938,2035],{"class":207},[28,14940,2038],{"class":207},[28,14942,2041],{"class":34},[28,14944,1370],{"class":211},[28,14946,14947,14949],{"class":30,"line":50},[28,14948,2027],{"class":207},[28,14950,7826],{"class":64},[28,14952,14953,14955],{"class":30,"line":58},[28,14954,14771],{"class":207},[28,14956,7839],{"class":34},[28,14958,14959],{"class":30,"line":70},[28,14960,1624],{"class":211},[28,14962,14963],{"class":30,"line":78},[28,14964,14793],{"class":207},[28,14966,14967],{"class":30,"line":86},[28,14968,14969],{"class":211},"    string m_name;\n",[28,14971,14972,14974],{"class":30,"line":97},[28,14973,2062],{"class":207},[28,14975,14976],{"class":211}," m_id;\n",[28,14978,14979],{"class":30,"line":108},[28,14980,14981],{"class":269},"    \u002F\u002F赋值姓名\n",[28,14983,14984,14987,14990,14992,14995,14998],{"class":30,"line":1407},[28,14985,14986],{"class":207},"    void",[28,14988,14989],{"class":34}," setName",[28,14991,212],{"class":211},[28,14993,14994],{"class":34},"string",[28,14996,14997],{"class":5293}," name",[28,14999,218],{"class":211},[28,15001,15002],{"class":30,"line":1690},[28,15003,2107],{"class":211},[28,15005,15006,15009,15011],{"class":30,"line":1695},[28,15007,15008],{"class":211},"        m_name",[28,15010,257],{"class":207},[28,15012,15013],{"class":211},"name;\n",[28,15015,15016],{"class":30,"line":1701},[28,15017,2264],{"class":211},[28,15019,15020],{"class":30,"line":1706},[28,15021,15022],{"class":269},"    \u002F\u002F赋值学号\n",[28,15024,15025,15027,15030,15032,15034,15037],{"class":30,"line":1720},[28,15026,14986],{"class":207},[28,15028,15029],{"class":34}," setId",[28,15031,212],{"class":211},[28,15033,215],{"class":207},[28,15035,15036],{"class":5293}," id",[28,15038,218],{"class":211},[28,15040,15041],{"class":30,"line":1725},[28,15042,2107],{"class":211},[28,15044,15045,15048,15050],{"class":30,"line":1731},[28,15046,15047],{"class":211},"        m_id",[28,15049,257],{"class":207},[28,15051,15052],{"class":211},"id;\n",[28,15054,15055],{"class":30,"line":1752},[28,15056,2264],{"class":211},[28,15058,15059],{"class":30,"line":1757},[28,15060,15061],{"class":269},"    \u002F\u002F打印学生信息\n",[28,15063,15064,15066,15068],{"class":30,"line":1771},[28,15065,14986],{"class":207},[28,15067,9692],{"class":34},[28,15069,2053],{"class":211},[28,15071,15072],{"class":30,"line":1776},[28,15073,2107],{"class":211},[28,15075,15076,15078,15080,15083,15085,15088,15090,15092,15094,15097,15099,15102,15104],{"class":30,"line":1805},[28,15077,3528],{"class":211},[28,15079,1253],{"class":207},[28,15081,15082],{"class":64},"\"姓名：\"",[28,15084,1253],{"class":207},[28,15086,15087],{"class":211},"m_name",[28,15089,1253],{"class":207},[28,15091,4436],{"class":64},[28,15093,1253],{"class":207},[28,15095,15096],{"class":64},"\"学号：\"",[28,15098,1253],{"class":207},[28,15100,15101],{"class":211},"m_id",[28,15103,1253],{"class":207},[28,15105,1275],{"class":211},[28,15107,15108],{"class":30,"line":1810},[28,15109,2264],{"class":211},[28,15111,15112],{"class":30,"line":1827},[28,15113,4072],{"class":211},[28,15115,15116,15118,15120],{"class":30,"line":1832},[28,15117,215],{"class":207},[28,15119,2050],{"class":34},[28,15121,2053],{"class":211},[28,15123,15124],{"class":30,"line":1837},[28,15125,1624],{"class":211},[28,15127,15128],{"class":30,"line":1842},[28,15129,15130],{"class":269},"    \u002F\u002F实例化\n",[28,15132,15133],{"class":30,"line":1856},[28,15134,15135],{"class":211},"    Student s1;\n",[28,15137,15138,15141,15144,15146,15148],{"class":30,"line":1861},[28,15139,15140],{"class":211},"    s1.",[28,15142,15143],{"class":34},"setName",[28,15145,212],{"class":211},[28,15147,7993],{"class":64},[28,15149,2796],{"class":211},[28,15151,15152,15154,15157,15159,15162],{"class":30,"line":2654},[28,15153,15140],{"class":211},[28,15155,15156],{"class":34},"setId",[28,15158,212],{"class":211},[28,15160,15161],{"class":38},"123456",[28,15163,2796],{"class":211},[28,15165,15166,15168,15171],{"class":30,"line":2668},[28,15167,15140],{"class":211},[28,15169,15170],{"class":34},"printInfo",[28,15172,5713],{"class":211},[28,15174,15175],{"class":30,"line":2676},[28,15176,1643],{"class":211},[14,15178,15179],{},"类中的属性和行为统称为成员",[14,15181,15182],{},"属性：成员属性(成员变量)",[14,15184,15185],{},"方法：成员函数(成员方法)",[14,15187,15188],{},[359,15189,15190],{},"封装意义二：",[14,15192,15193],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15195,15196],{},"访问权限有三种：",[161,15198,15199,15202,15205],{},[119,15200,15201],{},"public        公共权限",[119,15203,15204],{},"protected 保护权限",[119,15206,15207],{},"private      私有权限",[14,15209,15210],{},[359,15211,15212],{},"示例：",[18,15214,15216],{"className":10018,"code":15215,"language":10020,"meta":23,"style":23},"\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",[25,15217,15218,15223,15228,15233,15238,15242,15249,15253,15258,15262,15267,15271,15276,15281,15286,15290,15295,15300,15307,15311,15315,15323,15327,15338,15350,15362,15366,15370,15374,15382,15386,15391,15403,15411,15419,15423,15433,15437,15445],{"__ignoreMap":23},[28,15219,15220],{"class":30,"line":31},[28,15221,15222],{"class":269},"\u002F\u002F三种权限\n",[28,15224,15225],{"class":30,"line":42},[28,15226,15227],{"class":269},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[28,15229,15230],{"class":30,"line":50},[28,15231,15232],{"class":269},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[28,15234,15235],{"class":30,"line":58},[28,15236,15237],{"class":269},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[28,15239,15240],{"class":30,"line":70},[28,15241,2477],{"emptyLinePlaceholder":134},[28,15243,15244,15246],{"class":30,"line":78},[28,15245,14771],{"class":207},[28,15247,15248],{"class":34}," Person\n",[28,15250,15251],{"class":30,"line":86},[28,15252,1624],{"class":211},[28,15254,15255],{"class":30,"line":97},[28,15256,15257],{"class":269},"    \u002F\u002F姓名  公共权限\n",[28,15259,15260],{"class":30,"line":108},[28,15261,14793],{"class":207},[28,15263,15264],{"class":30,"line":1407},[28,15265,15266],{"class":211},"    string m_Name;\n",[28,15268,15269],{"class":30,"line":1690},[28,15270,2477],{"emptyLinePlaceholder":134},[28,15272,15273],{"class":30,"line":1695},[28,15274,15275],{"class":269},"    \u002F\u002F汽车  保护权限\n",[28,15277,15278],{"class":30,"line":1701},[28,15279,15280],{"class":207},"protected:\n",[28,15282,15283],{"class":30,"line":1706},[28,15284,15285],{"class":211},"    string m_Car;\n",[28,15287,15288],{"class":30,"line":1720},[28,15289,2477],{"emptyLinePlaceholder":134},[28,15291,15292],{"class":30,"line":1725},[28,15293,15294],{"class":269},"    \u002F\u002F银行卡密码  私有权限\n",[28,15296,15297],{"class":30,"line":1731},[28,15298,15299],{"class":207},"private:\n",[28,15301,15302,15304],{"class":30,"line":1752},[28,15303,2062],{"class":207},[28,15305,15306],{"class":211}," m_Password;\n",[28,15308,15309],{"class":30,"line":1757},[28,15310,2477],{"emptyLinePlaceholder":134},[28,15312,15313],{"class":30,"line":1771},[28,15314,14793],{"class":207},[28,15316,15317,15319,15321],{"class":30,"line":1776},[28,15318,14986],{"class":207},[28,15320,11462],{"class":34},[28,15322,2053],{"class":211},[28,15324,15325],{"class":30,"line":1805},[28,15326,2107],{"class":211},[28,15328,15329,15332,15334,15336],{"class":30,"line":1810},[28,15330,15331],{"class":211},"        m_Name ",[28,15333,257],{"class":207},[28,15335,9015],{"class":64},[28,15337,1370],{"class":211},[28,15339,15340,15343,15345,15348],{"class":30,"line":1827},[28,15341,15342],{"class":211},"        m_Car ",[28,15344,257],{"class":207},[28,15346,15347],{"class":64}," \"拖拉机\"",[28,15349,1370],{"class":211},[28,15351,15352,15355,15357,15360],{"class":30,"line":1832},[28,15353,15354],{"class":211},"        m_Password ",[28,15356,257],{"class":207},[28,15358,15359],{"class":38}," 123456",[28,15361,1370],{"class":211},[28,15363,15364],{"class":30,"line":1837},[28,15365,2264],{"class":211},[28,15367,15368],{"class":30,"line":1842},[28,15369,4072],{"class":211},[28,15371,15372],{"class":30,"line":1856},[28,15373,2477],{"emptyLinePlaceholder":134},[28,15375,15376,15378,15380],{"class":30,"line":1861},[28,15377,215],{"class":207},[28,15379,2050],{"class":34},[28,15381,10930],{"class":211},[28,15383,15384],{"class":30,"line":2654},[28,15385,2477],{"emptyLinePlaceholder":134},[28,15387,15388],{"class":30,"line":2668},[28,15389,15390],{"class":211},"    Person p;\n",[28,15392,15393,15396,15398,15401],{"class":30,"line":2676},[28,15394,15395],{"class":211},"    p.m_Name ",[28,15397,257],{"class":207},[28,15399,15400],{"class":64}," \"李四\"",[28,15402,1370],{"class":211},[28,15404,15405,15408],{"class":30,"line":2681},[28,15406,15407],{"class":269},"    \u002F\u002Fp.m_Car = \"奔驰\";",[28,15409,15410],{"class":269},"  \u002F\u002F保护权限类外访问不到\n",[28,15412,15413,15416],{"class":30,"line":2687},[28,15414,15415],{"class":269},"    \u002F\u002Fp.m_Password = 123;",[28,15417,15418],{"class":269}," \u002F\u002F私有权限类外访问不到\n",[28,15420,15421],{"class":30,"line":2693},[28,15422,2477],{"emptyLinePlaceholder":134},[28,15424,15425,15427,15429,15431],{"class":30,"line":2698},[28,15426,2380],{"class":34},[28,15428,212],{"class":211},[28,15430,2385],{"class":64},[28,15432,2796],{"class":211},[28,15434,15435],{"class":30,"line":8025},[28,15436,2477],{"emptyLinePlaceholder":134},[28,15438,15439,15441,15443],{"class":30,"line":8049},[28,15440,4167],{"class":207},[28,15442,4170],{"class":38},[28,15444,1370],{"class":211},[28,15446,15447],{"class":30,"line":8054},[28,15448,1643],{"class":211},[177,15450,15452],{"id":15451},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15454,15455,15456,15459,15460],{},"在C++中 struct和class唯一的",[359,15457,15458],{},"区别","就在于 ",[359,15461,15462],{},"默认的访问权限不同",[14,15464,15465],{},"区别：",[116,15467,15468,15471],{},[119,15469,15470],{},"struct 默认权限为公共",[119,15472,15473],{},"class   默认权限为私有",[18,15475,15477],{"className":10018,"code":15476,"language":10020,"meta":23,"style":23},"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",[25,15478,15479,15486,15490,15500,15504,15508,15515,15519,15529,15533,15537,15545,15549,15554,15568,15572,15577,15591,15595,15605,15609,15617],{"__ignoreMap":23},[28,15480,15481,15483],{"class":30,"line":31},[28,15482,14771],{"class":207},[28,15484,15485],{"class":34}," C1\n",[28,15487,15488],{"class":30,"line":42},[28,15489,1624],{"class":211},[28,15491,15492,15494,15497],{"class":30,"line":50},[28,15493,2062],{"class":207},[28,15495,15496],{"class":211},"  m_A;",[28,15498,15499],{"class":269}," \u002F\u002F默认是私有权限\n",[28,15501,15502],{"class":30,"line":58},[28,15503,4072],{"class":211},[28,15505,15506],{"class":30,"line":70},[28,15507,2477],{"emptyLinePlaceholder":134},[28,15509,15510,15512],{"class":30,"line":78},[28,15511,7836],{"class":207},[28,15513,15514],{"class":34}," C2\n",[28,15516,15517],{"class":30,"line":86},[28,15518,1624],{"class":211},[28,15520,15521,15523,15526],{"class":30,"line":97},[28,15522,2062],{"class":207},[28,15524,15525],{"class":211}," m_A;",[28,15527,15528],{"class":269},"  \u002F\u002F默认是公共权限\n",[28,15530,15531],{"class":30,"line":108},[28,15532,4072],{"class":211},[28,15534,15535],{"class":30,"line":1407},[28,15536,2477],{"emptyLinePlaceholder":134},[28,15538,15539,15541,15543],{"class":30,"line":1690},[28,15540,215],{"class":207},[28,15542,2050],{"class":34},[28,15544,10930],{"class":211},[28,15546,15547],{"class":30,"line":1695},[28,15548,2477],{"emptyLinePlaceholder":134},[28,15550,15551],{"class":30,"line":1701},[28,15552,15553],{"class":211},"    C1 c1;\n",[28,15555,15556,15559,15561,15563,15565],{"class":30,"line":1706},[28,15557,15558],{"class":211},"    c1.m_A ",[28,15560,257],{"class":207},[28,15562,2115],{"class":38},[28,15564,266],{"class":211},[28,15566,15567],{"class":269}," \u002F\u002F错误，访问权限是私有\n",[28,15569,15570],{"class":30,"line":1720},[28,15571,2477],{"emptyLinePlaceholder":134},[28,15573,15574],{"class":30,"line":1725},[28,15575,15576],{"class":211},"    C2 c2;\n",[28,15578,15579,15582,15584,15586,15588],{"class":30,"line":1731},[28,15580,15581],{"class":211},"    c2.m_A ",[28,15583,257],{"class":207},[28,15585,2115],{"class":38},[28,15587,266],{"class":211},[28,15589,15590],{"class":269}," \u002F\u002F正确，访问权限是公共\n",[28,15592,15593],{"class":30,"line":1752},[28,15594,2477],{"emptyLinePlaceholder":134},[28,15596,15597,15599,15601,15603],{"class":30,"line":1757},[28,15598,2380],{"class":34},[28,15600,212],{"class":211},[28,15602,2385],{"class":64},[28,15604,2796],{"class":211},[28,15606,15607],{"class":30,"line":1771},[28,15608,2477],{"emptyLinePlaceholder":134},[28,15610,15611,15613,15615],{"class":30,"line":1776},[28,15612,4167],{"class":207},[28,15614,4170],{"class":38},[28,15616,1370],{"class":211},[28,15618,15619],{"class":30,"line":1805},[28,15620,1643],{"class":211},[177,15622,15624],{"id":15623},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15626,15627],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15629,15630],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15632,15633],{},[359,15634,15212],{},[18,15636,15638],{"className":10018,"code":15637,"language":10020,"meta":23,"style":23},"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",[25,15639,15640,15650,15654,15658,15663,15677,15686,15690,15700,15704,15711,15715,15719,15723,15728,15737,15744,15748,15753,15769,15792,15805,15812,15816,15825,15829,15833,15838,15854,15864,15868,15872,15876,15884,15888,15898,15902,15910,15914,15918,15926,15930,15934,15939,15952,15975,15979,15984,15997,16019,16023,16028,16042,16050,16054,16064,16068,16076],{"__ignoreMap":23},[28,15641,15642,15644,15647],{"class":30,"line":31},[28,15643,14771],{"class":207},[28,15645,15646],{"class":34}," Person",[28,15648,15649],{"class":211}," {\n",[28,15651,15652],{"class":30,"line":42},[28,15653,14793],{"class":207},[28,15655,15656],{"class":30,"line":50},[28,15657,2477],{"emptyLinePlaceholder":134},[28,15659,15660],{"class":30,"line":58},[28,15661,15662],{"class":269},"    \u002F\u002F姓名设置可读可写\n",[28,15664,15665,15667,15669,15671,15673,15675],{"class":30,"line":70},[28,15666,14986],{"class":207},[28,15668,14989],{"class":34},[28,15670,212],{"class":211},[28,15672,14994],{"class":34},[28,15674,14997],{"class":5293},[28,15676,12519],{"class":211},[28,15678,15679,15681,15683],{"class":30,"line":78},[28,15680,15331],{"class":211},[28,15682,257],{"class":207},[28,15684,15685],{"class":211}," name;\n",[28,15687,15688],{"class":30,"line":86},[28,15689,2264],{"class":211},[28,15691,15692,15695,15698],{"class":30,"line":97},[28,15693,15694],{"class":34},"    string",[28,15696,15697],{"class":34}," getName",[28,15699,2053],{"class":211},[28,15701,15702],{"class":30,"line":108},[28,15703,2107],{"class":211},[28,15705,15706,15708],{"class":30,"line":1407},[28,15707,14829],{"class":207},[28,15709,15710],{"class":211}," m_Name;\n",[28,15712,15713],{"class":30,"line":1690},[28,15714,2264],{"class":211},[28,15716,15717],{"class":30,"line":1695},[28,15718,2477],{"emptyLinePlaceholder":134},[28,15720,15721],{"class":30,"line":1701},[28,15722,2477],{"emptyLinePlaceholder":134},[28,15724,15725],{"class":30,"line":1706},[28,15726,15727],{"class":269},"    \u002F\u002F获取年龄 \n",[28,15729,15730,15732,15735],{"class":30,"line":1720},[28,15731,2062],{"class":207},[28,15733,15734],{"class":34}," getAge",[28,15736,10930],{"class":211},[28,15738,15739,15741],{"class":30,"line":1725},[28,15740,14829],{"class":207},[28,15742,15743],{"class":211}," m_Age;\n",[28,15745,15746],{"class":30,"line":1731},[28,15747,2264],{"class":211},[28,15749,15750],{"class":30,"line":1752},[28,15751,15752],{"class":269},"    \u002F\u002F设置年龄\n",[28,15754,15755,15757,15760,15762,15764,15767],{"class":30,"line":1757},[28,15756,14986],{"class":207},[28,15758,15759],{"class":34}," setAge",[28,15761,212],{"class":211},[28,15763,215],{"class":207},[28,15765,15766],{"class":5293}," age",[28,15768,12519],{"class":211},[28,15770,15771,15773,15776,15778,15780,15782,15785,15787,15790],{"class":30,"line":1771},[28,15772,2574],{"class":207},[28,15774,15775],{"class":211}," (age ",[28,15777,1120],{"class":207},[28,15779,4170],{"class":38},[28,15781,3332],{"class":207},[28,15783,15784],{"class":211}," age ",[28,15786,1170],{"class":207},[28,15788,15789],{"class":38}," 150",[28,15791,12519],{"class":211},[28,15793,15794,15796,15798,15801,15803],{"class":30,"line":1776},[28,15795,9796],{"class":211},[28,15797,1253],{"class":207},[28,15799,15800],{"class":64}," \"你个老妖精!\"",[28,15802,1522],{"class":207},[28,15804,8917],{"class":211},[28,15806,15807,15810],{"class":30,"line":1805},[28,15808,15809],{"class":207},"            return",[28,15811,1370],{"class":211},[28,15813,15814],{"class":30,"line":1810},[28,15815,2606],{"class":211},[28,15817,15818,15821,15823],{"class":30,"line":1827},[28,15819,15820],{"class":211},"        m_Age ",[28,15822,257],{"class":207},[28,15824,7874],{"class":211},[28,15826,15827],{"class":30,"line":1832},[28,15828,2264],{"class":211},[28,15830,15831],{"class":30,"line":1837},[28,15832,2477],{"emptyLinePlaceholder":134},[28,15834,15835],{"class":30,"line":1842},[28,15836,15837],{"class":269},"    \u002F\u002F情人设置为只写\n",[28,15839,15840,15842,15845,15847,15849,15852],{"class":30,"line":1856},[28,15841,14986],{"class":207},[28,15843,15844],{"class":34}," setLover",[28,15846,212],{"class":211},[28,15848,14994],{"class":34},[28,15850,15851],{"class":5293}," lover",[28,15853,12519],{"class":211},[28,15855,15856,15859,15861],{"class":30,"line":1861},[28,15857,15858],{"class":211},"        m_Lover ",[28,15860,257],{"class":207},[28,15862,15863],{"class":211}," lover;\n",[28,15865,15866],{"class":30,"line":2654},[28,15867,2264],{"class":211},[28,15869,15870],{"class":30,"line":2668},[28,15871,2477],{"emptyLinePlaceholder":134},[28,15873,15874],{"class":30,"line":2676},[28,15875,15299],{"class":207},[28,15877,15878,15881],{"class":30,"line":2681},[28,15879,15880],{"class":211},"    string m_Name;",[28,15882,15883],{"class":269}," \u002F\u002F可读可写  姓名\n",[28,15885,15886],{"class":30,"line":2687},[28,15887,13287],{"class":211},[28,15889,15890,15892,15895],{"class":30,"line":2693},[28,15891,2062],{"class":207},[28,15893,15894],{"class":211}," m_Age;",[28,15896,15897],{"class":269}," \u002F\u002F只读  年龄\n",[28,15899,15900],{"class":30,"line":2698},[28,15901,2477],{"emptyLinePlaceholder":134},[28,15903,15904,15907],{"class":30,"line":8025},[28,15905,15906],{"class":211},"    string m_Lover;",[28,15908,15909],{"class":269}," \u002F\u002F只写  情人\n",[28,15911,15912],{"class":30,"line":8049},[28,15913,4072],{"class":211},[28,15915,15916],{"class":30,"line":8054},[28,15917,2477],{"emptyLinePlaceholder":134},[28,15919,15920,15922,15924],{"class":30,"line":8060},[28,15921,215],{"class":207},[28,15923,2050],{"class":34},[28,15925,10930],{"class":211},[28,15927,15928],{"class":30,"line":8087},[28,15929,2477],{"emptyLinePlaceholder":134},[28,15931,15932],{"class":30,"line":8092},[28,15933,15390],{"class":211},[28,15935,15936],{"class":30,"line":8098},[28,15937,15938],{"class":269},"    \u002F\u002F姓名设置\n",[28,15940,15941,15944,15946,15948,15950],{"class":30,"line":8110},[28,15942,15943],{"class":211},"    p.",[28,15945,15143],{"class":34},[28,15947,212],{"class":211},[28,15949,7993],{"class":64},[28,15951,2796],{"class":211},[28,15953,15954,15956,15958,15961,15963,15966,15969,15971,15973],{"class":30,"line":8122},[28,15955,6606],{"class":211},[28,15957,1253],{"class":207},[28,15959,15960],{"class":64}," \"姓名： \"",[28,15962,1522],{"class":207},[28,15964,15965],{"class":211}," p.",[28,15967,15968],{"class":34},"getName",[28,15970,13127],{"class":211},[28,15972,1253],{"class":207},[28,15974,8917],{"class":211},[28,15976,15977],{"class":30,"line":8134},[28,15978,2477],{"emptyLinePlaceholder":134},[28,15980,15981],{"class":30,"line":9793},[28,15982,15983],{"class":269},"    \u002F\u002F年龄设置\n",[28,15985,15986,15988,15991,15993,15995],{"class":30,"line":9818},[28,15987,15943],{"class":211},[28,15989,15990],{"class":34},"setAge",[28,15992,212],{"class":211},[28,15994,866],{"class":38},[28,15996,2796],{"class":211},[28,15998,15999,16001,16003,16006,16008,16010,16013,16015,16017],{"class":30,"line":9841},[28,16000,6606],{"class":211},[28,16002,1253],{"class":207},[28,16004,16005],{"class":64}," \"年龄： \"",[28,16007,1522],{"class":207},[28,16009,15965],{"class":211},[28,16011,16012],{"class":34},"getAge",[28,16014,13127],{"class":211},[28,16016,1253],{"class":207},[28,16018,8917],{"class":211},[28,16020,16021],{"class":30,"line":9865},[28,16022,2477],{"emptyLinePlaceholder":134},[28,16024,16025],{"class":30,"line":9870},[28,16026,16027],{"class":269},"    \u002F\u002F情人设置\n",[28,16029,16030,16032,16035,16037,16040],{"class":30,"line":9875},[28,16031,15943],{"class":211},[28,16033,16034],{"class":34},"setLover",[28,16036,212],{"class":211},[28,16038,16039],{"class":64},"\"苍井\"",[28,16041,2796],{"class":211},[28,16043,16044,16047],{"class":30,"line":9880},[28,16045,16046],{"class":269},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[28,16048,16049],{"class":269},"  \u002F\u002F只写属性，不可以读取\n",[28,16051,16052],{"class":30,"line":9889},[28,16053,2477],{"emptyLinePlaceholder":134},[28,16055,16056,16058,16060,16062],{"class":30,"line":9894},[28,16057,2380],{"class":34},[28,16059,212],{"class":211},[28,16061,2385],{"class":64},[28,16063,2796],{"class":211},[28,16065,16066],{"class":30,"line":9900},[28,16067,2477],{"emptyLinePlaceholder":134},[28,16069,16070,16072,16074],{"class":30,"line":9921},[28,16071,4167],{"class":207},[28,16073,4170],{"class":38},[28,16075,1370],{"class":211},[28,16077,16078],{"class":30,"line":9927},[28,16079,1643],{"class":211},[177,16081,16083],{"id":16082},"_814封装案例","8.1.4封装案例",[161,16085,16086],{},[119,16087,16088,16091],{},[359,16089,16090],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[116,16093,16094,16097],{},[119,16095,16096],{},"求出立方体的面积和体积",[119,16098,16099],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[18,16101,16103],{"className":198,"code":16102,"language":200,"meta":23,"style":23},"#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",[25,16104,16105,16111,16121,16128,16132,16136,16141,16171,16175,16185,16195,16205,16209,16218,16222,16258,16262,16271,16275,16291,16295,16300,16309,16313,16320,16324,16333,16337,16344,16348,16357,16361,16368,16372,16377,16394,16398,16444,16448,16457,16461,16465,16469,16478,16482,16486,16491,16495,16501,16507,16513,16517,16521,16526,16548,16552,16606,16610,16618,16622,16627,16632,16645,16652,16668,16679,16685,16708,16714,16737,16751,16771,16777,16788,16811,16833,16838,16844,16858,16871,16876,16890,16895,16901,16906,16920,16925,16930,16944,16956,16961,16974,16979,16984,16989,17002,17007],{"__ignoreMap":23},[28,16106,16107,16109],{"class":30,"line":31},[28,16108,2027],{"class":207},[28,16110,2030],{"class":64},[28,16112,16113,16115,16117,16119],{"class":30,"line":42},[28,16114,2035],{"class":207},[28,16116,2038],{"class":207},[28,16118,2041],{"class":34},[28,16120,1370],{"class":211},[28,16122,16123,16125],{"class":30,"line":50},[28,16124,14771],{"class":207},[28,16126,16127],{"class":34}," Cube\n",[28,16129,16130],{"class":30,"line":58},[28,16131,1624],{"class":211},[28,16133,16134],{"class":30,"line":70},[28,16135,14793],{"class":207},[28,16137,16138],{"class":30,"line":78},[28,16139,16140],{"class":269},"    \u002F\u002F输入长宽高\n",[28,16142,16143,16145,16148,16150,16152,16155,16157,16159,16162,16164,16166,16169],{"class":30,"line":86},[28,16144,14986],{"class":207},[28,16146,16147],{"class":34}," setLwh",[28,16149,212],{"class":211},[28,16151,215],{"class":207},[28,16153,16154],{"class":5293}," l",[28,16156,588],{"class":211},[28,16158,215],{"class":207},[28,16160,16161],{"class":5293}," w",[28,16163,588],{"class":211},[28,16165,215],{"class":207},[28,16167,16168],{"class":5293}," h",[28,16170,218],{"class":211},[28,16172,16173],{"class":30,"line":97},[28,16174,2107],{"class":211},[28,16176,16177,16180,16182],{"class":30,"line":108},[28,16178,16179],{"class":211},"        m_L",[28,16181,257],{"class":207},[28,16183,16184],{"class":211},"l;\n",[28,16186,16187,16190,16192],{"class":30,"line":1407},[28,16188,16189],{"class":211},"        m_W",[28,16191,257],{"class":207},[28,16193,16194],{"class":211},"w;\n",[28,16196,16197,16200,16202],{"class":30,"line":1690},[28,16198,16199],{"class":211},"        m_H",[28,16201,257],{"class":207},[28,16203,16204],{"class":211},"h;\n",[28,16206,16207],{"class":30,"line":1695},[28,16208,2264],{"class":211},[28,16210,16211,16213,16216],{"class":30,"line":1701},[28,16212,2062],{"class":207},[28,16214,16215],{"class":34}," mianji",[28,16217,2053],{"class":211},[28,16219,16220],{"class":30,"line":1706},[28,16221,2107],{"class":211},[28,16223,16224,16226,16228,16230,16233,16235,16238,16240,16243,16245,16248,16250,16253,16255],{"class":30,"line":1720},[28,16225,14829],{"class":207},[28,16227,14832],{"class":38},[28,16229,665],{"class":207},[28,16231,16232],{"class":211},"(m_L",[28,16234,665],{"class":207},[28,16236,16237],{"class":211},"m_W ",[28,16239,691],{"class":207},[28,16241,16242],{"class":211}," m_L",[28,16244,665],{"class":207},[28,16246,16247],{"class":211},"m_H ",[28,16249,691],{"class":207},[28,16251,16252],{"class":211}," m_W",[28,16254,665],{"class":207},[28,16256,16257],{"class":211},"m_H);\n",[28,16259,16260],{"class":30,"line":1725},[28,16261,2264],{"class":211},[28,16263,16264,16266,16269],{"class":30,"line":1731},[28,16265,2062],{"class":207},[28,16267,16268],{"class":34}," tiji",[28,16270,2053],{"class":211},[28,16272,16273],{"class":30,"line":1752},[28,16274,2107],{"class":211},[28,16276,16277,16279,16281,16283,16286,16288],{"class":30,"line":1757},[28,16278,14829],{"class":207},[28,16280,16242],{"class":211},[28,16282,665],{"class":207},[28,16284,16285],{"class":211},"m_W",[28,16287,665],{"class":207},[28,16289,16290],{"class":211},"m_H;\n",[28,16292,16293],{"class":30,"line":1771},[28,16294,2264],{"class":211},[28,16296,16297],{"class":30,"line":1776},[28,16298,16299],{"class":269},"    \u002F\u002F获取长宽高\n",[28,16301,16302,16304,16307],{"class":30,"line":1805},[28,16303,2062],{"class":207},[28,16305,16306],{"class":34}," getLength",[28,16308,2053],{"class":211},[28,16310,16311],{"class":30,"line":1810},[28,16312,2107],{"class":211},[28,16314,16315,16317],{"class":30,"line":1827},[28,16316,14829],{"class":207},[28,16318,16319],{"class":211}," m_L;\n",[28,16321,16322],{"class":30,"line":1832},[28,16323,2264],{"class":211},[28,16325,16326,16328,16331],{"class":30,"line":1837},[28,16327,2062],{"class":207},[28,16329,16330],{"class":34}," getWidth",[28,16332,2053],{"class":211},[28,16334,16335],{"class":30,"line":1842},[28,16336,2107],{"class":211},[28,16338,16339,16341],{"class":30,"line":1856},[28,16340,14829],{"class":207},[28,16342,16343],{"class":211}," m_W;\n",[28,16345,16346],{"class":30,"line":1861},[28,16347,2264],{"class":211},[28,16349,16350,16352,16355],{"class":30,"line":2654},[28,16351,2062],{"class":207},[28,16353,16354],{"class":34}," getHeight",[28,16356,2053],{"class":211},[28,16358,16359],{"class":30,"line":2668},[28,16360,2107],{"class":211},[28,16362,16363,16365],{"class":30,"line":2676},[28,16364,14829],{"class":207},[28,16366,16367],{"class":211}," m_H;\n",[28,16369,16370],{"class":30,"line":2681},[28,16371,2264],{"class":211},[28,16373,16374],{"class":30,"line":2687},[28,16375,16376],{"class":269},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[28,16378,16379,16382,16385,16387,16390,16392],{"class":30,"line":2693},[28,16380,16381],{"class":207},"    bool",[28,16383,16384],{"class":34}," isEqual",[28,16386,212],{"class":211},[28,16388,16389],{"class":34},"Cube",[28,16391,2926],{"class":5293},[28,16393,218],{"class":211},[28,16395,16396],{"class":30,"line":2698},[28,16397,2107],{"class":211},[28,16399,16400,16402,16405,16408,16410,16412,16415,16417,16420,16423,16425,16427,16430,16432,16434,16437,16439,16441],{"class":30,"line":8025},[28,16401,2574],{"class":207},[28,16403,16404],{"class":211}," (c.",[28,16406,16407],{"class":34},"getLength",[28,16409,13127],{"class":211},[28,16411,3026],{"class":207},[28,16413,16414],{"class":211}," m_L ",[28,16416,1793],{"class":207},[28,16418,16419],{"class":211}," c.",[28,16421,16422],{"class":34},"getWidth",[28,16424,13127],{"class":211},[28,16426,3026],{"class":207},[28,16428,16429],{"class":211}," m_W ",[28,16431,1793],{"class":207},[28,16433,16419],{"class":211},[28,16435,16436],{"class":34},"getHeight",[28,16438,13127],{"class":211},[28,16440,3026],{"class":207},[28,16442,16443],{"class":211}," m_H)\n",[28,16445,16446],{"class":30,"line":8049},[28,16447,2587],{"class":211},[28,16449,16450,16452,16455],{"class":30,"line":8054},[28,16451,15809],{"class":207},[28,16453,16454],{"class":38}," true",[28,16456,1370],{"class":211},[28,16458,16459],{"class":30,"line":8060},[28,16460,2606],{"class":211},[28,16462,16463],{"class":30,"line":8087},[28,16464,2647],{"class":207},[28,16466,16467],{"class":30,"line":8092},[28,16468,2587],{"class":211},[28,16470,16471,16473,16476],{"class":30,"line":8098},[28,16472,15809],{"class":207},[28,16474,16475],{"class":38}," false",[28,16477,1370],{"class":211},[28,16479,16480],{"class":30,"line":8110},[28,16481,2606],{"class":211},[28,16483,16484],{"class":30,"line":8122},[28,16485,2264],{"class":211},[28,16487,16488],{"class":30,"line":8134},[28,16489,16490],{"class":269},"    \u002F\u002F私有属性\n",[28,16492,16493],{"class":30,"line":9793},[28,16494,15299],{"class":207},[28,16496,16497,16499],{"class":30,"line":9818},[28,16498,2062],{"class":207},[28,16500,16319],{"class":211},[28,16502,16503,16505],{"class":30,"line":9841},[28,16504,2062],{"class":207},[28,16506,16343],{"class":211},[28,16508,16509,16511],{"class":30,"line":9865},[28,16510,2062],{"class":207},[28,16512,16367],{"class":211},[28,16514,16515],{"class":30,"line":9870},[28,16516,2477],{"emptyLinePlaceholder":134},[28,16518,16519],{"class":30,"line":9875},[28,16520,4072],{"class":211},[28,16522,16523],{"class":30,"line":9880},[28,16524,16525],{"class":269},"\u002F\u002F全局函数判断两个立方体是否相等\n",[28,16527,16528,16530,16532,16534,16536,16539,16541,16543,16546],{"class":30,"line":9889},[28,16529,1432],{"class":207},[28,16531,16384],{"class":34},[28,16533,212],{"class":211},[28,16535,16389],{"class":34},[28,16537,16538],{"class":5293}," c1",[28,16540,588],{"class":211},[28,16542,16389],{"class":34},[28,16544,16545],{"class":5293}," c2",[28,16547,218],{"class":211},[28,16549,16550],{"class":30,"line":9894},[28,16551,1624],{"class":211},[28,16553,16554,16556,16559,16561,16563,16565,16568,16570,16573,16575,16577,16579,16581,16583,16585,16587,16589,16591,16593,16595,16597,16599,16601,16603],{"class":30,"line":9900},[28,16555,4167],{"class":207},[28,16557,16558],{"class":211}," (c1.",[28,16560,16407],{"class":34},[28,16562,13127],{"class":211},[28,16564,3026],{"class":207},[28,16566,16567],{"class":211}," c2.",[28,16569,16407],{"class":34},[28,16571,16572],{"class":211},"()) ",[28,16574,1793],{"class":207},[28,16576,16558],{"class":211},[28,16578,16422],{"class":34},[28,16580,13127],{"class":211},[28,16582,3026],{"class":207},[28,16584,16567],{"class":211},[28,16586,16422],{"class":34},[28,16588,16572],{"class":211},[28,16590,1793],{"class":207},[28,16592,16558],{"class":211},[28,16594,16436],{"class":34},[28,16596,13127],{"class":211},[28,16598,3026],{"class":207},[28,16600,16567],{"class":211},[28,16602,16436],{"class":34},[28,16604,16605],{"class":211},"());\n",[28,16607,16608],{"class":30,"line":9921},[28,16609,1643],{"class":211},[28,16611,16612,16614,16616],{"class":30,"line":9927},[28,16613,215],{"class":207},[28,16615,2050],{"class":34},[28,16617,2053],{"class":211},[28,16619,16620],{"class":30,"line":9941},[28,16621,1624],{"class":211},[28,16623,16624],{"class":30,"line":9947},[28,16625,16626],{"class":211},"    Cube c1;\n",[28,16628,16629],{"class":30,"line":9974},[28,16630,16631],{"class":269},"    \u002F\u002F输入立方体的长宽高\n",[28,16633,16634,16636,16638,16641,16643],{"class":30,"line":9983},[28,16635,1629],{"class":211},[28,16637,1253],{"class":207},[28,16639,16640],{"class":64},"\"请输入第一个立方体的长、宽、高：\"",[28,16642,1253],{"class":207},[28,16644,1275],{"class":211},[28,16646,16647,16649],{"class":30,"line":9989},[28,16648,2062],{"class":207},[28,16650,16651],{"class":211}," l,w,h,l1,w1,h1;\n",[28,16653,16654,16656,16658,16660,16662,16664,16666],{"class":30,"line":9997},[28,16655,2089],{"class":211},[28,16657,1507],{"class":207},[28,16659,728],{"class":211},[28,16661,1507],{"class":207},[28,16663,1005],{"class":211},[28,16665,1507],{"class":207},[28,16667,16204],{"class":211},[28,16669,16670,16673,16676],{"class":30,"line":10002},[28,16671,16672],{"class":211},"    c1.",[28,16674,16675],{"class":34},"setLwh",[28,16677,16678],{"class":211},"(l,w,h);\n",[28,16680,16682],{"class":30,"line":16681},66,[28,16683,16684],{"class":269},"    \u002F\u002F面积\n",[28,16686,16688,16690,16692,16695,16697,16699,16702,16704,16706],{"class":30,"line":16687},67,[28,16689,1629],{"class":211},[28,16691,1253],{"class":207},[28,16693,16694],{"class":64},"\"立方体的表面积为：\"",[28,16696,1253],{"class":207},[28,16698,14907],{"class":211},[28,16700,16701],{"class":34},"mianji",[28,16703,2504],{"class":211},[28,16705,1253],{"class":207},[28,16707,1275],{"class":211},[28,16709,16711],{"class":30,"line":16710},68,[28,16712,16713],{"class":269},"    \u002F\u002F体积\n",[28,16715,16717,16719,16721,16724,16726,16728,16731,16733,16735],{"class":30,"line":16716},69,[28,16718,1629],{"class":211},[28,16720,1253],{"class":207},[28,16722,16723],{"class":64},"\"立方体的体积为：\"",[28,16725,1253],{"class":207},[28,16727,14907],{"class":211},[28,16729,16730],{"class":34},"tiji",[28,16732,2504],{"class":211},[28,16734,1253],{"class":207},[28,16736,1275],{"class":211},[28,16738,16740,16742,16744,16747,16749],{"class":30,"line":16739},70,[28,16741,1629],{"class":211},[28,16743,1253],{"class":207},[28,16745,16746],{"class":64},"\"请输入第二个立方体的长、宽、高：\"",[28,16748,1253],{"class":207},[28,16750,1275],{"class":211},[28,16752,16754,16756,16758,16761,16763,16766,16768],{"class":30,"line":16753},71,[28,16755,2089],{"class":211},[28,16757,1507],{"class":207},[28,16759,16760],{"class":211},"l1",[28,16762,1507],{"class":207},[28,16764,16765],{"class":211},"w1",[28,16767,1507],{"class":207},[28,16769,16770],{"class":211},"h1;\n",[28,16772,16774],{"class":30,"line":16773},72,[28,16775,16776],{"class":211},"    Cube c2;\n",[28,16778,16780,16783,16785],{"class":30,"line":16779},73,[28,16781,16782],{"class":211},"    c2.",[28,16784,16675],{"class":34},[28,16786,16787],{"class":211},"(l1,w1,h1);\n",[28,16789,16791,16793,16795,16798,16800,16803,16805,16807,16809],{"class":30,"line":16790},74,[28,16792,1629],{"class":211},[28,16794,1253],{"class":207},[28,16796,16797],{"class":64},"\"第二个立方体的表面积为：\"",[28,16799,1253],{"class":207},[28,16801,16802],{"class":211},"c2.",[28,16804,16701],{"class":34},[28,16806,2504],{"class":211},[28,16808,1253],{"class":207},[28,16810,1275],{"class":211},[28,16812,16814,16816,16818,16821,16823,16825,16827,16829,16831],{"class":30,"line":16813},75,[28,16815,1629],{"class":211},[28,16817,1253],{"class":207},[28,16819,16820],{"class":64},"\"第二个立方体的体积为：\"",[28,16822,1253],{"class":207},[28,16824,16802],{"class":211},[28,16826,16730],{"class":34},[28,16828,2504],{"class":211},[28,16830,1253],{"class":207},[28,16832,1275],{"class":211},[28,16834,16836],{"class":30,"line":16835},76,[28,16837,2477],{"emptyLinePlaceholder":134},[28,16839,16841],{"class":30,"line":16840},77,[28,16842,16843],{"class":269},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[28,16845,16847,16849,16851,16854,16856],{"class":30,"line":16846},78,[28,16848,1629],{"class":211},[28,16850,1253],{"class":207},[28,16852,16853],{"class":64},"\"内部函数判断结果：\"",[28,16855,1253],{"class":207},[28,16857,1275],{"class":211},[28,16859,16861,16863,16865,16868],{"class":30,"line":16860},79,[28,16862,3178],{"class":207},[28,16864,16558],{"class":211},[28,16866,16867],{"class":34},"isEqual",[28,16869,16870],{"class":211},"(c2))\n",[28,16872,16874],{"class":30,"line":16873},80,[28,16875,2107],{"class":211},[28,16877,16879,16881,16883,16886,16888],{"class":30,"line":16878},81,[28,16880,3528],{"class":211},[28,16882,1253],{"class":207},[28,16884,16885],{"class":64},"\"两个立方体相等\"",[28,16887,1253],{"class":207},[28,16889,1275],{"class":211},[28,16891,16893],{"class":30,"line":16892},82,[28,16894,2264],{"class":211},[28,16896,16898],{"class":30,"line":16897},83,[28,16899,16900],{"class":207},"    else\n",[28,16902,16904],{"class":30,"line":16903},84,[28,16905,2107],{"class":211},[28,16907,16909,16911,16913,16916,16918],{"class":30,"line":16908},85,[28,16910,3528],{"class":211},[28,16912,1253],{"class":207},[28,16914,16915],{"class":64},"\"两个立方体不相等\"",[28,16917,1253],{"class":207},[28,16919,1275],{"class":211},[28,16921,16923],{"class":30,"line":16922},86,[28,16924,2264],{"class":211},[28,16926,16928],{"class":30,"line":16927},87,[28,16929,2477],{"emptyLinePlaceholder":134},[28,16931,16933,16935,16937,16940,16942],{"class":30,"line":16932},88,[28,16934,1629],{"class":211},[28,16936,1253],{"class":207},[28,16938,16939],{"class":64},"\"全局函数判断结果：\"",[28,16941,1253],{"class":207},[28,16943,1275],{"class":211},[28,16945,16947,16949,16951,16953],{"class":30,"line":16946},89,[28,16948,3178],{"class":207},[28,16950,1736],{"class":211},[28,16952,16867],{"class":34},[28,16954,16955],{"class":211},"(c1, c2))\n",[28,16957,16959],{"class":30,"line":16958},90,[28,16960,2107],{"class":211},[28,16962,16964,16966,16968,16970,16972],{"class":30,"line":16963},91,[28,16965,3528],{"class":211},[28,16967,1253],{"class":207},[28,16969,16885],{"class":64},[28,16971,1253],{"class":207},[28,16973,1275],{"class":211},[28,16975,16977],{"class":30,"line":16976},92,[28,16978,2264],{"class":211},[28,16980,16982],{"class":30,"line":16981},93,[28,16983,16900],{"class":207},[28,16985,16987],{"class":30,"line":16986},94,[28,16988,2107],{"class":211},[28,16990,16992,16994,16996,16998,17000],{"class":30,"line":16991},95,[28,16993,3528],{"class":211},[28,16995,1253],{"class":207},[28,16997,16915],{"class":64},[28,16999,1253],{"class":207},[28,17001,1275],{"class":211},[28,17003,17005],{"class":30,"line":17004},96,[28,17006,2264],{"class":211},[28,17008,17010],{"class":30,"line":17009},97,[28,17011,1643],{"class":211},[161,17013,17014],{"start":42},[119,17015,17016],{},[359,17017,17018],{},"练习案例2：点和圆的关系",[116,17020,17021],{},[119,17022,17023],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[18,17025,17027],{"className":198,"code":17026,"language":200,"meta":23,"style":23},"#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",[25,17028,17029,17035,17045,17052,17059,17063,17067,17072,17106,17111,17127,17141,17145,17149,17156,17163,17167,17173,17177,17181,17185,17207,17230,17235,17249,17264,17268,17272,17278,17283,17288,17292,17318,17322,17352,17380,17408,17425,17429,17442,17446,17450,17454,17467,17471,17475,17483,17487,17491,17495,17500,17504,17515,17522,17531,17541,17552,17559,17572,17583,17593,17604,17611,17625,17630,17640,17648],{"__ignoreMap":23},[28,17030,17031,17033],{"class":30,"line":31},[28,17032,2027],{"class":207},[28,17034,2030],{"class":64},[28,17036,17037,17039,17041,17043],{"class":30,"line":42},[28,17038,2035],{"class":207},[28,17040,2038],{"class":207},[28,17042,2041],{"class":34},[28,17044,1370],{"class":211},[28,17046,17047,17049],{"class":30,"line":50},[28,17048,2027],{"class":207},[28,17050,17051],{"class":64},"\u003Ccmath>\n",[28,17053,17054,17056],{"class":30,"line":58},[28,17055,14771],{"class":207},[28,17057,17058],{"class":34}," Point\n",[28,17060,17061],{"class":30,"line":70},[28,17062,1624],{"class":211},[28,17064,17065],{"class":30,"line":78},[28,17066,14793],{"class":207},[28,17068,17069],{"class":30,"line":86},[28,17070,17071],{"class":269},"    \u002F\u002F赋值\n",[28,17073,17074,17076,17079,17081,17083,17086,17088,17090,17093,17096,17098,17101,17103],{"class":30,"line":97},[28,17075,14986],{"class":207},[28,17077,17078],{"class":34}," setPoint",[28,17080,212],{"class":211},[28,17082,14114],{"class":207},[28,17084,17085],{"class":5293}," x",[28,17087,12512],{"class":211},[28,17089,14114],{"class":207},[28,17091,17092],{"class":5293}," y",[28,17094,17095],{"class":211},") { m_x ",[28,17097,257],{"class":207},[28,17099,17100],{"class":211}," x; m_y ",[28,17102,257],{"class":207},[28,17104,17105],{"class":211}," y; }\n",[28,17107,17108],{"class":30,"line":108},[28,17109,17110],{"class":269},"    \u002F\u002F获取坐标\n",[28,17112,17113,17115,17118,17121,17124],{"class":30,"line":1407},[28,17114,14815],{"class":207},[28,17116,17117],{"class":34}," getX",[28,17119,17120],{"class":211},"() { ",[28,17122,17123],{"class":207},"return",[28,17125,17126],{"class":211}," m_x; }\n",[28,17128,17129,17131,17134,17136,17138],{"class":30,"line":1690},[28,17130,14815],{"class":207},[28,17132,17133],{"class":34}," getY",[28,17135,17120],{"class":211},[28,17137,17123],{"class":207},[28,17139,17140],{"class":211}," m_y; }\n",[28,17142,17143],{"class":30,"line":1695},[28,17144,2477],{"emptyLinePlaceholder":134},[28,17146,17147],{"class":30,"line":1701},[28,17148,15299],{"class":207},[28,17150,17151,17153],{"class":30,"line":1706},[28,17152,14815],{"class":207},[28,17154,17155],{"class":211}," m_x;\n",[28,17157,17158,17160],{"class":30,"line":1720},[28,17159,14815],{"class":207},[28,17161,17162],{"class":211}," m_y;\n",[28,17164,17165],{"class":30,"line":1725},[28,17166,4072],{"class":211},[28,17168,17169,17171],{"class":30,"line":1731},[28,17170,14771],{"class":207},[28,17172,14774],{"class":34},[28,17174,17175],{"class":30,"line":1752},[28,17176,1624],{"class":211},[28,17178,17179],{"class":30,"line":1757},[28,17180,14793],{"class":207},[28,17182,17183],{"class":30,"line":1771},[28,17184,17071],{"class":269},[28,17186,17187,17189,17192,17194,17196,17199,17202,17204],{"class":30,"line":1776},[28,17188,14986],{"class":207},[28,17190,17191],{"class":34}," setRadius",[28,17193,212],{"class":211},[28,17195,14114],{"class":207},[28,17197,17198],{"class":5293}," r",[28,17200,17201],{"class":211},") { m_r ",[28,17203,257],{"class":207},[28,17205,17206],{"class":211}," r; }\n",[28,17208,17209,17211,17214,17216,17219,17222,17225,17227],{"class":30,"line":1805},[28,17210,14986],{"class":207},[28,17212,17213],{"class":34}," setCenter",[28,17215,212],{"class":211},[28,17217,17218],{"class":34},"Point",[28,17220,17221],{"class":5293}," center",[28,17223,17224],{"class":211},") { m_center ",[28,17226,257],{"class":207},[28,17228,17229],{"class":211}," center; }\n",[28,17231,17232],{"class":30,"line":1810},[28,17233,17234],{"class":269},"    \u002F\u002F获取属性\n",[28,17236,17237,17239,17242,17244,17246],{"class":30,"line":1827},[28,17238,14815],{"class":207},[28,17240,17241],{"class":34}," getRadius",[28,17243,17120],{"class":211},[28,17245,17123],{"class":207},[28,17247,17248],{"class":211}," m_r; }\n",[28,17250,17251,17254,17257,17259,17261],{"class":30,"line":1832},[28,17252,17253],{"class":34},"    Point",[28,17255,17256],{"class":34}," getCenter",[28,17258,17120],{"class":211},[28,17260,17123],{"class":207},[28,17262,17263],{"class":211}," m_center; }\n",[28,17265,17266],{"class":30,"line":1837},[28,17267,2477],{"emptyLinePlaceholder":134},[28,17269,17270],{"class":30,"line":1842},[28,17271,15299],{"class":207},[28,17273,17274,17276],{"class":30,"line":1856},[28,17275,14815],{"class":207},[28,17277,14805],{"class":211},[28,17279,17280],{"class":30,"line":1861},[28,17281,17282],{"class":269},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[28,17284,17285],{"class":30,"line":2654},[28,17286,17287],{"class":211},"    Point m_center;\n",[28,17289,17290],{"class":30,"line":2668},[28,17291,4072],{"class":211},[28,17293,17294,17296,17299,17301,17304,17306,17308,17310,17312,17314,17316],{"class":30,"line":2676},[28,17295,5441],{"class":207},[28,17297,17298],{"class":34}," isInCircle",[28,17300,212],{"class":211},[28,17302,17303],{"class":34},"Circle",[28,17305,10661],{"class":207},[28,17307,498],{"class":5293},[28,17309,588],{"class":211},[28,17311,17218],{"class":34},[28,17313,10661],{"class":207},[28,17315,14],{"class":5293},[28,17317,218],{"class":211},[28,17319,17320],{"class":30,"line":2681},[28,17321,1624],{"class":211},[28,17323,17324,17326,17329,17331,17333,17336,17339,17342,17344,17346,17348,17350],{"class":30,"line":2687},[28,17325,14815],{"class":207},[28,17327,17328],{"class":211}," dx ",[28,17330,257],{"class":207},[28,17332,16419],{"class":211},[28,17334,17335],{"class":34},"getCenter",[28,17337,17338],{"class":211},"().",[28,17340,17341],{"class":34},"getX",[28,17343,13127],{"class":211},[28,17345,742],{"class":207},[28,17347,15965],{"class":211},[28,17349,17341],{"class":34},[28,17351,5713],{"class":211},[28,17353,17354,17356,17359,17361,17363,17365,17367,17370,17372,17374,17376,17378],{"class":30,"line":2693},[28,17355,14815],{"class":207},[28,17357,17358],{"class":211}," dy ",[28,17360,257],{"class":207},[28,17362,16419],{"class":211},[28,17364,17335],{"class":34},[28,17366,17338],{"class":211},[28,17368,17369],{"class":34},"getY",[28,17371,13127],{"class":211},[28,17373,742],{"class":207},[28,17375,15965],{"class":211},[28,17377,17369],{"class":34},[28,17379,5713],{"class":211},[28,17381,17382,17384,17387,17389,17392,17395,17397,17399,17401,17403,17405],{"class":30,"line":2698},[28,17383,14815],{"class":207},[28,17385,17386],{"class":211}," distance ",[28,17388,257],{"class":207},[28,17390,17391],{"class":34}," sqrt",[28,17393,17394],{"class":211},"(dx ",[28,17396,665],{"class":207},[28,17398,17328],{"class":211},[28,17400,691],{"class":207},[28,17402,17358],{"class":211},[28,17404,665],{"class":207},[28,17406,17407],{"class":211}," dy);\n",[28,17409,17410,17412,17415,17417,17419,17422],{"class":30,"line":8025},[28,17411,3178],{"class":207},[28,17413,17414],{"class":211}," (distance ",[28,17416,1120],{"class":207},[28,17418,16419],{"class":211},[28,17420,17421],{"class":34},"getRadius",[28,17423,17424],{"class":211},"())\n",[28,17426,17427],{"class":30,"line":8049},[28,17428,2107],{"class":211},[28,17430,17431,17433,17435,17438,17440],{"class":30,"line":8054},[28,17432,9746],{"class":211},[28,17434,1253],{"class":207},[28,17436,17437],{"class":64}," \"点在圆内\"",[28,17439,1522],{"class":207},[28,17441,8917],{"class":211},[28,17443,17444],{"class":30,"line":8060},[28,17445,2264],{"class":211},[28,17447,17448],{"class":30,"line":8087},[28,17449,16900],{"class":207},[28,17451,17452],{"class":30,"line":8092},[28,17453,2107],{"class":211},[28,17455,17456,17458,17460,17463,17465],{"class":30,"line":8098},[28,17457,9746],{"class":211},[28,17459,1253],{"class":207},[28,17461,17462],{"class":64}," \"点在圆外\"",[28,17464,1522],{"class":207},[28,17466,8917],{"class":211},[28,17468,17469],{"class":30,"line":8110},[28,17470,2264],{"class":211},[28,17472,17473],{"class":30,"line":8122},[28,17474,1643],{"class":211},[28,17476,17477,17479,17481],{"class":30,"line":8134},[28,17478,215],{"class":207},[28,17480,2050],{"class":34},[28,17482,2053],{"class":211},[28,17484,17485],{"class":30,"line":9793},[28,17486,1624],{"class":211},[28,17488,17489],{"class":30,"line":9818},[28,17490,15130],{"class":269},[28,17492,17493],{"class":30,"line":9841},[28,17494,14877],{"class":211},[28,17496,17497],{"class":30,"line":9865},[28,17498,17499],{"class":211},"    Point p1;\n",[28,17501,17502],{"class":30,"line":9870},[28,17503,17071],{"class":269},[28,17505,17506,17508,17510,17513],{"class":30,"line":9875},[28,17507,1629],{"class":211},[28,17509,1253],{"class":207},[28,17511,17512],{"class":64},"\"请输入圆的半径：\"",[28,17514,1370],{"class":211},[28,17516,17517,17519],{"class":30,"line":9880},[28,17518,14815],{"class":207},[28,17520,17521],{"class":211}," r;\n",[28,17523,17524,17526,17528],{"class":30,"line":9889},[28,17525,2089],{"class":211},[28,17527,1507],{"class":207},[28,17529,17530],{"class":211},"r;\n",[28,17532,17533,17535,17538],{"class":30,"line":9894},[28,17534,16672],{"class":211},[28,17536,17537],{"class":34},"setRadius",[28,17539,17540],{"class":211},"(r);\n",[28,17542,17543,17545,17547,17550],{"class":30,"line":9900},[28,17544,1629],{"class":211},[28,17546,1253],{"class":207},[28,17548,17549],{"class":64},"\"请输入圆心坐标：\"",[28,17551,1370],{"class":211},[28,17553,17554,17556],{"class":30,"line":9921},[28,17555,14815],{"class":207},[28,17557,17558],{"class":211}," x, y;\n",[28,17560,17561,17563,17565,17567,17569],{"class":30,"line":9927},[28,17562,2089],{"class":211},[28,17564,1507],{"class":207},[28,17566,1030],{"class":211},[28,17568,1507],{"class":207},[28,17570,17571],{"class":211},"y;\n",[28,17573,17574,17577,17580],{"class":30,"line":9941},[28,17575,17576],{"class":211},"    p1.",[28,17578,17579],{"class":34},"setPoint",[28,17581,17582],{"class":211},"(x, y);\n",[28,17584,17585,17587,17590],{"class":30,"line":9947},[28,17586,16672],{"class":211},[28,17588,17589],{"class":34},"setCenter",[28,17591,17592],{"class":211},"(p1);\n",[28,17594,17595,17597,17599,17602],{"class":30,"line":9974},[28,17596,1629],{"class":211},[28,17598,1253],{"class":207},[28,17600,17601],{"class":64},"\"请输入测试点坐标：\"",[28,17603,1370],{"class":211},[28,17605,17606,17608],{"class":30,"line":9983},[28,17607,14815],{"class":207},[28,17609,17610],{"class":211}," x1, y1;\n",[28,17612,17613,17615,17617,17620,17622],{"class":30,"line":9989},[28,17614,2089],{"class":211},[28,17616,1507],{"class":207},[28,17618,17619],{"class":211},"x1",[28,17621,1507],{"class":207},[28,17623,17624],{"class":211},"y1;\n",[28,17626,17627],{"class":30,"line":9997},[28,17628,17629],{"class":211},"    Point p2;\n",[28,17631,17632,17635,17637],{"class":30,"line":10002},[28,17633,17634],{"class":211},"    p2.",[28,17636,17579],{"class":34},[28,17638,17639],{"class":211},"(x1, y1);\n",[28,17641,17642,17645],{"class":30,"line":16681},[28,17643,17644],{"class":34},"    isInCircle",[28,17646,17647],{"class":211},"(c1, p2);\n",[28,17649,17650],{"class":30,"line":16687},[28,17651,1643],{"class":211},[14,17653,17654],{},"在类中可以让另一个类作为本来的成员",[14,17656,17657],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17659,17660],{},"创建point.h",[18,17662,17664],{"className":198,"code":17663,"language":200,"meta":23,"style":23},"#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",[25,17665,17666,17677,17683,17693,17699,17703,17708,17712,17716,17736,17740,17748,17756,17760,17764,17770,17776],{"__ignoreMap":23},[28,17667,17668,17671,17674],{"class":30,"line":31},[28,17669,17670],{"class":207},"#pragma",[28,17672,17673],{"class":34}," once",[28,17675,17676],{"class":269}," \u002F\u002F防止头文件重复包含\n",[28,17678,17679,17681],{"class":30,"line":42},[28,17680,2027],{"class":207},[28,17682,2030],{"class":64},[28,17684,17685,17687,17689,17691],{"class":30,"line":50},[28,17686,2035],{"class":207},[28,17688,2038],{"class":207},[28,17690,2041],{"class":34},[28,17692,1370],{"class":211},[28,17694,17695,17697],{"class":30,"line":58},[28,17696,14771],{"class":207},[28,17698,17058],{"class":34},[28,17700,17701],{"class":30,"line":70},[28,17702,1624],{"class":211},[28,17704,17705],{"class":30,"line":78},[28,17706,17707],{"class":269},"\u002F\u002F做好声明与变量定义就可以\n",[28,17709,17710],{"class":30,"line":86},[28,17711,14793],{"class":207},[28,17713,17714],{"class":30,"line":97},[28,17715,17071],{"class":269},[28,17717,17718,17720,17722,17724,17726,17728,17730,17732,17734],{"class":30,"line":108},[28,17719,14986],{"class":207},[28,17721,17078],{"class":34},[28,17723,212],{"class":211},[28,17725,14114],{"class":207},[28,17727,17085],{"class":5293},[28,17729,12512],{"class":211},[28,17731,14114],{"class":207},[28,17733,17092],{"class":5293},[28,17735,2796],{"class":211},[28,17737,17738],{"class":30,"line":1407},[28,17739,17110],{"class":269},[28,17741,17742,17744,17746],{"class":30,"line":1690},[28,17743,14815],{"class":207},[28,17745,17117],{"class":34},[28,17747,5713],{"class":211},[28,17749,17750,17752,17754],{"class":30,"line":1695},[28,17751,14815],{"class":207},[28,17753,17133],{"class":34},[28,17755,5713],{"class":211},[28,17757,17758],{"class":30,"line":1701},[28,17759,2477],{"emptyLinePlaceholder":134},[28,17761,17762],{"class":30,"line":1706},[28,17763,15299],{"class":207},[28,17765,17766,17768],{"class":30,"line":1720},[28,17767,14815],{"class":207},[28,17769,17155],{"class":211},[28,17771,17772,17774],{"class":30,"line":1725},[28,17773,14815],{"class":207},[28,17775,17162],{"class":211},[28,17777,17778],{"class":30,"line":1731},[28,17779,4072],{"class":211},[14,17781,17782],{},"创建point.cpp",[18,17784,17786],{"className":198,"code":17785,"language":200,"meta":23,"style":23},"#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",[25,17787,17788,17795,17800,17834,17838,17854],{"__ignoreMap":23},[28,17789,17790,17792],{"class":30,"line":31},[28,17791,2027],{"class":207},[28,17793,17794],{"class":64},"\u003Cpoint.h>\n",[28,17796,17797],{"class":30,"line":42},[28,17798,17799],{"class":269},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[28,17801,17802,17804,17807,17810,17812,17814,17816,17818,17820,17822,17824,17826,17828,17830,17832],{"class":30,"line":50},[28,17803,14986],{"class":207},[28,17805,17806],{"class":34}," Point",[28,17808,17809],{"class":211},"::",[28,17811,17579],{"class":34},[28,17813,212],{"class":211},[28,17815,14114],{"class":207},[28,17817,17085],{"class":5293},[28,17819,12512],{"class":211},[28,17821,14114],{"class":207},[28,17823,17092],{"class":5293},[28,17825,17095],{"class":211},[28,17827,257],{"class":207},[28,17829,17100],{"class":211},[28,17831,257],{"class":207},[28,17833,17105],{"class":211},[28,17835,17836],{"class":30,"line":58},[28,17837,17110],{"class":269},[28,17839,17840,17842,17844,17846,17848,17850,17852],{"class":30,"line":70},[28,17841,14815],{"class":207},[28,17843,17806],{"class":34},[28,17845,17809],{"class":211},[28,17847,17341],{"class":34},[28,17849,17120],{"class":211},[28,17851,17123],{"class":207},[28,17853,17126],{"class":211},[28,17855,17856,17858,17860,17862,17864,17866,17868],{"class":30,"line":78},[28,17857,14815],{"class":207},[28,17859,17806],{"class":34},[28,17861,17809],{"class":211},[28,17863,17369],{"class":34},[28,17865,17120],{"class":211},[28,17867,17123],{"class":207},[28,17869,17140],{"class":211},[14,17871,17872],{},"创建circle.h",[18,17874,17876],{"className":198,"code":17875,"language":200,"meta":23,"style":23},"#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",[25,17877,17878,17885,17891,17901,17907,17913,17917,17921,17925,17939,17953,17957,17965,17973,17977,17981,17987,17991,17995],{"__ignoreMap":23},[28,17879,17880,17882],{"class":30,"line":31},[28,17881,17670],{"class":207},[28,17883,17884],{"class":34}," once\n",[28,17886,17887,17889],{"class":30,"line":42},[28,17888,2027],{"class":207},[28,17890,2030],{"class":64},[28,17892,17893,17895,17897,17899],{"class":30,"line":50},[28,17894,2035],{"class":207},[28,17896,2038],{"class":207},[28,17898,2041],{"class":34},[28,17900,1370],{"class":211},[28,17902,17903,17905],{"class":30,"line":58},[28,17904,2027],{"class":207},[28,17906,17794],{"class":64},[28,17908,17909,17911],{"class":30,"line":70},[28,17910,14771],{"class":207},[28,17912,14774],{"class":34},[28,17914,17915],{"class":30,"line":78},[28,17916,1624],{"class":211},[28,17918,17919],{"class":30,"line":86},[28,17920,14793],{"class":207},[28,17922,17923],{"class":30,"line":97},[28,17924,17071],{"class":269},[28,17926,17927,17929,17931,17933,17935,17937],{"class":30,"line":108},[28,17928,14986],{"class":207},[28,17930,17191],{"class":34},[28,17932,212],{"class":211},[28,17934,14114],{"class":207},[28,17936,17198],{"class":5293},[28,17938,2796],{"class":211},[28,17940,17941,17943,17945,17947,17949,17951],{"class":30,"line":1407},[28,17942,14986],{"class":207},[28,17944,17213],{"class":34},[28,17946,212],{"class":211},[28,17948,17218],{"class":34},[28,17950,17221],{"class":5293},[28,17952,2796],{"class":211},[28,17954,17955],{"class":30,"line":1690},[28,17956,17234],{"class":269},[28,17958,17959,17961,17963],{"class":30,"line":1695},[28,17960,14815],{"class":207},[28,17962,17241],{"class":34},[28,17964,5713],{"class":211},[28,17966,17967,17969,17971],{"class":30,"line":1701},[28,17968,17253],{"class":34},[28,17970,17256],{"class":34},[28,17972,5713],{"class":211},[28,17974,17975],{"class":30,"line":1706},[28,17976,2477],{"emptyLinePlaceholder":134},[28,17978,17979],{"class":30,"line":1720},[28,17980,15299],{"class":207},[28,17982,17983,17985],{"class":30,"line":1725},[28,17984,14815],{"class":207},[28,17986,14805],{"class":211},[28,17988,17989],{"class":30,"line":1731},[28,17990,17282],{"class":269},[28,17992,17993],{"class":30,"line":1752},[28,17994,17287],{"class":211},[28,17996,17997],{"class":30,"line":1757},[28,17998,4072],{"class":211},[14,18000,18001],{},"创建circle.cpp",[18,18003,18005],{"className":198,"code":18004,"language":200,"meta":23,"style":23},"#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",[25,18006,18007,18014,18037,18059,18064,18080],{"__ignoreMap":23},[28,18008,18009,18011],{"class":30,"line":31},[28,18010,2027],{"class":207},[28,18012,18013],{"class":64},"\u003Ccircle.h>\n",[28,18015,18016,18018,18021,18023,18025,18027,18029,18031,18033,18035],{"class":30,"line":42},[28,18017,5441],{"class":207},[28,18019,18020],{"class":34}," Circle",[28,18022,17809],{"class":211},[28,18024,17537],{"class":34},[28,18026,212],{"class":211},[28,18028,14114],{"class":207},[28,18030,17198],{"class":5293},[28,18032,17201],{"class":211},[28,18034,257],{"class":207},[28,18036,17206],{"class":211},[28,18038,18039,18041,18043,18045,18047,18049,18051,18053,18055,18057],{"class":30,"line":50},[28,18040,5441],{"class":207},[28,18042,18020],{"class":34},[28,18044,17809],{"class":211},[28,18046,17589],{"class":34},[28,18048,212],{"class":211},[28,18050,17218],{"class":34},[28,18052,17221],{"class":5293},[28,18054,17224],{"class":211},[28,18056,257],{"class":207},[28,18058,17229],{"class":211},[28,18060,18061],{"class":30,"line":58},[28,18062,18063],{"class":269},"\u002F\u002F获取属性\n",[28,18065,18066,18068,18070,18072,18074,18076,18078],{"class":30,"line":70},[28,18067,14114],{"class":207},[28,18069,18020],{"class":34},[28,18071,17809],{"class":211},[28,18073,17421],{"class":34},[28,18075,17120],{"class":211},[28,18077,17123],{"class":207},[28,18079,17248],{"class":211},[28,18081,18082,18084,18086,18088,18090,18092,18094],{"class":30,"line":78},[28,18083,17218],{"class":34},[28,18085,18020],{"class":34},[28,18087,17809],{"class":211},[28,18089,17335],{"class":34},[28,18091,17120],{"class":211},[28,18093,17123],{"class":207},[28,18095,17263],{"class":211},[14,18097,18098],{},"使用封装的类",[18,18100,18102],{"className":198,"code":18101,"language":200,"meta":23,"style":23},"#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",[25,18103,18104,18110,18120,18126,18132,18156,18160,18186,18212,18236,18250,18254,18266,18270,18274,18278,18290,18294,18298,18306,18310,18314,18318,18322,18326,18336,18342,18350,18358,18368,18374,18386,18394,18402,18412,18418,18430,18434,18442,18448],{"__ignoreMap":23},[28,18105,18106,18108],{"class":30,"line":31},[28,18107,2027],{"class":207},[28,18109,2030],{"class":64},[28,18111,18112,18114,18116,18118],{"class":30,"line":42},[28,18113,2035],{"class":207},[28,18115,2038],{"class":207},[28,18117,2041],{"class":34},[28,18119,1370],{"class":211},[28,18121,18122,18124],{"class":30,"line":50},[28,18123,2027],{"class":207},[28,18125,18013],{"class":64},[28,18127,18128,18130],{"class":30,"line":58},[28,18129,2027],{"class":207},[28,18131,17794],{"class":64},[28,18133,18134,18136,18138,18140,18142,18144,18146,18148,18150,18152,18154],{"class":30,"line":70},[28,18135,5441],{"class":207},[28,18137,17298],{"class":34},[28,18139,212],{"class":211},[28,18141,17303],{"class":34},[28,18143,10661],{"class":207},[28,18145,498],{"class":5293},[28,18147,588],{"class":211},[28,18149,17218],{"class":34},[28,18151,10661],{"class":207},[28,18153,14],{"class":5293},[28,18155,218],{"class":211},[28,18157,18158],{"class":30,"line":78},[28,18159,1624],{"class":211},[28,18161,18162,18164,18166,18168,18170,18172,18174,18176,18178,18180,18182,18184],{"class":30,"line":86},[28,18163,14815],{"class":207},[28,18165,17328],{"class":211},[28,18167,257],{"class":207},[28,18169,16419],{"class":211},[28,18171,17335],{"class":34},[28,18173,17338],{"class":211},[28,18175,17341],{"class":34},[28,18177,13127],{"class":211},[28,18179,742],{"class":207},[28,18181,15965],{"class":211},[28,18183,17341],{"class":34},[28,18185,5713],{"class":211},[28,18187,18188,18190,18192,18194,18196,18198,18200,18202,18204,18206,18208,18210],{"class":30,"line":97},[28,18189,14815],{"class":207},[28,18191,17358],{"class":211},[28,18193,257],{"class":207},[28,18195,16419],{"class":211},[28,18197,17335],{"class":34},[28,18199,17338],{"class":211},[28,18201,17369],{"class":34},[28,18203,13127],{"class":211},[28,18205,742],{"class":207},[28,18207,15965],{"class":211},[28,18209,17369],{"class":34},[28,18211,5713],{"class":211},[28,18213,18214,18216,18218,18220,18222,18224,18226,18228,18230,18232,18234],{"class":30,"line":108},[28,18215,14815],{"class":207},[28,18217,17386],{"class":211},[28,18219,257],{"class":207},[28,18221,17391],{"class":34},[28,18223,17394],{"class":211},[28,18225,665],{"class":207},[28,18227,17328],{"class":211},[28,18229,691],{"class":207},[28,18231,17358],{"class":211},[28,18233,665],{"class":207},[28,18235,17407],{"class":211},[28,18237,18238,18240,18242,18244,18246,18248],{"class":30,"line":1407},[28,18239,3178],{"class":207},[28,18241,17414],{"class":211},[28,18243,1120],{"class":207},[28,18245,16419],{"class":211},[28,18247,17421],{"class":34},[28,18249,17424],{"class":211},[28,18251,18252],{"class":30,"line":1690},[28,18253,2107],{"class":211},[28,18255,18256,18258,18260,18262,18264],{"class":30,"line":1695},[28,18257,9746],{"class":211},[28,18259,1253],{"class":207},[28,18261,17437],{"class":64},[28,18263,1522],{"class":207},[28,18265,8917],{"class":211},[28,18267,18268],{"class":30,"line":1701},[28,18269,2264],{"class":211},[28,18271,18272],{"class":30,"line":1706},[28,18273,16900],{"class":207},[28,18275,18276],{"class":30,"line":1720},[28,18277,2107],{"class":211},[28,18279,18280,18282,18284,18286,18288],{"class":30,"line":1725},[28,18281,9746],{"class":211},[28,18283,1253],{"class":207},[28,18285,17462],{"class":64},[28,18287,1522],{"class":207},[28,18289,8917],{"class":211},[28,18291,18292],{"class":30,"line":1731},[28,18293,2264],{"class":211},[28,18295,18296],{"class":30,"line":1752},[28,18297,1643],{"class":211},[28,18299,18300,18302,18304],{"class":30,"line":1757},[28,18301,215],{"class":207},[28,18303,2050],{"class":34},[28,18305,2053],{"class":211},[28,18307,18308],{"class":30,"line":1771},[28,18309,1624],{"class":211},[28,18311,18312],{"class":30,"line":1776},[28,18313,15130],{"class":269},[28,18315,18316],{"class":30,"line":1805},[28,18317,14877],{"class":211},[28,18319,18320],{"class":30,"line":1810},[28,18321,17499],{"class":211},[28,18323,18324],{"class":30,"line":1827},[28,18325,17071],{"class":269},[28,18327,18328,18330,18332,18334],{"class":30,"line":1832},[28,18329,1629],{"class":211},[28,18331,1253],{"class":207},[28,18333,17512],{"class":64},[28,18335,1370],{"class":211},[28,18337,18338,18340],{"class":30,"line":1837},[28,18339,14815],{"class":207},[28,18341,17521],{"class":211},[28,18343,18344,18346,18348],{"class":30,"line":1842},[28,18345,2089],{"class":211},[28,18347,1507],{"class":207},[28,18349,17530],{"class":211},[28,18351,18352,18354,18356],{"class":30,"line":1856},[28,18353,16672],{"class":211},[28,18355,17537],{"class":34},[28,18357,17540],{"class":211},[28,18359,18360,18362,18364,18366],{"class":30,"line":1861},[28,18361,1629],{"class":211},[28,18363,1253],{"class":207},[28,18365,17549],{"class":64},[28,18367,1370],{"class":211},[28,18369,18370,18372],{"class":30,"line":2654},[28,18371,14815],{"class":207},[28,18373,17558],{"class":211},[28,18375,18376,18378,18380,18382,18384],{"class":30,"line":2668},[28,18377,2089],{"class":211},[28,18379,1507],{"class":207},[28,18381,1030],{"class":211},[28,18383,1507],{"class":207},[28,18385,17571],{"class":211},[28,18387,18388,18390,18392],{"class":30,"line":2676},[28,18389,17576],{"class":211},[28,18391,17579],{"class":34},[28,18393,17582],{"class":211},[28,18395,18396,18398,18400],{"class":30,"line":2681},[28,18397,16672],{"class":211},[28,18399,17589],{"class":34},[28,18401,17592],{"class":211},[28,18403,18404,18406,18408,18410],{"class":30,"line":2687},[28,18405,1629],{"class":211},[28,18407,1253],{"class":207},[28,18409,17601],{"class":64},[28,18411,1370],{"class":211},[28,18413,18414,18416],{"class":30,"line":2693},[28,18415,14815],{"class":207},[28,18417,17610],{"class":211},[28,18419,18420,18422,18424,18426,18428],{"class":30,"line":2698},[28,18421,2089],{"class":211},[28,18423,1507],{"class":207},[28,18425,17619],{"class":211},[28,18427,1507],{"class":207},[28,18429,17624],{"class":211},[28,18431,18432],{"class":30,"line":8025},[28,18433,17629],{"class":211},[28,18435,18436,18438,18440],{"class":30,"line":8049},[28,18437,17634],{"class":211},[28,18439,17579],{"class":34},[28,18441,17639],{"class":211},[28,18443,18444,18446],{"class":30,"line":8054},[28,18445,17644],{"class":34},[28,18447,17647],{"class":211},[28,18449,18450],{"class":30,"line":8060},[28,18451,1643],{"class":211},[149,18453,18455],{"id":18454},"_82对象的初始化清理","8.2对象的初始化清理",[116,18457,18458,18461],{},[119,18459,18460],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[119,18462,18463],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[177,18465,18467],{"id":18466},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18469,18470,18471,18474],{},"对象的",[359,18472,18473],{},"初始化和清理","也是两个非常重要的安全问题",[14,18476,18477],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18479,18480],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18482,18483,18484,18487,18488,18491],{},"c++利用了",[359,18485,18486],{},"构造函数","和",[359,18489,18490],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18493,18494,18495],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[359,18496,18497],{},"我们不提供构造和析构，编译器会提供",[14,18499,18500],{},[359,18501,18502],{},"编译器提供的构造函数和析构函数是空实现。",[116,18504,18505,18508],{},[119,18506,18507],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[119,18509,18510,18511,18514],{},"析构函数：主要作用在于对象",[359,18512,18513],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18516,18517,18520],{},[359,18518,18519],{},"构造函数语法：",[25,18521,18522],{},"类名(){}",[161,18524,18525,18528,18531,18534,18537],{},[119,18526,18527],{},"构造函数，没有返回值也不写void",[119,18529,18530],{},"函数名称与类名相同",[119,18532,18533],{},"构造函数可以有参数，因此可以发生重载",[119,18535,18536],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[119,18538,18539,18540,639],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[25,18541,18542],{},"Person(){}",[14,18544,18545,13872,18548],{},[359,18546,18547],{},"析构函数语法：",[25,18549,18550],{},"~类名(){}",[161,18552,18553,18556,18559,18565],{},[119,18554,18555],{},"析构函数，没有返回值也不写void",[119,18557,18558],{},"函数名称与类名相同,在名称前加上符号  ~",[119,18560,18561,18562],{},"析构函数不可以有参数，因此",[359,18563,18564],{},"不可以发生重载",[119,18566,18567],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[18,18569,18571],{"className":198,"code":18570,"language":200,"meta":23,"style":23},"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",[25,18572,18573,18579,18583,18587,18592,18599,18603,18616,18620,18625,18632,18636,18649,18653,18657,18661,18665,18673,18677,18685,18689,18693,18701,18705,18710,18714,18721,18725,18738,18742,18750],{"__ignoreMap":23},[28,18574,18575,18577],{"class":30,"line":31},[28,18576,14771],{"class":207},[28,18578,15248],{"class":34},[28,18580,18581],{"class":30,"line":42},[28,18582,1624],{"class":211},[28,18584,18585],{"class":30,"line":50},[28,18586,14793],{"class":207},[28,18588,18589],{"class":30,"line":58},[28,18590,18591],{"class":269},"    \u002F\u002F构造函数\n",[28,18593,18594,18597],{"class":30,"line":70},[28,18595,18596],{"class":34},"    Person",[28,18598,2053],{"class":211},[28,18600,18601],{"class":30,"line":78},[28,18602,2107],{"class":211},[28,18604,18605,18607,18609,18612,18614],{"class":30,"line":86},[28,18606,9746],{"class":211},[28,18608,1253],{"class":207},[28,18610,18611],{"class":64}," \"Person的构造函数调用\"",[28,18613,1522],{"class":207},[28,18615,8917],{"class":211},[28,18617,18618],{"class":30,"line":97},[28,18619,2264],{"class":211},[28,18621,18622],{"class":30,"line":108},[28,18623,18624],{"class":269},"    \u002F\u002F析构函数\n",[28,18626,18627,18630],{"class":30,"line":1407},[28,18628,18629],{"class":34},"    ~Person",[28,18631,2053],{"class":211},[28,18633,18634],{"class":30,"line":1690},[28,18635,2107],{"class":211},[28,18637,18638,18640,18642,18645,18647],{"class":30,"line":1695},[28,18639,9746],{"class":211},[28,18641,1253],{"class":207},[28,18643,18644],{"class":64}," \"Person的析构函数调用\"",[28,18646,1522],{"class":207},[28,18648,8917],{"class":211},[28,18650,18651],{"class":30,"line":1701},[28,18652,2264],{"class":211},[28,18654,18655],{"class":30,"line":1706},[28,18656,2477],{"emptyLinePlaceholder":134},[28,18658,18659],{"class":30,"line":1720},[28,18660,4072],{"class":211},[28,18662,18663],{"class":30,"line":1725},[28,18664,2477],{"emptyLinePlaceholder":134},[28,18666,18667,18669,18671],{"class":30,"line":1731},[28,18668,5441],{"class":207},[28,18670,5665],{"class":34},[28,18672,2053],{"class":211},[28,18674,18675],{"class":30,"line":1752},[28,18676,1624],{"class":211},[28,18678,18679,18682],{"class":30,"line":1757},[28,18680,18681],{"class":211},"    Person p;",[28,18683,18684],{"class":269},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[28,18686,18687],{"class":30,"line":1771},[28,18688,1643],{"class":211},[28,18690,18691],{"class":30,"line":1776},[28,18692,2477],{"emptyLinePlaceholder":134},[28,18694,18695,18697,18699],{"class":30,"line":1805},[28,18696,215],{"class":207},[28,18698,2050],{"class":34},[28,18700,10930],{"class":211},[28,18702,18703],{"class":30,"line":1810},[28,18704,13287],{"class":211},[28,18706,18707],{"class":30,"line":1827},[28,18708,18709],{"class":269},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[28,18711,18712],{"class":30,"line":1832},[28,18713,2477],{"emptyLinePlaceholder":134},[28,18715,18716,18718],{"class":30,"line":1837},[28,18717,18681],{"class":211},[28,18719,18720],{"class":269},"\u002F\u002F只有构造函数\n",[28,18722,18723],{"class":30,"line":1842},[28,18724,2477],{"emptyLinePlaceholder":134},[28,18726,18727,18729,18731,18733,18735],{"class":30,"line":1856},[28,18728,2380],{"class":34},[28,18730,212],{"class":211},[28,18732,2385],{"class":64},[28,18734,6043],{"class":211},[28,18736,18737],{"class":269},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[28,18739,18740],{"class":30,"line":1861},[28,18741,2477],{"emptyLinePlaceholder":134},[28,18743,18744,18746,18748],{"class":30,"line":2654},[28,18745,4167],{"class":207},[28,18747,4170],{"class":38},[28,18749,1370],{"class":211},[28,18751,18752],{"class":30,"line":2668},[28,18753,1643],{"class":211},[14,18755,18756],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[177,18758,18760],{"id":18759},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18762,18763],{},"两种分类方式：",[14,18765,18766],{},"​\t按参数分为： 有参构造和无参构造",[14,18768,18769],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18771,18772],{},"三种调用方式：",[14,18774,18775],{},"​\t括号法",[14,18777,18778],{},"​\t显示法",[14,18780,18781],{},"​\t隐式转换法",[18,18783,18785],{"className":198,"code":18784,"language":200,"meta":23,"style":23},"#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",[25,18786,18787,18793,18803,18808,18813,18818,18823,18827,18835,18839,18843,18847,18853,18857,18870,18874,18886,18890,18899,18912,18916,18920,18926,18930,18943,18947,18952,18968,18972,18977,18986,18999,19003,19009,19013,19018,19026,19030,19035,19039,19047,19051,19056,19061,19066,19071,19076,19080,19085,19090,19095,19100,19104,19109,19114,19130,19142,19147,19151,19156,19161,19166,19170,19175,19189,19202,19206,19214,19218,19224,19230,19238],{"__ignoreMap":23},[28,18788,18789,18791],{"class":30,"line":31},[28,18790,2027],{"class":207},[28,18792,2030],{"class":64},[28,18794,18795,18797,18799,18801],{"class":30,"line":42},[28,18796,2035],{"class":207},[28,18798,2038],{"class":207},[28,18800,2041],{"class":34},[28,18802,1370],{"class":211},[28,18804,18805],{"class":30,"line":50},[28,18806,18807],{"class":269},"\u002F\u002F1.构造函数的分类及调用\n",[28,18809,18810],{"class":30,"line":58},[28,18811,18812],{"class":269},"\u002F\u002F分类\n",[28,18814,18815],{"class":30,"line":70},[28,18816,18817],{"class":269},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[28,18819,18820],{"class":30,"line":78},[28,18821,18822],{"class":269},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[28,18824,18825],{"class":30,"line":86},[28,18826,2477],{"emptyLinePlaceholder":134},[28,18828,18829,18831,18833],{"class":30,"line":97},[28,18830,14771],{"class":207},[28,18832,15646],{"class":34},[28,18834,2751],{"class":211},[28,18836,18837],{"class":30,"line":108},[28,18838,1624],{"class":211},[28,18840,18841],{"class":30,"line":1407},[28,18842,14793],{"class":207},[28,18844,18845],{"class":30,"line":1690},[28,18846,18591],{"class":269},[28,18848,18849,18851],{"class":30,"line":1695},[28,18850,18596],{"class":34},[28,18852,2053],{"class":211},[28,18854,18855],{"class":30,"line":1701},[28,18856,2107],{"class":211},[28,18858,18859,18861,18863,18866,18868],{"class":30,"line":1706},[28,18860,3528],{"class":211},[28,18862,1253],{"class":207},[28,18864,18865],{"class":64},"\"Person构造函数无参构造\"",[28,18867,1253],{"class":207},[28,18869,1275],{"class":211},[28,18871,18872],{"class":30,"line":1720},[28,18873,2264],{"class":211},[28,18875,18876,18878,18880,18882,18884],{"class":30,"line":1725},[28,18877,18596],{"class":34},[28,18879,212],{"class":211},[28,18881,215],{"class":207},[28,18883,1476],{"class":5293},[28,18885,218],{"class":211},[28,18887,18888],{"class":30,"line":1731},[28,18889,2107],{"class":211},[28,18891,18892,18895,18897],{"class":30,"line":1752},[28,18893,18894],{"class":211},"        age",[28,18896,257],{"class":207},[28,18898,6274],{"class":211},[28,18900,18901,18903,18905,18908,18910],{"class":30,"line":1757},[28,18902,3528],{"class":211},[28,18904,1253],{"class":207},[28,18906,18907],{"class":64},"\"Person构造函数有参构造\"",[28,18909,1253],{"class":207},[28,18911,1275],{"class":211},[28,18913,18914],{"class":30,"line":1771},[28,18915,2264],{"class":211},[28,18917,18918],{"class":30,"line":1776},[28,18919,18624],{"class":269},[28,18921,18922,18924],{"class":30,"line":1805},[28,18923,18629],{"class":34},[28,18925,2053],{"class":211},[28,18927,18928],{"class":30,"line":1810},[28,18929,2107],{"class":211},[28,18931,18932,18934,18936,18939,18941],{"class":30,"line":1827},[28,18933,3528],{"class":211},[28,18935,1253],{"class":207},[28,18937,18938],{"class":64},"\"Person析构函数被调用\"",[28,18940,1253],{"class":207},[28,18942,1275],{"class":211},[28,18944,18945],{"class":30,"line":1832},[28,18946,2264],{"class":211},[28,18948,18949],{"class":30,"line":1837},[28,18950,18951],{"class":269},"    \u002F\u002F拷贝构造函数\n",[28,18953,18954,18956,18958,18960,18962,18964,18966],{"class":30,"line":1842},[28,18955,18596],{"class":34},[28,18957,212],{"class":211},[28,18959,6869],{"class":207},[28,18961,15646],{"class":34},[28,18963,10661],{"class":207},[28,18965,14],{"class":5293},[28,18967,218],{"class":211},[28,18969,18970],{"class":30,"line":1856},[28,18971,2107],{"class":211},[28,18973,18974],{"class":30,"line":1861},[28,18975,18976],{"class":269},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[28,18978,18979,18981,18983],{"class":30,"line":2654},[28,18980,18894],{"class":211},[28,18982,257],{"class":207},[28,18984,18985],{"class":211},"p.age;\n",[28,18987,18988,18990,18992,18995,18997],{"class":30,"line":2668},[28,18989,3528],{"class":211},[28,18991,1253],{"class":207},[28,18993,18994],{"class":64},"\"Person拷贝构造函数被调用\"",[28,18996,1253],{"class":207},[28,18998,1275],{"class":211},[28,19000,19001],{"class":30,"line":2676},[28,19002,2264],{"class":211},[28,19004,19005,19007],{"class":30,"line":2681},[28,19006,2062],{"class":207},[28,19008,7874],{"class":211},[28,19010,19011],{"class":30,"line":2687},[28,19012,4072],{"class":211},[28,19014,19015],{"class":30,"line":2693},[28,19016,19017],{"class":269},"\u002F\u002F调用\n",[28,19019,19020,19022,19024],{"class":30,"line":2698},[28,19021,5441],{"class":207},[28,19023,5665],{"class":34},[28,19025,2053],{"class":211},[28,19027,19028],{"class":30,"line":8025},[28,19029,1624],{"class":211},[28,19031,19032],{"class":30,"line":8049},[28,19033,19034],{"class":269},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[28,19036,19037],{"class":30,"line":8054},[28,19038,1643],{"class":211},[28,19040,19041,19043,19045],{"class":30,"line":8060},[28,19042,5441],{"class":207},[28,19044,5734],{"class":34},[28,19046,2053],{"class":211},[28,19048,19049],{"class":30,"line":8087},[28,19050,1624],{"class":211},[28,19052,19053],{"class":30,"line":8092},[28,19054,19055],{"class":269},"    \u002F\u002F1.括号法\n",[28,19057,19058],{"class":30,"line":8098},[28,19059,19060],{"class":269},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[28,19062,19063],{"class":30,"line":8110},[28,19064,19065],{"class":269},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[28,19067,19068],{"class":30,"line":8122},[28,19069,19070],{"class":269},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[28,19072,19073],{"class":30,"line":8134},[28,19074,19075],{"class":269},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[28,19077,19078],{"class":30,"line":9793},[28,19079,2477],{"emptyLinePlaceholder":134},[28,19081,19082],{"class":30,"line":9818},[28,19083,19084],{"class":269},"    \u002F\u002F注意事项\n",[28,19086,19087],{"class":30,"line":9841},[28,19088,19089],{"class":269},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[28,19091,19092],{"class":30,"line":9865},[28,19093,19094],{"class":269},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[28,19096,19097],{"class":30,"line":9870},[28,19098,19099],{"class":269},"    \u002F\u002F Person p4();\n",[28,19101,19102],{"class":30,"line":9875},[28,19103,2477],{"emptyLinePlaceholder":134},[28,19105,19106],{"class":30,"line":9880},[28,19107,19108],{"class":269},"    \u002F\u002F2.显示法\n",[28,19110,19111],{"class":30,"line":9889},[28,19112,19113],{"class":211},"    Person p1;\n",[28,19115,19116,19119,19121,19124,19126,19128],{"class":30,"line":9894},[28,19117,19118],{"class":211},"    Person p2",[28,19120,257],{"class":207},[28,19122,19123],{"class":34},"Person",[28,19125,212],{"class":211},[28,19127,656],{"class":38},[28,19129,2796],{"class":211},[28,19131,19132,19135,19137,19139],{"class":30,"line":9900},[28,19133,19134],{"class":211},"    Person p3",[28,19136,257],{"class":207},[28,19138,19123],{"class":34},[28,19140,19141],{"class":211},"(p2);\n",[28,19143,19144],{"class":30,"line":9921},[28,19145,19146],{"class":269},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[28,19148,19149],{"class":30,"line":9927},[28,19150,2477],{"emptyLinePlaceholder":134},[28,19152,19153],{"class":30,"line":9941},[28,19154,19155],{"class":269},"    \u002F\u002F 注意事项2\n",[28,19157,19158],{"class":30,"line":9947},[28,19159,19160],{"class":269},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[28,19162,19163],{"class":30,"line":9974},[28,19164,19165],{"class":269},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[28,19167,19168],{"class":30,"line":9983},[28,19169,2477],{"emptyLinePlaceholder":134},[28,19171,19172],{"class":30,"line":9989},[28,19173,19174],{"class":269},"    \u002F\u002F3.隐士转换法\n",[28,19176,19177,19180,19182,19184,19186],{"class":30,"line":9997},[28,19178,19179],{"class":211},"    Person p4",[28,19181,257],{"class":207},[28,19183,656],{"class":38},[28,19185,266],{"class":211},[28,19187,19188],{"class":269},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[28,19190,19191,19194,19196,19199],{"class":30,"line":10002},[28,19192,19193],{"class":211},"    Person p5",[28,19195,257],{"class":207},[28,19197,19198],{"class":211},"p4;",[28,19200,19201],{"class":269}," \u002F\u002F 这里会调用拷贝构造函数\n",[28,19203,19204],{"class":30,"line":16681},[28,19205,1643],{"class":211},[28,19207,19208,19210,19212],{"class":30,"line":16687},[28,19209,215],{"class":207},[28,19211,2050],{"class":34},[28,19213,2053],{"class":211},[28,19215,19216],{"class":30,"line":16710},[28,19217,1624],{"class":211},[28,19219,19220,19222],{"class":30,"line":16716},[28,19221,5710],{"class":34},[28,19223,5713],{"class":211},[28,19225,19226,19228],{"class":30,"line":16739},[28,19227,5779],{"class":34},[28,19229,5713],{"class":211},[28,19231,19232,19234,19236],{"class":30,"line":16753},[28,19233,4167],{"class":207},[28,19235,4170],{"class":38},[28,19237,1370],{"class":211},[28,19239,19240],{"class":30,"line":16773},[28,19241,1643],{"class":211},[14,19243,19244,19247],{},[359,19245,19246],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[177,19249,19251],{"id":19250},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19253,19254],{},"C++中拷贝构造函数调用时机通常有三种情况",[116,19256,19257,19260,19263],{},[119,19258,19259],{},"使用一个已经创建完毕的对象来初始化一个新对象",[119,19261,19262],{},"值传递的方式给函数参数传值",[119,19264,19265],{},"以值方式返回局部对象",[18,19267,19269],{"className":198,"code":19268,"language":200,"meta":23,"style":23},"#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",[25,19270,19271,19277,19287,19291,19296,19300,19305,19310,19315,19321,19325,19329,19335,19339,19352,19356,19361,19373,19377,19385,19398,19402,19406,19422,19426,19435,19448,19452,19458,19462,19474,19478,19484,19488,19492,19500,19504,19517,19525,19543,19547,19552,19557,19572,19576,19589,19593,19601,19605,19609,19617,19621,19626,19635,19639,19643,19668,19678,19682,19690,19694,19705,19730,19734,19738,19742,19750,19754,19759,19764,19771,19776,19781,19786,19791,19795,19800,19804,19809,19813,19818,19823,19827,19831,19836,19841,19849],{"__ignoreMap":23},[28,19272,19273,19275],{"class":30,"line":31},[28,19274,2027],{"class":207},[28,19276,2030],{"class":64},[28,19278,19279,19281,19283,19285],{"class":30,"line":42},[28,19280,2035],{"class":207},[28,19282,2038],{"class":207},[28,19284,2041],{"class":34},[28,19286,1370],{"class":211},[28,19288,19289],{"class":30,"line":50},[28,19290,2477],{"emptyLinePlaceholder":134},[28,19292,19293],{"class":30,"line":58},[28,19294,19295],{"class":269},"\u002F\u002F拷贝构造函数调用时机\n",[28,19297,19298],{"class":30,"line":70},[28,19299,2477],{"emptyLinePlaceholder":134},[28,19301,19302],{"class":30,"line":78},[28,19303,19304],{"class":269},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[28,19306,19307],{"class":30,"line":86},[28,19308,19309],{"class":269},"\u002F\u002F2.值传递的方式给函数参数传值\n",[28,19311,19312],{"class":30,"line":97},[28,19313,19314],{"class":269},"\u002F\u002F3.以值方式返回局部对象\n",[28,19316,19317,19319],{"class":30,"line":108},[28,19318,14771],{"class":207},[28,19320,15248],{"class":34},[28,19322,19323],{"class":30,"line":1407},[28,19324,1624],{"class":211},[28,19326,19327],{"class":30,"line":1690},[28,19328,14793],{"class":207},[28,19330,19331,19333],{"class":30,"line":1695},[28,19332,18596],{"class":34},[28,19334,2053],{"class":211},[28,19336,19337],{"class":30,"line":1701},[28,19338,2107],{"class":211},[28,19340,19341,19343,19345,19348,19350],{"class":30,"line":1706},[28,19342,9746],{"class":211},[28,19344,1253],{"class":207},[28,19346,19347],{"class":64}," \"Person的默认构造函数调用\"",[28,19349,1522],{"class":207},[28,19351,8917],{"class":211},[28,19353,19354],{"class":30,"line":1720},[28,19355,2264],{"class":211},[28,19357,19358],{"class":30,"line":1725},[28,19359,19360],{"class":269},"    \u002F\u002F有参构造\n",[28,19362,19363,19365,19367,19369,19371],{"class":30,"line":1731},[28,19364,18596],{"class":34},[28,19366,212],{"class":211},[28,19368,215],{"class":207},[28,19370,15766],{"class":5293},[28,19372,218],{"class":211},[28,19374,19375],{"class":30,"line":1752},[28,19376,2107],{"class":211},[28,19378,19379,19381,19383],{"class":30,"line":1757},[28,19380,15820],{"class":211},[28,19382,257],{"class":207},[28,19384,7874],{"class":211},[28,19386,19387,19389,19391,19394,19396],{"class":30,"line":1771},[28,19388,9746],{"class":211},[28,19390,1253],{"class":207},[28,19392,19393],{"class":64}," \"Person的有参构造函数调用\"",[28,19395,1522],{"class":207},[28,19397,8917],{"class":211},[28,19399,19400],{"class":30,"line":1776},[28,19401,2264],{"class":211},[28,19403,19404],{"class":30,"line":1805},[28,19405,18951],{"class":269},[28,19407,19408,19410,19412,19414,19416,19418,19420],{"class":30,"line":1810},[28,19409,18596],{"class":34},[28,19411,212],{"class":211},[28,19413,6869],{"class":207},[28,19415,15646],{"class":34},[28,19417,10661],{"class":207},[28,19419,14],{"class":5293},[28,19421,218],{"class":211},[28,19423,19424],{"class":30,"line":1827},[28,19425,2107],{"class":211},[28,19427,19428,19430,19432],{"class":30,"line":1832},[28,19429,15820],{"class":211},[28,19431,257],{"class":207},[28,19433,19434],{"class":211}," p.m_Age;\n",[28,19436,19437,19439,19441,19444,19446],{"class":30,"line":1837},[28,19438,9746],{"class":211},[28,19440,1253],{"class":207},[28,19442,19443],{"class":64}," \"Person的拷贝构造函数调用\"",[28,19445,1522],{"class":207},[28,19447,8917],{"class":211},[28,19449,19450],{"class":30,"line":1842},[28,19451,2264],{"class":211},[28,19453,19454,19456],{"class":30,"line":1856},[28,19455,18629],{"class":34},[28,19457,2053],{"class":211},[28,19459,19460],{"class":30,"line":1861},[28,19461,2107],{"class":211},[28,19463,19464,19466,19468,19470,19472],{"class":30,"line":2654},[28,19465,9746],{"class":211},[28,19467,1253],{"class":207},[28,19469,18644],{"class":64},[28,19471,1522],{"class":207},[28,19473,8917],{"class":211},[28,19475,19476],{"class":30,"line":2668},[28,19477,2264],{"class":211},[28,19479,19480,19482],{"class":30,"line":2676},[28,19481,2062],{"class":207},[28,19483,15743],{"class":211},[28,19485,19486],{"class":30,"line":2681},[28,19487,4072],{"class":211},[28,19489,19490],{"class":30,"line":2687},[28,19491,19304],{"class":269},[28,19493,19494,19496,19498],{"class":30,"line":2693},[28,19495,5441],{"class":207},[28,19497,5665],{"class":34},[28,19499,2053],{"class":211},[28,19501,19502],{"class":30,"line":2698},[28,19503,1624],{"class":211},[28,19505,19506,19509,19511,19513,19515],{"class":30,"line":8025},[28,19507,19508],{"class":211},"    Person ",[28,19510,7207],{"class":34},[28,19512,212],{"class":211},[28,19514,910],{"class":38},[28,19516,2796],{"class":211},[28,19518,19519,19521,19523],{"class":30,"line":8049},[28,19520,19508],{"class":211},[28,19522,7110],{"class":34},[28,19524,17592],{"class":211},[28,19526,19527,19529,19531,19534,19536,19539,19541],{"class":30,"line":8054},[28,19528,1629],{"class":211},[28,19530,1253],{"class":207},[28,19532,19533],{"class":64},"\"P2的年龄为：\"",[28,19535,1253],{"class":207},[28,19537,19538],{"class":211},"p2.m_Age",[28,19540,1253],{"class":207},[28,19542,1275],{"class":211},[28,19544,19545],{"class":30,"line":8060},[28,19546,1643],{"class":211},[28,19548,19549],{"class":30,"line":8087},[28,19550,19551],{"class":269},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[28,19553,19554],{"class":30,"line":8092},[28,19555,19556],{"class":269},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[28,19558,19559,19561,19564,19566,19568,19570],{"class":30,"line":8098},[28,19560,5441],{"class":207},[28,19562,19563],{"class":34}," doWork",[28,19565,212],{"class":211},[28,19567,19123],{"class":34},[28,19569,6902],{"class":5293},[28,19571,218],{"class":211},[28,19573,19574],{"class":30,"line":8110},[28,19575,1624],{"class":211},[28,19577,19578,19580,19582,19585,19587],{"class":30,"line":8122},[28,19579,6606],{"class":211},[28,19581,1253],{"class":207},[28,19583,19584],{"class":64}," \"doWork函数调用\"",[28,19586,1522],{"class":207},[28,19588,8917],{"class":211},[28,19590,19591],{"class":30,"line":8134},[28,19592,1643],{"class":211},[28,19594,19595,19597,19599],{"class":30,"line":9793},[28,19596,5441],{"class":207},[28,19598,5734],{"class":34},[28,19600,2053],{"class":211},[28,19602,19603],{"class":30,"line":9818},[28,19604,1624],{"class":211},[28,19606,19607],{"class":30,"line":9841},[28,19608,15390],{"class":211},[28,19610,19611,19614],{"class":30,"line":9865},[28,19612,19613],{"class":34},"    doWork",[28,19615,19616],{"class":211},"(p);\n",[28,19618,19619],{"class":30,"line":9870},[28,19620,1643],{"class":211},[28,19622,19623],{"class":30,"line":9875},[28,19624,19625],{"class":269},"\u002F\u002F 3.以值方式返回局部对象\n",[28,19627,19628,19630,19633],{"class":30,"line":9880},[28,19629,19123],{"class":34},[28,19631,19632],{"class":34}," doWork2",[28,19634,2053],{"class":211},[28,19636,19637],{"class":30,"line":9889},[28,19638,1624],{"class":211},[28,19640,19641],{"class":30,"line":9894},[28,19642,19113],{"class":211},[28,19644,19645,19647,19649,19651,19653,19655,19657,19659,19661,19663,19665],{"class":30,"line":9900},[28,19646,1629],{"class":211},[28,19648,1253],{"class":207},[28,19650,212],{"class":211},[28,19652,215],{"class":207},[28,19654,6595],{"class":207},[28,19656,639],{"class":211},[28,19658,563],{"class":207},[28,19660,7207],{"class":211},[28,19662,1253],{"class":207},[28,19664,1318],{"class":211},[28,19666,19667],{"class":269},"\u002F\u002F打印p1的地址\n",[28,19669,19670,19672,19675],{"class":30,"line":9921},[28,19671,4167],{"class":207},[28,19673,19674],{"class":211}," p1;",[28,19676,19677],{"class":269},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[28,19679,19680],{"class":30,"line":9927},[28,19681,1643],{"class":211},[28,19683,19684,19686,19688],{"class":30,"line":9941},[28,19685,5441],{"class":207},[28,19687,5806],{"class":34},[28,19689,2053],{"class":211},[28,19691,19692],{"class":30,"line":9947},[28,19693,1624],{"class":211},[28,19695,19696,19699,19701,19703],{"class":30,"line":9974},[28,19697,19698],{"class":211},"    Person p ",[28,19700,257],{"class":207},[28,19702,19632],{"class":34},[28,19704,5713],{"class":211},[28,19706,19707,19709,19711,19713,19715,19717,19719,19721,19723,19725,19727],{"class":30,"line":9983},[28,19708,1629],{"class":211},[28,19710,1253],{"class":207},[28,19712,212],{"class":211},[28,19714,215],{"class":207},[28,19716,6595],{"class":207},[28,19718,639],{"class":211},[28,19720,563],{"class":207},[28,19722,14],{"class":211},[28,19724,1253],{"class":207},[28,19726,1318],{"class":211},[28,19728,19729],{"class":269},"\u002F\u002F打印p的地址\n",[28,19731,19732],{"class":30,"line":9989},[28,19733,1643],{"class":211},[28,19735,19736],{"class":30,"line":9997},[28,19737,2477],{"emptyLinePlaceholder":134},[28,19739,19740],{"class":30,"line":10002},[28,19741,2477],{"emptyLinePlaceholder":134},[28,19743,19744,19746,19748],{"class":30,"line":16681},[28,19745,215],{"class":207},[28,19747,2050],{"class":34},[28,19749,2053],{"class":211},[28,19751,19752],{"class":30,"line":16687},[28,19753,1624],{"class":211},[28,19755,19756],{"class":30,"line":16710},[28,19757,19758],{"class":269},"    \u002F\u002F test01();\n",[28,19760,19761],{"class":30,"line":16716},[28,19762,19763],{"class":269},"    \u002F\u002F test02();\n",[28,19765,19766,19769],{"class":30,"line":16739},[28,19767,19768],{"class":34},"    test03",[28,19770,5713],{"class":211},[28,19772,19773],{"class":30,"line":16753},[28,19774,19775],{"class":269},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[28,19777,19778],{"class":30,"line":16773},[28,19779,19780],{"class":269},"\u002F\u002F 输出结果如下：\n",[28,19782,19783],{"class":30,"line":16779},[28,19784,19785],{"class":269},"\u002F\u002F Person的默认构造函数调用\n",[28,19787,19788],{"class":30,"line":16790},[28,19789,19790],{"class":269},"\u002F\u002F 0x7fffffffceec\n",[28,19792,19793],{"class":30,"line":16813},[28,19794,19790],{"class":269},[28,19796,19797],{"class":30,"line":16835},[28,19798,19799],{"class":269},"\u002F\u002F Person的析构函数调用\n",[28,19801,19802],{"class":30,"line":16840},[28,19803,2477],{"emptyLinePlaceholder":134},[28,19805,19806],{"class":30,"line":16846},[28,19807,19808],{"class":269},"\u002F\u002F 之前的输出结果如下：\n",[28,19810,19811],{"class":30,"line":16860},[28,19812,19785],{"class":269},[28,19814,19815],{"class":30,"line":16873},[28,19816,19817],{"class":269},"\u002F\u002F 地址\n",[28,19819,19820],{"class":30,"line":16878},[28,19821,19822],{"class":269},"\u002F\u002F Person的拷贝构造函数调用\n",[28,19824,19825],{"class":30,"line":16892},[28,19826,19799],{"class":269},[28,19828,19829],{"class":30,"line":16897},[28,19830,19817],{"class":269},[28,19832,19833],{"class":30,"line":16903},[28,19834,19835],{"class":269},"\u002F\u002F (这两次输出的地址也是不同的) \n",[28,19837,19838],{"class":30,"line":16908},[28,19839,19840],{"class":269},"\u002F\u002F Person的析构函数调用     \n",[28,19842,19843,19845,19847],{"class":30,"line":16922},[28,19844,4167],{"class":207},[28,19846,4170],{"class":38},[28,19848,1370],{"class":211},[28,19850,19851],{"class":30,"line":16927},[28,19852,1643],{"class":211},[14,19854,19855],{},"简化版理解",[18,19857,19859],{"className":198,"code":19858,"language":200,"meta":23,"style":23},"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",[25,19860,19861,19869,19873,19879,19892,19903,19907,19919,19932,19940,19944,19960,19973,19982,19986,19991,19997,20010,20014,20018,20025,20029,20033,20038,20046,20050,20066,20079,20092,20096,20101,20109,20113,20117,20122,20127,20143,20151,20158,20164,20168,20172,20177,20185,20189,20193,20216,20223,20227,20231,20239,20243,20253,20275,20279,20283,20287,20295,20299,20304,20309,20315,20319,20329,20333,20341],{"__ignoreMap":23},[28,19862,19863,19865,19867],{"class":30,"line":31},[28,19864,14771],{"class":207},[28,19866,15646],{"class":34},[28,19868,15649],{"class":211},[28,19870,19871],{"class":30,"line":42},[28,19872,14793],{"class":207},[28,19874,19875,19877],{"class":30,"line":50},[28,19876,18596],{"class":34},[28,19878,10930],{"class":211},[28,19880,19881,19883,19885,19888,19890],{"class":30,"line":58},[28,19882,9746],{"class":211},[28,19884,1253],{"class":207},[28,19886,19887],{"class":64}," \"无参构造函数!\"",[28,19889,1522],{"class":207},[28,19891,8917],{"class":211},[28,19893,19894,19897,19899,19901],{"class":30,"line":70},[28,19895,19896],{"class":211},"        mAge ",[28,19898,257],{"class":207},[28,19900,4170],{"class":38},[28,19902,1370],{"class":211},[28,19904,19905],{"class":30,"line":78},[28,19906,2264],{"class":211},[28,19908,19909,19911,19913,19915,19917],{"class":30,"line":86},[28,19910,18596],{"class":34},[28,19912,212],{"class":211},[28,19914,215],{"class":207},[28,19916,15766],{"class":5293},[28,19918,12519],{"class":211},[28,19920,19921,19923,19925,19928,19930],{"class":30,"line":97},[28,19922,9746],{"class":211},[28,19924,1253],{"class":207},[28,19926,19927],{"class":64}," \"有参构造函数!\"",[28,19929,1522],{"class":207},[28,19931,8917],{"class":211},[28,19933,19934,19936,19938],{"class":30,"line":108},[28,19935,19896],{"class":211},[28,19937,257],{"class":207},[28,19939,7874],{"class":211},[28,19941,19942],{"class":30,"line":1407},[28,19943,2264],{"class":211},[28,19945,19946,19948,19950,19952,19954,19956,19958],{"class":30,"line":1690},[28,19947,18596],{"class":34},[28,19949,212],{"class":211},[28,19951,6869],{"class":207},[28,19953,15646],{"class":34},[28,19955,563],{"class":207},[28,19957,6902],{"class":5293},[28,19959,12519],{"class":211},[28,19961,19962,19964,19966,19969,19971],{"class":30,"line":1695},[28,19963,9746],{"class":211},[28,19965,1253],{"class":207},[28,19967,19968],{"class":64}," \"拷贝构造函数!\"",[28,19970,1522],{"class":207},[28,19972,8917],{"class":211},[28,19974,19975,19977,19979],{"class":30,"line":1701},[28,19976,19896],{"class":211},[28,19978,257],{"class":207},[28,19980,19981],{"class":211}," p.mAge;\n",[28,19983,19984],{"class":30,"line":1706},[28,19985,2264],{"class":211},[28,19987,19988],{"class":30,"line":1720},[28,19989,19990],{"class":269},"    \u002F\u002F析构函数在释放内存之前调用\n",[28,19992,19993,19995],{"class":30,"line":1725},[28,19994,18629],{"class":34},[28,19996,10930],{"class":211},[28,19998,19999,20001,20003,20006,20008],{"class":30,"line":1731},[28,20000,9746],{"class":211},[28,20002,1253],{"class":207},[28,20004,20005],{"class":64}," \"析构函数!\"",[28,20007,1522],{"class":207},[28,20009,8917],{"class":211},[28,20011,20012],{"class":30,"line":1752},[28,20013,2264],{"class":211},[28,20015,20016],{"class":30,"line":1757},[28,20017,14793],{"class":207},[28,20019,20020,20022],{"class":30,"line":1771},[28,20021,2062],{"class":207},[28,20023,20024],{"class":211}," mAge;\n",[28,20026,20027],{"class":30,"line":1776},[28,20028,4072],{"class":211},[28,20030,20031],{"class":30,"line":1805},[28,20032,2477],{"emptyLinePlaceholder":134},[28,20034,20035],{"class":30,"line":1810},[28,20036,20037],{"class":269},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[28,20039,20040,20042,20044],{"class":30,"line":1827},[28,20041,5441],{"class":207},[28,20043,5665],{"class":34},[28,20045,10930],{"class":211},[28,20047,20048],{"class":30,"line":1832},[28,20049,2477],{"emptyLinePlaceholder":134},[28,20051,20052,20054,20057,20059,20061,20063],{"class":30,"line":1837},[28,20053,19508],{"class":211},[28,20055,20056],{"class":34},"man",[28,20058,212],{"class":211},[28,20060,521],{"class":38},[28,20062,6043],{"class":211},[28,20064,20065],{"class":269}," \u002F\u002Fp对象已经创建完毕\n",[28,20067,20068,20070,20073,20076],{"class":30,"line":1842},[28,20069,19508],{"class":211},[28,20071,20072],{"class":34},"newman",[28,20074,20075],{"class":211},"(man);",[28,20077,20078],{"class":269}," \u002F\u002F调用拷贝构造函数\n",[28,20080,20081,20084,20086,20089],{"class":30,"line":1856},[28,20082,20083],{"class":211},"    Person newman2 ",[28,20085,257],{"class":207},[28,20087,20088],{"class":211}," man;",[28,20090,20091],{"class":269}," \u002F\u002F拷贝构造\n",[28,20093,20094],{"class":30,"line":1861},[28,20095,2477],{"emptyLinePlaceholder":134},[28,20097,20098],{"class":30,"line":2654},[28,20099,20100],{"class":269},"    \u002F\u002FPerson newman3;\n",[28,20102,20103,20106],{"class":30,"line":2668},[28,20104,20105],{"class":269},"    \u002F\u002Fnewman3 = man;",[28,20107,20108],{"class":269}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[28,20110,20111],{"class":30,"line":2676},[28,20112,1643],{"class":211},[28,20114,20115],{"class":30,"line":2681},[28,20116,2477],{"emptyLinePlaceholder":134},[28,20118,20119],{"class":30,"line":2687},[28,20120,20121],{"class":269},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[28,20123,20124],{"class":30,"line":2693},[28,20125,20126],{"class":269},"\u002F\u002F相当于Person p1 = p;\n",[28,20128,20129,20131,20133,20135,20137,20140],{"class":30,"line":2698},[28,20130,5441],{"class":207},[28,20132,19563],{"class":34},[28,20134,212],{"class":211},[28,20136,19123],{"class":34},[28,20138,20139],{"class":5293}," p1",[28,20141,20142],{"class":211},") {}\n",[28,20144,20145,20147,20149],{"class":30,"line":8025},[28,20146,5441],{"class":207},[28,20148,5734],{"class":34},[28,20150,10930],{"class":211},[28,20152,20153,20155],{"class":30,"line":8049},[28,20154,18681],{"class":211},[28,20156,20157],{"class":269}," \u002F\u002F无参构造函数\n",[28,20159,20160,20162],{"class":30,"line":8054},[28,20161,19613],{"class":34},[28,20163,19616],{"class":211},[28,20165,20166],{"class":30,"line":8060},[28,20167,1643],{"class":211},[28,20169,20170],{"class":30,"line":8087},[28,20171,2477],{"emptyLinePlaceholder":134},[28,20173,20174],{"class":30,"line":8092},[28,20175,20176],{"class":269},"\u002F\u002F3. 以值方式返回局部对象\n",[28,20178,20179,20181,20183],{"class":30,"line":8098},[28,20180,19123],{"class":34},[28,20182,19632],{"class":34},[28,20184,2053],{"class":211},[28,20186,20187],{"class":30,"line":8110},[28,20188,1624],{"class":211},[28,20190,20191],{"class":30,"line":8122},[28,20192,19113],{"class":211},[28,20194,20195,20197,20199,20201,20203,20205,20207,20209,20212,20214],{"class":30,"line":8134},[28,20196,6606],{"class":211},[28,20198,1253],{"class":207},[28,20200,1736],{"class":211},[28,20202,215],{"class":207},[28,20204,6595],{"class":207},[28,20206,639],{"class":211},[28,20208,563],{"class":207},[28,20210,20211],{"class":211},"p1 ",[28,20213,1253],{"class":207},[28,20215,8917],{"class":211},[28,20217,20218,20220],{"class":30,"line":9793},[28,20219,4167],{"class":207},[28,20221,20222],{"class":211}," p1;\n",[28,20224,20225],{"class":30,"line":9818},[28,20226,1643],{"class":211},[28,20228,20229],{"class":30,"line":9841},[28,20230,2477],{"emptyLinePlaceholder":134},[28,20232,20233,20235,20237],{"class":30,"line":9865},[28,20234,5441],{"class":207},[28,20236,5806],{"class":34},[28,20238,2053],{"class":211},[28,20240,20241],{"class":30,"line":9870},[28,20242,1624],{"class":211},[28,20244,20245,20247,20249,20251],{"class":30,"line":9875},[28,20246,19698],{"class":211},[28,20248,257],{"class":207},[28,20250,19632],{"class":34},[28,20252,5713],{"class":211},[28,20254,20255,20257,20259,20261,20263,20265,20267,20269,20271,20273],{"class":30,"line":9880},[28,20256,6606],{"class":211},[28,20258,1253],{"class":207},[28,20260,1736],{"class":211},[28,20262,215],{"class":207},[28,20264,6595],{"class":207},[28,20266,639],{"class":211},[28,20268,563],{"class":207},[28,20270,11525],{"class":211},[28,20272,1253],{"class":207},[28,20274,8917],{"class":211},[28,20276,20277],{"class":30,"line":9889},[28,20278,1643],{"class":211},[28,20280,20281],{"class":30,"line":9894},[28,20282,2477],{"emptyLinePlaceholder":134},[28,20284,20285],{"class":30,"line":9900},[28,20286,2477],{"emptyLinePlaceholder":134},[28,20288,20289,20291,20293],{"class":30,"line":9921},[28,20290,215],{"class":207},[28,20292,2050],{"class":34},[28,20294,10930],{"class":211},[28,20296,20297],{"class":30,"line":9927},[28,20298,2477],{"emptyLinePlaceholder":134},[28,20300,20301],{"class":30,"line":9941},[28,20302,20303],{"class":269},"    \u002F\u002Ftest01();\n",[28,20305,20306],{"class":30,"line":9947},[28,20307,20308],{"class":269},"    \u002F\u002Ftest02();\n",[28,20310,20311,20313],{"class":30,"line":9974},[28,20312,19768],{"class":34},[28,20314,5713],{"class":211},[28,20316,20317],{"class":30,"line":9983},[28,20318,2477],{"emptyLinePlaceholder":134},[28,20320,20321,20323,20325,20327],{"class":30,"line":9989},[28,20322,2380],{"class":34},[28,20324,212],{"class":211},[28,20326,2385],{"class":64},[28,20328,2796],{"class":211},[28,20330,20331],{"class":30,"line":9997},[28,20332,2477],{"emptyLinePlaceholder":134},[28,20334,20335,20337,20339],{"class":30,"line":10002},[28,20336,4167],{"class":207},[28,20338,4170],{"class":38},[28,20340,1370],{"class":211},[28,20342,20343],{"class":30,"line":16681},[28,20344,1643],{"class":211},[177,20346,20348],{"id":20347},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20350,20351],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20353,20354],{},"1．默认构造函数(无参，函数体为空)",[14,20356,20357],{},"2．默认析构函数(无参，函数体为空)",[14,20359,20360],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20362,20363],{},"构造函数调用规则如下：",[116,20365,20366,20369],{},[119,20367,20368],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[119,20370,20371],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[18,20373,20375],{"className":198,"code":20374,"language":200,"meta":23,"style":23},"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",[25,20376,20377,20385,20389,20394,20400,20412,20416,20421,20433,20442,20454,20458,20462,20478,20487,20499,20503,20507,20513,20525,20529,20533,20539,20543,20547,20555,20559,20571,20576,20584,20588,20606,20610,20614,20622,20626,20631,20639,20654,20667,20671,20676,20683,20699,20712,20716,20720,20728,20732,20738,20742,20752,20756,20764],{"__ignoreMap":23},[28,20378,20379,20381,20383],{"class":30,"line":31},[28,20380,14771],{"class":207},[28,20382,15646],{"class":34},[28,20384,15649],{"class":211},[28,20386,20387],{"class":30,"line":42},[28,20388,14793],{"class":207},[28,20390,20391],{"class":30,"line":50},[28,20392,20393],{"class":269},"    \u002F\u002F无参（默认）构造函数\n",[28,20395,20396,20398],{"class":30,"line":58},[28,20397,18596],{"class":34},[28,20399,10930],{"class":211},[28,20401,20402,20404,20406,20408,20410],{"class":30,"line":70},[28,20403,9746],{"class":211},[28,20405,1253],{"class":207},[28,20407,19887],{"class":64},[28,20409,1522],{"class":207},[28,20411,8917],{"class":211},[28,20413,20414],{"class":30,"line":78},[28,20415,2264],{"class":211},[28,20417,20418],{"class":30,"line":86},[28,20419,20420],{"class":269},"    \u002F\u002F有参构造函数\n",[28,20422,20423,20425,20427,20429,20431],{"class":30,"line":97},[28,20424,18596],{"class":34},[28,20426,212],{"class":211},[28,20428,215],{"class":207},[28,20430,1476],{"class":5293},[28,20432,12519],{"class":211},[28,20434,20435,20438,20440],{"class":30,"line":108},[28,20436,20437],{"class":211},"        age ",[28,20439,257],{"class":207},[28,20441,1510],{"class":211},[28,20443,20444,20446,20448,20450,20452],{"class":30,"line":1407},[28,20445,9746],{"class":211},[28,20447,1253],{"class":207},[28,20449,19927],{"class":64},[28,20451,1522],{"class":207},[28,20453,8917],{"class":211},[28,20455,20456],{"class":30,"line":1690},[28,20457,2264],{"class":211},[28,20459,20460],{"class":30,"line":1695},[28,20461,18951],{"class":269},[28,20463,20464,20466,20468,20470,20472,20474,20476],{"class":30,"line":1701},[28,20465,18596],{"class":34},[28,20467,212],{"class":211},[28,20469,6869],{"class":207},[28,20471,15646],{"class":34},[28,20473,563],{"class":207},[28,20475,6902],{"class":5293},[28,20477,12519],{"class":211},[28,20479,20480,20482,20484],{"class":30,"line":1706},[28,20481,20437],{"class":211},[28,20483,257],{"class":207},[28,20485,20486],{"class":211}," p.age;\n",[28,20488,20489,20491,20493,20495,20497],{"class":30,"line":1720},[28,20490,9746],{"class":211},[28,20492,1253],{"class":207},[28,20494,19968],{"class":64},[28,20496,1522],{"class":207},[28,20498,8917],{"class":211},[28,20500,20501],{"class":30,"line":1725},[28,20502,2264],{"class":211},[28,20504,20505],{"class":30,"line":1731},[28,20506,18624],{"class":269},[28,20508,20509,20511],{"class":30,"line":1752},[28,20510,18629],{"class":34},[28,20512,10930],{"class":211},[28,20514,20515,20517,20519,20521,20523],{"class":30,"line":1757},[28,20516,9746],{"class":211},[28,20518,1253],{"class":207},[28,20520,20005],{"class":64},[28,20522,1522],{"class":207},[28,20524,8917],{"class":211},[28,20526,20527],{"class":30,"line":1771},[28,20528,2264],{"class":211},[28,20530,20531],{"class":30,"line":1776},[28,20532,14793],{"class":207},[28,20534,20535,20537],{"class":30,"line":1805},[28,20536,2062],{"class":207},[28,20538,7874],{"class":211},[28,20540,20541],{"class":30,"line":1810},[28,20542,4072],{"class":211},[28,20544,20545],{"class":30,"line":1827},[28,20546,2477],{"emptyLinePlaceholder":134},[28,20548,20549,20551,20553],{"class":30,"line":1832},[28,20550,5441],{"class":207},[28,20552,5665],{"class":34},[28,20554,2053],{"class":211},[28,20556,20557],{"class":30,"line":1837},[28,20558,1624],{"class":211},[28,20560,20561,20563,20565,20567,20569],{"class":30,"line":1842},[28,20562,19508],{"class":211},[28,20564,7207],{"class":34},[28,20566,212],{"class":211},[28,20568,860],{"class":38},[28,20570,2796],{"class":211},[28,20572,20573],{"class":30,"line":1856},[28,20574,20575],{"class":269},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[28,20577,20578,20580,20582],{"class":30,"line":1861},[28,20579,19508],{"class":211},[28,20581,7110],{"class":34},[28,20583,17592],{"class":211},[28,20585,20586],{"class":30,"line":2654},[28,20587,2477],{"emptyLinePlaceholder":134},[28,20589,20590,20592,20594,20597,20599,20602,20604],{"class":30,"line":2668},[28,20591,6606],{"class":211},[28,20593,1253],{"class":207},[28,20595,20596],{"class":64}," \"p2的年龄为： \"",[28,20598,1522],{"class":207},[28,20600,20601],{"class":211}," p2.age ",[28,20603,1253],{"class":207},[28,20605,8917],{"class":211},[28,20607,20608],{"class":30,"line":2676},[28,20609,1643],{"class":211},[28,20611,20612],{"class":30,"line":2681},[28,20613,2477],{"emptyLinePlaceholder":134},[28,20615,20616,20618,20620],{"class":30,"line":2687},[28,20617,5441],{"class":207},[28,20619,5734],{"class":34},[28,20621,2053],{"class":211},[28,20623,20624],{"class":30,"line":2693},[28,20625,1624],{"class":211},[28,20627,20628],{"class":30,"line":2698},[28,20629,20630],{"class":269},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[28,20632,20633,20636],{"class":30,"line":8025},[28,20634,20635],{"class":211},"    Person p1;",[28,20637,20638],{"class":269}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[28,20640,20641,20643,20645,20647,20649,20651],{"class":30,"line":8049},[28,20642,19508],{"class":211},[28,20644,7110],{"class":34},[28,20646,212],{"class":211},[28,20648,656],{"class":38},[28,20650,6043],{"class":211},[28,20652,20653],{"class":269}," \u002F\u002F用户提供的有参\n",[28,20655,20656,20658,20661,20664],{"class":30,"line":8054},[28,20657,19508],{"class":211},[28,20659,20660],{"class":34},"p3",[28,20662,20663],{"class":211},"(p2);",[28,20665,20666],{"class":269}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[28,20668,20669],{"class":30,"line":8060},[28,20670,2477],{"emptyLinePlaceholder":134},[28,20672,20673],{"class":30,"line":8087},[28,20674,20675],{"class":269},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[28,20677,20678,20681],{"class":30,"line":8092},[28,20679,20680],{"class":211},"    Person p4;",[28,20682,20638],{"class":269},[28,20684,20685,20687,20690,20692,20694,20696],{"class":30,"line":8098},[28,20686,19508],{"class":211},[28,20688,20689],{"class":34},"p5",[28,20691,212],{"class":211},[28,20693,656],{"class":38},[28,20695,6043],{"class":211},[28,20697,20698],{"class":269}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[28,20700,20701,20703,20706,20709],{"class":30,"line":8110},[28,20702,19508],{"class":211},[28,20704,20705],{"class":34},"p6",[28,20707,20708],{"class":211},"(p5);",[28,20710,20711],{"class":269}," \u002F\u002F用户自己提供拷贝构造\n",[28,20713,20714],{"class":30,"line":8122},[28,20715,1643],{"class":211},[28,20717,20718],{"class":30,"line":8134},[28,20719,2477],{"emptyLinePlaceholder":134},[28,20721,20722,20724,20726],{"class":30,"line":9793},[28,20723,215],{"class":207},[28,20725,2050],{"class":34},[28,20727,10930],{"class":211},[28,20729,20730],{"class":30,"line":9818},[28,20731,2477],{"emptyLinePlaceholder":134},[28,20733,20734,20736],{"class":30,"line":9841},[28,20735,5710],{"class":34},[28,20737,5713],{"class":211},[28,20739,20740],{"class":30,"line":9865},[28,20741,2477],{"emptyLinePlaceholder":134},[28,20743,20744,20746,20748,20750],{"class":30,"line":9870},[28,20745,2380],{"class":34},[28,20747,212],{"class":211},[28,20749,2385],{"class":64},[28,20751,2796],{"class":211},[28,20753,20754],{"class":30,"line":9875},[28,20755,2477],{"emptyLinePlaceholder":134},[28,20757,20758,20760,20762],{"class":30,"line":9880},[28,20759,4167],{"class":207},[28,20761,4170],{"class":38},[28,20763,1370],{"class":211},[28,20765,20766],{"class":30,"line":9889},[28,20767,1643],{"class":211},[177,20769,20771],{"id":20770},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20773,20774],{},"浅拷贝：简单的赋值拷贝操作",[14,20776,20777],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[18,20779,20781],{"className":198,"code":20780,"language":200,"meta":23,"style":23},"#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",[25,20782,20783,20789,20799,20805,20809,20813,20818,20824,20828,20841,20845,20849,20856,20860,20870,20885,20898,20902,20907,20912,20928,20932,20945,20950,20955,20960,20969,20974,20989,20993,20997,21001,21007,21011,21016,21031,21035,21046,21060,21064,21073,21077,21083,21095,21099,21107,21111,21128,21159,21167,21195,21199,21203,21211,21215,21221],{"__ignoreMap":23},[28,20784,20785,20787],{"class":30,"line":31},[28,20786,2027],{"class":207},[28,20788,2030],{"class":64},[28,20790,20791,20793,20795,20797],{"class":30,"line":42},[28,20792,2035],{"class":207},[28,20794,2038],{"class":207},[28,20796,2041],{"class":34},[28,20798,1370],{"class":211},[28,20800,20801,20803],{"class":30,"line":50},[28,20802,14771],{"class":207},[28,20804,15248],{"class":34},[28,20806,20807],{"class":30,"line":58},[28,20808,1624],{"class":211},[28,20810,20811],{"class":30,"line":70},[28,20812,14793],{"class":207},[28,20814,20815],{"class":30,"line":78},[28,20816,20817],{"class":269},"    \u002F\u002F默认构造函数\n",[28,20819,20820,20822],{"class":30,"line":86},[28,20821,18596],{"class":34},[28,20823,2053],{"class":211},[28,20825,20826],{"class":30,"line":97},[28,20827,2107],{"class":211},[28,20829,20830,20832,20834,20837,20839],{"class":30,"line":108},[28,20831,3528],{"class":211},[28,20833,1253],{"class":207},[28,20835,20836],{"class":64},"\"默认构造函数\"",[28,20838,1253],{"class":207},[28,20840,1275],{"class":211},[28,20842,20843],{"class":30,"line":1407},[28,20844,2264],{"class":211},[28,20846,20847],{"class":30,"line":1690},[28,20848,20420],{"class":269},[28,20850,20851,20853],{"class":30,"line":1695},[28,20852,18629],{"class":34},[28,20854,20855],{"class":211},"(int age,int height)\n",[28,20857,20858],{"class":30,"line":1701},[28,20859,2107],{"class":211},[28,20861,20862,20865,20867],{"class":30,"line":1706},[28,20863,20864],{"class":211},"        m_Age",[28,20866,257],{"class":207},[28,20868,20869],{"class":211},"age;\n",[28,20871,20872,20875,20877,20879,20882],{"class":30,"line":1720},[28,20873,20874],{"class":211},"        m_Height",[28,20876,11794],{"class":207},[28,20878,2459],{"class":207},[28,20880,20881],{"class":211},"(height);",[28,20883,20884],{"class":269},"\u002F\u002F放到堆区\n",[28,20886,20887,20889,20891,20894,20896],{"class":30,"line":1725},[28,20888,3528],{"class":211},[28,20890,1253],{"class":207},[28,20892,20893],{"class":64},"\"有参构造函数\"",[28,20895,1253],{"class":207},[28,20897,1275],{"class":211},[28,20899,20900],{"class":30,"line":1731},[28,20901,2264],{"class":211},[28,20903,20904],{"class":30,"line":1752},[28,20905,20906],{"class":269},"    \u002F\u002F深拷贝解决上述问题\n",[28,20908,20909],{"class":30,"line":1757},[28,20910,20911],{"class":269},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[28,20913,20914,20916,20918,20920,20922,20924,20926],{"class":30,"line":1771},[28,20915,18596],{"class":34},[28,20917,212],{"class":211},[28,20919,6869],{"class":207},[28,20921,15646],{"class":34},[28,20923,10661],{"class":207},[28,20925,14],{"class":5293},[28,20927,218],{"class":211},[28,20929,20930],{"class":30,"line":1776},[28,20931,2107],{"class":211},[28,20933,20934,20936,20938,20941,20943],{"class":30,"line":1805},[28,20935,3528],{"class":211},[28,20937,1253],{"class":207},[28,20939,20940],{"class":64},"\"拷贝构造函数\"",[28,20942,1253],{"class":207},[28,20944,1275],{"class":211},[28,20946,20947],{"class":30,"line":1810},[28,20948,20949],{"class":269},"        \u002F\u002F编译器默认的写如下注释部分\n",[28,20951,20952],{"class":30,"line":1827},[28,20953,20954],{"class":269},"        \u002F\u002Fm_Age=p.m_Age;\n",[28,20956,20957],{"class":30,"line":1832},[28,20958,20959],{"class":269},"        \u002F\u002Fm_Height=p.m_Height;\n",[28,20961,20962,20964,20966],{"class":30,"line":1837},[28,20963,20864],{"class":211},[28,20965,257],{"class":207},[28,20967,20968],{"class":211},"p.m_Age;\n",[28,20970,20971],{"class":30,"line":1842},[28,20972,20973],{"class":269},"        \u002F\u002F深拷贝操作\n",[28,20975,20976,20978,20980,20982,20984,20986],{"class":30,"line":1856},[28,20977,20874],{"class":211},[28,20979,11794],{"class":207},[28,20981,2459],{"class":207},[28,20983,212],{"class":211},[28,20985,665],{"class":207},[28,20987,20988],{"class":211},"p.m_Height);\n",[28,20990,20991],{"class":30,"line":1861},[28,20992,2264],{"class":211},[28,20994,20995],{"class":30,"line":2654},[28,20996,2477],{"emptyLinePlaceholder":134},[28,20998,20999],{"class":30,"line":2668},[28,21000,18624],{"class":269},[28,21002,21003,21005],{"class":30,"line":2676},[28,21004,18629],{"class":34},[28,21006,2053],{"class":211},[28,21008,21009],{"class":30,"line":2681},[28,21010,2107],{"class":211},[28,21012,21013],{"class":30,"line":2687},[28,21014,21015],{"class":269},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[28,21017,21018,21020,21023,21026,21029],{"class":30,"line":2693},[28,21019,2574],{"class":207},[28,21021,21022],{"class":211},"(m_Height ",[28,21024,21025],{"class":207},"!=",[28,21027,21028],{"class":38}," NULL",[28,21030,218],{"class":211},[28,21032,21033],{"class":30,"line":2698},[28,21034,2587],{"class":211},[28,21036,21037,21040,21043],{"class":30,"line":8025},[28,21038,21039],{"class":207},"            delete",[28,21041,21042],{"class":211}," m_Height;",[28,21044,21045],{"class":269}," \u002F\u002F释放堆区内存\n",[28,21047,21048,21051,21053,21055,21057],{"class":30,"line":8049},[28,21049,21050],{"class":211},"            m_Height",[28,21052,257],{"class":207},[28,21054,2469],{"class":38},[28,21056,266],{"class":211},[28,21058,21059],{"class":269}," \u002F\u002F防止野指针\n",[28,21061,21062],{"class":30,"line":8054},[28,21063,2606],{"class":211},[28,21065,21066,21068,21070],{"class":30,"line":8060},[28,21067,3528],{"class":211},[28,21069,1253],{"class":207},[28,21071,21072],{"class":64},"\"Person的析构函数调用\"\n",[28,21074,21075],{"class":30,"line":8087},[28,21076,2264],{"class":211},[28,21078,21079,21081],{"class":30,"line":8092},[28,21080,2062],{"class":207},[28,21082,15743],{"class":211},[28,21084,21085,21087,21089,21092],{"class":30,"line":8098},[28,21086,2062],{"class":207},[28,21088,6595],{"class":207},[28,21090,21091],{"class":211},"m_Height;",[28,21093,21094],{"class":269}," \u002F\u002F定义一个指针，指向身高\n",[28,21096,21097],{"class":30,"line":8110},[28,21098,4072],{"class":211},[28,21100,21101,21103,21105],{"class":30,"line":8122},[28,21102,5441],{"class":207},[28,21104,5665],{"class":34},[28,21106,2053],{"class":211},[28,21108,21109],{"class":30,"line":8134},[28,21110,1624],{"class":211},[28,21112,21113,21115,21117,21119,21121,21123,21126],{"class":30,"line":9793},[28,21114,19508],{"class":211},[28,21116,7207],{"class":34},[28,21118,212],{"class":211},[28,21120,860],{"class":38},[28,21122,588],{"class":211},[28,21124,21125],{"class":38},"160",[28,21127,2796],{"class":211},[28,21129,21130,21132,21134,21137,21139,21142,21144,21147,21149,21152,21154,21156],{"class":30,"line":9818},[28,21131,1629],{"class":211},[28,21133,1253],{"class":207},[28,21135,21136],{"class":64},"\"p1的年龄为:\"",[28,21138,1253],{"class":207},[28,21140,21141],{"class":211},"p1.m_Age",[28,21143,1253],{"class":207},[28,21145,21146],{"class":64},"\"身高为：\"",[28,21148,6496],{"class":207},[28,21150,21151],{"class":211},"p1.m_Height",[28,21153,1253],{"class":207},[28,21155,1318],{"class":211},[28,21157,21158],{"class":269},"  \u002F\u002F18\n",[28,21160,21161,21163,21165],{"class":30,"line":9841},[28,21162,19508],{"class":211},[28,21164,7110],{"class":34},[28,21166,17592],{"class":211},[28,21168,21169,21171,21173,21176,21178,21180,21182,21184,21186,21189,21191,21193],{"class":30,"line":9865},[28,21170,1629],{"class":211},[28,21172,1253],{"class":207},[28,21174,21175],{"class":64},"\"p2的年龄为：\"",[28,21177,1253],{"class":207},[28,21179,19538],{"class":211},[28,21181,1253],{"class":207},[28,21183,21146],{"class":64},[28,21185,6496],{"class":207},[28,21187,21188],{"class":211},"p2.m_Height",[28,21190,1253],{"class":207},[28,21192,1318],{"class":211},[28,21194,21158],{"class":269},[28,21196,21197],{"class":30,"line":9870},[28,21198,13287],{"class":211},[28,21200,21201],{"class":30,"line":9875},[28,21202,1643],{"class":211},[28,21204,21205,21207,21209],{"class":30,"line":9880},[28,21206,215],{"class":207},[28,21208,2050],{"class":34},[28,21210,2053],{"class":211},[28,21212,21213],{"class":30,"line":9889},[28,21214,1624],{"class":211},[28,21216,21217,21219],{"class":30,"line":9894},[28,21218,5710],{"class":34},[28,21220,5713],{"class":211},[28,21222,21223],{"class":30,"line":9900},[28,21224,1643],{"class":211},[14,21226,21227],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21229,21230],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21232,21233],{},[1540,21234],{"alt":23,"src":21235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21237,21238],{},"浅拷贝问题要使用深拷贝来解决",[14,21240,21241],{},[1540,21242],{"alt":23,"src":21243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21245,21246],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[177,21248,21250],{"id":21249},"_826初始化列表","8.2.6初始化列表",[14,21252,21253],{},"作用：初始化属性",[14,21255,5258],{},[18,21257,21260],{"className":21258,"code":21259,"language":5264},[5262],"构造函数():属性1(值1),属性2(值2).....{}\n",[25,21261,21259],{"__ignoreMap":23},[14,21263,21264],{},"例子",[18,21266,21268],{"className":198,"code":21267,"language":200,"meta":23,"style":23},"#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",[25,21269,21270,21276,21286,21292,21296,21301,21305,21310,21315,21320,21325,21330,21335,21339,21344,21349,21392,21401,21419,21437,21455,21459,21463,21470,21477,21484,21488,21492,21500,21504,21508,21528,21537,21541,21545,21555,21559,21567],{"__ignoreMap":23},[28,21271,21272,21274],{"class":30,"line":31},[28,21273,2027],{"class":207},[28,21275,2030],{"class":64},[28,21277,21278,21280,21282,21284],{"class":30,"line":42},[28,21279,2035],{"class":207},[28,21281,2038],{"class":207},[28,21283,2041],{"class":34},[28,21285,1370],{"class":211},[28,21287,21288,21290],{"class":30,"line":50},[28,21289,14771],{"class":207},[28,21291,15248],{"class":34},[28,21293,21294],{"class":30,"line":58},[28,21295,1624],{"class":211},[28,21297,21298],{"class":30,"line":70},[28,21299,21300],{"class":207},"    public:\n",[28,21302,21303],{"class":30,"line":78},[28,21304,2477],{"emptyLinePlaceholder":134},[28,21306,21307],{"class":30,"line":86},[28,21308,21309],{"class":269},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[28,21311,21312],{"class":30,"line":97},[28,21313,21314],{"class":269},"    \u002F\u002FPerson(int a, int b, int c) {\n",[28,21316,21317],{"class":30,"line":108},[28,21318,21319],{"class":269},"    \u002F\u002F  m_A = a;\n",[28,21321,21322],{"class":30,"line":1407},[28,21323,21324],{"class":269},"    \u002F\u002F  m_B = b;\n",[28,21326,21327],{"class":30,"line":1690},[28,21328,21329],{"class":269},"    \u002F\u002F  m_C = c;\n",[28,21331,21332],{"class":30,"line":1695},[28,21333,21334],{"class":269},"    \u002F\u002F}\n",[28,21336,21337],{"class":30,"line":1701},[28,21338,2477],{"emptyLinePlaceholder":134},[28,21340,21341],{"class":30,"line":1706},[28,21342,21343],{"class":269},"    \u002F\u002F初始化列表方式初始化\n",[28,21345,21346],{"class":30,"line":1720},[28,21347,21348],{"class":269},"    \u002F\u002F使用有参构造函数\n",[28,21350,21351,21353,21355,21357,21359,21361,21363,21365,21367,21369,21371,21374,21377,21380,21383,21386,21389],{"class":30,"line":1725},[28,21352,18596],{"class":34},[28,21354,212],{"class":211},[28,21356,215],{"class":207},[28,21358,1476],{"class":5293},[28,21360,12512],{"class":211},[28,21362,215],{"class":207},[28,21364,2910],{"class":5293},[28,21366,12512],{"class":211},[28,21368,215],{"class":207},[28,21370,2926],{"class":5293},[28,21372,21373],{"class":211},") :",[28,21375,21376],{"class":34},"m_A",[28,21378,21379],{"class":211},"(a), ",[28,21381,21382],{"class":34},"m_B",[28,21384,21385],{"class":211},"(b), ",[28,21387,21388],{"class":34},"m_C",[28,21390,21391],{"class":211},"(c) {}\n",[28,21393,21394,21396,21399],{"class":30,"line":1731},[28,21395,14986],{"class":207},[28,21397,21398],{"class":34}," PrintPerson",[28,21400,10930],{"class":211},[28,21402,21403,21405,21407,21410,21412,21415,21417],{"class":30,"line":1752},[28,21404,9746],{"class":211},[28,21406,1253],{"class":207},[28,21408,21409],{"class":64}," \"mA:\"",[28,21411,1522],{"class":207},[28,21413,21414],{"class":211}," m_A ",[28,21416,1253],{"class":207},[28,21418,8917],{"class":211},[28,21420,21421,21423,21425,21428,21430,21433,21435],{"class":30,"line":1757},[28,21422,9746],{"class":211},[28,21424,1253],{"class":207},[28,21426,21427],{"class":64}," \"mB:\"",[28,21429,1522],{"class":207},[28,21431,21432],{"class":211}," m_B ",[28,21434,1253],{"class":207},[28,21436,8917],{"class":211},[28,21438,21439,21441,21443,21446,21448,21451,21453],{"class":30,"line":1771},[28,21440,9746],{"class":211},[28,21442,1253],{"class":207},[28,21444,21445],{"class":64}," \"mC:\"",[28,21447,1522],{"class":207},[28,21449,21450],{"class":211}," m_C ",[28,21452,1253],{"class":207},[28,21454,8917],{"class":211},[28,21456,21457],{"class":30,"line":1776},[28,21458,2264],{"class":211},[28,21460,21461],{"class":30,"line":1805},[28,21462,15299],{"class":207},[28,21464,21465,21467],{"class":30,"line":1810},[28,21466,2062],{"class":207},[28,21468,21469],{"class":211}," m_A;\n",[28,21471,21472,21474],{"class":30,"line":1827},[28,21473,2062],{"class":207},[28,21475,21476],{"class":211}," m_B;\n",[28,21478,21479,21481],{"class":30,"line":1832},[28,21480,2062],{"class":207},[28,21482,21483],{"class":211}," m_C;\n",[28,21485,21486],{"class":30,"line":1837},[28,21487,4072],{"class":211},[28,21489,21490],{"class":30,"line":1842},[28,21491,2477],{"emptyLinePlaceholder":134},[28,21493,21494,21496,21498],{"class":30,"line":1856},[28,21495,215],{"class":207},[28,21497,2050],{"class":34},[28,21499,6055],{"class":211},[28,21501,21502],{"class":30,"line":1861},[28,21503,1624],{"class":211},[28,21505,21506],{"class":30,"line":2654},[28,21507,2477],{"emptyLinePlaceholder":134},[28,21509,21510,21512,21514,21516,21518,21520,21522,21524,21526],{"class":30,"line":2668},[28,21511,19508],{"class":211},[28,21513,14],{"class":34},[28,21515,212],{"class":211},[28,21517,427],{"class":38},[28,21519,12512],{"class":211},[28,21521,288],{"class":38},[28,21523,12512],{"class":211},[28,21525,282],{"class":38},[28,21527,2796],{"class":211},[28,21529,21530,21532,21535],{"class":30,"line":2676},[28,21531,15943],{"class":211},[28,21533,21534],{"class":34},"PrintPerson",[28,21536,5713],{"class":211},[28,21538,21539],{"class":30,"line":2681},[28,21540,2477],{"emptyLinePlaceholder":134},[28,21542,21543],{"class":30,"line":2687},[28,21544,2477],{"emptyLinePlaceholder":134},[28,21546,21547,21549,21551,21553],{"class":30,"line":2693},[28,21548,2380],{"class":34},[28,21550,212],{"class":211},[28,21552,2385],{"class":64},[28,21554,2796],{"class":211},[28,21556,21557],{"class":30,"line":2698},[28,21558,2477],{"emptyLinePlaceholder":134},[28,21560,21561,21563,21565],{"class":30,"line":8025},[28,21562,4167],{"class":207},[28,21564,4170],{"class":38},[28,21566,1370],{"class":211},[28,21568,21569],{"class":30,"line":8049},[28,21570,1643],{"class":211},[14,21572,21573,21574,21577,21578],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[359,21575,21576],{},"参数名就是定义的对象属性","，",[359,21579,21580],{},"属性后面的值为有参构造函数的形参",[18,21582,21584],{"className":198,"code":21583,"language":200,"meta":23,"style":23},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[25,21585,21586],{"__ignoreMap":23},[28,21587,21588,21590,21592,21594,21597,21599,21602,21604,21607,21609,21612,21614,21617,21619],{"class":30,"line":31},[28,21589,19123],{"class":34},[28,21591,212],{"class":211},[28,21593,215],{"class":207},[28,21595,21596],{"class":211}," a.",[28,21598,215],{"class":207},[28,21600,21601],{"class":211}," b,",[28,21603,215],{"class":207},[28,21605,21606],{"class":211}," b):",[28,21608,21376],{"class":34},[28,21610,21611],{"class":211},"(a),",[28,21613,21382],{"class":34},[28,21615,21616],{"class":211},"(c),",[28,21618,21388],{"class":34},[28,21620,21621],{"class":211},"(b) {}\n",[177,21623,21625],{"id":21624},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21627,21628],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21630,14710],{},[18,21632,21634],{"className":198,"code":21633,"language":200,"meta":23,"style":23},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[25,21635,21636,21641,21646,21650,21655,21659],{"__ignoreMap":23},[28,21637,21638],{"class":30,"line":31},[28,21639,21640],{"class":211},"A{};\n",[28,21642,21643],{"class":30,"line":42},[28,21644,21645],{"class":211},"B\n",[28,21647,21648],{"class":30,"line":50},[28,21649,1624],{"class":211},[28,21651,21652],{"class":30,"line":58},[28,21653,21654],{"class":211},"    A a;\n",[28,21656,21657],{"class":30,"line":70},[28,21658,1643],{"class":211},[28,21660,21661],{"class":30,"line":78},[28,21662,21663],{"class":269},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21665,21666],{},"案例",[18,21668,21670],{"className":198,"code":21669,"language":200,"meta":23,"style":23},"\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",[25,21671,21672,21677,21684,21688,21693,21698,21712,21716,21726,21737,21741,21748,21752,21765,21769,21774,21779,21783,21789,21793,21797,21801,21832,21836,21847,21851,21857,21861,21874,21878,21882,21886,21891,21896,21900,21908,21912,21929,21948,21952,21960,21964,21970],{"__ignoreMap":23},[28,21673,21674],{"class":30,"line":31},[28,21675,21676],{"class":269},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[28,21678,21679,21681],{"class":30,"line":42},[28,21680,14771],{"class":207},[28,21682,21683],{"class":34}," Phone\n",[28,21685,21686],{"class":30,"line":50},[28,21687,1624],{"class":211},[28,21689,21690],{"class":30,"line":58},[28,21691,21692],{"class":211},"public：\n",[28,21694,21695],{"class":30,"line":70},[28,21696,21697],{"class":269},"    \u002F\u002F 赋值(构造函数)\n",[28,21699,21700,21703,21705,21707,21710],{"class":30,"line":78},[28,21701,21702],{"class":34},"    Phone",[28,21704,212],{"class":211},[28,21706,14994],{"class":34},[28,21708,21709],{"class":5293}," pName",[28,21711,218],{"class":211},[28,21713,21714],{"class":30,"line":86},[28,21715,2107],{"class":211},[28,21717,21718,21721,21723],{"class":30,"line":97},[28,21719,21720],{"class":211},"        m_pName",[28,21722,257],{"class":207},[28,21724,21725],{"class":211},"pName;\n",[28,21727,21728,21730,21732,21735],{"class":30,"line":108},[28,21729,3528],{"class":211},[28,21731,1253],{"class":207},[28,21733,21734],{"class":64},"\"Phone的构造函数调用\"",[28,21736,1370],{"class":211},[28,21738,21739],{"class":30,"line":1407},[28,21740,2264],{"class":211},[28,21742,21743,21746],{"class":30,"line":1690},[28,21744,21745],{"class":34},"    ~Phone",[28,21747,2053],{"class":211},[28,21749,21750],{"class":30,"line":1695},[28,21751,2107],{"class":211},[28,21753,21754,21756,21758,21761,21763],{"class":30,"line":1701},[28,21755,3528],{"class":211},[28,21757,1253],{"class":207},[28,21759,21760],{"class":64},"\"Phone析构函数调用\"",[28,21762,1253],{"class":207},[28,21764,1275],{"class":211},[28,21766,21767],{"class":30,"line":1706},[28,21768,2264],{"class":211},[28,21770,21771],{"class":30,"line":1720},[28,21772,21773],{"class":269},"    \u002F\u002F\n",[28,21775,21776],{"class":30,"line":1725},[28,21777,21778],{"class":211},"    string m_PName;\n",[28,21780,21781],{"class":30,"line":1731},[28,21782,4072],{"class":211},[28,21784,21785,21787],{"class":30,"line":1752},[28,21786,14771],{"class":207},[28,21788,15248],{"class":34},[28,21790,21791],{"class":30,"line":1757},[28,21792,1624],{"class":211},[28,21794,21795],{"class":30,"line":1771},[28,21796,14793],{"class":207},[28,21798,21799],{"class":30,"line":1776},[28,21800,17071],{"class":269},[28,21802,21803,21805,21807,21809,21811,21813,21815,21818,21821,21823,21826,21829],{"class":30,"line":1805},[28,21804,18596],{"class":34},[28,21806,212],{"class":211},[28,21808,14994],{"class":34},[28,21810,14997],{"class":5293},[28,21812,588],{"class":211},[28,21814,14994],{"class":34},[28,21816,21817],{"class":5293}," pname",[28,21819,21820],{"class":211},"):",[28,21822,15087],{"class":34},[28,21824,21825],{"class":211},"(name),m_phone.",[28,21827,21828],{"class":34},"m_PName",[28,21830,21831],{"class":211},"(pname) \n",[28,21833,21834],{"class":30,"line":1810},[28,21835,2107],{"class":211},[28,21837,21838,21840,21842,21845],{"class":30,"line":1827},[28,21839,3528],{"class":211},[28,21841,1253],{"class":207},[28,21843,21844],{"class":64},"\"Person的构造函数调用\"",[28,21846,1370],{"class":211},[28,21848,21849],{"class":30,"line":1832},[28,21850,2264],{"class":211},[28,21852,21853,21855],{"class":30,"line":1837},[28,21854,18629],{"class":34},[28,21856,2053],{"class":211},[28,21858,21859],{"class":30,"line":1842},[28,21860,2107],{"class":211},[28,21862,21863,21865,21867,21870,21872],{"class":30,"line":1856},[28,21864,3528],{"class":211},[28,21866,1253],{"class":207},[28,21868,21869],{"class":64},"\"Person析构函数调用\"",[28,21871,1253],{"class":207},[28,21873,1275],{"class":211},[28,21875,21876],{"class":30,"line":1861},[28,21877,2264],{"class":211},[28,21879,21880],{"class":30,"line":2654},[28,21881,7857],{"class":269},[28,21883,21884],{"class":30,"line":2668},[28,21885,14969],{"class":211},[28,21887,21888],{"class":30,"line":2676},[28,21889,21890],{"class":269},"    \u002F\u002F手机\n",[28,21892,21893],{"class":30,"line":2681},[28,21894,21895],{"class":211},"    Phone m_Phone;\n",[28,21897,21898],{"class":30,"line":2687},[28,21899,4072],{"class":211},[28,21901,21902,21904,21906],{"class":30,"line":2693},[28,21903,5441],{"class":207},[28,21905,5665],{"class":34},[28,21907,2053],{"class":211},[28,21909,21910],{"class":30,"line":2698},[28,21911,1624],{"class":211},[28,21913,21914,21916,21918,21920,21922,21924,21927],{"class":30,"line":8025},[28,21915,19508],{"class":211},[28,21917,14],{"class":34},[28,21919,212],{"class":211},[28,21921,7993],{"class":64},[28,21923,588],{"class":211},[28,21925,21926],{"class":64},"\"安卓\"",[28,21928,2796],{"class":211},[28,21930,21931,21933,21935,21938,21940,21943,21945],{"class":30,"line":8049},[28,21932,1629],{"class":211},[28,21934,1253],{"class":207},[28,21936,21937],{"class":211},"p.Name",[28,21939,1253],{"class":207},[28,21941,21942],{"class":64},"\"拿着：\"",[28,21944,1253],{"class":207},[28,21946,21947],{"class":211},"p.m_phone.m_PName;\n",[28,21949,21950],{"class":30,"line":8054},[28,21951,1643],{"class":211},[28,21953,21954,21956,21958],{"class":30,"line":8060},[28,21955,215],{"class":207},[28,21957,2050],{"class":34},[28,21959,2053],{"class":211},[28,21961,21962],{"class":30,"line":8087},[28,21963,1624],{"class":211},[28,21965,21966,21968],{"class":30,"line":8092},[28,21967,5710],{"class":34},[28,21969,5713],{"class":211},[28,21971,21972],{"class":30,"line":8098},[28,21973,1643],{"class":211},[14,21975,9102],{},[18,21977,21979],{"className":198,"code":21978,"language":200,"meta":23,"style":23},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[25,21980,21981,21986],{"__ignoreMap":23},[28,21982,21983],{"class":30,"line":31},[28,21984,21985],{"class":269},"    \u002F\u002F不需要写这个：\n",[28,21987,21988],{"class":30,"line":42},[28,21989,21990],{"class":269},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21992,21993],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[18,21995,21997],{"className":198,"code":21996,"language":200,"meta":23,"style":23},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[25,21998,21999],{"__ignoreMap":23},[28,22000,22001,22003,22006,22008,22011,22014],{"class":30,"line":31},[28,22002,19123],{"class":34},[28,22004,22005],{"class":211},"(string name.string pname):",[28,22007,15087],{"class":34},[28,22009,22010],{"class":211},"(name),",[28,22012,22013],{"class":34},"m_phone",[28,22015,22016],{"class":211},"(pname) {}\n",[14,22018,22019,22020,257,22023],{},"采用的是隐式转换法，实际为如下：\n",[25,22021,22022],{},"m_phone(pname)",[25,22024,22025],{},"Phone m_phone=pname",[14,22027,22028,22031],{},[359,22029,22030],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,22033,22034],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[177,22036,22038],{"id":22037},"_828静态对象","8.2.8静态对象",[14,22040,22041],{},"静态对象在成员对象前static，称为静态对象",[14,22043,22044],{},"静态对象分为两类：",[161,22046,22047],{},[119,22048,22049],{},"静态成员变量",[116,22051,22052,22055,22058],{},[119,22053,22054],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[119,22056,22057],{},"②在编译阶段分配内存",[119,22059,22060],{},"③类内声明，类外初始化",[161,22062,22063],{"start":42},[119,22064,22065],{},"静态成员函数",[116,22067,22068,22071],{},[119,22069,22070],{},"①所有对象共享同一个函数",[119,22072,22073],{},"②静态成员函数只能访问静态成员变量",[22075,22076,22078],"h4",{"id":22077},"_8281静态成员变量","8.2.8.1静态成员变量",[18,22080,22082],{"className":198,"code":22081,"language":200,"meta":23,"style":23},"#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",[25,22083,22084,22090,22100,22106,22110,22114,22119,22124,22129,22137,22141,22145,22149,22157,22161,22165,22170,22183,22187,22195,22199,22205],{"__ignoreMap":23},[28,22085,22086,22088],{"class":30,"line":31},[28,22087,2027],{"class":207},[28,22089,2030],{"class":64},[28,22091,22092,22094,22096,22098],{"class":30,"line":42},[28,22093,2035],{"class":207},[28,22095,2038],{"class":207},[28,22097,2041],{"class":34},[28,22099,1370],{"class":211},[28,22101,22102,22104],{"class":30,"line":50},[28,22103,14771],{"class":207},[28,22105,15248],{"class":34},[28,22107,22108],{"class":30,"line":58},[28,22109,1624],{"class":211},[28,22111,22112],{"class":30,"line":70},[28,22113,14793],{"class":207},[28,22115,22116],{"class":30,"line":78},[28,22117,22118],{"class":269},"    \u002F\u002F非静态成员变量\n",[28,22120,22121],{"class":30,"line":86},[28,22122,22123],{"class":269},"    \u002F\u002F int m_A;\n",[28,22125,22126],{"class":30,"line":97},[28,22127,22128],{"class":269},"    \u002F\u002F定义静态成员变量\n",[28,22130,22131,22133,22135],{"class":30,"line":108},[28,22132,11097],{"class":207},[28,22134,2459],{"class":207},[28,22136,21469],{"class":211},[28,22138,22139],{"class":30,"line":1407},[28,22140,2477],{"emptyLinePlaceholder":134},[28,22142,22143],{"class":30,"line":1690},[28,22144,2477],{"emptyLinePlaceholder":134},[28,22146,22147],{"class":30,"line":1695},[28,22148,4072],{"class":211},[28,22150,22151,22153,22155],{"class":30,"line":1701},[28,22152,5441],{"class":207},[28,22154,5665],{"class":34},[28,22156,2053],{"class":211},[28,22158,22159],{"class":30,"line":1706},[28,22160,1624],{"class":211},[28,22162,22163],{"class":30,"line":1720},[28,22164,15390],{"class":211},[28,22166,22167],{"class":30,"line":1725},[28,22168,22169],{"class":269},"    \u002F\u002F输出类成员变量这块内存\n",[28,22171,22172,22174,22176,22179,22181],{"class":30,"line":1731},[28,22173,1629],{"class":211},[28,22175,1253],{"class":207},[28,22177,22178],{"class":211},"p.m_A",[28,22180,1253],{"class":207},[28,22182,1275],{"class":211},[28,22184,22185],{"class":30,"line":1752},[28,22186,1643],{"class":211},[28,22188,22189,22191,22193],{"class":30,"line":1757},[28,22190,215],{"class":207},[28,22192,2050],{"class":34},[28,22194,2053],{"class":211},[28,22196,22197],{"class":30,"line":1771},[28,22198,1624],{"class":211},[28,22200,22201,22203],{"class":30,"line":1776},[28,22202,5710],{"class":34},[28,22204,2053],{"class":211},[28,22206,22207],{"class":30,"line":1805},[28,22208,1643],{"class":211},[14,22210,22211],{},"此时输出是报错的：无法解析外部命令",[14,22213,22214],{},"解决这一问题：必须用到类内声明，类外初始化操作",[18,22216,22218],{"className":198,"code":22217,"language":200,"meta":23,"style":23},"#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",[25,22219,22220,22226,22236,22242,22246,22250,22255,22263,22267,22272,22287,22295,22299,22303,22308,22313,22325,22330,22341,22346,22351,22364,22368,22376,22380,22386],{"__ignoreMap":23},[28,22221,22222,22224],{"class":30,"line":31},[28,22223,2027],{"class":207},[28,22225,2030],{"class":64},[28,22227,22228,22230,22232,22234],{"class":30,"line":42},[28,22229,2035],{"class":207},[28,22231,2038],{"class":207},[28,22233,2041],{"class":34},[28,22235,1370],{"class":211},[28,22237,22238,22240],{"class":30,"line":50},[28,22239,14771],{"class":207},[28,22241,15248],{"class":34},[28,22243,22244],{"class":30,"line":58},[28,22245,1624],{"class":211},[28,22247,22248],{"class":30,"line":70},[28,22249,14793],{"class":207},[28,22251,22252],{"class":30,"line":78},[28,22253,22254],{"class":269},"    \u002F\u002F类内声明\n",[28,22256,22257,22259,22261],{"class":30,"line":86},[28,22258,11097],{"class":207},[28,22260,2459],{"class":207},[28,22262,21469],{"class":211},[28,22264,22265],{"class":30,"line":97},[28,22266,4072],{"class":211},[28,22268,22269],{"class":30,"line":108},[28,22270,22271],{"class":269},"\u002F\u002F类外初始化\n",[28,22273,22274,22276,22278,22281,22283,22285],{"class":30,"line":1407},[28,22275,215],{"class":207},[28,22277,15646],{"class":34},[28,22279,22280],{"class":211},"::m_A",[28,22282,257],{"class":207},[28,22284,656],{"class":38},[28,22286,1370],{"class":211},[28,22288,22289,22291,22293],{"class":30,"line":1690},[28,22290,5441],{"class":207},[28,22292,5665],{"class":34},[28,22294,2053],{"class":211},[28,22296,22297],{"class":30,"line":1695},[28,22298,1624],{"class":211},[28,22300,22301],{"class":30,"line":1701},[28,22302,15390],{"class":211},[28,22304,22305],{"class":30,"line":1706},[28,22306,22307],{"class":269},"    \u002F\u002F访问变量的原内存空间\n",[28,22309,22310],{"class":30,"line":1720},[28,22311,22312],{"class":269},"    \u002F\u002F100\n",[28,22314,22315,22317,22319,22321,22323],{"class":30,"line":1725},[28,22316,1629],{"class":211},[28,22318,1253],{"class":207},[28,22320,22178],{"class":211},[28,22322,1253],{"class":207},[28,22324,1275],{"class":211},[28,22326,22327],{"class":30,"line":1731},[28,22328,22329],{"class":211},"    Person p2;\n",[28,22331,22332,22335,22337,22339],{"class":30,"line":1752},[28,22333,22334],{"class":211},"    p2.m_A",[28,22336,257],{"class":207},[28,22338,1800],{"class":38},[28,22340,1370],{"class":211},[28,22342,22343],{"class":30,"line":1757},[28,22344,22345],{"class":269},"    \u002F\u002F继续访问这片空间\n",[28,22347,22348],{"class":30,"line":1771},[28,22349,22350],{"class":269},"    \u002F\u002F200\n",[28,22352,22353,22355,22357,22360,22362],{"class":30,"line":1776},[28,22354,1629],{"class":211},[28,22356,1253],{"class":207},[28,22358,22359],{"class":211},"p2.m_A",[28,22361,1253],{"class":207},[28,22363,1275],{"class":211},[28,22365,22366],{"class":30,"line":1805},[28,22367,1643],{"class":211},[28,22369,22370,22372,22374],{"class":30,"line":1810},[28,22371,215],{"class":207},[28,22373,2050],{"class":34},[28,22375,2053],{"class":211},[28,22377,22378],{"class":30,"line":1827},[28,22379,1624],{"class":211},[28,22381,22382,22384],{"class":30,"line":1832},[28,22383,5710],{"class":34},[28,22385,5713],{"class":211},[28,22387,22388],{"class":30,"line":1837},[28,22389,1643],{"class":211},[14,22391,22392],{},[359,22393,22394],{},"静态变量的访问",[18,22396,22398],{"className":198,"code":22397,"language":200,"meta":23,"style":23},"#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",[25,22399,22400,22406,22416,22422,22426,22430,22434,22442,22446,22451,22459,22463,22467,22481,22496,22504,22508,22513,22518,22523,22528,22540,22545,22550,22564,22581,22585,22593,22597,22603],{"__ignoreMap":23},[28,22401,22402,22404],{"class":30,"line":31},[28,22403,2027],{"class":207},[28,22405,2030],{"class":64},[28,22407,22408,22410,22412,22414],{"class":30,"line":42},[28,22409,2035],{"class":207},[28,22411,2038],{"class":207},[28,22413,2041],{"class":34},[28,22415,1370],{"class":211},[28,22417,22418,22420],{"class":30,"line":50},[28,22419,14771],{"class":207},[28,22421,15248],{"class":34},[28,22423,22424],{"class":30,"line":58},[28,22425,1624],{"class":211},[28,22427,22428],{"class":30,"line":70},[28,22429,14793],{"class":207},[28,22431,22432],{"class":30,"line":78},[28,22433,22254],{"class":269},[28,22435,22436,22438,22440],{"class":30,"line":86},[28,22437,11097],{"class":207},[28,22439,2459],{"class":207},[28,22441,21469],{"class":211},[28,22443,22444],{"class":30,"line":97},[28,22445,15299],{"class":207},[28,22447,22448],{"class":30,"line":108},[28,22449,22450],{"class":269},"    \u002F\u002F静态成员变量也是有访问权限的\n",[28,22452,22453,22455,22457],{"class":30,"line":1407},[28,22454,11097],{"class":207},[28,22456,2459],{"class":207},[28,22458,21476],{"class":211},[28,22460,22461],{"class":30,"line":1690},[28,22462,4072],{"class":211},[28,22464,22465],{"class":30,"line":1695},[28,22466,22271],{"class":269},[28,22468,22469,22471,22473,22475,22477,22479],{"class":30,"line":1701},[28,22470,215],{"class":207},[28,22472,15646],{"class":34},[28,22474,22280],{"class":211},[28,22476,257],{"class":207},[28,22478,656],{"class":38},[28,22480,1370],{"class":211},[28,22482,22483,22485,22487,22490,22492,22494],{"class":30,"line":1706},[28,22484,215],{"class":207},[28,22486,15646],{"class":34},[28,22488,22489],{"class":211},"::m_B",[28,22491,257],{"class":207},[28,22493,910],{"class":38},[28,22495,1370],{"class":211},[28,22497,22498,22500,22502],{"class":30,"line":1720},[28,22499,5441],{"class":207},[28,22501,5734],{"class":34},[28,22503,2053],{"class":211},[28,22505,22506],{"class":30,"line":1725},[28,22507,1624],{"class":211},[28,22509,22510],{"class":30,"line":1731},[28,22511,22512],{"class":269},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[28,22514,22515],{"class":30,"line":1752},[28,22516,22517],{"class":269},"    \u002F\u002F静态成员变量有两种访问方式：\n",[28,22519,22520],{"class":30,"line":1757},[28,22521,22522],{"class":269},"    \u002F\u002F1.通过对象进行访问\n",[28,22524,22525],{"class":30,"line":1771},[28,22526,22527],{"class":211},"    Person p;  \n",[28,22529,22530,22532,22534,22536,22538],{"class":30,"line":1776},[28,22531,1629],{"class":211},[28,22533,1253],{"class":207},[28,22535,22178],{"class":211},[28,22537,1253],{"class":207},[28,22539,1275],{"class":211},[28,22541,22542],{"class":30,"line":1805},[28,22543,22544],{"class":269},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[28,22546,22547],{"class":30,"line":1810},[28,22548,22549],{"class":269},"    \u002F\u002F2.通过类名进行访问\n",[28,22551,22552,22554,22556,22558,22560,22562],{"class":30,"line":1827},[28,22553,1629],{"class":211},[28,22555,1253],{"class":207},[28,22557,19123],{"class":34},[28,22559,22280],{"class":211},[28,22561,1253],{"class":207},[28,22563,1275],{"class":211},[28,22565,22566,22568,22570,22572,22574,22576,22578],{"class":30,"line":1832},[28,22567,1629],{"class":211},[28,22569,1253],{"class":207},[28,22571,19123],{"class":34},[28,22573,22489],{"class":211},[28,22575,1253],{"class":207},[28,22577,1318],{"class":211},[28,22579,22580],{"class":269}," \u002F\u002F没有访问权限，报错\n",[28,22582,22583],{"class":30,"line":1837},[28,22584,1643],{"class":211},[28,22586,22587,22589,22591],{"class":30,"line":1842},[28,22588,215],{"class":207},[28,22590,2050],{"class":34},[28,22592,2053],{"class":211},[28,22594,22595],{"class":30,"line":1856},[28,22596,1624],{"class":211},[28,22598,22599,22601],{"class":30,"line":1861},[28,22600,5779],{"class":34},[28,22602,5713],{"class":211},[28,22604,22605],{"class":30,"line":2654},[28,22606,1643],{"class":211},[22075,22608,22610],{"id":22609},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22612,22613],{},"1.静态成员函数定义与访问",[18,22615,22617],{"className":198,"code":22616,"language":200,"meta":23,"style":23},"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",[25,22618,22619,22625,22629,22633,22638,22649,22653,22667,22671,22675,22683,22687,22692,22697,22701,22709,22714,22724],{"__ignoreMap":23},[28,22620,22621,22623],{"class":30,"line":31},[28,22622,14771],{"class":207},[28,22624,15248],{"class":34},[28,22626,22627],{"class":30,"line":42},[28,22628,1624],{"class":211},[28,22630,22631],{"class":30,"line":50},[28,22632,14793],{"class":207},[28,22634,22635],{"class":30,"line":58},[28,22636,22637],{"class":269},"    \u002F\u002F在公共权限下定义静态成员函数\n",[28,22639,22640,22642,22645,22647],{"class":30,"line":70},[28,22641,11097],{"class":207},[28,22643,22644],{"class":207}," void",[28,22646,11462],{"class":34},[28,22648,2053],{"class":211},[28,22650,22651],{"class":30,"line":78},[28,22652,2107],{"class":211},[28,22654,22655,22658,22660,22663,22665],{"class":30,"line":86},[28,22656,22657],{"class":211},"        coout",[28,22659,1253],{"class":207},[28,22661,22662],{"class":64},"\"静态成员函数的调用\"",[28,22664,1253],{"class":207},[28,22666,1275],{"class":211},[28,22668,22669],{"class":30,"line":97},[28,22670,2264],{"class":211},[28,22672,22673],{"class":30,"line":108},[28,22674,4072],{"class":211},[28,22676,22677,22679,22681],{"class":30,"line":1407},[28,22678,5441],{"class":207},[28,22680,5665],{"class":34},[28,22682,2053],{"class":211},[28,22684,22685],{"class":30,"line":1690},[28,22686,1624],{"class":211},[28,22688,22689],{"class":30,"line":1695},[28,22690,22691],{"class":269},"    \u002F\u002F静态成员函数的调用方式:\n",[28,22693,22694],{"class":30,"line":1701},[28,22695,22696],{"class":269},"    \u002F\u002F1.通过对象访问\n",[28,22698,22699],{"class":30,"line":1706},[28,22700,15390],{"class":211},[28,22702,22703,22705,22707],{"class":30,"line":1720},[28,22704,15943],{"class":211},[28,22706,11628],{"class":34},[28,22708,5713],{"class":211},[28,22710,22711],{"class":30,"line":1725},[28,22712,22713],{"class":269},"    \u002F\u002F2.通过类名访问\n",[28,22715,22716,22718,22720,22722],{"class":30,"line":1731},[28,22717,18596],{"class":34},[28,22719,17809],{"class":211},[28,22721,11628],{"class":34},[28,22723,5713],{"class":211},[28,22725,22726],{"class":30,"line":1752},[28,22727,1643],{"class":211},[161,22729,22730],{"start":42},[119,22731,22732],{},"静态成员函数只能访问静态成员变量",[18,22734,22736],{"className":198,"code":22735,"language":200,"meta":23,"style":23},"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",[25,22737,22738,22744,22748,22752,22756,22766,22770,22784,22789,22801,22805,22816,22826,22830,22834,22838,22848,22852,22865,22869,22873,22877,22881,22895,22903,22907,22911,22915,22919,22927,22931,22941,22946,22950,22958,22962,22968],{"__ignoreMap":23},[28,22739,22740,22742],{"class":30,"line":31},[28,22741,14771],{"class":207},[28,22743,15248],{"class":34},[28,22745,22746],{"class":30,"line":42},[28,22747,1624],{"class":211},[28,22749,22750],{"class":30,"line":50},[28,22751,14793],{"class":207},[28,22753,22754],{"class":30,"line":58},[28,22755,22637],{"class":269},[28,22757,22758,22760,22762,22764],{"class":30,"line":70},[28,22759,11097],{"class":207},[28,22761,22644],{"class":207},[28,22763,11462],{"class":34},[28,22765,2053],{"class":211},[28,22767,22768],{"class":30,"line":78},[28,22769,2107],{"class":211},[28,22771,22772,22775,22777,22779,22781],{"class":30,"line":86},[28,22773,22774],{"class":211},"        m_A",[28,22776,257],{"class":207},[28,22778,521],{"class":38},[28,22780,266],{"class":211},[28,22782,22783],{"class":269}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[28,22785,22786],{"class":30,"line":97},[28,22787,22788],{"class":269},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[28,22790,22791,22793,22795,22797,22799],{"class":30,"line":108},[28,22792,22657],{"class":211},[28,22794,1253],{"class":207},[28,22796,22662],{"class":64},[28,22798,1253],{"class":207},[28,22800,1275],{"class":211},[28,22802,22803],{"class":30,"line":1407},[28,22804,2264],{"class":211},[28,22806,22807,22809,22811,22813],{"class":30,"line":1690},[28,22808,11097],{"class":207},[28,22810,2459],{"class":207},[28,22812,15525],{"class":211},[28,22814,22815],{"class":269}," \u002F\u002F静态成员变量\n",[28,22817,22818,22820,22823],{"class":30,"line":1695},[28,22819,2062],{"class":207},[28,22821,22822],{"class":211}," m_B;",[28,22824,22825],{"class":269}," \u002F\u002F非静态成员变量\n",[28,22827,22828],{"class":30,"line":1701},[28,22829,2477],{"emptyLinePlaceholder":134},[28,22831,22832],{"class":30,"line":1706},[28,22833,15299],{"class":207},[28,22835,22836],{"class":30,"line":1720},[28,22837,22450],{"class":269},[28,22839,22840,22842,22844,22846],{"class":30,"line":1725},[28,22841,11097],{"class":207},[28,22843,22644],{"class":207},[28,22845,13695],{"class":34},[28,22847,2053],{"class":211},[28,22849,22850],{"class":30,"line":1731},[28,22851,2107],{"class":211},[28,22853,22854,22856,22858,22861,22863],{"class":30,"line":1752},[28,22855,3528],{"class":211},[28,22857,1253],{"class":207},[28,22859,22860],{"class":64},"\"这是私有权限下的静态函数调用\"",[28,22862,1253],{"class":207},[28,22864,1275],{"class":211},[28,22866,22867],{"class":30,"line":1757},[28,22868,2264],{"class":211},[28,22870,22871],{"class":30,"line":1771},[28,22872,2477],{"emptyLinePlaceholder":134},[28,22874,22875],{"class":30,"line":1776},[28,22876,2477],{"emptyLinePlaceholder":134},[28,22878,22879],{"class":30,"line":1805},[28,22880,4072],{"class":211},[28,22882,22883,22885,22887,22889,22891,22893],{"class":30,"line":1810},[28,22884,215],{"class":207},[28,22886,15646],{"class":34},[28,22888,22280],{"class":211},[28,22890,257],{"class":207},[28,22892,401],{"class":38},[28,22894,1370],{"class":211},[28,22896,22897,22899,22901],{"class":30,"line":1827},[28,22898,5441],{"class":207},[28,22900,5665],{"class":34},[28,22902,2053],{"class":211},[28,22904,22905],{"class":30,"line":1832},[28,22906,1624],{"class":211},[28,22908,22909],{"class":30,"line":1837},[28,22910,22691],{"class":269},[28,22912,22913],{"class":30,"line":1842},[28,22914,22696],{"class":269},[28,22916,22917],{"class":30,"line":1856},[28,22918,15390],{"class":211},[28,22920,22921,22923,22925],{"class":30,"line":1861},[28,22922,15943],{"class":211},[28,22924,11628],{"class":34},[28,22926,5713],{"class":211},[28,22928,22929],{"class":30,"line":2654},[28,22930,22713],{"class":269},[28,22932,22933,22935,22937,22939],{"class":30,"line":2668},[28,22934,18596],{"class":34},[28,22936,17809],{"class":211},[28,22938,11628],{"class":34},[28,22940,5713],{"class":211},[28,22942,22943],{"class":30,"line":2676},[28,22944,22945],{"class":269},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[28,22947,22948],{"class":30,"line":2681},[28,22949,1643],{"class":211},[28,22951,22952,22954,22956],{"class":30,"line":2687},[28,22953,215],{"class":207},[28,22955,2050],{"class":34},[28,22957,2053],{"class":211},[28,22959,22960],{"class":30,"line":2693},[28,22961,1624],{"class":211},[28,22963,22964,22966],{"class":30,"line":2698},[28,22965,5710],{"class":34},[28,22967,5713],{"class":211},[28,22969,22970],{"class":30,"line":8025},[28,22971,1643],{"class":211},[177,22973,22975],{"id":22974},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22075,22977,22979],{"id":22978},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22981,22982],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22984,22985],{},"只有非静态成员变量才属于类的对象上",[22987,22988,22990],"h5",{"id":22989},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[18,22992,22994],{"className":198,"code":22993,"language":200,"meta":23,"style":23},"#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",[25,22995,22996,23003,23013,23019,23023,23027,23031,23039,23043,23047,23070,23074,23082,23086,23092],{"__ignoreMap":23},[28,22997,22998,23000],{"class":30,"line":31},[28,22999,2027],{"class":207},[28,23001,23002],{"class":64},"\u003Ciostraem>\n",[28,23004,23005,23007,23009,23011],{"class":30,"line":42},[28,23006,2035],{"class":207},[28,23008,2038],{"class":207},[28,23010,2041],{"class":34},[28,23012,1370],{"class":211},[28,23014,23015,23017],{"class":30,"line":50},[28,23016,14771],{"class":207},[28,23018,15248],{"class":34},[28,23020,23021],{"class":30,"line":58},[28,23022,1624],{"class":211},[28,23024,23025],{"class":30,"line":70},[28,23026,2477],{"emptyLinePlaceholder":134},[28,23028,23029],{"class":30,"line":78},[28,23030,4072],{"class":211},[28,23032,23033,23035,23037],{"class":30,"line":86},[28,23034,5441],{"class":207},[28,23036,5665],{"class":34},[28,23038,2053],{"class":211},[28,23040,23041],{"class":30,"line":97},[28,23042,1624],{"class":211},[28,23044,23045],{"class":30,"line":108},[28,23046,15390],{"class":211},[28,23048,23049,23051,23053,23056,23058,23061,23063,23065,23067],{"class":30,"line":1407},[28,23050,1629],{"class":211},[28,23052,1253],{"class":207},[28,23054,23055],{"class":64},"\"size of p=\"",[28,23057,1253],{"class":207},[28,23059,23060],{"class":34},"sizeoif",[28,23062,6616],{"class":211},[28,23064,1253],{"class":207},[28,23066,1318],{"class":211},[28,23068,23069],{"class":269}," \u002F\u002F查看这个空类的占用的内存空间\n",[28,23071,23072],{"class":30,"line":1690},[28,23073,1643],{"class":211},[28,23075,23076,23078,23080],{"class":30,"line":1695},[28,23077,215],{"class":207},[28,23079,2050],{"class":34},[28,23081,2053],{"class":211},[28,23083,23084],{"class":30,"line":1701},[28,23085,1624],{"class":211},[28,23087,23088,23090],{"class":30,"line":1706},[28,23089,5710],{"class":34},[28,23091,5713],{"class":211},[28,23093,23094],{"class":30,"line":1720},[28,23095,1643],{"class":211},[14,23097,23098],{},"输出结果为：size of p=1",[14,23100,23101],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23103,23104],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22987,23106,23108],{"id":23107},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[18,23110,23112],{"className":198,"code":23111,"language":200,"meta":23,"style":23},"#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",[25,23113,23114,23120,23130,23138,23142,23151,23155,23163,23167,23171,23190,23194,23198,23206,23210,23216],{"__ignoreMap":23},[28,23115,23116,23118],{"class":30,"line":31},[28,23117,2027],{"class":207},[28,23119,2030],{"class":64},[28,23121,23122,23124,23126,23128],{"class":30,"line":42},[28,23123,2035],{"class":207},[28,23125,2038],{"class":207},[28,23127,2041],{"class":34},[28,23129,1370],{"class":211},[28,23131,23132,23134,23136],{"class":30,"line":50},[28,23133,14771],{"class":207},[28,23135,15646],{"class":34},[28,23137,2751],{"class":211},[28,23139,23140],{"class":30,"line":58},[28,23141,1624],{"class":211},[28,23143,23144,23146,23148],{"class":30,"line":70},[28,23145,2062],{"class":207},[28,23147,15525],{"class":211},[28,23149,23150],{"class":269},"\u002F\u002F非静态成员变量\n",[28,23152,23153],{"class":30,"line":78},[28,23154,4072],{"class":211},[28,23156,23157,23159,23161],{"class":30,"line":86},[28,23158,5441],{"class":207},[28,23160,5665],{"class":34},[28,23162,2053],{"class":211},[28,23164,23165],{"class":30,"line":97},[28,23166,1624],{"class":211},[28,23168,23169],{"class":30,"line":108},[28,23170,15390],{"class":211},[28,23172,23173,23175,23177,23179,23181,23183,23185,23187],{"class":30,"line":1407},[28,23174,1629],{"class":211},[28,23176,1253],{"class":207},[28,23178,23055],{"class":64},[28,23180,1450],{"class":207},[28,23182,6616],{"class":211},[28,23184,1253],{"class":207},[28,23186,1318],{"class":211},[28,23188,23189],{"class":269}," \u002F\u002F查看不是空对象时占用多少内存\n",[28,23191,23192],{"class":30,"line":1690},[28,23193,2477],{"emptyLinePlaceholder":134},[28,23195,23196],{"class":30,"line":1695},[28,23197,1643],{"class":211},[28,23199,23200,23202,23204],{"class":30,"line":1701},[28,23201,215],{"class":207},[28,23203,2050],{"class":34},[28,23205,2053],{"class":211},[28,23207,23208],{"class":30,"line":1706},[28,23209,1624],{"class":211},[28,23211,23212,23214],{"class":30,"line":1720},[28,23213,5710],{"class":34},[28,23215,5713],{"class":211},[28,23217,23218],{"class":30,"line":1725},[28,23219,1643],{"class":211},[14,23221,23222],{},"输出结果：size of p=4",[14,23224,23225],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[161,23227,23228],{},[119,23229,23230],{},"如果加上非静态成员变量，Person类修改如下",[18,23232,23234],{"className":198,"code":23233,"language":200,"meta":23,"style":23},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[25,23235,23236,23242,23246,23252,23260,23264,23269],{"__ignoreMap":23},[28,23237,23238,23240],{"class":30,"line":31},[28,23239,14771],{"class":207},[28,23241,15248],{"class":34},[28,23243,23244],{"class":30,"line":42},[28,23245,1624],{"class":211},[28,23247,23248,23250],{"class":30,"line":50},[28,23249,2062],{"class":207},[28,23251,21469],{"class":211},[28,23253,23254,23256,23258],{"class":30,"line":58},[28,23255,11097],{"class":207},[28,23257,2459],{"class":207},[28,23259,21476],{"class":211},[28,23261,23262],{"class":30,"line":70},[28,23263,4072],{"class":211},[28,23265,23266],{"class":30,"line":78},[28,23267,23268],{"class":269},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[28,23270,23271,23273,23275,23277,23279,23281],{"class":30,"line":86},[28,23272,215],{"class":207},[28,23274,15646],{"class":34},[28,23276,22489],{"class":211},[28,23278,257],{"class":207},[28,23280,401],{"class":38},[28,23282,1370],{"class":211},[14,23284,23285],{},"输出结果：4",[14,23287,23288],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[161,23290,23291],{"start":42},[119,23292,23293],{},"加上非静态成员函数",[18,23295,23297],{"className":198,"code":23296,"language":200,"meta":23,"style":23},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[25,23298,23299,23306,23310,23316,23324,23328,23332,23336],{"__ignoreMap":23},[28,23300,23301,23303],{"class":30,"line":31},[28,23302,14771],{"class":207},[28,23304,23305],{"class":34},"  Person\n",[28,23307,23308],{"class":30,"line":42},[28,23309,1624],{"class":211},[28,23311,23312,23314],{"class":30,"line":50},[28,23313,2062],{"class":207},[28,23315,21469],{"class":211},[28,23317,23318,23320,23322],{"class":30,"line":58},[28,23319,14986],{"class":207},[28,23321,11462],{"class":34},[28,23323,2053],{"class":211},[28,23325,23326],{"class":30,"line":70},[28,23327,2107],{"class":211},[28,23329,23330],{"class":30,"line":78},[28,23331,2477],{"emptyLinePlaceholder":134},[28,23333,23334],{"class":30,"line":86},[28,23335,2264],{"class":211},[28,23337,23338],{"class":30,"line":97},[28,23339,4072],{"class":211},[14,23341,23342],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[161,23344,23345],{"start":50},[119,23346,23347],{},"加上静态成员函数",[18,23349,23351],{"className":198,"code":23350,"language":200,"meta":23,"style":23},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[25,23352,23353,23359,23363,23369,23377,23381,23385,23389,23400,23404,23408,23412],{"__ignoreMap":23},[28,23354,23355,23357],{"class":30,"line":31},[28,23356,14771],{"class":207},[28,23358,23305],{"class":34},[28,23360,23361],{"class":30,"line":42},[28,23362,1624],{"class":211},[28,23364,23365,23367],{"class":30,"line":50},[28,23366,2062],{"class":207},[28,23368,21469],{"class":211},[28,23370,23371,23373,23375],{"class":30,"line":58},[28,23372,14986],{"class":207},[28,23374,11462],{"class":34},[28,23376,2053],{"class":211},[28,23378,23379],{"class":30,"line":70},[28,23380,2107],{"class":211},[28,23382,23383],{"class":30,"line":78},[28,23384,2477],{"emptyLinePlaceholder":134},[28,23386,23387],{"class":30,"line":86},[28,23388,2264],{"class":211},[28,23390,23391,23393,23395,23398],{"class":30,"line":97},[28,23392,11097],{"class":207},[28,23394,22644],{"class":207},[28,23396,23397],{"class":34}," func1",[28,23399,2053],{"class":211},[28,23401,23402],{"class":30,"line":108},[28,23403,2107],{"class":211},[28,23405,23406],{"class":30,"line":1407},[28,23407,2477],{"emptyLinePlaceholder":134},[28,23409,23410],{"class":30,"line":1690},[28,23411,2264],{"class":211},[28,23413,23414],{"class":30,"line":1695},[28,23415,4072],{"class":211},[14,23417,23285],{},[14,23419,23420],{},"解释：静态成员函数也不属于类上",[126,23422,7751],{},{"title":23,"searchDepth":42,"depth":42,"links":23424},[23425,23431],{"id":14722,"depth":42,"text":14723,"children":23426},[23427,23428,23429,23430],{"id":14726,"depth":50,"text":14727},{"id":15451,"depth":50,"text":15452},{"id":15623,"depth":50,"text":15624},{"id":16082,"depth":50,"text":16083},{"id":18454,"depth":42,"text":18455,"children":23432},[23433,23434,23435,23436,23437,23438,23439,23440,23441],{"id":18466,"depth":50,"text":18467},{"id":18759,"depth":50,"text":18760},{"id":19250,"depth":50,"text":19251},{"id":20347,"depth":50,"text":20348},{"id":20770,"depth":50,"text":20771},{"id":21249,"depth":50,"text":21250},{"id":21624,"depth":50,"text":21625},{"id":22037,"depth":50,"text":22038},{"id":22974,"depth":50,"text":22975},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14687,"description":23442},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23449,"title":200,"body":23450,"description":131,"extension":132,"meta":23454,"navigation":134,"path":23456,"seo":23457,"stem":23458,"__hash__":23459},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23451,"toc":23452},[],{"title":23,"searchDepth":42,"depth":42,"links":23453},[],{"category":23455},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":200,"description":131},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23461,"title":23462,"body":23463,"description":23,"extension":132,"meta":24052,"navigation":134,"path":24053,"seo":24054,"stem":24055,"__hash__":24056},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23464,"toc":24034},[23465,23468,23472,23475,23478,23481,23499,23504,23507,23510,23513,23516,23521,23524,23529,23532,23535,23539,23542,23545,23551,23554,23572,23576,23580,23583,23588,23591,23595,23598,23611,23614,23618,23621,23624,23627,23652,23655,23664,23675,23690,23722,23726,23733,23741,23745,23748,23751,23756,23760,23763,23766,23771,23774,23778,23781,23784,23789,23792,23796,23801,23805,23872,23876,23879,23882,23885,23888,23891,23897,23916,23919,23933,23942,23946,23949,23952,23957,23960,23965,23970,23973,23976,23981,23986,23989,23994,23999,24002,24007,24012,24015,24018,24023,24026,24031],[10,23466,23462],{"id":23467},"_1强化学习基本认识",[149,23469,23471],{"id":23470},"_11什么是强化学习","1.1.什么是强化学习",[14,23473,23474],{},"强化学习有两部分组成：智能体和环境；",[14,23476,23477],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23479,23480],{},"强化学习与监督学习的区别:",[161,23482,23483,23486,23489,23492],{},[119,23484,23485],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[119,23487,23488],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[119,23490,23491],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[119,23493,23494,23495,23498],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[359,23496,23497],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23500,23501],{},[1540,23502],{"alt":23,"src":23503},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23505,23506],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23508,23509],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23511,23512],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23514,23515],{},"获取奖励",[14,23517,23518],{},[1540,23519],{"alt":23,"src":23520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23522,23523],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23525,23526],{},[1540,23527],{"alt":23,"src":23528},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23530,23531],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23533,23534],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[149,23536,23538],{"id":23537},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23540,23541],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23543,23544],{},"具身智能中的应用",[14,23546,23547,23550],{},[359,23548,23549],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23552,23553],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23555,23556,23557,23560,23561,23564,23565,23568,23569],{},"机器人是",[359,23558,23559],{},"躯体","，深度学习是",[359,23562,23563],{},"神经元****网络","，VLA是",[359,23566,23567],{},"通用的行为逻辑","，而强化学习是",[359,23570,23571],{},"教练",[149,23573,23575],{"id":23574},"_13序列决策","1.3.序列决策",[177,23577,23579],{"id":23578},"_131智能体与环境","1.3.1.智能体与环境",[14,23581,23582],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23584,23585],{},[1540,23586],{"alt":23,"src":23587},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23589,23590],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[177,23592,23594],{"id":23593},"_132奖励","1.3.2.奖励",[14,23596,23597],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23599,23600,23601,23610],{},"取某个策略的表现如何。强化学习的目的就是",[359,23602,23603,23604,23609],{},"最大化",[359,23605,23606],{},[359,23607,23608],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23612,23613],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[177,23615,23617],{"id":23616},"_133序列决策","1.3.3.序列决策",[14,23619,23620],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23622,23623],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23625,23626],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23628,23629,23633,23634,23636,23637,23639,23640,23642,23643,13872,23646,13872,23649],{},[23630,23631,23632],"em",{},"Ht"," = ",[23630,23635,806],{},"1*, a",[23630,23638,427],{},", r",[23630,23641,427],{},", . . . ,* ",[23630,23644,23645],{},"ot",[23630,23647,23648],{},", at ,",[23630,23650,23651],{},"rt",[14,23653,23654],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23656,23657,23633,23660,1736,23662,639],{},[23630,23658,23659],{},"st",[23630,23661,263],{},[23630,23663,23632],{},[14,23665,23666,23667,23670,23671,23674],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[359,23668,23669],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[359,23672,23673],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23676,23677,23678,23681,23682,23685,23686,23689],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[359,23679,23680],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[359,23683,23684],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23630,23687,23688],{},"S, A, T, R, Ω, O, γ",")。",[14,23691,23692,23693,23695,23696,23698,23699,212,23701,23704,23705,23707,23708,212,23711,23714,23715,23717,23718,23721],{},"其中 ",[23630,23694,899],{}," 表示状态空间，为隐变量，",[23630,23697,442],{}," 为动作空间，",[23630,23700,924],{},[23630,23702,23703],{},"s ′ |s, a",") 为状态转移概率，",[23630,23706,874],{}," 为奖励函数，",[23630,23709,23710],{},"Ω",[23630,23712,23713],{},"o|s, a",") 为观测概率，",[23630,23716,800],{}," 为观测空间，",[23630,23719,23720],{},"γ"," 为折扣因子。",[149,23723,23725],{"id":23724},"_14动作空间","1.4.动作空间",[14,23727,23728,23729,23732],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[359,23730,23731],{},"动作空间"," ，动作空间分为:",[161,23734,23735,23738],{},[119,23736,23737],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[119,23739,23740],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[149,23742,23744],{"id":23743},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23746,23747],{},"由策略、价值函数、模型三部分组成",[14,23749,23750],{},"这三者组成马尔可夫决策过程",[14,23752,23753],{},[1540,23754],{"alt":23,"src":23755},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[177,23757,23759],{"id":23758},"_151策略","1.5.1.策略",[14,23761,23762],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23764,23765],{},"策略可分为两种：",[14,23767,23768],{},[1540,23769],{"alt":23,"src":23770},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23772,23773],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[177,23775,23777],{"id":23776},"_152价值函数","1.5.2.价值函数",[14,23779,23780],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23782,23783],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23785,23786],{},[1540,23787],{"alt":23,"src":23788},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23790,23791],{},"进入某个状态采取的最优动作可以通过Q函数得到",[177,23793,23795],{"id":23794},"_153模型","1.5.3.模型",[14,23797,23798],{},[1540,23799],{"alt":23,"src":23800},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[149,23802,23804],{"id":23803},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[347,23806,23807,23818],{},[350,23808,23809],{},[353,23810,23811,23815],{},[356,23812,23814],{"align":23813},"left","类型",[356,23816,23817],{"align":23813},"特点",[394,23819,23820,23830,23840,23850,23862],{},[353,23821,23822,23827],{},[399,23823,23824],{"align":23813},[359,23825,23826],{},"基于价值的智能体",[399,23828,23829],{"align":23813},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[353,23831,23832,23837],{},[399,23833,23834],{"align":23813},[359,23835,23836],{},"基于策略的智能体",[399,23838,23839],{"align":23813},"直接学习策略，没有学习价值函数",[353,23841,23842,23847],{},[399,23843,23844],{"align":23813},[359,23845,23846],{},"演员-评论员智能体",[399,23848,23849],{"align":23813},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[353,23851,23852,23857],{},[399,23853,23854],{"align":23813},[359,23855,23856],{},"有模型强化学习智能体",[399,23858,23859],{"align":23813},[1540,23860],{"alt":23,"src":23861},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[353,23863,23864,23869],{},[399,23865,23866],{"align":23813},[359,23867,23868],{},"免模型强化学习智能体",[399,23870,23871],{"align":23813},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[149,23873,23875],{"id":23874},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23877,23878],{},"学习和规划是序列决策的两个基本问题",[14,23880,23881],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23883,23884],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23886,23887],{},"强化学习用到的库：Gym",[14,23889,23890],{},"Gym可以检验强化学习算法的优劣",[14,23892,23893,23896],{},[359,23894,23895],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[18,23898,23900],{"className":20,"code":23899,"language":22,"meta":23,"style":23},"pip install gym==0.25.2\n",[25,23901,23902],{"__ignoreMap":23},[28,23903,23904,23907,23910,23913],{"class":30,"line":31},[28,23905,23906],{"class":34},"pip",[28,23908,23909],{"class":64}," install",[28,23911,23912],{"class":64}," gym==",[28,23914,23915],{"class":38},"0.25.2\n",[14,23917,23918],{},"显示图形界面需要",[18,23920,23922],{"className":20,"code":23921,"language":22,"meta":23,"style":23},"pip install pygame\n",[25,23923,23924],{"__ignoreMap":23},[28,23925,23926,23928,23930],{"class":30,"line":31},[28,23927,23906],{"class":34},[28,23929,23909],{"class":64},[28,23931,23932],{"class":64}," pygame\n",[14,23934,23935,23936],{},"有关Gym库的相关文档介绍：",[448,23937,23941],{"href":23938,"rel":23939},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23940],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[149,23943,23945],{"id":23944},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23947,23948],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23950,23951],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23953,23954],{},[1540,23955],{"alt":23,"src":23956},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23958,23959],{},"折扣率需要自己来设定",[14,23961,23962],{},[1540,23963],{"alt":23,"src":23964},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[161,23966,23967],{},[119,23968,23969],{},"状态转移函数：",[14,23971,23972],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23974,23975],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23977,23978],{},[1540,23979],{"alt":23,"src":23980},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[161,23982,23983],{"start":42},[119,23984,23985],{},"动作价值函数：",[14,23987,23988],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23990,23991],{},[1540,23992],{"alt":23,"src":23993},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[161,23995,23996],{"start":50},[119,23997,23998],{},"最优动作价值函数：",[14,24000,24001],{},"这个函数是对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,24003,24004],{},[1540,24005],{"alt":23,"src":24006},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[161,24008,24009],{"start":58},[119,24010,24011],{},"状态价值函数:",[14,24013,24014],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,24016,24017],{},"它衡量的是“一个具体动作”的长期价值",[14,24019,24020],{},[1540,24021],{"alt":23,"src":24022},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,24024,24025],{},"几个价值函数之间的比较：",[14,24027,24028],{},[1540,24029],{"alt":23,"src":24030},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[126,24032,24033],{},"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":23,"searchDepth":42,"depth":42,"links":24035},[24036,24037,24038,24043,24044,24049,24050,24051],{"id":23470,"depth":42,"text":23471},{"id":23537,"depth":42,"text":23538},{"id":23574,"depth":42,"text":23575,"children":24039},[24040,24041,24042],{"id":23578,"depth":50,"text":23579},{"id":23593,"depth":50,"text":23594},{"id":23616,"depth":50,"text":23617},{"id":23724,"depth":42,"text":23725},{"id":23743,"depth":42,"text":23744,"children":24045},[24046,24047,24048],{"id":23758,"depth":50,"text":23759},{"id":23776,"depth":50,"text":23777},{"id":23794,"depth":50,"text":23795},{"id":23803,"depth":42,"text":23804},{"id":23874,"depth":42,"text":23875},{"id":23944,"depth":42,"text":23945},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23462,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24058,"title":24059,"body":24060,"description":24067,"extension":132,"meta":24078,"navigation":134,"path":24079,"seo":24080,"stem":24081,"__hash__":24082},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24061,"toc":24076},[24062,24065,24068,24073],[10,24063,24059],{"id":24064},"_2马尔可夫决策过程",[14,24066,24067],{},"这是强化学习的基本框架",[14,24069,24070],{},[1540,24071],{"alt":23,"src":24072},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24074,24075],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":23,"searchDepth":42,"depth":42,"links":24077},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24059,"description":24067},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24084,"title":24085,"body":24086,"description":23,"extension":132,"meta":24202,"navigation":134,"path":24203,"seo":24204,"stem":24205,"__hash__":24206},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24087,"toc":24197},[24088,24091,24095,24098,24103,24108,24111,24116,24119,24124,24127,24131,24136,24139,24144,24149,24154,24157,24161,24166,24169,24174,24179,24184,24189,24192],[10,24089,24085],{"id":24090},"_3动作价值函数",[149,24092,24094],{"id":24093},"_31dqn","3.1.DQN",[14,24096,24097],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24099,24100],{},[1540,24101],{"alt":23,"src":24102},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24104,24105],{},[1540,24106],{"alt":23,"src":24107},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24109,24110],{},"DQN算法的描述：",[14,24112,24113],{},[1540,24114],{"alt":23,"src":24115},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24117,24118],{},"这里的Dense指的是全连接层",[14,24120,24121],{},[1540,24122],{"alt":23,"src":24123},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24125,24126],{},"当前观测的状态为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算法",[149,24128,24130],{"id":24129},"_32dqn的举例","3.2.DQN的举例",[14,24132,24133],{},[1540,24134],{"alt":23,"src":24135},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24137,24138],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24140,24141],{},[1540,24142],{"alt":23,"src":24143},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24145,24146],{},[1540,24147],{"alt":23,"src":24148},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24150,24151],{},[1540,24152],{"alt":23,"src":24153},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24155,24156],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[149,24158,24160],{"id":24159},"_33td算法","3.3.TD算法",[14,24162,24163],{},[1540,24164],{"alt":23,"src":24165},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24167,24168],{},"强化学习TD算法公式的粗略解释：",[14,24170,24171],{},[1540,24172],{"alt":23,"src":24173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24175,24176],{},[1540,24177],{"alt":23,"src":24178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24180,24181],{},[1540,24182],{"alt":23,"src":24183},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24185,24186],{},[1540,24187],{"alt":23,"src":24188},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24190,24191],{},"TD算法总结：",[14,24193,24194],{},[1540,24195],{"alt":23,"src":24196},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":23,"searchDepth":42,"depth":42,"links":24198},[24199,24200,24201],{"id":24093,"depth":42,"text":24094},{"id":24129,"depth":42,"text":24130},{"id":24159,"depth":42,"text":24160},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24085,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24208,"title":24209,"body":24210,"description":23,"extension":132,"meta":24443,"navigation":134,"path":24444,"seo":24445,"stem":24446,"__hash__":24447},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24211,"toc":24439},[24212,24215,24219,24222,24225,24230,24235,24238,24243,24248,24251,24256,24259,24264,24267,24272,24275,24280,24283,24288,24293,24296,24301,24304,24307,24312,24315,24320,24325,24329,24332,24335,24340,24345,24348,24353,24358,24361,24366,24369,24372,24377,24380,24385,24388,24393,24398,24401,24406,24411,24414,24419,24422,24427,24430],[10,24213,24209],{"id":24214},"_4策略学习",[149,24216,24218],{"id":24217},"_41概念描述","4.1.概念描述",[14,24220,24221],{},"用神经网络（策略网络）近似策略函数",[14,24223,24224],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24226,24227],{},[1540,24228],{"alt":23,"src":24229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24231,24232],{},[1540,24233],{"alt":23,"src":24234},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24236,24237],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24239,24240],{},[1540,24241],{"alt":23,"src":24242},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24244,24245],{},[1540,24246],{"alt":23,"src":24247},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24249,24250],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24252,24253],{},[1540,24254],{"alt":23,"src":24255},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24257,24258],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24260,24261],{},[1540,24262],{"alt":23,"src":24263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24265,24266],{},"改进theta要用到策略梯度算法",[14,24268,24269],{},[1540,24270],{"alt":23,"src":24271},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24273,24274],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24276,24277],{},[1540,24278],{"alt":23,"src":24279},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24281,24282],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24284,24285],{},[1540,24286],{"alt":23,"src":24287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24289,24290],{},[1540,24291],{"alt":23,"src":24292},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24294,24295],{},"梯度公式总结：",[14,24297,24298],{},[1540,24299],{"alt":23,"src":24300},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24302,24303],{},"两个公式的分别应用场景：",[14,24305,24306],{},"对于离散的动作：",[14,24308,24309],{},[1540,24310],{"alt":23,"src":24311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24313,24314],{},"对于连续的动作：",[14,24316,24317],{},[1540,24318],{"alt":23,"src":24319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24321,24322],{},[1540,24323],{"alt":23,"src":24324},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[149,24326,24328],{"id":24327},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24330,24331],{},"使用蒙特卡洛来近似计算策略梯度",[14,24333,24334],{},"蒙特卡洛法的解释如下：",[14,24336,24337],{},[1540,24338],{"alt":23,"src":24339},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24341,24342],{},[1540,24343],{"alt":23,"src":24344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24346,24347],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[161,24349,24350],{},[119,24351,24352],{},"方法一：reinforce算法",[14,24354,24355],{},[1540,24356],{"alt":23,"src":24357},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24359,24360],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[161,24362,24363],{"start":42},[119,24364,24365],{},"方法二：actor-critic算法",[14,24367,24368],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24370,24371],{},"两个网络的构建：",[14,24373,24374],{},[1540,24375],{"alt":23,"src":24376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24378,24379],{},"actor网路：",[14,24381,24382],{},[1540,24383],{"alt":23,"src":24384},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24386,24387],{},"critic网络",[14,24389,24390],{},[1540,24391],{"alt":23,"src":24392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[161,24394,24395],{"start":50},[119,24396,24397],{},"网络的训练",[14,24399,24400],{},"网络描述",[14,24402,24403],{},[1540,24404],{"alt":23,"src":24405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24407,24408],{},[1540,24409],{"alt":23,"src":24410},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24412,24413],{},"TD算法更新梯度：",[14,24415,24416],{},[1540,24417],{"alt":23,"src":24418},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24420,24421],{},"策略网络更新梯度：",[14,24423,24424],{},[1540,24425],{"alt":23,"src":24426},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24428,24429],{},"训练整个流程的具体描述：",[14,24431,24432,24435,24436],{},[1540,24433],{"alt":23,"src":24434},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1540,24437],{"alt":23,"src":24438},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":23,"searchDepth":42,"depth":42,"links":24440},[24441,24442],{"id":24217,"depth":42,"text":24218},{"id":24327,"depth":42,"text":24328},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24209,"description":23},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24449,"title":24450,"body":24451,"description":24458,"extension":132,"meta":24508,"navigation":134,"path":24509,"seo":24510,"stem":24511,"__hash__":24512},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24452,"toc":24504},[24453,24456,24459,24463,24466,24471,24475,24478,24483,24486,24491,24496,24499],[10,24454,24450],{"id":24455},"_5alphago算法",[14,24457,24458],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[149,24460,24462],{"id":24461},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24464,24465],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24467,24468],{},[1540,24469],{"alt":23,"src":24470},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[149,24472,24474],{"id":24473},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24476,24477],{},"采用强化学习的方式训练策略网络",[14,24479,24480],{},[1540,24481],{"alt":23,"src":24482},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24484,24485],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24487,24488],{},[1540,24489],{"alt":23,"src":24490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24492,24493],{},[1540,24494],{"alt":23,"src":24495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24497,24498],{},"强化学习训练策略网络的总结：",[14,24500,24501],{},[1540,24502],{"alt":23,"src":24503},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":23,"searchDepth":42,"depth":42,"links":24505},[24506,24507],{"id":24461,"depth":42,"text":24462},{"id":24473,"depth":42,"text":24474},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24450,"description":24458},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24514,"title":24515,"body":24516,"description":24523,"extension":132,"meta":24526,"navigation":134,"path":24527,"seo":24528,"stem":24529,"__hash__":24530},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24517,"toc":24524},[24518,24521],[10,24519,24515],{"id":24520},"_6价值网络",[14,24522,24523],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":23,"searchDepth":42,"depth":42,"links":24525},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24515,"description":24523},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24532,"title":24533,"body":24534,"description":24538,"extension":132,"meta":24539,"navigation":134,"path":24540,"seo":24541,"stem":24542,"__hash__":24543},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24535,"toc":24536},[],{"title":23,"searchDepth":42,"depth":42,"links":24537},[],"记录自己的强化学习笔记。",{"category":23455},"\u002Fwiki\u002F2025-12-04",{"title":24533,"description":24538},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24545,"title":24546,"body":24547,"description":131,"extension":132,"meta":24586,"navigation":134,"path":24587,"seo":24588,"stem":24589,"__hash__":24590},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24548,"toc":24584},[24549,24552,24555,24561,24564,24570,24573,24578,24581],[10,24550,24546],{"id":24551},"_1-项目概览与官方资源",[14,24553,24554],{},"官方文档：",[14,24556,24557],{},[448,24558,24559],{"href":24559,"rel":24560},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23940],[14,24562,24563],{},"官方代码仓库：",[14,24565,24566],{},[448,24567,24568],{"href":24568,"rel":24569},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23940],[14,24571,24572],{},"复现大体流程：",[14,24574,24575],{},[1540,24576],{"alt":23,"src":24577},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24579,24580],{},"本教程的目标是打通这条链路：",[14,24582,24583],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":23,"searchDepth":42,"depth":42,"links":24585},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24546,"description":131},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24592,"title":24593,"body":24594,"description":131,"extension":132,"meta":24710,"navigation":134,"path":24711,"seo":24712,"stem":24713,"__hash__":24714},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24595,"toc":24705},[24596,24599,24603,24606,24613,24617,24620,24629,24639,24643,24673,24676,24702],[10,24597,24593],{"id":24598},"_2-环境准备与设备连接",[149,24600,24602],{"id":24601},"_21-系统与环境","2.1 系统与环境",[14,24604,24605],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24607,24608,24609,24612],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[25,24610,24611],{},"lerobot"," 依赖。",[149,24614,24616],{"id":24615},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24618,24619],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[18,24621,24623],{"className":20,"code":24622,"language":22,"meta":23,"style":23},"lerobot-find-out\n",[25,24624,24625],{"__ignoreMap":23},[28,24626,24627],{"class":30,"line":31},[28,24628,24622],{"class":34},[14,24630,24631,24632,422,24635,24638],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[25,24633,24634],{},"\u002Fdev\u002FttyACM0",[25,24636,24637],{},"\u002Fdev\u002FttyACM1","）。",[149,24640,24642],{"id":24641},"_23-串口授权","2.3 串口授权",[18,24644,24646],{"className":20,"code":24645,"language":22,"meta":23,"style":23},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[25,24647,24648,24662],{"__ignoreMap":23},[28,24649,24650,24653,24656,24659],{"class":30,"line":31},[28,24651,24652],{"class":34},"sudo",[28,24654,24655],{"class":64}," chmod",[28,24657,24658],{"class":38}," 666",[28,24660,24661],{"class":64}," \u002Fdev\u002FttyACM0\n",[28,24663,24664,24666,24668,24670],{"class":30,"line":42},[28,24665,24652],{"class":34},[28,24667,24655],{"class":64},[28,24669,24658],{"class":38},[28,24671,24672],{"class":64}," \u002Fdev\u002FttyACM1\n",[14,24674,24675],{},"说明：",[116,24677,24678,24683,24689,24699],{},[119,24679,24680,24682],{},[25,24681,24652],{},"：以 root 权限执行命令。",[119,24684,24685,24688],{},[25,24686,24687],{},"chmod","：修改设备节点权限。",[119,24690,24691,24694,24695,24698],{},[25,24692,24693],{},"666","：",[25,24696,24697],{},"rw-rw-rw-","，所有用户可读写。",[119,24700,24701],{},"串口号必须替换为你机器上的真实端口。",[126,24703,24704],{},"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":23,"searchDepth":42,"depth":42,"links":24706},[24707,24708,24709],{"id":24601,"depth":42,"text":24602},{"id":24615,"depth":42,"text":24616},{"id":24641,"depth":42,"text":24642},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24593,"description":131},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24716,"title":24717,"body":24718,"description":131,"extension":132,"meta":24876,"navigation":134,"path":24877,"seo":24878,"stem":24879,"__hash__":24880},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24719,"toc":24872},[24720,24724,24728,24734,24737,24792,24795,24799,24802,24869],[10,24721,24723],{"id":24722},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[149,24725,24727],{"id":24726},"_31-配置电机-id","3.1 配置电机 ID",[14,24729,24730,24731,24733],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[25,24732,427],{},"，需要改成机械臂链路里不冲突的编号。",[14,24735,24736],{},"方式一：用 LeRobot 命令逐步写入。",[18,24738,24740],{"className":20,"code":24739,"language":22,"meta":23,"style":23},"# 主臂舵机配置 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",[25,24741,24742,24747,24754,24761,24766,24770,24775,24781,24787],{"__ignoreMap":23},[28,24743,24744],{"class":30,"line":31},[28,24745,24746],{"class":269},"# 主臂舵机配置 ID\n",[28,24748,24749,24752],{"class":30,"line":42},[28,24750,24751],{"class":34},"lerobot-setup-motors",[28,24753,39],{"class":38},[28,24755,24756,24759],{"class":30,"line":50},[28,24757,24758],{"class":38},"  --teleop.type=so101_leader",[28,24760,39],{"class":38},[28,24762,24763],{"class":30,"line":58},[28,24764,24765],{"class":38},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[28,24767,24768],{"class":30,"line":70},[28,24769,2477],{"emptyLinePlaceholder":134},[28,24771,24772],{"class":30,"line":78},[28,24773,24774],{"class":269},"# 从臂舵机配置 ID\n",[28,24776,24777,24779],{"class":30,"line":86},[28,24778,24751],{"class":34},[28,24780,39],{"class":38},[28,24782,24783,24785],{"class":30,"line":97},[28,24784,45],{"class":38},[28,24786,39],{"class":38},[28,24788,24789],{"class":30,"line":108},[28,24790,24791],{"class":38},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24793,24794],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[149,24796,24798],{"id":24797},"_32-机械臂校准","3.2 机械臂校准",[14,24800,24801],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[18,24803,24805],{"className":20,"code":24804,"language":22,"meta":23,"style":23},"# 主臂校准\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",[25,24806,24807,24812,24819,24825,24832,24837,24841,24846,24852,24858,24864],{"__ignoreMap":23},[28,24808,24809],{"class":30,"line":31},[28,24810,24811],{"class":269},"# 主臂校准\n",[28,24813,24814,24817],{"class":30,"line":42},[28,24815,24816],{"class":34},"lerobot-calibrate",[28,24818,39],{"class":38},[28,24820,24821,24823],{"class":30,"line":50},[28,24822,24758],{"class":38},[28,24824,39],{"class":38},[28,24826,24827,24830],{"class":30,"line":58},[28,24828,24829],{"class":38},"  --teleop.port=\u002Fdev\u002FttyACM0",[28,24831,39],{"class":38},[28,24833,24834],{"class":30,"line":70},[28,24835,24836],{"class":38},"  --teleop.id=my_awesome_leader_arm\n",[28,24838,24839],{"class":30,"line":78},[28,24840,2477],{"emptyLinePlaceholder":134},[28,24842,24843],{"class":30,"line":86},[28,24844,24845],{"class":269},"# 从臂校准\n",[28,24847,24848,24850],{"class":30,"line":97},[28,24849,24816],{"class":34},[28,24851,39],{"class":38},[28,24853,24854,24856],{"class":30,"line":108},[28,24855,45],{"class":38},[28,24857,39],{"class":38},[28,24859,24860,24862],{"class":30,"line":1407},[28,24861,53],{"class":38},[28,24863,39],{"class":38},[28,24865,24866],{"class":30,"line":1690},[28,24867,24868],{"class":38},"  --robot.id=my_awesome_follower_arm\n",[126,24870,24871],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":42,"depth":42,"links":24873},[24874,24875],{"id":24726,"depth":42,"text":24727},{"id":24797,"depth":42,"text":24798},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24717,"description":131},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24882,"title":24883,"body":24884,"description":131,"extension":132,"meta":25073,"navigation":134,"path":25074,"seo":25075,"stem":25076,"__hash__":25077},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24885,"toc":25069},[24886,24889,24893,24939,24943,24956,25018,25021,25066],[10,24887,24883],{"id":24888},"_4-遥操与相机接入",[149,24890,24892],{"id":24891},"_41-不带相机遥操","4.1 不带相机遥操",[18,24894,24896],{"className":20,"code":24895,"language":22,"meta":23,"style":23},"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",[25,24897,24898,24905,24911,24917,24923,24929,24935],{"__ignoreMap":23},[28,24899,24900,24903],{"class":30,"line":31},[28,24901,24902],{"class":34},"lerobot-teleoperate",[28,24904,39],{"class":38},[28,24906,24907,24909],{"class":30,"line":42},[28,24908,45],{"class":38},[28,24910,39],{"class":38},[28,24912,24913,24915],{"class":30,"line":50},[28,24914,53],{"class":38},[28,24916,39],{"class":38},[28,24918,24919,24921],{"class":30,"line":58},[28,24920,73],{"class":38},[28,24922,39],{"class":38},[28,24924,24925,24927],{"class":30,"line":70},[28,24926,24758],{"class":38},[28,24928,39],{"class":38},[28,24930,24931,24933],{"class":30,"line":78},[28,24932,24829],{"class":38},[28,24934,39],{"class":38},[28,24936,24937],{"class":30,"line":86},[28,24938,24836],{"class":38},[149,24940,24942],{"id":24941},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[18,24944,24946],{"className":20,"code":24945,"language":22,"meta":23,"style":23},"lerobot-find-cameras opencv\n",[25,24947,24948],{"__ignoreMap":23},[28,24949,24950,24953],{"class":30,"line":31},[28,24951,24952],{"class":34},"lerobot-find-cameras",[28,24954,24955],{"class":64}," opencv\n",[18,24957,24959],{"className":20,"code":24958,"language":22,"meta":23,"style":23},"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",[25,24960,24961,24967,24973,24979,24985,24994,25000,25006,25013],{"__ignoreMap":23},[28,24962,24963,24965],{"class":30,"line":31},[28,24964,24902],{"class":34},[28,24966,39],{"class":38},[28,24968,24969,24971],{"class":30,"line":42},[28,24970,45],{"class":38},[28,24972,39],{"class":38},[28,24974,24975,24977],{"class":30,"line":50},[28,24976,53],{"class":38},[28,24978,39],{"class":38},[28,24980,24981,24983],{"class":30,"line":58},[28,24982,73],{"class":38},[28,24984,39],{"class":38},[28,24986,24987,24989,24992],{"class":30,"line":70},[28,24988,61],{"class":38},[28,24990,24991],{"class":64},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[28,24993,39],{"class":38},[28,24995,24996,24998],{"class":30,"line":78},[28,24997,24758],{"class":38},[28,24999,39],{"class":38},[28,25001,25002,25004],{"class":30,"line":86},[28,25003,24829],{"class":38},[28,25005,39],{"class":38},[28,25007,25008,25011],{"class":30,"line":97},[28,25009,25010],{"class":38},"  --teleop.id=my_awesome_leader_arm",[28,25012,39],{"class":38},[28,25014,25015],{"class":30,"line":108},[28,25016,25017],{"class":38},"  --display_data=true\n",[14,25019,25020],{},"相机参数说明：",[116,25022,25023,25029,25035,25044,25054,25060],{},[119,25024,25025,25028],{},[25,25026,25027],{},"front","：相机名称。",[119,25030,25031,25034],{},[25,25032,25033],{},"type: opencv","：相机驱动类型。",[119,25036,25037,25040,25041,24638],{},[25,25038,25039],{},"index_or_path","：设备编号或设备路径（如 ",[25,25042,25043],{},"\u002Fdev\u002Fvideo4",[119,25045,25046,25049,25050,25053],{},[25,25047,25048],{},"width"," \u002F ",[25,25051,25052],{},"height","：图像分辨率。",[119,25055,25056,25059],{},[25,25057,25058],{},"fps","：采样帧率。",[119,25061,25062,25065],{},[25,25063,25064],{},"--display_data=true","：启用实时可视化。",[126,25067,25068],{},"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":23,"searchDepth":42,"depth":42,"links":25070},[25071,25072],{"id":24891,"depth":42,"text":24892},{"id":24941,"depth":42,"text":24942},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24883,"description":131},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25079,"title":25080,"body":25081,"description":131,"extension":132,"meta":25253,"navigation":134,"path":25254,"seo":25255,"stem":25256,"__hash__":25257},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25082,"toc":25248},[25083,25087,25091,25096,25101,25104,25146,25152,25156,25205,25210,25214,25217,25225,25230,25235,25240,25245],[10,25084,25086],{"id":25085},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[149,25088,25090],{"id":25089},"_51-生成访问令牌","5.1 生成访问令牌",[14,25092,25093],{},[1540,25094],{"alt":23,"src":25095},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25097,25098],{},[1540,25099],{"alt":23,"src":25100},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25102,25103],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[18,25105,25107],{"className":20,"code":25106,"language":22,"meta":23,"style":23},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[25,25108,25109,25122],{"__ignoreMap":23},[28,25110,25111,25114,25117,25119],{"class":30,"line":31},[28,25112,25113],{"class":207},"export",[28,25115,25116],{"class":211}," HF_TOKEN",[28,25118,257],{"class":207},[28,25120,25121],{"class":64},"\"your_huggingface_token\"\n",[28,25123,25124,25127,25130,25133,25136,25138,25141,25143],{"class":30,"line":42},[28,25125,25126],{"class":34},"hf",[28,25128,25129],{"class":64}," auth",[28,25131,25132],{"class":64}," login",[28,25134,25135],{"class":38}," --token",[28,25137,9801],{"class":64},[28,25139,25140],{"class":211},"$HF_TOKEN",[28,25142,461],{"class":64},[28,25144,25145],{"class":38}," --add-to-git-credential\n",[14,25147,25148,25151],{},[25,25149,25150],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[149,25153,25155],{"id":25154},"_52-验证登录","5.2 验证登录",[18,25157,25159],{"className":20,"code":25158,"language":22,"meta":23,"style":23},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[25,25160,25161,25192],{"__ignoreMap":23},[28,25162,25163,25166,25168,25171,25173,25175,25178,25181,25184,25187,25190],{"class":30,"line":31},[28,25164,25165],{"class":211},"HF_USER",[28,25167,257],{"class":207},[28,25169,25170],{"class":211},"$(",[28,25172,25126],{"class":34},[28,25174,25129],{"class":64},[28,25176,25177],{"class":64}," whoami",[28,25179,25180],{"class":207}," |",[28,25182,25183],{"class":34}," head",[28,25185,25186],{"class":38}," -n",[28,25188,25189],{"class":38}," 1",[28,25191,218],{"class":211},[28,25193,25194,25197,25199,25202],{"class":30,"line":42},[28,25195,25196],{"class":38},"echo",[28,25198,9801],{"class":64},[28,25200,25201],{"class":211},"$HF_USER",[28,25203,25204],{"class":64},"\"\n",[14,25206,25207],{},[1540,25208],{"alt":23,"src":25209},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[149,25211,25213],{"id":25212},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25215,25216],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[116,25218,25219,25222],{},[119,25220,25221],{},"Dataset Repo（用于上传演示数据）",[119,25223,25224],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25226,25227],{},[1540,25228],{"alt":23,"src":25229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25231,25232],{},[1540,25233],{"alt":23,"src":25234},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25236,25237],{},[1540,25238],{"alt":23,"src":25239},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25241,25242],{},[1540,25243],{"alt":23,"src":25244},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[126,25246,25247],{},"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":23,"searchDepth":42,"depth":42,"links":25249},[25250,25251,25252],{"id":25089,"depth":42,"text":25090},{"id":25154,"depth":42,"text":25155},{"id":25212,"depth":42,"text":25213},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25080,"description":131},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25259,"title":25260,"body":25261,"description":131,"extension":132,"meta":25451,"navigation":134,"path":25452,"seo":25453,"stem":25454,"__hash__":25455},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25262,"toc":25446},[25263,25267,25271,25361,25369,25374,25378,25394,25397,25401,25444],[10,25264,25266],{"id":25265},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[149,25268,25270],{"id":25269},"_61-录制示教数据","6.1 录制示教数据",[18,25272,25274],{"className":20,"code":25273,"language":22,"meta":23,"style":23},"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",[25,25275,25276,25282,25288,25294,25300,25308,25314,25320,25326,25333,25341,25348,25356],{"__ignoreMap":23},[28,25277,25278,25280],{"class":30,"line":31},[28,25279,35],{"class":34},[28,25281,39],{"class":38},[28,25283,25284,25286],{"class":30,"line":42},[28,25285,45],{"class":38},[28,25287,39],{"class":38},[28,25289,25290,25292],{"class":30,"line":50},[28,25291,53],{"class":38},[28,25293,39],{"class":38},[28,25295,25296,25298],{"class":30,"line":58},[28,25297,73],{"class":38},[28,25299,39],{"class":38},[28,25301,25302,25304,25306],{"class":30,"line":70},[28,25303,61],{"class":38},[28,25305,65],{"class":64},[28,25307,39],{"class":38},[28,25309,25310,25312],{"class":30,"line":78},[28,25311,24758],{"class":38},[28,25313,39],{"class":38},[28,25315,25316,25318],{"class":30,"line":86},[28,25317,24829],{"class":38},[28,25319,39],{"class":38},[28,25321,25322,25324],{"class":30,"line":97},[28,25323,25010],{"class":38},[28,25325,39],{"class":38},[28,25327,25328,25331],{"class":30,"line":108},[28,25329,25330],{"class":38},"  --display_data=true",[28,25332,39],{"class":38},[28,25334,25335,25337,25339],{"class":30,"line":1407},[28,25336,89],{"class":38},[28,25338,92],{"class":64},[28,25340,39],{"class":38},[28,25342,25343,25346],{"class":30,"line":1690},[28,25344,25345],{"class":38},"  --dataset.num_episodes=10",[28,25347,39],{"class":38},[28,25349,25350,25352,25354],{"class":30,"line":1695},[28,25351,100],{"class":38},[28,25353,103],{"class":64},[28,25355,39],{"class":38},[28,25357,25358],{"class":30,"line":1701},[28,25359,25360],{"class":38},"  --resume=true\n",[116,25362,25363],{},[119,25364,25365,25368],{},[25,25366,25367],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25370,25371],{},[1540,25372],{"alt":23,"src":25373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[149,25375,25377],{"id":25376},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[18,25379,25381],{"className":20,"code":25380,"language":22,"meta":23,"style":23},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[25,25382,25383],{"__ignoreMap":23},[28,25384,25385,25388,25391],{"class":30,"line":31},[28,25386,25387],{"class":34},"rm",[28,25389,25390],{"class":38}," -rf",[28,25392,25393],{"class":64}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25395,25396],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[149,25398,25400],{"id":25399},"_63-回放指定-episode","6.3 回放指定 episode",[18,25402,25404],{"className":20,"code":25403,"language":22,"meta":23,"style":23},"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",[25,25405,25406,25413,25419,25425,25431,25439],{"__ignoreMap":23},[28,25407,25408,25411],{"class":30,"line":31},[28,25409,25410],{"class":34},"lerobot-replay",[28,25412,39],{"class":38},[28,25414,25415,25417],{"class":30,"line":42},[28,25416,45],{"class":38},[28,25418,39],{"class":38},[28,25420,25421,25423],{"class":30,"line":50},[28,25422,53],{"class":38},[28,25424,39],{"class":38},[28,25426,25427,25429],{"class":30,"line":58},[28,25428,73],{"class":38},[28,25430,39],{"class":38},[28,25432,25433,25435,25437],{"class":30,"line":70},[28,25434,89],{"class":38},[28,25436,92],{"class":64},[28,25438,39],{"class":38},[28,25440,25441],{"class":30,"line":78},[28,25442,25443],{"class":38},"  --dataset.episode=0\n",[126,25445,128],{},{"title":23,"searchDepth":42,"depth":42,"links":25447},[25448,25449,25450],{"id":25269,"depth":42,"text":25270},{"id":25376,"depth":42,"text":25377},{"id":25399,"depth":42,"text":25400},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25260,"description":131},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25457,"title":25458,"body":25459,"description":131,"extension":132,"meta":25586,"navigation":134,"path":25587,"seo":25588,"stem":25589,"__hash__":25590},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25460,"toc":25584},[25461,25465,25527,25530,25577,25582],[10,25462,25464],{"id":25463},"_7-act-模型训练","7. ACT 模型训练",[18,25466,25468],{"className":20,"code":25467,"language":22,"meta":23,"style":23},"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",[25,25469,25470,25477,25485,25492,25499,25506,25513,25520],{"__ignoreMap":23},[28,25471,25472,25475],{"class":30,"line":31},[28,25473,25474],{"class":34},"lerobot-train",[28,25476,39],{"class":38},[28,25478,25479,25481,25483],{"class":30,"line":42},[28,25480,89],{"class":38},[28,25482,92],{"class":64},[28,25484,39],{"class":38},[28,25486,25487,25490],{"class":30,"line":50},[28,25488,25489],{"class":38},"  --policy.type=act",[28,25491,39],{"class":38},[28,25493,25494,25497],{"class":30,"line":58},[28,25495,25496],{"class":38},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[28,25498,39],{"class":38},[28,25500,25501,25504],{"class":30,"line":70},[28,25502,25503],{"class":38},"  --job_name=act_so101_test",[28,25505,39],{"class":38},[28,25507,25508,25511],{"class":30,"line":78},[28,25509,25510],{"class":38},"  --policy.device=cuda",[28,25512,39],{"class":38},[28,25514,25515,25518],{"class":30,"line":86},[28,25516,25517],{"class":38},"  --wandb.enable=false",[28,25519,39],{"class":38},[28,25521,25522,25525],{"class":30,"line":97},[28,25523,25524],{"class":38},"  --policy.repo_id=",[28,25526,114],{"class":64},[14,25528,25529],{},"参数说明：",[116,25531,25532,25538,25544,25550,25556,25565,25571],{},[119,25533,25534,25537],{},[25,25535,25536],{},"--dataset.repo_id","：训练数据集仓库。",[119,25539,25540,25543],{},[25,25541,25542],{},"--policy.type=act","：策略模型类型为 ACT。",[119,25545,25546,25549],{},[25,25547,25548],{},"--output_dir","：本地训练输出目录。",[119,25551,25552,25555],{},[25,25553,25554],{},"--job_name","：训练任务名称。",[119,25557,25558,25561,25562,24638],{},[25,25559,25560],{},"--policy.device","：训练设备（如 ",[25,25563,25564],{},"cuda",[119,25566,25567,25570],{},[25,25568,25569],{},"--wandb.enable","：是否启用 WandB 可视化。",[119,25572,25573,25576],{},[25,25574,25575],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25578,25579],{},[1540,25580],{"alt":23,"src":25581},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[126,25583,128],{},{"title":23,"searchDepth":42,"depth":42,"links":25585},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25458,"description":131},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":4,"title":5,"body":25592,"description":131,"extension":132,"meta":25672,"navigation":134,"path":135,"seo":25673,"stem":137,"__hash__":138},{"type":7,"value":25593,"toc":25670},[25594,25596,25598,25662,25668],[10,25595,5],{"id":12},[14,25597,16],{},[18,25599,25600],{"className":20,"code":21,"language":22,"meta":23,"style":23},[25,25601,25602,25608,25614,25620,25628,25634,25640,25648,25656],{"__ignoreMap":23},[28,25603,25604,25606],{"class":30,"line":31},[28,25605,35],{"class":34},[28,25607,39],{"class":38},[28,25609,25610,25612],{"class":30,"line":42},[28,25611,45],{"class":38},[28,25613,39],{"class":38},[28,25615,25616,25618],{"class":30,"line":50},[28,25617,53],{"class":38},[28,25619,39],{"class":38},[28,25621,25622,25624,25626],{"class":30,"line":58},[28,25623,61],{"class":38},[28,25625,65],{"class":64},[28,25627,39],{"class":38},[28,25629,25630,25632],{"class":30,"line":70},[28,25631,73],{"class":38},[28,25633,39],{"class":38},[28,25635,25636,25638],{"class":30,"line":78},[28,25637,81],{"class":38},[28,25639,39],{"class":38},[28,25641,25642,25644,25646],{"class":30,"line":86},[28,25643,89],{"class":38},[28,25645,92],{"class":64},[28,25647,39],{"class":38},[28,25649,25650,25652,25654],{"class":30,"line":97},[28,25651,100],{"class":38},[28,25653,103],{"class":64},[28,25655,39],{"class":38},[28,25657,25658,25660],{"class":30,"line":108},[28,25659,111],{"class":38},[28,25661,114],{"class":64},[116,25663,25664],{},[119,25665,25666,124],{},[25,25667,123],{},[126,25669,128],{},{"title":23,"searchDepth":42,"depth":42,"links":25671},[],{},{"title":5,"description":131},{"id":25675,"title":25676,"body":25677,"description":131,"extension":132,"meta":25706,"navigation":134,"path":25707,"seo":25708,"stem":25709,"__hash__":25710},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25678,"toc":25704},[25679,25683,25686,25692,25695,25701],[10,25680,25682],{"id":25681},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25684,25685],{},"项目地址：",[14,25687,25688],{},[448,25689,25690],{"href":25690,"rel":25691},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23940],[14,25693,25694],{},"参考教程：",[14,25696,25697],{},[448,25698,25699],{"href":25699,"rel":25700},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23940],[14,25702,25703],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":23,"searchDepth":42,"depth":42,"links":25705},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25676,"description":131},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25712,"title":25713,"body":25714,"description":25718,"extension":132,"meta":25719,"navigation":134,"path":25720,"seo":25721,"stem":25722,"__hash__":25723},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25715,"toc":25716},[],{"title":23,"searchDepth":42,"depth":42,"links":25717},[],"act复现",{"category":23455},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25713,"description":25718},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25725,"title":25726,"body":25727,"description":23,"extension":132,"meta":26029,"navigation":134,"path":26030,"seo":26031,"stem":26032,"__hash__":26033},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25728,"toc":26021},[25729,25732,25736,25746,25753,25760,25763,25770,25773,25776,25780,25792,25796,25842,25845,25848,25851,25854,25857,25861,25899,25905,25909,25963,25968,25971,25974,25979,25982,25987,25990,25993,25997,26000,26003,26007],[10,25730,25726],{"id":25731},"_1简介",[177,25733,25735],{"id":25734},"_11什么是-docker","1.1什么是 Docker？",[14,25737,25738,25739,25742,25743],{},"Docker 是一个开源的 ",[359,25740,25741],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[359,25744,25745],{},"一次构建，到处运行。",[14,25747,25748,25749,25752],{},"“ ",[359,25750,25751],{},"一次构建，到处运行"," ”也就是说：",[161,25754,25755],{},[119,25756,25757],{},[359,25758,25759],{},"之前：",[14,25761,25762],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[161,25764,25765],{},[119,25766,25767],{},[359,25768,25769],{},"使用docker后：",[14,25771,25772],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25774,25775],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[177,25777,25779],{"id":25778},"_12它是怎么工作的","1.2.它是怎么工作的？",[116,25781,25782,25785],{},[119,25783,25784],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[119,25786,25787,25788,25791],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[359,25789,25790],{},"无论在哪运行都一样稳定"," 。",[177,25793,25795],{"id":25794},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[347,25797,25798,25808],{},[350,25799,25800],{},[353,25801,25802,25805],{},[356,25803,25804],{"align":23813},"概念",[356,25806,25807],{"align":23813},"解释",[394,25809,25810,25818,25826,25834],{},[353,25811,25812,25815],{},[399,25813,25814],{"align":23813},"镜像",[399,25816,25817],{"align":23813},"Image，运行容器的模板，像是一个应用快照",[353,25819,25820,25823],{},[399,25821,25822],{"align":23813},"容器",[399,25824,25825],{"align":23813},"Container，运行中的镜像实例，有自己的文件系统、网络等",[353,25827,25828,25831],{},[399,25829,25830],{"align":23813},"Dockerfile",[399,25832,25833],{"align":23813},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[353,25835,25836,25839],{},[399,25837,25838],{"align":23813},"仓库",[399,25840,25841],{"align":23813},"Registry，存放镜像的地方，比如 Docker Hub",[14,25843,25844],{},"抽象化理解:",[14,25846,25847],{},"Docker镜像≈C++类",[14,25849,25850],{},"Docker容器≈C++类实例(即对象)",[14,25852,25853],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25855,25856],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[177,25858,25860],{"id":25859},"_14类比理解","1.4.类比理解",[347,25862,25863,25873],{},[350,25864,25865],{},[353,25866,25867,25870],{},[356,25868,25869],{"align":23813},"传统部署",[356,25871,25872],{"align":23813},"Docker部署",[394,25874,25875,25883,25891],{},[353,25876,25877,25880],{},[399,25878,25879],{"align":23813},"手动安装依赖、调试版本不一致问题",[399,25881,25882],{"align":23813},"一次打包环境和代码",[353,25884,25885,25888],{},[399,25886,25887],{"align":23813},"程序“裸奔”跑在系统上",[399,25889,25890],{"align":23813},"程序“穿着容器”隔离运行",[353,25892,25893,25896],{},[399,25894,25895],{"align":23813},"容易“在我电脑上能跑”",[399,25897,25898],{"align":23813},"保证“无论在哪都能跑”",[14,25900,25901,25902],{},"就像快递包裹： ",[359,25903,25904],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[177,25906,25908],{"id":25907},"_15docker-的核心优势","1.5.Docker 的核心优势",[347,25910,25911,25921],{},[350,25912,25913],{},[353,25914,25915,25918],{},[356,25916,25917],{"align":23813},"优势",[356,25919,25920],{"align":23813},"说明",[394,25922,25923,25931,25939,25947,25955],{},[353,25924,25925,25928],{},[399,25926,25927],{"align":23813},"轻量级",[399,25929,25930],{"align":23813},"基于系统内核共享，启动速度快，占资源少",[353,25932,25933,25936],{},[399,25934,25935],{"align":23813},"跨平台",[399,25937,25938],{"align":23813},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[353,25940,25941,25944],{},[399,25942,25943],{"align":23813},"易于迁移部署",[399,25945,25946],{"align":23813},"应用和环境一起封装，不怕依赖不一致",[353,25948,25949,25952],{},[399,25950,25951],{"align":23813},"易于版本控制",[399,25953,25954],{"align":23813},"镜像版本可控，支持回滚",[353,25956,25957,25960],{},[399,25958,25959],{"align":23813},"生态丰富",[399,25961,25962],{"align":23813},"Docker Hub 上有成千上万的现成镜像可用",[161,25964,25965],{},[119,25966,25967],{},"在Linux上可以几乎实现无性能损失。",[14,25969,25970],{},"docker里的发行版和本机共用Linux内核。",[14,25972,25973],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[161,25975,25976],{},[119,25977,25978],{},"可以快速部署在绝大多数Linux发行版",[14,25980,25981],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[161,25983,25984],{},[119,25985,25986],{},"配置环境简单",[14,25988,25989],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25991,25992],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[161,25994,25995],{},[119,25996,25959],{},[14,25998,25999],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,26001,26002],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[177,26004,26006],{"id":26005},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[116,26008,26009,26012,26015,26018],{},[119,26010,26011],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[119,26013,26014],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[119,26016,26017],{},"微服务架构：每个服务一个容器，灵活组合",[119,26019,26020],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":23,"searchDepth":42,"depth":42,"links":26022},[26023,26024,26025,26026,26027,26028],{"id":25734,"depth":50,"text":25735},{"id":25778,"depth":50,"text":25779},{"id":25794,"depth":50,"text":25795},{"id":25859,"depth":50,"text":25860},{"id":25907,"depth":50,"text":25908},{"id":26005,"depth":50,"text":26006},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25726,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26035,"title":26036,"body":26037,"description":23,"extension":132,"meta":26770,"navigation":134,"path":26771,"seo":26772,"stem":26773,"__hash__":26774},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26038,"toc":26765},[26039,26042,26046,26049,26052,26058,26064,26068,26077,26080,26137,26140,26191,26194,26277,26280,26317,26321,26332,26345,26352,26355,26435,26438,26488,26491,26514,26518,26525,26528,26544,26550,26553,26569,26575,26578,26594,26608,26614,26634,26640,26643,26655,26661,26664,26678,26684,26687,26707,26712,26715,26718,26722,26725,26728,26731,26738,26741,26744,26747,26752,26757,26762],[10,26040,26036],{"id":26041},"_2安装docker",[177,26043,26045],{"id":26044},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26047,26048],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26050,26051],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26053,26054],{},[448,26055,26056],{"href":26056,"rel":26057},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23940],[14,26059,26060],{},[448,26061,26062],{"href":26062,"rel":26063},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23940],[22075,26065,26067],{"id":26066},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26069,26070,26071,26076],{},"以下内容根据 ",[448,26072,26075],{"href":26073,"rel":26074},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23940],"官方文档"," 修改而来。",[14,26078,26079],{},"如果你过去安装过 docker，先删掉：",[18,26081,26083],{"className":20,"code":26082,"language":22,"meta":23,"style":23},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[25,26084,26085],{"__ignoreMap":23},[28,26086,26087,26089,26092,26095,26098,26101,26104,26107,26110,26113,26116,26119,26122,26125,26128,26131,26134],{"class":30,"line":31},[28,26088,3102],{"class":207},[28,26090,26091],{"class":211}," pkg ",[28,26093,26094],{"class":207},"in",[28,26096,26097],{"class":64}," docker.io",[28,26099,26100],{"class":64}," docker-doc",[28,26102,26103],{"class":64}," docker-compose",[28,26105,26106],{"class":64}," docker-compose-v2",[28,26108,26109],{"class":64}," podman-docker",[28,26111,26112],{"class":64}," containerd",[28,26114,26115],{"class":64}," runc",[28,26117,26118],{"class":211},"; ",[28,26120,26121],{"class":207},"do",[28,26123,26124],{"class":34}," sudo",[28,26126,26127],{"class":64}," apt-get",[28,26129,26130],{"class":64}," remove",[28,26132,26133],{"class":211}," $pkg; ",[28,26135,26136],{"class":207},"done\n",[14,26138,26139],{},"首先安装依赖和GPG：",[18,26141,26145],{"className":26142,"code":26143,"language":26144,"meta":23,"style":23},"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",[25,26146,26147,26152,26157,26162,26167,26172,26177,26181,26186],{"__ignoreMap":23},[28,26148,26149],{"class":30,"line":31},[28,26150,26151],{},"# Add Docker's official GPG key:\n",[28,26153,26154],{"class":30,"line":42},[28,26155,26156],{},"sudo apt-get update\n",[28,26158,26159],{"class":30,"line":50},[28,26160,26161],{},"sudo apt-get install ca-certificates curl\n",[28,26163,26164],{"class":30,"line":58},[28,26165,26166],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[28,26168,26169],{"class":30,"line":70},[28,26170,26171],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[28,26173,26174],{"class":30,"line":78},[28,26175,26176],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[28,26178,26179],{"class":30,"line":86},[28,26180,2477],{"emptyLinePlaceholder":134},[28,26182,26183],{"class":30,"line":97},[28,26184,26185],{},"# 如果上面这行报错就弄下面这行\n",[28,26187,26188],{"class":30,"line":108},[28,26189,26190],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26192,26193],{},"信任 Docker 的 GPG 公钥并添加仓库：",[18,26195,26197],{"className":20,"code":26196,"language":22,"meta":23,"style":23},"# 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",[25,26198,26199,26204,26210,26227,26260],{"__ignoreMap":23},[28,26200,26201],{"class":30,"line":31},[28,26202,26203],{"class":269},"# Add the repository to Apt sources:\n",[28,26205,26206,26208],{"class":30,"line":42},[28,26207,25196],{"class":38},[28,26209,39],{"class":38},[28,26211,26212,26215,26218,26221,26224],{"class":30,"line":50},[28,26213,26214],{"class":64},"  \"deb [arch=$(",[28,26216,26217],{"class":34},"dpkg",[28,26219,26220],{"class":38}," --print-architecture",[28,26222,26223],{"class":64},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[28,26225,26226],{"class":38},"\\\n",[28,26228,26229,26232,26234,26236,26239,26242,26244,26246,26249,26251,26253,26256,26258],{"class":30,"line":58},[28,26230,26231],{"class":64},"  \"",[28,26233,25170],{"class":211},[28,26235,768],{"class":38},[28,26237,26238],{"class":64}," \u002Fetc\u002Fos-release",[28,26240,26241],{"class":211}," && ",[28,26243,25196],{"class":38},[28,26245,9801],{"class":64},[28,26247,26248],{"class":211},"$VERSION_CODENAME",[28,26250,461],{"class":64},[28,26252,639],{"class":211},[28,26254,26255],{"class":64},"\" stable\"",[28,26257,25180],{"class":207},[28,26259,39],{"class":38},[28,26261,26262,26265,26268,26271,26274],{"class":30,"line":70},[28,26263,26264],{"class":34},"  sudo",[28,26266,26267],{"class":64}," tee",[28,26269,26270],{"class":64}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[28,26272,26273],{"class":207}," >",[28,26275,26276],{"class":64}," \u002Fdev\u002Fnull\n",[14,26278,26279],{},"最后安装",[18,26281,26283],{"className":20,"code":26282,"language":22,"meta":23,"style":23},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[25,26284,26285,26294],{"__ignoreMap":23},[28,26286,26287,26289,26291],{"class":30,"line":31},[28,26288,24652],{"class":34},[28,26290,26127],{"class":64},[28,26292,26293],{"class":64}," update\n",[28,26295,26296,26298,26300,26302,26305,26308,26311,26314],{"class":30,"line":42},[28,26297,24652],{"class":34},[28,26299,26127],{"class":64},[28,26301,23909],{"class":64},[28,26303,26304],{"class":64}," docker-ce",[28,26306,26307],{"class":64}," docker-ce-cli",[28,26309,26310],{"class":64}," containerd.io",[28,26312,26313],{"class":64}," docker-buildx-plugin",[28,26315,26316],{"class":64}," docker-compose-plugin\n",[22075,26318,26320],{"id":26319},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26322,26323,26324,26327,26328,26331],{},"查看自己自己包管理工具版本（dnf是 ",[359,26325,26326],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[359,26329,26330],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[18,26333,26335],{"className":20,"code":26334,"language":22,"meta":23,"style":23},"dnf --version\n",[25,26336,26337],{"__ignoreMap":23},[28,26338,26339,26342],{"class":30,"line":31},[28,26340,26341],{"class":34},"dnf",[28,26343,26344],{"class":38}," --version\n",[14,26346,26070,26347,26351],{},[448,26348,26075],{"href":26349,"rel":26350},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23940]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26353,26354],{},"如果你之前安装过 docker，请先删掉",[18,26356,26358],{"className":20,"code":26357,"language":22,"meta":23,"style":23},"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",[25,26359,26360,26374,26381,26388,26395,26402,26409,26416,26423,26430],{"__ignoreMap":23},[28,26361,26362,26364,26367,26369,26372],{"class":30,"line":31},[28,26363,24652],{"class":34},[28,26365,26366],{"class":64}," dnf",[28,26368,26130],{"class":64},[28,26370,26371],{"class":64}," docker",[28,26373,39],{"class":38},[28,26375,26376,26379],{"class":30,"line":42},[28,26377,26378],{"class":64},"                  docker-client",[28,26380,39],{"class":38},[28,26382,26383,26386],{"class":30,"line":50},[28,26384,26385],{"class":64},"                  docker-client-latest",[28,26387,39],{"class":38},[28,26389,26390,26393],{"class":30,"line":58},[28,26391,26392],{"class":64},"                  docker-common",[28,26394,39],{"class":38},[28,26396,26397,26400],{"class":30,"line":70},[28,26398,26399],{"class":64},"                  docker-latest",[28,26401,39],{"class":38},[28,26403,26404,26407],{"class":30,"line":78},[28,26405,26406],{"class":64},"                  docker-latest-logrotate",[28,26408,39],{"class":38},[28,26410,26411,26414],{"class":30,"line":86},[28,26412,26413],{"class":64},"                  docker-logrotate",[28,26415,39],{"class":38},[28,26417,26418,26421],{"class":30,"line":97},[28,26419,26420],{"class":64},"                  docker-selinux",[28,26422,39],{"class":38},[28,26424,26425,26428],{"class":30,"line":108},[28,26426,26427],{"class":64},"                  docker-engine-selinux",[28,26429,39],{"class":38},[28,26431,26432],{"class":30,"line":1407},[28,26433,26434],{"class":64},"                  docker-engine\n",[14,26436,26437],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[18,26439,26441],{"className":20,"code":26440,"language":22,"meta":23,"style":23},"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",[25,26442,26443,26457,26472],{"__ignoreMap":23},[28,26444,26445,26447,26449,26452,26454],{"class":30,"line":31},[28,26446,24652],{"class":34},[28,26448,26366],{"class":64},[28,26450,26451],{"class":38}," -y",[28,26453,23909],{"class":64},[28,26455,26456],{"class":64}," dnf-plugins-core\n",[28,26458,26459,26461,26463,26466,26469],{"class":30,"line":42},[28,26460,24652],{"class":34},[28,26462,26366],{"class":64},[28,26464,26465],{"class":64}," config-manager",[28,26467,26468],{"class":64}," addrepo",[28,26470,26471],{"class":38}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[28,26473,26474,26476,26479,26482,26485],{"class":30,"line":50},[28,26475,24652],{"class":34},[28,26477,26478],{"class":64}," sed",[28,26480,26481],{"class":38}," -i",[28,26483,26484],{"class":64}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[28,26486,26487],{"class":64}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26489,26490],{},"最后安装：",[18,26492,26494],{"className":20,"code":26493,"language":22,"meta":23,"style":23},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[25,26495,26496],{"__ignoreMap":23},[28,26497,26498,26500,26502,26504,26506,26508,26510,26512],{"class":30,"line":31},[28,26499,24652],{"class":34},[28,26501,26366],{"class":64},[28,26503,23909],{"class":64},[28,26505,26304],{"class":64},[28,26507,26307],{"class":64},[28,26509,26310],{"class":64},[28,26511,26313],{"class":64},[28,26513,26316],{"class":64},[177,26515,26517],{"id":26516},"_22配置环境","2.2.配置环境",[22075,26519,26521,26524],{"id":26520},"_221检查-docker-服务状态",[359,26522,26523],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26526,26527],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[18,26529,26531],{"className":20,"code":26530,"language":22,"meta":23,"style":23},"systemctl status docker\n",[25,26532,26533],{"__ignoreMap":23},[28,26534,26535,26538,26541],{"class":30,"line":31},[28,26536,26537],{"class":34},"systemctl",[28,26539,26540],{"class":64}," status",[28,26542,26543],{"class":64}," docker\n",[22075,26545,26547,26524],{"id":26546},"_222启动-docker-服务",[359,26548,26549],{},"2.2.2.启动 Docker 服务",[14,26551,26552],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[18,26554,26556],{"className":20,"code":26555,"language":22,"meta":23,"style":23},"sudo systemctl start docker\n",[25,26557,26558],{"__ignoreMap":23},[28,26559,26560,26562,26565,26567],{"class":30,"line":31},[28,26561,24652],{"class":34},[28,26563,26564],{"class":64}," systemctl",[28,26566,4261],{"class":64},[28,26568,26543],{"class":64},[22075,26570,26572,26524],{"id":26571},"_223设置-docker-开机自启",[359,26573,26574],{},"2.2.3.设置 Docker 开机自启",[14,26576,26577],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[18,26579,26581],{"className":20,"code":26580,"language":22,"meta":23,"style":23},"sudo systemctl enable docker\n",[25,26582,26583],{"__ignoreMap":23},[28,26584,26585,26587,26589,26592],{"class":30,"line":31},[28,26586,24652],{"class":34},[28,26588,26564],{"class":64},[28,26590,26591],{"class":64}," enable",[28,26593,26543],{"class":64},[22075,26595,26597,13872,26600,13872,26605,26524],{"id":26596},"_224将用户添加到-docker-组",[359,26598,26599],{},"2.2.4.将用户添加到",[359,26601,26602],{},[25,26603,26604],{},"docker",[359,26606,26607],{},"组",[14,26609,26610,26611,26613],{},"使用以下命令将当前用户添加到 ",[25,26612,26604],{}," 组：",[18,26615,26617],{"className":20,"code":26616,"language":22,"meta":23,"style":23},"sudo usermod -aG docker $USER\n",[25,26618,26619],{"__ignoreMap":23},[28,26620,26621,26623,26626,26629,26631],{"class":30,"line":31},[28,26622,24652],{"class":34},[28,26624,26625],{"class":64}," usermod",[28,26627,26628],{"class":38}," -aG",[28,26630,26371],{"class":64},[28,26632,26633],{"class":211}," $USER\n",[22075,26635,26637,26524],{"id":26636},"_225退出并重新登录",[359,26638,26639],{},"2.2.5.退出并重新登录",[14,26641,26642],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[18,26644,26646],{"className":20,"code":26645,"language":22,"meta":23,"style":23},"newgrp docker\n",[25,26647,26648],{"__ignoreMap":23},[28,26649,26650,26653],{"class":30,"line":31},[28,26651,26652],{"class":34},"newgrp",[28,26654,26543],{"class":64},[22075,26656,26658,26524],{"id":26657},"_226重新启动-docker-服务如果需要",[359,26659,26660],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26662,26663],{},"确保 Docker 服务正在运行，可以使用以下命令：",[18,26665,26666],{"className":20,"code":26555,"language":22,"meta":23,"style":23},[25,26667,26668],{"__ignoreMap":23},[28,26669,26670,26672,26674,26676],{"class":30,"line":31},[28,26671,24652],{"class":34},[28,26673,26564],{"class":64},[28,26675,4261],{"class":64},[28,26677,26543],{"class":64},[22075,26679,26681,26524],{"id":26680},"_227重启电脑后检查-docker-服务状态",[359,26682,26683],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26685,26686],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[18,26688,26690],{"className":20,"code":26689,"language":22,"meta":23,"style":23},"sudo reboot\nsystemctl status docker\n",[25,26691,26692,26699],{"__ignoreMap":23},[28,26693,26694,26696],{"class":30,"line":31},[28,26695,24652],{"class":34},[28,26697,26698],{"class":64}," reboot\n",[28,26700,26701,26703,26705],{"class":30,"line":42},[28,26702,26537],{"class":34},[28,26704,26540],{"class":64},[28,26706,26543],{"class":64},[14,26708,26709],{},[1540,26710],{"alt":23,"src":26711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26713,26714],{},"第三行显示enabled说明开机自启动成功",[14,26716,26717],{},"按q退出",[177,26719,26721],{"id":26720},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26723,26724],{},"优先使用linux来使用docker是比较好的",[14,26726,26727],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26729,26730],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26732,26733,26734],{},"官方下载安装:",[448,26735,26736],{"href":26736,"rel":26737},"https:\u002F\u002Fwww.docker.com\u002F",[23940],[14,26739,26740],{},"Windows的Docker显卡直通与USB直通:",[14,26742,26743],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26745,26746],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26748,26749],{},[1540,26750],{"alt":23,"src":26751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26753,26754],{},[1540,26755],{"alt":23,"src":26756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26758,26759],{},[1540,26760],{"alt":23,"src":26761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[126,26763,26764],{},"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":23,"searchDepth":42,"depth":42,"links":26766},[26767,26768,26769],{"id":26044,"depth":50,"text":26045},{"id":26516,"depth":50,"text":26517},{"id":26720,"depth":50,"text":26721},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26036,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26776,"title":26777,"body":26778,"description":26785,"extension":132,"meta":27478,"navigation":134,"path":27479,"seo":27480,"stem":27481,"__hash__":27482},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26779,"toc":27472},[26780,26783,26786,26790,26795,26800,26803,26831,26836,26845,26848,26853,26857,26864,26869,26875,26879,26882,26886,26891,26983,26988,27006,27011,27032,27037,27053,27057,27062,27091,27096,27142,27147,27191,27199,27216,27221,27237,27242,27256,27259,27262,27265,27268,27297,27300,27305,27309,27312,27315,27321,27324,27327,27330,27392,27399,27404,27407,27425,27429,27432,27449,27452,27455,27469],[10,26781,26777],{"id":26782},"_3docker直通",[14,26784,26785],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[177,26787,26789],{"id":26788},"_31usb直通","3.1.USB直通",[14,26791,26792],{},[1540,26793],{"alt":23,"src":26794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[161,26796,26797],{},[119,26798,26799],{},"方法一(不是很推荐新手)：",[14,26801,26802],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[18,26804,26806],{"className":20,"code":26805,"language":22,"meta":23,"style":23},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[25,26807,26808,26816,26821],{"__ignoreMap":23},[28,26809,26810,26813],{"class":30,"line":31},[28,26811,26812],{"class":34},"ls",[28,26814,26815],{"class":64}," \u002Fdev\n",[28,26817,26818],{"class":30,"line":42},[28,26819,26820],{"class":269},"#例如\n",[28,26822,26823,26826,26828],{"class":30,"line":50},[28,26824,26825],{"class":211},"--device",[28,26827,257],{"class":207},[28,26829,26830],{"class":64},"\u002Fdev\u002Ftty_USB0\n",[161,26832,26833],{"start":42},[119,26834,26835],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[18,26837,26839],{"className":20,"code":26838,"language":22,"meta":23,"style":23},"--privileged\n",[25,26840,26841],{"__ignoreMap":23},[28,26842,26843],{"class":30,"line":31},[28,26844,26838],{"class":34},[14,26846,26847],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26849,26850],{},[1540,26851],{"alt":23,"src":26852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[177,26854,26856],{"id":26855},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26858,26859,26860,26863],{},"NVIDIA Container Toolkit使用户 ",[359,26861,26862],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26865,26866],{},[1540,26867],{"alt":23,"src":26868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26870,26871],{},[448,26872,26873],{"href":26873,"rel":26874},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23940],[22075,26876,26878],{"id":26877},"_321安装","3.2.1.安装",[14,26880,26881],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22987,26883,26885],{"id":26884},"_3211ubuntu","3.2.1.1.Ubuntu",[161,26887,26888],{},[119,26889,26890],{},"配置存储库 并更新",[18,26892,26894],{"className":20,"code":26893,"language":22,"meta":23,"style":23},"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",[25,26895,26896,26925,26945,26957,26969,26975],{"__ignoreMap":23},[28,26897,26898,26901,26904,26907,26909,26911,26914,26917,26920,26923],{"class":30,"line":31},[28,26899,26900],{"class":34},"curl",[28,26902,26903],{"class":38}," -fsSL",[28,26905,26906],{"class":64}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[28,26908,25180],{"class":207},[28,26910,26124],{"class":34},[28,26912,26913],{"class":64}," gpg",[28,26915,26916],{"class":38}," --dearmor",[28,26918,26919],{"class":38}," -o",[28,26921,26922],{"class":64}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[28,26924,39],{"class":38},[28,26926,26927,26930,26932,26935,26938,26941,26943],{"class":30,"line":42},[28,26928,26929],{"class":211},"  && ",[28,26931,26900],{"class":34},[28,26933,26934],{"class":38}," -s",[28,26936,26937],{"class":38}," -L",[28,26939,26940],{"class":64}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[28,26942,25180],{"class":207},[28,26944,39],{"class":38},[28,26946,26947,26950,26953,26955],{"class":30,"line":50},[28,26948,26949],{"class":34},"    sed",[28,26951,26952],{"class":64}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[28,26954,25180],{"class":207},[28,26956,39],{"class":38},[28,26958,26959,26962,26964,26967],{"class":30,"line":58},[28,26960,26961],{"class":34},"    sudo",[28,26963,26267],{"class":64},[28,26965,26966],{"class":64}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[28,26968,39],{"class":38},[28,26970,26971,26973],{"class":30,"line":70},[28,26972,26929],{"class":211},[28,26974,26226],{"class":38},[28,26976,26977,26979,26981],{"class":30,"line":78},[28,26978,26961],{"class":34},[28,26980,26127],{"class":64},[28,26982,26293],{"class":64},[161,26984,26985],{"start":42},[119,26986,26987],{},"安装nvidia-docker2",[18,26989,26991],{"className":20,"code":26990,"language":22,"meta":23,"style":23},"sudo apt-get install -y nvidia-docker2\n",[25,26992,26993],{"__ignoreMap":23},[28,26994,26995,26997,26999,27001,27003],{"class":30,"line":31},[28,26996,24652],{"class":34},[28,26998,26127],{"class":64},[28,27000,23909],{"class":64},[28,27002,26451],{"class":38},[28,27004,27005],{"class":64}," nvidia-docker2\n",[161,27007,27008],{"start":50},[119,27009,27010],{},"使用nvidia-ctk命令配置container runtime",[18,27012,27014],{"className":20,"code":27013,"language":22,"meta":23,"style":23},"sudo nvidia-ctk runtime configure --runtime=docker\n",[25,27015,27016],{"__ignoreMap":23},[28,27017,27018,27020,27023,27026,27029],{"class":30,"line":31},[28,27019,24652],{"class":34},[28,27021,27022],{"class":64}," nvidia-ctk",[28,27024,27025],{"class":64}," runtime",[28,27027,27028],{"class":64}," configure",[28,27030,27031],{"class":38}," --runtime=docker\n",[161,27033,27034],{"start":58},[119,27035,27036],{},"重启docker服务:",[18,27038,27040],{"className":20,"code":27039,"language":22,"meta":23,"style":23},"sudo systemctl restart docker\n",[25,27041,27042],{"__ignoreMap":23},[28,27043,27044,27046,27048,27051],{"class":30,"line":31},[28,27045,24652],{"class":34},[28,27047,26564],{"class":64},[28,27049,27050],{"class":64}," restart",[28,27052,26543],{"class":64},[22987,27054,27056],{"id":27055},"_3212fedora","3.2.1.2.Fedora",[161,27058,27059],{},[119,27060,27061],{},"配置存储库",[18,27063,27065],{"className":20,"code":27064,"language":22,"meta":23,"style":23},"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",[25,27066,27067,27082],{"__ignoreMap":23},[28,27068,27069,27071,27073,27075,27078,27080],{"class":30,"line":31},[28,27070,26900],{"class":34},[28,27072,26934],{"class":38},[28,27074,26937],{"class":38},[28,27076,27077],{"class":64}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[28,27079,25180],{"class":207},[28,27081,39],{"class":38},[28,27083,27084,27086,27088],{"class":30,"line":42},[28,27085,24652],{"class":34},[28,27087,26267],{"class":64},[28,27089,27090],{"class":64}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[161,27092,27093],{"start":42},[119,27094,27095],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[18,27097,27099],{"className":20,"code":27098,"language":22,"meta":23,"style":23},"# 如果是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",[25,27100,27101,27106,27120,27124,27129],{"__ignoreMap":23},[28,27102,27103],{"class":30,"line":31},[28,27104,27105],{"class":269},"# 如果是RHEL或者Rocky（DNF4）\n",[28,27107,27108,27110,27112,27114,27117],{"class":30,"line":42},[28,27109,24652],{"class":34},[28,27111,26366],{"class":64},[28,27113,26465],{"class":64},[28,27115,27116],{"class":38}," --add-repo",[28,27118,27119],{"class":64}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[28,27121,27122],{"class":30,"line":50},[28,27123,2477],{"emptyLinePlaceholder":134},[28,27125,27126],{"class":30,"line":58},[28,27127,27128],{"class":269},"# 如果是Feodra41+（DNF5）\n",[28,27130,27131,27133,27135,27137,27139],{"class":30,"line":70},[28,27132,24652],{"class":34},[28,27134,26366],{"class":64},[28,27136,26465],{"class":64},[28,27138,26468],{"class":64},[28,27140,27141],{"class":38}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[161,27143,27144],{"start":50},[119,27145,27146],{},"安装NVIDIA Container Toolki包",[18,27148,27150],{"className":20,"code":27149,"language":22,"meta":23,"style":23},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[25,27151,27152,27157,27170,27174,27179],{"__ignoreMap":23},[28,27153,27154],{"class":30,"line":31},[28,27155,27156],{"class":269},"# 如果是RHEL或者Rocky\n",[28,27158,27159,27161,27163,27165,27167],{"class":30,"line":42},[28,27160,24652],{"class":34},[28,27162,26366],{"class":64},[28,27164,23909],{"class":64},[28,27166,26451],{"class":38},[28,27168,27169],{"class":64}," nvidia-container-toolkit\n",[28,27171,27172],{"class":30,"line":50},[28,27173,2477],{"emptyLinePlaceholder":134},[28,27175,27176],{"class":30,"line":58},[28,27177,27178],{"class":269},"# 如果是Fedora\n",[28,27180,27181,27183,27185,27187,27189],{"class":30,"line":70},[28,27182,24652],{"class":34},[28,27184,26366],{"class":64},[28,27186,23909],{"class":64},[28,27188,26451],{"class":38},[28,27190,27169],{"class":64},[161,27192,27193],{"start":58},[119,27194,27195,27196,27198],{},"安装nvidia-docker2 ： 在Fedora上使用",[25,27197,26341],{},"进行安装",[18,27200,27202],{"className":20,"code":27201,"language":22,"meta":23,"style":23},"sudo dnf install -y nvidia-docker2\n",[25,27203,27204],{"__ignoreMap":23},[28,27205,27206,27208,27210,27212,27214],{"class":30,"line":31},[28,27207,24652],{"class":34},[28,27209,26366],{"class":64},[28,27211,23909],{"class":64},[28,27213,26451],{"class":38},[28,27215,27005],{"class":64},[161,27217,27218],{"start":70},[119,27219,27220],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[18,27222,27223],{"className":20,"code":27013,"language":22,"meta":23,"style":23},[25,27224,27225],{"__ignoreMap":23},[28,27226,27227,27229,27231,27233,27235],{"class":30,"line":31},[28,27228,24652],{"class":34},[28,27230,27022],{"class":64},[28,27232,27025],{"class":64},[28,27234,27028],{"class":64},[28,27236,27031],{"class":38},[161,27238,27239],{"start":78},[119,27240,27241],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[18,27243,27244],{"className":20,"code":27039,"language":22,"meta":23,"style":23},[25,27245,27246],{"__ignoreMap":23},[28,27247,27248,27250,27252,27254],{"class":30,"line":31},[28,27249,24652],{"class":34},[28,27251,26564],{"class":64},[28,27253,27050],{"class":64},[28,27255,26543],{"class":64},[14,27257,27258],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27260,27261],{},"方法：",[14,27263,27264],{},"1️⃣nvidia-smi",[14,27266,27267],{},"2️⃣运行nvidia cuda 容器进行测试",[18,27269,27271],{"className":20,"code":27270,"language":22,"meta":23,"style":23},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[25,27272,27273],{"__ignoreMap":23},[28,27274,27275,27277,27279,27282,27285,27288,27291,27294],{"class":30,"line":31},[28,27276,24652],{"class":34},[28,27278,26371],{"class":64},[28,27280,27281],{"class":64}," run",[28,27283,27284],{"class":38}," --rm",[28,27286,27287],{"class":38}," --gpus",[28,27289,27290],{"class":64}," all",[28,27292,27293],{"class":64}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[28,27295,27296],{"class":64}," nvidia-smi\n",[14,27298,27299],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27301,27302],{},[1540,27303],{"alt":23,"src":27304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[177,27306,27308],{"id":27307},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27310,27311],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27313,27314],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27316,27317],{},[448,27318,27319],{"href":27319,"rel":27320},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23940],[14,27322,27323],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27325,27326],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27328,27329],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[347,27331,27332,27348],{},[350,27333,27334],{},[353,27335,27336,27339,27342,27345],{},[356,27337,27338],{"align":23813},"镜像类型",[356,27340,27341],{"align":23813},"适用场景",[356,27343,27344],{"align":23813},"示例标签",[356,27346,27347],{"align":23813},"大小",[394,27349,27350,27364,27378],{},[353,27351,27352,27355,27358,27361],{},[399,27353,27354],{"align":23813},"base",[399,27356,27357],{"align":23813},"仅需 CUDA 运行时库",[399,27359,27360],{"align":23813},"12.4.0-base-ubuntu22.04",[399,27362,27363],{"align":23813},"~240MB",[353,27365,27366,27369,27372,27375],{},[399,27367,27368],{"align":23813},"runtime",[399,27370,27371],{"align":23813},"部署编译后的应用（含数学库）",[399,27373,27374],{"align":23813},"12.4.0-runtime-ubuntu22.04",[399,27376,27377],{"align":23813},"~2GB",[353,27379,27380,27383,27386,27389],{},[399,27381,27382],{"align":23813},"devel",[399,27384,27385],{"align":23813},"开发环境（含编译工具）",[399,27387,27388],{"align":23813},"12.4.0-devel-ubuntu22.04",[399,27390,27391],{"align":23813},"~3GB",[14,27393,27394,27395,27398],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[25,27396,27397],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27400,27401],{},[1540,27402],{"alt":23,"src":27403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27405,27406],{},"在dockerfile里就可以开头这么写：",[18,27408,27410],{"className":20,"code":27409,"language":22,"meta":23,"style":23},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[25,27411,27412,27417],{"__ignoreMap":23},[28,27413,27414],{"class":30,"line":31},[28,27415,27416],{"class":269},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[28,27418,27419,27422],{"class":30,"line":42},[28,27420,27421],{"class":34},"FROM",[28,27423,27424],{"class":64}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[177,27426,27428],{"id":27427},"_34配置以太网","3.4.配置以太网",[14,27430,27431],{},"指定网络模式",[18,27433,27435],{"className":20,"code":27434,"language":22,"meta":23,"style":23},"--net=host \\\n",[25,27436,27437],{"__ignoreMap":23},[28,27438,27439,27442,27444,27447],{"class":30,"line":31},[28,27440,27441],{"class":211},"--net",[28,27443,257],{"class":207},[28,27445,27446],{"class":64},"host",[28,27448,39],{"class":34},[14,27450,27451],{},"启动参数里加上这行即可。具体在下方",[14,27453,27454],{},"--net选项：指定网络模式，该选项有以下参数可选：",[116,27456,27457,27460,27463,27466],{},[119,27458,27459],{},"--net=bridge:默认选项，表示连接到默认的网桥",[119,27461,27462],{},"--net=host:容器使用宿主机的网络",[119,27464,27465],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[119,27467,27468],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[126,27470,27471],{},"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":23,"searchDepth":42,"depth":42,"links":27473},[27474,27475,27476,27477],{"id":26788,"depth":50,"text":26789},{"id":26855,"depth":50,"text":26856},{"id":27307,"depth":50,"text":27308},{"id":27427,"depth":50,"text":27428},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26777,"description":26785},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27484,"title":27485,"body":27486,"description":27493,"extension":132,"meta":27499,"navigation":134,"path":27500,"seo":27501,"stem":27502,"__hash__":27503},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27487,"toc":27497},[27488,27491,27494],[10,27489,27485],{"id":27490},"_4dockerhub换源",[14,27492,27493],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27495,27496],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":23,"searchDepth":42,"depth":42,"links":27498},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27485,"description":27493},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27505,"title":27506,"body":27507,"description":23,"extension":132,"meta":28519,"navigation":134,"path":28520,"seo":28521,"stem":28522,"__hash__":28523},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27508,"toc":28514},[27509,27512,27516,27522,27526,27529,27869,27872,27875,27878,27883,27888,27891,27894,27897,27900,27919,27922,27933,27939,28121,28131,28147,28410,28412,28437,28452,28461,28511],[10,27510,27506],{"id":27511},"_5docker命令学习",[177,27513,27515],{"id":27514},"_51参考文档","5.1.参考文档",[14,27517,27518],{},[448,27519,27520],{"href":27520,"rel":27521},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23940],[177,27523,27525],{"id":27524},"_52常用命令","5.2.常用命令",[14,27527,27528],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[347,27530,27531,27544],{},[350,27532,27533],{},[353,27534,27535,27538,27541],{},[356,27536,27537],{"align":23813},"命令",[356,27539,27540],{"align":23813},"描述",[356,27542,27543],{"align":23813},"示例",[394,27545,27546,27557,27568,27579,27590,27601,27612,27623,27633,27644,27655,27666,27676,27687,27698,27709,27719,27729,27739,27749,27760,27771,27782,27793,27804,27815,27825,27836,27847,27858],{},[353,27547,27548,27551,27554],{},[399,27549,27550],{"align":23813},"docker run",[399,27552,27553],{"align":23813},"创建并启动一个新的容器。",[399,27555,27556],{"align":23813},"docker run -it ubuntu bash",[353,27558,27559,27562,27565],{},[399,27560,27561],{"align":23813},"docker build",[399,27563,27564],{"align":23813},"通过指定的 Dockerfile 创建一个新的镜像。",[399,27566,27567],{"align":23813},"docker build -t myimage .",[353,27569,27570,27573,27576],{},[399,27571,27572],{"align":23813},"docker pull",[399,27574,27575],{"align":23813},"从 Docker 仓库拉取镜像。",[399,27577,27578],{"align":23813},"docker pull ubuntu",[353,27580,27581,27584,27587],{},[399,27582,27583],{"align":23813},"docker push",[399,27585,27586],{"align":23813},"将本地镜像推送到 Docker 仓库。",[399,27588,27589],{"align":23813},"docker push myimage",[353,27591,27592,27595,27598],{},[399,27593,27594],{"align":23813},"docker stop",[399,27596,27597],{"align":23813},"停止一个正在运行的容器。",[399,27599,27600],{"align":23813},"docker stop container_id",[353,27602,27603,27606,27609],{},[399,27604,27605],{"align":23813},"docker start",[399,27607,27608],{"align":23813},"启动一个已经存在的容器。",[399,27610,27611],{"align":23813},"docker start container_id",[353,27613,27614,27617,27620],{},[399,27615,27616],{"align":23813},"docker restart",[399,27618,27619],{"align":23813},"重新启动容器。",[399,27621,27622],{"align":23813},"docker restart container_id",[353,27624,27625,27628,27631],{},[399,27626,27627],{"align":23813},"docker ps",[399,27629,27630],{"align":23813},"列出当前正在运行的容器。",[399,27632,27627],{"align":23813},[353,27634,27635,27638,27641],{},[399,27636,27637],{"align":23813},"docker rm",[399,27639,27640],{"align":23813},"删除一个或多个停止的容器。",[399,27642,27643],{"align":23813},"docker rm container_id",[353,27645,27646,27649,27652],{},[399,27647,27648],{"align":23813},"docker exec",[399,27650,27651],{"align":23813},"在一个正在运行的容器中执行命令。",[399,27653,27654],{"align":23813},"docker exec -it container_id bash",[353,27656,27657,27660,27663],{},[399,27658,27659],{"align":23813},"docker logs",[399,27661,27662],{"align":23813},"查看容器的日志输出。",[399,27664,27665],{"align":23813},"docker logs container_id",[353,27667,27668,27671,27674],{},[399,27669,27670],{"align":23813},"docker images",[399,27672,27673],{"align":23813},"列出本地所有镜像。",[399,27675,27670],{"align":23813},[353,27677,27678,27681,27684],{},[399,27679,27680],{"align":23813},"docker rmi",[399,27682,27683],{"align":23813},"删除一个或多个镜像。",[399,27685,27686],{"align":23813},"docker rmi myimage",[353,27688,27689,27692,27695],{},[399,27690,27691],{"align":23813},"docker network",[399,27693,27694],{"align":23813},"管理 Docker 网络。",[399,27696,27697],{"align":23813},"docker network ls",[353,27699,27700,27703,27706],{},[399,27701,27702],{"align":23813},"docker volume",[399,27704,27705],{"align":23813},"管理 Docker 数据卷。",[399,27707,27708],{"align":23813},"docker volume ls",[353,27710,27711,27714,27717],{},[399,27712,27713],{"align":23813},"docker-compose up",[399,27715,27716],{"align":23813},"启动 docker-compose.yml 中定义的所有服务。",[399,27718,27713],{"align":23813},[353,27720,27721,27724,27727],{},[399,27722,27723],{"align":23813},"docker-compose down",[399,27725,27726],{"align":23813},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[399,27728,27723],{"align":23813},[353,27730,27731,27734,27737],{},[399,27732,27733],{"align":23813},"docker info",[399,27735,27736],{"align":23813},"显示 Docker 系统的详细信息。",[399,27738,27733],{"align":23813},[353,27740,27741,27744,27747],{},[399,27742,27743],{"align":23813},"docker stats",[399,27745,27746],{"align":23813},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[399,27748,27743],{"align":23813},[353,27750,27751,27754,27757],{},[399,27752,27753],{"align":23813},"docker inspect",[399,27755,27756],{"align":23813},"查看容器或镜像的详细信息（JSON 格式）。",[399,27758,27759],{"align":23813},"docker inspect container_id",[353,27761,27762,27765,27768],{},[399,27763,27764],{"align":23813},"docker save",[399,27766,27767],{"align":23813},"将一个镜像保存为 tar 文件。",[399,27769,27770],{"align":23813},"docker save -o myimage.tar myimage",[353,27772,27773,27776,27779],{},[399,27774,27775],{"align":23813},"docker load",[399,27777,27778],{"align":23813},"从 tar 文件中加载镜像。",[399,27780,27781],{"align":23813},"docker load -i myimage.tar",[353,27783,27784,27787,27790],{},[399,27785,27786],{"align":23813},"docker tag",[399,27788,27789],{"align":23813},"为镜像添加标签（tag）。",[399,27791,27792],{"align":23813},"docker tag myimage myimage:v1",[353,27794,27795,27798,27801],{},[399,27796,27797],{"align":23813},"docker buildx build",[399,27799,27800],{"align":23813},"使用 Buildx 构建多架构镜像。",[399,27802,27803],{"align":23813},"docker buildx build -t myimage .",[353,27805,27806,27809,27812],{},[399,27807,27808],{"align":23813},"docker buildx create",[399,27810,27811],{"align":23813},"创建一个新的 Buildx 构建实例。",[399,27813,27814],{"align":23813},"docker buildx create –use",[353,27816,27817,27820,27823],{},[399,27818,27819],{"align":23813},"docker buildx ls",[399,27821,27822],{"align":23813},"列出所有可用的 Buildx 构建实例。",[399,27824,27819],{"align":23813},[353,27826,27827,27830,27833],{},[399,27828,27829],{"align":23813},"docker buildx use",[399,27831,27832],{"align":23813},"设置当前的 Buildx 构建实例。",[399,27834,27835],{"align":23813},"docker buildx use mybuilder",[353,27837,27838,27841,27844],{},[399,27839,27840],{"align":23813},"docker buildx bake",[399,27842,27843],{"align":23813},"使用 Bake 文件批量构建镜像。",[399,27845,27846],{"align":23813},"docker buildx bake -f bake.hcl",[353,27848,27849,27852,27855],{},[399,27850,27851],{"align":23813},"docker buildx build –push",[399,27853,27854],{"align":23813},"构建镜像并推送到镜像仓库。",[399,27856,27857],{"align":23813},"docker buildx build –push -t myimage .",[353,27859,27860,27863,27866],{},[399,27861,27862],{"align":23813},"docker buildx build –platform",[399,27864,27865],{"align":23813},"构建镜像并为多个平台生成支持。",[399,27867,27868],{"align":23813},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27870,27871],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27873,27874],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27876,27877],{},"docker images 可以查看已经下载的镜像",[14,27879,27880],{},[1540,27881],{"alt":23,"src":27882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27884,27885],{},[359,27886,27887],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27889,27890],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27892,27893],{},"docker container logs 查看容器日志",[14,27895,27896],{},"docker top 查看容器里的进程",[14,27898,27899],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[18,27901,27903],{"className":20,"code":27902,"language":22,"meta":23,"style":23},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[25,27904,27905],{"__ignoreMap":23},[28,27906,27907,27910,27913,27916],{"class":30,"line":31},[28,27908,27909],{"class":34},"如：docker",[28,27911,27912],{"class":64}," cp",[28,27914,27915],{"class":64}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[28,27917,27918],{"class":64}," \u002Fmydata\u002Fnginx\n",[14,27920,27921],{},"docker run时在启动容器的时候会有几个常用的选项：",[116,27923,27924,27927,27930],{},[119,27925,27926],{},"-d选项：表示后台运行",[119,27928,27929],{},"-P选项：随机端口映射",[119,27931,27932],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[177,27934,27936],{"id":27935},"_53run命令的参数非常重要",[359,27937,27938],{},"5.3.run命令的参数（非常重要）",[347,27940,27941,27954],{},[350,27942,27943],{},[353,27944,27945,27948,27951],{},[356,27946,27947],{"align":23813},"参数\u002F配置",[356,27949,27950],{"align":23813},"功能说明",[356,27952,27953],{"align":23813},"重要性与参考依据",[394,27955,27956,27967,27978,27989,28000,28011,28022,28033,28044,28055,28066,28077,28088,28099,28110],{},[353,27957,27958,27961,27964],{},[399,27959,27960],{"align":23813},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[399,27962,27963],{"align":23813},"指定容器名称，便于后续管理",[399,27965,27966],{"align":23813},"替代随机生成的容器名。",[353,27968,27969,27972,27975],{},[399,27970,27971],{"align":23813},"–gpus all",[399,27973,27974],{"align":23813},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[399,27976,27977],{"align":23813},"用于CUDA加速等GPU依赖任务。",[353,27979,27980,27983,27986],{},[399,27981,27982],{"align":23813},"-e NVIDIA_DRIVER_CAPABILITIES=all",[399,27984,27985],{"align":23813},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[399,27987,27988],{"align":23813},"确保容器内GPU功能完整67。",[353,27990,27991,27994,27997],{},[399,27992,27993],{"align":23813},"-dit",[399,27995,27996],{"align":23813},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[399,27998,27999],{"align":23813},"允许容器在后台运行并支持交互操作。",[353,28001,28002,28005,28008],{},[399,28003,28004],{"align":23813},"–privileged",[399,28006,28007],{"align":23813},"赋予容器完全主机权限（可访问设备、内核模块等）",[399,28009,28010],{"align":23813},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[353,28012,28013,28016,28019],{},[399,28014,28015],{"align":23813},"–net=host",[399,28017,28018],{"align":23813},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[399,28020,28021],{"align":23813},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[353,28023,28024,28027,28030],{},[399,28025,28026],{"align":23813},"–group-add audio–group-add video–group-add dialout",[399,28028,28029],{"align":23813},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[399,28031,28032],{"align":23813},"避免权限问题（如避免无法调用摄像头、麦克风）。",[353,28034,28035,28038,28041],{},[399,28036,28037],{"align":23813},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[399,28039,28040],{"align":23813},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[399,28042,28043],{"align":23813},"支持容器内运行图形界面应用（如OpenCV可视化）。",[353,28045,28046,28049,28052],{},[399,28047,28048],{"align":23813},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[399,28050,28051],{"align":23813},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[399,28053,28054],{"align":23813},"实现容器内图形显示。",[353,28056,28057,28060,28063],{},[399,28058,28059],{"align":23813},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[399,28061,28062],{"align":23813},"挂载X11认证文件（只读）",[399,28064,28065],{"align":23813},"确保容器有权连接宿主机显示服务。",[353,28067,28068,28071,28074],{},[399,28069,28070],{"align":23813},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[399,28072,28073],{"align":23813},"挂载Wayland显示协议相关目录",[399,28075,28076],{"align":23813},"支持Wayland协议的图形显示。",[353,28078,28079,28082,28085],{},[399,28080,28081],{"align":23813},"–ulimit nofile=1024:524288",[399,28083,28084],{"align":23813},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[399,28086,28087],{"align":23813},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[353,28089,28090,28093,28096],{},[399,28091,28092],{"align":23813},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[399,28094,28095],{"align":23813},"挂载宿主机用户目录到容器内同名路径",[399,28097,28098],{"align":23813},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[353,28100,28101,28104,28107],{},[399,28102,28103],{"align":23813},"-w \u002Fhome\u002Ftungchiahui",[399,28105,28106],{"align":23813},"设置容器启动后的默认工作目录",[399,28108,28109],{"align":23813},"直接进入项目路径，方便执行命令2324。",[353,28111,28112,28115,28118],{},[399,28113,28114],{"align":23813},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[399,28116,28117],{"align":23813},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[399,28119,28120],{"align":23813},"提供预配置的深度学习与机器人开发环境。",[14,28122,28123,28124,28126,28127,28130],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[25,28125,24652],{},"加不加",[25,28128,28129],{},"sudo -E","都无所谓。",[14,28132,28133,28134,28136,28137,28139,28140,28143,28144,28146],{},"用户已经被加到docker组了，不用",[25,28135,24652],{},"也行跑，其次，",[25,28138,24652],{},"运行的话，你的",[25,28141,28142],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[25,28145,28142],{},"更不可能变了。",[18,28148,28150],{"className":20,"code":28149,"language":22,"meta":23,"style":23},"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",[25,28151,28152,28165,28175,28185,28197,28204,28211,28218,28228,28237,28246,28260,28272,28284,28293,28303,28312,28327,28360,28387,28398,28405],{"__ignoreMap":23},[28,28153,28154,28156,28158,28160,28163],{"class":30,"line":31},[28,28155,24652],{"class":34},[28,28157,26371],{"class":64},[28,28159,27281],{"class":64},[28,28161,28162],{"class":38}," --name=ros_opencv_cuda",[28,28164,39],{"class":38},[28,28166,28167,28170,28173],{"class":30,"line":42},[28,28168,28169],{"class":211},"--gpus ",[28,28171,28172],{"class":64},"all",[28,28174,39],{"class":38},[28,28176,28177,28180,28183],{"class":30,"line":50},[28,28178,28179],{"class":211},"-e ",[28,28181,28182],{"class":64},"NVIDIA_DRIVER_CAPABILITIES=all",[28,28184,39],{"class":38},[28,28186,28187,28189,28192,28195],{"class":30,"line":58},[28,28188,28179],{"class":211},[28,28190,28191],{"class":64},"DISPLAY=",[28,28193,28194],{"class":211},"$DISPLAY ",[28,28196,26226],{"class":38},[28,28198,28199,28202],{"class":30,"line":70},[28,28200,28201],{"class":211},"-dit ",[28,28203,26226],{"class":38},[28,28205,28206,28209],{"class":30,"line":78},[28,28207,28208],{"class":211},"--privileged ",[28,28210,26226],{"class":38},[28,28212,28213,28216],{"class":30,"line":86},[28,28214,28215],{"class":211},"--net=host ",[28,28217,26226],{"class":38},[28,28219,28220,28223,28226],{"class":30,"line":97},[28,28221,28222],{"class":211},"--group-add ",[28,28224,28225],{"class":64},"audio",[28,28227,39],{"class":38},[28,28229,28230,28232,28235],{"class":30,"line":108},[28,28231,28222],{"class":211},[28,28233,28234],{"class":64},"video",[28,28236,39],{"class":38},[28,28238,28239,28241,28244],{"class":30,"line":1407},[28,28240,28222],{"class":211},[28,28242,28243],{"class":64},"dialout",[28,28245,39],{"class":38},[28,28247,28248,28250,28253,28255,28258],{"class":30,"line":1690},[28,28249,28179],{"class":211},[28,28251,28252],{"class":64},"XAUTHORITY=",[28,28254,28142],{"class":211},[28,28256,28257],{"class":64},"\u002F.Xauthority",[28,28259,39],{"class":38},[28,28261,28262,28264,28267,28270],{"class":30,"line":1695},[28,28263,28179],{"class":211},[28,28265,28266],{"class":64},"WAYLAND_DISPLAY=",[28,28268,28269],{"class":211},"$WAYLAND_DISPLAY ",[28,28271,26226],{"class":38},[28,28273,28274,28276,28279,28282],{"class":30,"line":1701},[28,28275,28179],{"class":211},[28,28277,28278],{"class":64},"XDG_RUNTIME_DIR=",[28,28280,28281],{"class":211},"$XDG_RUNTIME_DIR ",[28,28283,26226],{"class":38},[28,28285,28286,28288,28291],{"class":30,"line":1706},[28,28287,28179],{"class":211},[28,28289,28290],{"class":64},"QT_QPA_PLATFORM=xcb",[28,28292,39],{"class":38},[28,28294,28295,28298,28301],{"class":30,"line":1720},[28,28296,28297],{"class":211},"-v ",[28,28299,28300],{"class":64},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[28,28302,39],{"class":38},[28,28304,28305,28307,28310],{"class":30,"line":1725},[28,28306,28297],{"class":211},[28,28308,28309],{"class":64},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[28,28311,39],{"class":38},[28,28313,28314,28317,28320,28322,28325],{"class":30,"line":1731},[28,28315,28316],{"class":211},"-v $HOME",[28,28318,28319],{"class":64},"\u002F.Xauthority:",[28,28321,28142],{"class":211},[28,28323,28324],{"class":64},"\u002F.Xauthority:ro",[28,28326,39],{"class":38},[28,28328,28329,28331,28334,28336,28339,28342,28344,28347,28349,28351,28353,28355,28358],{"class":30,"line":1752},[28,28330,28297],{"class":211},[28,28332,28333],{"class":64},"\u002Frun\u002Fuser\u002F",[28,28335,25170],{"class":211},[28,28337,28338],{"class":34},"id",[28,28340,28341],{"class":38}," -u",[28,28343,639],{"class":211},[28,28345,28346],{"class":64},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[28,28348,25170],{"class":211},[28,28350,28338],{"class":34},[28,28352,28341],{"class":38},[28,28354,639],{"class":211},[28,28356,28357],{"class":64},"\u002Fwayland-0",[28,28359,39],{"class":38},[28,28361,28362,28364,28366,28368,28370,28372,28374,28377,28379,28381,28383,28385],{"class":30,"line":1757},[28,28363,28297],{"class":211},[28,28365,28333],{"class":64},[28,28367,25170],{"class":211},[28,28369,28338],{"class":34},[28,28371,28341],{"class":38},[28,28373,639],{"class":211},[28,28375,28376],{"class":64},":\u002Frun\u002Fuser\u002F",[28,28378,25170],{"class":211},[28,28380,28338],{"class":34},[28,28382,28341],{"class":38},[28,28384,13791],{"class":211},[28,28386,26226],{"class":38},[28,28388,28389,28391,28393,28396],{"class":30,"line":1771},[28,28390,28316],{"class":211},[28,28392,1069],{"class":64},[28,28394,28395],{"class":211},"$HOME ",[28,28397,26226],{"class":38},[28,28399,28400,28403],{"class":30,"line":1776},[28,28401,28402],{"class":211},"-w $HOME ",[28,28404,26226],{"class":38},[28,28406,28407],{"class":30,"line":1805},[28,28408,28409],{"class":211},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28411,9102],{},[161,28413,28414,28422,28425,28428],{},[119,28415,28416,13872,28418,28421],{},[25,28417,28182],{},[25,28419,28420],{},"--gpus all","没有英伟达显卡请注释。",[119,28423,28424],{},"--name后面请自己为容器起名。",[119,28426,28427],{},"最后一行仓库名称请你自己找对应的镜像填上。",[119,28429,28430,28431,28436],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23630,28432,28433],{},[359,28434,28435],{},"请不要加","。",[18,28438,28440],{"className":20,"code":28439,"language":22,"meta":23,"style":23},"--ulimit nofile=1024:524288 \\\n",[25,28441,28442],{"__ignoreMap":23},[28,28443,28444,28447,28450],{"class":30,"line":31},[28,28445,28446],{"class":34},"--ulimit",[28,28448,28449],{"class":64}," nofile=1024:524288",[28,28451,39],{"class":38},[14,28453,28454,28455,28460],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23630,28456,28457],{},[359,28458,28459],{},"不建议","**.**",[18,28462,28464],{"className":20,"code":28463,"language":22,"meta":23,"style":23},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[25,28465,28466,28493,28502],{"__ignoreMap":23},[28,28467,28468,28471,28474,28476,28478,28480,28482,28484,28486,28489,28491],{"class":30,"line":31},[28,28469,28470],{"class":34},"--user",[28,28472,28473],{"class":211}," $(",[28,28475,28338],{"class":34},[28,28477,28341],{"class":38},[28,28479,639],{"class":211},[28,28481,1069],{"class":64},[28,28483,25170],{"class":211},[28,28485,28338],{"class":34},[28,28487,28488],{"class":38}," -g",[28,28490,13791],{"class":211},[28,28492,26226],{"class":38},[28,28494,28495,28497,28500],{"class":30,"line":42},[28,28496,28297],{"class":211},[28,28498,28499],{"class":64},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[28,28501,39],{"class":38},[28,28503,28504,28506,28509],{"class":30,"line":50},[28,28505,28297],{"class":211},[28,28507,28508],{"class":64},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[28,28510,39],{"class":38},[126,28512,28513],{},"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":23,"searchDepth":42,"depth":42,"links":28515},[28516,28517,28518],{"id":27514,"depth":50,"text":27515},{"id":27524,"depth":50,"text":27525},{"id":27935,"depth":50,"text":27938},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27506,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28525,"title":28526,"body":28527,"description":23,"extension":132,"meta":30150,"navigation":134,"path":30151,"seo":30152,"stem":30153,"__hash__":30154},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28528,"toc":30145},[28529,28532,28536,28539,28761,28765,28769,28772,28878,28883,28886,28891,28894,28899,28902,28907,28910,28922,28925,28930,28937,28965,28972,29048,29053,29056,29079,29081,29156,29161,29164,29168,29176,29181,29186,29190,29201,29207,29210,29213,29237,29240,29243,29271,29274,29277,29742,29745,29750,29755,29759,29782,29787,29791,29795,29798,29801,29804,29831,29834,29837,29855,29858,29861,29883,29891,29896,29901,29905,29908,29911,29914,29917,29962,29965,29983,29986,29991,29994,30015,30018,30074,30077,30082,30086,30089,30096,30099,30102,30107,30110,30126,30129,30142],[10,28530,28526],{"id":28531},"_6手动创建docker镜像",[177,28533,28535],{"id":28534},"_61dockerfile","6.1.DockerFile",[14,28537,28538],{},"常用命令：",[347,28540,28541,28552],{},[350,28542,28543],{},[353,28544,28545,28548,28550],{},[356,28546,28547],{"align":23813},"指令",[356,28549,25920],{"align":23813},[356,28551,27543],{"align":23813},[394,28553,28554,28564,28580,28591,28602,28613,28624,28635,28646,28660,28674,28685,28699,28710,28721,28735,28750],{},[353,28555,28556,28558,28561],{},[399,28557,27421],{"align":23813},[399,28559,28560],{"align":23813},"指定基础镜像，是 Dockerfile 的起点",[399,28562,28563],{"align":23813},"FROM ubuntu:22.04",[353,28565,28566,28569,28572],{},[399,28567,28568],{"align":23813},"LABEL",[399,28570,28571],{"align":23813},"添加元数据（如作者、版本等）",[399,28573,28574,28575,28579],{"align":23813},"LABEL maintainer=”",[448,28576,28578],{"href":28577},"mailto:you@example.com","you@example.com","”",[353,28581,28582,28585,28588],{},[399,28583,28584],{"align":23813},"ENV",[399,28586,28587],{"align":23813},"设置环境变量",[399,28589,28590],{"align":23813},"ENV PORT=8080",[353,28592,28593,28596,28599],{},[399,28594,28595],{"align":23813},"ARG",[399,28597,28598],{"align":23813},"构建参数，只在构建期间可用",[399,28600,28601],{"align":23813},"ARG VERSION=1.0",[353,28603,28604,28607,28610],{},[399,28605,28606],{"align":23813},"RUN",[399,28608,28609],{"align":23813},"构建镜像时运行命令",[399,28611,28612],{"align":23813},"RUN apt-get update && apt-get install -y curl",[353,28614,28615,28618,28621],{},[399,28616,28617],{"align":23813},"COPY",[399,28619,28620],{"align":23813},"复制文件到镜像中",[399,28622,28623],{"align":23813},"COPY . \u002Fapp",[353,28625,28626,28629,28632],{},[399,28627,28628],{"align":23813},"ADD",[399,28630,28631],{"align":23813},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[399,28633,28634],{"align":23813},"ADD archive.tar.gz \u002Fdata\u002F",[353,28636,28637,28640,28643],{},[399,28638,28639],{"align":23813},"WORKDIR",[399,28641,28642],{"align":23813},"设置工作目录",[399,28644,28645],{"align":23813},"WORKDIR \u002Fopt",[353,28647,28648,28651,28654],{},[399,28649,28650],{"align":23813},"CMD",[399,28652,28653],{"align":23813},"设置容器启动时默认命令（可被 docker run 覆盖）",[399,28655,28656,28657],{"align":23813},"CMD ",[28,28658,28659],{},"“node”, “index.js”",[353,28661,28662,28665,28668],{},[399,28663,28664],{"align":23813},"ENTRYPOINT",[399,28666,28667],{"align":23813},"设置容器启动时固定命令（通常用于 CLI 工具等）",[399,28669,28670,28671],{"align":23813},"ENTRYPOINT ",[28,28672,28673],{},"“python3”",[353,28675,28676,28679,28682],{},[399,28677,28678],{"align":23813},"EXPOSE",[399,28680,28681],{"align":23813},"声明镜像内服务监听的端口（不会自动映射）",[399,28683,28684],{"align":23813},"EXPOSE 80",[353,28686,28687,28690,28693],{},[399,28688,28689],{"align":23813},"VOLUME",[399,28691,28692],{"align":23813},"声明数据卷挂载点",[399,28694,28695,28696],{"align":23813},"VOLUME ",[28,28697,28698],{},"“\u002Fdata”",[353,28700,28701,28704,28707],{},[399,28702,28703],{"align":23813},"USER",[399,28705,28706],{"align":23813},"设置后续命令执行的用户",[399,28708,28709],{"align":23813},"USER appuser",[353,28711,28712,28715,28718],{},[399,28713,28714],{"align":23813},"ONBUILD",[399,28716,28717],{"align":23813},"当镜像作为其他镜像基础镜像时触发的构建指令",[399,28719,28720],{"align":23813},"ONBUILD COPY . \u002Fsrc",[353,28722,28723,28726,28729],{},[399,28724,28725],{"align":23813},"SHELL",[399,28727,28728],{"align":23813},"更改默认 shell，比如将 sh -c 改为 bash -c",[399,28730,28731,28732],{"align":23813},"SHELL ",[28,28733,28734],{},"“\u002Fbin\u002Fbash”, “-c”",[353,28736,28737,28740,28743],{},[399,28738,28739],{"align":23813},"HEALTHCHECK",[399,28741,28742],{"align":23813},"定义容器运行时的健康检查命令",[399,28744,28745,28746],{"align":23813},"`HEALTHCHECK CMD curl –fail ",[448,28747,28748],{"href":28748,"rel":28749},"http:\u002F\u002Flocalhost:8080",[23940],[353,28751,28752,28755,28758],{},[399,28753,28754],{"align":23813},"STOPSIGNAL",[399,28756,28757],{"align":23813},"容器停止时发送的信号",[399,28759,28760],{"align":23813},"STOPSIGNAL SIGKILL",[177,28762,28764],{"id":28763},"_62自己创建容器","6.2.自己创建容器",[22075,28766,28768],{"id":28767},"_621手动创建","6.2.1.手动创建",[14,28770,28771],{},"在x86电脑上编译x86的：",[18,28773,28775],{"className":20,"code":28774,"language":22,"meta":23,"style":23},"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",[25,28776,28777,28793,28797,28810,28814,28827,28831,28844,28848,28861,28865],{"__ignoreMap":23},[28,28778,28779,28781,28784,28787,28790],{"class":30,"line":31},[28,28780,26604],{"class":34},[28,28782,28783],{"class":64}," build",[28,28785,28786],{"class":38}," -t",[28,28788,28789],{"class":64}," ros-melodic-cuda118-cudnn8-bionic:latest",[28,28791,28792],{"class":64}," .\n",[28,28794,28795],{"class":30,"line":42},[28,28796,2477],{"emptyLinePlaceholder":134},[28,28798,28799,28801,28803,28805,28808],{"class":30,"line":50},[28,28800,26604],{"class":34},[28,28802,28783],{"class":64},[28,28804,28786],{"class":38},[28,28806,28807],{"class":64}," ros-noetic-focal:latest",[28,28809,28792],{"class":64},[28,28811,28812],{"class":30,"line":58},[28,28813,2477],{"emptyLinePlaceholder":134},[28,28815,28816,28818,28820,28822,28825],{"class":30,"line":70},[28,28817,26604],{"class":34},[28,28819,28783],{"class":64},[28,28821,28786],{"class":38},[28,28823,28824],{"class":64}," ros-humble-jammy:latest",[28,28826,28792],{"class":64},[28,28828,28829],{"class":30,"line":78},[28,28830,2477],{"emptyLinePlaceholder":134},[28,28832,28833,28835,28837,28839,28842],{"class":30,"line":86},[28,28834,26604],{"class":34},[28,28836,28783],{"class":64},[28,28838,28786],{"class":38},[28,28840,28841],{"class":64}," ros-jazzy-noble:latest",[28,28843,28792],{"class":64},[28,28845,28846],{"class":30,"line":97},[28,28847,2477],{"emptyLinePlaceholder":134},[28,28849,28850,28852,28854,28856,28859],{"class":30,"line":108},[28,28851,26604],{"class":34},[28,28853,28783],{"class":64},[28,28855,28786],{"class":38},[28,28857,28858],{"class":64}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[28,28860,28792],{"class":64},[28,28862,28863],{"class":30,"line":1407},[28,28864,2477],{"emptyLinePlaceholder":134},[28,28866,28867,28869,28871,28873,28876],{"class":30,"line":1690},[28,28868,26604],{"class":34},[28,28870,28783],{"class":64},[28,28872,28786],{"class":38},[28,28874,28875],{"class":64}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[28,28877,28792],{"class":64},[14,28879,28880],{},[1540,28881],{"alt":23,"src":28882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28884,28885],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28887,28888],{},[1540,28889],{"alt":23,"src":28890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28892,28893],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[161,28895,28896],{},[119,28897,28898],{},"创建 Docker Hub 账户",[14,28900,28901],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[161,28903,28904],{"start":42},[119,28905,28906],{},"登录 Docker Hub",[14,28908,28909],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[18,28911,28913],{"className":20,"code":28912,"language":22,"meta":23,"style":23},"docker login\n",[25,28914,28915],{"__ignoreMap":23},[28,28916,28917,28919],{"class":30,"line":31},[28,28918,26604],{"class":34},[28,28920,28921],{"class":64}," login\n",[14,28923,28924],{},"输入你的 Docker Hub 用户名和密码进行验证。",[161,28926,28927],{},[119,28928,28929],{},"为你的镜像打标签",[14,28931,28932,28933,28936],{},"Docker Hub 使用 ",[25,28934,28935],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[18,28938,28940],{"className":20,"code":28939,"language":22,"meta":23,"style":23},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[25,28941,28942],{"__ignoreMap":23},[28,28943,28944,28946,28949,28951,28954,28957,28960,28962],{"class":30,"line":31},[28,28945,26604],{"class":34},[28,28947,28948],{"class":64}," tag",[28,28950,28841],{"class":64},[28,28952,28953],{"class":207}," \u003C",[28,28955,28956],{"class":64},"你的用户",[28,28958,28959],{"class":211},"名",[28,28961,1170],{"class":207},[28,28963,28964],{"class":64},"\u002Fros-jazzy-noble:latest\n",[14,28966,28967,28968,28971],{},"例如，如果你的 Docker Hub 用户名是 ",[25,28969,28970],{},"tungchiahui","，你应该执行：",[18,28973,28975],{"className":20,"code":28974,"language":22,"meta":23,"style":23},"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",[25,28976,28977,28988,28992,29003,29007,29018,29022,29033,29037],{"__ignoreMap":23},[28,28978,28979,28981,28983,28985],{"class":30,"line":31},[28,28980,26604],{"class":34},[28,28982,28948],{"class":64},[28,28984,28807],{"class":64},[28,28986,28987],{"class":64}," tungchiahui\u002Fros-noetic-focal:latest\n",[28,28989,28990],{"class":30,"line":42},[28,28991,2477],{"emptyLinePlaceholder":134},[28,28993,28994,28996,28998,29000],{"class":30,"line":50},[28,28995,26604],{"class":34},[28,28997,28948],{"class":64},[28,28999,28824],{"class":64},[28,29001,29002],{"class":64}," tungchiahui\u002Fros-humble-jammy:latest\n",[28,29004,29005],{"class":30,"line":58},[28,29006,2477],{"emptyLinePlaceholder":134},[28,29008,29009,29011,29013,29015],{"class":30,"line":70},[28,29010,26604],{"class":34},[28,29012,28948],{"class":64},[28,29014,28841],{"class":64},[28,29016,29017],{"class":64}," tungchiahui\u002Fros-jazzy-noble:latest\n",[28,29019,29020],{"class":30,"line":78},[28,29021,2477],{"emptyLinePlaceholder":134},[28,29023,29024,29026,29028,29030],{"class":30,"line":86},[28,29025,26604],{"class":34},[28,29027,28948],{"class":64},[28,29029,28858],{"class":64},[28,29031,29032],{"class":64}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[28,29034,29035],{"class":30,"line":97},[28,29036,2477],{"emptyLinePlaceholder":134},[28,29038,29039,29041,29043,29045],{"class":30,"line":108},[28,29040,26604],{"class":34},[28,29042,28948],{"class":64},[28,29044,28875],{"class":64},[28,29046,29047],{"class":64}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[161,29049,29050],{"start":42},[119,29051,29052],{},"推送镜像到 Docker Hub",[14,29054,29055],{},"使用以下命令将镜像推送到 Docker Hub：",[18,29057,29059],{"className":20,"code":29058,"language":22,"meta":23,"style":23},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[25,29060,29061],{"__ignoreMap":23},[28,29062,29063,29065,29068,29070,29072,29074,29076],{"class":30,"line":31},[28,29064,26604],{"class":34},[28,29066,29067],{"class":64}," push",[28,29069,28953],{"class":207},[28,29071,28956],{"class":64},[28,29073,28959],{"class":211},[28,29075,1170],{"class":207},[28,29077,29078],{"class":64},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29080,14710],{},[18,29082,29084],{"className":20,"code":29083,"language":22,"meta":23,"style":23},"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",[25,29085,29086,29094,29098,29106,29110,29118,29122,29131,29135,29143,29147],{"__ignoreMap":23},[28,29087,29088,29090,29092],{"class":30,"line":31},[28,29089,26604],{"class":34},[28,29091,29067],{"class":64},[28,29093,28987],{"class":64},[28,29095,29096],{"class":30,"line":42},[28,29097,2477],{"emptyLinePlaceholder":134},[28,29099,29100,29102,29104],{"class":30,"line":50},[28,29101,26604],{"class":34},[28,29103,29067],{"class":64},[28,29105,29002],{"class":64},[28,29107,29108],{"class":30,"line":58},[28,29109,2477],{"emptyLinePlaceholder":134},[28,29111,29112,29114,29116],{"class":30,"line":70},[28,29113,26604],{"class":34},[28,29115,29067],{"class":64},[28,29117,29017],{"class":64},[28,29119,29120],{"class":30,"line":78},[28,29121,2477],{"emptyLinePlaceholder":134},[28,29123,29124,29126,29128],{"class":30,"line":86},[28,29125,26604],{"class":34},[28,29127,29067],{"class":64},[28,29129,29130],{"class":64}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[28,29132,29133],{"class":30,"line":97},[28,29134,2477],{"emptyLinePlaceholder":134},[28,29136,29137,29139,29141],{"class":30,"line":108},[28,29138,26604],{"class":34},[28,29140,29067],{"class":64},[28,29142,29047],{"class":64},[28,29144,29145],{"class":30,"line":1407},[28,29146,2477],{"emptyLinePlaceholder":134},[28,29148,29149,29151,29153],{"class":30,"line":1690},[28,29150,26604],{"class":34},[28,29152,29067],{"class":64},[28,29154,29155],{"class":64}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[161,29157,29158],{"start":50},[119,29159,29160],{},"验证推送成功",[14,29162,29163],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29165,29166],{},[359,29167,3861],{},[116,29169,29170,29173],{},[119,29171,29172],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[119,29174,29175],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29177,29178],{},[1540,29179],{"alt":23,"src":29180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29182,29183],{},[1540,29184],{"alt":23,"src":29185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22075,29187,29189],{"id":29188},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29191,29192,29193,29196,29197,29200],{},"如果您想在 ",[359,29194,29195],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[359,29198,29199],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29202,29203,29204],{},"1. ",[359,29205,29206],{},"启用 Docker 跨平台构建",[14,29208,29209],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29211,29212],{},"第一步：启用 buildx（只需执行一次）",[18,29214,29216],{"className":20,"code":29215,"language":22,"meta":23,"style":23},"docker buildx create --name multiarch_builder --use\n",[25,29217,29218],{"__ignoreMap":23},[28,29219,29220,29222,29225,29228,29231,29234],{"class":30,"line":31},[28,29221,26604],{"class":34},[28,29223,29224],{"class":64}," buildx",[28,29226,29227],{"class":64}," create",[28,29229,29230],{"class":38}," --name",[28,29232,29233],{"class":64}," multiarch_builder",[28,29235,29236],{"class":38}," --use\n",[14,29238,29239],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29241,29242],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[18,29244,29246],{"className":20,"code":29245,"language":22,"meta":23,"style":23},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[25,29247,29248],{"__ignoreMap":23},[28,29249,29250,29252,29254,29256,29259,29262,29265,29268],{"class":30,"line":31},[28,29251,26604],{"class":34},[28,29253,27281],{"class":64},[28,29255,27284],{"class":38},[28,29257,29258],{"class":38}," --privileged",[28,29260,29261],{"class":64}," multiarch\u002Fqemu-user-static",[28,29263,29264],{"class":38}," --reset",[28,29266,29267],{"class":38}," -p",[28,29269,29270],{"class":64}," yes\n",[14,29272,29273],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29275,29276],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[18,29278,29280],{"className":20,"code":29279,"language":22,"meta":23,"style":23},"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",[25,29281,29282,29324,29328,29333,29343,29353,29362,29368,29372,29376,29386,29394,29403,29409,29413,29417,29427,29435,29444,29450,29454,29458,29468,29476,29485,29491,29495,29499,29509,29517,29526,29532,29536,29540,29550,29558,29567,29573,29577,29581,29591,29599,29608,29614,29618,29622,29632,29640,29649,29655,29659,29663,29673,29681,29690,29696,29700,29704,29715,29723,29732,29738],{"__ignoreMap":23},[28,29283,29284,29286,29288,29290,29293,29296,29298,29300,29303,29305,29307,29309,29311,29314,29317,29319,29322],{"class":30,"line":31},[28,29285,26604],{"class":34},[28,29287,29224],{"class":64},[28,29289,28783],{"class":64},[28,29291,29292],{"class":38}," --platform",[28,29294,29295],{"class":64}," linux\u002Famd64,linux\u002Farm64",[28,29297,28786],{"class":38},[28,29299,28953],{"class":207},[28,29301,29302],{"class":64},"你的镜像",[28,29304,28959],{"class":211},[28,29306,1170],{"class":207},[28,29308,1069],{"class":64},[28,29310,1120],{"class":207},[28,29312,29313],{"class":64},"标",[28,29315,29316],{"class":211},"签",[28,29318,1170],{"class":207},[28,29320,29321],{"class":38}," --push",[28,29323,28792],{"class":64},[28,29325,29326],{"class":30,"line":42},[28,29327,2477],{"emptyLinePlaceholder":134},[28,29329,29330],{"class":30,"line":50},[28,29331,29332],{"class":269},"# 例子：\n",[28,29334,29335,29337,29339,29341],{"class":30,"line":58},[28,29336,26604],{"class":34},[28,29338,29224],{"class":64},[28,29340,28783],{"class":64},[28,29342,39],{"class":38},[28,29344,29345,29348,29351],{"class":30,"line":70},[28,29346,29347],{"class":211},"--platform ",[28,29349,29350],{"class":64},"linux\u002Famd64,linux\u002Farm64",[28,29352,39],{"class":38},[28,29354,29355,29357,29360],{"class":30,"line":78},[28,29356,28786],{"class":38},[28,29358,29359],{"class":64}," tungchiahui\u002Fros:noetic-focal",[28,29361,39],{"class":38},[28,29363,29364,29366],{"class":30,"line":86},[28,29365,29321],{"class":38},[28,29367,39],{"class":38},[28,29369,29370],{"class":30,"line":97},[28,29371,28792],{"class":64},[28,29373,29374],{"class":30,"line":108},[28,29375,2477],{"emptyLinePlaceholder":134},[28,29377,29378,29380,29382,29384],{"class":30,"line":1407},[28,29379,26604],{"class":34},[28,29381,29224],{"class":64},[28,29383,28783],{"class":64},[28,29385,39],{"class":38},[28,29387,29388,29390,29392],{"class":30,"line":1690},[28,29389,29347],{"class":211},[28,29391,29350],{"class":64},[28,29393,39],{"class":38},[28,29395,29396,29398,29401],{"class":30,"line":1695},[28,29397,28786],{"class":38},[28,29399,29400],{"class":64}," tungchiahui\u002Fros:humble-jammy",[28,29402,39],{"class":38},[28,29404,29405,29407],{"class":30,"line":1701},[28,29406,29321],{"class":38},[28,29408,39],{"class":38},[28,29410,29411],{"class":30,"line":1706},[28,29412,28792],{"class":64},[28,29414,29415],{"class":30,"line":1720},[28,29416,2477],{"emptyLinePlaceholder":134},[28,29418,29419,29421,29423,29425],{"class":30,"line":1725},[28,29420,26604],{"class":34},[28,29422,29224],{"class":64},[28,29424,28783],{"class":64},[28,29426,39],{"class":38},[28,29428,29429,29431,29433],{"class":30,"line":1731},[28,29430,29347],{"class":211},[28,29432,29350],{"class":64},[28,29434,39],{"class":38},[28,29436,29437,29439,29442],{"class":30,"line":1752},[28,29438,28786],{"class":38},[28,29440,29441],{"class":64}," tungchiahui\u002Fros:jazzy-noble",[28,29443,39],{"class":38},[28,29445,29446,29448],{"class":30,"line":1757},[28,29447,29321],{"class":38},[28,29449,39],{"class":38},[28,29451,29452],{"class":30,"line":1771},[28,29453,28792],{"class":64},[28,29455,29456],{"class":30,"line":1776},[28,29457,2477],{"emptyLinePlaceholder":134},[28,29459,29460,29462,29464,29466],{"class":30,"line":1805},[28,29461,26371],{"class":34},[28,29463,29224],{"class":64},[28,29465,28783],{"class":64},[28,29467,39],{"class":38},[28,29469,29470,29472,29474],{"class":30,"line":1810},[28,29471,29347],{"class":211},[28,29473,29350],{"class":64},[28,29475,39],{"class":38},[28,29477,29478,29480,29483],{"class":30,"line":1827},[28,29479,28786],{"class":38},[28,29481,29482],{"class":64}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[28,29484,39],{"class":38},[28,29486,29487,29489],{"class":30,"line":1832},[28,29488,29321],{"class":38},[28,29490,39],{"class":38},[28,29492,29493],{"class":30,"line":1837},[28,29494,28792],{"class":64},[28,29496,29497],{"class":30,"line":1842},[28,29498,2477],{"emptyLinePlaceholder":134},[28,29500,29501,29503,29505,29507],{"class":30,"line":1856},[28,29502,26604],{"class":34},[28,29504,29224],{"class":64},[28,29506,28783],{"class":64},[28,29508,39],{"class":38},[28,29510,29511,29513,29515],{"class":30,"line":1861},[28,29512,29347],{"class":211},[28,29514,29350],{"class":64},[28,29516,39],{"class":38},[28,29518,29519,29521,29524],{"class":30,"line":2654},[28,29520,28786],{"class":38},[28,29522,29523],{"class":64}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[28,29525,39],{"class":38},[28,29527,29528,29530],{"class":30,"line":2668},[28,29529,29321],{"class":38},[28,29531,39],{"class":38},[28,29533,29534],{"class":30,"line":2676},[28,29535,28792],{"class":64},[28,29537,29538],{"class":30,"line":2681},[28,29539,2477],{"emptyLinePlaceholder":134},[28,29541,29542,29544,29546,29548],{"class":30,"line":2687},[28,29543,26371],{"class":34},[28,29545,29224],{"class":64},[28,29547,28783],{"class":64},[28,29549,39],{"class":38},[28,29551,29552,29554,29556],{"class":30,"line":2693},[28,29553,29347],{"class":211},[28,29555,29350],{"class":64},[28,29557,39],{"class":38},[28,29559,29560,29562,29565],{"class":30,"line":2698},[28,29561,28786],{"class":38},[28,29563,29564],{"class":64}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[28,29566,39],{"class":38},[28,29568,29569,29571],{"class":30,"line":8025},[28,29570,29321],{"class":38},[28,29572,39],{"class":38},[28,29574,29575],{"class":30,"line":8049},[28,29576,28792],{"class":64},[28,29578,29579],{"class":30,"line":8054},[28,29580,2477],{"emptyLinePlaceholder":134},[28,29582,29583,29585,29587,29589],{"class":30,"line":8060},[28,29584,26604],{"class":34},[28,29586,29224],{"class":64},[28,29588,28783],{"class":64},[28,29590,39],{"class":38},[28,29592,29593,29595,29597],{"class":30,"line":8087},[28,29594,29347],{"class":211},[28,29596,29350],{"class":64},[28,29598,39],{"class":38},[28,29600,29601,29603,29606],{"class":30,"line":8092},[28,29602,28786],{"class":38},[28,29604,29605],{"class":64}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[28,29607,39],{"class":38},[28,29609,29610,29612],{"class":30,"line":8098},[28,29611,29321],{"class":38},[28,29613,39],{"class":38},[28,29615,29616],{"class":30,"line":8110},[28,29617,28792],{"class":64},[28,29619,29620],{"class":30,"line":8122},[28,29621,2477],{"emptyLinePlaceholder":134},[28,29623,29624,29626,29628,29630],{"class":30,"line":8134},[28,29625,26604],{"class":34},[28,29627,29224],{"class":64},[28,29629,28783],{"class":64},[28,29631,39],{"class":38},[28,29633,29634,29636,29638],{"class":30,"line":9793},[28,29635,29347],{"class":211},[28,29637,29350],{"class":64},[28,29639,39],{"class":38},[28,29641,29642,29644,29647],{"class":30,"line":9818},[28,29643,28786],{"class":38},[28,29645,29646],{"class":64}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[28,29648,39],{"class":38},[28,29650,29651,29653],{"class":30,"line":9841},[28,29652,29321],{"class":38},[28,29654,39],{"class":38},[28,29656,29657],{"class":30,"line":9865},[28,29658,28792],{"class":64},[28,29660,29661],{"class":30,"line":9870},[28,29662,2477],{"emptyLinePlaceholder":134},[28,29664,29665,29667,29669,29671],{"class":30,"line":9875},[28,29666,26371],{"class":34},[28,29668,29224],{"class":64},[28,29670,28783],{"class":64},[28,29672,39],{"class":38},[28,29674,29675,29677,29679],{"class":30,"line":9880},[28,29676,29347],{"class":211},[28,29678,29350],{"class":64},[28,29680,39],{"class":38},[28,29682,29683,29685,29688],{"class":30,"line":9889},[28,29684,28786],{"class":38},[28,29686,29687],{"class":64}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[28,29689,39],{"class":38},[28,29691,29692,29694],{"class":30,"line":9894},[28,29693,29321],{"class":38},[28,29695,39],{"class":38},[28,29697,29698],{"class":30,"line":9900},[28,29699,28792],{"class":64},[28,29701,29702],{"class":30,"line":9921},[28,29703,2477],{"emptyLinePlaceholder":134},[28,29705,29706,29709,29711,29713],{"class":30,"line":9927},[28,29707,29708],{"class":34},"  docker",[28,29710,29224],{"class":64},[28,29712,28783],{"class":64},[28,29714,39],{"class":38},[28,29716,29717,29719,29721],{"class":30,"line":9941},[28,29718,29347],{"class":211},[28,29720,29350],{"class":64},[28,29722,39],{"class":38},[28,29724,29725,29727,29730],{"class":30,"line":9947},[28,29726,28786],{"class":38},[28,29728,29729],{"class":64}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[28,29731,39],{"class":38},[28,29733,29734,29736],{"class":30,"line":9974},[28,29735,29321],{"class":38},[28,29737,39],{"class":38},[28,29739,29740],{"class":30,"line":9983},[28,29741,28792],{"class":64},[14,29743,29744],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29746,29747],{},[1540,29748],{"alt":23,"src":29749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29751,29752],{},[1540,29753],{"alt":23,"src":29754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22075,29756,29758],{"id":29757},"_623清除构建缓存","6.2.3.清除构建缓存",[18,29760,29762],{"className":20,"code":29761,"language":22,"meta":23,"style":23},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[25,29763,29764,29769],{"__ignoreMap":23},[28,29765,29766],{"class":30,"line":31},[28,29767,29768],{"class":269},"# 清理BuildKit构建缓存\n",[28,29770,29771,29773,29776,29779],{"class":30,"line":42},[28,29772,26604],{"class":34},[28,29774,29775],{"class":64}," builder",[28,29777,29778],{"class":64}," prune",[28,29780,29781],{"class":38}," -f\n",[14,29783,29784],{},[1540,29785],{"alt":23,"src":29786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[177,29788,29790],{"id":29789},"_63补充","6.3.补充",[22075,29792,29794],{"id":29793},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29796,29797],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29799,29800],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29802,29803],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[18,29805,29807],{"className":20,"code":29806,"language":22,"meta":23,"style":23},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[25,29808,29809,29816],{"__ignoreMap":23},[28,29810,29811,29813],{"class":30,"line":31},[28,29812,27421],{"class":34},[28,29814,29815],{"class":64}," nginx\n",[28,29817,29818,29820,29823,29826,29828],{"class":30,"line":42},[28,29819,28606],{"class":34},[28,29821,29822],{"class":64}," echo",[28,29824,29825],{"class":64}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[28,29827,26273],{"class":207},[28,29829,29830],{"class":64}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29832,29833],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29835,29836],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[18,29838,29840],{"className":20,"code":29839,"language":22,"meta":23,"style":23},"docker build -t nginx:tuling .\n",[25,29841,29842],{"__ignoreMap":23},[28,29843,29844,29846,29848,29850,29853],{"class":30,"line":31},[28,29845,26604],{"class":34},[28,29847,28783],{"class":64},[28,29849,28786],{"class":38},[28,29851,29852],{"class":64}," nginx:tuling",[28,29854,28792],{"class":64},[14,29856,29857],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29859,29860],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[18,29862,29864],{"className":20,"code":29863,"language":22,"meta":23,"style":23},"docker run -d -p 92:80 nginx:tuling\n",[25,29865,29866],{"__ignoreMap":23},[28,29867,29868,29870,29872,29875,29877,29880],{"class":30,"line":31},[28,29869,26604],{"class":34},[28,29871,27281],{"class":64},[28,29873,29874],{"class":38}," -d",[28,29876,29267],{"class":38},[28,29878,29879],{"class":64}," 92:80",[28,29881,29882],{"class":64}," nginx:tuling\n",[14,29884,29885,29886],{},"4、访问 ",[448,29887,29890],{"href":29888,"rel":29889},"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",[23940],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29892,29893],{},[1540,29894],{"alt":23,"src":29895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29897,29898],{},[1540,29899],{"alt":23,"src":29900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22075,29902,29904],{"id":29903},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29906,29907],{},"只需要知道大体流程即可",[14,29909,29910],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29912,29913],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29915,29916],{},"2、在Dockerfile中添加以下内容",[18,29918,29920],{"className":26142,"code":29919,"language":26144,"meta":23,"style":23},"# 基于哪个镜像\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",[25,29921,29922,29927,29932,29937,29942,29947,29952,29957],{"__ignoreMap":23},[28,29923,29924],{"class":30,"line":31},[28,29925,29926],{},"# 基于哪个镜像\n",[28,29928,29929],{"class":30,"line":42},[28,29930,29931],{},"From java:8\n",[28,29933,29934],{"class":30,"line":50},[28,29935,29936],{},"# 复制文件到容器\n",[28,29938,29939],{"class":30,"line":58},[28,29940,29941],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[28,29943,29944],{"class":30,"line":70},[28,29945,29946],{},"# 声明需要暴露的端口\n",[28,29948,29949],{"class":30,"line":78},[28,29950,29951],{},"EXPOSE 8877\n",[28,29953,29954],{"class":30,"line":86},[28,29955,29956],{},"# 配置容器启动后执行的命令\n",[28,29958,29959],{"class":30,"line":97},[28,29960,29961],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29963,29964],{},"3、使用docker build命令构建镜像",[18,29966,29968],{"className":20,"code":29967,"language":22,"meta":23,"style":23},"docker build -t tulingmall-member:0.0.5 .\n",[25,29969,29970],{"__ignoreMap":23},[28,29971,29972,29974,29976,29978,29981],{"class":30,"line":31},[28,29973,26604],{"class":34},[28,29975,28783],{"class":64},[28,29977,28786],{"class":38},[28,29979,29980],{"class":64}," tulingmall-member:0.0.5",[28,29982,28792],{"class":64},[14,29984,29985],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29987,29988],{},[1540,29989],{"alt":23,"src":29990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29992,29993],{},"4、启动镜像，加-d可在后台启动",[18,29995,29997],{"className":20,"code":29996,"language":22,"meta":23,"style":23},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[25,29998,29999],{"__ignoreMap":23},[28,30000,30001,30003,30005,30007,30009,30012],{"class":30,"line":31},[28,30002,26604],{"class":34},[28,30004,27281],{"class":64},[28,30006,29874],{"class":38},[28,30008,29267],{"class":38},[28,30010,30011],{"class":64}," 8877:8877",[28,30013,30014],{"class":64}," tulingmall-member:0.0.5\n",[14,30016,30017],{},"加上JVM参数：",[18,30019,30021],{"className":20,"code":30020,"language":22,"meta":23,"style":23},"# --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",[25,30022,30023,30028,30043,30053,30062,30069],{"__ignoreMap":23},[28,30024,30025],{"class":30,"line":31},[28,30026,30027],{"class":269},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[28,30029,30030,30032,30034,30037,30039,30041],{"class":30,"line":42},[28,30031,26604],{"class":34},[28,30033,27281],{"class":64},[28,30035,30036],{"class":38},"  -d",[28,30038,29267],{"class":38},[28,30040,30011],{"class":64},[28,30042,39],{"class":38},[28,30044,30045,30047,30050],{"class":30,"line":50},[28,30046,28179],{"class":211},[28,30048,30049],{"class":64},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[28,30051,30052],{"class":38},"  \\\n",[28,30054,30055,30057,30060],{"class":30,"line":58},[28,30056,28179],{"class":211},[28,30058,30059],{"class":64},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[28,30061,30052],{"class":38},[28,30063,30064,30067],{"class":30,"line":70},[28,30065,30066],{"class":211},"--cap-add=SYS_PTRACE  ",[28,30068,26226],{"class":38},[28,30070,30071],{"class":30,"line":78},[28,30072,30073],{"class":211},"tulingmall-member:0.0.5\n",[14,30075,30076],{},"5、访问会员服务接口",[14,30078,30079],{},[1540,30080],{"alt":23,"src":30081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22075,30083,30085],{"id":30084},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30087,30088],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30090,30091,30092],{},"阿里云docker镜像仓库：",[448,30093,30094],{"href":30094,"rel":30095},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23940],[14,30097,30098],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30100,30101],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30103,30104],{},[1540,30105],{"alt":23,"src":30106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30108,30109],{},"要把镜像推送到镜像仓库",[18,30111,30113],{"className":20,"code":30112,"language":22,"meta":23,"style":23},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[25,30114,30115],{"__ignoreMap":23},[28,30116,30117,30119,30121,30123],{"class":30,"line":31},[28,30118,26604],{"class":34},[28,30120,28948],{"class":64},[28,30122,29980],{"class":64},[28,30124,30125],{"class":64}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30127,30128],{},"最后将镜像推送到远程仓库",[18,30130,30132],{"className":20,"code":30131,"language":22,"meta":23,"style":23},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[25,30133,30134],{"__ignoreMap":23},[28,30135,30136,30138,30140],{"class":30,"line":31},[28,30137,26604],{"class":34},[28,30139,29067],{"class":64},[28,30141,30125],{"class":64},[126,30143,30144],{},"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":23,"searchDepth":42,"depth":42,"links":30146},[30147,30148,30149],{"id":28534,"depth":50,"text":28535},{"id":28763,"depth":50,"text":28764},{"id":29789,"depth":50,"text":29790},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28526,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30156,"title":30157,"body":30158,"description":23,"extension":132,"meta":30301,"navigation":134,"path":30302,"seo":30303,"stem":30304,"__hash__":30305},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30159,"toc":30299},[30160,30163,30168,30173,30176,30181,30186,30189,30194,30199,30202,30207,30210,30213,30216,30219,30222,30225,30245,30267,30270,30273,30293,30296],[10,30161,30157],{"id":30162},"_7vscode远程开发",[161,30164,30165],{},[119,30166,30167],{},"插件1：微软Docker工具",[14,30169,30170],{},[1540,30171],{"alt":23,"src":30172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30174,30175],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30177,30178],{},[1540,30179],{"alt":23,"src":30180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[161,30182,30183],{"start":42},[119,30184,30185],{},"插件2：微软Docker远程开发工具",[14,30187,30188],{},"下面这是远程开发的插件。",[14,30190,30191],{},[1540,30192],{"alt":23,"src":30193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30195,30196],{},[1540,30197],{"alt":23,"src":30198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30200,30201],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30203,30204],{},[1540,30205],{"alt":23,"src":30206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30208,30209],{},"安装完拓展之后，vscode进行链接：",[14,30211,30212],{},"1.按ctrl+shift+p",[14,30214,30215],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30217,30218],{},"3.选择目前运行的容器",[14,30220,30221],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30223,30224],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[18,30226,30228],{"className":20,"code":30227,"language":22,"meta":23,"style":23},"docker run -v 主机目录:容器目录 image-name\n",[25,30229,30230],{"__ignoreMap":23},[28,30231,30232,30234,30236,30239,30242],{"class":30,"line":31},[28,30233,26604],{"class":34},[28,30235,27281],{"class":64},[28,30237,30238],{"class":38}," -v",[28,30240,30241],{"class":64}," 主机目录:容器目录",[28,30243,30244],{"class":64}," image-name\n",[18,30246,30248],{"className":20,"code":30247,"language":22,"meta":23,"style":23},"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",[25,30249,30250],{"__ignoreMap":23},[28,30251,30252,30254,30256,30259,30261,30264],{"class":30,"line":31},[28,30253,26604],{"class":34},[28,30255,27281],{"class":64},[28,30257,30258],{"class":38}," -it",[28,30260,30238],{"class":38},[28,30262,30263],{"class":64}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[28,30265,30266],{"class":64}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30268,30269],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30271,30272],{},"查看挂载情况：",[18,30274,30276],{"className":20,"code":30275,"language":22,"meta":23,"style":23},"mount | grep -i project\n",[25,30277,30278],{"__ignoreMap":23},[28,30279,30280,30283,30285,30288,30290],{"class":30,"line":31},[28,30281,30282],{"class":34},"mount",[28,30284,25180],{"class":207},[28,30286,30287],{"class":34}," grep",[28,30289,26481],{"class":38},[28,30291,30292],{"class":64}," project\n",[14,30294,30295],{},"也可以通过ls来进行查看",[126,30297,30298],{},"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":23,"searchDepth":42,"depth":42,"links":30300},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30157,"description":23},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30307,"title":30308,"body":30309,"description":131,"extension":132,"meta":30313,"navigation":134,"path":30315,"seo":30316,"stem":30317,"__hash__":30318},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30310,"toc":30311},[],{"title":23,"searchDepth":42,"depth":42,"links":30312},[],{"category":30314},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30308,"description":131},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30320,"title":30321,"body":30322,"description":131,"extension":132,"meta":30326,"navigation":134,"path":30327,"seo":30328,"stem":30329,"__hash__":30330},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30323,"toc":30324},[],{"title":23,"searchDepth":42,"depth":42,"links":30325},[],{"category":30314},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30321,"description":131},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30332,"title":30333,"body":30334,"description":131,"extension":132,"meta":30627,"navigation":134,"path":30628,"seo":30629,"stem":30630,"__hash__":30631},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30335,"toc":30625},[30336,30339,30347,30362,30367,30418,30421,30427,30614,30619,30622],[10,30337,30333],{"id":30338},"_1验证深度学习环境",[14,30340,30341,30342],{},"关于环境的安装，看",[448,30343,30346],{"href":30344,"rel":30345},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23940],"Pytorch-->深度学习",[14,30348,30349,30350,30353,30354,30357,30358,30361],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[25,30351,30352],{},"pytorch-cuda=12.4"," 是一个“ ",[359,30355,30356],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[359,30359,30360],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30363,30364],{},[1540,30365],{"alt":23,"src":30366},"\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",[18,30368,30370],{"className":20,"code":30369,"language":22,"meta":23,"style":23},"# 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",[25,30371,30372,30377],{"__ignoreMap":23},[28,30373,30374],{"class":30,"line":31},[28,30375,30376],{"class":269},"# CUDA 12.4\n",[28,30378,30379,30382,30384,30387,30390,30393,30396,30399,30401,30404,30407,30410,30413,30415],{"class":30,"line":42},[28,30380,30381],{"class":34},"conda",[28,30383,23909],{"class":64},[28,30385,30386],{"class":64}," pytorch==",[28,30388,30389],{"class":38},"2.5.1",[28,30391,30392],{"class":64}," torchvision==",[28,30394,30395],{"class":38},"0.20.1",[28,30397,30398],{"class":64}," torchaudio==",[28,30400,30389],{"class":38},[28,30402,30403],{"class":64}," pytorch-cuda=",[28,30405,30406],{"class":38},"12.4",[28,30408,30409],{"class":38}," -c",[28,30411,30412],{"class":64}," pytorch",[28,30414,30409],{"class":38},[28,30416,30417],{"class":64}," nvidia\n",[14,30419,30420],{},"）：",[14,30422,30423],{},[448,30424,30425],{"href":30425,"rel":30426},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23940],[18,30428,30432],{"className":30429,"code":30430,"language":30431,"meta":23,"style":23},"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",[25,30433,30434,30439,30447,30452,30462,30478,30483,30493,30530,30537,30549,30565,30570,30580,30592,30602],{"__ignoreMap":23},[28,30435,30436],{"class":30,"line":31},[28,30437,30438],{"class":269},"# 对深度学习环境进行测试\n",[28,30440,30441,30444],{"class":30,"line":42},[28,30442,30443],{"class":207},"import",[28,30445,30446],{"class":211}," torch\n",[28,30448,30449],{"class":30,"line":50},[28,30450,30451],{"class":269},"# 查看cuda是否被激活\n",[28,30453,30454,30457,30459],{"class":30,"line":58},[28,30455,30456],{"class":211},"flag",[28,30458,257],{"class":207},[28,30460,30461],{"class":211},"torch.cuda.is_available()\n",[28,30463,30464,30467,30469,30472,30475],{"class":30,"line":70},[28,30465,30466],{"class":38},"print",[28,30468,212],{"class":211},[28,30470,30471],{"class":64},"\"cuda:\"",[28,30473,30474],{"class":211},", flag)   ",[28,30476,30477],{"class":269},"#返回true的话说明被激活\n",[28,30479,30480],{"class":30,"line":78},[28,30481,30482],{"class":269},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[28,30484,30485,30488,30490],{"class":30,"line":86},[28,30486,30487],{"class":211},"ngpu",[28,30489,257],{"class":207},[28,30491,30492],{"class":38},"1\n",[28,30494,30495,30498,30500,30503,30506,30508,30511,30514,30517,30519,30521,30523,30525,30528],{"class":30,"line":97},[28,30496,30497],{"class":211},"device",[28,30499,257],{"class":207},[28,30501,30502],{"class":211},"torch.device(",[28,30504,30505],{"class":64},"\"cuda:0\"",[28,30507,1782],{"class":207},[28,30509,30510],{"class":211},"(torch.cuda.is_available() ",[28,30512,30513],{"class":207},"and",[28,30515,30516],{"class":211}," ngpu",[28,30518,1170],{"class":207},[28,30520,401],{"class":38},[28,30522,13791],{"class":211},[28,30524,1779],{"class":207},[28,30526,30527],{"class":64}," \"cpu\"",[28,30529,218],{"class":211},[28,30531,30532,30534],{"class":30,"line":108},[28,30533,30466],{"class":38},[28,30535,30536],{"class":211},"(device)\n",[28,30538,30539,30541,30544,30546],{"class":30,"line":1407},[28,30540,30466],{"class":38},[28,30542,30543],{"class":211},"(torch.cuda.get_device_name(",[28,30545,401],{"class":38},[28,30547,30548],{"class":211},"))\n",[28,30550,30551,30553,30556,30558,30560,30562],{"class":30,"line":1690},[28,30552,30466],{"class":38},[28,30554,30555],{"class":211},"(torch.rand(",[28,30557,282],{"class":38},[28,30559,588],{"class":211},[28,30561,282],{"class":38},[28,30563,30564],{"class":211},").cuda())\n",[28,30566,30567],{"class":30,"line":1695},[28,30568,30569],{"class":269},"# 查看cuda和cudnn的版本\n",[28,30571,30572,30575,30577],{"class":30,"line":1701},[28,30573,30574],{"class":211},"cuda_version",[28,30576,257],{"class":207},[28,30578,30579],{"class":211},"torch.version.cuda\n",[28,30581,30582,30584,30586,30589],{"class":30,"line":1706},[28,30583,30466],{"class":38},[28,30585,212],{"class":211},[28,30587,30588],{"class":64},"\"cuda version\"",[28,30590,30591],{"class":211},",cuda_version)\n",[28,30593,30594,30597,30599],{"class":30,"line":1720},[28,30595,30596],{"class":211},"cudnn_version",[28,30598,257],{"class":207},[28,30600,30601],{"class":211},"torch.backends.cudnn.version()\n",[28,30603,30604,30606,30608,30611],{"class":30,"line":1725},[28,30605,30466],{"class":38},[28,30607,212],{"class":211},[28,30609,30610],{"class":64},"\"cudnn version\"",[28,30612,30613],{"class":211},",cudnn_version)\n",[14,30615,30616],{},[1540,30617],{"alt":23,"src":30618},"\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,30620,30621],{},"cuda:0 指的是一块显卡",[126,30623,30624],{},"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":23,"searchDepth":42,"depth":42,"links":30626},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30333,"description":131},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30633,"title":30634,"body":30635,"description":131,"extension":132,"meta":50439,"navigation":134,"path":50440,"seo":50441,"stem":50442,"__hash__":50443},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30636,"toc":50433},[30637,30640,30644,30648,30651,30656,30661,30664,30669,30674,30679,30682,30686,30691,30695,30700,30703,30708,30711,30714,30717,30720,30725,30728,30733,30738,30743,30748,30751,30755,30758,30763,31367,31372,31375,31380,31383,31386,31850,31853,31856,31859,31862,33913,33916,33921,33926,34721,34724,34729,35507,35511,37170,37174,37888,37892,37896,37901,37906,37911,37914,37919,37924,37929,37934,37939,37943,37948,39230,39235,39238,39241,39244,39399,39402,39405,40621,40626,41321,41325,41329,41334,41339,41342,41347,41352,41357,41362,41367,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41427,41432,41437,41442,41447,41452,41457,41462,41467,41472,41477,41482,41487,41492,41496,41500,41503,42981,42985,44632,44636,45330,45334,45337,45340,45884,45887,45891,45894,47291,47295,47298,47876,49663,49667,49670,50430],[10,30638,30634],{"id":30639},"_2经典神经网络",[177,30641,30643],{"id":30642},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22075,30645,30647],{"id":30646},"_211原理介绍","2.1.1.原理介绍",[14,30649,30650],{},"LeNet-5",[161,30652,30653],{},[119,30654,30655],{},"原理",[14,30657,30658],{},[1540,30659],{"alt":23,"src":30660},"\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,30662,30663],{},"B是batch批次；C是channel通道",[161,30665,30666],{"start":42},[119,30667,30668],{},"网络参数详细",[14,30670,30671],{},[1540,30672],{"alt":23,"src":30673},"\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,30675,30676],{},[1540,30677],{"alt":23,"src":30678},"\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,30680,30681],{},"AlexNet",[161,30683,30684],{},[119,30685,30655],{},[14,30687,30688],{},[1540,30689],{"alt":23,"src":30690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-006.png",[161,30692,30693],{"start":42},[119,30694,30668],{},[14,30696,30697],{},[1540,30698],{"alt":23,"src":30699},"\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,30701,30702],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30704,30705],{},[1540,30706],{"alt":23,"src":30707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,30709,30710],{},"数据处理中的图像增强操作:",[14,30712,30713],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30715,30716],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30718,30719],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30721,30722],{},[1540,30723],{"alt":23,"src":30724},"\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,30726,30727],{},"提升网络精确度的方法：LRN正则化",[14,30729,30730],{},[1540,30731],{"alt":23,"src":30732},"\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,30734,30735],{},[1540,30736],{"alt":23,"src":30737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[161,30739,30740],{"start":50},[119,30741,30742],{},"AlexNet的总结",[14,30744,30745],{},[1540,30746],{"alt":23,"src":30747},"\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,30749,30750],{},"比LeNet模型要深一丢丢",[22075,30752,30754],{"id":30753},"_212代码实现","2.1.2.代码实现",[14,30756,30757],{},"（1）LeNet",[161,30759,30760],{},[119,30761,30762],{},"模型搭建",[18,30764,30766],{"className":30429,"code":30765,"language":30431,"meta":23,"style":23},"# 导入库\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",[25,30767,30768,30773,30779,30784,30797,30802,30814,30818,30838,30843,30848,30859,30864,30883,30887,30892,30941,30953,30958,30987,31022,31049,31054,31066,31071,31091,31110,31129,31133,31138,31148,31165,31176,31191,31202,31213,31228,31243,31254,31261,31265,31279,31284,31307,31312,31317,31322,31326,31331,31336,31346],{"__ignoreMap":23},[28,30769,30770],{"class":30,"line":31},[28,30771,30772],{"class":269},"# 导入库\n",[28,30774,30775,30777],{"class":30,"line":42},[28,30776,30443],{"class":207},[28,30778,30446],{"class":211},[28,30780,30781],{"class":30,"line":50},[28,30782,30783],{"class":269},"# 导入神经网络层\n",[28,30785,30786,30789,30792,30794],{"class":30,"line":58},[28,30787,30788],{"class":207},"from",[28,30790,30791],{"class":211}," torch ",[28,30793,30443],{"class":207},[28,30795,30796],{"class":211}," nn\n",[28,30798,30799],{"class":30,"line":70},[28,30800,30801],{"class":269},"# 导入展示神经网络参数的包\n",[28,30803,30804,30806,30809,30811],{"class":30,"line":78},[28,30805,30788],{"class":207},[28,30807,30808],{"class":211}," torchsummary ",[28,30810,30443],{"class":207},[28,30812,30813],{"class":211}," summary\n",[28,30815,30816],{"class":30,"line":86},[28,30817,2477],{"emptyLinePlaceholder":134},[28,30819,30820,30822,30825,30827,30830,30832,30835],{"class":30,"line":97},[28,30821,14771],{"class":207},[28,30823,30824],{"class":34}," LeNet",[28,30826,212],{"class":211},[28,30828,30829],{"class":34},"nn",[28,30831,768],{"class":211},[28,30833,30834],{"class":34},"Module",[28,30836,30837],{"class":211},"):\n",[28,30839,30840],{"class":30,"line":108},[28,30841,30842],{"class":269},"    # 模型初始化:\n",[28,30844,30845],{"class":30,"line":1407},[28,30846,30847],{"class":269},"    # 定义一些网络层和激活函数\n",[28,30849,30850,30853,30856],{"class":30,"line":1690},[28,30851,30852],{"class":207},"    def",[28,30854,30855],{"class":38}," __init__",[28,30857,30858],{"class":211},"(self):\n",[28,30860,30861],{"class":30,"line":1695},[28,30862,30863],{"class":269},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[28,30865,30866,30869,30872,30875,30878,30881],{"class":30,"line":1701},[28,30867,30868],{"class":38},"        super",[28,30870,30871],{"class":211},"(LeNet,",[28,30873,30874],{"class":38},"self",[28,30876,30877],{"class":211},").",[28,30879,30880],{"class":38},"__init__",[28,30882,2053],{"class":211},[28,30884,30885],{"class":30,"line":1706},[28,30886,2477],{"emptyLinePlaceholder":134},[28,30888,30889],{"class":30,"line":1720},[28,30890,30891],{"class":269},"        # 定义网络层\n",[28,30893,30894,30897,30900,30902,30905,30908,30910,30912,30914,30917,30919,30921,30923,30926,30928,30930,30932,30935,30937,30939],{"class":30,"line":1725},[28,30895,30896],{"class":38},"        self",[28,30898,30899],{"class":211},".c1",[28,30901,257],{"class":207},[28,30903,30904],{"class":211},"nn.Conv2d(",[28,30906,30907],{"class":5293},"in_channels",[28,30909,257],{"class":207},[28,30911,427],{"class":38},[28,30913,588],{"class":211},[28,30915,30916],{"class":5293},"out_channels",[28,30918,257],{"class":207},[28,30920,554],{"class":38},[28,30922,588],{"class":211},[28,30924,30925],{"class":5293},"kernel_size",[28,30927,257],{"class":207},[28,30929,529],{"class":38},[28,30931,588],{"class":211},[28,30933,30934],{"class":5293},"padding",[28,30936,257],{"class":207},[28,30938,288],{"class":38},[28,30940,218],{"class":211},[28,30942,30943,30945,30948,30950],{"class":30,"line":1731},[28,30944,30896],{"class":38},[28,30946,30947],{"class":211},".sig",[28,30949,257],{"class":207},[28,30951,30952],{"class":211},"nn.Sigmoid()\n",[28,30954,30955],{"class":30,"line":1752},[28,30956,30957],{"class":269},"        # 定义池化\n",[28,30959,30960,30962,30965,30967,30970,30972,30974,30976,30978,30981,30983,30985],{"class":30,"line":1757},[28,30961,30896],{"class":38},[28,30963,30964],{"class":211},".s2",[28,30966,257],{"class":207},[28,30968,30969],{"class":211},"nn.AvgPool2d(",[28,30971,30925],{"class":5293},[28,30973,257],{"class":207},[28,30975,288],{"class":38},[28,30977,588],{"class":211},[28,30979,30980],{"class":5293},"stride",[28,30982,257],{"class":207},[28,30984,288],{"class":38},[28,30986,218],{"class":211},[28,30988,30989,30991,30994,30996,30998,31000,31002,31004,31006,31008,31010,31012,31014,31016,31018,31020],{"class":30,"line":1771},[28,30990,30896],{"class":38},[28,30992,30993],{"class":211},".c3",[28,30995,257],{"class":207},[28,30997,30904],{"class":211},[28,30999,30907],{"class":5293},[28,31001,257],{"class":207},[28,31003,554],{"class":38},[28,31005,588],{"class":211},[28,31007,30916],{"class":5293},[28,31009,257],{"class":207},[28,31011,811],{"class":38},[28,31013,588],{"class":211},[28,31015,30925],{"class":5293},[28,31017,257],{"class":207},[28,31019,529],{"class":38},[28,31021,218],{"class":211},[28,31023,31024,31026,31029,31031,31033,31035,31037,31039,31041,31043,31045,31047],{"class":30,"line":1776},[28,31025,30896],{"class":38},[28,31027,31028],{"class":211},".s4",[28,31030,257],{"class":207},[28,31032,30969],{"class":211},[28,31034,30925],{"class":5293},[28,31036,257],{"class":207},[28,31038,288],{"class":38},[28,31040,588],{"class":211},[28,31042,30980],{"class":5293},[28,31044,257],{"class":207},[28,31046,288],{"class":38},[28,31048,218],{"class":211},[28,31050,31051],{"class":30,"line":1805},[28,31052,31053],{"class":269},"        # 定义平展层\n",[28,31055,31056,31058,31061,31063],{"class":30,"line":1810},[28,31057,30896],{"class":38},[28,31059,31060],{"class":211},".flatten",[28,31062,257],{"class":207},[28,31064,31065],{"class":211},"nn.Flatten()\n",[28,31067,31068],{"class":30,"line":1827},[28,31069,31070],{"class":269},"        # 定义全连接层\n",[28,31072,31073,31075,31078,31080,31083,31085,31087,31089],{"class":30,"line":1832},[28,31074,30896],{"class":38},[28,31076,31077],{"class":211},".f5",[28,31079,257],{"class":207},[28,31081,31082],{"class":211},"nn.Linear(",[28,31084,4064],{"class":38},[28,31086,588],{"class":211},[28,31088,1027],{"class":38},[28,31090,218],{"class":211},[28,31092,31093,31095,31098,31100,31102,31104,31106,31108],{"class":30,"line":1837},[28,31094,30896],{"class":38},[28,31096,31097],{"class":211},".f6",[28,31099,257],{"class":207},[28,31101,31082],{"class":211},[28,31103,1027],{"class":38},[28,31105,588],{"class":211},[28,31107,921],{"class":38},[28,31109,218],{"class":211},[28,31111,31112,31114,31117,31119,31121,31123,31125,31127],{"class":30,"line":1842},[28,31113,30896],{"class":38},[28,31115,31116],{"class":211},".f7",[28,31118,257],{"class":207},[28,31120,31082],{"class":211},[28,31122,921],{"class":38},[28,31124,588],{"class":211},[28,31126,656],{"class":38},[28,31128,218],{"class":211},[28,31130,31131],{"class":30,"line":1856},[28,31132,2477],{"emptyLinePlaceholder":134},[28,31134,31135],{"class":30,"line":1861},[28,31136,31137],{"class":269},"    # 写工具->写前向传播\n",[28,31139,31140,31142,31145],{"class":30,"line":2654},[28,31141,30852],{"class":207},[28,31143,31144],{"class":34}," forward",[28,31146,31147],{"class":211},"(self,x):\n",[28,31149,31150,31153,31155,31157,31160,31162],{"class":30,"line":2668},[28,31151,31152],{"class":211},"        x",[28,31154,257],{"class":207},[28,31156,30874],{"class":38},[28,31158,31159],{"class":211},".sig(",[28,31161,30874],{"class":38},[28,31163,31164],{"class":211},".c1(x))\n",[28,31166,31167,31169,31171,31173],{"class":30,"line":2676},[28,31168,31152],{"class":211},[28,31170,257],{"class":207},[28,31172,30874],{"class":38},[28,31174,31175],{"class":211},".s2(x)\n",[28,31177,31178,31180,31182,31184,31186,31188],{"class":30,"line":2681},[28,31179,31152],{"class":211},[28,31181,257],{"class":207},[28,31183,30874],{"class":38},[28,31185,31159],{"class":211},[28,31187,30874],{"class":38},[28,31189,31190],{"class":211},".c3(x))\n",[28,31192,31193,31195,31197,31199],{"class":30,"line":2687},[28,31194,31152],{"class":211},[28,31196,257],{"class":207},[28,31198,30874],{"class":38},[28,31200,31201],{"class":211},".s4(x)\n",[28,31203,31204,31206,31208,31210],{"class":30,"line":2693},[28,31205,31152],{"class":211},[28,31207,257],{"class":207},[28,31209,30874],{"class":38},[28,31211,31212],{"class":211},".flatten(x)\n",[28,31214,31215,31217,31219,31221,31223,31225],{"class":30,"line":2698},[28,31216,31152],{"class":211},[28,31218,257],{"class":207},[28,31220,30874],{"class":38},[28,31222,31159],{"class":211},[28,31224,30874],{"class":38},[28,31226,31227],{"class":211},".f5(x))\n",[28,31229,31230,31232,31234,31236,31238,31240],{"class":30,"line":8025},[28,31231,31152],{"class":211},[28,31233,257],{"class":207},[28,31235,30874],{"class":38},[28,31237,31159],{"class":211},[28,31239,30874],{"class":38},[28,31241,31242],{"class":211},".f6(x))\n",[28,31244,31245,31247,31249,31251],{"class":30,"line":8049},[28,31246,31152],{"class":211},[28,31248,257],{"class":207},[28,31250,30874],{"class":38},[28,31252,31253],{"class":211},".f7(x)\n",[28,31255,31256,31258],{"class":30,"line":8054},[28,31257,14829],{"class":207},[28,31259,31260],{"class":211}," x\n",[28,31262,31263],{"class":30,"line":8060},[28,31264,2477],{"emptyLinePlaceholder":134},[28,31266,31267,31269,31272,31274,31277],{"class":30,"line":8087},[28,31268,1609],{"class":207},[28,31270,31271],{"class":38}," __name__",[28,31273,3026],{"class":207},[28,31275,31276],{"class":64},"\"__main__\"",[28,31278,3816],{"class":211},[28,31280,31281],{"class":30,"line":8092},[28,31282,31283],{"class":269},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[28,31285,31286,31289,31291,31293,31296,31298,31301,31303,31305],{"class":30,"line":8098},[28,31287,31288],{"class":211},"    device",[28,31290,257],{"class":207},[28,31292,30502],{"class":211},[28,31294,31295],{"class":64},"\"cuda\"",[28,31297,1782],{"class":207},[28,31299,31300],{"class":211}," torch.cuda.is_available() ",[28,31302,1779],{"class":207},[28,31304,30527],{"class":64},[28,31306,218],{"class":211},[28,31308,31309],{"class":30,"line":8110},[28,31310,31311],{"class":269},"    # 如果就是想指定用cpu用下方代码:\n",[28,31313,31314],{"class":30,"line":8122},[28,31315,31316],{"class":269},"    # device=\"cpu\"\n",[28,31318,31319],{"class":30,"line":8134},[28,31320,31321],{"class":269},"    # print(device)\n",[28,31323,31324],{"class":30,"line":9793},[28,31325,2477],{"emptyLinePlaceholder":134},[28,31327,31328],{"class":30,"line":9818},[28,31329,31330],{"class":269},"    # 实例化模型\n",[28,31332,31333],{"class":30,"line":9841},[28,31334,31335],{"class":269},"    # 将模型放到设备中去运行\n",[28,31337,31338,31341,31343],{"class":30,"line":9865},[28,31339,31340],{"class":211},"    model",[28,31342,257],{"class":207},[28,31344,31345],{"class":211},"LeNet().to(device)\n",[28,31347,31348,31351,31354,31356,31358,31360,31362,31364],{"class":30,"line":9870},[28,31349,31350],{"class":38},"    print",[28,31352,31353],{"class":211},"(summary(model,(",[28,31355,427],{"class":38},[28,31357,588],{"class":211},[28,31359,1111],{"class":38},[28,31361,588],{"class":211},[28,31363,1111],{"class":38},[28,31365,31366],{"class":211},")))\n",[14,31368,31369],{},[1540,31370],{"alt":23,"src":31371},"\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,31373,31374],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[161,31376,31377],{"start":42},[119,31378,31379],{},"训练",[14,31381,31382],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31384,31385],{},"在训练之前可以将数据展示看一下",[18,31387,31389],{"className":30429,"code":31388,"language":30431,"meta":23,"style":23},"# 建立画图的函数，用于展示数据\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",[25,31390,31391,31396,31401,31413,31425,31438,31443,31455,31460,31472,31477,31489,31493,31497,31518,31530,31535,31556,31567,31571,31576,31594,31605,31610,31621,31626,31637,31641,31646,31661,31674,31679,31684,31697,31710,31723,31728,31732,31737,31757,31774,31794,31807,31820,31830,31845],{"__ignoreMap":23},[28,31392,31393],{"class":30,"line":31},[28,31394,31395],{"class":269},"# 建立画图的函数，用于展示数据\n",[28,31397,31398],{"class":30,"line":42},[28,31399,31400],{"class":269},"# torchvision中包含很多内置的数据集\n",[28,31402,31403,31405,31408,31410],{"class":30,"line":50},[28,31404,30788],{"class":207},[28,31406,31407],{"class":211}," sklearn.externals.array_api_compat.torch ",[28,31409,30443],{"class":207},[28,31411,31412],{"class":211}," squeeze\n",[28,31414,31415,31417,31420,31422],{"class":30,"line":58},[28,31416,30788],{"class":207},[28,31418,31419],{"class":211}," torchvision.datasets ",[28,31421,30443],{"class":207},[28,31423,31424],{"class":211}," FashionMNIST\n",[28,31426,31427,31429,31432,31435],{"class":30,"line":70},[28,31428,30443],{"class":207},[28,31430,31431],{"class":211}," numpy ",[28,31433,31434],{"class":207},"as",[28,31436,31437],{"class":211}," np\n",[28,31439,31440],{"class":30,"line":78},[28,31441,31442],{"class":269},"# 引入处理数据集的包\n",[28,31444,31445,31447,31450,31452],{"class":30,"line":86},[28,31446,30788],{"class":207},[28,31448,31449],{"class":211}," torchvision ",[28,31451,30443],{"class":207},[28,31453,31454],{"class":211}," transforms\n",[28,31456,31457],{"class":30,"line":97},[28,31458,31459],{"class":269},"# 从torch库中引入数据处理的包\n",[28,31461,31462,31464,31467,31469],{"class":30,"line":108},[28,31463,30443],{"class":207},[28,31465,31466],{"class":211}," torch.utils.data ",[28,31468,31434],{"class":207},[28,31470,31471],{"class":211}," Data\n",[28,31473,31474],{"class":30,"line":1407},[28,31475,31476],{"class":269},"# 导入画图的库\n",[28,31478,31479,31481,31484,31486],{"class":30,"line":1690},[28,31480,30443],{"class":207},[28,31482,31483],{"class":211}," matplotlib.pyplot ",[28,31485,31434],{"class":207},[28,31487,31488],{"class":211}," plt\n",[28,31490,31491],{"class":30,"line":1695},[28,31492,2477],{"emptyLinePlaceholder":134},[28,31494,31495],{"class":30,"line":1701},[28,31496,2477],{"emptyLinePlaceholder":134},[28,31498,31499,31502,31504,31507,31510,31512,31515],{"class":30,"line":1706},[28,31500,31501],{"class":211},"train_data",[28,31503,257],{"class":207},[28,31505,31506],{"class":211},"FashionMNIST(",[28,31508,31509],{"class":5293},"root",[28,31511,257],{"class":207},[28,31513,31514],{"class":64},"'.\u002Fdata'",[28,31516,31517],{"class":211},",\n",[28,31519,31520,31523,31525,31528],{"class":30,"line":1720},[28,31521,31522],{"class":5293},"                        train",[28,31524,257],{"class":207},[28,31526,31527],{"class":38},"True",[28,31529,31517],{"class":211},[28,31531,31532],{"class":30,"line":1725},[28,31533,31534],{"class":269},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[28,31536,31537,31540,31542,31545,31548,31550,31553],{"class":30,"line":1731},[28,31538,31539],{"class":5293},"                        transform",[28,31541,257],{"class":207},[28,31543,31544],{"class":211},"transforms.Compose([transforms.Resize(",[28,31546,31547],{"class":5293},"size",[28,31549,257],{"class":207},[28,31551,31552],{"class":38},"224",[28,31554,31555],{"class":211},"),transforms.ToTensor()]),\n",[28,31557,31558,31561,31563,31565],{"class":30,"line":1752},[28,31559,31560],{"class":5293},"                        download",[28,31562,257],{"class":207},[28,31564,31527],{"class":38},[28,31566,218],{"class":211},[28,31568,31569],{"class":30,"line":1757},[28,31570,2477],{"emptyLinePlaceholder":134},[28,31572,31573],{"class":30,"line":1771},[28,31574,31575],{"class":269},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[28,31577,31578,31581,31583,31586,31589,31591],{"class":30,"line":1776},[28,31579,31580],{"class":211},"train_loader",[28,31582,257],{"class":207},[28,31584,31585],{"class":211},"Data.DataLoader(",[28,31587,31588],{"class":5293},"dataset",[28,31590,257],{"class":207},[28,31592,31593],{"class":211},"train_data,\n",[28,31595,31596,31599,31601,31603],{"class":30,"line":1805},[28,31597,31598],{"class":5293},"                             batch_size",[28,31600,257],{"class":207},[28,31602,413],{"class":38},[28,31604,31517],{"class":211},[28,31606,31607],{"class":30,"line":1810},[28,31608,31609],{"class":269},"                             # 数据是否打乱\n",[28,31611,31612,31615,31617,31619],{"class":30,"line":1827},[28,31613,31614],{"class":5293},"                             shuffle",[28,31616,257],{"class":207},[28,31618,31527],{"class":38},[28,31620,31517],{"class":211},[28,31622,31623],{"class":30,"line":1832},[28,31624,31625],{"class":269},"                             # 规定加载数据的进程\n",[28,31627,31628,31631,31633,31635],{"class":30,"line":1837},[28,31629,31630],{"class":5293},"                             num_workers",[28,31632,257],{"class":207},[28,31634,401],{"class":38},[28,31636,218],{"class":211},[28,31638,31639],{"class":30,"line":1842},[28,31640,2477],{"emptyLinePlaceholder":134},[28,31642,31643],{"class":30,"line":1856},[28,31644,31645],{"class":269},"# 获得一个batch的数据\n",[28,31647,31648,31650,31653,31655,31658],{"class":30,"line":1861},[28,31649,3102],{"class":207},[28,31651,31652],{"class":211}," step,(b_x,b_y) ",[28,31654,26094],{"class":207},[28,31656,31657],{"class":38}," enumerate",[28,31659,31660],{"class":211},"(train_loader):\n",[28,31662,31663,31665,31668,31670,31672],{"class":30,"line":2654},[28,31664,3178],{"class":207},[28,31666,31667],{"class":211}," step ",[28,31669,1170],{"class":207},[28,31671,4170],{"class":38},[28,31673,3816],{"class":211},[28,31675,31676],{"class":30,"line":2668},[28,31677,31678],{"class":207},"        break\n",[28,31680,31681],{"class":30,"line":2676},[28,31682,31683],{"class":269},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[28,31685,31686,31689,31691,31694],{"class":30,"line":2681},[28,31687,31688],{"class":211},"batch_x",[28,31690,257],{"class":207},[28,31692,31693],{"class":211},"b_x.squeeze().numpy()  ",[28,31695,31696],{"class":269},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[28,31698,31699,31702,31704,31707],{"class":30,"line":2687},[28,31700,31701],{"class":211},"batch_y",[28,31703,257],{"class":207},[28,31705,31706],{"class":211},"b_y.numpy()   ",[28,31708,31709],{"class":269},"#将张量转换成功numpy数组\n",[28,31711,31712,31715,31717,31720],{"class":30,"line":2693},[28,31713,31714],{"class":211},"class_label",[28,31716,257],{"class":207},[28,31718,31719],{"class":211},"train_data.classes  ",[28,31721,31722],{"class":269},"#训练集标签\n",[28,31724,31725],{"class":30,"line":2698},[28,31726,31727],{"class":269},"# print(class_label)\n",[28,31729,31730],{"class":30,"line":8025},[28,31731,2477],{"emptyLinePlaceholder":134},[28,31733,31734],{"class":30,"line":8049},[28,31735,31736],{"class":269},"# 可视化一个batch的图像\n",[28,31738,31739,31742,31745,31747,31749,31751,31753,31755],{"class":30,"line":8054},[28,31740,31741],{"class":211},"plt.figure(",[28,31743,31744],{"class":5293},"figsize",[28,31746,257],{"class":207},[28,31748,212],{"class":211},[28,31750,708],{"class":38},[28,31752,588],{"class":211},[28,31754,529],{"class":38},[28,31756,30548],{"class":211},[28,31758,31759,31761,31764,31766,31769,31771],{"class":30,"line":8060},[28,31760,3102],{"class":207},[28,31762,31763],{"class":211}," ii ",[28,31765,26094],{"class":207},[28,31767,31768],{"class":211}," np.arange(",[28,31770,7435],{"class":38},[28,31772,31773],{"class":211},"(batch_y)):\n",[28,31775,31776,31779,31781,31783,31785,31788,31790,31792],{"class":30,"line":8087},[28,31777,31778],{"class":211},"    plt.subplot(",[28,31780,503],{"class":38},[28,31782,588],{"class":211},[28,31784,811],{"class":38},[28,31786,31787],{"class":211},",ii ",[28,31789,691],{"class":207},[28,31791,25189],{"class":38},[28,31793,218],{"class":211},[28,31795,31796,31799,31802,31804],{"class":30,"line":8092},[28,31797,31798],{"class":211},"    plt.imshow(batch_x[ii,:,:],",[28,31800,31801],{"class":5293},"cmap",[28,31803,257],{"class":207},[28,31805,31806],{"class":211},"plt.cm.gray)\n",[28,31808,31809,31812,31814,31816,31818],{"class":30,"line":8098},[28,31810,31811],{"class":211},"    plt.title(class_label[batch_y[ii]],",[28,31813,31547],{"class":5293},[28,31815,257],{"class":207},[28,31817,656],{"class":38},[28,31819,218],{"class":211},[28,31821,31822,31825,31828],{"class":30,"line":8110},[28,31823,31824],{"class":211},"    plt.axis(",[28,31826,31827],{"class":64},"\"off\"",[28,31829,218],{"class":211},[28,31831,31832,31835,31838,31840,31843],{"class":30,"line":8122},[28,31833,31834],{"class":211},"    plt.subplots_adjust(",[28,31836,31837],{"class":5293},"wspace",[28,31839,257],{"class":207},[28,31841,31842],{"class":38},"0.05",[28,31844,218],{"class":211},[28,31846,31847],{"class":30,"line":8134},[28,31848,31849],{"class":211},"plt.show()\n",[14,31851,31852],{},"用matplotlib进行展示的过程可以后续再补",[14,31854,31855],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31857,31858],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31860,31861],{},"模型训练：",[18,31863,31865],{"className":30429,"code":31864,"language":30431,"meta":23,"style":23},"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",[25,31866,31867,31874,31881,31885,31897,31903,31914,31924,31934,31944,31954,31959,31971,31981,31985,31989,31994,32005,32018,32029,32046,32057,32096,32112,32124,32135,32140,32151,32167,32178,32189,32200,32207,32211,32216,32221,32225,32230,32240,32261,32265,32269,32274,32279,32284,32304,32308,32313,32323,32327,32332,32341,32346,32351,32356,32366,32370,32374,32379,32384,32394,32399,32409,32414,32423,32428,32437,32442,32451,32455,32460,32470,32474,32478,32483,32498,32526,32541,32545,32550,32555,32564,32569,32578,32583,32592,32597,32606,32611,32620,32625,32634,32639,32652,32657,32667,32672,32682,32688,32694,32700,32706,32717,32723,32743,32749,32760,32766,32772,32778,32784,32790,32796,32802,32822,32828,32844,32850,32864,32870,32885,32891,32900,32906,32915,32921,32927,32936,32942,32953,32959,32978,32984,32995,33001,33021,33037,33043,33057,33063,33069,33080,33086,33092,33102,33108,33119,33125,33135,33140,33146,33195,33242,33247,33253,33272,33278,33298,33304,33310,33320,33325,33331,33347,33392,33398,33404,33410,33421,33427,33433,33439,33457,33471,33480,33489,33498,33507,33513,33519,33527,33532,33538,33549,33555,33575,33581,33587,33593,33610,33616,33622,33628,33634,33640,33667,33691,33697,33703,33709,33720,33731,33737,33754,33777,33800,33806,33811,33820,33830,33836,33841,33847,33860,33866,33877,33888,33907],{"__ignoreMap":23},[28,31868,31869,31871],{"class":30,"line":31},[28,31870,30443],{"class":207},[28,31872,31873],{"class":211}," copy\n",[28,31875,31876,31878],{"class":30,"line":42},[28,31877,30443],{"class":207},[28,31879,31880],{"class":211}," time\n",[28,31882,31883],{"class":30,"line":50},[28,31884,2477],{"emptyLinePlaceholder":134},[28,31886,31887,31889,31892,31894],{"class":30,"line":58},[28,31888,30443],{"class":207},[28,31890,31891],{"class":211}," pandas ",[28,31893,31434],{"class":207},[28,31895,31896],{"class":211}," pd\n",[28,31898,31899,31901],{"class":30,"line":70},[28,31900,30443],{"class":207},[28,31902,30446],{"class":211},[28,31904,31905,31907,31909,31911],{"class":30,"line":78},[28,31906,30788],{"class":207},[28,31908,31466],{"class":211},[28,31910,30443],{"class":207},[28,31912,31913],{"class":211}," Dataset\n",[28,31915,31916,31918,31920,31922],{"class":30,"line":86},[28,31917,30788],{"class":207},[28,31919,31419],{"class":211},[28,31921,30443],{"class":207},[28,31923,31424],{"class":211},[28,31925,31926,31928,31930,31932],{"class":30,"line":97},[28,31927,30788],{"class":207},[28,31929,31449],{"class":211},[28,31931,30443],{"class":207},[28,31933,31454],{"class":211},[28,31935,31936,31938,31940,31942],{"class":30,"line":108},[28,31937,30443],{"class":207},[28,31939,31466],{"class":211},[28,31941,31434],{"class":207},[28,31943,31471],{"class":211},[28,31945,31946,31948,31950,31952],{"class":30,"line":1407},[28,31947,30443],{"class":207},[28,31949,31483],{"class":211},[28,31951,31434],{"class":207},[28,31953,31488],{"class":211},[28,31955,31956],{"class":30,"line":1690},[28,31957,31958],{"class":269},"# 导入模型\n",[28,31960,31961,31963,31966,31968],{"class":30,"line":1695},[28,31962,30788],{"class":207},[28,31964,31965],{"class":211}," model ",[28,31967,30443],{"class":207},[28,31969,31970],{"class":211}," LeNet\n",[28,31972,31973,31975,31977,31979],{"class":30,"line":1701},[28,31974,30788],{"class":207},[28,31976,30791],{"class":211},[28,31978,30443],{"class":207},[28,31980,30796],{"class":211},[28,31982,31983],{"class":30,"line":1706},[28,31984,2477],{"emptyLinePlaceholder":134},[28,31986,31987],{"class":30,"line":1720},[28,31988,2477],{"emptyLinePlaceholder":134},[28,31990,31991],{"class":30,"line":1725},[28,31992,31993],{"class":269},"# 处理训练集与验证集函数--->划分数据集\n",[28,31995,31996,31999,32002],{"class":30,"line":1731},[28,31997,31998],{"class":207},"def",[28,32000,32001],{"class":34}," train_val_data_process",[28,32003,32004],{"class":211},"():\n",[28,32006,32007,32010,32012,32014,32016],{"class":30,"line":1752},[28,32008,32009],{"class":211},"    train_data",[28,32011,257],{"class":207},[28,32013,31506],{"class":211},[28,32015,31514],{"class":64},[28,32017,31517],{"class":211},[28,32019,32020,32023,32025,32027],{"class":30,"line":1757},[28,32021,32022],{"class":5293},"                            train",[28,32024,257],{"class":207},[28,32026,31527],{"class":38},[28,32028,31517],{"class":211},[28,32030,32031,32034,32036,32038,32040,32042,32044],{"class":30,"line":1771},[28,32032,32033],{"class":5293},"                            transform",[28,32035,257],{"class":207},[28,32037,31544],{"class":211},[28,32039,31547],{"class":5293},[28,32041,257],{"class":207},[28,32043,1111],{"class":38},[28,32045,31555],{"class":211},[28,32047,32048,32051,32053,32055],{"class":30,"line":1776},[28,32049,32050],{"class":5293},"                            download",[28,32052,257],{"class":207},[28,32054,31527],{"class":38},[28,32056,218],{"class":211},[28,32058,32059,32062,32064,32067,32070,32072,32075,32077,32079,32082,32084,32086,32089,32091,32093],{"class":30,"line":1805},[28,32060,32061],{"class":211},"    train_data,val_data",[28,32063,257],{"class":207},[28,32065,32066],{"class":211},"Data.random_split(train_data,[",[28,32068,32069],{"class":38},"round",[28,32071,212],{"class":211},[28,32073,32074],{"class":38},"0.8",[28,32076,665],{"class":207},[28,32078,7435],{"class":38},[28,32080,32081],{"class":211},"(train_data)),",[28,32083,32069],{"class":38},[28,32085,212],{"class":211},[28,32087,32088],{"class":38},"0.2",[28,32090,665],{"class":207},[28,32092,7435],{"class":38},[28,32094,32095],{"class":211},"(train_data))])\n",[28,32097,32098,32101,32103,32106,32108,32110],{"class":30,"line":1810},[28,32099,32100],{"class":211},"    train_dataloader ",[28,32102,257],{"class":207},[28,32104,32105],{"class":211}," Data.DataLoader(",[28,32107,31588],{"class":5293},[28,32109,257],{"class":207},[28,32111,31593],{"class":211},[28,32113,32114,32117,32119,32122],{"class":30,"line":1827},[28,32115,32116],{"class":5293},"                                       batch_size",[28,32118,257],{"class":207},[28,32120,32121],{"class":38},"128",[28,32123,31517],{"class":211},[28,32125,32126,32129,32131,32133],{"class":30,"line":1832},[28,32127,32128],{"class":5293},"                                       shuffle",[28,32130,257],{"class":207},[28,32132,31527],{"class":38},[28,32134,31517],{"class":211},[28,32136,32137],{"class":30,"line":1837},[28,32138,32139],{"class":269},"                                       # 规定8个进程\n",[28,32141,32142,32145,32147,32149],{"class":30,"line":1842},[28,32143,32144],{"class":5293},"                                       num_workers",[28,32146,257],{"class":207},[28,32148,605],{"class":38},[28,32150,218],{"class":211},[28,32152,32153,32156,32158,32160,32162,32164],{"class":30,"line":1856},[28,32154,32155],{"class":211},"    val_dataloader",[28,32157,257],{"class":207},[28,32159,31585],{"class":211},[28,32161,31588],{"class":5293},[28,32163,257],{"class":207},[28,32165,32166],{"class":211},"val_data,\n",[28,32168,32169,32172,32174,32176],{"class":30,"line":1861},[28,32170,32171],{"class":5293},"                                   batch_size",[28,32173,257],{"class":207},[28,32175,32121],{"class":38},[28,32177,31517],{"class":211},[28,32179,32180,32183,32185,32187],{"class":30,"line":2654},[28,32181,32182],{"class":5293},"                                   shuffle",[28,32184,257],{"class":207},[28,32186,31527],{"class":38},[28,32188,31517],{"class":211},[28,32190,32191,32194,32196,32198],{"class":30,"line":2668},[28,32192,32193],{"class":5293},"                                   num_workers",[28,32195,257],{"class":207},[28,32197,605],{"class":38},[28,32199,218],{"class":211},[28,32201,32202,32204],{"class":30,"line":2676},[28,32203,4167],{"class":207},[28,32205,32206],{"class":211}," train_dataloader,val_dataloader\n",[28,32208,32209],{"class":30,"line":2681},[28,32210,2477],{"emptyLinePlaceholder":134},[28,32212,32213],{"class":30,"line":2687},[28,32214,32215],{"class":269},"# 验证是否出错\n",[28,32217,32218],{"class":30,"line":2693},[28,32219,32220],{"class":269},"# train_val_data_process()\n",[28,32222,32223],{"class":30,"line":2698},[28,32224,2477],{"emptyLinePlaceholder":134},[28,32226,32227],{"class":30,"line":8025},[28,32228,32229],{"class":269},"# 定义模型训练函数\n",[28,32231,32232,32234,32237],{"class":30,"line":8049},[28,32233,31998],{"class":207},[28,32235,32236],{"class":34}," train_model_process",[28,32238,32239],{"class":211},"(model,train_dataloader,val_dataloader,num_epochs):\n",[28,32241,32242,32244,32246,32248,32250,32252,32254,32256,32259],{"class":30,"line":8054},[28,32243,31288],{"class":211},[28,32245,257],{"class":207},[28,32247,30502],{"class":211},[28,32249,31295],{"class":64},[28,32251,1782],{"class":207},[28,32253,31300],{"class":211},[28,32255,1779],{"class":207},[28,32257,32258],{"class":64}," 'cpu'",[28,32260,218],{"class":211},[28,32262,32263],{"class":30,"line":8060},[28,32264,2477],{"emptyLinePlaceholder":134},[28,32266,32267],{"class":30,"line":8087},[28,32268,2477],{"emptyLinePlaceholder":134},[28,32270,32271],{"class":30,"line":8092},[28,32272,32273],{"class":269},"    # 定义优化器\n",[28,32275,32276],{"class":30,"line":8098},[28,32277,32278],{"class":269},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[28,32280,32281],{"class":30,"line":8110},[28,32282,32283],{"class":269},"    # lr为学习率\n",[28,32285,32286,32289,32291,32294,32297,32299,32302],{"class":30,"line":8122},[28,32287,32288],{"class":211},"    optimizer",[28,32290,257],{"class":207},[28,32292,32293],{"class":211},"torch.optim.Adam(model.parameters(),",[28,32295,32296],{"class":5293},"lr",[28,32298,257],{"class":207},[28,32300,32301],{"class":38},"0.001",[28,32303,218],{"class":211},[28,32305,32306],{"class":30,"line":8134},[28,32307,2477],{"emptyLinePlaceholder":134},[28,32309,32310],{"class":30,"line":9793},[28,32311,32312],{"class":269},"    # 定义损失函数使用交叉熵损失函数\n",[28,32314,32315,32318,32320],{"class":30,"line":9818},[28,32316,32317],{"class":211},"    criterion",[28,32319,257],{"class":207},[28,32321,32322],{"class":211},"nn.CrossEntropyLoss()\n",[28,32324,32325],{"class":30,"line":9841},[28,32326,2477],{"emptyLinePlaceholder":134},[28,32328,32329],{"class":30,"line":9865},[28,32330,32331],{"class":269},"    # 将模型放到GPU中进行训练\n",[28,32333,32334,32336,32338],{"class":30,"line":9870},[28,32335,31340],{"class":211},[28,32337,257],{"class":207},[28,32339,32340],{"class":211},"model.to(device)\n",[28,32342,32343],{"class":30,"line":9875},[28,32344,32345],{"class":269},"    # 复制当前模型的参数\n",[28,32347,32348],{"class":30,"line":9880},[28,32349,32350],{"class":269},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[28,32352,32353],{"class":30,"line":9889},[28,32354,32355],{"class":269},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[28,32357,32358,32361,32363],{"class":30,"line":9894},[28,32359,32360],{"class":211},"    best_model_wts",[28,32362,257],{"class":207},[28,32364,32365],{"class":211},"copy.deepcopy(model.state_dict())\n",[28,32367,32368],{"class":30,"line":9900},[28,32369,2477],{"emptyLinePlaceholder":134},[28,32371,32372],{"class":30,"line":9921},[28,32373,2477],{"emptyLinePlaceholder":134},[28,32375,32376],{"class":30,"line":9927},[28,32377,32378],{"class":269},"    # 初始化参数\n",[28,32380,32381],{"class":30,"line":9941},[28,32382,32383],{"class":269},"    # 最高准确度\n",[28,32385,32386,32389,32391],{"class":30,"line":9947},[28,32387,32388],{"class":211},"    best_acc",[28,32390,257],{"class":207},[28,32392,32393],{"class":38},"0.0\n",[28,32395,32396],{"class":30,"line":9974},[28,32397,32398],{"class":269},"    # 训练集损失列表\n",[28,32400,32401,32404,32406],{"class":30,"line":9983},[28,32402,32403],{"class":211},"    train_loss_all",[28,32405,257],{"class":207},[28,32407,32408],{"class":211},"[]\n",[28,32410,32411],{"class":30,"line":9989},[28,32412,32413],{"class":269},"    # 验证集函数列表\n",[28,32415,32416,32419,32421],{"class":30,"line":9997},[28,32417,32418],{"class":211},"    val_loss_all",[28,32420,257],{"class":207},[28,32422,32408],{"class":211},[28,32424,32425],{"class":30,"line":10002},[28,32426,32427],{"class":269},"    # 训练集准确度列表\n",[28,32429,32430,32433,32435],{"class":30,"line":16681},[28,32431,32432],{"class":211},"    train_acc_all",[28,32434,257],{"class":207},[28,32436,32408],{"class":211},[28,32438,32439],{"class":30,"line":16687},[28,32440,32441],{"class":269},"    # 验证集准确度列表\n",[28,32443,32444,32447,32449],{"class":30,"line":16710},[28,32445,32446],{"class":211},"    val_acc_all",[28,32448,257],{"class":207},[28,32450,32408],{"class":211},[28,32452,32453],{"class":30,"line":16716},[28,32454,2477],{"emptyLinePlaceholder":134},[28,32456,32457],{"class":30,"line":16739},[28,32458,32459],{"class":269},"    # 保存当前时间--->方便看每轮训练的时间\n",[28,32461,32462,32465,32467],{"class":30,"line":16753},[28,32463,32464],{"class":211},"    since",[28,32466,257],{"class":207},[28,32468,32469],{"class":211},"time.time()\n",[28,32471,32472],{"class":30,"line":16773},[28,32473,2477],{"emptyLinePlaceholder":134},[28,32475,32476],{"class":30,"line":16779},[28,32477,2477],{"emptyLinePlaceholder":134},[28,32479,32480],{"class":30,"line":16790},[28,32481,32482],{"class":269},"    # 准备工作完成--->开始训练模型\n",[28,32484,32485,32487,32490,32492,32495],{"class":30,"line":16813},[28,32486,3278],{"class":207},[28,32488,32489],{"class":211}," epoch ",[28,32491,26094],{"class":207},[28,32493,32494],{"class":38}," range",[28,32496,32497],{"class":211},"(num_epochs):\n",[28,32499,32500,32503,32505,32508,32511,32513,32515,32517,32520,32522,32524],{"class":30,"line":16835},[28,32501,32502],{"class":38},"        print",[28,32504,212],{"class":211},[28,32506,32507],{"class":64},"\"Epoch ",[28,32509,32510],{"class":38},"{}",[28,32512,794],{"class":64},[28,32514,32510],{"class":38},[28,32516,461],{"class":64},[28,32518,32519],{"class":211},".format(epoch,num_epochs",[28,32521,742],{"class":207},[28,32523,427],{"class":38},[28,32525,30548],{"class":211},[28,32527,32528,32530,32532,32535,32537,32539],{"class":30,"line":16840},[28,32529,32502],{"class":38},[28,32531,212],{"class":211},[28,32533,32534],{"class":64},"\"-\"",[28,32536,665],{"class":207},[28,32538,656],{"class":38},[28,32540,218],{"class":211},[28,32542,32543],{"class":30,"line":16846},[28,32544,2477],{"emptyLinePlaceholder":134},[28,32546,32547],{"class":30,"line":16860},[28,32548,32549],{"class":269},"        # 初始化参数\n",[28,32551,32552],{"class":30,"line":16873},[28,32553,32554],{"class":269},"        # 训练集损失函数\n",[28,32556,32557,32560,32562],{"class":30,"line":16878},[28,32558,32559],{"class":211},"        train_loss",[28,32561,257],{"class":207},[28,32563,32393],{"class":38},[28,32565,32566],{"class":30,"line":16892},[28,32567,32568],{"class":269},"        # 训练集准确度\n",[28,32570,32571,32574,32576],{"class":30,"line":16897},[28,32572,32573],{"class":211},"        train_corrects",[28,32575,257],{"class":207},[28,32577,3162],{"class":38},[28,32579,32580],{"class":30,"line":16903},[28,32581,32582],{"class":269},"        # 验证集损失函数\n",[28,32584,32585,32588,32590],{"class":30,"line":16908},[28,32586,32587],{"class":211},"        val_loss",[28,32589,257],{"class":207},[28,32591,32393],{"class":38},[28,32593,32594],{"class":30,"line":16922},[28,32595,32596],{"class":269},"        # 验证集准确度\n",[28,32598,32599,32602,32604],{"class":30,"line":16927},[28,32600,32601],{"class":211},"        val_corrects",[28,32603,257],{"class":207},[28,32605,3162],{"class":38},[28,32607,32608],{"class":30,"line":16932},[28,32609,32610],{"class":269},"        # 训练集样本数量\n",[28,32612,32613,32616,32618],{"class":30,"line":16946},[28,32614,32615],{"class":211},"        train_num",[28,32617,257],{"class":207},[28,32619,3162],{"class":38},[28,32621,32622],{"class":30,"line":16958},[28,32623,32624],{"class":269},"        # 验证集样本数量\n",[28,32626,32627,32630,32632],{"class":30,"line":16963},[28,32628,32629],{"class":211},"        val_num",[28,32631,257],{"class":207},[28,32633,3162],{"class":38},[28,32635,32636],{"class":30,"line":16976},[28,32637,32638],{"class":269},"        # 将数据放到设备,并开始训练\n",[28,32640,32641,32643,32645,32647,32649],{"class":30,"line":16981},[28,32642,3480],{"class":207},[28,32644,31652],{"class":211},[28,32646,26094],{"class":207},[28,32648,31657],{"class":38},[28,32650,32651],{"class":211},"(train_dataloader):\n",[28,32653,32654],{"class":30,"line":16986},[28,32655,32656],{"class":269},"            # 将特征放入到训练设备\n",[28,32658,32659,32662,32664],{"class":30,"line":16991},[28,32660,32661],{"class":211},"            b_x",[28,32663,257],{"class":207},[28,32665,32666],{"class":211},"b_x.to(device)\n",[28,32668,32669],{"class":30,"line":17004},[28,32670,32671],{"class":269},"            # 将标签放入到训练设备当中\n",[28,32673,32674,32677,32679],{"class":30,"line":17009},[28,32675,32676],{"class":211},"            b_y",[28,32678,257],{"class":207},[28,32680,32681],{"class":211},"b_y.to(device)\n",[28,32683,32685],{"class":30,"line":32684},98,[28,32686,32687],{"class":269},"            # 设置模型为训练模式\n",[28,32689,32691],{"class":30,"line":32690},99,[28,32692,32693],{"class":211},"            model.train()\n",[28,32695,32697],{"class":30,"line":32696},100,[28,32698,32699],{"class":269},"            # 将数据放到模型当中,开始前向传播\n",[28,32701,32703],{"class":30,"line":32702},101,[28,32704,32705],{"class":269},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[28,32707,32709,32712,32714],{"class":30,"line":32708},102,[28,32710,32711],{"class":211},"            output",[28,32713,257],{"class":207},[28,32715,32716],{"class":211},"model(b_x)\n",[28,32718,32720],{"class":30,"line":32719},103,[28,32721,32722],{"class":269},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[28,32724,32726,32729,32731,32734,32737,32739,32741],{"class":30,"line":32725},104,[28,32727,32728],{"class":211},"            pre_lab",[28,32730,257],{"class":207},[28,32732,32733],{"class":211},"torch.argmax(output,",[28,32735,32736],{"class":5293},"dim",[28,32738,257],{"class":207},[28,32740,427],{"class":38},[28,32742,218],{"class":211},[28,32744,32746],{"class":30,"line":32745},105,[28,32747,32748],{"class":269},"            # 计算每一个batch的损失函数\n",[28,32750,32752,32755,32757],{"class":30,"line":32751},106,[28,32753,32754],{"class":211},"            loss",[28,32756,257],{"class":207},[28,32758,32759],{"class":211},"criterion(output,b_y)\n",[28,32761,32763],{"class":30,"line":32762},107,[28,32764,32765],{"class":269},"            # 将梯度初始化为0\n",[28,32767,32769],{"class":30,"line":32768},108,[28,32770,32771],{"class":211},"            optimizer.zero_grad()\n",[28,32773,32775],{"class":30,"line":32774},109,[28,32776,32777],{"class":269},"            # 梯度置为0后再进行反向传播\n",[28,32779,32781],{"class":30,"line":32780},110,[28,32782,32783],{"class":211},"            loss.backward()\n",[28,32785,32787],{"class":30,"line":32786},111,[28,32788,32789],{"class":269},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[28,32791,32793],{"class":30,"line":32792},112,[28,32794,32795],{"class":211},"            optimizer.step()\n",[28,32797,32799],{"class":30,"line":32798},113,[28,32800,32801],{"class":269},"            # loss.item()指的是batch的平均损失\n",[28,32803,32805,32808,32810,32813,32815,32818,32820],{"class":30,"line":32804},114,[28,32806,32807],{"class":211},"            train_loss",[28,32809,9554],{"class":207},[28,32811,32812],{"class":211},"loss.item()",[28,32814,665],{"class":207},[28,32816,32817],{"class":211},"b_x.size(",[28,32819,401],{"class":38},[28,32821,218],{"class":211},[28,32823,32825],{"class":30,"line":32824},115,[28,32826,32827],{"class":269},"            # 计算每个批次中正确预测的数量\n",[28,32829,32831,32834,32836,32839,32841],{"class":30,"line":32830},116,[28,32832,32833],{"class":211},"            train_corrects",[28,32835,9554],{"class":207},[28,32837,32838],{"class":211},"torch.sum(pre_lab",[28,32840,3026],{"class":207},[28,32842,32843],{"class":211},"b_y.data)\n",[28,32845,32847],{"class":30,"line":32846},117,[28,32848,32849],{"class":269},"            # 计算目前为止一共处理了多少样本\n",[28,32851,32853,32856,32858,32860,32862],{"class":30,"line":32852},118,[28,32854,32855],{"class":211},"            train_num",[28,32857,9554],{"class":207},[28,32859,32817],{"class":211},[28,32861,401],{"class":38},[28,32863,218],{"class":211},[28,32865,32867],{"class":30,"line":32866},119,[28,32868,32869],{"class":269},"        # 验证数据\n",[28,32871,32873,32875,32878,32880,32882],{"class":30,"line":32872},120,[28,32874,3480],{"class":207},[28,32876,32877],{"class":211}," step ,(b_x,b_y) ",[28,32879,26094],{"class":207},[28,32881,31657],{"class":38},[28,32883,32884],{"class":211},"(val_dataloader):\n",[28,32886,32888],{"class":30,"line":32887},121,[28,32889,32890],{"class":269},"            # 将特征放到验证设备当中\n",[28,32892,32894,32896,32898],{"class":30,"line":32893},122,[28,32895,32661],{"class":211},[28,32897,257],{"class":207},[28,32899,32666],{"class":211},[28,32901,32903],{"class":30,"line":32902},123,[28,32904,32905],{"class":269},"            # 将标签放到放到训练设备当中\n",[28,32907,32909,32911,32913],{"class":30,"line":32908},124,[28,32910,32676],{"class":211},[28,32912,257],{"class":207},[28,32914,32681],{"class":211},[28,32916,32918],{"class":30,"line":32917},125,[28,32919,32920],{"class":269},"            # 开启验证模式，设置模型为评估模式\n",[28,32922,32924],{"class":30,"line":32923},126,[28,32925,32926],{"class":211},"            model.eval()\n",[28,32928,32930,32933],{"class":30,"line":32929},127,[28,32931,32932],{"class":207},"            with",[28,32934,32935],{"class":211}," torch.no_grad():\n",[28,32937,32939],{"class":30,"line":32938},128,[28,32940,32941],{"class":269},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[28,32943,32945,32948,32950],{"class":30,"line":32944},129,[28,32946,32947],{"class":211},"                output ",[28,32949,257],{"class":207},[28,32951,32952],{"class":211}," model(b_x)\n",[28,32954,32956],{"class":30,"line":32955},130,[28,32957,32958],{"class":269},"                # 查找每一行中最大值对应的下标\n",[28,32960,32962,32965,32967,32970,32972,32974,32976],{"class":30,"line":32961},131,[28,32963,32964],{"class":211},"                pre_lab ",[28,32966,257],{"class":207},[28,32968,32969],{"class":211}," torch.argmax(output, ",[28,32971,32736],{"class":5293},[28,32973,257],{"class":207},[28,32975,427],{"class":38},[28,32977,218],{"class":211},[28,32979,32981],{"class":30,"line":32980},132,[28,32982,32983],{"class":269},"                # 计算验证集上的当前 batch 损失\n",[28,32985,32987,32990,32992],{"class":30,"line":32986},133,[28,32988,32989],{"class":211},"                val_batch_loss ",[28,32991,257],{"class":207},[28,32993,32994],{"class":211}," criterion(output, b_y)\n",[28,32996,32998],{"class":30,"line":32997},134,[28,32999,33000],{"class":269},"                # 对损失函数进行累加（按样本数加权）\n",[28,33002,33004,33007,33009,33012,33014,33017,33019],{"class":30,"line":33003},135,[28,33005,33006],{"class":211},"                val_loss ",[28,33008,9554],{"class":207},[28,33010,33011],{"class":211}," val_batch_loss.item() ",[28,33013,665],{"class":207},[28,33015,33016],{"class":211}," b_x.size(",[28,33018,401],{"class":38},[28,33020,218],{"class":211},[28,33022,33024,33027,33029,33032,33034],{"class":30,"line":33023},136,[28,33025,33026],{"class":211},"                val_corrects ",[28,33028,9554],{"class":207},[28,33030,33031],{"class":211}," torch.sum(pre_lab ",[28,33033,3026],{"class":207},[28,33035,33036],{"class":211}," b_y.data)\n",[28,33038,33040],{"class":30,"line":33039},137,[28,33041,33042],{"class":269},"                # 当前用于验证的样本数量\n",[28,33044,33046,33049,33051,33053,33055],{"class":30,"line":33045},138,[28,33047,33048],{"class":211},"            val_num ",[28,33050,9554],{"class":207},[28,33052,33016],{"class":211},[28,33054,401],{"class":38},[28,33056,218],{"class":211},[28,33058,33060],{"class":30,"line":33059},139,[28,33061,33062],{"class":269},"        # 计算并保存每一次迭代的loss值和准确率\n",[28,33064,33066],{"class":30,"line":33065},140,[28,33067,33068],{"class":269},"        # 计算并保存训练集的loss值\n",[28,33070,33072,33075,33077],{"class":30,"line":33071},141,[28,33073,33074],{"class":211},"        train_loss_all.append(train_loss",[28,33076,794],{"class":207},[28,33078,33079],{"class":211},"train_num)\n",[28,33081,33083],{"class":30,"line":33082},142,[28,33084,33085],{"class":269},"        # 取双精度\n",[28,33087,33089],{"class":30,"line":33088},143,[28,33090,33091],{"class":269},"        # 计算并保存训练集的准确率\n",[28,33093,33095,33098,33100],{"class":30,"line":33094},144,[28,33096,33097],{"class":211},"        train_acc_all.append(train_corrects.double().item()",[28,33099,794],{"class":207},[28,33101,33079],{"class":211},[28,33103,33105],{"class":30,"line":33104},145,[28,33106,33107],{"class":269},"        # 计算并保存验证集的loss值\n",[28,33109,33111,33114,33116],{"class":30,"line":33110},146,[28,33112,33113],{"class":211},"        val_loss_all.append(val_loss",[28,33115,794],{"class":207},[28,33117,33118],{"class":211},"val_num)\n",[28,33120,33122],{"class":30,"line":33121},147,[28,33123,33124],{"class":269},"        # 计算并保存验证集的准确率\n",[28,33126,33128,33131,33133],{"class":30,"line":33127},148,[28,33129,33130],{"class":211},"        val_acc_all.append(val_corrects.double().item()",[28,33132,794],{"class":207},[28,33134,33118],{"class":211},[28,33136,33138],{"class":30,"line":33137},149,[28,33139,2477],{"emptyLinePlaceholder":134},[28,33141,33143],{"class":30,"line":33142},150,[28,33144,33145],{"class":269},"        # 打印训练一轮的loss值和准确率\n",[28,33147,33149,33151,33153,33155,33157,33160,33162,33165,33167,33170,33172,33174,33176,33178,33181,33183,33185,33188,33190,33192],{"class":30,"line":33148},151,[28,33150,32502],{"class":38},[28,33152,212],{"class":211},[28,33154,3669],{"class":64},[28,33156,32510],{"class":38},[28,33158,33159],{"class":64},"train loss:",[28,33161,1106],{"class":38},[28,33163,33164],{"class":207},":.4f",[28,33166,1156],{"class":38},[28,33168,33169],{"class":64}," train acc:",[28,33171,1106],{"class":38},[28,33173,33164],{"class":207},[28,33175,1156],{"class":38},[28,33177,3669],{"class":64},[28,33179,33180],{"class":211},".format(epoch,train_loss_all[",[28,33182,742],{"class":207},[28,33184,427],{"class":38},[28,33186,33187],{"class":211},"],train_acc_all[",[28,33189,742],{"class":207},[28,33191,427],{"class":38},[28,33193,33194],{"class":211},"]))\n",[28,33196,33198,33200,33202,33204,33206,33209,33211,33213,33215,33218,33220,33222,33224,33226,33229,33231,33233,33236,33238,33240],{"class":30,"line":33197},152,[28,33199,32502],{"class":38},[28,33201,212],{"class":211},[28,33203,3669],{"class":64},[28,33205,32510],{"class":38},[28,33207,33208],{"class":64},"val loss:",[28,33210,1106],{"class":38},[28,33212,33164],{"class":207},[28,33214,1156],{"class":38},[28,33216,33217],{"class":64}," val acc:",[28,33219,1106],{"class":38},[28,33221,33164],{"class":207},[28,33223,1156],{"class":38},[28,33225,3669],{"class":64},[28,33227,33228],{"class":211},".format(epoch,val_loss_all[",[28,33230,742],{"class":207},[28,33232,427],{"class":38},[28,33234,33235],{"class":211},"],val_acc_all[",[28,33237,742],{"class":207},[28,33239,427],{"class":38},[28,33241,33194],{"class":211},[28,33243,33245],{"class":30,"line":33244},153,[28,33246,2477],{"emptyLinePlaceholder":134},[28,33248,33250],{"class":30,"line":33249},154,[28,33251,33252],{"class":269},"        # 判断准确度--->保存最优模型\n",[28,33254,33256,33258,33261,33263,33265,33267,33269],{"class":30,"line":33255},155,[28,33257,2574],{"class":207},[28,33259,33260],{"class":211}," val_acc_all[",[28,33262,742],{"class":207},[28,33264,427],{"class":38},[28,33266,1150],{"class":211},[28,33268,1170],{"class":207},[28,33270,33271],{"class":211},"best_acc:\n",[28,33273,33275],{"class":30,"line":33274},156,[28,33276,33277],{"class":269},"            # 保存当前模型准确度\n",[28,33279,33281,33284,33286,33288,33291,33293,33295],{"class":30,"line":33280},157,[28,33282,33283],{"class":211},"            best_acc:",[28,33285,251],{"class":38},[28,33287,257],{"class":207},[28,33289,33290],{"class":211},"val_acc_all[",[28,33292,742],{"class":207},[28,33294,427],{"class":38},[28,33296,33297],{"class":211},"]\n",[28,33299,33301],{"class":30,"line":33300},158,[28,33302,33303],{"class":269},"            # 保存当前的准确度\n",[28,33305,33307],{"class":30,"line":33306},159,[28,33308,33309],{"class":269},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[28,33311,33313,33316,33318],{"class":30,"line":33312},160,[28,33314,33315],{"class":211},"            best_model_wts",[28,33317,257],{"class":207},[28,33319,32365],{"class":211},[28,33321,33323],{"class":30,"line":33322},161,[28,33324,2477],{"emptyLinePlaceholder":134},[28,33326,33328],{"class":30,"line":33327},162,[28,33329,33330],{"class":269},"        # 计算耗时\n",[28,33332,33334,33337,33339,33342,33344],{"class":30,"line":33333},163,[28,33335,33336],{"class":211},"        time_use",[28,33338,257],{"class":207},[28,33340,33341],{"class":211},"time.time()",[28,33343,742],{"class":207},[28,33345,33346],{"class":211},"since\n",[28,33348,33350,33352,33354,33357,33359,33362,33364,33366,33368,33370,33372,33375,33378,33381,33383,33386,33388,33390],{"class":30,"line":33349},164,[28,33351,32502],{"class":38},[28,33353,212],{"class":211},[28,33355,33356],{"class":64},"'训练和验证耗费的时间",[28,33358,1106],{"class":38},[28,33360,33361],{"class":207},":.0f",[28,33363,1156],{"class":38},[28,33365,754],{"class":64},[28,33367,1106],{"class":38},[28,33369,33361],{"class":207},[28,33371,1156],{"class":38},[28,33373,33374],{"class":64},"s'",[28,33376,33377],{"class":211},".format(time_use",[28,33379,33380],{"class":207},"\u002F\u002F",[28,33382,1117],{"class":38},[28,33384,33385],{"class":211},",time_use",[28,33387,538],{"class":207},[28,33389,1117],{"class":38},[28,33391,30548],{"class":211},[28,33393,33395],{"class":30,"line":33394},165,[28,33396,33397],{"class":269},"    # 选择最优参数\n",[28,33399,33401],{"class":30,"line":33400},166,[28,33402,33403],{"class":269},"    # 加载最高准确率下的模型参数\n",[28,33405,33407],{"class":30,"line":33406},167,[28,33408,33409],{"class":269},"    # model.load_state_dict(best_model_wts)\n",[28,33411,33413,33416,33419],{"class":30,"line":33412},168,[28,33414,33415],{"class":211},"    torch.save(model.state_dict(best_model_wts), ",[28,33417,33418],{"class":64},"'.\u002Fbest_model.pth'",[28,33420,218],{"class":211},[28,33422,33424],{"class":30,"line":33423},169,[28,33425,33426],{"class":269},"    # 或者写成\n",[28,33428,33430],{"class":30,"line":33429},170,[28,33431,33432],{"class":269},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[28,33434,33436],{"class":30,"line":33435},171,[28,33437,33438],{"class":269},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[28,33440,33442,33445,33447,33450,33453,33455],{"class":30,"line":33441},172,[28,33443,33444],{"class":211},"    train_process",[28,33446,257],{"class":207},[28,33448,33449],{"class":211},"pd.DataFrame(",[28,33451,33452],{"class":5293},"data",[28,33454,257],{"class":207},[28,33456,1624],{"class":211},[28,33458,33460,33463,33465,33468],{"class":30,"line":33459},173,[28,33461,33462],{"class":64},"        \"epoch\"",[28,33464,1069],{"class":211},[28,33466,33467],{"class":38},"range",[28,33469,33470],{"class":211},"(num_epochs),\n",[28,33472,33474,33477],{"class":30,"line":33473},174,[28,33475,33476],{"class":64},"        \"train_loss_all\"",[28,33478,33479],{"class":211},":train_loss_all,\n",[28,33481,33483,33486],{"class":30,"line":33482},175,[28,33484,33485],{"class":64},"        \"val_loss_all\"",[28,33487,33488],{"class":211},":val_loss_all,\n",[28,33490,33492,33495],{"class":30,"line":33491},176,[28,33493,33494],{"class":64},"        \"train_acc_all\"",[28,33496,33497],{"class":211},":train_acc_all,\n",[28,33499,33501,33504],{"class":30,"line":33500},177,[28,33502,33503],{"class":64},"        \"val_acc_all\"",[28,33505,33506],{"class":211},":val_acc_all\n",[28,33508,33510],{"class":30,"line":33509},178,[28,33511,33512],{"class":211},"    })\n",[28,33514,33516],{"class":30,"line":33515},179,[28,33517,33518],{"class":269},"    # 返回训练保存的过程\n",[28,33520,33522,33524],{"class":30,"line":33521},180,[28,33523,4167],{"class":207},[28,33525,33526],{"class":211}," train_process\n",[28,33528,33530],{"class":30,"line":33529},181,[28,33531,2477],{"emptyLinePlaceholder":134},[28,33533,33535],{"class":30,"line":33534},182,[28,33536,33537],{"class":269},"# 将loss值和精度按照图片的形式展示出来\n",[28,33539,33541,33543,33546],{"class":30,"line":33540},183,[28,33542,31998],{"class":207},[28,33544,33545],{"class":34}," matplot_acc_loss",[28,33547,33548],{"class":211},"(train_process):\n",[28,33550,33552],{"class":30,"line":33551},184,[28,33553,33554],{"class":269},"    # 设置图的大小\n",[28,33556,33558,33561,33563,33565,33567,33569,33571,33573],{"class":30,"line":33557},185,[28,33559,33560],{"class":211},"    plt.figure(",[28,33562,31744],{"class":5293},[28,33564,257],{"class":207},[28,33566,212],{"class":211},[28,33568,708],{"class":38},[28,33570,588],{"class":211},[28,33572,503],{"class":38},[28,33574,30548],{"class":211},[28,33576,33578],{"class":30,"line":33577},186,[28,33579,33580],{"class":269},"    # 设置图中有几张图\n",[28,33582,33584],{"class":30,"line":33583},187,[28,33585,33586],{"class":269},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[28,33588,33590],{"class":30,"line":33589},188,[28,33591,33592],{"class":269},"    # ①loss图\n",[28,33594,33596,33598,33600,33602,33604,33606,33608],{"class":30,"line":33595},189,[28,33597,31778],{"class":211},[28,33599,427],{"class":38},[28,33601,588],{"class":211},[28,33603,288],{"class":38},[28,33605,588],{"class":211},[28,33607,427],{"class":38},[28,33609,218],{"class":211},[28,33611,33613],{"class":30,"line":33612},190,[28,33614,33615],{"class":269},"    # 补充:\n",[28,33617,33619],{"class":30,"line":33618},191,[28,33620,33621],{"class":269},"    # plt.subplot(nrows, ncols, index)\n",[28,33623,33625],{"class":30,"line":33624},192,[28,33626,33627],{"class":269},"    # nrows：行数\n",[28,33629,33631],{"class":30,"line":33630},193,[28,33632,33633],{"class":269},"    # ncols：列数\n",[28,33635,33637],{"class":30,"line":33636},194,[28,33638,33639],{"class":269},"    # index：目前选中第几个子图（从1开始）\n",[28,33641,33643,33646,33649,33652,33655,33657,33660,33662,33665],{"class":30,"line":33642},195,[28,33644,33645],{"class":211},"    plt.plot(train_process[",[28,33647,33648],{"class":64},"\"epoch\"",[28,33650,33651],{"class":211},"],train_process.train_loss_all,",[28,33653,33654],{"class":64},"'ro-'",[28,33656,588],{"class":211},[28,33658,33659],{"class":5293},"label",[28,33661,257],{"class":207},[28,33663,33664],{"class":64},"'train loss'",[28,33666,218],{"class":211},[28,33668,33670,33672,33674,33677,33680,33682,33684,33686,33689],{"class":30,"line":33669},196,[28,33671,33645],{"class":211},[28,33673,33648],{"class":64},[28,33675,33676],{"class":211},"],train_process.val_loss_all,",[28,33678,33679],{"class":64},"'bs--'",[28,33681,588],{"class":211},[28,33683,33659],{"class":5293},[28,33685,257],{"class":207},[28,33687,33688],{"class":64},"'val loss'",[28,33690,218],{"class":211},[28,33692,33694],{"class":30,"line":33693},197,[28,33695,33696],{"class":269},"    # 添加一个图例\n",[28,33698,33700],{"class":30,"line":33699},198,[28,33701,33702],{"class":211},"    plt.legend()\n",[28,33704,33706],{"class":30,"line":33705},199,[28,33707,33708],{"class":269},"    # 给轴添加标签\n",[28,33710,33712,33715,33718],{"class":30,"line":33711},200,[28,33713,33714],{"class":211},"    plt.xlabel(",[28,33716,33717],{"class":64},"'epoch'",[28,33719,218],{"class":211},[28,33721,33723,33726,33729],{"class":30,"line":33722},201,[28,33724,33725],{"class":211},"    plt.ylabel(",[28,33727,33728],{"class":64},"'loss'",[28,33730,218],{"class":211},[28,33732,33734],{"class":30,"line":33733},202,[28,33735,33736],{"class":269},"    # ②准确度图\n",[28,33738,33740,33742,33744,33746,33748,33750,33752],{"class":30,"line":33739},203,[28,33741,31778],{"class":211},[28,33743,427],{"class":38},[28,33745,588],{"class":211},[28,33747,288],{"class":38},[28,33749,588],{"class":211},[28,33751,288],{"class":38},[28,33753,218],{"class":211},[28,33755,33757,33759,33761,33764,33766,33768,33770,33772,33775],{"class":30,"line":33756},204,[28,33758,33645],{"class":211},[28,33760,33648],{"class":64},[28,33762,33763],{"class":211},"],train_process.train_acc_all,",[28,33765,33654],{"class":64},[28,33767,588],{"class":211},[28,33769,33659],{"class":5293},[28,33771,257],{"class":207},[28,33773,33774],{"class":64},"'train acc'",[28,33776,218],{"class":211},[28,33778,33780,33782,33784,33787,33789,33791,33793,33795,33798],{"class":30,"line":33779},205,[28,33781,33645],{"class":211},[28,33783,33648],{"class":64},[28,33785,33786],{"class":211},"],train_process.val_acc_all,",[28,33788,33679],{"class":64},[28,33790,588],{"class":211},[28,33792,33659],{"class":5293},[28,33794,257],{"class":207},[28,33796,33797],{"class":64},"'val acc'",[28,33799,218],{"class":211},[28,33801,33803],{"class":30,"line":33802},206,[28,33804,33805],{"class":269},"    # 添加图例\n",[28,33807,33809],{"class":30,"line":33808},207,[28,33810,33702],{"class":211},[28,33812,33814,33816,33818],{"class":30,"line":33813},208,[28,33815,33714],{"class":211},[28,33817,33648],{"class":64},[28,33819,218],{"class":211},[28,33821,33823,33825,33828],{"class":30,"line":33822},209,[28,33824,33725],{"class":211},[28,33826,33827],{"class":64},"\"acc\"",[28,33829,218],{"class":211},[28,33831,33833],{"class":30,"line":33832},210,[28,33834,33835],{"class":211},"    plt.show()\n",[28,33837,33839],{"class":30,"line":33838},211,[28,33840,2477],{"emptyLinePlaceholder":134},[28,33842,33844],{"class":30,"line":33843},212,[28,33845,33846],{"class":269},"# 正式开始训练:\n",[28,33848,33850,33852,33854,33856,33858],{"class":30,"line":33849},213,[28,33851,1609],{"class":207},[28,33853,31271],{"class":38},[28,33855,3026],{"class":207},[28,33857,31276],{"class":64},[28,33859,3816],{"class":211},[28,33861,33863],{"class":30,"line":33862},214,[28,33864,33865],{"class":269},"    # 将模型实例化\n",[28,33867,33869,33872,33874],{"class":30,"line":33868},215,[28,33870,33871],{"class":211},"    LeNet",[28,33873,257],{"class":207},[28,33875,33876],{"class":211},"LeNet()\n",[28,33878,33880,33883,33885],{"class":30,"line":33879},216,[28,33881,33882],{"class":211},"    train_dataloader,val_dataloader",[28,33884,257],{"class":207},[28,33886,33887],{"class":211},"train_val_data_process()\n",[28,33889,33891,33893,33895,33898,33901,33903,33905],{"class":30,"line":33890},217,[28,33892,33444],{"class":211},[28,33894,257],{"class":207},[28,33896,33897],{"class":211},"train_model_process(LeNet,train_dataloader,val_dataloader,",[28,33899,33900],{"class":5293},"num_epochs",[28,33902,257],{"class":207},[28,33904,910],{"class":38},[28,33906,218],{"class":211},[28,33908,33910],{"class":30,"line":33909},218,[28,33911,33912],{"class":211},"    matplot_acc_loss(train_process)\n",[14,33914,33915],{},"画图的补充点学习：",[14,33917,33918],{},[1540,33919],{"alt":23,"src":33920},"\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",[161,33922,33923],{"start":50},[119,33924,33925],{},"测试",[18,33927,33929],{"className":30429,"code":33928,"language":30431,"meta":23,"style":23},"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",[25,33930,33931,33937,33947,33959,33969,33974,33984,33994,33998,34003,34012,34029,34041,34058,34069,34085,34090,34101,34112,34123,34130,34134,34139,34149,34154,34171,34179,34183,34188,34197,34206,34210,34215,34220,34225,34232,34237,34249,34259,34269,34274,34278,34283,34292,34297,34313,34318,34323,34328,34342,34347,34361,34365,34370,34385,34390,34402,34406,34411,34423,34428,34436,34441,34446,34456,34461,34470,34475,34480,34484,34489,34494,34510,34518,34523,34528,34587,34593,34598,34609,34617,34625,34629,34634,34638,34643,34651,34656,34672,34677,34687,34697],{"__ignoreMap":23},[28,33932,33933,33935],{"class":30,"line":31},[28,33934,30443],{"class":207},[28,33936,30446],{"class":211},[28,33938,33939,33941,33943,33945],{"class":30,"line":42},[28,33940,30443],{"class":207},[28,33942,31466],{"class":211},[28,33944,31434],{"class":207},[28,33946,31471],{"class":211},[28,33948,33949,33951,33954,33956],{"class":30,"line":50},[28,33950,30788],{"class":207},[28,33952,33953],{"class":211}," jupyter_client.consoleapp ",[28,33955,30443],{"class":207},[28,33957,33958],{"class":211}," classes\n",[28,33960,33961,33963,33965,33967],{"class":30,"line":58},[28,33962,30788],{"class":207},[28,33964,31449],{"class":211},[28,33966,30443],{"class":207},[28,33968,31454],{"class":211},[28,33970,33971],{"class":30,"line":70},[28,33972,33973],{"class":269},"# 导入数据集\n",[28,33975,33976,33978,33980,33982],{"class":30,"line":78},[28,33977,30788],{"class":207},[28,33979,31419],{"class":211},[28,33981,30443],{"class":207},[28,33983,31424],{"class":211},[28,33985,33986,33988,33990,33992],{"class":30,"line":86},[28,33987,30788],{"class":207},[28,33989,31965],{"class":211},[28,33991,30443],{"class":207},[28,33993,31970],{"class":211},[28,33995,33996],{"class":30,"line":97},[28,33997,2477],{"emptyLinePlaceholder":134},[28,33999,34000],{"class":30,"line":108},[28,34001,34002],{"class":269},"# 测试数据处理\n",[28,34004,34005,34007,34010],{"class":30,"line":1407},[28,34006,31998],{"class":207},[28,34008,34009],{"class":34}," test_data_process",[28,34011,32004],{"class":211},[28,34013,34014,34017,34019,34021,34023,34025,34027],{"class":30,"line":1690},[28,34015,34016],{"class":211},"    test_data",[28,34018,257],{"class":207},[28,34020,31506],{"class":211},[28,34022,31509],{"class":5293},[28,34024,257],{"class":207},[28,34026,31514],{"class":64},[28,34028,31517],{"class":211},[28,34030,34031,34034,34036,34039],{"class":30,"line":1695},[28,34032,34033],{"class":5293},"                           train",[28,34035,257],{"class":207},[28,34037,34038],{"class":38},"False",[28,34040,31517],{"class":211},[28,34042,34043,34046,34048,34050,34052,34054,34056],{"class":30,"line":1701},[28,34044,34045],{"class":5293},"                           transform",[28,34047,257],{"class":207},[28,34049,31544],{"class":211},[28,34051,31547],{"class":5293},[28,34053,257],{"class":207},[28,34055,1111],{"class":38},[28,34057,31555],{"class":211},[28,34059,34060,34063,34065,34067],{"class":30,"line":1706},[28,34061,34062],{"class":5293},"                           download",[28,34064,257],{"class":207},[28,34066,31527],{"class":38},[28,34068,218],{"class":211},[28,34070,34071,34074,34076,34078,34080,34082],{"class":30,"line":1720},[28,34072,34073],{"class":211},"    test_dataloader",[28,34075,257],{"class":207},[28,34077,31585],{"class":211},[28,34079,31588],{"class":5293},[28,34081,257],{"class":207},[28,34083,34084],{"class":211},"test_data,\n",[28,34086,34087],{"class":30,"line":1725},[28,34088,34089],{"class":269},"                                    # 这里是一张一张进行测试\n",[28,34091,34092,34095,34097,34099],{"class":30,"line":1731},[28,34093,34094],{"class":5293},"                                    batch_size",[28,34096,257],{"class":207},[28,34098,427],{"class":38},[28,34100,31517],{"class":211},[28,34102,34103,34106,34108,34110],{"class":30,"line":1752},[28,34104,34105],{"class":5293},"                                    shuffle",[28,34107,257],{"class":207},[28,34109,31527],{"class":38},[28,34111,31517],{"class":211},[28,34113,34114,34117,34119,34121],{"class":30,"line":1757},[28,34115,34116],{"class":5293},"                                    num_workers",[28,34118,257],{"class":207},[28,34120,401],{"class":38},[28,34122,218],{"class":211},[28,34124,34125,34127],{"class":30,"line":1771},[28,34126,4167],{"class":207},[28,34128,34129],{"class":211}," test_dataloader\n",[28,34131,34132],{"class":30,"line":1776},[28,34133,2477],{"emptyLinePlaceholder":134},[28,34135,34136],{"class":30,"line":1805},[28,34137,34138],{"class":269},"# 定义模型测试函数\n",[28,34140,34141,34143,34146],{"class":30,"line":1810},[28,34142,31998],{"class":207},[28,34144,34145],{"class":34}," test_model_process",[28,34147,34148],{"class":211},"(model,test_dataloader):\n",[28,34150,34151],{"class":30,"line":1827},[28,34152,34153],{"class":269},"    # 将模型放到设备当中，先进行判断\n",[28,34155,34156,34158,34160,34162,34164,34166,34168],{"class":30,"line":1832},[28,34157,31288],{"class":211},[28,34159,257],{"class":207},[28,34161,31295],{"class":64},[28,34163,1782],{"class":207},[28,34165,31300],{"class":211},[28,34167,1779],{"class":207},[28,34169,34170],{"class":64}," \"cpu\"\n",[28,34172,34173,34175,34177],{"class":30,"line":1837},[28,34174,31340],{"class":211},[28,34176,257],{"class":207},[28,34178,32340],{"class":211},[28,34180,34181],{"class":30,"line":1842},[28,34182,2477],{"emptyLinePlaceholder":134},[28,34184,34185],{"class":30,"line":1856},[28,34186,34187],{"class":269},"    # 设置初始化参数\n",[28,34189,34190,34193,34195],{"class":30,"line":1861},[28,34191,34192],{"class":211},"    test_corrects",[28,34194,257],{"class":207},[28,34196,32393],{"class":38},[28,34198,34199,34202,34204],{"class":30,"line":2654},[28,34200,34201],{"class":211},"    test_num",[28,34203,257],{"class":207},[28,34205,3162],{"class":38},[28,34207,34208],{"class":30,"line":2668},[28,34209,2477],{"emptyLinePlaceholder":134},[28,34211,34212],{"class":30,"line":2676},[28,34213,34214],{"class":269},"    # 进行模型测试\n",[28,34216,34217],{"class":30,"line":2681},[28,34218,34219],{"class":269},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[28,34221,34222],{"class":30,"line":2687},[28,34223,34224],{"class":269},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[28,34226,34227,34230],{"class":30,"line":2693},[28,34228,34229],{"class":207},"    with",[28,34231,32935],{"class":211},[28,34233,34234],{"class":30,"line":2698},[28,34235,34236],{"class":269},"        # 从数据中进行\n",[28,34238,34239,34241,34244,34246],{"class":30,"line":8025},[28,34240,3480],{"class":207},[28,34242,34243],{"class":211}," test_data_x,test_data_y ",[28,34245,26094],{"class":207},[28,34247,34248],{"class":211}," test_dataloader:\n",[28,34250,34251,34254,34256],{"class":30,"line":8049},[28,34252,34253],{"class":211},"            test_data_x",[28,34255,257],{"class":207},[28,34257,34258],{"class":211},"test_data_x.to(device)\n",[28,34260,34261,34264,34266],{"class":30,"line":8054},[28,34262,34263],{"class":211},"            test_data_y",[28,34265,257],{"class":207},[28,34267,34268],{"class":211},"test_data_y.to(device)\n",[28,34270,34271],{"class":30,"line":8060},[28,34272,34273],{"class":269},"            # 设置为验证模式\n",[28,34275,34276],{"class":30,"line":8087},[28,34277,32926],{"class":211},[28,34279,34280],{"class":30,"line":8092},[28,34281,34282],{"class":269},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[28,34284,34285,34287,34289],{"class":30,"line":8098},[28,34286,32711],{"class":211},[28,34288,257],{"class":207},[28,34290,34291],{"class":211},"model(test_data_x)\n",[28,34293,34294],{"class":30,"line":8110},[28,34295,34296],{"class":269},"            # 查找每一行中最大值对应的下标\n",[28,34298,34299,34301,34303,34305,34307,34309,34311],{"class":30,"line":8122},[28,34300,32728],{"class":211},[28,34302,257],{"class":207},[28,34304,32733],{"class":211},[28,34306,32736],{"class":5293},[28,34308,257],{"class":207},[28,34310,427],{"class":38},[28,34312,218],{"class":211},[28,34314,34315],{"class":30,"line":8134},[28,34316,34317],{"class":269},"            # 计算正确率\n",[28,34319,34320],{"class":30,"line":9793},[28,34321,34322],{"class":269},"            # .data表示是一个不带梯度信息的tensor\n",[28,34324,34325],{"class":30,"line":9818},[28,34326,34327],{"class":269},"            # 如果预测正确，则准确度test_corrects加1\n",[28,34329,34330,34333,34335,34337,34339],{"class":30,"line":9841},[28,34331,34332],{"class":211},"            test_corrects",[28,34334,9554],{"class":207},[28,34336,32838],{"class":211},[28,34338,3026],{"class":207},[28,34340,34341],{"class":211},"test_data_y.data)\n",[28,34343,34344],{"class":30,"line":9865},[28,34345,34346],{"class":269},"            # 将所有的测试样本进行累计\n",[28,34348,34349,34352,34354,34357,34359],{"class":30,"line":9870},[28,34350,34351],{"class":211},"            test_num",[28,34353,9554],{"class":207},[28,34355,34356],{"class":211},"test_data_x.size(",[28,34358,401],{"class":38},[28,34360,218],{"class":211},[28,34362,34363],{"class":30,"line":9875},[28,34364,2477],{"emptyLinePlaceholder":134},[28,34366,34367],{"class":30,"line":9880},[28,34368,34369],{"class":269},"        # 计算准确度\n",[28,34371,34372,34375,34377,34380,34382],{"class":30,"line":9889},[28,34373,34374],{"class":211},"        test_acc",[28,34376,257],{"class":207},[28,34378,34379],{"class":211},"test_corrects.double().item()",[28,34381,794],{"class":207},[28,34383,34384],{"class":211},"test_num\n",[28,34386,34387],{"class":30,"line":9894},[28,34388,34389],{"class":269},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[28,34391,34392,34394,34396,34399],{"class":30,"line":9900},[28,34393,32502],{"class":38},[28,34395,212],{"class":211},[28,34397,34398],{"class":64},"\"测试的准确率：\"",[28,34400,34401],{"class":211},",test_acc)\n",[28,34403,34404],{"class":30,"line":9921},[28,34405,2477],{"emptyLinePlaceholder":134},[28,34407,34408],{"class":30,"line":9927},[28,34409,34410],{"class":269},"# 实现模型的测试功能\n",[28,34412,34413,34415,34417,34419,34421],{"class":30,"line":9941},[28,34414,1609],{"class":207},[28,34416,31271],{"class":38},[28,34418,3026],{"class":207},[28,34420,31276],{"class":64},[28,34422,3816],{"class":211},[28,34424,34425],{"class":30,"line":9947},[28,34426,34427],{"class":269},"    # 加载模型\n",[28,34429,34430,34432,34434],{"class":30,"line":9974},[28,34431,31340],{"class":211},[28,34433,257],{"class":207},[28,34435,33876],{"class":211},[28,34437,34438],{"class":30,"line":9983},[28,34439,34440],{"class":269},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[28,34442,34443],{"class":30,"line":9989},[28,34444,34445],{"class":269},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[28,34447,34448,34451,34454],{"class":30,"line":9997},[28,34449,34450],{"class":211},"    model.load_state_dict(torch.load(",[28,34452,34453],{"class":64},"'best_model.pth'",[28,34455,30548],{"class":211},[28,34457,34458],{"class":30,"line":10002},[28,34459,34460],{"class":269},"    # 数据加载\n",[28,34462,34463,34465,34467],{"class":30,"line":16681},[28,34464,34073],{"class":211},[28,34466,257],{"class":207},[28,34468,34469],{"class":211},"test_data_process()\n",[28,34471,34472],{"class":30,"line":16687},[28,34473,34474],{"class":269},"    # 加载模型测试的函数\n",[28,34476,34477],{"class":30,"line":16710},[28,34478,34479],{"class":211},"    test_model_process(model,test_dataloader)\n",[28,34481,34482],{"class":30,"line":16716},[28,34483,2477],{"emptyLinePlaceholder":134},[28,34485,34486],{"class":30,"line":16739},[28,34487,34488],{"class":269},"    # 验证集推理实现：\n",[28,34490,34491],{"class":30,"line":16753},[28,34492,34493],{"class":269},"    # 加载数据加载的更详细一些\n",[28,34495,34496,34498,34500,34502,34504,34506,34508],{"class":30,"line":16773},[28,34497,31288],{"class":211},[28,34499,257],{"class":207},[28,34501,31295],{"class":64},[28,34503,1782],{"class":207},[28,34505,31300],{"class":211},[28,34507,1779],{"class":207},[28,34509,34170],{"class":64},[28,34511,34512,34514,34516],{"class":30,"line":16779},[28,34513,31340],{"class":211},[28,34515,257],{"class":207},[28,34517,32340],{"class":211},[28,34519,34520],{"class":30,"line":16790},[28,34521,34522],{"class":269},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[28,34524,34525],{"class":30,"line":16813},[28,34526,34527],{"class":269},"    # 顺序不可改变\n",[28,34529,34530,34533,34535,34537,34540,34542,34545,34547,34550,34552,34555,34557,34560,34562,34565,34567,34570,34572,34575,34577,34580,34582,34585],{"class":30,"line":16835},[28,34531,34532],{"class":211},"    classes",[28,34534,257],{"class":207},[28,34536,1100],{"class":211},[28,34538,34539],{"class":64},"'T-shirt\u002Ftop'",[28,34541,588],{"class":211},[28,34543,34544],{"class":64},"'Trouser'",[28,34546,588],{"class":211},[28,34548,34549],{"class":64},"'Pullover'",[28,34551,588],{"class":211},[28,34553,34554],{"class":64},"'Dress'",[28,34556,588],{"class":211},[28,34558,34559],{"class":64},"'Coat'",[28,34561,588],{"class":211},[28,34563,34564],{"class":64},"'Sandal'",[28,34566,588],{"class":211},[28,34568,34569],{"class":64},"'Shirt'",[28,34571,588],{"class":211},[28,34573,34574],{"class":64},"'Sneaker'",[28,34576,588],{"class":211},[28,34578,34579],{"class":64},"'Bag'",[28,34581,588],{"class":211},[28,34583,34584],{"class":64},"'Ankle boot'",[28,34586,33297],{"class":211},[28,34588,34589,34591],{"class":30,"line":16840},[28,34590,34229],{"class":207},[28,34592,32935],{"class":211},[28,34594,34595],{"class":30,"line":16846},[28,34596,34597],{"class":269},"        # 将数据和标签都放到设备当中\n",[28,34599,34600,34602,34605,34607],{"class":30,"line":16860},[28,34601,3480],{"class":207},[28,34603,34604],{"class":211}," b_x,b_y ",[28,34606,26094],{"class":207},[28,34608,34248],{"class":211},[28,34610,34611,34613,34615],{"class":30,"line":16873},[28,34612,32661],{"class":211},[28,34614,257],{"class":207},[28,34616,32666],{"class":211},[28,34618,34619,34621,34623],{"class":30,"line":16878},[28,34620,32676],{"class":211},[28,34622,257],{"class":207},[28,34624,32681],{"class":211},[28,34626,34627],{"class":30,"line":16892},[28,34628,2477],{"emptyLinePlaceholder":134},[28,34630,34631],{"class":30,"line":16897},[28,34632,34633],{"class":269},"            # 设置模型为验证模式\n",[28,34635,34636],{"class":30,"line":16903},[28,34637,32926],{"class":211},[28,34639,34640],{"class":30,"line":16908},[28,34641,34642],{"class":269},"            # 模型推理结果\n",[28,34644,34645,34647,34649],{"class":30,"line":16922},[28,34646,32711],{"class":211},[28,34648,257],{"class":207},[28,34650,32716],{"class":211},[28,34652,34653],{"class":30,"line":16927},[28,34654,34655],{"class":269},"            # 获取最大下标，最大下标就是类别号\n",[28,34657,34658,34660,34662,34664,34666,34668,34670],{"class":30,"line":16932},[28,34659,32728],{"class":211},[28,34661,257],{"class":207},[28,34663,32733],{"class":211},[28,34665,32736],{"class":5293},[28,34667,257],{"class":207},[28,34669,427],{"class":38},[28,34671,218],{"class":211},[28,34673,34674],{"class":30,"line":16946},[28,34675,34676],{"class":269},"            # 取出张量中的数值\n",[28,34678,34679,34682,34684],{"class":30,"line":16958},[28,34680,34681],{"class":211},"            result",[28,34683,257],{"class":207},[28,34685,34686],{"class":211},"pre_lab.item()\n",[28,34688,34689,34692,34694],{"class":30,"line":16963},[28,34690,34691],{"class":211},"            label",[28,34693,257],{"class":207},[28,34695,34696],{"class":211},"b_y.item()\n",[28,34698,34699,34702,34704,34707,34710,34713,34715,34718],{"class":30,"line":16976},[28,34700,34701],{"class":38},"            print",[28,34703,212],{"class":211},[28,34705,34706],{"class":64},"\"预测值：\"",[28,34708,34709],{"class":211},",classes[result],",[28,34711,34712],{"class":64},"\"------\"",[28,34714,588],{"class":211},[28,34716,34717],{"class":64},"\"真实值：\"",[28,34719,34720],{"class":211},",classes[label])\n",[14,34722,34723],{},"（2）AlexNet",[161,34725,34726],{},[119,34727,34728],{},"神经网络构建",[18,34730,34732],{"className":30429,"code":34731,"language":30431,"meta":23,"style":23},"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",[25,34733,34734,34740,34750,34760,34772,34776,34793,34801,34816,34828,34870,34897,34940,34966,35010,35053,35096,35123,35127,35137,35142,35170,35189,35208,35212,35217,35225,35240,35250,35264,35274,35289,35304,35319,35330,35334,35339,35349,35364,35369,35383,35398,35410,35415,35426,35431,35437,35442,35454,35474,35479,35488],{"__ignoreMap":23},[28,34735,34736,34738],{"class":30,"line":31},[28,34737,30443],{"class":207},[28,34739,30446],{"class":211},[28,34741,34742,34744,34746,34748],{"class":30,"line":42},[28,34743,30788],{"class":207},[28,34745,30791],{"class":211},[28,34747,30443],{"class":207},[28,34749,30796],{"class":211},[28,34751,34752,34754,34756,34758],{"class":30,"line":50},[28,34753,30788],{"class":207},[28,34755,30808],{"class":211},[28,34757,30443],{"class":207},[28,34759,30813],{"class":211},[28,34761,34762,34764,34767,34769],{"class":30,"line":58},[28,34763,30443],{"class":207},[28,34765,34766],{"class":211}," torch.nn.functional ",[28,34768,31434],{"class":207},[28,34770,34771],{"class":211}," F\n",[28,34773,34774],{"class":30,"line":70},[28,34775,2477],{"emptyLinePlaceholder":134},[28,34777,34778,34780,34783,34785,34787,34789,34791],{"class":30,"line":78},[28,34779,14771],{"class":207},[28,34781,34782],{"class":34}," AlexNet",[28,34784,212],{"class":211},[28,34786,30829],{"class":34},[28,34788,768],{"class":211},[28,34790,30834],{"class":34},[28,34792,30837],{"class":211},[28,34794,34795,34797,34799],{"class":30,"line":86},[28,34796,30852],{"class":207},[28,34798,30855],{"class":38},[28,34800,30858],{"class":211},[28,34802,34803,34805,34808,34810,34812,34814],{"class":30,"line":97},[28,34804,30868],{"class":38},[28,34806,34807],{"class":211},"(AlexNet,",[28,34809,30874],{"class":38},[28,34811,30877],{"class":211},[28,34813,30880],{"class":38},[28,34815,2053],{"class":211},[28,34817,34818,34820,34823,34825],{"class":30,"line":108},[28,34819,30896],{"class":38},[28,34821,34822],{"class":211},".ReLu",[28,34824,257],{"class":207},[28,34826,34827],{"class":211},"nn.ReLU()\n",[28,34829,34830,34832,34834,34836,34838,34840,34842,34844,34846,34848,34850,34852,34854,34856,34858,34860,34862,34864,34866,34868],{"class":30,"line":1407},[28,34831,30896],{"class":38},[28,34833,30899],{"class":211},[28,34835,257],{"class":207},[28,34837,30904],{"class":211},[28,34839,30907],{"class":5293},[28,34841,257],{"class":207},[28,34843,427],{"class":38},[28,34845,588],{"class":211},[28,34847,30916],{"class":5293},[28,34849,257],{"class":207},[28,34851,419],{"class":38},[28,34853,588],{"class":211},[28,34855,30925],{"class":5293},[28,34857,257],{"class":207},[28,34859,682],{"class":38},[28,34861,588],{"class":211},[28,34863,30980],{"class":5293},[28,34865,257],{"class":207},[28,34867,503],{"class":38},[28,34869,218],{"class":211},[28,34871,34872,34874,34876,34878,34881,34883,34885,34887,34889,34891,34893,34895],{"class":30,"line":1690},[28,34873,30896],{"class":38},[28,34875,30964],{"class":211},[28,34877,257],{"class":207},[28,34879,34880],{"class":211},"nn.MaxPool2d(",[28,34882,30925],{"class":5293},[28,34884,257],{"class":207},[28,34886,282],{"class":38},[28,34888,588],{"class":211},[28,34890,30980],{"class":5293},[28,34892,257],{"class":207},[28,34894,288],{"class":38},[28,34896,218],{"class":211},[28,34898,34899,34901,34903,34905,34907,34909,34911,34913,34915,34917,34919,34922,34924,34926,34928,34930,34932,34934,34936,34938],{"class":30,"line":1695},[28,34900,30896],{"class":38},[28,34902,30993],{"class":211},[28,34904,257],{"class":207},[28,34906,30904],{"class":211},[28,34908,30907],{"class":5293},[28,34910,257],{"class":207},[28,34912,419],{"class":38},[28,34914,588],{"class":211},[28,34916,30916],{"class":5293},[28,34918,257],{"class":207},[28,34920,34921],{"class":38},"256",[28,34923,588],{"class":211},[28,34925,30925],{"class":5293},[28,34927,257],{"class":207},[28,34929,529],{"class":38},[28,34931,588],{"class":211},[28,34933,30934],{"class":5293},[28,34935,257],{"class":207},[28,34937,288],{"class":38},[28,34939,218],{"class":211},[28,34941,34942,34944,34946,34948,34950,34952,34954,34956,34958,34960,34962,34964],{"class":30,"line":1701},[28,34943,30896],{"class":38},[28,34945,31028],{"class":211},[28,34947,257],{"class":207},[28,34949,34880],{"class":211},[28,34951,30925],{"class":5293},[28,34953,257],{"class":207},[28,34955,282],{"class":38},[28,34957,588],{"class":211},[28,34959,30980],{"class":5293},[28,34961,257],{"class":207},[28,34963,288],{"class":38},[28,34965,218],{"class":211},[28,34967,34968,34970,34973,34975,34977,34979,34981,34983,34985,34987,34989,34992,34994,34996,34998,35000,35002,35004,35006,35008],{"class":30,"line":1706},[28,34969,30896],{"class":38},[28,34971,34972],{"class":211},".c5",[28,34974,257],{"class":207},[28,34976,30904],{"class":211},[28,34978,30907],{"class":5293},[28,34980,257],{"class":207},[28,34982,34921],{"class":38},[28,34984,588],{"class":211},[28,34986,30916],{"class":5293},[28,34988,257],{"class":207},[28,34990,34991],{"class":38},"384",[28,34993,588],{"class":211},[28,34995,30925],{"class":5293},[28,34997,257],{"class":207},[28,34999,282],{"class":38},[28,35001,588],{"class":211},[28,35003,30934],{"class":5293},[28,35005,257],{"class":207},[28,35007,427],{"class":38},[28,35009,218],{"class":211},[28,35011,35012,35014,35017,35019,35021,35023,35025,35027,35029,35031,35033,35035,35037,35039,35041,35043,35045,35047,35049,35051],{"class":30,"line":1720},[28,35013,30896],{"class":38},[28,35015,35016],{"class":211},".c6",[28,35018,257],{"class":207},[28,35020,30904],{"class":211},[28,35022,30907],{"class":5293},[28,35024,257],{"class":207},[28,35026,34991],{"class":38},[28,35028,588],{"class":211},[28,35030,30916],{"class":5293},[28,35032,257],{"class":207},[28,35034,34991],{"class":38},[28,35036,588],{"class":211},[28,35038,30925],{"class":5293},[28,35040,257],{"class":207},[28,35042,282],{"class":38},[28,35044,588],{"class":211},[28,35046,30934],{"class":5293},[28,35048,257],{"class":207},[28,35050,427],{"class":38},[28,35052,218],{"class":211},[28,35054,35055,35057,35060,35062,35064,35066,35068,35070,35072,35074,35076,35078,35080,35082,35084,35086,35088,35090,35092,35094],{"class":30,"line":1725},[28,35056,30896],{"class":38},[28,35058,35059],{"class":211},".c7",[28,35061,257],{"class":207},[28,35063,30904],{"class":211},[28,35065,30907],{"class":5293},[28,35067,257],{"class":207},[28,35069,34991],{"class":38},[28,35071,588],{"class":211},[28,35073,30916],{"class":5293},[28,35075,257],{"class":207},[28,35077,34921],{"class":38},[28,35079,588],{"class":211},[28,35081,30925],{"class":5293},[28,35083,257],{"class":207},[28,35085,282],{"class":38},[28,35087,588],{"class":211},[28,35089,30934],{"class":5293},[28,35091,257],{"class":207},[28,35093,427],{"class":38},[28,35095,218],{"class":211},[28,35097,35098,35100,35103,35105,35107,35109,35111,35113,35115,35117,35119,35121],{"class":30,"line":1731},[28,35099,30896],{"class":38},[28,35101,35102],{"class":211},".s8",[28,35104,257],{"class":207},[28,35106,34880],{"class":211},[28,35108,30925],{"class":5293},[28,35110,257],{"class":207},[28,35112,282],{"class":38},[28,35114,588],{"class":211},[28,35116,30980],{"class":5293},[28,35118,257],{"class":207},[28,35120,288],{"class":38},[28,35122,218],{"class":211},[28,35124,35125],{"class":30,"line":1752},[28,35126,31053],{"class":269},[28,35128,35129,35131,35133,35135],{"class":30,"line":1757},[28,35130,30896],{"class":38},[28,35132,31060],{"class":211},[28,35134,257],{"class":207},[28,35136,31065],{"class":211},[28,35138,35139],{"class":30,"line":1771},[28,35140,35141],{"class":269},"       # 定义全连接层\n",[28,35143,35144,35146,35149,35151,35153,35155,35157,35159,35161,35163,35165,35168],{"class":30,"line":1776},[28,35145,30896],{"class":38},[28,35147,35148],{"class":211},".f1",[28,35150,257],{"class":207},[28,35152,31082],{"class":211},[28,35154,554],{"class":38},[28,35156,665],{"class":207},[28,35158,554],{"class":38},[28,35160,665],{"class":207},[28,35162,34921],{"class":38},[28,35164,588],{"class":211},[28,35166,35167],{"class":38},"4096",[28,35169,218],{"class":211},[28,35171,35172,35174,35177,35179,35181,35183,35185,35187],{"class":30,"line":1805},[28,35173,30896],{"class":38},[28,35175,35176],{"class":211},".f2",[28,35178,257],{"class":207},[28,35180,31082],{"class":211},[28,35182,35167],{"class":38},[28,35184,588],{"class":211},[28,35186,35167],{"class":38},[28,35188,218],{"class":211},[28,35190,35191,35193,35196,35198,35200,35202,35204,35206],{"class":30,"line":1810},[28,35192,30896],{"class":38},[28,35194,35195],{"class":211},".f3",[28,35197,257],{"class":207},[28,35199,31082],{"class":211},[28,35201,35167],{"class":38},[28,35203,588],{"class":211},[28,35205,656],{"class":38},[28,35207,218],{"class":211},[28,35209,35210],{"class":30,"line":1827},[28,35211,2477],{"emptyLinePlaceholder":134},[28,35213,35214],{"class":30,"line":1832},[28,35215,35216],{"class":269},"    # 定义前向传播\n",[28,35218,35219,35221,35223],{"class":30,"line":1837},[28,35220,30852],{"class":207},[28,35222,31144],{"class":34},[28,35224,31147],{"class":211},[28,35226,35227,35229,35231,35233,35236,35238],{"class":30,"line":1842},[28,35228,31152],{"class":211},[28,35230,257],{"class":207},[28,35232,30874],{"class":38},[28,35234,35235],{"class":211},".ReLu(",[28,35237,30874],{"class":38},[28,35239,31164],{"class":211},[28,35241,35242,35244,35246,35248],{"class":30,"line":1856},[28,35243,31152],{"class":211},[28,35245,257],{"class":207},[28,35247,30874],{"class":38},[28,35249,31175],{"class":211},[28,35251,35252,35254,35256,35258,35260,35262],{"class":30,"line":1861},[28,35253,31152],{"class":211},[28,35255,257],{"class":207},[28,35257,30874],{"class":38},[28,35259,35235],{"class":211},[28,35261,30874],{"class":38},[28,35263,31190],{"class":211},[28,35265,35266,35268,35270,35272],{"class":30,"line":2654},[28,35267,31152],{"class":211},[28,35269,257],{"class":207},[28,35271,30874],{"class":38},[28,35273,31201],{"class":211},[28,35275,35276,35278,35280,35282,35284,35286],{"class":30,"line":2668},[28,35277,31152],{"class":211},[28,35279,257],{"class":207},[28,35281,30874],{"class":38},[28,35283,35235],{"class":211},[28,35285,30874],{"class":38},[28,35287,35288],{"class":211},".c5(x))\n",[28,35290,35291,35293,35295,35297,35299,35301],{"class":30,"line":2676},[28,35292,31152],{"class":211},[28,35294,257],{"class":207},[28,35296,30874],{"class":38},[28,35298,35235],{"class":211},[28,35300,30874],{"class":38},[28,35302,35303],{"class":211},".c6(x))\n",[28,35305,35306,35308,35310,35312,35314,35316],{"class":30,"line":2681},[28,35307,31152],{"class":211},[28,35309,257],{"class":207},[28,35311,30874],{"class":38},[28,35313,35235],{"class":211},[28,35315,30874],{"class":38},[28,35317,35318],{"class":211},".c7(x))\n",[28,35320,35321,35323,35325,35327],{"class":30,"line":2687},[28,35322,31152],{"class":211},[28,35324,257],{"class":207},[28,35326,30874],{"class":38},[28,35328,35329],{"class":211},".s8(x)\n",[28,35331,35332],{"class":30,"line":2693},[28,35333,2477],{"emptyLinePlaceholder":134},[28,35335,35336],{"class":30,"line":2698},[28,35337,35338],{"class":269},"        # 展平加线性全连接层\n",[28,35340,35341,35343,35345,35347],{"class":30,"line":8025},[28,35342,31152],{"class":211},[28,35344,257],{"class":207},[28,35346,30874],{"class":38},[28,35348,31212],{"class":211},[28,35350,35351,35353,35355,35357,35359,35361],{"class":30,"line":8049},[28,35352,31152],{"class":211},[28,35354,257],{"class":207},[28,35356,30874],{"class":38},[28,35358,35235],{"class":211},[28,35360,30874],{"class":38},[28,35362,35363],{"class":211},".f1(x))\n",[28,35365,35366],{"class":30,"line":8054},[28,35367,35368],{"class":269},"        # 还需要dropout对神经元随机进行失活\n",[28,35370,35371,35373,35375,35378,35381],{"class":30,"line":8060},[28,35372,31152],{"class":211},[28,35374,257],{"class":207},[28,35376,35377],{"class":211},"F.dropout(x,",[28,35379,35380],{"class":38},"0.5",[28,35382,218],{"class":211},[28,35384,35385,35387,35389,35391,35393,35395],{"class":30,"line":8087},[28,35386,31152],{"class":211},[28,35388,257],{"class":207},[28,35390,30874],{"class":38},[28,35392,35235],{"class":211},[28,35394,30874],{"class":38},[28,35396,35397],{"class":211},".f2(x))\n",[28,35399,35400,35402,35404,35406,35408],{"class":30,"line":8092},[28,35401,31152],{"class":211},[28,35403,257],{"class":207},[28,35405,35377],{"class":211},[28,35407,35380],{"class":38},[28,35409,218],{"class":211},[28,35411,35412],{"class":30,"line":8098},[28,35413,35414],{"class":269},"        # 直接输出\n",[28,35416,35417,35419,35421,35423],{"class":30,"line":8110},[28,35418,31152],{"class":211},[28,35420,257],{"class":207},[28,35422,30874],{"class":38},[28,35424,35425],{"class":211},".f3(x)\n",[28,35427,35428],{"class":30,"line":8122},[28,35429,35430],{"class":269},"        # 前向传播输出\n",[28,35432,35433,35435],{"class":30,"line":8134},[28,35434,14829],{"class":207},[28,35436,31260],{"class":211},[28,35438,35439],{"class":30,"line":9793},[28,35440,35441],{"class":269},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[28,35443,35444,35446,35448,35450,35452],{"class":30,"line":9818},[28,35445,1609],{"class":207},[28,35447,31271],{"class":38},[28,35449,3026],{"class":207},[28,35451,31276],{"class":64},[28,35453,3816],{"class":211},[28,35455,35456,35458,35460,35462,35464,35466,35468,35470,35472],{"class":30,"line":9841},[28,35457,31288],{"class":211},[28,35459,257],{"class":207},[28,35461,30502],{"class":211},[28,35463,31295],{"class":64},[28,35465,1782],{"class":207},[28,35467,31300],{"class":211},[28,35469,1779],{"class":207},[28,35471,30527],{"class":64},[28,35473,218],{"class":211},[28,35475,35476],{"class":30,"line":9865},[28,35477,35478],{"class":269},"    # 模型实例化，然后将实例化的模型放到设备中\n",[28,35480,35481,35483,35485],{"class":30,"line":9870},[28,35482,31340],{"class":211},[28,35484,257],{"class":207},[28,35486,35487],{"class":211},"AlexNet().to(device)\n",[28,35489,35490,35492,35494,35496,35498,35501,35503,35505],{"class":30,"line":9875},[28,35491,31350],{"class":38},[28,35493,31353],{"class":211},[28,35495,427],{"class":38},[28,35497,588],{"class":211},[28,35499,35500],{"class":38},"227",[28,35502,588],{"class":211},[28,35504,35500],{"class":38},[28,35506,31366],{"class":211},[161,35508,35509],{"start":42},[119,35510,31379],{},[18,35512,35514],{"className":30429,"code":35513,"language":30431,"meta":23,"style":23},"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",[25,35515,35516,35522,35528,35538,35544,35554,35564,35574,35584,35594,35598,35609,35619,35623,35627,35631,35639,35651,35661,35677,35687,35719,35733,35743,35753,35757,35767,35781,35791,35801,35811,35817,35821,35825,35829,35833,35837,35845,35865,35869,35873,35877,35881,35885,35901,35905,35909,35917,35921,35925,35933,35937,35941,35945,35953,35957,35961,35965,35969,35977,35981,35989,35993,36001,36005,36013,36017,36025,36029,36033,36041,36045,36049,36053,36065,36089,36103,36107,36111,36115,36123,36127,36135,36139,36147,36151,36159,36163,36171,36175,36183,36187,36199,36203,36211,36215,36223,36227,36231,36235,36239,36247,36251,36267,36271,36279,36283,36287,36291,36295,36299,36303,36307,36323,36327,36339,36343,36355,36359,36371,36375,36383,36387,36395,36399,36403,36408,36414,36418,36427,36431,36448,36452,36461,36465,36483,36496,36501,36514,36518,36522,36530,36534,36538,36546,36550,36558,36562,36570,36574,36578,36620,36662,36666,36670,36686,36690,36706,36710,36714,36722,36726,36730,36742,36780,36785,36790,36799,36803,36817,36827,36833,36839,36845,36851,36855,36859,36865,36869,36873,36881,36885,36903,36907,36911,36915,36931,36935,36939,36943,36947,36951,36971,36991,36995,36999,37003,37011,37019,37023,37039,37059,37079,37083,37087,37095,37103,37107,37111,37115,37127,37131,37141,37149,37166],{"__ignoreMap":23},[28,35517,35518,35520],{"class":30,"line":31},[28,35519,30443],{"class":207},[28,35521,31873],{"class":211},[28,35523,35524,35526],{"class":30,"line":42},[28,35525,30443],{"class":207},[28,35527,31880],{"class":211},[28,35529,35530,35532,35534,35536],{"class":30,"line":50},[28,35531,30443],{"class":207},[28,35533,31891],{"class":211},[28,35535,31434],{"class":207},[28,35537,31896],{"class":211},[28,35539,35540,35542],{"class":30,"line":58},[28,35541,30443],{"class":207},[28,35543,30446],{"class":211},[28,35545,35546,35548,35550,35552],{"class":30,"line":70},[28,35547,30788],{"class":207},[28,35549,31466],{"class":211},[28,35551,30443],{"class":207},[28,35553,31913],{"class":211},[28,35555,35556,35558,35560,35562],{"class":30,"line":78},[28,35557,30788],{"class":207},[28,35559,31419],{"class":211},[28,35561,30443],{"class":207},[28,35563,31424],{"class":211},[28,35565,35566,35568,35570,35572],{"class":30,"line":86},[28,35567,30788],{"class":207},[28,35569,31449],{"class":211},[28,35571,30443],{"class":207},[28,35573,31454],{"class":211},[28,35575,35576,35578,35580,35582],{"class":30,"line":97},[28,35577,30443],{"class":207},[28,35579,31466],{"class":211},[28,35581,31434],{"class":207},[28,35583,31471],{"class":211},[28,35585,35586,35588,35590,35592],{"class":30,"line":108},[28,35587,30443],{"class":207},[28,35589,31483],{"class":211},[28,35591,31434],{"class":207},[28,35593,31488],{"class":211},[28,35595,35596],{"class":30,"line":1407},[28,35597,31958],{"class":269},[28,35599,35600,35602,35604,35606],{"class":30,"line":1690},[28,35601,30788],{"class":207},[28,35603,31965],{"class":211},[28,35605,30443],{"class":207},[28,35607,35608],{"class":211}," AlexNet\n",[28,35610,35611,35613,35615,35617],{"class":30,"line":1695},[28,35612,30788],{"class":207},[28,35614,30791],{"class":211},[28,35616,30443],{"class":207},[28,35618,30796],{"class":211},[28,35620,35621],{"class":30,"line":1701},[28,35622,2477],{"emptyLinePlaceholder":134},[28,35624,35625],{"class":30,"line":1706},[28,35626,2477],{"emptyLinePlaceholder":134},[28,35628,35629],{"class":30,"line":1720},[28,35630,31993],{"class":269},[28,35632,35633,35635,35637],{"class":30,"line":1725},[28,35634,31998],{"class":207},[28,35636,32001],{"class":34},[28,35638,32004],{"class":211},[28,35640,35641,35643,35645,35647,35649],{"class":30,"line":1731},[28,35642,32009],{"class":211},[28,35644,257],{"class":207},[28,35646,31506],{"class":211},[28,35648,31514],{"class":64},[28,35650,31517],{"class":211},[28,35652,35653,35655,35657,35659],{"class":30,"line":1752},[28,35654,32022],{"class":5293},[28,35656,257],{"class":207},[28,35658,31527],{"class":38},[28,35660,31517],{"class":211},[28,35662,35663,35665,35667,35669,35671,35673,35675],{"class":30,"line":1757},[28,35664,32033],{"class":5293},[28,35666,257],{"class":207},[28,35668,31544],{"class":211},[28,35670,31547],{"class":5293},[28,35672,257],{"class":207},[28,35674,35500],{"class":38},[28,35676,31555],{"class":211},[28,35678,35679,35681,35683,35685],{"class":30,"line":1771},[28,35680,32050],{"class":5293},[28,35682,257],{"class":207},[28,35684,31527],{"class":38},[28,35686,218],{"class":211},[28,35688,35689,35691,35693,35695,35697,35699,35701,35703,35705,35707,35709,35711,35713,35715,35717],{"class":30,"line":1776},[28,35690,32061],{"class":211},[28,35692,257],{"class":207},[28,35694,32066],{"class":211},[28,35696,32069],{"class":38},[28,35698,212],{"class":211},[28,35700,32074],{"class":38},[28,35702,665],{"class":207},[28,35704,7435],{"class":38},[28,35706,32081],{"class":211},[28,35708,32069],{"class":38},[28,35710,212],{"class":211},[28,35712,32088],{"class":38},[28,35714,665],{"class":207},[28,35716,7435],{"class":38},[28,35718,32095],{"class":211},[28,35720,35721,35723,35725,35727,35729,35731],{"class":30,"line":1805},[28,35722,32100],{"class":211},[28,35724,257],{"class":207},[28,35726,32105],{"class":211},[28,35728,31588],{"class":5293},[28,35730,257],{"class":207},[28,35732,31593],{"class":211},[28,35734,35735,35737,35739,35741],{"class":30,"line":1810},[28,35736,32116],{"class":5293},[28,35738,257],{"class":207},[28,35740,32121],{"class":38},[28,35742,31517],{"class":211},[28,35744,35745,35747,35749,35751],{"class":30,"line":1827},[28,35746,32128],{"class":5293},[28,35748,257],{"class":207},[28,35750,31527],{"class":38},[28,35752,31517],{"class":211},[28,35754,35755],{"class":30,"line":1832},[28,35756,32139],{"class":269},[28,35758,35759,35761,35763,35765],{"class":30,"line":1837},[28,35760,32144],{"class":5293},[28,35762,257],{"class":207},[28,35764,605],{"class":38},[28,35766,218],{"class":211},[28,35768,35769,35771,35773,35775,35777,35779],{"class":30,"line":1842},[28,35770,32155],{"class":211},[28,35772,257],{"class":207},[28,35774,31585],{"class":211},[28,35776,31588],{"class":5293},[28,35778,257],{"class":207},[28,35780,32166],{"class":211},[28,35782,35783,35785,35787,35789],{"class":30,"line":1856},[28,35784,32171],{"class":5293},[28,35786,257],{"class":207},[28,35788,32121],{"class":38},[28,35790,31517],{"class":211},[28,35792,35793,35795,35797,35799],{"class":30,"line":1861},[28,35794,32182],{"class":5293},[28,35796,257],{"class":207},[28,35798,31527],{"class":38},[28,35800,31517],{"class":211},[28,35802,35803,35805,35807,35809],{"class":30,"line":2654},[28,35804,32193],{"class":5293},[28,35806,257],{"class":207},[28,35808,605],{"class":38},[28,35810,218],{"class":211},[28,35812,35813,35815],{"class":30,"line":2668},[28,35814,4167],{"class":207},[28,35816,32206],{"class":211},[28,35818,35819],{"class":30,"line":2676},[28,35820,2477],{"emptyLinePlaceholder":134},[28,35822,35823],{"class":30,"line":2681},[28,35824,32215],{"class":269},[28,35826,35827],{"class":30,"line":2687},[28,35828,32220],{"class":269},[28,35830,35831],{"class":30,"line":2693},[28,35832,2477],{"emptyLinePlaceholder":134},[28,35834,35835],{"class":30,"line":2698},[28,35836,32229],{"class":269},[28,35838,35839,35841,35843],{"class":30,"line":8025},[28,35840,31998],{"class":207},[28,35842,32236],{"class":34},[28,35844,32239],{"class":211},[28,35846,35847,35849,35851,35853,35855,35857,35859,35861,35863],{"class":30,"line":8049},[28,35848,31288],{"class":211},[28,35850,257],{"class":207},[28,35852,30502],{"class":211},[28,35854,31295],{"class":64},[28,35856,1782],{"class":207},[28,35858,31300],{"class":211},[28,35860,1779],{"class":207},[28,35862,32258],{"class":64},[28,35864,218],{"class":211},[28,35866,35867],{"class":30,"line":8054},[28,35868,2477],{"emptyLinePlaceholder":134},[28,35870,35871],{"class":30,"line":8060},[28,35872,2477],{"emptyLinePlaceholder":134},[28,35874,35875],{"class":30,"line":8087},[28,35876,32273],{"class":269},[28,35878,35879],{"class":30,"line":8092},[28,35880,32278],{"class":269},[28,35882,35883],{"class":30,"line":8098},[28,35884,32283],{"class":269},[28,35886,35887,35889,35891,35893,35895,35897,35899],{"class":30,"line":8110},[28,35888,32288],{"class":211},[28,35890,257],{"class":207},[28,35892,32293],{"class":211},[28,35894,32296],{"class":5293},[28,35896,257],{"class":207},[28,35898,32301],{"class":38},[28,35900,218],{"class":211},[28,35902,35903],{"class":30,"line":8122},[28,35904,2477],{"emptyLinePlaceholder":134},[28,35906,35907],{"class":30,"line":8134},[28,35908,32312],{"class":269},[28,35910,35911,35913,35915],{"class":30,"line":9793},[28,35912,32317],{"class":211},[28,35914,257],{"class":207},[28,35916,32322],{"class":211},[28,35918,35919],{"class":30,"line":9818},[28,35920,2477],{"emptyLinePlaceholder":134},[28,35922,35923],{"class":30,"line":9841},[28,35924,32331],{"class":269},[28,35926,35927,35929,35931],{"class":30,"line":9865},[28,35928,31340],{"class":211},[28,35930,257],{"class":207},[28,35932,32340],{"class":211},[28,35934,35935],{"class":30,"line":9870},[28,35936,32345],{"class":269},[28,35938,35939],{"class":30,"line":9875},[28,35940,32350],{"class":269},[28,35942,35943],{"class":30,"line":9880},[28,35944,32355],{"class":269},[28,35946,35947,35949,35951],{"class":30,"line":9889},[28,35948,32360],{"class":211},[28,35950,257],{"class":207},[28,35952,32365],{"class":211},[28,35954,35955],{"class":30,"line":9894},[28,35956,2477],{"emptyLinePlaceholder":134},[28,35958,35959],{"class":30,"line":9900},[28,35960,2477],{"emptyLinePlaceholder":134},[28,35962,35963],{"class":30,"line":9921},[28,35964,32378],{"class":269},[28,35966,35967],{"class":30,"line":9927},[28,35968,32383],{"class":269},[28,35970,35971,35973,35975],{"class":30,"line":9941},[28,35972,32388],{"class":211},[28,35974,257],{"class":207},[28,35976,32393],{"class":38},[28,35978,35979],{"class":30,"line":9947},[28,35980,32398],{"class":269},[28,35982,35983,35985,35987],{"class":30,"line":9974},[28,35984,32403],{"class":211},[28,35986,257],{"class":207},[28,35988,32408],{"class":211},[28,35990,35991],{"class":30,"line":9983},[28,35992,32413],{"class":269},[28,35994,35995,35997,35999],{"class":30,"line":9989},[28,35996,32418],{"class":211},[28,35998,257],{"class":207},[28,36000,32408],{"class":211},[28,36002,36003],{"class":30,"line":9997},[28,36004,32427],{"class":269},[28,36006,36007,36009,36011],{"class":30,"line":10002},[28,36008,32432],{"class":211},[28,36010,257],{"class":207},[28,36012,32408],{"class":211},[28,36014,36015],{"class":30,"line":16681},[28,36016,32441],{"class":269},[28,36018,36019,36021,36023],{"class":30,"line":16687},[28,36020,32446],{"class":211},[28,36022,257],{"class":207},[28,36024,32408],{"class":211},[28,36026,36027],{"class":30,"line":16710},[28,36028,2477],{"emptyLinePlaceholder":134},[28,36030,36031],{"class":30,"line":16716},[28,36032,32459],{"class":269},[28,36034,36035,36037,36039],{"class":30,"line":16739},[28,36036,32464],{"class":211},[28,36038,257],{"class":207},[28,36040,32469],{"class":211},[28,36042,36043],{"class":30,"line":16753},[28,36044,2477],{"emptyLinePlaceholder":134},[28,36046,36047],{"class":30,"line":16773},[28,36048,2477],{"emptyLinePlaceholder":134},[28,36050,36051],{"class":30,"line":16779},[28,36052,32482],{"class":269},[28,36054,36055,36057,36059,36061,36063],{"class":30,"line":16790},[28,36056,3278],{"class":207},[28,36058,32489],{"class":211},[28,36060,26094],{"class":207},[28,36062,32494],{"class":38},[28,36064,32497],{"class":211},[28,36066,36067,36069,36071,36073,36075,36077,36079,36081,36083,36085,36087],{"class":30,"line":16813},[28,36068,32502],{"class":38},[28,36070,212],{"class":211},[28,36072,32507],{"class":64},[28,36074,32510],{"class":38},[28,36076,794],{"class":64},[28,36078,32510],{"class":38},[28,36080,461],{"class":64},[28,36082,32519],{"class":211},[28,36084,742],{"class":207},[28,36086,427],{"class":38},[28,36088,30548],{"class":211},[28,36090,36091,36093,36095,36097,36099,36101],{"class":30,"line":16835},[28,36092,32502],{"class":38},[28,36094,212],{"class":211},[28,36096,32534],{"class":64},[28,36098,665],{"class":207},[28,36100,656],{"class":38},[28,36102,218],{"class":211},[28,36104,36105],{"class":30,"line":16840},[28,36106,2477],{"emptyLinePlaceholder":134},[28,36108,36109],{"class":30,"line":16846},[28,36110,32549],{"class":269},[28,36112,36113],{"class":30,"line":16860},[28,36114,32554],{"class":269},[28,36116,36117,36119,36121],{"class":30,"line":16873},[28,36118,32559],{"class":211},[28,36120,257],{"class":207},[28,36122,32393],{"class":38},[28,36124,36125],{"class":30,"line":16878},[28,36126,32568],{"class":269},[28,36128,36129,36131,36133],{"class":30,"line":16892},[28,36130,32573],{"class":211},[28,36132,257],{"class":207},[28,36134,3162],{"class":38},[28,36136,36137],{"class":30,"line":16897},[28,36138,32582],{"class":269},[28,36140,36141,36143,36145],{"class":30,"line":16903},[28,36142,32587],{"class":211},[28,36144,257],{"class":207},[28,36146,32393],{"class":38},[28,36148,36149],{"class":30,"line":16908},[28,36150,32596],{"class":269},[28,36152,36153,36155,36157],{"class":30,"line":16922},[28,36154,32601],{"class":211},[28,36156,257],{"class":207},[28,36158,3162],{"class":38},[28,36160,36161],{"class":30,"line":16927},[28,36162,32610],{"class":269},[28,36164,36165,36167,36169],{"class":30,"line":16932},[28,36166,32615],{"class":211},[28,36168,257],{"class":207},[28,36170,3162],{"class":38},[28,36172,36173],{"class":30,"line":16946},[28,36174,32624],{"class":269},[28,36176,36177,36179,36181],{"class":30,"line":16958},[28,36178,32629],{"class":211},[28,36180,257],{"class":207},[28,36182,3162],{"class":38},[28,36184,36185],{"class":30,"line":16963},[28,36186,32638],{"class":269},[28,36188,36189,36191,36193,36195,36197],{"class":30,"line":16976},[28,36190,3480],{"class":207},[28,36192,31652],{"class":211},[28,36194,26094],{"class":207},[28,36196,31657],{"class":38},[28,36198,32651],{"class":211},[28,36200,36201],{"class":30,"line":16981},[28,36202,32656],{"class":269},[28,36204,36205,36207,36209],{"class":30,"line":16986},[28,36206,32661],{"class":211},[28,36208,257],{"class":207},[28,36210,32666],{"class":211},[28,36212,36213],{"class":30,"line":16991},[28,36214,32671],{"class":269},[28,36216,36217,36219,36221],{"class":30,"line":17004},[28,36218,32676],{"class":211},[28,36220,257],{"class":207},[28,36222,32681],{"class":211},[28,36224,36225],{"class":30,"line":17009},[28,36226,32687],{"class":269},[28,36228,36229],{"class":30,"line":32684},[28,36230,32693],{"class":211},[28,36232,36233],{"class":30,"line":32690},[28,36234,32699],{"class":269},[28,36236,36237],{"class":30,"line":32696},[28,36238,32705],{"class":269},[28,36240,36241,36243,36245],{"class":30,"line":32702},[28,36242,32711],{"class":211},[28,36244,257],{"class":207},[28,36246,32716],{"class":211},[28,36248,36249],{"class":30,"line":32708},[28,36250,32722],{"class":269},[28,36252,36253,36255,36257,36259,36261,36263,36265],{"class":30,"line":32719},[28,36254,32728],{"class":211},[28,36256,257],{"class":207},[28,36258,32733],{"class":211},[28,36260,32736],{"class":5293},[28,36262,257],{"class":207},[28,36264,427],{"class":38},[28,36266,218],{"class":211},[28,36268,36269],{"class":30,"line":32725},[28,36270,32748],{"class":269},[28,36272,36273,36275,36277],{"class":30,"line":32745},[28,36274,32754],{"class":211},[28,36276,257],{"class":207},[28,36278,32759],{"class":211},[28,36280,36281],{"class":30,"line":32751},[28,36282,32765],{"class":269},[28,36284,36285],{"class":30,"line":32762},[28,36286,32771],{"class":211},[28,36288,36289],{"class":30,"line":32768},[28,36290,32777],{"class":269},[28,36292,36293],{"class":30,"line":32774},[28,36294,32783],{"class":211},[28,36296,36297],{"class":30,"line":32780},[28,36298,32789],{"class":269},[28,36300,36301],{"class":30,"line":32786},[28,36302,32795],{"class":211},[28,36304,36305],{"class":30,"line":32792},[28,36306,32801],{"class":269},[28,36308,36309,36311,36313,36315,36317,36319,36321],{"class":30,"line":32798},[28,36310,32807],{"class":211},[28,36312,9554],{"class":207},[28,36314,32812],{"class":211},[28,36316,665],{"class":207},[28,36318,32817],{"class":211},[28,36320,401],{"class":38},[28,36322,218],{"class":211},[28,36324,36325],{"class":30,"line":32804},[28,36326,32827],{"class":269},[28,36328,36329,36331,36333,36335,36337],{"class":30,"line":32824},[28,36330,32833],{"class":211},[28,36332,9554],{"class":207},[28,36334,32838],{"class":211},[28,36336,3026],{"class":207},[28,36338,32843],{"class":211},[28,36340,36341],{"class":30,"line":32830},[28,36342,32849],{"class":269},[28,36344,36345,36347,36349,36351,36353],{"class":30,"line":32846},[28,36346,32855],{"class":211},[28,36348,9554],{"class":207},[28,36350,32817],{"class":211},[28,36352,401],{"class":38},[28,36354,218],{"class":211},[28,36356,36357],{"class":30,"line":32852},[28,36358,32869],{"class":269},[28,36360,36361,36363,36365,36367,36369],{"class":30,"line":32866},[28,36362,3480],{"class":207},[28,36364,32877],{"class":211},[28,36366,26094],{"class":207},[28,36368,31657],{"class":38},[28,36370,32884],{"class":211},[28,36372,36373],{"class":30,"line":32872},[28,36374,32890],{"class":269},[28,36376,36377,36379,36381],{"class":30,"line":32887},[28,36378,32661],{"class":211},[28,36380,257],{"class":207},[28,36382,32666],{"class":211},[28,36384,36385],{"class":30,"line":32893},[28,36386,32905],{"class":269},[28,36388,36389,36391,36393],{"class":30,"line":32902},[28,36390,32676],{"class":211},[28,36392,257],{"class":207},[28,36394,32681],{"class":211},[28,36396,36397],{"class":30,"line":32908},[28,36398,32920],{"class":269},[28,36400,36401],{"class":30,"line":32917},[28,36402,32926],{"class":211},[28,36404,36405],{"class":30,"line":32923},[28,36406,36407],{"class":269},"            # 验证时不计算梯度以节省内存\u002F计算\n",[28,36409,36410,36412],{"class":30,"line":32929},[28,36411,32932],{"class":207},[28,36413,32935],{"class":211},[28,36415,36416],{"class":30,"line":32938},[28,36417,32941],{"class":269},[28,36419,36420,36423,36425],{"class":30,"line":32944},[28,36421,36422],{"class":211},"                output",[28,36424,257],{"class":207},[28,36426,32716],{"class":211},[28,36428,36429],{"class":30,"line":32955},[28,36430,32958],{"class":269},[28,36432,36433,36436,36438,36440,36442,36444,36446],{"class":30,"line":32961},[28,36434,36435],{"class":211},"                pre_lab",[28,36437,257],{"class":207},[28,36439,32733],{"class":211},[28,36441,32736],{"class":5293},[28,36443,257],{"class":207},[28,36445,427],{"class":38},[28,36447,218],{"class":211},[28,36449,36450],{"class":30,"line":32980},[28,36451,32983],{"class":269},[28,36453,36454,36457,36459],{"class":30,"line":32986},[28,36455,36456],{"class":211},"                val_batch_loss",[28,36458,257],{"class":207},[28,36460,32759],{"class":211},[28,36462,36463],{"class":30,"line":32997},[28,36464,33000],{"class":269},[28,36466,36467,36470,36472,36475,36477,36479,36481],{"class":30,"line":33003},[28,36468,36469],{"class":211},"                val_loss",[28,36471,9554],{"class":207},[28,36473,36474],{"class":211},"val_batch_loss.item()",[28,36476,665],{"class":207},[28,36478,32817],{"class":211},[28,36480,401],{"class":38},[28,36482,218],{"class":211},[28,36484,36485,36488,36490,36492,36494],{"class":30,"line":33023},[28,36486,36487],{"class":211},"                val_corrects",[28,36489,9554],{"class":207},[28,36491,32838],{"class":211},[28,36493,3026],{"class":207},[28,36495,32843],{"class":211},[28,36497,36498],{"class":30,"line":33039},[28,36499,36500],{"class":269},"            # 当前用于验证的样本数量\n",[28,36502,36503,36506,36508,36510,36512],{"class":30,"line":33045},[28,36504,36505],{"class":211},"            val_num",[28,36507,9554],{"class":207},[28,36509,32817],{"class":211},[28,36511,401],{"class":38},[28,36513,218],{"class":211},[28,36515,36516],{"class":30,"line":33059},[28,36517,33062],{"class":269},[28,36519,36520],{"class":30,"line":33065},[28,36521,33068],{"class":269},[28,36523,36524,36526,36528],{"class":30,"line":33071},[28,36525,33074],{"class":211},[28,36527,794],{"class":207},[28,36529,33079],{"class":211},[28,36531,36532],{"class":30,"line":33082},[28,36533,33085],{"class":269},[28,36535,36536],{"class":30,"line":33088},[28,36537,33091],{"class":269},[28,36539,36540,36542,36544],{"class":30,"line":33094},[28,36541,33097],{"class":211},[28,36543,794],{"class":207},[28,36545,33079],{"class":211},[28,36547,36548],{"class":30,"line":33104},[28,36549,33107],{"class":269},[28,36551,36552,36554,36556],{"class":30,"line":33110},[28,36553,33113],{"class":211},[28,36555,794],{"class":207},[28,36557,33118],{"class":211},[28,36559,36560],{"class":30,"line":33121},[28,36561,33124],{"class":269},[28,36563,36564,36566,36568],{"class":30,"line":33127},[28,36565,33130],{"class":211},[28,36567,794],{"class":207},[28,36569,33118],{"class":211},[28,36571,36572],{"class":30,"line":33137},[28,36573,2477],{"emptyLinePlaceholder":134},[28,36575,36576],{"class":30,"line":33142},[28,36577,33145],{"class":269},[28,36579,36580,36582,36584,36586,36588,36590,36592,36594,36596,36598,36600,36602,36604,36606,36608,36610,36612,36614,36616,36618],{"class":30,"line":33148},[28,36581,32502],{"class":38},[28,36583,212],{"class":211},[28,36585,3669],{"class":64},[28,36587,32510],{"class":38},[28,36589,33159],{"class":64},[28,36591,1106],{"class":38},[28,36593,33164],{"class":207},[28,36595,1156],{"class":38},[28,36597,33169],{"class":64},[28,36599,1106],{"class":38},[28,36601,33164],{"class":207},[28,36603,1156],{"class":38},[28,36605,3669],{"class":64},[28,36607,33180],{"class":211},[28,36609,742],{"class":207},[28,36611,427],{"class":38},[28,36613,33187],{"class":211},[28,36615,742],{"class":207},[28,36617,427],{"class":38},[28,36619,33194],{"class":211},[28,36621,36622,36624,36626,36628,36630,36632,36634,36636,36638,36640,36642,36644,36646,36648,36650,36652,36654,36656,36658,36660],{"class":30,"line":33197},[28,36623,32502],{"class":38},[28,36625,212],{"class":211},[28,36627,3669],{"class":64},[28,36629,32510],{"class":38},[28,36631,33208],{"class":64},[28,36633,1106],{"class":38},[28,36635,33164],{"class":207},[28,36637,1156],{"class":38},[28,36639,33217],{"class":64},[28,36641,1106],{"class":38},[28,36643,33164],{"class":207},[28,36645,1156],{"class":38},[28,36647,3669],{"class":64},[28,36649,33228],{"class":211},[28,36651,742],{"class":207},[28,36653,427],{"class":38},[28,36655,33235],{"class":211},[28,36657,742],{"class":207},[28,36659,427],{"class":38},[28,36661,33194],{"class":211},[28,36663,36664],{"class":30,"line":33244},[28,36665,2477],{"emptyLinePlaceholder":134},[28,36667,36668],{"class":30,"line":33249},[28,36669,33252],{"class":269},[28,36671,36672,36674,36676,36678,36680,36682,36684],{"class":30,"line":33255},[28,36673,2574],{"class":207},[28,36675,33260],{"class":211},[28,36677,742],{"class":207},[28,36679,427],{"class":38},[28,36681,1150],{"class":211},[28,36683,1170],{"class":207},[28,36685,33271],{"class":211},[28,36687,36688],{"class":30,"line":33274},[28,36689,33277],{"class":269},[28,36691,36692,36694,36696,36698,36700,36702,36704],{"class":30,"line":33280},[28,36693,33283],{"class":211},[28,36695,251],{"class":38},[28,36697,257],{"class":207},[28,36699,33290],{"class":211},[28,36701,742],{"class":207},[28,36703,427],{"class":38},[28,36705,33297],{"class":211},[28,36707,36708],{"class":30,"line":33300},[28,36709,33303],{"class":269},[28,36711,36712],{"class":30,"line":33306},[28,36713,33309],{"class":269},[28,36715,36716,36718,36720],{"class":30,"line":33312},[28,36717,33315],{"class":211},[28,36719,257],{"class":207},[28,36721,32365],{"class":211},[28,36723,36724],{"class":30,"line":33322},[28,36725,2477],{"emptyLinePlaceholder":134},[28,36727,36728],{"class":30,"line":33327},[28,36729,33330],{"class":269},[28,36731,36732,36734,36736,36738,36740],{"class":30,"line":33333},[28,36733,33336],{"class":211},[28,36735,257],{"class":207},[28,36737,33341],{"class":211},[28,36739,742],{"class":207},[28,36741,33346],{"class":211},[28,36743,36744,36746,36748,36750,36752,36754,36756,36758,36760,36762,36764,36766,36768,36770,36772,36774,36776,36778],{"class":30,"line":33349},[28,36745,32502],{"class":38},[28,36747,212],{"class":211},[28,36749,33356],{"class":64},[28,36751,1106],{"class":38},[28,36753,33361],{"class":207},[28,36755,1156],{"class":38},[28,36757,754],{"class":64},[28,36759,1106],{"class":38},[28,36761,33361],{"class":207},[28,36763,1156],{"class":38},[28,36765,33374],{"class":64},[28,36767,33377],{"class":211},[28,36769,33380],{"class":207},[28,36771,1117],{"class":38},[28,36773,33385],{"class":211},[28,36775,538],{"class":207},[28,36777,1117],{"class":38},[28,36779,30548],{"class":211},[28,36781,36782],{"class":30,"line":33394},[28,36783,36784],{"class":269},"    # 选择最优参数并保存\n",[28,36786,36787],{"class":30,"line":33400},[28,36788,36789],{"class":269},"    # 保存最佳模型权重字典\n",[28,36791,36792,36795,36797],{"class":30,"line":33406},[28,36793,36794],{"class":211},"    torch.save(best_model_wts,",[28,36796,33418],{"class":64},[28,36798,218],{"class":211},[28,36800,36801],{"class":30,"line":33412},[28,36802,33438],{"class":269},[28,36804,36805,36807,36809,36811,36813,36815],{"class":30,"line":33423},[28,36806,33444],{"class":211},[28,36808,257],{"class":207},[28,36810,33449],{"class":211},[28,36812,33452],{"class":5293},[28,36814,257],{"class":207},[28,36816,1624],{"class":211},[28,36818,36819,36821,36823,36825],{"class":30,"line":33429},[28,36820,33462],{"class":64},[28,36822,1069],{"class":211},[28,36824,33467],{"class":38},[28,36826,33470],{"class":211},[28,36828,36829,36831],{"class":30,"line":33435},[28,36830,33476],{"class":64},[28,36832,33479],{"class":211},[28,36834,36835,36837],{"class":30,"line":33441},[28,36836,33485],{"class":64},[28,36838,33488],{"class":211},[28,36840,36841,36843],{"class":30,"line":33459},[28,36842,33494],{"class":64},[28,36844,33497],{"class":211},[28,36846,36847,36849],{"class":30,"line":33473},[28,36848,33503],{"class":64},[28,36850,33506],{"class":211},[28,36852,36853],{"class":30,"line":33482},[28,36854,33512],{"class":211},[28,36856,36857],{"class":30,"line":33491},[28,36858,33518],{"class":269},[28,36860,36861,36863],{"class":30,"line":33500},[28,36862,4167],{"class":207},[28,36864,33526],{"class":211},[28,36866,36867],{"class":30,"line":33509},[28,36868,2477],{"emptyLinePlaceholder":134},[28,36870,36871],{"class":30,"line":33515},[28,36872,33537],{"class":269},[28,36874,36875,36877,36879],{"class":30,"line":33521},[28,36876,31998],{"class":207},[28,36878,33545],{"class":34},[28,36880,33548],{"class":211},[28,36882,36883],{"class":30,"line":33529},[28,36884,33554],{"class":269},[28,36886,36887,36889,36891,36893,36895,36897,36899,36901],{"class":30,"line":33534},[28,36888,33560],{"class":211},[28,36890,31744],{"class":5293},[28,36892,257],{"class":207},[28,36894,212],{"class":211},[28,36896,708],{"class":38},[28,36898,588],{"class":211},[28,36900,503],{"class":38},[28,36902,30548],{"class":211},[28,36904,36905],{"class":30,"line":33540},[28,36906,33580],{"class":269},[28,36908,36909],{"class":30,"line":33551},[28,36910,33586],{"class":269},[28,36912,36913],{"class":30,"line":33557},[28,36914,33592],{"class":269},[28,36916,36917,36919,36921,36923,36925,36927,36929],{"class":30,"line":33577},[28,36918,31778],{"class":211},[28,36920,427],{"class":38},[28,36922,588],{"class":211},[28,36924,288],{"class":38},[28,36926,588],{"class":211},[28,36928,427],{"class":38},[28,36930,218],{"class":211},[28,36932,36933],{"class":30,"line":33583},[28,36934,33615],{"class":269},[28,36936,36937],{"class":30,"line":33589},[28,36938,33621],{"class":269},[28,36940,36941],{"class":30,"line":33595},[28,36942,33627],{"class":269},[28,36944,36945],{"class":30,"line":33612},[28,36946,33633],{"class":269},[28,36948,36949],{"class":30,"line":33618},[28,36950,33639],{"class":269},[28,36952,36953,36955,36957,36959,36961,36963,36965,36967,36969],{"class":30,"line":33624},[28,36954,33645],{"class":211},[28,36956,33648],{"class":64},[28,36958,33651],{"class":211},[28,36960,33654],{"class":64},[28,36962,588],{"class":211},[28,36964,33659],{"class":5293},[28,36966,257],{"class":207},[28,36968,33664],{"class":64},[28,36970,218],{"class":211},[28,36972,36973,36975,36977,36979,36981,36983,36985,36987,36989],{"class":30,"line":33630},[28,36974,33645],{"class":211},[28,36976,33648],{"class":64},[28,36978,33676],{"class":211},[28,36980,33679],{"class":64},[28,36982,588],{"class":211},[28,36984,33659],{"class":5293},[28,36986,257],{"class":207},[28,36988,33688],{"class":64},[28,36990,218],{"class":211},[28,36992,36993],{"class":30,"line":33636},[28,36994,33696],{"class":269},[28,36996,36997],{"class":30,"line":33642},[28,36998,33702],{"class":211},[28,37000,37001],{"class":30,"line":33669},[28,37002,33708],{"class":269},[28,37004,37005,37007,37009],{"class":30,"line":33693},[28,37006,33714],{"class":211},[28,37008,33717],{"class":64},[28,37010,218],{"class":211},[28,37012,37013,37015,37017],{"class":30,"line":33699},[28,37014,33725],{"class":211},[28,37016,33728],{"class":64},[28,37018,218],{"class":211},[28,37020,37021],{"class":30,"line":33705},[28,37022,33736],{"class":269},[28,37024,37025,37027,37029,37031,37033,37035,37037],{"class":30,"line":33711},[28,37026,31778],{"class":211},[28,37028,427],{"class":38},[28,37030,588],{"class":211},[28,37032,288],{"class":38},[28,37034,588],{"class":211},[28,37036,288],{"class":38},[28,37038,218],{"class":211},[28,37040,37041,37043,37045,37047,37049,37051,37053,37055,37057],{"class":30,"line":33722},[28,37042,33645],{"class":211},[28,37044,33648],{"class":64},[28,37046,33763],{"class":211},[28,37048,33654],{"class":64},[28,37050,588],{"class":211},[28,37052,33659],{"class":5293},[28,37054,257],{"class":207},[28,37056,33774],{"class":64},[28,37058,218],{"class":211},[28,37060,37061,37063,37065,37067,37069,37071,37073,37075,37077],{"class":30,"line":33733},[28,37062,33645],{"class":211},[28,37064,33648],{"class":64},[28,37066,33786],{"class":211},[28,37068,33679],{"class":64},[28,37070,588],{"class":211},[28,37072,33659],{"class":5293},[28,37074,257],{"class":207},[28,37076,33797],{"class":64},[28,37078,218],{"class":211},[28,37080,37081],{"class":30,"line":33739},[28,37082,33805],{"class":269},[28,37084,37085],{"class":30,"line":33756},[28,37086,33702],{"class":211},[28,37088,37089,37091,37093],{"class":30,"line":33779},[28,37090,33714],{"class":211},[28,37092,33648],{"class":64},[28,37094,218],{"class":211},[28,37096,37097,37099,37101],{"class":30,"line":33802},[28,37098,33725],{"class":211},[28,37100,33827],{"class":64},[28,37102,218],{"class":211},[28,37104,37105],{"class":30,"line":33808},[28,37106,33835],{"class":211},[28,37108,37109],{"class":30,"line":33813},[28,37110,2477],{"emptyLinePlaceholder":134},[28,37112,37113],{"class":30,"line":33822},[28,37114,33846],{"class":269},[28,37116,37117,37119,37121,37123,37125],{"class":30,"line":33832},[28,37118,1609],{"class":207},[28,37120,31271],{"class":38},[28,37122,3026],{"class":207},[28,37124,31276],{"class":64},[28,37126,3816],{"class":211},[28,37128,37129],{"class":30,"line":33838},[28,37130,33865],{"class":269},[28,37132,37133,37136,37138],{"class":30,"line":33843},[28,37134,37135],{"class":211},"    AlexNet",[28,37137,257],{"class":207},[28,37139,37140],{"class":211},"AlexNet()\n",[28,37142,37143,37145,37147],{"class":30,"line":33849},[28,37144,33882],{"class":211},[28,37146,257],{"class":207},[28,37148,33887],{"class":211},[28,37150,37151,37153,37155,37158,37160,37162,37164],{"class":30,"line":33862},[28,37152,33444],{"class":211},[28,37154,257],{"class":207},[28,37156,37157],{"class":211},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[28,37159,33900],{"class":5293},[28,37161,257],{"class":207},[28,37163,910],{"class":38},[28,37165,218],{"class":211},[28,37167,37168],{"class":30,"line":33868},[28,37169,33912],{"class":211},[161,37171,37172],{"start":50},[119,37173,33925],{},[18,37175,37177],{"className":30429,"code":37176,"language":30431,"meta":23,"style":23},"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",[25,37178,37179,37185,37195,37205,37215,37219,37229,37239,37250,37254,37258,37262,37270,37286,37296,37312,37322,37336,37340,37350,37360,37370,37376,37380,37384,37392,37396,37412,37420,37424,37428,37436,37444,37448,37452,37456,37460,37466,37470,37480,37488,37496,37500,37504,37508,37516,37520,37536,37540,37544,37548,37560,37564,37576,37580,37584,37596,37600,37610,37614,37618,37630,37634,37642,37646,37650,37658,37662,37670,37674,37678,37682,37686,37690,37706,37714,37718,37722,37770,37776,37780,37790,37798,37806,37810,37814,37818,37822,37830,37834,37850,37854,37862,37870],{"__ignoreMap":23},[28,37180,37181,37183],{"class":30,"line":31},[28,37182,30443],{"class":207},[28,37184,30446],{"class":211},[28,37186,37187,37189,37191,37193],{"class":30,"line":42},[28,37188,30443],{"class":207},[28,37190,31466],{"class":211},[28,37192,31434],{"class":207},[28,37194,31471],{"class":211},[28,37196,37197,37199,37201,37203],{"class":30,"line":50},[28,37198,30788],{"class":207},[28,37200,33953],{"class":211},[28,37202,30443],{"class":207},[28,37204,33958],{"class":211},[28,37206,37207,37209,37211,37213],{"class":30,"line":58},[28,37208,30788],{"class":207},[28,37210,31449],{"class":211},[28,37212,30443],{"class":207},[28,37214,31454],{"class":211},[28,37216,37217],{"class":30,"line":70},[28,37218,33973],{"class":269},[28,37220,37221,37223,37225,37227],{"class":30,"line":78},[28,37222,30788],{"class":207},[28,37224,31419],{"class":211},[28,37226,30443],{"class":207},[28,37228,31424],{"class":211},[28,37230,37231,37233,37235,37237],{"class":30,"line":86},[28,37232,30788],{"class":207},[28,37234,31965],{"class":211},[28,37236,30443],{"class":207},[28,37238,35608],{"class":211},[28,37240,37241,37243,37246,37248],{"class":30,"line":97},[28,37242,30788],{"class":207},[28,37244,37245],{"class":211}," 练习.AlexNet.model ",[28,37247,30443],{"class":207},[28,37249,35608],{"class":211},[28,37251,37252],{"class":30,"line":108},[28,37253,2477],{"emptyLinePlaceholder":134},[28,37255,37256],{"class":30,"line":1407},[28,37257,2477],{"emptyLinePlaceholder":134},[28,37259,37260],{"class":30,"line":1690},[28,37261,34002],{"class":269},[28,37263,37264,37266,37268],{"class":30,"line":1695},[28,37265,31998],{"class":207},[28,37267,34009],{"class":34},[28,37269,32004],{"class":211},[28,37271,37272,37274,37276,37278,37280,37282,37284],{"class":30,"line":1701},[28,37273,34016],{"class":211},[28,37275,257],{"class":207},[28,37277,31506],{"class":211},[28,37279,31509],{"class":5293},[28,37281,257],{"class":207},[28,37283,31514],{"class":64},[28,37285,31517],{"class":211},[28,37287,37288,37290,37292,37294],{"class":30,"line":1706},[28,37289,34033],{"class":5293},[28,37291,257],{"class":207},[28,37293,34038],{"class":38},[28,37295,31517],{"class":211},[28,37297,37298,37300,37302,37304,37306,37308,37310],{"class":30,"line":1720},[28,37299,34045],{"class":5293},[28,37301,257],{"class":207},[28,37303,31544],{"class":211},[28,37305,31547],{"class":5293},[28,37307,257],{"class":207},[28,37309,35500],{"class":38},[28,37311,31555],{"class":211},[28,37313,37314,37316,37318,37320],{"class":30,"line":1725},[28,37315,34062],{"class":5293},[28,37317,257],{"class":207},[28,37319,31527],{"class":38},[28,37321,218],{"class":211},[28,37323,37324,37326,37328,37330,37332,37334],{"class":30,"line":1731},[28,37325,34073],{"class":211},[28,37327,257],{"class":207},[28,37329,31585],{"class":211},[28,37331,31588],{"class":5293},[28,37333,257],{"class":207},[28,37335,34084],{"class":211},[28,37337,37338],{"class":30,"line":1752},[28,37339,34089],{"class":269},[28,37341,37342,37344,37346,37348],{"class":30,"line":1757},[28,37343,34094],{"class":5293},[28,37345,257],{"class":207},[28,37347,427],{"class":38},[28,37349,31517],{"class":211},[28,37351,37352,37354,37356,37358],{"class":30,"line":1771},[28,37353,34105],{"class":5293},[28,37355,257],{"class":207},[28,37357,31527],{"class":38},[28,37359,31517],{"class":211},[28,37361,37362,37364,37366,37368],{"class":30,"line":1776},[28,37363,34116],{"class":5293},[28,37365,257],{"class":207},[28,37367,401],{"class":38},[28,37369,218],{"class":211},[28,37371,37372,37374],{"class":30,"line":1805},[28,37373,4167],{"class":207},[28,37375,34129],{"class":211},[28,37377,37378],{"class":30,"line":1810},[28,37379,2477],{"emptyLinePlaceholder":134},[28,37381,37382],{"class":30,"line":1827},[28,37383,34138],{"class":269},[28,37385,37386,37388,37390],{"class":30,"line":1832},[28,37387,31998],{"class":207},[28,37389,34145],{"class":34},[28,37391,34148],{"class":211},[28,37393,37394],{"class":30,"line":1837},[28,37395,34153],{"class":269},[28,37397,37398,37400,37402,37404,37406,37408,37410],{"class":30,"line":1842},[28,37399,31288],{"class":211},[28,37401,257],{"class":207},[28,37403,31295],{"class":64},[28,37405,1782],{"class":207},[28,37407,31300],{"class":211},[28,37409,1779],{"class":207},[28,37411,34170],{"class":64},[28,37413,37414,37416,37418],{"class":30,"line":1856},[28,37415,31340],{"class":211},[28,37417,257],{"class":207},[28,37419,32340],{"class":211},[28,37421,37422],{"class":30,"line":1861},[28,37423,2477],{"emptyLinePlaceholder":134},[28,37425,37426],{"class":30,"line":2654},[28,37427,34187],{"class":269},[28,37429,37430,37432,37434],{"class":30,"line":2668},[28,37431,34192],{"class":211},[28,37433,257],{"class":207},[28,37435,32393],{"class":38},[28,37437,37438,37440,37442],{"class":30,"line":2676},[28,37439,34201],{"class":211},[28,37441,257],{"class":207},[28,37443,3162],{"class":38},[28,37445,37446],{"class":30,"line":2681},[28,37447,2477],{"emptyLinePlaceholder":134},[28,37449,37450],{"class":30,"line":2687},[28,37451,34214],{"class":269},[28,37453,37454],{"class":30,"line":2693},[28,37455,34219],{"class":269},[28,37457,37458],{"class":30,"line":2698},[28,37459,34224],{"class":269},[28,37461,37462,37464],{"class":30,"line":8025},[28,37463,34229],{"class":207},[28,37465,32935],{"class":211},[28,37467,37468],{"class":30,"line":8049},[28,37469,34236],{"class":269},[28,37471,37472,37474,37476,37478],{"class":30,"line":8054},[28,37473,3480],{"class":207},[28,37475,34243],{"class":211},[28,37477,26094],{"class":207},[28,37479,34248],{"class":211},[28,37481,37482,37484,37486],{"class":30,"line":8060},[28,37483,34253],{"class":211},[28,37485,257],{"class":207},[28,37487,34258],{"class":211},[28,37489,37490,37492,37494],{"class":30,"line":8087},[28,37491,34263],{"class":211},[28,37493,257],{"class":207},[28,37495,34268],{"class":211},[28,37497,37498],{"class":30,"line":8092},[28,37499,34273],{"class":269},[28,37501,37502],{"class":30,"line":8098},[28,37503,32926],{"class":211},[28,37505,37506],{"class":30,"line":8110},[28,37507,34282],{"class":269},[28,37509,37510,37512,37514],{"class":30,"line":8122},[28,37511,32711],{"class":211},[28,37513,257],{"class":207},[28,37515,34291],{"class":211},[28,37517,37518],{"class":30,"line":8134},[28,37519,34296],{"class":269},[28,37521,37522,37524,37526,37528,37530,37532,37534],{"class":30,"line":9793},[28,37523,32728],{"class":211},[28,37525,257],{"class":207},[28,37527,32733],{"class":211},[28,37529,32736],{"class":5293},[28,37531,257],{"class":207},[28,37533,427],{"class":38},[28,37535,218],{"class":211},[28,37537,37538],{"class":30,"line":9818},[28,37539,34317],{"class":269},[28,37541,37542],{"class":30,"line":9841},[28,37543,34322],{"class":269},[28,37545,37546],{"class":30,"line":9865},[28,37547,34327],{"class":269},[28,37549,37550,37552,37554,37556,37558],{"class":30,"line":9870},[28,37551,34332],{"class":211},[28,37553,9554],{"class":207},[28,37555,32838],{"class":211},[28,37557,3026],{"class":207},[28,37559,34341],{"class":211},[28,37561,37562],{"class":30,"line":9875},[28,37563,34346],{"class":269},[28,37565,37566,37568,37570,37572,37574],{"class":30,"line":9880},[28,37567,34351],{"class":211},[28,37569,9554],{"class":207},[28,37571,34356],{"class":211},[28,37573,401],{"class":38},[28,37575,218],{"class":211},[28,37577,37578],{"class":30,"line":9889},[28,37579,2477],{"emptyLinePlaceholder":134},[28,37581,37582],{"class":30,"line":9894},[28,37583,34369],{"class":269},[28,37585,37586,37588,37590,37592,37594],{"class":30,"line":9900},[28,37587,34374],{"class":211},[28,37589,257],{"class":207},[28,37591,34379],{"class":211},[28,37593,794],{"class":207},[28,37595,34384],{"class":211},[28,37597,37598],{"class":30,"line":9921},[28,37599,34389],{"class":269},[28,37601,37602,37604,37606,37608],{"class":30,"line":9927},[28,37603,32502],{"class":38},[28,37605,212],{"class":211},[28,37607,34398],{"class":64},[28,37609,34401],{"class":211},[28,37611,37612],{"class":30,"line":9941},[28,37613,2477],{"emptyLinePlaceholder":134},[28,37615,37616],{"class":30,"line":9947},[28,37617,34410],{"class":269},[28,37619,37620,37622,37624,37626,37628],{"class":30,"line":9974},[28,37621,1609],{"class":207},[28,37623,31271],{"class":38},[28,37625,3026],{"class":207},[28,37627,31276],{"class":64},[28,37629,3816],{"class":211},[28,37631,37632],{"class":30,"line":9983},[28,37633,34427],{"class":269},[28,37635,37636,37638,37640],{"class":30,"line":9989},[28,37637,31340],{"class":211},[28,37639,257],{"class":207},[28,37641,37140],{"class":211},[28,37643,37644],{"class":30,"line":9997},[28,37645,34440],{"class":269},[28,37647,37648],{"class":30,"line":10002},[28,37649,34445],{"class":269},[28,37651,37652,37654,37656],{"class":30,"line":16681},[28,37653,34450],{"class":211},[28,37655,34453],{"class":64},[28,37657,30548],{"class":211},[28,37659,37660],{"class":30,"line":16687},[28,37661,34460],{"class":269},[28,37663,37664,37666,37668],{"class":30,"line":16710},[28,37665,34073],{"class":211},[28,37667,257],{"class":207},[28,37669,34469],{"class":211},[28,37671,37672],{"class":30,"line":16716},[28,37673,34474],{"class":269},[28,37675,37676],{"class":30,"line":16739},[28,37677,34479],{"class":211},[28,37679,37680],{"class":30,"line":16753},[28,37681,2477],{"emptyLinePlaceholder":134},[28,37683,37684],{"class":30,"line":16773},[28,37685,34488],{"class":269},[28,37687,37688],{"class":30,"line":16779},[28,37689,34493],{"class":269},[28,37691,37692,37694,37696,37698,37700,37702,37704],{"class":30,"line":16790},[28,37693,31288],{"class":211},[28,37695,257],{"class":207},[28,37697,31295],{"class":64},[28,37699,1782],{"class":207},[28,37701,31300],{"class":211},[28,37703,1779],{"class":207},[28,37705,34170],{"class":64},[28,37707,37708,37710,37712],{"class":30,"line":16813},[28,37709,31340],{"class":211},[28,37711,257],{"class":207},[28,37713,32340],{"class":211},[28,37715,37716],{"class":30,"line":16835},[28,37717,34522],{"class":269},[28,37719,37720],{"class":30,"line":16840},[28,37721,34527],{"class":269},[28,37723,37724,37726,37728,37730,37732,37734,37736,37738,37740,37742,37744,37746,37748,37750,37752,37754,37756,37758,37760,37762,37764,37766,37768],{"class":30,"line":16846},[28,37725,34532],{"class":211},[28,37727,257],{"class":207},[28,37729,1100],{"class":211},[28,37731,34539],{"class":64},[28,37733,588],{"class":211},[28,37735,34544],{"class":64},[28,37737,588],{"class":211},[28,37739,34549],{"class":64},[28,37741,588],{"class":211},[28,37743,34554],{"class":64},[28,37745,588],{"class":211},[28,37747,34559],{"class":64},[28,37749,588],{"class":211},[28,37751,34564],{"class":64},[28,37753,588],{"class":211},[28,37755,34569],{"class":64},[28,37757,588],{"class":211},[28,37759,34574],{"class":64},[28,37761,588],{"class":211},[28,37763,34579],{"class":64},[28,37765,588],{"class":211},[28,37767,34584],{"class":64},[28,37769,33297],{"class":211},[28,37771,37772,37774],{"class":30,"line":16860},[28,37773,34229],{"class":207},[28,37775,32935],{"class":211},[28,37777,37778],{"class":30,"line":16873},[28,37779,34597],{"class":269},[28,37781,37782,37784,37786,37788],{"class":30,"line":16878},[28,37783,3480],{"class":207},[28,37785,34604],{"class":211},[28,37787,26094],{"class":207},[28,37789,34248],{"class":211},[28,37791,37792,37794,37796],{"class":30,"line":16892},[28,37793,32661],{"class":211},[28,37795,257],{"class":207},[28,37797,32666],{"class":211},[28,37799,37800,37802,37804],{"class":30,"line":16897},[28,37801,32676],{"class":211},[28,37803,257],{"class":207},[28,37805,32681],{"class":211},[28,37807,37808],{"class":30,"line":16903},[28,37809,2477],{"emptyLinePlaceholder":134},[28,37811,37812],{"class":30,"line":16908},[28,37813,34633],{"class":269},[28,37815,37816],{"class":30,"line":16922},[28,37817,32926],{"class":211},[28,37819,37820],{"class":30,"line":16927},[28,37821,34642],{"class":269},[28,37823,37824,37826,37828],{"class":30,"line":16932},[28,37825,32711],{"class":211},[28,37827,257],{"class":207},[28,37829,32716],{"class":211},[28,37831,37832],{"class":30,"line":16946},[28,37833,34655],{"class":269},[28,37835,37836,37838,37840,37842,37844,37846,37848],{"class":30,"line":16958},[28,37837,32728],{"class":211},[28,37839,257],{"class":207},[28,37841,32733],{"class":211},[28,37843,32736],{"class":5293},[28,37845,257],{"class":207},[28,37847,427],{"class":38},[28,37849,218],{"class":211},[28,37851,37852],{"class":30,"line":16963},[28,37853,34676],{"class":269},[28,37855,37856,37858,37860],{"class":30,"line":16976},[28,37857,34681],{"class":211},[28,37859,257],{"class":207},[28,37861,34686],{"class":211},[28,37863,37864,37866,37868],{"class":30,"line":16981},[28,37865,34691],{"class":211},[28,37867,257],{"class":207},[28,37869,34696],{"class":211},[28,37871,37872,37874,37876,37878,37880,37882,37884,37886],{"class":30,"line":16986},[28,37873,34701],{"class":38},[28,37875,212],{"class":211},[28,37877,34706],{"class":64},[28,37879,34709],{"class":211},[28,37881,34712],{"class":64},[28,37883,588],{"class":211},[28,37885,34717],{"class":64},[28,37887,34720],{"class":211},[177,37889,37891],{"id":37890},"_22vgg","2.2.VGG",[22075,37893,37895],{"id":37894},"_221原理","2.2.1.原理",[14,37897,37898],{},[1540,37899],{"alt":23,"src":37900},"\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,37902,37903],{},[1540,37904],{"alt":23,"src":37905},"\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,37907,37908],{},[1540,37909],{"alt":23,"src":37910},"\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,37912,37913],{},"参数详细描述：",[14,37915,37916],{},[1540,37917],{"alt":23,"src":37918},"\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,37920,37921],{},[1540,37922],{"alt":23,"src":37923},"\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,37925,37926],{},[1540,37927],{"alt":23,"src":37928},"\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,37930,37931],{},[1540,37932],{"alt":23,"src":37933},"\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,37935,37936],{},[1540,37937],{"alt":23,"src":37938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-022.png",[22075,37940,37942],{"id":37941},"_222代码实现","2.2.2.代码实现",[161,37944,37945],{},[119,37946,37947],{},"网络搭建",[18,37949,37951],{"className":30429,"code":37950,"language":30431,"meta":23,"style":23},"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",[25,37952,37953,37959,37971,37981,37991,37995,38012,38020,38039,38044,38049,38061,38099,38104,38140,38144,38173,38178,38183,38194,38230,38234,38270,38274,38302,38306,38311,38322,38358,38362,38398,38402,38438,38442,38470,38474,38479,38490,38527,38531,38567,38571,38607,38611,38639,38643,38648,38659,38695,38699,38735,38739,38775,38779,38807,38811,38816,38827,38832,38837,38842,38863,38867,38879,38883,38895,38899,38903,38908,38913,38928,38933,38943,38948,38963,38968,38987,38992,39001,39006,39016,39021,39026,39040,39045,39059,39067,39071,39075,39083,39094,39105,39116,39127,39138,39149,39155,39159,39164,39177,39197,39203,39212],{"__ignoreMap":23},[28,37954,37955,37957],{"class":30,"line":31},[28,37956,30443],{"class":207},[28,37958,30446],{"class":211},[28,37960,37961,37963,37966,37968],{"class":30,"line":42},[28,37962,30788],{"class":207},[28,37964,37965],{"class":211}," sympy.core.sympify ",[28,37967,30443],{"class":207},[28,37969,37970],{"class":211}," kernS\n",[28,37972,37973,37975,37977,37979],{"class":30,"line":50},[28,37974,30788],{"class":207},[28,37976,30791],{"class":211},[28,37978,30443],{"class":207},[28,37980,30796],{"class":211},[28,37982,37983,37985,37987,37989],{"class":30,"line":58},[28,37984,30788],{"class":207},[28,37986,30808],{"class":211},[28,37988,30443],{"class":207},[28,37990,30813],{"class":211},[28,37992,37993],{"class":30,"line":70},[28,37994,2477],{"emptyLinePlaceholder":134},[28,37996,37997,37999,38002,38004,38006,38008,38010],{"class":30,"line":78},[28,37998,14771],{"class":207},[28,38000,38001],{"class":34}," VGG16",[28,38003,212],{"class":211},[28,38005,30829],{"class":34},[28,38007,768],{"class":211},[28,38009,30834],{"class":34},[28,38011,30837],{"class":211},[28,38013,38014,38016,38018],{"class":30,"line":86},[28,38015,30852],{"class":207},[28,38017,30855],{"class":38},[28,38019,30858],{"class":211},[28,38021,38022,38024,38026,38029,38031,38033,38035,38037],{"class":30,"line":97},[28,38023,30868],{"class":38},[28,38025,212],{"class":211},[28,38027,38028],{"class":38},"VGG16",[28,38030,12512],{"class":211},[28,38032,30874],{"class":38},[28,38034,30877],{"class":211},[28,38036,30880],{"class":38},[28,38038,2053],{"class":211},[28,38040,38041],{"class":30,"line":108},[28,38042,38043],{"class":269},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[28,38045,38046],{"class":30,"line":1407},[28,38047,38048],{"class":269},"        # 这里用的是灰度图\n",[28,38050,38051,38053,38056,38058],{"class":30,"line":1690},[28,38052,30896],{"class":38},[28,38054,38055],{"class":211},".block1",[28,38057,257],{"class":207},[28,38059,38060],{"class":211},"nn.Sequential(\n",[28,38062,38063,38066,38068,38070,38072,38074,38076,38078,38080,38082,38084,38086,38088,38090,38092,38094,38096],{"class":30,"line":1695},[28,38064,38065],{"class":211},"            nn.Conv2d(",[28,38067,30907],{"class":5293},[28,38069,257],{"class":207},[28,38071,427],{"class":38},[28,38073,588],{"class":211},[28,38075,30916],{"class":5293},[28,38077,257],{"class":207},[28,38079,413],{"class":38},[28,38081,588],{"class":211},[28,38083,30925],{"class":5293},[28,38085,257],{"class":207},[28,38087,282],{"class":38},[28,38089,588],{"class":211},[28,38091,30934],{"class":5293},[28,38093,257],{"class":207},[28,38095,427],{"class":38},[28,38097,38098],{"class":211},"),\n",[28,38100,38101],{"class":30,"line":1701},[28,38102,38103],{"class":211},"            nn.ReLU(),\n",[28,38105,38106,38108,38110,38112,38114,38116,38118,38120,38122,38124,38126,38128,38130,38132,38134,38136,38138],{"class":30,"line":1706},[28,38107,38065],{"class":211},[28,38109,30907],{"class":5293},[28,38111,257],{"class":207},[28,38113,413],{"class":38},[28,38115,588],{"class":211},[28,38117,30916],{"class":5293},[28,38119,257],{"class":207},[28,38121,413],{"class":38},[28,38123,588],{"class":211},[28,38125,30925],{"class":5293},[28,38127,257],{"class":207},[28,38129,282],{"class":38},[28,38131,588],{"class":211},[28,38133,30934],{"class":5293},[28,38135,257],{"class":207},[28,38137,427],{"class":38},[28,38139,38098],{"class":211},[28,38141,38142],{"class":30,"line":1720},[28,38143,38103],{"class":211},[28,38145,38146,38149,38151,38153,38155,38157,38159,38161,38163,38165,38167,38169,38171],{"class":30,"line":1725},[28,38147,38148],{"class":211},"            nn.MaxPool2d(",[28,38150,30925],{"class":5293},[28,38152,257],{"class":207},[28,38154,288],{"class":38},[28,38156,588],{"class":211},[28,38158,30980],{"class":5293},[28,38160,257],{"class":207},[28,38162,288],{"class":38},[28,38164,588],{"class":211},[28,38166,30934],{"class":5293},[28,38168,257],{"class":207},[28,38170,401],{"class":38},[28,38172,218],{"class":211},[28,38174,38175],{"class":30,"line":1731},[28,38176,38177],{"class":211},"        )\n",[28,38179,38180],{"class":30,"line":1752},[28,38181,38182],{"class":269},"        # 第二层\n",[28,38184,38185,38187,38190,38192],{"class":30,"line":1757},[28,38186,30896],{"class":38},[28,38188,38189],{"class":211},".block2",[28,38191,257],{"class":207},[28,38193,38060],{"class":211},[28,38195,38196,38198,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228],{"class":30,"line":1771},[28,38197,38065],{"class":211},[28,38199,30907],{"class":5293},[28,38201,257],{"class":207},[28,38203,413],{"class":38},[28,38205,588],{"class":211},[28,38207,30916],{"class":5293},[28,38209,257],{"class":207},[28,38211,32121],{"class":38},[28,38213,588],{"class":211},[28,38215,30925],{"class":5293},[28,38217,257],{"class":207},[28,38219,282],{"class":38},[28,38221,588],{"class":211},[28,38223,30934],{"class":5293},[28,38225,257],{"class":207},[28,38227,427],{"class":38},[28,38229,38098],{"class":211},[28,38231,38232],{"class":30,"line":1776},[28,38233,38103],{"class":211},[28,38235,38236,38238,38240,38242,38244,38246,38248,38250,38252,38254,38256,38258,38260,38262,38264,38266,38268],{"class":30,"line":1805},[28,38237,38065],{"class":211},[28,38239,30907],{"class":5293},[28,38241,257],{"class":207},[28,38243,32121],{"class":38},[28,38245,588],{"class":211},[28,38247,30916],{"class":5293},[28,38249,257],{"class":207},[28,38251,32121],{"class":38},[28,38253,588],{"class":211},[28,38255,30925],{"class":5293},[28,38257,257],{"class":207},[28,38259,282],{"class":38},[28,38261,588],{"class":211},[28,38263,30934],{"class":5293},[28,38265,257],{"class":207},[28,38267,427],{"class":38},[28,38269,38098],{"class":211},[28,38271,38272],{"class":30,"line":1810},[28,38273,38103],{"class":211},[28,38275,38276,38278,38280,38282,38284,38286,38288,38290,38292,38294,38296,38298,38300],{"class":30,"line":1827},[28,38277,38148],{"class":211},[28,38279,30925],{"class":5293},[28,38281,257],{"class":207},[28,38283,288],{"class":38},[28,38285,588],{"class":211},[28,38287,30980],{"class":5293},[28,38289,257],{"class":207},[28,38291,288],{"class":38},[28,38293,588],{"class":211},[28,38295,30934],{"class":5293},[28,38297,257],{"class":207},[28,38299,401],{"class":38},[28,38301,218],{"class":211},[28,38303,38304],{"class":30,"line":1832},[28,38305,38177],{"class":211},[28,38307,38308],{"class":30,"line":1837},[28,38309,38310],{"class":269},"        # 第三层\n",[28,38312,38313,38315,38318,38320],{"class":30,"line":1842},[28,38314,30896],{"class":38},[28,38316,38317],{"class":211},".block3",[28,38319,257],{"class":207},[28,38321,38060],{"class":211},[28,38323,38324,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356],{"class":30,"line":1856},[28,38325,38065],{"class":211},[28,38327,30907],{"class":5293},[28,38329,257],{"class":207},[28,38331,32121],{"class":38},[28,38333,588],{"class":211},[28,38335,30916],{"class":5293},[28,38337,257],{"class":207},[28,38339,34921],{"class":38},[28,38341,588],{"class":211},[28,38343,30925],{"class":5293},[28,38345,257],{"class":207},[28,38347,282],{"class":38},[28,38349,588],{"class":211},[28,38351,30934],{"class":5293},[28,38353,257],{"class":207},[28,38355,427],{"class":38},[28,38357,38098],{"class":211},[28,38359,38360],{"class":30,"line":1861},[28,38361,38103],{"class":211},[28,38363,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396],{"class":30,"line":2654},[28,38365,38065],{"class":211},[28,38367,30907],{"class":5293},[28,38369,257],{"class":207},[28,38371,34921],{"class":38},[28,38373,588],{"class":211},[28,38375,30916],{"class":5293},[28,38377,257],{"class":207},[28,38379,34921],{"class":38},[28,38381,588],{"class":211},[28,38383,30925],{"class":5293},[28,38385,257],{"class":207},[28,38387,282],{"class":38},[28,38389,588],{"class":211},[28,38391,30934],{"class":5293},[28,38393,257],{"class":207},[28,38395,427],{"class":38},[28,38397,38098],{"class":211},[28,38399,38400],{"class":30,"line":2668},[28,38401,38103],{"class":211},[28,38403,38404,38406,38408,38410,38412,38414,38416,38418,38420,38422,38424,38426,38428,38430,38432,38434,38436],{"class":30,"line":2676},[28,38405,38065],{"class":211},[28,38407,30907],{"class":5293},[28,38409,257],{"class":207},[28,38411,34921],{"class":38},[28,38413,588],{"class":211},[28,38415,30916],{"class":5293},[28,38417,257],{"class":207},[28,38419,34921],{"class":38},[28,38421,588],{"class":211},[28,38423,30925],{"class":5293},[28,38425,257],{"class":207},[28,38427,282],{"class":38},[28,38429,588],{"class":211},[28,38431,30934],{"class":5293},[28,38433,257],{"class":207},[28,38435,427],{"class":38},[28,38437,38098],{"class":211},[28,38439,38440],{"class":30,"line":2681},[28,38441,38103],{"class":211},[28,38443,38444,38446,38448,38450,38452,38454,38456,38458,38460,38462,38464,38466,38468],{"class":30,"line":2687},[28,38445,38148],{"class":211},[28,38447,30925],{"class":5293},[28,38449,257],{"class":207},[28,38451,288],{"class":38},[28,38453,588],{"class":211},[28,38455,30980],{"class":5293},[28,38457,257],{"class":207},[28,38459,288],{"class":38},[28,38461,588],{"class":211},[28,38463,30934],{"class":5293},[28,38465,257],{"class":207},[28,38467,401],{"class":38},[28,38469,218],{"class":211},[28,38471,38472],{"class":30,"line":2693},[28,38473,38177],{"class":211},[28,38475,38476],{"class":30,"line":2698},[28,38477,38478],{"class":269},"        # 第四层\n",[28,38480,38481,38483,38486,38488],{"class":30,"line":8025},[28,38482,30896],{"class":38},[28,38484,38485],{"class":211},".block4",[28,38487,257],{"class":207},[28,38489,38060],{"class":211},[28,38491,38492,38494,38496,38498,38500,38502,38504,38506,38509,38511,38513,38515,38517,38519,38521,38523,38525],{"class":30,"line":8049},[28,38493,38065],{"class":211},[28,38495,30907],{"class":5293},[28,38497,257],{"class":207},[28,38499,34921],{"class":38},[28,38501,588],{"class":211},[28,38503,30916],{"class":5293},[28,38505,257],{"class":207},[28,38507,38508],{"class":38},"512",[28,38510,588],{"class":211},[28,38512,30925],{"class":5293},[28,38514,257],{"class":207},[28,38516,282],{"class":38},[28,38518,588],{"class":211},[28,38520,30934],{"class":5293},[28,38522,257],{"class":207},[28,38524,427],{"class":38},[28,38526,38098],{"class":211},[28,38528,38529],{"class":30,"line":8054},[28,38530,38103],{"class":211},[28,38532,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565],{"class":30,"line":8060},[28,38534,38065],{"class":211},[28,38536,30907],{"class":5293},[28,38538,257],{"class":207},[28,38540,38508],{"class":38},[28,38542,588],{"class":211},[28,38544,30916],{"class":5293},[28,38546,257],{"class":207},[28,38548,38508],{"class":38},[28,38550,588],{"class":211},[28,38552,30925],{"class":5293},[28,38554,257],{"class":207},[28,38556,282],{"class":38},[28,38558,588],{"class":211},[28,38560,30934],{"class":5293},[28,38562,257],{"class":207},[28,38564,427],{"class":38},[28,38566,38098],{"class":211},[28,38568,38569],{"class":30,"line":8087},[28,38570,38103],{"class":211},[28,38572,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597,38599,38601,38603,38605],{"class":30,"line":8092},[28,38574,38065],{"class":211},[28,38576,30907],{"class":5293},[28,38578,257],{"class":207},[28,38580,38508],{"class":38},[28,38582,588],{"class":211},[28,38584,30916],{"class":5293},[28,38586,257],{"class":207},[28,38588,38508],{"class":38},[28,38590,588],{"class":211},[28,38592,30925],{"class":5293},[28,38594,257],{"class":207},[28,38596,282],{"class":38},[28,38598,588],{"class":211},[28,38600,30934],{"class":5293},[28,38602,257],{"class":207},[28,38604,427],{"class":38},[28,38606,38098],{"class":211},[28,38608,38609],{"class":30,"line":8098},[28,38610,38103],{"class":211},[28,38612,38613,38615,38617,38619,38621,38623,38625,38627,38629,38631,38633,38635,38637],{"class":30,"line":8110},[28,38614,38148],{"class":211},[28,38616,30925],{"class":5293},[28,38618,257],{"class":207},[28,38620,288],{"class":38},[28,38622,588],{"class":211},[28,38624,30980],{"class":5293},[28,38626,257],{"class":207},[28,38628,288],{"class":38},[28,38630,588],{"class":211},[28,38632,30934],{"class":5293},[28,38634,257],{"class":207},[28,38636,401],{"class":38},[28,38638,218],{"class":211},[28,38640,38641],{"class":30,"line":8122},[28,38642,38177],{"class":211},[28,38644,38645],{"class":30,"line":8134},[28,38646,38647],{"class":269},"        # 第五层\n",[28,38649,38650,38652,38655,38657],{"class":30,"line":9793},[28,38651,30896],{"class":38},[28,38653,38654],{"class":211},".block5",[28,38656,257],{"class":207},[28,38658,38060],{"class":211},[28,38660,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693],{"class":30,"line":9818},[28,38662,38065],{"class":211},[28,38664,30907],{"class":5293},[28,38666,257],{"class":207},[28,38668,38508],{"class":38},[28,38670,588],{"class":211},[28,38672,30916],{"class":5293},[28,38674,257],{"class":207},[28,38676,38508],{"class":38},[28,38678,588],{"class":211},[28,38680,30925],{"class":5293},[28,38682,257],{"class":207},[28,38684,282],{"class":38},[28,38686,588],{"class":211},[28,38688,30934],{"class":5293},[28,38690,257],{"class":207},[28,38692,427],{"class":38},[28,38694,38098],{"class":211},[28,38696,38697],{"class":30,"line":9841},[28,38698,38103],{"class":211},[28,38700,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733],{"class":30,"line":9865},[28,38702,38065],{"class":211},[28,38704,30907],{"class":5293},[28,38706,257],{"class":207},[28,38708,38508],{"class":38},[28,38710,588],{"class":211},[28,38712,30916],{"class":5293},[28,38714,257],{"class":207},[28,38716,38508],{"class":38},[28,38718,588],{"class":211},[28,38720,30925],{"class":5293},[28,38722,257],{"class":207},[28,38724,282],{"class":38},[28,38726,588],{"class":211},[28,38728,30934],{"class":5293},[28,38730,257],{"class":207},[28,38732,427],{"class":38},[28,38734,38098],{"class":211},[28,38736,38737],{"class":30,"line":9870},[28,38738,38103],{"class":211},[28,38740,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763,38765,38767,38769,38771,38773],{"class":30,"line":9875},[28,38742,38065],{"class":211},[28,38744,30907],{"class":5293},[28,38746,257],{"class":207},[28,38748,38508],{"class":38},[28,38750,588],{"class":211},[28,38752,30916],{"class":5293},[28,38754,257],{"class":207},[28,38756,38508],{"class":38},[28,38758,588],{"class":211},[28,38760,30925],{"class":5293},[28,38762,257],{"class":207},[28,38764,282],{"class":38},[28,38766,588],{"class":211},[28,38768,30934],{"class":5293},[28,38770,257],{"class":207},[28,38772,427],{"class":38},[28,38774,38098],{"class":211},[28,38776,38777],{"class":30,"line":9880},[28,38778,38103],{"class":211},[28,38780,38781,38783,38785,38787,38789,38791,38793,38795,38797,38799,38801,38803,38805],{"class":30,"line":9889},[28,38782,38148],{"class":211},[28,38784,30925],{"class":5293},[28,38786,257],{"class":207},[28,38788,288],{"class":38},[28,38790,588],{"class":211},[28,38792,30980],{"class":5293},[28,38794,257],{"class":207},[28,38796,288],{"class":38},[28,38798,588],{"class":211},[28,38800,30934],{"class":5293},[28,38802,257],{"class":207},[28,38804,401],{"class":38},[28,38806,218],{"class":211},[28,38808,38809],{"class":30,"line":9894},[28,38810,38177],{"class":211},[28,38812,38813],{"class":30,"line":9900},[28,38814,38815],{"class":269},"        # 全连接层\n",[28,38817,38818,38820,38823,38825],{"class":30,"line":9921},[28,38819,30896],{"class":38},[28,38821,38822],{"class":211},".block6",[28,38824,257],{"class":207},[28,38826,38060],{"class":211},[28,38828,38829],{"class":30,"line":9927},[28,38830,38831],{"class":269},"            # 平展操作\n",[28,38833,38834],{"class":30,"line":9941},[28,38835,38836],{"class":269},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[28,38838,38839],{"class":30,"line":9947},[28,38840,38841],{"class":211},"            nn.Flatten(),\n",[28,38843,38844,38847,38849,38851,38853,38855,38857,38859,38861],{"class":30,"line":9974},[28,38845,38846],{"class":211},"            nn.Linear(",[28,38848,579],{"class":38},[28,38850,665],{"class":207},[28,38852,579],{"class":38},[28,38854,665],{"class":207},[28,38856,38508],{"class":38},[28,38858,588],{"class":211},[28,38860,34921],{"class":38},[28,38862,38098],{"class":211},[28,38864,38865],{"class":30,"line":9983},[28,38866,38103],{"class":211},[28,38868,38869,38871,38873,38875,38877],{"class":30,"line":9989},[28,38870,38846],{"class":211},[28,38872,34921],{"class":38},[28,38874,588],{"class":211},[28,38876,32121],{"class":38},[28,38878,38098],{"class":211},[28,38880,38881],{"class":30,"line":9997},[28,38882,38103],{"class":211},[28,38884,38885,38887,38889,38891,38893],{"class":30,"line":10002},[28,38886,38846],{"class":211},[28,38888,32121],{"class":38},[28,38890,588],{"class":211},[28,38892,656],{"class":38},[28,38894,218],{"class":211},[28,38896,38897],{"class":30,"line":16681},[28,38898,38177],{"class":211},[28,38900,38901],{"class":30,"line":16687},[28,38902,2477],{"emptyLinePlaceholder":134},[28,38904,38905],{"class":30,"line":16710},[28,38906,38907],{"class":269},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[28,38909,38910],{"class":30,"line":16716},[28,38911,38912],{"class":269},"        # 循环遍历模型\n",[28,38914,38915,38917,38920,38922,38925],{"class":30,"line":16739},[28,38916,3480],{"class":207},[28,38918,38919],{"class":211}," m ",[28,38921,26094],{"class":207},[28,38923,38924],{"class":38}," self",[28,38926,38927],{"class":211},".modules():\n",[28,38929,38930],{"class":30,"line":16753},[28,38931,38932],{"class":269},"            # print(m)\n",[28,38934,38935,38937,38940],{"class":30,"line":16773},[28,38936,4719],{"class":207},[28,38938,38939],{"class":38}," isinstance",[28,38941,38942],{"class":211},"(m,nn.Conv2d):\n",[28,38944,38945],{"class":30,"line":16779},[28,38946,38947],{"class":269},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[28,38949,38950,38953,38956,38958,38961],{"class":30,"line":16790},[28,38951,38952],{"class":211},"                nn.init.kaiming_normal_(m.weight,",[28,38954,38955],{"class":5293},"nonlinearity",[28,38957,257],{"class":207},[28,38959,38960],{"class":64},"'relu'",[28,38962,218],{"class":211},[28,38964,38965],{"class":30,"line":16813},[28,38966,38967],{"class":269},"                # 判断b参数是否存在\n",[28,38969,38970,38973,38976,38979,38982,38985],{"class":30,"line":16835},[28,38971,38972],{"class":207},"                if",[28,38974,38975],{"class":211}," m.bias ",[28,38977,38978],{"class":207},"is",[28,38980,38981],{"class":207}," not",[28,38983,38984],{"class":38}," None",[28,38986,3816],{"class":211},[28,38988,38989],{"class":30,"line":16840},[28,38990,38991],{"class":269},"                    # 如果参数不存在的化初始化b=0\n",[28,38993,38994,38997,38999],{"class":30,"line":16846},[28,38995,38996],{"class":211},"                    nn.init.constant_(m.bias,",[28,38998,401],{"class":38},[28,39000,218],{"class":211},[28,39002,39003],{"class":30,"line":16860},[28,39004,39005],{"class":269},"            # 全连接层初始化\n",[28,39007,39008,39011,39013],{"class":30,"line":16873},[28,39009,39010],{"class":207},"            elif",[28,39012,38939],{"class":38},[28,39014,39015],{"class":211},"(m,nn.Linear):\n",[28,39017,39018],{"class":30,"line":16878},[28,39019,39020],{"class":269},"                # 这个初始化方法是利用的是正太分布的方式\n",[28,39022,39023],{"class":30,"line":16892},[28,39024,39025],{"class":269},"                # 均值为0，方差为0.01\n",[28,39027,39028,39031,39033,39035,39038],{"class":30,"line":16897},[28,39029,39030],{"class":211},"                nn.init.normal_(m.weight,",[28,39032,401],{"class":38},[28,39034,588],{"class":211},[28,39036,39037],{"class":38},"0.01",[28,39039,218],{"class":211},[28,39041,39042],{"class":30,"line":16903},[28,39043,39044],{"class":269},"                # 初始化b参数\n",[28,39046,39047,39049,39051,39053,39055,39057],{"class":30,"line":16908},[28,39048,38972],{"class":207},[28,39050,38975],{"class":211},[28,39052,38978],{"class":207},[28,39054,38981],{"class":207},[28,39056,38984],{"class":38},[28,39058,3816],{"class":211},[28,39060,39061,39063,39065],{"class":30,"line":16922},[28,39062,38996],{"class":211},[28,39064,401],{"class":38},[28,39066,218],{"class":211},[28,39068,39069],{"class":30,"line":16927},[28,39070,2477],{"emptyLinePlaceholder":134},[28,39072,39073],{"class":30,"line":16932},[28,39074,35216],{"class":269},[28,39076,39077,39079,39081],{"class":30,"line":16946},[28,39078,30852],{"class":207},[28,39080,31144],{"class":34},[28,39082,31147],{"class":211},[28,39084,39085,39087,39089,39091],{"class":30,"line":16958},[28,39086,31152],{"class":211},[28,39088,257],{"class":207},[28,39090,30874],{"class":38},[28,39092,39093],{"class":211},".block1(x)\n",[28,39095,39096,39098,39100,39102],{"class":30,"line":16963},[28,39097,31152],{"class":211},[28,39099,257],{"class":207},[28,39101,30874],{"class":38},[28,39103,39104],{"class":211},".block2(x)\n",[28,39106,39107,39109,39111,39113],{"class":30,"line":16976},[28,39108,31152],{"class":211},[28,39110,257],{"class":207},[28,39112,30874],{"class":38},[28,39114,39115],{"class":211},".block3(x)\n",[28,39117,39118,39120,39122,39124],{"class":30,"line":16981},[28,39119,31152],{"class":211},[28,39121,257],{"class":207},[28,39123,30874],{"class":38},[28,39125,39126],{"class":211},".block4(x)\n",[28,39128,39129,39131,39133,39135],{"class":30,"line":16986},[28,39130,31152],{"class":211},[28,39132,257],{"class":207},[28,39134,30874],{"class":38},[28,39136,39137],{"class":211},".block5(x)\n",[28,39139,39140,39142,39144,39146],{"class":30,"line":16991},[28,39141,31152],{"class":211},[28,39143,257],{"class":207},[28,39145,30874],{"class":38},[28,39147,39148],{"class":211},".block6(x)\n",[28,39150,39151,39153],{"class":30,"line":17004},[28,39152,14829],{"class":207},[28,39154,31260],{"class":211},[28,39156,39157],{"class":30,"line":17009},[28,39158,2477],{"emptyLinePlaceholder":134},[28,39160,39161],{"class":30,"line":32684},[28,39162,39163],{"class":269},"# 验证模型\n",[28,39165,39166,39168,39170,39172,39175],{"class":30,"line":32690},[28,39167,1609],{"class":207},[28,39169,31271],{"class":38},[28,39171,3026],{"class":207},[28,39173,39174],{"class":64},"'__main__'",[28,39176,3816],{"class":211},[28,39178,39179,39181,39183,39185,39187,39189,39191,39193,39195],{"class":30,"line":32696},[28,39180,31288],{"class":211},[28,39182,257],{"class":207},[28,39184,30502],{"class":211},[28,39186,31295],{"class":64},[28,39188,1782],{"class":207},[28,39190,31300],{"class":211},[28,39192,1779],{"class":207},[28,39194,30527],{"class":64},[28,39196,218],{"class":211},[28,39198,39199,39201],{"class":30,"line":32702},[28,39200,31350],{"class":38},[28,39202,30536],{"class":211},[28,39204,39205,39207,39209],{"class":30,"line":32708},[28,39206,31340],{"class":211},[28,39208,257],{"class":207},[28,39210,39211],{"class":211},"VGG16().to(device)\n",[28,39213,39214,39216,39218,39220,39222,39224,39226,39228],{"class":30,"line":32719},[28,39215,31350],{"class":38},[28,39217,31353],{"class":211},[28,39219,427],{"class":38},[28,39221,588],{"class":211},[28,39223,31552],{"class":38},[28,39225,588],{"class":211},[28,39227,31552],{"class":38},[28,39229,31366],{"class":211},[161,39231,39232],{"start":42},[119,39233,39234],{},"训练代码",[14,39236,39237],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39239,39240],{},"解决方式:",[14,39242,39243],{},"①权重初始化",[18,39245,39247],{"className":30429,"code":39246,"language":30431,"meta":23,"style":23},"# 权重初始化,保证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",[25,39248,39249,39254,39259,39271,39276,39284,39289,39302,39307,39321,39326,39335,39340,39349,39354,39359,39372,39377,39391],{"__ignoreMap":23},[28,39250,39251],{"class":30,"line":31},[28,39252,39253],{"class":269},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[28,39255,39256],{"class":30,"line":42},[28,39257,39258],{"class":269},"# 循环遍历模型\n",[28,39260,39261,39263,39265,39267,39269],{"class":30,"line":50},[28,39262,3102],{"class":207},[28,39264,38919],{"class":211},[28,39266,26094],{"class":207},[28,39268,38924],{"class":38},[28,39270,38927],{"class":211},[28,39272,39273],{"class":30,"line":58},[28,39274,39275],{"class":269},"    # print(m)\n",[28,39277,39278,39280,39282],{"class":30,"line":70},[28,39279,3178],{"class":207},[28,39281,38939],{"class":38},[28,39283,38942],{"class":211},[28,39285,39286],{"class":30,"line":78},[28,39287,39288],{"class":269},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[28,39290,39291,39294,39296,39298,39300],{"class":30,"line":86},[28,39292,39293],{"class":211},"        nn.init.kaiming_normal_(m.weight,",[28,39295,38955],{"class":5293},[28,39297,257],{"class":207},[28,39299,38960],{"class":64},[28,39301,218],{"class":211},[28,39303,39304],{"class":30,"line":97},[28,39305,39306],{"class":269},"        # 判断b参数是否存在\n",[28,39308,39309,39311,39313,39315,39317,39319],{"class":30,"line":108},[28,39310,2574],{"class":207},[28,39312,38975],{"class":211},[28,39314,38978],{"class":207},[28,39316,38981],{"class":207},[28,39318,38984],{"class":38},[28,39320,3816],{"class":211},[28,39322,39323],{"class":30,"line":1407},[28,39324,39325],{"class":269},"            # 如果参数不存在的化初始化b=0\n",[28,39327,39328,39331,39333],{"class":30,"line":1690},[28,39329,39330],{"class":211},"            nn.init.constant_(m.bias,",[28,39332,401],{"class":38},[28,39334,218],{"class":211},[28,39336,39337],{"class":30,"line":1695},[28,39338,39339],{"class":269},"    # 全连接层初始化\n",[28,39341,39342,39345,39347],{"class":30,"line":1701},[28,39343,39344],{"class":207},"    elif",[28,39346,38939],{"class":38},[28,39348,39015],{"class":211},[28,39350,39351],{"class":30,"line":1706},[28,39352,39353],{"class":269},"        # 这个初始化方法是利用的是正太分布的方式\n",[28,39355,39356],{"class":30,"line":1720},[28,39357,39358],{"class":269},"        # 均值为0，方差为0.01\n",[28,39360,39361,39364,39366,39368,39370],{"class":30,"line":1725},[28,39362,39363],{"class":211},"        nn.init.normal_(m.weight,",[28,39365,401],{"class":38},[28,39367,588],{"class":211},[28,39369,39037],{"class":38},[28,39371,218],{"class":211},[28,39373,39374],{"class":30,"line":1731},[28,39375,39376],{"class":269},"        # 初始化b参数\n",[28,39378,39379,39381,39383,39385,39387,39389],{"class":30,"line":1752},[28,39380,2574],{"class":207},[28,39382,38975],{"class":211},[28,39384,38978],{"class":207},[28,39386,38981],{"class":207},[28,39388,38984],{"class":38},[28,39390,3816],{"class":211},[28,39392,39393,39395,39397],{"class":30,"line":1757},[28,39394,39330],{"class":211},[28,39396,401],{"class":38},[28,39398,218],{"class":211},[14,39400,39401],{},"②尽可能地增加批次",[14,39403,39404],{},"训练完整代码：",[18,39406,39407],{"className":30429,"code":37950,"language":30431,"meta":23,"style":23},[25,39408,39409,39415,39425,39435,39445,39449,39465,39473,39491,39495,39499,39509,39545,39549,39585,39589,39617,39621,39625,39635,39671,39675,39711,39715,39743,39747,39751,39761,39797,39801,39837,39841,39877,39881,39909,39913,39917,39927,39963,39967,40003,40007,40043,40047,40075,40079,40083,40093,40129,40133,40169,40173,40209,40213,40241,40245,40249,40259,40263,40267,40271,40291,40295,40307,40311,40323,40327,40331,40335,40339,40351,40355,40363,40367,40379,40383,40397,40401,40409,40413,40421,40425,40429,40441,40445,40459,40467,40471,40475,40483,40493,40503,40513,40523,40533,40543,40549,40553,40557,40569,40589,40595,40603],{"__ignoreMap":23},[28,39410,39411,39413],{"class":30,"line":31},[28,39412,30443],{"class":207},[28,39414,30446],{"class":211},[28,39416,39417,39419,39421,39423],{"class":30,"line":42},[28,39418,30788],{"class":207},[28,39420,37965],{"class":211},[28,39422,30443],{"class":207},[28,39424,37970],{"class":211},[28,39426,39427,39429,39431,39433],{"class":30,"line":50},[28,39428,30788],{"class":207},[28,39430,30791],{"class":211},[28,39432,30443],{"class":207},[28,39434,30796],{"class":211},[28,39436,39437,39439,39441,39443],{"class":30,"line":58},[28,39438,30788],{"class":207},[28,39440,30808],{"class":211},[28,39442,30443],{"class":207},[28,39444,30813],{"class":211},[28,39446,39447],{"class":30,"line":70},[28,39448,2477],{"emptyLinePlaceholder":134},[28,39450,39451,39453,39455,39457,39459,39461,39463],{"class":30,"line":78},[28,39452,14771],{"class":207},[28,39454,38001],{"class":34},[28,39456,212],{"class":211},[28,39458,30829],{"class":34},[28,39460,768],{"class":211},[28,39462,30834],{"class":34},[28,39464,30837],{"class":211},[28,39466,39467,39469,39471],{"class":30,"line":86},[28,39468,30852],{"class":207},[28,39470,30855],{"class":38},[28,39472,30858],{"class":211},[28,39474,39475,39477,39479,39481,39483,39485,39487,39489],{"class":30,"line":97},[28,39476,30868],{"class":38},[28,39478,212],{"class":211},[28,39480,38028],{"class":38},[28,39482,12512],{"class":211},[28,39484,30874],{"class":38},[28,39486,30877],{"class":211},[28,39488,30880],{"class":38},[28,39490,2053],{"class":211},[28,39492,39493],{"class":30,"line":108},[28,39494,38043],{"class":269},[28,39496,39497],{"class":30,"line":1407},[28,39498,38048],{"class":269},[28,39500,39501,39503,39505,39507],{"class":30,"line":1690},[28,39502,30896],{"class":38},[28,39504,38055],{"class":211},[28,39506,257],{"class":207},[28,39508,38060],{"class":211},[28,39510,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541,39543],{"class":30,"line":1695},[28,39512,38065],{"class":211},[28,39514,30907],{"class":5293},[28,39516,257],{"class":207},[28,39518,427],{"class":38},[28,39520,588],{"class":211},[28,39522,30916],{"class":5293},[28,39524,257],{"class":207},[28,39526,413],{"class":38},[28,39528,588],{"class":211},[28,39530,30925],{"class":5293},[28,39532,257],{"class":207},[28,39534,282],{"class":38},[28,39536,588],{"class":211},[28,39538,30934],{"class":5293},[28,39540,257],{"class":207},[28,39542,427],{"class":38},[28,39544,38098],{"class":211},[28,39546,39547],{"class":30,"line":1701},[28,39548,38103],{"class":211},[28,39550,39551,39553,39555,39557,39559,39561,39563,39565,39567,39569,39571,39573,39575,39577,39579,39581,39583],{"class":30,"line":1706},[28,39552,38065],{"class":211},[28,39554,30907],{"class":5293},[28,39556,257],{"class":207},[28,39558,413],{"class":38},[28,39560,588],{"class":211},[28,39562,30916],{"class":5293},[28,39564,257],{"class":207},[28,39566,413],{"class":38},[28,39568,588],{"class":211},[28,39570,30925],{"class":5293},[28,39572,257],{"class":207},[28,39574,282],{"class":38},[28,39576,588],{"class":211},[28,39578,30934],{"class":5293},[28,39580,257],{"class":207},[28,39582,427],{"class":38},[28,39584,38098],{"class":211},[28,39586,39587],{"class":30,"line":1720},[28,39588,38103],{"class":211},[28,39590,39591,39593,39595,39597,39599,39601,39603,39605,39607,39609,39611,39613,39615],{"class":30,"line":1725},[28,39592,38148],{"class":211},[28,39594,30925],{"class":5293},[28,39596,257],{"class":207},[28,39598,288],{"class":38},[28,39600,588],{"class":211},[28,39602,30980],{"class":5293},[28,39604,257],{"class":207},[28,39606,288],{"class":38},[28,39608,588],{"class":211},[28,39610,30934],{"class":5293},[28,39612,257],{"class":207},[28,39614,401],{"class":38},[28,39616,218],{"class":211},[28,39618,39619],{"class":30,"line":1731},[28,39620,38177],{"class":211},[28,39622,39623],{"class":30,"line":1752},[28,39624,38182],{"class":269},[28,39626,39627,39629,39631,39633],{"class":30,"line":1757},[28,39628,30896],{"class":38},[28,39630,38189],{"class":211},[28,39632,257],{"class":207},[28,39634,38060],{"class":211},[28,39636,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669],{"class":30,"line":1771},[28,39638,38065],{"class":211},[28,39640,30907],{"class":5293},[28,39642,257],{"class":207},[28,39644,413],{"class":38},[28,39646,588],{"class":211},[28,39648,30916],{"class":5293},[28,39650,257],{"class":207},[28,39652,32121],{"class":38},[28,39654,588],{"class":211},[28,39656,30925],{"class":5293},[28,39658,257],{"class":207},[28,39660,282],{"class":38},[28,39662,588],{"class":211},[28,39664,30934],{"class":5293},[28,39666,257],{"class":207},[28,39668,427],{"class":38},[28,39670,38098],{"class":211},[28,39672,39673],{"class":30,"line":1776},[28,39674,38103],{"class":211},[28,39676,39677,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699,39701,39703,39705,39707,39709],{"class":30,"line":1805},[28,39678,38065],{"class":211},[28,39680,30907],{"class":5293},[28,39682,257],{"class":207},[28,39684,32121],{"class":38},[28,39686,588],{"class":211},[28,39688,30916],{"class":5293},[28,39690,257],{"class":207},[28,39692,32121],{"class":38},[28,39694,588],{"class":211},[28,39696,30925],{"class":5293},[28,39698,257],{"class":207},[28,39700,282],{"class":38},[28,39702,588],{"class":211},[28,39704,30934],{"class":5293},[28,39706,257],{"class":207},[28,39708,427],{"class":38},[28,39710,38098],{"class":211},[28,39712,39713],{"class":30,"line":1810},[28,39714,38103],{"class":211},[28,39716,39717,39719,39721,39723,39725,39727,39729,39731,39733,39735,39737,39739,39741],{"class":30,"line":1827},[28,39718,38148],{"class":211},[28,39720,30925],{"class":5293},[28,39722,257],{"class":207},[28,39724,288],{"class":38},[28,39726,588],{"class":211},[28,39728,30980],{"class":5293},[28,39730,257],{"class":207},[28,39732,288],{"class":38},[28,39734,588],{"class":211},[28,39736,30934],{"class":5293},[28,39738,257],{"class":207},[28,39740,401],{"class":38},[28,39742,218],{"class":211},[28,39744,39745],{"class":30,"line":1832},[28,39746,38177],{"class":211},[28,39748,39749],{"class":30,"line":1837},[28,39750,38310],{"class":269},[28,39752,39753,39755,39757,39759],{"class":30,"line":1842},[28,39754,30896],{"class":38},[28,39756,38317],{"class":211},[28,39758,257],{"class":207},[28,39760,38060],{"class":211},[28,39762,39763,39765,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795],{"class":30,"line":1856},[28,39764,38065],{"class":211},[28,39766,30907],{"class":5293},[28,39768,257],{"class":207},[28,39770,32121],{"class":38},[28,39772,588],{"class":211},[28,39774,30916],{"class":5293},[28,39776,257],{"class":207},[28,39778,34921],{"class":38},[28,39780,588],{"class":211},[28,39782,30925],{"class":5293},[28,39784,257],{"class":207},[28,39786,282],{"class":38},[28,39788,588],{"class":211},[28,39790,30934],{"class":5293},[28,39792,257],{"class":207},[28,39794,427],{"class":38},[28,39796,38098],{"class":211},[28,39798,39799],{"class":30,"line":1861},[28,39800,38103],{"class":211},[28,39802,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835],{"class":30,"line":2654},[28,39804,38065],{"class":211},[28,39806,30907],{"class":5293},[28,39808,257],{"class":207},[28,39810,34921],{"class":38},[28,39812,588],{"class":211},[28,39814,30916],{"class":5293},[28,39816,257],{"class":207},[28,39818,34921],{"class":38},[28,39820,588],{"class":211},[28,39822,30925],{"class":5293},[28,39824,257],{"class":207},[28,39826,282],{"class":38},[28,39828,588],{"class":211},[28,39830,30934],{"class":5293},[28,39832,257],{"class":207},[28,39834,427],{"class":38},[28,39836,38098],{"class":211},[28,39838,39839],{"class":30,"line":2668},[28,39840,38103],{"class":211},[28,39842,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867,39869,39871,39873,39875],{"class":30,"line":2676},[28,39844,38065],{"class":211},[28,39846,30907],{"class":5293},[28,39848,257],{"class":207},[28,39850,34921],{"class":38},[28,39852,588],{"class":211},[28,39854,30916],{"class":5293},[28,39856,257],{"class":207},[28,39858,34921],{"class":38},[28,39860,588],{"class":211},[28,39862,30925],{"class":5293},[28,39864,257],{"class":207},[28,39866,282],{"class":38},[28,39868,588],{"class":211},[28,39870,30934],{"class":5293},[28,39872,257],{"class":207},[28,39874,427],{"class":38},[28,39876,38098],{"class":211},[28,39878,39879],{"class":30,"line":2681},[28,39880,38103],{"class":211},[28,39882,39883,39885,39887,39889,39891,39893,39895,39897,39899,39901,39903,39905,39907],{"class":30,"line":2687},[28,39884,38148],{"class":211},[28,39886,30925],{"class":5293},[28,39888,257],{"class":207},[28,39890,288],{"class":38},[28,39892,588],{"class":211},[28,39894,30980],{"class":5293},[28,39896,257],{"class":207},[28,39898,288],{"class":38},[28,39900,588],{"class":211},[28,39902,30934],{"class":5293},[28,39904,257],{"class":207},[28,39906,401],{"class":38},[28,39908,218],{"class":211},[28,39910,39911],{"class":30,"line":2693},[28,39912,38177],{"class":211},[28,39914,39915],{"class":30,"line":2698},[28,39916,38478],{"class":269},[28,39918,39919,39921,39923,39925],{"class":30,"line":8025},[28,39920,30896],{"class":38},[28,39922,38485],{"class":211},[28,39924,257],{"class":207},[28,39926,38060],{"class":211},[28,39928,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961],{"class":30,"line":8049},[28,39930,38065],{"class":211},[28,39932,30907],{"class":5293},[28,39934,257],{"class":207},[28,39936,34921],{"class":38},[28,39938,588],{"class":211},[28,39940,30916],{"class":5293},[28,39942,257],{"class":207},[28,39944,38508],{"class":38},[28,39946,588],{"class":211},[28,39948,30925],{"class":5293},[28,39950,257],{"class":207},[28,39952,282],{"class":38},[28,39954,588],{"class":211},[28,39956,30934],{"class":5293},[28,39958,257],{"class":207},[28,39960,427],{"class":38},[28,39962,38098],{"class":211},[28,39964,39965],{"class":30,"line":8054},[28,39966,38103],{"class":211},[28,39968,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001],{"class":30,"line":8060},[28,39970,38065],{"class":211},[28,39972,30907],{"class":5293},[28,39974,257],{"class":207},[28,39976,38508],{"class":38},[28,39978,588],{"class":211},[28,39980,30916],{"class":5293},[28,39982,257],{"class":207},[28,39984,38508],{"class":38},[28,39986,588],{"class":211},[28,39988,30925],{"class":5293},[28,39990,257],{"class":207},[28,39992,282],{"class":38},[28,39994,588],{"class":211},[28,39996,30934],{"class":5293},[28,39998,257],{"class":207},[28,40000,427],{"class":38},[28,40002,38098],{"class":211},[28,40004,40005],{"class":30,"line":8087},[28,40006,38103],{"class":211},[28,40008,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041],{"class":30,"line":8092},[28,40010,38065],{"class":211},[28,40012,30907],{"class":5293},[28,40014,257],{"class":207},[28,40016,38508],{"class":38},[28,40018,588],{"class":211},[28,40020,30916],{"class":5293},[28,40022,257],{"class":207},[28,40024,38508],{"class":38},[28,40026,588],{"class":211},[28,40028,30925],{"class":5293},[28,40030,257],{"class":207},[28,40032,282],{"class":38},[28,40034,588],{"class":211},[28,40036,30934],{"class":5293},[28,40038,257],{"class":207},[28,40040,427],{"class":38},[28,40042,38098],{"class":211},[28,40044,40045],{"class":30,"line":8098},[28,40046,38103],{"class":211},[28,40048,40049,40051,40053,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073],{"class":30,"line":8110},[28,40050,38148],{"class":211},[28,40052,30925],{"class":5293},[28,40054,257],{"class":207},[28,40056,288],{"class":38},[28,40058,588],{"class":211},[28,40060,30980],{"class":5293},[28,40062,257],{"class":207},[28,40064,288],{"class":38},[28,40066,588],{"class":211},[28,40068,30934],{"class":5293},[28,40070,257],{"class":207},[28,40072,401],{"class":38},[28,40074,218],{"class":211},[28,40076,40077],{"class":30,"line":8122},[28,40078,38177],{"class":211},[28,40080,40081],{"class":30,"line":8134},[28,40082,38647],{"class":269},[28,40084,40085,40087,40089,40091],{"class":30,"line":9793},[28,40086,30896],{"class":38},[28,40088,38654],{"class":211},[28,40090,257],{"class":207},[28,40092,38060],{"class":211},[28,40094,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127],{"class":30,"line":9818},[28,40096,38065],{"class":211},[28,40098,30907],{"class":5293},[28,40100,257],{"class":207},[28,40102,38508],{"class":38},[28,40104,588],{"class":211},[28,40106,30916],{"class":5293},[28,40108,257],{"class":207},[28,40110,38508],{"class":38},[28,40112,588],{"class":211},[28,40114,30925],{"class":5293},[28,40116,257],{"class":207},[28,40118,282],{"class":38},[28,40120,588],{"class":211},[28,40122,30934],{"class":5293},[28,40124,257],{"class":207},[28,40126,427],{"class":38},[28,40128,38098],{"class":211},[28,40130,40131],{"class":30,"line":9841},[28,40132,38103],{"class":211},[28,40134,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167],{"class":30,"line":9865},[28,40136,38065],{"class":211},[28,40138,30907],{"class":5293},[28,40140,257],{"class":207},[28,40142,38508],{"class":38},[28,40144,588],{"class":211},[28,40146,30916],{"class":5293},[28,40148,257],{"class":207},[28,40150,38508],{"class":38},[28,40152,588],{"class":211},[28,40154,30925],{"class":5293},[28,40156,257],{"class":207},[28,40158,282],{"class":38},[28,40160,588],{"class":211},[28,40162,30934],{"class":5293},[28,40164,257],{"class":207},[28,40166,427],{"class":38},[28,40168,38098],{"class":211},[28,40170,40171],{"class":30,"line":9870},[28,40172,38103],{"class":211},[28,40174,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197,40199,40201,40203,40205,40207],{"class":30,"line":9875},[28,40176,38065],{"class":211},[28,40178,30907],{"class":5293},[28,40180,257],{"class":207},[28,40182,38508],{"class":38},[28,40184,588],{"class":211},[28,40186,30916],{"class":5293},[28,40188,257],{"class":207},[28,40190,38508],{"class":38},[28,40192,588],{"class":211},[28,40194,30925],{"class":5293},[28,40196,257],{"class":207},[28,40198,282],{"class":38},[28,40200,588],{"class":211},[28,40202,30934],{"class":5293},[28,40204,257],{"class":207},[28,40206,427],{"class":38},[28,40208,38098],{"class":211},[28,40210,40211],{"class":30,"line":9880},[28,40212,38103],{"class":211},[28,40214,40215,40217,40219,40221,40223,40225,40227,40229,40231,40233,40235,40237,40239],{"class":30,"line":9889},[28,40216,38148],{"class":211},[28,40218,30925],{"class":5293},[28,40220,257],{"class":207},[28,40222,288],{"class":38},[28,40224,588],{"class":211},[28,40226,30980],{"class":5293},[28,40228,257],{"class":207},[28,40230,288],{"class":38},[28,40232,588],{"class":211},[28,40234,30934],{"class":5293},[28,40236,257],{"class":207},[28,40238,401],{"class":38},[28,40240,218],{"class":211},[28,40242,40243],{"class":30,"line":9894},[28,40244,38177],{"class":211},[28,40246,40247],{"class":30,"line":9900},[28,40248,38815],{"class":269},[28,40250,40251,40253,40255,40257],{"class":30,"line":9921},[28,40252,30896],{"class":38},[28,40254,38822],{"class":211},[28,40256,257],{"class":207},[28,40258,38060],{"class":211},[28,40260,40261],{"class":30,"line":9927},[28,40262,38831],{"class":269},[28,40264,40265],{"class":30,"line":9941},[28,40266,38836],{"class":269},[28,40268,40269],{"class":30,"line":9947},[28,40270,38841],{"class":211},[28,40272,40273,40275,40277,40279,40281,40283,40285,40287,40289],{"class":30,"line":9974},[28,40274,38846],{"class":211},[28,40276,579],{"class":38},[28,40278,665],{"class":207},[28,40280,579],{"class":38},[28,40282,665],{"class":207},[28,40284,38508],{"class":38},[28,40286,588],{"class":211},[28,40288,34921],{"class":38},[28,40290,38098],{"class":211},[28,40292,40293],{"class":30,"line":9983},[28,40294,38103],{"class":211},[28,40296,40297,40299,40301,40303,40305],{"class":30,"line":9989},[28,40298,38846],{"class":211},[28,40300,34921],{"class":38},[28,40302,588],{"class":211},[28,40304,32121],{"class":38},[28,40306,38098],{"class":211},[28,40308,40309],{"class":30,"line":9997},[28,40310,38103],{"class":211},[28,40312,40313,40315,40317,40319,40321],{"class":30,"line":10002},[28,40314,38846],{"class":211},[28,40316,32121],{"class":38},[28,40318,588],{"class":211},[28,40320,656],{"class":38},[28,40322,218],{"class":211},[28,40324,40325],{"class":30,"line":16681},[28,40326,38177],{"class":211},[28,40328,40329],{"class":30,"line":16687},[28,40330,2477],{"emptyLinePlaceholder":134},[28,40332,40333],{"class":30,"line":16710},[28,40334,38907],{"class":269},[28,40336,40337],{"class":30,"line":16716},[28,40338,38912],{"class":269},[28,40340,40341,40343,40345,40347,40349],{"class":30,"line":16739},[28,40342,3480],{"class":207},[28,40344,38919],{"class":211},[28,40346,26094],{"class":207},[28,40348,38924],{"class":38},[28,40350,38927],{"class":211},[28,40352,40353],{"class":30,"line":16753},[28,40354,38932],{"class":269},[28,40356,40357,40359,40361],{"class":30,"line":16773},[28,40358,4719],{"class":207},[28,40360,38939],{"class":38},[28,40362,38942],{"class":211},[28,40364,40365],{"class":30,"line":16779},[28,40366,38947],{"class":269},[28,40368,40369,40371,40373,40375,40377],{"class":30,"line":16790},[28,40370,38952],{"class":211},[28,40372,38955],{"class":5293},[28,40374,257],{"class":207},[28,40376,38960],{"class":64},[28,40378,218],{"class":211},[28,40380,40381],{"class":30,"line":16813},[28,40382,38967],{"class":269},[28,40384,40385,40387,40389,40391,40393,40395],{"class":30,"line":16835},[28,40386,38972],{"class":207},[28,40388,38975],{"class":211},[28,40390,38978],{"class":207},[28,40392,38981],{"class":207},[28,40394,38984],{"class":38},[28,40396,3816],{"class":211},[28,40398,40399],{"class":30,"line":16840},[28,40400,38991],{"class":269},[28,40402,40403,40405,40407],{"class":30,"line":16846},[28,40404,38996],{"class":211},[28,40406,401],{"class":38},[28,40408,218],{"class":211},[28,40410,40411],{"class":30,"line":16860},[28,40412,39005],{"class":269},[28,40414,40415,40417,40419],{"class":30,"line":16873},[28,40416,39010],{"class":207},[28,40418,38939],{"class":38},[28,40420,39015],{"class":211},[28,40422,40423],{"class":30,"line":16878},[28,40424,39020],{"class":269},[28,40426,40427],{"class":30,"line":16892},[28,40428,39025],{"class":269},[28,40430,40431,40433,40435,40437,40439],{"class":30,"line":16897},[28,40432,39030],{"class":211},[28,40434,401],{"class":38},[28,40436,588],{"class":211},[28,40438,39037],{"class":38},[28,40440,218],{"class":211},[28,40442,40443],{"class":30,"line":16903},[28,40444,39044],{"class":269},[28,40446,40447,40449,40451,40453,40455,40457],{"class":30,"line":16908},[28,40448,38972],{"class":207},[28,40450,38975],{"class":211},[28,40452,38978],{"class":207},[28,40454,38981],{"class":207},[28,40456,38984],{"class":38},[28,40458,3816],{"class":211},[28,40460,40461,40463,40465],{"class":30,"line":16922},[28,40462,38996],{"class":211},[28,40464,401],{"class":38},[28,40466,218],{"class":211},[28,40468,40469],{"class":30,"line":16927},[28,40470,2477],{"emptyLinePlaceholder":134},[28,40472,40473],{"class":30,"line":16932},[28,40474,35216],{"class":269},[28,40476,40477,40479,40481],{"class":30,"line":16946},[28,40478,30852],{"class":207},[28,40480,31144],{"class":34},[28,40482,31147],{"class":211},[28,40484,40485,40487,40489,40491],{"class":30,"line":16958},[28,40486,31152],{"class":211},[28,40488,257],{"class":207},[28,40490,30874],{"class":38},[28,40492,39093],{"class":211},[28,40494,40495,40497,40499,40501],{"class":30,"line":16963},[28,40496,31152],{"class":211},[28,40498,257],{"class":207},[28,40500,30874],{"class":38},[28,40502,39104],{"class":211},[28,40504,40505,40507,40509,40511],{"class":30,"line":16976},[28,40506,31152],{"class":211},[28,40508,257],{"class":207},[28,40510,30874],{"class":38},[28,40512,39115],{"class":211},[28,40514,40515,40517,40519,40521],{"class":30,"line":16981},[28,40516,31152],{"class":211},[28,40518,257],{"class":207},[28,40520,30874],{"class":38},[28,40522,39126],{"class":211},[28,40524,40525,40527,40529,40531],{"class":30,"line":16986},[28,40526,31152],{"class":211},[28,40528,257],{"class":207},[28,40530,30874],{"class":38},[28,40532,39137],{"class":211},[28,40534,40535,40537,40539,40541],{"class":30,"line":16991},[28,40536,31152],{"class":211},[28,40538,257],{"class":207},[28,40540,30874],{"class":38},[28,40542,39148],{"class":211},[28,40544,40545,40547],{"class":30,"line":17004},[28,40546,14829],{"class":207},[28,40548,31260],{"class":211},[28,40550,40551],{"class":30,"line":17009},[28,40552,2477],{"emptyLinePlaceholder":134},[28,40554,40555],{"class":30,"line":32684},[28,40556,39163],{"class":269},[28,40558,40559,40561,40563,40565,40567],{"class":30,"line":32690},[28,40560,1609],{"class":207},[28,40562,31271],{"class":38},[28,40564,3026],{"class":207},[28,40566,39174],{"class":64},[28,40568,3816],{"class":211},[28,40570,40571,40573,40575,40577,40579,40581,40583,40585,40587],{"class":30,"line":32696},[28,40572,31288],{"class":211},[28,40574,257],{"class":207},[28,40576,30502],{"class":211},[28,40578,31295],{"class":64},[28,40580,1782],{"class":207},[28,40582,31300],{"class":211},[28,40584,1779],{"class":207},[28,40586,30527],{"class":64},[28,40588,218],{"class":211},[28,40590,40591,40593],{"class":30,"line":32702},[28,40592,31350],{"class":38},[28,40594,30536],{"class":211},[28,40596,40597,40599,40601],{"class":30,"line":32708},[28,40598,31340],{"class":211},[28,40600,257],{"class":207},[28,40602,39211],{"class":211},[28,40604,40605,40607,40609,40611,40613,40615,40617,40619],{"class":30,"line":32719},[28,40606,31350],{"class":38},[28,40608,31353],{"class":211},[28,40610,427],{"class":38},[28,40612,588],{"class":211},[28,40614,31552],{"class":38},[28,40616,588],{"class":211},[28,40618,31552],{"class":38},[28,40620,31366],{"class":211},[161,40622,40623],{"start":50},[119,40624,40625],{},"测试代码",[18,40627,40629],{"className":30429,"code":40628,"language":30431,"meta":23,"style":23},"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",[25,40630,40631,40637,40647,40657,40661,40671,40682,40686,40690,40694,40702,40718,40728,40744,40754,40768,40772,40782,40792,40802,40808,40812,40816,40824,40828,40844,40852,40856,40860,40868,40876,40880,40884,40888,40892,40898,40902,40912,40920,40928,40932,40936,40940,40948,40952,40968,40972,40976,40980,40992,40996,41008,41012,41016,41028,41032,41042,41046,41050,41062,41066,41075,41079,41083,41091,41095,41103,41107,41111,41115,41119,41123,41139,41147,41151,41155,41203,41209,41213,41223,41231,41239,41243,41247,41251,41255,41263,41267,41283,41287,41295,41303],{"__ignoreMap":23},[28,40632,40633,40635],{"class":30,"line":31},[28,40634,30443],{"class":207},[28,40636,30446],{"class":211},[28,40638,40639,40641,40643,40645],{"class":30,"line":42},[28,40640,30443],{"class":207},[28,40642,31466],{"class":211},[28,40644,31434],{"class":207},[28,40646,31471],{"class":211},[28,40648,40649,40651,40653,40655],{"class":30,"line":50},[28,40650,30788],{"class":207},[28,40652,31449],{"class":211},[28,40654,30443],{"class":207},[28,40656,31454],{"class":211},[28,40658,40659],{"class":30,"line":58},[28,40660,33973],{"class":269},[28,40662,40663,40665,40667,40669],{"class":30,"line":70},[28,40664,30788],{"class":207},[28,40666,31419],{"class":211},[28,40668,30443],{"class":207},[28,40670,31424],{"class":211},[28,40672,40673,40675,40677,40679],{"class":30,"line":78},[28,40674,30788],{"class":207},[28,40676,31965],{"class":211},[28,40678,30443],{"class":207},[28,40680,40681],{"class":38}," VGG16\n",[28,40683,40684],{"class":30,"line":86},[28,40685,2477],{"emptyLinePlaceholder":134},[28,40687,40688],{"class":30,"line":97},[28,40689,2477],{"emptyLinePlaceholder":134},[28,40691,40692],{"class":30,"line":108},[28,40693,34002],{"class":269},[28,40695,40696,40698,40700],{"class":30,"line":1407},[28,40697,31998],{"class":207},[28,40699,34009],{"class":34},[28,40701,32004],{"class":211},[28,40703,40704,40706,40708,40710,40712,40714,40716],{"class":30,"line":1690},[28,40705,34016],{"class":211},[28,40707,257],{"class":207},[28,40709,31506],{"class":211},[28,40711,31509],{"class":5293},[28,40713,257],{"class":207},[28,40715,31514],{"class":64},[28,40717,31517],{"class":211},[28,40719,40720,40722,40724,40726],{"class":30,"line":1695},[28,40721,34033],{"class":5293},[28,40723,257],{"class":207},[28,40725,34038],{"class":38},[28,40727,31517],{"class":211},[28,40729,40730,40732,40734,40736,40738,40740,40742],{"class":30,"line":1701},[28,40731,34045],{"class":5293},[28,40733,257],{"class":207},[28,40735,31544],{"class":211},[28,40737,31547],{"class":5293},[28,40739,257],{"class":207},[28,40741,31552],{"class":38},[28,40743,31555],{"class":211},[28,40745,40746,40748,40750,40752],{"class":30,"line":1706},[28,40747,34062],{"class":5293},[28,40749,257],{"class":207},[28,40751,31527],{"class":38},[28,40753,218],{"class":211},[28,40755,40756,40758,40760,40762,40764,40766],{"class":30,"line":1720},[28,40757,34073],{"class":211},[28,40759,257],{"class":207},[28,40761,31585],{"class":211},[28,40763,31588],{"class":5293},[28,40765,257],{"class":207},[28,40767,34084],{"class":211},[28,40769,40770],{"class":30,"line":1725},[28,40771,34089],{"class":269},[28,40773,40774,40776,40778,40780],{"class":30,"line":1731},[28,40775,34094],{"class":5293},[28,40777,257],{"class":207},[28,40779,427],{"class":38},[28,40781,31517],{"class":211},[28,40783,40784,40786,40788,40790],{"class":30,"line":1752},[28,40785,34105],{"class":5293},[28,40787,257],{"class":207},[28,40789,31527],{"class":38},[28,40791,31517],{"class":211},[28,40793,40794,40796,40798,40800],{"class":30,"line":1757},[28,40795,34116],{"class":5293},[28,40797,257],{"class":207},[28,40799,401],{"class":38},[28,40801,218],{"class":211},[28,40803,40804,40806],{"class":30,"line":1771},[28,40805,4167],{"class":207},[28,40807,34129],{"class":211},[28,40809,40810],{"class":30,"line":1776},[28,40811,2477],{"emptyLinePlaceholder":134},[28,40813,40814],{"class":30,"line":1805},[28,40815,34138],{"class":269},[28,40817,40818,40820,40822],{"class":30,"line":1810},[28,40819,31998],{"class":207},[28,40821,34145],{"class":34},[28,40823,34148],{"class":211},[28,40825,40826],{"class":30,"line":1827},[28,40827,34153],{"class":269},[28,40829,40830,40832,40834,40836,40838,40840,40842],{"class":30,"line":1832},[28,40831,31288],{"class":211},[28,40833,257],{"class":207},[28,40835,31295],{"class":64},[28,40837,1782],{"class":207},[28,40839,31300],{"class":211},[28,40841,1779],{"class":207},[28,40843,34170],{"class":64},[28,40845,40846,40848,40850],{"class":30,"line":1837},[28,40847,31340],{"class":211},[28,40849,257],{"class":207},[28,40851,32340],{"class":211},[28,40853,40854],{"class":30,"line":1842},[28,40855,2477],{"emptyLinePlaceholder":134},[28,40857,40858],{"class":30,"line":1856},[28,40859,34187],{"class":269},[28,40861,40862,40864,40866],{"class":30,"line":1861},[28,40863,34192],{"class":211},[28,40865,257],{"class":207},[28,40867,32393],{"class":38},[28,40869,40870,40872,40874],{"class":30,"line":2654},[28,40871,34201],{"class":211},[28,40873,257],{"class":207},[28,40875,3162],{"class":38},[28,40877,40878],{"class":30,"line":2668},[28,40879,2477],{"emptyLinePlaceholder":134},[28,40881,40882],{"class":30,"line":2676},[28,40883,34214],{"class":269},[28,40885,40886],{"class":30,"line":2681},[28,40887,34219],{"class":269},[28,40889,40890],{"class":30,"line":2687},[28,40891,34224],{"class":269},[28,40893,40894,40896],{"class":30,"line":2693},[28,40895,34229],{"class":207},[28,40897,32935],{"class":211},[28,40899,40900],{"class":30,"line":2698},[28,40901,34236],{"class":269},[28,40903,40904,40906,40908,40910],{"class":30,"line":8025},[28,40905,3480],{"class":207},[28,40907,34243],{"class":211},[28,40909,26094],{"class":207},[28,40911,34248],{"class":211},[28,40913,40914,40916,40918],{"class":30,"line":8049},[28,40915,34253],{"class":211},[28,40917,257],{"class":207},[28,40919,34258],{"class":211},[28,40921,40922,40924,40926],{"class":30,"line":8054},[28,40923,34263],{"class":211},[28,40925,257],{"class":207},[28,40927,34268],{"class":211},[28,40929,40930],{"class":30,"line":8060},[28,40931,34273],{"class":269},[28,40933,40934],{"class":30,"line":8087},[28,40935,32926],{"class":211},[28,40937,40938],{"class":30,"line":8092},[28,40939,34282],{"class":269},[28,40941,40942,40944,40946],{"class":30,"line":8098},[28,40943,32711],{"class":211},[28,40945,257],{"class":207},[28,40947,34291],{"class":211},[28,40949,40950],{"class":30,"line":8110},[28,40951,34296],{"class":269},[28,40953,40954,40956,40958,40960,40962,40964,40966],{"class":30,"line":8122},[28,40955,32728],{"class":211},[28,40957,257],{"class":207},[28,40959,32733],{"class":211},[28,40961,32736],{"class":5293},[28,40963,257],{"class":207},[28,40965,427],{"class":38},[28,40967,218],{"class":211},[28,40969,40970],{"class":30,"line":8134},[28,40971,34317],{"class":269},[28,40973,40974],{"class":30,"line":9793},[28,40975,34322],{"class":269},[28,40977,40978],{"class":30,"line":9818},[28,40979,34327],{"class":269},[28,40981,40982,40984,40986,40988,40990],{"class":30,"line":9841},[28,40983,34332],{"class":211},[28,40985,9554],{"class":207},[28,40987,32838],{"class":211},[28,40989,3026],{"class":207},[28,40991,34341],{"class":211},[28,40993,40994],{"class":30,"line":9865},[28,40995,34346],{"class":269},[28,40997,40998,41000,41002,41004,41006],{"class":30,"line":9870},[28,40999,34351],{"class":211},[28,41001,9554],{"class":207},[28,41003,34356],{"class":211},[28,41005,401],{"class":38},[28,41007,218],{"class":211},[28,41009,41010],{"class":30,"line":9875},[28,41011,2477],{"emptyLinePlaceholder":134},[28,41013,41014],{"class":30,"line":9880},[28,41015,34369],{"class":269},[28,41017,41018,41020,41022,41024,41026],{"class":30,"line":9889},[28,41019,34374],{"class":211},[28,41021,257],{"class":207},[28,41023,34379],{"class":211},[28,41025,794],{"class":207},[28,41027,34384],{"class":211},[28,41029,41030],{"class":30,"line":9894},[28,41031,34389],{"class":269},[28,41033,41034,41036,41038,41040],{"class":30,"line":9900},[28,41035,32502],{"class":38},[28,41037,212],{"class":211},[28,41039,34398],{"class":64},[28,41041,34401],{"class":211},[28,41043,41044],{"class":30,"line":9921},[28,41045,2477],{"emptyLinePlaceholder":134},[28,41047,41048],{"class":30,"line":9927},[28,41049,34410],{"class":269},[28,41051,41052,41054,41056,41058,41060],{"class":30,"line":9941},[28,41053,1609],{"class":207},[28,41055,31271],{"class":38},[28,41057,3026],{"class":207},[28,41059,31276],{"class":64},[28,41061,3816],{"class":211},[28,41063,41064],{"class":30,"line":9947},[28,41065,34427],{"class":269},[28,41067,41068,41070,41072],{"class":30,"line":9974},[28,41069,31340],{"class":211},[28,41071,257],{"class":207},[28,41073,41074],{"class":211},"VGG16()\n",[28,41076,41077],{"class":30,"line":9983},[28,41078,34440],{"class":269},[28,41080,41081],{"class":30,"line":9989},[28,41082,34445],{"class":269},[28,41084,41085,41087,41089],{"class":30,"line":9997},[28,41086,34450],{"class":211},[28,41088,34453],{"class":64},[28,41090,30548],{"class":211},[28,41092,41093],{"class":30,"line":10002},[28,41094,34460],{"class":269},[28,41096,41097,41099,41101],{"class":30,"line":16681},[28,41098,34073],{"class":211},[28,41100,257],{"class":207},[28,41102,34469],{"class":211},[28,41104,41105],{"class":30,"line":16687},[28,41106,34474],{"class":269},[28,41108,41109],{"class":30,"line":16710},[28,41110,34479],{"class":211},[28,41112,41113],{"class":30,"line":16716},[28,41114,2477],{"emptyLinePlaceholder":134},[28,41116,41117],{"class":30,"line":16739},[28,41118,34488],{"class":269},[28,41120,41121],{"class":30,"line":16753},[28,41122,34493],{"class":269},[28,41124,41125,41127,41129,41131,41133,41135,41137],{"class":30,"line":16773},[28,41126,31288],{"class":211},[28,41128,257],{"class":207},[28,41130,31295],{"class":64},[28,41132,1782],{"class":207},[28,41134,31300],{"class":211},[28,41136,1779],{"class":207},[28,41138,34170],{"class":64},[28,41140,41141,41143,41145],{"class":30,"line":16779},[28,41142,31340],{"class":211},[28,41144,257],{"class":207},[28,41146,32340],{"class":211},[28,41148,41149],{"class":30,"line":16790},[28,41150,34522],{"class":269},[28,41152,41153],{"class":30,"line":16813},[28,41154,34527],{"class":269},[28,41156,41157,41159,41161,41163,41165,41167,41169,41171,41173,41175,41177,41179,41181,41183,41185,41187,41189,41191,41193,41195,41197,41199,41201],{"class":30,"line":16835},[28,41158,34532],{"class":211},[28,41160,257],{"class":207},[28,41162,1100],{"class":211},[28,41164,34539],{"class":64},[28,41166,588],{"class":211},[28,41168,34544],{"class":64},[28,41170,588],{"class":211},[28,41172,34549],{"class":64},[28,41174,588],{"class":211},[28,41176,34554],{"class":64},[28,41178,588],{"class":211},[28,41180,34559],{"class":64},[28,41182,588],{"class":211},[28,41184,34564],{"class":64},[28,41186,588],{"class":211},[28,41188,34569],{"class":64},[28,41190,588],{"class":211},[28,41192,34574],{"class":64},[28,41194,588],{"class":211},[28,41196,34579],{"class":64},[28,41198,588],{"class":211},[28,41200,34584],{"class":64},[28,41202,33297],{"class":211},[28,41204,41205,41207],{"class":30,"line":16840},[28,41206,34229],{"class":207},[28,41208,32935],{"class":211},[28,41210,41211],{"class":30,"line":16846},[28,41212,34597],{"class":269},[28,41214,41215,41217,41219,41221],{"class":30,"line":16860},[28,41216,3480],{"class":207},[28,41218,34604],{"class":211},[28,41220,26094],{"class":207},[28,41222,34248],{"class":211},[28,41224,41225,41227,41229],{"class":30,"line":16873},[28,41226,32661],{"class":211},[28,41228,257],{"class":207},[28,41230,32666],{"class":211},[28,41232,41233,41235,41237],{"class":30,"line":16878},[28,41234,32676],{"class":211},[28,41236,257],{"class":207},[28,41238,32681],{"class":211},[28,41240,41241],{"class":30,"line":16892},[28,41242,2477],{"emptyLinePlaceholder":134},[28,41244,41245],{"class":30,"line":16897},[28,41246,34633],{"class":269},[28,41248,41249],{"class":30,"line":16903},[28,41250,32926],{"class":211},[28,41252,41253],{"class":30,"line":16908},[28,41254,34642],{"class":269},[28,41256,41257,41259,41261],{"class":30,"line":16922},[28,41258,32711],{"class":211},[28,41260,257],{"class":207},[28,41262,32716],{"class":211},[28,41264,41265],{"class":30,"line":16927},[28,41266,34655],{"class":269},[28,41268,41269,41271,41273,41275,41277,41279,41281],{"class":30,"line":16932},[28,41270,32728],{"class":211},[28,41272,257],{"class":207},[28,41274,32733],{"class":211},[28,41276,32736],{"class":5293},[28,41278,257],{"class":207},[28,41280,427],{"class":38},[28,41282,218],{"class":211},[28,41284,41285],{"class":30,"line":16946},[28,41286,34676],{"class":269},[28,41288,41289,41291,41293],{"class":30,"line":16958},[28,41290,34681],{"class":211},[28,41292,257],{"class":207},[28,41294,34686],{"class":211},[28,41296,41297,41299,41301],{"class":30,"line":16963},[28,41298,34691],{"class":211},[28,41300,257],{"class":207},[28,41302,34696],{"class":211},[28,41304,41305,41307,41309,41311,41313,41315,41317,41319],{"class":30,"line":16976},[28,41306,34701],{"class":38},[28,41308,212],{"class":211},[28,41310,34706],{"class":64},[28,41312,34709],{"class":211},[28,41314,34712],{"class":64},[28,41316,588],{"class":211},[28,41318,34717],{"class":64},[28,41320,34720],{"class":211},[177,41322,41324],{"id":41323},"_23googlenet","2.3.GoogLeNet",[22075,41326,41328],{"id":41327},"_231原理","2.3.1.原理",[161,41330,41331],{},[119,41332,41333],{},"网络结构",[14,41335,41336],{},[1540,41337],{"alt":23,"src":41338},"\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,41340,41341],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41343,41344],{},[1540,41345],{"alt":23,"src":41346},"\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,41348,41349],{},[1540,41350],{"alt":23,"src":41351},"\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,41353,41354],{},[1540,41355],{"alt":23,"src":41356},"\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",[161,41358,41359],{"start":42},[119,41360,41361],{},"1x1卷积的优点",[14,41363,41364],{},[1540,41365],{"alt":23,"src":41366},"\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",[161,41368,41369],{"start":50},[119,41370,41371],{},"全局平均池化层优点",[14,41373,41374],{},[1540,41375],{"alt":23,"src":41376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41378,41379],{},[1540,41380],{"alt":23,"src":41381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[161,41383,41384],{"start":58},[119,41385,41386],{},"参数详细描述",[14,41388,41389],{},[1540,41390],{"alt":23,"src":41391},"\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,41393,41394],{},[1540,41395],{"alt":23,"src":41396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41398,41399],{},[1540,41400],{"alt":23,"src":41401},"\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,41403,41404],{},[1540,41405],{"alt":23,"src":41406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41408,41409],{},[1540,41410],{"alt":23,"src":41411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41413,41414],{},[1540,41415],{"alt":23,"src":41416},"\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,41418,41419],{},[1540,41420],{"alt":23,"src":41421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,41423,41424],{},[1540,41425],{"alt":23,"src":41426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,41428,41429],{},[1540,41430],{"alt":23,"src":41431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,41433,41434],{},[1540,41435],{"alt":23,"src":41436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,41438,41439],{},[1540,41440],{"alt":23,"src":41441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41443,41444],{},[1540,41445],{"alt":23,"src":41446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,41448,41449],{},[1540,41450],{"alt":23,"src":41451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,41453,41454],{},[1540,41455],{"alt":23,"src":41456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41458,41459],{},[1540,41460],{"alt":23,"src":41461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,41463,41464],{},[1540,41465],{"alt":23,"src":41466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,41468,41469],{},[1540,41470],{"alt":23,"src":41471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,41473,41474],{},[1540,41475],{"alt":23,"src":41476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,41478,41479],{},[1540,41480],{"alt":23,"src":41481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,41483,41484],{},[1540,41485],{"alt":23,"src":41486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[14,41488,41489],{},[1540,41490],{"alt":23,"src":41491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-050.png",[22075,41493,41495],{"id":41494},"_232代码实现","2.3.2.代码实现",[161,41497,41498],{},[119,41499,30762],{},[14,41501,41502],{},"根据原理一步一步搭建即可",[18,41504,41506],{"className":30429,"code":41505,"language":30431,"meta":23,"style":23},"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",[25,41507,41508,41514,41524,41534,41538,41555,41564,41579,41589,41594,41627,41632,41669,41716,41721,41757,41804,41809,41814,41849,41881,41885,41893,41909,41933,41958,41979,41984,41999,42003,42007,42012,42029,42034,42043,42058,42069,42113,42117,42145,42149,42160,42188,42192,42229,42233,42261,42265,42276,42312,42344,42372,42376,42387,42421,42453,42485,42518,42552,42580,42584,42595,42628,42660,42674,42678,42691,42695,42700,42712,42720,42742,42747,42752,42757,42762,42767,42772,42786,42794,42803,42816,42831,42840,42844,42852,42863,42874,42885,42896,42907,42913,42917,42922,42934,42954,42963],{"__ignoreMap":23},[28,41509,41510,41512],{"class":30,"line":31},[28,41511,30443],{"class":207},[28,41513,30446],{"class":211},[28,41515,41516,41518,41520,41522],{"class":30,"line":42},[28,41517,30788],{"class":207},[28,41519,30791],{"class":211},[28,41521,30443],{"class":207},[28,41523,30796],{"class":211},[28,41525,41526,41528,41530,41532],{"class":30,"line":50},[28,41527,30788],{"class":207},[28,41529,30808],{"class":211},[28,41531,30443],{"class":207},[28,41533,30813],{"class":211},[28,41535,41536],{"class":30,"line":58},[28,41537,2477],{"emptyLinePlaceholder":134},[28,41539,41540,41542,41545,41547,41549,41551,41553],{"class":30,"line":70},[28,41541,14771],{"class":207},[28,41543,41544],{"class":34}," Inception",[28,41546,212],{"class":211},[28,41548,30829],{"class":34},[28,41550,768],{"class":211},[28,41552,30834],{"class":34},[28,41554,30837],{"class":211},[28,41556,41557,41559,41561],{"class":30,"line":78},[28,41558,30852],{"class":207},[28,41560,30855],{"class":38},[28,41562,41563],{"class":211},"(self,in_channels,c1,c2,c3,c4):\n",[28,41565,41566,41568,41571,41573,41575,41577],{"class":30,"line":86},[28,41567,30868],{"class":38},[28,41569,41570],{"class":211},"(Inception,",[28,41572,30874],{"class":38},[28,41574,30877],{"class":211},[28,41576,30880],{"class":38},[28,41578,2053],{"class":211},[28,41580,41581,41583,41585,41587],{"class":30,"line":97},[28,41582,30896],{"class":38},[28,41584,34822],{"class":211},[28,41586,257],{"class":207},[28,41588,34827],{"class":211},[28,41590,41591],{"class":30,"line":108},[28,41592,41593],{"class":269},"        # 路线1：定义1*1卷积\n",[28,41595,41596,41598,41601,41603,41605,41607,41609,41612,41614,41616,41619,41621,41623,41625],{"class":30,"line":1407},[28,41597,30896],{"class":38},[28,41599,41600],{"class":211},".p1_1",[28,41602,257],{"class":207},[28,41604,30904],{"class":211},[28,41606,30907],{"class":5293},[28,41608,257],{"class":207},[28,41610,41611],{"class":211},"in_channels,",[28,41613,30916],{"class":5293},[28,41615,257],{"class":207},[28,41617,41618],{"class":211},"c1,",[28,41620,30925],{"class":5293},[28,41622,257],{"class":207},[28,41624,427],{"class":38},[28,41626,218],{"class":211},[28,41628,41629],{"class":30,"line":1690},[28,41630,41631],{"class":269},"        # 路线2：定义1*1卷积和3*3\n",[28,41633,41634,41636,41639,41641,41643,41645,41647,41649,41651,41653,41656,41658,41661,41663,41665,41667],{"class":30,"line":1695},[28,41635,30896],{"class":38},[28,41637,41638],{"class":211},".p2_1",[28,41640,257],{"class":207},[28,41642,30904],{"class":211},[28,41644,30907],{"class":5293},[28,41646,257],{"class":207},[28,41648,41611],{"class":211},[28,41650,30916],{"class":5293},[28,41652,257],{"class":207},[28,41654,41655],{"class":211},"c2[",[28,41657,401],{"class":38},[28,41659,41660],{"class":211},"],",[28,41662,30925],{"class":5293},[28,41664,257],{"class":207},[28,41666,427],{"class":38},[28,41668,218],{"class":211},[28,41670,41671,41673,41676,41678,41680,41682,41684,41686,41688,41690,41692,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714],{"class":30,"line":1701},[28,41672,30896],{"class":38},[28,41674,41675],{"class":211},".p2_2",[28,41677,257],{"class":207},[28,41679,30904],{"class":211},[28,41681,30907],{"class":5293},[28,41683,257],{"class":207},[28,41685,41655],{"class":211},[28,41687,401],{"class":38},[28,41689,41660],{"class":211},[28,41691,30916],{"class":5293},[28,41693,257],{"class":207},[28,41695,41655],{"class":211},[28,41697,427],{"class":38},[28,41699,41660],{"class":211},[28,41701,30925],{"class":5293},[28,41703,257],{"class":207},[28,41705,282],{"class":38},[28,41707,588],{"class":211},[28,41709,30934],{"class":5293},[28,41711,257],{"class":207},[28,41713,427],{"class":38},[28,41715,218],{"class":211},[28,41717,41718],{"class":30,"line":1706},[28,41719,41720],{"class":269},"        # 路线3：定义1*1卷积和5*5\n",[28,41722,41723,41725,41728,41730,41732,41734,41736,41738,41740,41742,41745,41747,41749,41751,41753,41755],{"class":30,"line":1720},[28,41724,30896],{"class":38},[28,41726,41727],{"class":211},".p3_1",[28,41729,257],{"class":207},[28,41731,30904],{"class":211},[28,41733,30907],{"class":5293},[28,41735,257],{"class":207},[28,41737,41611],{"class":211},[28,41739,30916],{"class":5293},[28,41741,257],{"class":207},[28,41743,41744],{"class":211},"c3[",[28,41746,401],{"class":38},[28,41748,41660],{"class":211},[28,41750,30925],{"class":5293},[28,41752,257],{"class":207},[28,41754,427],{"class":38},[28,41756,218],{"class":211},[28,41758,41759,41761,41764,41766,41768,41770,41772,41774,41776,41778,41780,41782,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802],{"class":30,"line":1725},[28,41760,30896],{"class":38},[28,41762,41763],{"class":211},".p3_2",[28,41765,257],{"class":207},[28,41767,30904],{"class":211},[28,41769,30907],{"class":5293},[28,41771,257],{"class":207},[28,41773,41744],{"class":211},[28,41775,401],{"class":38},[28,41777,41660],{"class":211},[28,41779,30916],{"class":5293},[28,41781,257],{"class":207},[28,41783,41744],{"class":211},[28,41785,427],{"class":38},[28,41787,41660],{"class":211},[28,41789,30925],{"class":5293},[28,41791,257],{"class":207},[28,41793,529],{"class":38},[28,41795,588],{"class":211},[28,41797,30934],{"class":5293},[28,41799,257],{"class":207},[28,41801,288],{"class":38},[28,41803,218],{"class":211},[28,41805,41806],{"class":30,"line":1731},[28,41807,41808],{"class":269},"        # 路线4：定义3*3最大池化和1*1卷积\n",[28,41810,41811],{"class":30,"line":1752},[28,41812,41813],{"class":269},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[28,41815,41816,41818,41821,41823,41825,41827,41829,41831,41833,41835,41837,41839,41841,41843,41845,41847],{"class":30,"line":1757},[28,41817,30896],{"class":38},[28,41819,41820],{"class":211},".p4_1",[28,41822,257],{"class":207},[28,41824,34880],{"class":211},[28,41826,30925],{"class":5293},[28,41828,257],{"class":207},[28,41830,282],{"class":38},[28,41832,588],{"class":211},[28,41834,30980],{"class":5293},[28,41836,257],{"class":207},[28,41838,427],{"class":38},[28,41840,588],{"class":211},[28,41842,30934],{"class":5293},[28,41844,257],{"class":207},[28,41846,427],{"class":38},[28,41848,218],{"class":211},[28,41850,41851,41853,41856,41858,41860,41862,41864,41866,41868,41870,41873,41875,41877,41879],{"class":30,"line":1771},[28,41852,30896],{"class":38},[28,41854,41855],{"class":211},".p4_2",[28,41857,257],{"class":207},[28,41859,30904],{"class":211},[28,41861,30907],{"class":5293},[28,41863,257],{"class":207},[28,41865,41611],{"class":211},[28,41867,30916],{"class":5293},[28,41869,257],{"class":207},[28,41871,41872],{"class":211},"c4,",[28,41874,30925],{"class":5293},[28,41876,257],{"class":207},[28,41878,427],{"class":38},[28,41880,218],{"class":211},[28,41882,41883],{"class":30,"line":1776},[28,41884,2477],{"emptyLinePlaceholder":134},[28,41886,41887,41889,41891],{"class":30,"line":1805},[28,41888,30852],{"class":207},[28,41890,31144],{"class":34},[28,41892,31147],{"class":211},[28,41894,41895,41898,41900,41902,41904,41906],{"class":30,"line":1810},[28,41896,41897],{"class":211},"        p1",[28,41899,257],{"class":207},[28,41901,30874],{"class":38},[28,41903,35235],{"class":211},[28,41905,30874],{"class":38},[28,41907,41908],{"class":211},".p1_1(x))\n",[28,41910,41911,41913,41915,41917,41919,41921,41924,41926,41928,41930],{"class":30,"line":1827},[28,41912,7162],{"class":211},[28,41914,257],{"class":207},[28,41916,30874],{"class":38},[28,41918,35235],{"class":211},[28,41920,30874],{"class":38},[28,41922,41923],{"class":211},".p2_2(",[28,41925,30874],{"class":38},[28,41927,35235],{"class":211},[28,41929,30874],{"class":38},[28,41931,41932],{"class":211},".p2_1(x))))\n",[28,41934,41935,41938,41940,41942,41944,41946,41949,41951,41953,41955],{"class":30,"line":1832},[28,41936,41937],{"class":211},"        p3",[28,41939,257],{"class":207},[28,41941,30874],{"class":38},[28,41943,35235],{"class":211},[28,41945,30874],{"class":38},[28,41947,41948],{"class":211},".p3_2(",[28,41950,30874],{"class":38},[28,41952,35235],{"class":211},[28,41954,30874],{"class":38},[28,41956,41957],{"class":211},".p3_1(x))))\n",[28,41959,41960,41963,41965,41967,41969,41971,41974,41976],{"class":30,"line":1837},[28,41961,41962],{"class":211},"        p4",[28,41964,257],{"class":207},[28,41966,30874],{"class":38},[28,41968,35235],{"class":211},[28,41970,30874],{"class":38},[28,41972,41973],{"class":211},".p4_2(",[28,41975,30874],{"class":38},[28,41977,41978],{"class":211},".p4_1(x)))\n",[28,41980,41981],{"class":30,"line":1842},[28,41982,41983],{"class":269},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[28,41985,41986,41988,41991,41993,41995,41997],{"class":30,"line":1856},[28,41987,14829],{"class":207},[28,41989,41990],{"class":211}," torch.cat((p1,p2,p3,p4),",[28,41992,32736],{"class":5293},[28,41994,257],{"class":207},[28,41996,427],{"class":38},[28,41998,218],{"class":211},[28,42000,42001],{"class":30,"line":1861},[28,42002,2477],{"emptyLinePlaceholder":134},[28,42004,42005],{"class":30,"line":2654},[28,42006,2477],{"emptyLinePlaceholder":134},[28,42008,42009],{"class":30,"line":2668},[28,42010,42011],{"class":269},"# 搭建GoogLeNet网络\n",[28,42013,42014,42016,42019,42021,42023,42025,42027],{"class":30,"line":2676},[28,42015,14771],{"class":207},[28,42017,42018],{"class":34}," GoogLeNet",[28,42020,212],{"class":211},[28,42022,30829],{"class":34},[28,42024,768],{"class":211},[28,42026,30834],{"class":34},[28,42028,30837],{"class":211},[28,42030,42031],{"class":30,"line":2681},[28,42032,42033],{"class":269},"    # 必须把Inception导入到里边\n",[28,42035,42036,42038,42040],{"class":30,"line":2687},[28,42037,30852],{"class":207},[28,42039,30855],{"class":38},[28,42041,42042],{"class":211},"(self,Inception):\n",[28,42044,42045,42047,42050,42052,42054,42056],{"class":30,"line":2693},[28,42046,30868],{"class":38},[28,42048,42049],{"class":211},"(GoogLeNet,",[28,42051,30874],{"class":38},[28,42053,30877],{"class":211},[28,42055,30880],{"class":38},[28,42057,2053],{"class":211},[28,42059,42060,42062,42065,42067],{"class":30,"line":2698},[28,42061,30896],{"class":38},[28,42063,42064],{"class":211},".b1",[28,42066,257],{"class":207},[28,42068,38060],{"class":211},[28,42070,42071,42073,42075,42077,42079,42081,42083,42085,42087,42089,42091,42093,42095,42097,42099,42101,42103,42105,42107,42109,42111],{"class":30,"line":8025},[28,42072,38065],{"class":211},[28,42074,30907],{"class":5293},[28,42076,257],{"class":207},[28,42078,427],{"class":38},[28,42080,588],{"class":211},[28,42082,30916],{"class":5293},[28,42084,257],{"class":207},[28,42086,413],{"class":38},[28,42088,588],{"class":211},[28,42090,30925],{"class":5293},[28,42092,257],{"class":207},[28,42094,579],{"class":38},[28,42096,588],{"class":211},[28,42098,30980],{"class":5293},[28,42100,257],{"class":207},[28,42102,288],{"class":38},[28,42104,588],{"class":211},[28,42106,30934],{"class":5293},[28,42108,257],{"class":207},[28,42110,282],{"class":38},[28,42112,38098],{"class":211},[28,42114,42115],{"class":30,"line":8049},[28,42116,38103],{"class":211},[28,42118,42119,42121,42123,42125,42127,42129,42131,42133,42135,42137,42139,42141,42143],{"class":30,"line":8054},[28,42120,38148],{"class":211},[28,42122,30925],{"class":5293},[28,42124,257],{"class":207},[28,42126,282],{"class":38},[28,42128,588],{"class":211},[28,42130,30980],{"class":5293},[28,42132,257],{"class":207},[28,42134,288],{"class":38},[28,42136,588],{"class":211},[28,42138,30934],{"class":5293},[28,42140,257],{"class":207},[28,42142,427],{"class":38},[28,42144,218],{"class":211},[28,42146,42147],{"class":30,"line":8060},[28,42148,38177],{"class":211},[28,42150,42151,42153,42156,42158],{"class":30,"line":8087},[28,42152,30896],{"class":38},[28,42154,42155],{"class":211},".b2",[28,42157,257],{"class":207},[28,42159,38060],{"class":211},[28,42161,42162,42164,42166,42168,42170,42172,42174,42176,42178,42180,42182,42184,42186],{"class":30,"line":8092},[28,42163,38065],{"class":211},[28,42165,30907],{"class":5293},[28,42167,257],{"class":207},[28,42169,413],{"class":38},[28,42171,588],{"class":211},[28,42173,30916],{"class":5293},[28,42175,257],{"class":207},[28,42177,413],{"class":38},[28,42179,588],{"class":211},[28,42181,30925],{"class":5293},[28,42183,257],{"class":207},[28,42185,427],{"class":38},[28,42187,38098],{"class":211},[28,42189,42190],{"class":30,"line":8098},[28,42191,38103],{"class":211},[28,42193,42194,42196,42198,42200,42202,42204,42206,42208,42211,42213,42215,42217,42219,42221,42223,42225,42227],{"class":30,"line":8110},[28,42195,38065],{"class":211},[28,42197,30907],{"class":5293},[28,42199,257],{"class":207},[28,42201,413],{"class":38},[28,42203,588],{"class":211},[28,42205,30916],{"class":5293},[28,42207,257],{"class":207},[28,42209,42210],{"class":38},"192",[28,42212,588],{"class":211},[28,42214,30925],{"class":5293},[28,42216,257],{"class":207},[28,42218,282],{"class":38},[28,42220,588],{"class":211},[28,42222,30934],{"class":5293},[28,42224,257],{"class":207},[28,42226,427],{"class":38},[28,42228,38098],{"class":211},[28,42230,42231],{"class":30,"line":8122},[28,42232,38103],{"class":211},[28,42234,42235,42237,42239,42241,42243,42245,42247,42249,42251,42253,42255,42257,42259],{"class":30,"line":8134},[28,42236,38148],{"class":211},[28,42238,30925],{"class":5293},[28,42240,257],{"class":207},[28,42242,282],{"class":38},[28,42244,588],{"class":211},[28,42246,30980],{"class":5293},[28,42248,257],{"class":207},[28,42250,288],{"class":38},[28,42252,588],{"class":211},[28,42254,30934],{"class":5293},[28,42256,257],{"class":207},[28,42258,427],{"class":38},[28,42260,218],{"class":211},[28,42262,42263],{"class":30,"line":9793},[28,42264,38177],{"class":211},[28,42266,42267,42269,42272,42274],{"class":30,"line":9818},[28,42268,30896],{"class":38},[28,42270,42271],{"class":211},".b3",[28,42273,257],{"class":207},[28,42275,38060],{"class":211},[28,42277,42278,42281,42283,42285,42287,42290,42292,42294,42296,42299,42301,42303,42305,42308,42310],{"class":30,"line":9841},[28,42279,42280],{"class":211},"            Inception(",[28,42282,42210],{"class":38},[28,42284,588],{"class":211},[28,42286,413],{"class":38},[28,42288,42289],{"class":211},",(",[28,42291,419],{"class":38},[28,42293,588],{"class":211},[28,42295,32121],{"class":38},[28,42297,42298],{"class":211},"),(",[28,42300,811],{"class":38},[28,42302,588],{"class":211},[28,42304,407],{"class":38},[28,42306,42307],{"class":211},"),",[28,42309,407],{"class":38},[28,42311,38098],{"class":211},[28,42313,42314,42316,42318,42320,42322,42324,42326,42328,42330,42332,42334,42336,42338,42340,42342],{"class":30,"line":9865},[28,42315,42280],{"class":211},[28,42317,34921],{"class":38},[28,42319,588],{"class":211},[28,42321,32121],{"class":38},[28,42323,42289],{"class":211},[28,42325,32121],{"class":38},[28,42327,588],{"class":211},[28,42329,42210],{"class":38},[28,42331,42298],{"class":211},[28,42333,407],{"class":38},[28,42335,588],{"class":211},[28,42337,419],{"class":38},[28,42339,42307],{"class":211},[28,42341,413],{"class":38},[28,42343,38098],{"class":211},[28,42345,42346,42348,42350,42352,42354,42356,42358,42360,42362,42364,42366,42368,42370],{"class":30,"line":9870},[28,42347,38148],{"class":211},[28,42349,30925],{"class":5293},[28,42351,257],{"class":207},[28,42353,282],{"class":38},[28,42355,588],{"class":211},[28,42357,30980],{"class":5293},[28,42359,257],{"class":207},[28,42361,288],{"class":38},[28,42363,588],{"class":211},[28,42365,30934],{"class":5293},[28,42367,257],{"class":207},[28,42369,427],{"class":38},[28,42371,218],{"class":211},[28,42373,42374],{"class":30,"line":9875},[28,42375,38177],{"class":211},[28,42377,42378,42380,42383,42385],{"class":30,"line":9880},[28,42379,30896],{"class":38},[28,42381,42382],{"class":211},".b4",[28,42384,257],{"class":207},[28,42386,38060],{"class":211},[28,42388,42389,42391,42394,42396,42398,42400,42402,42404,42407,42409,42411,42413,42415,42417,42419],{"class":30,"line":9889},[28,42390,42280],{"class":211},[28,42392,42393],{"class":38},"480",[28,42395,588],{"class":211},[28,42397,42210],{"class":38},[28,42399,42289],{"class":211},[28,42401,419],{"class":38},[28,42403,588],{"class":211},[28,42405,42406],{"class":38},"208",[28,42408,42298],{"class":211},[28,42410,811],{"class":38},[28,42412,588],{"class":211},[28,42414,817],{"class":38},[28,42416,42307],{"class":211},[28,42418,413],{"class":38},[28,42420,38098],{"class":211},[28,42422,42423,42425,42427,42429,42431,42433,42435,42437,42439,42441,42443,42445,42447,42449,42451],{"class":30,"line":9894},[28,42424,42280],{"class":211},[28,42426,38508],{"class":38},[28,42428,588],{"class":211},[28,42430,21125],{"class":38},[28,42432,42289],{"class":211},[28,42434,828],{"class":38},[28,42436,588],{"class":211},[28,42438,31552],{"class":38},[28,42440,42298],{"class":211},[28,42442,1010],{"class":38},[28,42444,588],{"class":211},[28,42446,413],{"class":38},[28,42448,42307],{"class":211},[28,42450,413],{"class":38},[28,42452,38098],{"class":211},[28,42454,42455,42457,42459,42461,42463,42465,42467,42469,42471,42473,42475,42477,42479,42481,42483],{"class":30,"line":9900},[28,42456,42280],{"class":211},[28,42458,38508],{"class":38},[28,42460,588],{"class":211},[28,42462,32121],{"class":38},[28,42464,42289],{"class":211},[28,42466,32121],{"class":38},[28,42468,588],{"class":211},[28,42470,34921],{"class":38},[28,42472,42298],{"class":211},[28,42474,1010],{"class":38},[28,42476,588],{"class":211},[28,42478,413],{"class":38},[28,42480,42307],{"class":211},[28,42482,413],{"class":38},[28,42484,38098],{"class":211},[28,42486,42487,42489,42491,42493,42495,42497,42499,42501,42504,42506,42508,42510,42512,42514,42516],{"class":30,"line":9921},[28,42488,42280],{"class":211},[28,42490,38508],{"class":38},[28,42492,588],{"class":211},[28,42494,828],{"class":38},[28,42496,42289],{"class":211},[28,42498,32121],{"class":38},[28,42500,588],{"class":211},[28,42502,42503],{"class":38},"288",[28,42505,42298],{"class":211},[28,42507,407],{"class":38},[28,42509,588],{"class":211},[28,42511,413],{"class":38},[28,42513,42307],{"class":211},[28,42515,413],{"class":38},[28,42517,38098],{"class":211},[28,42519,42520,42522,42525,42527,42529,42531,42533,42535,42538,42540,42542,42544,42546,42548,42550],{"class":30,"line":9927},[28,42521,42280],{"class":211},[28,42523,42524],{"class":38},"528",[28,42526,588],{"class":211},[28,42528,34921],{"class":38},[28,42530,42289],{"class":211},[28,42532,21125],{"class":38},[28,42534,588],{"class":211},[28,42536,42537],{"class":38},"320",[28,42539,42298],{"class":211},[28,42541,407],{"class":38},[28,42543,588],{"class":211},[28,42545,32121],{"class":38},[28,42547,42307],{"class":211},[28,42549,32121],{"class":38},[28,42551,38098],{"class":211},[28,42553,42554,42556,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578],{"class":30,"line":9941},[28,42555,38148],{"class":211},[28,42557,30925],{"class":5293},[28,42559,257],{"class":207},[28,42561,282],{"class":38},[28,42563,588],{"class":211},[28,42565,30980],{"class":5293},[28,42567,257],{"class":207},[28,42569,288],{"class":38},[28,42571,588],{"class":211},[28,42573,30934],{"class":5293},[28,42575,257],{"class":207},[28,42577,427],{"class":38},[28,42579,218],{"class":211},[28,42581,42582],{"class":30,"line":9947},[28,42583,38177],{"class":211},[28,42585,42586,42588,42591,42593],{"class":30,"line":9974},[28,42587,30896],{"class":38},[28,42589,42590],{"class":211},".b5",[28,42592,257],{"class":207},[28,42594,38060],{"class":211},[28,42596,42597,42599,42602,42604,42606,42608,42610,42612,42614,42616,42618,42620,42622,42624,42626],{"class":30,"line":9983},[28,42598,42280],{"class":211},[28,42600,42601],{"class":38},"832",[28,42603,588],{"class":211},[28,42605,34921],{"class":38},[28,42607,42289],{"class":211},[28,42609,21125],{"class":38},[28,42611,588],{"class":211},[28,42613,42537],{"class":38},[28,42615,42298],{"class":211},[28,42617,407],{"class":38},[28,42619,588],{"class":211},[28,42621,32121],{"class":38},[28,42623,42307],{"class":211},[28,42625,32121],{"class":38},[28,42627,38098],{"class":211},[28,42629,42630,42632,42634,42636,42638,42640,42642,42644,42646,42648,42650,42652,42654,42656,42658],{"class":30,"line":9989},[28,42631,42280],{"class":211},[28,42633,42601],{"class":38},[28,42635,588],{"class":211},[28,42637,34991],{"class":38},[28,42639,42289],{"class":211},[28,42641,42210],{"class":38},[28,42643,588],{"class":211},[28,42645,34991],{"class":38},[28,42647,42298],{"class":211},[28,42649,817],{"class":38},[28,42651,588],{"class":211},[28,42653,32121],{"class":38},[28,42655,42307],{"class":211},[28,42657,32121],{"class":38},[28,42659,38098],{"class":211},[28,42661,42662,42665,42667,42669,42671],{"class":30,"line":9997},[28,42663,42664],{"class":211},"            nn.AdaptiveAvgPool2d((",[28,42666,427],{"class":38},[28,42668,588],{"class":211},[28,42670,427],{"class":38},[28,42672,42673],{"class":211},")),\n",[28,42675,42676],{"class":30,"line":10002},[28,42677,38841],{"class":211},[28,42679,42680,42682,42685,42687,42689],{"class":30,"line":16681},[28,42681,38846],{"class":211},[28,42683,42684],{"class":38},"1024",[28,42686,588],{"class":211},[28,42688,656],{"class":38},[28,42690,218],{"class":211},[28,42692,42693],{"class":30,"line":16687},[28,42694,38177],{"class":211},[28,42696,42697],{"class":30,"line":16710},[28,42698,42699],{"class":269},"        # 对模型参数初始化\n",[28,42701,42702,42704,42706,42708,42710],{"class":30,"line":16716},[28,42703,3480],{"class":207},[28,42705,38919],{"class":211},[28,42707,26094],{"class":207},[28,42709,38924],{"class":38},[28,42711,38927],{"class":211},[28,42713,42714,42716,42718],{"class":30,"line":16739},[28,42715,4719],{"class":207},[28,42717,38939],{"class":38},[28,42719,38942],{"class":211},[28,42721,42722,42724,42727,42729,42732,42734,42736,42738,42740],{"class":30,"line":16753},[28,42723,38952],{"class":211},[28,42725,42726],{"class":5293},"mode",[28,42728,257],{"class":207},[28,42730,42731],{"class":64},"'fan_out'",[28,42733,588],{"class":211},[28,42735,38955],{"class":5293},[28,42737,257],{"class":207},[28,42739,38960],{"class":64},[28,42741,218],{"class":211},[28,42743,42744],{"class":30,"line":16773},[28,42745,42746],{"class":269},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[28,42748,42749],{"class":30,"line":16779},[28,42750,42751],{"class":269},"                # ② mode = 'fan_out'决定使用的fan值：\n",[28,42753,42754],{"class":30,"line":16790},[28,42755,42756],{"class":269},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[28,42758,42759],{"class":30,"line":16813},[28,42760,42761],{"class":269},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[28,42763,42764],{"class":30,"line":16835},[28,42765,42766],{"class":269},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[28,42768,42769],{"class":30,"line":16840},[28,42770,42771],{"class":269},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[28,42773,42774,42776,42778,42780,42782,42784],{"class":30,"line":16846},[28,42775,38972],{"class":207},[28,42777,38975],{"class":211},[28,42779,38978],{"class":207},[28,42781,38981],{"class":207},[28,42783,38984],{"class":38},[28,42785,3816],{"class":211},[28,42787,42788,42790,42792],{"class":30,"line":16860},[28,42789,38996],{"class":211},[28,42791,401],{"class":38},[28,42793,218],{"class":211},[28,42795,42796,42799,42801],{"class":30,"line":16873},[28,42797,42798],{"class":207},"                elif",[28,42800,38939],{"class":38},[28,42802,39015],{"class":211},[28,42804,42805,42808,42810,42812,42814],{"class":30,"line":16878},[28,42806,42807],{"class":211},"                    nn.init.normal_(m.weight,",[28,42809,401],{"class":38},[28,42811,588],{"class":211},[28,42813,39037],{"class":38},[28,42815,218],{"class":211},[28,42817,42818,42821,42823,42825,42827,42829],{"class":30,"line":16892},[28,42819,42820],{"class":207},"                    if",[28,42822,38975],{"class":211},[28,42824,38978],{"class":207},[28,42826,38981],{"class":207},[28,42828,38984],{"class":38},[28,42830,3816],{"class":211},[28,42832,42833,42836,42838],{"class":30,"line":16897},[28,42834,42835],{"class":211},"                        nn.init.constant_(m.bias,",[28,42837,401],{"class":38},[28,42839,218],{"class":211},[28,42841,42842],{"class":30,"line":16903},[28,42843,35216],{"class":269},[28,42845,42846,42848,42850],{"class":30,"line":16908},[28,42847,30852],{"class":207},[28,42849,31144],{"class":34},[28,42851,31147],{"class":211},[28,42853,42854,42856,42858,42860],{"class":30,"line":16922},[28,42855,31152],{"class":211},[28,42857,257],{"class":207},[28,42859,30874],{"class":38},[28,42861,42862],{"class":211},".b1(x)\n",[28,42864,42865,42867,42869,42871],{"class":30,"line":16927},[28,42866,31152],{"class":211},[28,42868,257],{"class":207},[28,42870,30874],{"class":38},[28,42872,42873],{"class":211},".b2(x)\n",[28,42875,42876,42878,42880,42882],{"class":30,"line":16932},[28,42877,31152],{"class":211},[28,42879,257],{"class":207},[28,42881,30874],{"class":38},[28,42883,42884],{"class":211},".b3(x)\n",[28,42886,42887,42889,42891,42893],{"class":30,"line":16946},[28,42888,31152],{"class":211},[28,42890,257],{"class":207},[28,42892,30874],{"class":38},[28,42894,42895],{"class":211},".b4(x)\n",[28,42897,42898,42900,42902,42904],{"class":30,"line":16958},[28,42899,31152],{"class":211},[28,42901,257],{"class":207},[28,42903,30874],{"class":38},[28,42905,42906],{"class":211},".b5(x)\n",[28,42908,42909,42911],{"class":30,"line":16963},[28,42910,14829],{"class":207},[28,42912,31260],{"class":211},[28,42914,42915],{"class":30,"line":16976},[28,42916,2477],{"emptyLinePlaceholder":134},[28,42918,42919],{"class":30,"line":16981},[28,42920,42921],{"class":269},"# 模型展示\n",[28,42923,42924,42926,42928,42930,42932],{"class":30,"line":16986},[28,42925,1609],{"class":207},[28,42927,31271],{"class":38},[28,42929,3026],{"class":207},[28,42931,31276],{"class":64},[28,42933,3816],{"class":211},[28,42935,42936,42938,42940,42942,42944,42946,42948,42950,42952],{"class":30,"line":16991},[28,42937,31288],{"class":211},[28,42939,257],{"class":207},[28,42941,30502],{"class":211},[28,42943,31295],{"class":64},[28,42945,1782],{"class":207},[28,42947,31300],{"class":211},[28,42949,1779],{"class":207},[28,42951,30527],{"class":64},[28,42953,218],{"class":211},[28,42955,42956,42958,42960],{"class":30,"line":17004},[28,42957,31340],{"class":211},[28,42959,257],{"class":207},[28,42961,42962],{"class":211},"GoogLeNet(Inception).to(device)\n",[28,42964,42965,42967,42969,42971,42973,42975,42977,42979],{"class":30,"line":17009},[28,42966,31350],{"class":38},[28,42968,31353],{"class":211},[28,42970,427],{"class":38},[28,42972,588],{"class":211},[28,42974,31552],{"class":38},[28,42976,588],{"class":211},[28,42978,31552],{"class":38},[28,42980,31366],{"class":211},[161,42982,42983],{"start":42},[119,42984,39234],{},[18,42986,42988],{"className":30429,"code":42987,"language":30431,"meta":23,"style":23},"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",[25,42989,42990,42996,43002,43012,43018,43028,43038,43048,43058,43068,43072,43083,43093,43097,43101,43105,43113,43125,43135,43151,43161,43193,43207,43217,43227,43231,43241,43255,43265,43275,43285,43291,43295,43299,43303,43307,43311,43319,43339,43343,43347,43351,43355,43359,43375,43379,43383,43391,43395,43399,43407,43411,43415,43419,43427,43431,43435,43439,43443,43451,43455,43463,43467,43475,43479,43487,43491,43499,43503,43507,43515,43519,43523,43527,43539,43563,43577,43581,43585,43589,43597,43601,43609,43613,43621,43625,43633,43637,43645,43649,43657,43661,43673,43677,43685,43689,43697,43701,43705,43709,43713,43721,43725,43741,43745,43753,43757,43761,43765,43769,43773,43777,43781,43797,43801,43813,43817,43829,43833,43845,43849,43857,43861,43869,43873,43877,43881,43887,43891,43899,43903,43919,43923,43931,43935,43951,43963,43967,43979,43983,43987,43995,43999,44003,44011,44015,44023,44027,44035,44039,44043,44085,44127,44131,44135,44151,44155,44171,44175,44179,44187,44191,44195,44207,44245,44249,44253,44261,44265,44279,44289,44295,44301,44307,44313,44317,44321,44327,44331,44335,44343,44347,44365,44369,44373,44377,44393,44397,44401,44405,44409,44413,44433,44453,44457,44461,44465,44473,44481,44485,44501,44521,44541,44545,44549,44557,44565,44569,44573,44577,44589,44593,44603,44611,44628],{"__ignoreMap":23},[28,42991,42992,42994],{"class":30,"line":31},[28,42993,30443],{"class":207},[28,42995,31873],{"class":211},[28,42997,42998,43000],{"class":30,"line":42},[28,42999,30443],{"class":207},[28,43001,31880],{"class":211},[28,43003,43004,43006,43008,43010],{"class":30,"line":50},[28,43005,30443],{"class":207},[28,43007,31891],{"class":211},[28,43009,31434],{"class":207},[28,43011,31896],{"class":211},[28,43013,43014,43016],{"class":30,"line":58},[28,43015,30443],{"class":207},[28,43017,30446],{"class":211},[28,43019,43020,43022,43024,43026],{"class":30,"line":70},[28,43021,30788],{"class":207},[28,43023,31466],{"class":211},[28,43025,30443],{"class":207},[28,43027,31913],{"class":211},[28,43029,43030,43032,43034,43036],{"class":30,"line":78},[28,43031,30788],{"class":207},[28,43033,31419],{"class":211},[28,43035,30443],{"class":207},[28,43037,31424],{"class":211},[28,43039,43040,43042,43044,43046],{"class":30,"line":86},[28,43041,30788],{"class":207},[28,43043,31449],{"class":211},[28,43045,30443],{"class":207},[28,43047,31454],{"class":211},[28,43049,43050,43052,43054,43056],{"class":30,"line":97},[28,43051,30443],{"class":207},[28,43053,31466],{"class":211},[28,43055,31434],{"class":207},[28,43057,31471],{"class":211},[28,43059,43060,43062,43064,43066],{"class":30,"line":108},[28,43061,30443],{"class":207},[28,43063,31483],{"class":211},[28,43065,31434],{"class":207},[28,43067,31488],{"class":211},[28,43069,43070],{"class":30,"line":1407},[28,43071,31958],{"class":269},[28,43073,43074,43076,43078,43080],{"class":30,"line":1690},[28,43075,30788],{"class":207},[28,43077,31965],{"class":211},[28,43079,30443],{"class":207},[28,43081,43082],{"class":211}," GoogLeNet, Inception\n",[28,43084,43085,43087,43089,43091],{"class":30,"line":1695},[28,43086,30788],{"class":207},[28,43088,30791],{"class":211},[28,43090,30443],{"class":207},[28,43092,30796],{"class":211},[28,43094,43095],{"class":30,"line":1701},[28,43096,2477],{"emptyLinePlaceholder":134},[28,43098,43099],{"class":30,"line":1706},[28,43100,2477],{"emptyLinePlaceholder":134},[28,43102,43103],{"class":30,"line":1720},[28,43104,31993],{"class":269},[28,43106,43107,43109,43111],{"class":30,"line":1725},[28,43108,31998],{"class":207},[28,43110,32001],{"class":34},[28,43112,32004],{"class":211},[28,43114,43115,43117,43119,43121,43123],{"class":30,"line":1731},[28,43116,32009],{"class":211},[28,43118,257],{"class":207},[28,43120,31506],{"class":211},[28,43122,31514],{"class":64},[28,43124,31517],{"class":211},[28,43126,43127,43129,43131,43133],{"class":30,"line":1752},[28,43128,32022],{"class":5293},[28,43130,257],{"class":207},[28,43132,31527],{"class":38},[28,43134,31517],{"class":211},[28,43136,43137,43139,43141,43143,43145,43147,43149],{"class":30,"line":1757},[28,43138,32033],{"class":5293},[28,43140,257],{"class":207},[28,43142,31544],{"class":211},[28,43144,31547],{"class":5293},[28,43146,257],{"class":207},[28,43148,35500],{"class":38},[28,43150,31555],{"class":211},[28,43152,43153,43155,43157,43159],{"class":30,"line":1771},[28,43154,32050],{"class":5293},[28,43156,257],{"class":207},[28,43158,31527],{"class":38},[28,43160,218],{"class":211},[28,43162,43163,43165,43167,43169,43171,43173,43175,43177,43179,43181,43183,43185,43187,43189,43191],{"class":30,"line":1776},[28,43164,32061],{"class":211},[28,43166,257],{"class":207},[28,43168,32066],{"class":211},[28,43170,32069],{"class":38},[28,43172,212],{"class":211},[28,43174,32074],{"class":38},[28,43176,665],{"class":207},[28,43178,7435],{"class":38},[28,43180,32081],{"class":211},[28,43182,32069],{"class":38},[28,43184,212],{"class":211},[28,43186,32088],{"class":38},[28,43188,665],{"class":207},[28,43190,7435],{"class":38},[28,43192,32095],{"class":211},[28,43194,43195,43197,43199,43201,43203,43205],{"class":30,"line":1805},[28,43196,32100],{"class":211},[28,43198,257],{"class":207},[28,43200,32105],{"class":211},[28,43202,31588],{"class":5293},[28,43204,257],{"class":207},[28,43206,31593],{"class":211},[28,43208,43209,43211,43213,43215],{"class":30,"line":1810},[28,43210,32116],{"class":5293},[28,43212,257],{"class":207},[28,43214,407],{"class":38},[28,43216,31517],{"class":211},[28,43218,43219,43221,43223,43225],{"class":30,"line":1827},[28,43220,32128],{"class":5293},[28,43222,257],{"class":207},[28,43224,31527],{"class":38},[28,43226,31517],{"class":211},[28,43228,43229],{"class":30,"line":1832},[28,43230,32139],{"class":269},[28,43232,43233,43235,43237,43239],{"class":30,"line":1837},[28,43234,32144],{"class":5293},[28,43236,257],{"class":207},[28,43238,605],{"class":38},[28,43240,218],{"class":211},[28,43242,43243,43245,43247,43249,43251,43253],{"class":30,"line":1842},[28,43244,32155],{"class":211},[28,43246,257],{"class":207},[28,43248,31585],{"class":211},[28,43250,31588],{"class":5293},[28,43252,257],{"class":207},[28,43254,32166],{"class":211},[28,43256,43257,43259,43261,43263],{"class":30,"line":1856},[28,43258,32171],{"class":5293},[28,43260,257],{"class":207},[28,43262,407],{"class":38},[28,43264,31517],{"class":211},[28,43266,43267,43269,43271,43273],{"class":30,"line":1861},[28,43268,32182],{"class":5293},[28,43270,257],{"class":207},[28,43272,31527],{"class":38},[28,43274,31517],{"class":211},[28,43276,43277,43279,43281,43283],{"class":30,"line":2654},[28,43278,32193],{"class":5293},[28,43280,257],{"class":207},[28,43282,605],{"class":38},[28,43284,218],{"class":211},[28,43286,43287,43289],{"class":30,"line":2668},[28,43288,4167],{"class":207},[28,43290,32206],{"class":211},[28,43292,43293],{"class":30,"line":2676},[28,43294,2477],{"emptyLinePlaceholder":134},[28,43296,43297],{"class":30,"line":2681},[28,43298,32215],{"class":269},[28,43300,43301],{"class":30,"line":2687},[28,43302,32220],{"class":269},[28,43304,43305],{"class":30,"line":2693},[28,43306,2477],{"emptyLinePlaceholder":134},[28,43308,43309],{"class":30,"line":2698},[28,43310,32229],{"class":269},[28,43312,43313,43315,43317],{"class":30,"line":8025},[28,43314,31998],{"class":207},[28,43316,32236],{"class":34},[28,43318,32239],{"class":211},[28,43320,43321,43323,43325,43327,43329,43331,43333,43335,43337],{"class":30,"line":8049},[28,43322,31288],{"class":211},[28,43324,257],{"class":207},[28,43326,30502],{"class":211},[28,43328,31295],{"class":64},[28,43330,1782],{"class":207},[28,43332,31300],{"class":211},[28,43334,1779],{"class":207},[28,43336,32258],{"class":64},[28,43338,218],{"class":211},[28,43340,43341],{"class":30,"line":8054},[28,43342,2477],{"emptyLinePlaceholder":134},[28,43344,43345],{"class":30,"line":8060},[28,43346,2477],{"emptyLinePlaceholder":134},[28,43348,43349],{"class":30,"line":8087},[28,43350,32273],{"class":269},[28,43352,43353],{"class":30,"line":8092},[28,43354,32278],{"class":269},[28,43356,43357],{"class":30,"line":8098},[28,43358,32283],{"class":269},[28,43360,43361,43363,43365,43367,43369,43371,43373],{"class":30,"line":8110},[28,43362,32288],{"class":211},[28,43364,257],{"class":207},[28,43366,32293],{"class":211},[28,43368,32296],{"class":5293},[28,43370,257],{"class":207},[28,43372,32301],{"class":38},[28,43374,218],{"class":211},[28,43376,43377],{"class":30,"line":8122},[28,43378,2477],{"emptyLinePlaceholder":134},[28,43380,43381],{"class":30,"line":8134},[28,43382,32312],{"class":269},[28,43384,43385,43387,43389],{"class":30,"line":9793},[28,43386,32317],{"class":211},[28,43388,257],{"class":207},[28,43390,32322],{"class":211},[28,43392,43393],{"class":30,"line":9818},[28,43394,2477],{"emptyLinePlaceholder":134},[28,43396,43397],{"class":30,"line":9841},[28,43398,32331],{"class":269},[28,43400,43401,43403,43405],{"class":30,"line":9865},[28,43402,31340],{"class":211},[28,43404,257],{"class":207},[28,43406,32340],{"class":211},[28,43408,43409],{"class":30,"line":9870},[28,43410,32345],{"class":269},[28,43412,43413],{"class":30,"line":9875},[28,43414,32350],{"class":269},[28,43416,43417],{"class":30,"line":9880},[28,43418,32355],{"class":269},[28,43420,43421,43423,43425],{"class":30,"line":9889},[28,43422,32360],{"class":211},[28,43424,257],{"class":207},[28,43426,32365],{"class":211},[28,43428,43429],{"class":30,"line":9894},[28,43430,2477],{"emptyLinePlaceholder":134},[28,43432,43433],{"class":30,"line":9900},[28,43434,2477],{"emptyLinePlaceholder":134},[28,43436,43437],{"class":30,"line":9921},[28,43438,32378],{"class":269},[28,43440,43441],{"class":30,"line":9927},[28,43442,32383],{"class":269},[28,43444,43445,43447,43449],{"class":30,"line":9941},[28,43446,32388],{"class":211},[28,43448,257],{"class":207},[28,43450,32393],{"class":38},[28,43452,43453],{"class":30,"line":9947},[28,43454,32398],{"class":269},[28,43456,43457,43459,43461],{"class":30,"line":9974},[28,43458,32403],{"class":211},[28,43460,257],{"class":207},[28,43462,32408],{"class":211},[28,43464,43465],{"class":30,"line":9983},[28,43466,32413],{"class":269},[28,43468,43469,43471,43473],{"class":30,"line":9989},[28,43470,32418],{"class":211},[28,43472,257],{"class":207},[28,43474,32408],{"class":211},[28,43476,43477],{"class":30,"line":9997},[28,43478,32427],{"class":269},[28,43480,43481,43483,43485],{"class":30,"line":10002},[28,43482,32432],{"class":211},[28,43484,257],{"class":207},[28,43486,32408],{"class":211},[28,43488,43489],{"class":30,"line":16681},[28,43490,32441],{"class":269},[28,43492,43493,43495,43497],{"class":30,"line":16687},[28,43494,32446],{"class":211},[28,43496,257],{"class":207},[28,43498,32408],{"class":211},[28,43500,43501],{"class":30,"line":16710},[28,43502,2477],{"emptyLinePlaceholder":134},[28,43504,43505],{"class":30,"line":16716},[28,43506,32459],{"class":269},[28,43508,43509,43511,43513],{"class":30,"line":16739},[28,43510,32464],{"class":211},[28,43512,257],{"class":207},[28,43514,32469],{"class":211},[28,43516,43517],{"class":30,"line":16753},[28,43518,2477],{"emptyLinePlaceholder":134},[28,43520,43521],{"class":30,"line":16773},[28,43522,2477],{"emptyLinePlaceholder":134},[28,43524,43525],{"class":30,"line":16779},[28,43526,32482],{"class":269},[28,43528,43529,43531,43533,43535,43537],{"class":30,"line":16790},[28,43530,3278],{"class":207},[28,43532,32489],{"class":211},[28,43534,26094],{"class":207},[28,43536,32494],{"class":38},[28,43538,32497],{"class":211},[28,43540,43541,43543,43545,43547,43549,43551,43553,43555,43557,43559,43561],{"class":30,"line":16813},[28,43542,32502],{"class":38},[28,43544,212],{"class":211},[28,43546,32507],{"class":64},[28,43548,32510],{"class":38},[28,43550,794],{"class":64},[28,43552,32510],{"class":38},[28,43554,461],{"class":64},[28,43556,32519],{"class":211},[28,43558,742],{"class":207},[28,43560,427],{"class":38},[28,43562,30548],{"class":211},[28,43564,43565,43567,43569,43571,43573,43575],{"class":30,"line":16835},[28,43566,32502],{"class":38},[28,43568,212],{"class":211},[28,43570,32534],{"class":64},[28,43572,665],{"class":207},[28,43574,656],{"class":38},[28,43576,218],{"class":211},[28,43578,43579],{"class":30,"line":16840},[28,43580,2477],{"emptyLinePlaceholder":134},[28,43582,43583],{"class":30,"line":16846},[28,43584,32549],{"class":269},[28,43586,43587],{"class":30,"line":16860},[28,43588,32554],{"class":269},[28,43590,43591,43593,43595],{"class":30,"line":16873},[28,43592,32559],{"class":211},[28,43594,257],{"class":207},[28,43596,32393],{"class":38},[28,43598,43599],{"class":30,"line":16878},[28,43600,32568],{"class":269},[28,43602,43603,43605,43607],{"class":30,"line":16892},[28,43604,32573],{"class":211},[28,43606,257],{"class":207},[28,43608,3162],{"class":38},[28,43610,43611],{"class":30,"line":16897},[28,43612,32582],{"class":269},[28,43614,43615,43617,43619],{"class":30,"line":16903},[28,43616,32587],{"class":211},[28,43618,257],{"class":207},[28,43620,32393],{"class":38},[28,43622,43623],{"class":30,"line":16908},[28,43624,32596],{"class":269},[28,43626,43627,43629,43631],{"class":30,"line":16922},[28,43628,32601],{"class":211},[28,43630,257],{"class":207},[28,43632,3162],{"class":38},[28,43634,43635],{"class":30,"line":16927},[28,43636,32610],{"class":269},[28,43638,43639,43641,43643],{"class":30,"line":16932},[28,43640,32615],{"class":211},[28,43642,257],{"class":207},[28,43644,3162],{"class":38},[28,43646,43647],{"class":30,"line":16946},[28,43648,32624],{"class":269},[28,43650,43651,43653,43655],{"class":30,"line":16958},[28,43652,32629],{"class":211},[28,43654,257],{"class":207},[28,43656,3162],{"class":38},[28,43658,43659],{"class":30,"line":16963},[28,43660,32638],{"class":269},[28,43662,43663,43665,43667,43669,43671],{"class":30,"line":16976},[28,43664,3480],{"class":207},[28,43666,31652],{"class":211},[28,43668,26094],{"class":207},[28,43670,31657],{"class":38},[28,43672,32651],{"class":211},[28,43674,43675],{"class":30,"line":16981},[28,43676,32656],{"class":269},[28,43678,43679,43681,43683],{"class":30,"line":16986},[28,43680,32661],{"class":211},[28,43682,257],{"class":207},[28,43684,32666],{"class":211},[28,43686,43687],{"class":30,"line":16991},[28,43688,32671],{"class":269},[28,43690,43691,43693,43695],{"class":30,"line":17004},[28,43692,32676],{"class":211},[28,43694,257],{"class":207},[28,43696,32681],{"class":211},[28,43698,43699],{"class":30,"line":17009},[28,43700,32687],{"class":269},[28,43702,43703],{"class":30,"line":32684},[28,43704,32693],{"class":211},[28,43706,43707],{"class":30,"line":32690},[28,43708,32699],{"class":269},[28,43710,43711],{"class":30,"line":32696},[28,43712,32705],{"class":269},[28,43714,43715,43717,43719],{"class":30,"line":32702},[28,43716,32711],{"class":211},[28,43718,257],{"class":207},[28,43720,32716],{"class":211},[28,43722,43723],{"class":30,"line":32708},[28,43724,32722],{"class":269},[28,43726,43727,43729,43731,43733,43735,43737,43739],{"class":30,"line":32719},[28,43728,32728],{"class":211},[28,43730,257],{"class":207},[28,43732,32733],{"class":211},[28,43734,32736],{"class":5293},[28,43736,257],{"class":207},[28,43738,427],{"class":38},[28,43740,218],{"class":211},[28,43742,43743],{"class":30,"line":32725},[28,43744,32748],{"class":269},[28,43746,43747,43749,43751],{"class":30,"line":32745},[28,43748,32754],{"class":211},[28,43750,257],{"class":207},[28,43752,32759],{"class":211},[28,43754,43755],{"class":30,"line":32751},[28,43756,32765],{"class":269},[28,43758,43759],{"class":30,"line":32762},[28,43760,32771],{"class":211},[28,43762,43763],{"class":30,"line":32768},[28,43764,32777],{"class":269},[28,43766,43767],{"class":30,"line":32774},[28,43768,32783],{"class":211},[28,43770,43771],{"class":30,"line":32780},[28,43772,32789],{"class":269},[28,43774,43775],{"class":30,"line":32786},[28,43776,32795],{"class":211},[28,43778,43779],{"class":30,"line":32792},[28,43780,32801],{"class":269},[28,43782,43783,43785,43787,43789,43791,43793,43795],{"class":30,"line":32798},[28,43784,32807],{"class":211},[28,43786,9554],{"class":207},[28,43788,32812],{"class":211},[28,43790,665],{"class":207},[28,43792,32817],{"class":211},[28,43794,401],{"class":38},[28,43796,218],{"class":211},[28,43798,43799],{"class":30,"line":32804},[28,43800,32827],{"class":269},[28,43802,43803,43805,43807,43809,43811],{"class":30,"line":32824},[28,43804,32833],{"class":211},[28,43806,9554],{"class":207},[28,43808,32838],{"class":211},[28,43810,3026],{"class":207},[28,43812,32843],{"class":211},[28,43814,43815],{"class":30,"line":32830},[28,43816,32849],{"class":269},[28,43818,43819,43821,43823,43825,43827],{"class":30,"line":32846},[28,43820,32855],{"class":211},[28,43822,9554],{"class":207},[28,43824,32817],{"class":211},[28,43826,401],{"class":38},[28,43828,218],{"class":211},[28,43830,43831],{"class":30,"line":32852},[28,43832,32869],{"class":269},[28,43834,43835,43837,43839,43841,43843],{"class":30,"line":32866},[28,43836,3480],{"class":207},[28,43838,32877],{"class":211},[28,43840,26094],{"class":207},[28,43842,31657],{"class":38},[28,43844,32884],{"class":211},[28,43846,43847],{"class":30,"line":32872},[28,43848,32890],{"class":269},[28,43850,43851,43853,43855],{"class":30,"line":32887},[28,43852,32661],{"class":211},[28,43854,257],{"class":207},[28,43856,32666],{"class":211},[28,43858,43859],{"class":30,"line":32893},[28,43860,32905],{"class":269},[28,43862,43863,43865,43867],{"class":30,"line":32902},[28,43864,32676],{"class":211},[28,43866,257],{"class":207},[28,43868,32681],{"class":211},[28,43870,43871],{"class":30,"line":32908},[28,43872,32920],{"class":269},[28,43874,43875],{"class":30,"line":32917},[28,43876,32926],{"class":211},[28,43878,43879],{"class":30,"line":32923},[28,43880,36407],{"class":269},[28,43882,43883,43885],{"class":30,"line":32929},[28,43884,32932],{"class":207},[28,43886,32935],{"class":211},[28,43888,43889],{"class":30,"line":32938},[28,43890,32941],{"class":269},[28,43892,43893,43895,43897],{"class":30,"line":32944},[28,43894,36422],{"class":211},[28,43896,257],{"class":207},[28,43898,32716],{"class":211},[28,43900,43901],{"class":30,"line":32955},[28,43902,32958],{"class":269},[28,43904,43905,43907,43909,43911,43913,43915,43917],{"class":30,"line":32961},[28,43906,36435],{"class":211},[28,43908,257],{"class":207},[28,43910,32733],{"class":211},[28,43912,32736],{"class":5293},[28,43914,257],{"class":207},[28,43916,427],{"class":38},[28,43918,218],{"class":211},[28,43920,43921],{"class":30,"line":32980},[28,43922,32983],{"class":269},[28,43924,43925,43927,43929],{"class":30,"line":32986},[28,43926,36456],{"class":211},[28,43928,257],{"class":207},[28,43930,32759],{"class":211},[28,43932,43933],{"class":30,"line":32997},[28,43934,33000],{"class":269},[28,43936,43937,43939,43941,43943,43945,43947,43949],{"class":30,"line":33003},[28,43938,36469],{"class":211},[28,43940,9554],{"class":207},[28,43942,36474],{"class":211},[28,43944,665],{"class":207},[28,43946,32817],{"class":211},[28,43948,401],{"class":38},[28,43950,218],{"class":211},[28,43952,43953,43955,43957,43959,43961],{"class":30,"line":33023},[28,43954,36487],{"class":211},[28,43956,9554],{"class":207},[28,43958,32838],{"class":211},[28,43960,3026],{"class":207},[28,43962,32843],{"class":211},[28,43964,43965],{"class":30,"line":33039},[28,43966,36500],{"class":269},[28,43968,43969,43971,43973,43975,43977],{"class":30,"line":33045},[28,43970,36505],{"class":211},[28,43972,9554],{"class":207},[28,43974,32817],{"class":211},[28,43976,401],{"class":38},[28,43978,218],{"class":211},[28,43980,43981],{"class":30,"line":33059},[28,43982,33062],{"class":269},[28,43984,43985],{"class":30,"line":33065},[28,43986,33068],{"class":269},[28,43988,43989,43991,43993],{"class":30,"line":33071},[28,43990,33074],{"class":211},[28,43992,794],{"class":207},[28,43994,33079],{"class":211},[28,43996,43997],{"class":30,"line":33082},[28,43998,33085],{"class":269},[28,44000,44001],{"class":30,"line":33088},[28,44002,33091],{"class":269},[28,44004,44005,44007,44009],{"class":30,"line":33094},[28,44006,33097],{"class":211},[28,44008,794],{"class":207},[28,44010,33079],{"class":211},[28,44012,44013],{"class":30,"line":33104},[28,44014,33107],{"class":269},[28,44016,44017,44019,44021],{"class":30,"line":33110},[28,44018,33113],{"class":211},[28,44020,794],{"class":207},[28,44022,33118],{"class":211},[28,44024,44025],{"class":30,"line":33121},[28,44026,33124],{"class":269},[28,44028,44029,44031,44033],{"class":30,"line":33127},[28,44030,33130],{"class":211},[28,44032,794],{"class":207},[28,44034,33118],{"class":211},[28,44036,44037],{"class":30,"line":33137},[28,44038,2477],{"emptyLinePlaceholder":134},[28,44040,44041],{"class":30,"line":33142},[28,44042,33145],{"class":269},[28,44044,44045,44047,44049,44051,44053,44055,44057,44059,44061,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083],{"class":30,"line":33148},[28,44046,32502],{"class":38},[28,44048,212],{"class":211},[28,44050,3669],{"class":64},[28,44052,32510],{"class":38},[28,44054,33159],{"class":64},[28,44056,1106],{"class":38},[28,44058,33164],{"class":207},[28,44060,1156],{"class":38},[28,44062,33169],{"class":64},[28,44064,1106],{"class":38},[28,44066,33164],{"class":207},[28,44068,1156],{"class":38},[28,44070,3669],{"class":64},[28,44072,33180],{"class":211},[28,44074,742],{"class":207},[28,44076,427],{"class":38},[28,44078,33187],{"class":211},[28,44080,742],{"class":207},[28,44082,427],{"class":38},[28,44084,33194],{"class":211},[28,44086,44087,44089,44091,44093,44095,44097,44099,44101,44103,44105,44107,44109,44111,44113,44115,44117,44119,44121,44123,44125],{"class":30,"line":33197},[28,44088,32502],{"class":38},[28,44090,212],{"class":211},[28,44092,3669],{"class":64},[28,44094,32510],{"class":38},[28,44096,33208],{"class":64},[28,44098,1106],{"class":38},[28,44100,33164],{"class":207},[28,44102,1156],{"class":38},[28,44104,33217],{"class":64},[28,44106,1106],{"class":38},[28,44108,33164],{"class":207},[28,44110,1156],{"class":38},[28,44112,3669],{"class":64},[28,44114,33228],{"class":211},[28,44116,742],{"class":207},[28,44118,427],{"class":38},[28,44120,33235],{"class":211},[28,44122,742],{"class":207},[28,44124,427],{"class":38},[28,44126,33194],{"class":211},[28,44128,44129],{"class":30,"line":33244},[28,44130,2477],{"emptyLinePlaceholder":134},[28,44132,44133],{"class":30,"line":33249},[28,44134,33252],{"class":269},[28,44136,44137,44139,44141,44143,44145,44147,44149],{"class":30,"line":33255},[28,44138,2574],{"class":207},[28,44140,33260],{"class":211},[28,44142,742],{"class":207},[28,44144,427],{"class":38},[28,44146,1150],{"class":211},[28,44148,1170],{"class":207},[28,44150,33271],{"class":211},[28,44152,44153],{"class":30,"line":33274},[28,44154,33277],{"class":269},[28,44156,44157,44159,44161,44163,44165,44167,44169],{"class":30,"line":33280},[28,44158,33283],{"class":211},[28,44160,251],{"class":38},[28,44162,257],{"class":207},[28,44164,33290],{"class":211},[28,44166,742],{"class":207},[28,44168,427],{"class":38},[28,44170,33297],{"class":211},[28,44172,44173],{"class":30,"line":33300},[28,44174,33303],{"class":269},[28,44176,44177],{"class":30,"line":33306},[28,44178,33309],{"class":269},[28,44180,44181,44183,44185],{"class":30,"line":33312},[28,44182,33315],{"class":211},[28,44184,257],{"class":207},[28,44186,32365],{"class":211},[28,44188,44189],{"class":30,"line":33322},[28,44190,2477],{"emptyLinePlaceholder":134},[28,44192,44193],{"class":30,"line":33327},[28,44194,33330],{"class":269},[28,44196,44197,44199,44201,44203,44205],{"class":30,"line":33333},[28,44198,33336],{"class":211},[28,44200,257],{"class":207},[28,44202,33341],{"class":211},[28,44204,742],{"class":207},[28,44206,33346],{"class":211},[28,44208,44209,44211,44213,44215,44217,44219,44221,44223,44225,44227,44229,44231,44233,44235,44237,44239,44241,44243],{"class":30,"line":33349},[28,44210,32502],{"class":38},[28,44212,212],{"class":211},[28,44214,33356],{"class":64},[28,44216,1106],{"class":38},[28,44218,33361],{"class":207},[28,44220,1156],{"class":38},[28,44222,754],{"class":64},[28,44224,1106],{"class":38},[28,44226,33361],{"class":207},[28,44228,1156],{"class":38},[28,44230,33374],{"class":64},[28,44232,33377],{"class":211},[28,44234,33380],{"class":207},[28,44236,1117],{"class":38},[28,44238,33385],{"class":211},[28,44240,538],{"class":207},[28,44242,1117],{"class":38},[28,44244,30548],{"class":211},[28,44246,44247],{"class":30,"line":33394},[28,44248,36784],{"class":269},[28,44250,44251],{"class":30,"line":33400},[28,44252,36789],{"class":269},[28,44254,44255,44257,44259],{"class":30,"line":33406},[28,44256,36794],{"class":211},[28,44258,33418],{"class":64},[28,44260,218],{"class":211},[28,44262,44263],{"class":30,"line":33412},[28,44264,33438],{"class":269},[28,44266,44267,44269,44271,44273,44275,44277],{"class":30,"line":33423},[28,44268,33444],{"class":211},[28,44270,257],{"class":207},[28,44272,33449],{"class":211},[28,44274,33452],{"class":5293},[28,44276,257],{"class":207},[28,44278,1624],{"class":211},[28,44280,44281,44283,44285,44287],{"class":30,"line":33429},[28,44282,33462],{"class":64},[28,44284,1069],{"class":211},[28,44286,33467],{"class":38},[28,44288,33470],{"class":211},[28,44290,44291,44293],{"class":30,"line":33435},[28,44292,33476],{"class":64},[28,44294,33479],{"class":211},[28,44296,44297,44299],{"class":30,"line":33441},[28,44298,33485],{"class":64},[28,44300,33488],{"class":211},[28,44302,44303,44305],{"class":30,"line":33459},[28,44304,33494],{"class":64},[28,44306,33497],{"class":211},[28,44308,44309,44311],{"class":30,"line":33473},[28,44310,33503],{"class":64},[28,44312,33506],{"class":211},[28,44314,44315],{"class":30,"line":33482},[28,44316,33512],{"class":211},[28,44318,44319],{"class":30,"line":33491},[28,44320,33518],{"class":269},[28,44322,44323,44325],{"class":30,"line":33500},[28,44324,4167],{"class":207},[28,44326,33526],{"class":211},[28,44328,44329],{"class":30,"line":33509},[28,44330,2477],{"emptyLinePlaceholder":134},[28,44332,44333],{"class":30,"line":33515},[28,44334,33537],{"class":269},[28,44336,44337,44339,44341],{"class":30,"line":33521},[28,44338,31998],{"class":207},[28,44340,33545],{"class":34},[28,44342,33548],{"class":211},[28,44344,44345],{"class":30,"line":33529},[28,44346,33554],{"class":269},[28,44348,44349,44351,44353,44355,44357,44359,44361,44363],{"class":30,"line":33534},[28,44350,33560],{"class":211},[28,44352,31744],{"class":5293},[28,44354,257],{"class":207},[28,44356,212],{"class":211},[28,44358,708],{"class":38},[28,44360,588],{"class":211},[28,44362,503],{"class":38},[28,44364,30548],{"class":211},[28,44366,44367],{"class":30,"line":33540},[28,44368,33580],{"class":269},[28,44370,44371],{"class":30,"line":33551},[28,44372,33586],{"class":269},[28,44374,44375],{"class":30,"line":33557},[28,44376,33592],{"class":269},[28,44378,44379,44381,44383,44385,44387,44389,44391],{"class":30,"line":33577},[28,44380,31778],{"class":211},[28,44382,427],{"class":38},[28,44384,588],{"class":211},[28,44386,288],{"class":38},[28,44388,588],{"class":211},[28,44390,427],{"class":38},[28,44392,218],{"class":211},[28,44394,44395],{"class":30,"line":33583},[28,44396,33615],{"class":269},[28,44398,44399],{"class":30,"line":33589},[28,44400,33621],{"class":269},[28,44402,44403],{"class":30,"line":33595},[28,44404,33627],{"class":269},[28,44406,44407],{"class":30,"line":33612},[28,44408,33633],{"class":269},[28,44410,44411],{"class":30,"line":33618},[28,44412,33639],{"class":269},[28,44414,44415,44417,44419,44421,44423,44425,44427,44429,44431],{"class":30,"line":33624},[28,44416,33645],{"class":211},[28,44418,33648],{"class":64},[28,44420,33651],{"class":211},[28,44422,33654],{"class":64},[28,44424,588],{"class":211},[28,44426,33659],{"class":5293},[28,44428,257],{"class":207},[28,44430,33664],{"class":64},[28,44432,218],{"class":211},[28,44434,44435,44437,44439,44441,44443,44445,44447,44449,44451],{"class":30,"line":33630},[28,44436,33645],{"class":211},[28,44438,33648],{"class":64},[28,44440,33676],{"class":211},[28,44442,33679],{"class":64},[28,44444,588],{"class":211},[28,44446,33659],{"class":5293},[28,44448,257],{"class":207},[28,44450,33688],{"class":64},[28,44452,218],{"class":211},[28,44454,44455],{"class":30,"line":33636},[28,44456,33696],{"class":269},[28,44458,44459],{"class":30,"line":33642},[28,44460,33702],{"class":211},[28,44462,44463],{"class":30,"line":33669},[28,44464,33708],{"class":269},[28,44466,44467,44469,44471],{"class":30,"line":33693},[28,44468,33714],{"class":211},[28,44470,33717],{"class":64},[28,44472,218],{"class":211},[28,44474,44475,44477,44479],{"class":30,"line":33699},[28,44476,33725],{"class":211},[28,44478,33728],{"class":64},[28,44480,218],{"class":211},[28,44482,44483],{"class":30,"line":33705},[28,44484,33736],{"class":269},[28,44486,44487,44489,44491,44493,44495,44497,44499],{"class":30,"line":33711},[28,44488,31778],{"class":211},[28,44490,427],{"class":38},[28,44492,588],{"class":211},[28,44494,288],{"class":38},[28,44496,588],{"class":211},[28,44498,288],{"class":38},[28,44500,218],{"class":211},[28,44502,44503,44505,44507,44509,44511,44513,44515,44517,44519],{"class":30,"line":33722},[28,44504,33645],{"class":211},[28,44506,33648],{"class":64},[28,44508,33763],{"class":211},[28,44510,33654],{"class":64},[28,44512,588],{"class":211},[28,44514,33659],{"class":5293},[28,44516,257],{"class":207},[28,44518,33774],{"class":64},[28,44520,218],{"class":211},[28,44522,44523,44525,44527,44529,44531,44533,44535,44537,44539],{"class":30,"line":33733},[28,44524,33645],{"class":211},[28,44526,33648],{"class":64},[28,44528,33786],{"class":211},[28,44530,33679],{"class":64},[28,44532,588],{"class":211},[28,44534,33659],{"class":5293},[28,44536,257],{"class":207},[28,44538,33797],{"class":64},[28,44540,218],{"class":211},[28,44542,44543],{"class":30,"line":33739},[28,44544,33805],{"class":269},[28,44546,44547],{"class":30,"line":33756},[28,44548,33702],{"class":211},[28,44550,44551,44553,44555],{"class":30,"line":33779},[28,44552,33714],{"class":211},[28,44554,33648],{"class":64},[28,44556,218],{"class":211},[28,44558,44559,44561,44563],{"class":30,"line":33802},[28,44560,33725],{"class":211},[28,44562,33827],{"class":64},[28,44564,218],{"class":211},[28,44566,44567],{"class":30,"line":33808},[28,44568,33835],{"class":211},[28,44570,44571],{"class":30,"line":33813},[28,44572,2477],{"emptyLinePlaceholder":134},[28,44574,44575],{"class":30,"line":33822},[28,44576,33846],{"class":269},[28,44578,44579,44581,44583,44585,44587],{"class":30,"line":33832},[28,44580,1609],{"class":207},[28,44582,31271],{"class":38},[28,44584,3026],{"class":207},[28,44586,31276],{"class":64},[28,44588,3816],{"class":211},[28,44590,44591],{"class":30,"line":33838},[28,44592,33865],{"class":269},[28,44594,44595,44598,44600],{"class":30,"line":33843},[28,44596,44597],{"class":211},"    GoogLeNet",[28,44599,257],{"class":207},[28,44601,44602],{"class":211},"GoogLeNet(Inception)\n",[28,44604,44605,44607,44609],{"class":30,"line":33849},[28,44606,33882],{"class":211},[28,44608,257],{"class":207},[28,44610,33887],{"class":211},[28,44612,44613,44615,44617,44620,44622,44624,44626],{"class":30,"line":33862},[28,44614,33444],{"class":211},[28,44616,257],{"class":207},[28,44618,44619],{"class":211},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[28,44621,33900],{"class":5293},[28,44623,257],{"class":207},[28,44625,1161],{"class":38},[28,44627,218],{"class":211},[28,44629,44630],{"class":30,"line":33868},[28,44631,33912],{"class":211},[161,44633,44634],{"start":50},[119,44635,40625],{},[18,44637,44639],{"className":30429,"code":44638,"language":30431,"meta":23,"style":23},"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",[25,44640,44641,44647,44657,44667,44671,44681,44692,44696,44700,44704,44712,44728,44738,44754,44764,44778,44782,44792,44802,44812,44818,44822,44826,44834,44838,44854,44862,44866,44870,44878,44886,44890,44894,44898,44902,44908,44912,44922,44930,44938,44942,44946,44950,44958,44962,44978,44982,44986,44990,45002,45006,45018,45022,45026,45038,45042,45052,45056,45060,45072,45076,45084,45088,45092,45100,45104,45112,45116,45120,45124,45128,45132,45148,45156,45160,45164,45212,45218,45222,45232,45240,45248,45252,45256,45260,45264,45272,45276,45292,45296,45304,45312],{"__ignoreMap":23},[28,44642,44643,44645],{"class":30,"line":31},[28,44644,30443],{"class":207},[28,44646,30446],{"class":211},[28,44648,44649,44651,44653,44655],{"class":30,"line":42},[28,44650,30443],{"class":207},[28,44652,31466],{"class":211},[28,44654,31434],{"class":207},[28,44656,31471],{"class":211},[28,44658,44659,44661,44663,44665],{"class":30,"line":50},[28,44660,30788],{"class":207},[28,44662,31449],{"class":211},[28,44664,30443],{"class":207},[28,44666,31454],{"class":211},[28,44668,44669],{"class":30,"line":58},[28,44670,33973],{"class":269},[28,44672,44673,44675,44677,44679],{"class":30,"line":70},[28,44674,30788],{"class":207},[28,44676,31419],{"class":211},[28,44678,30443],{"class":207},[28,44680,31424],{"class":211},[28,44682,44683,44685,44687,44689],{"class":30,"line":78},[28,44684,30788],{"class":207},[28,44686,31965],{"class":211},[28,44688,30443],{"class":207},[28,44690,44691],{"class":211}," GoogLeNet,Inception\n",[28,44693,44694],{"class":30,"line":86},[28,44695,2477],{"emptyLinePlaceholder":134},[28,44697,44698],{"class":30,"line":97},[28,44699,2477],{"emptyLinePlaceholder":134},[28,44701,44702],{"class":30,"line":108},[28,44703,34002],{"class":269},[28,44705,44706,44708,44710],{"class":30,"line":1407},[28,44707,31998],{"class":207},[28,44709,34009],{"class":34},[28,44711,32004],{"class":211},[28,44713,44714,44716,44718,44720,44722,44724,44726],{"class":30,"line":1690},[28,44715,34016],{"class":211},[28,44717,257],{"class":207},[28,44719,31506],{"class":211},[28,44721,31509],{"class":5293},[28,44723,257],{"class":207},[28,44725,31514],{"class":64},[28,44727,31517],{"class":211},[28,44729,44730,44732,44734,44736],{"class":30,"line":1695},[28,44731,34033],{"class":5293},[28,44733,257],{"class":207},[28,44735,34038],{"class":38},[28,44737,31517],{"class":211},[28,44739,44740,44742,44744,44746,44748,44750,44752],{"class":30,"line":1701},[28,44741,34045],{"class":5293},[28,44743,257],{"class":207},[28,44745,31544],{"class":211},[28,44747,31547],{"class":5293},[28,44749,257],{"class":207},[28,44751,35500],{"class":38},[28,44753,31555],{"class":211},[28,44755,44756,44758,44760,44762],{"class":30,"line":1706},[28,44757,34062],{"class":5293},[28,44759,257],{"class":207},[28,44761,31527],{"class":38},[28,44763,218],{"class":211},[28,44765,44766,44768,44770,44772,44774,44776],{"class":30,"line":1720},[28,44767,34073],{"class":211},[28,44769,257],{"class":207},[28,44771,31585],{"class":211},[28,44773,31588],{"class":5293},[28,44775,257],{"class":207},[28,44777,34084],{"class":211},[28,44779,44780],{"class":30,"line":1725},[28,44781,34089],{"class":269},[28,44783,44784,44786,44788,44790],{"class":30,"line":1731},[28,44785,34094],{"class":5293},[28,44787,257],{"class":207},[28,44789,427],{"class":38},[28,44791,31517],{"class":211},[28,44793,44794,44796,44798,44800],{"class":30,"line":1752},[28,44795,34105],{"class":5293},[28,44797,257],{"class":207},[28,44799,31527],{"class":38},[28,44801,31517],{"class":211},[28,44803,44804,44806,44808,44810],{"class":30,"line":1757},[28,44805,34116],{"class":5293},[28,44807,257],{"class":207},[28,44809,401],{"class":38},[28,44811,218],{"class":211},[28,44813,44814,44816],{"class":30,"line":1771},[28,44815,4167],{"class":207},[28,44817,34129],{"class":211},[28,44819,44820],{"class":30,"line":1776},[28,44821,2477],{"emptyLinePlaceholder":134},[28,44823,44824],{"class":30,"line":1805},[28,44825,34138],{"class":269},[28,44827,44828,44830,44832],{"class":30,"line":1810},[28,44829,31998],{"class":207},[28,44831,34145],{"class":34},[28,44833,34148],{"class":211},[28,44835,44836],{"class":30,"line":1827},[28,44837,34153],{"class":269},[28,44839,44840,44842,44844,44846,44848,44850,44852],{"class":30,"line":1832},[28,44841,31288],{"class":211},[28,44843,257],{"class":207},[28,44845,31295],{"class":64},[28,44847,1782],{"class":207},[28,44849,31300],{"class":211},[28,44851,1779],{"class":207},[28,44853,34170],{"class":64},[28,44855,44856,44858,44860],{"class":30,"line":1837},[28,44857,31340],{"class":211},[28,44859,257],{"class":207},[28,44861,32340],{"class":211},[28,44863,44864],{"class":30,"line":1842},[28,44865,2477],{"emptyLinePlaceholder":134},[28,44867,44868],{"class":30,"line":1856},[28,44869,34187],{"class":269},[28,44871,44872,44874,44876],{"class":30,"line":1861},[28,44873,34192],{"class":211},[28,44875,257],{"class":207},[28,44877,32393],{"class":38},[28,44879,44880,44882,44884],{"class":30,"line":2654},[28,44881,34201],{"class":211},[28,44883,257],{"class":207},[28,44885,3162],{"class":38},[28,44887,44888],{"class":30,"line":2668},[28,44889,2477],{"emptyLinePlaceholder":134},[28,44891,44892],{"class":30,"line":2676},[28,44893,34214],{"class":269},[28,44895,44896],{"class":30,"line":2681},[28,44897,34219],{"class":269},[28,44899,44900],{"class":30,"line":2687},[28,44901,34224],{"class":269},[28,44903,44904,44906],{"class":30,"line":2693},[28,44905,34229],{"class":207},[28,44907,32935],{"class":211},[28,44909,44910],{"class":30,"line":2698},[28,44911,34236],{"class":269},[28,44913,44914,44916,44918,44920],{"class":30,"line":8025},[28,44915,3480],{"class":207},[28,44917,34243],{"class":211},[28,44919,26094],{"class":207},[28,44921,34248],{"class":211},[28,44923,44924,44926,44928],{"class":30,"line":8049},[28,44925,34253],{"class":211},[28,44927,257],{"class":207},[28,44929,34258],{"class":211},[28,44931,44932,44934,44936],{"class":30,"line":8054},[28,44933,34263],{"class":211},[28,44935,257],{"class":207},[28,44937,34268],{"class":211},[28,44939,44940],{"class":30,"line":8060},[28,44941,34273],{"class":269},[28,44943,44944],{"class":30,"line":8087},[28,44945,32926],{"class":211},[28,44947,44948],{"class":30,"line":8092},[28,44949,34282],{"class":269},[28,44951,44952,44954,44956],{"class":30,"line":8098},[28,44953,32711],{"class":211},[28,44955,257],{"class":207},[28,44957,34291],{"class":211},[28,44959,44960],{"class":30,"line":8110},[28,44961,34296],{"class":269},[28,44963,44964,44966,44968,44970,44972,44974,44976],{"class":30,"line":8122},[28,44965,32728],{"class":211},[28,44967,257],{"class":207},[28,44969,32733],{"class":211},[28,44971,32736],{"class":5293},[28,44973,257],{"class":207},[28,44975,427],{"class":38},[28,44977,218],{"class":211},[28,44979,44980],{"class":30,"line":8134},[28,44981,34317],{"class":269},[28,44983,44984],{"class":30,"line":9793},[28,44985,34322],{"class":269},[28,44987,44988],{"class":30,"line":9818},[28,44989,34327],{"class":269},[28,44991,44992,44994,44996,44998,45000],{"class":30,"line":9841},[28,44993,34332],{"class":211},[28,44995,9554],{"class":207},[28,44997,32838],{"class":211},[28,44999,3026],{"class":207},[28,45001,34341],{"class":211},[28,45003,45004],{"class":30,"line":9865},[28,45005,34346],{"class":269},[28,45007,45008,45010,45012,45014,45016],{"class":30,"line":9870},[28,45009,34351],{"class":211},[28,45011,9554],{"class":207},[28,45013,34356],{"class":211},[28,45015,401],{"class":38},[28,45017,218],{"class":211},[28,45019,45020],{"class":30,"line":9875},[28,45021,2477],{"emptyLinePlaceholder":134},[28,45023,45024],{"class":30,"line":9880},[28,45025,34369],{"class":269},[28,45027,45028,45030,45032,45034,45036],{"class":30,"line":9889},[28,45029,34374],{"class":211},[28,45031,257],{"class":207},[28,45033,34379],{"class":211},[28,45035,794],{"class":207},[28,45037,34384],{"class":211},[28,45039,45040],{"class":30,"line":9894},[28,45041,34389],{"class":269},[28,45043,45044,45046,45048,45050],{"class":30,"line":9900},[28,45045,32502],{"class":38},[28,45047,212],{"class":211},[28,45049,34398],{"class":64},[28,45051,34401],{"class":211},[28,45053,45054],{"class":30,"line":9921},[28,45055,2477],{"emptyLinePlaceholder":134},[28,45057,45058],{"class":30,"line":9927},[28,45059,34410],{"class":269},[28,45061,45062,45064,45066,45068,45070],{"class":30,"line":9941},[28,45063,1609],{"class":207},[28,45065,31271],{"class":38},[28,45067,3026],{"class":207},[28,45069,31276],{"class":64},[28,45071,3816],{"class":211},[28,45073,45074],{"class":30,"line":9947},[28,45075,34427],{"class":269},[28,45077,45078,45080,45082],{"class":30,"line":9974},[28,45079,31340],{"class":211},[28,45081,257],{"class":207},[28,45083,44602],{"class":211},[28,45085,45086],{"class":30,"line":9983},[28,45087,34440],{"class":269},[28,45089,45090],{"class":30,"line":9989},[28,45091,34445],{"class":269},[28,45093,45094,45096,45098],{"class":30,"line":9997},[28,45095,34450],{"class":211},[28,45097,34453],{"class":64},[28,45099,30548],{"class":211},[28,45101,45102],{"class":30,"line":10002},[28,45103,34460],{"class":269},[28,45105,45106,45108,45110],{"class":30,"line":16681},[28,45107,34073],{"class":211},[28,45109,257],{"class":207},[28,45111,34469],{"class":211},[28,45113,45114],{"class":30,"line":16687},[28,45115,34474],{"class":269},[28,45117,45118],{"class":30,"line":16710},[28,45119,34479],{"class":211},[28,45121,45122],{"class":30,"line":16716},[28,45123,2477],{"emptyLinePlaceholder":134},[28,45125,45126],{"class":30,"line":16739},[28,45127,34488],{"class":269},[28,45129,45130],{"class":30,"line":16753},[28,45131,34493],{"class":269},[28,45133,45134,45136,45138,45140,45142,45144,45146],{"class":30,"line":16773},[28,45135,31288],{"class":211},[28,45137,257],{"class":207},[28,45139,31295],{"class":64},[28,45141,1782],{"class":207},[28,45143,31300],{"class":211},[28,45145,1779],{"class":207},[28,45147,34170],{"class":64},[28,45149,45150,45152,45154],{"class":30,"line":16779},[28,45151,31340],{"class":211},[28,45153,257],{"class":207},[28,45155,32340],{"class":211},[28,45157,45158],{"class":30,"line":16790},[28,45159,34522],{"class":269},[28,45161,45162],{"class":30,"line":16813},[28,45163,34527],{"class":269},[28,45165,45166,45168,45170,45172,45174,45176,45178,45180,45182,45184,45186,45188,45190,45192,45194,45196,45198,45200,45202,45204,45206,45208,45210],{"class":30,"line":16835},[28,45167,34532],{"class":211},[28,45169,257],{"class":207},[28,45171,1100],{"class":211},[28,45173,34539],{"class":64},[28,45175,588],{"class":211},[28,45177,34544],{"class":64},[28,45179,588],{"class":211},[28,45181,34549],{"class":64},[28,45183,588],{"class":211},[28,45185,34554],{"class":64},[28,45187,588],{"class":211},[28,45189,34559],{"class":64},[28,45191,588],{"class":211},[28,45193,34564],{"class":64},[28,45195,588],{"class":211},[28,45197,34569],{"class":64},[28,45199,588],{"class":211},[28,45201,34574],{"class":64},[28,45203,588],{"class":211},[28,45205,34579],{"class":64},[28,45207,588],{"class":211},[28,45209,34584],{"class":64},[28,45211,33297],{"class":211},[28,45213,45214,45216],{"class":30,"line":16840},[28,45215,34229],{"class":207},[28,45217,32935],{"class":211},[28,45219,45220],{"class":30,"line":16846},[28,45221,34597],{"class":269},[28,45223,45224,45226,45228,45230],{"class":30,"line":16860},[28,45225,3480],{"class":207},[28,45227,34604],{"class":211},[28,45229,26094],{"class":207},[28,45231,34248],{"class":211},[28,45233,45234,45236,45238],{"class":30,"line":16873},[28,45235,32661],{"class":211},[28,45237,257],{"class":207},[28,45239,32666],{"class":211},[28,45241,45242,45244,45246],{"class":30,"line":16878},[28,45243,32676],{"class":211},[28,45245,257],{"class":207},[28,45247,32681],{"class":211},[28,45249,45250],{"class":30,"line":16892},[28,45251,2477],{"emptyLinePlaceholder":134},[28,45253,45254],{"class":30,"line":16897},[28,45255,34633],{"class":269},[28,45257,45258],{"class":30,"line":16903},[28,45259,32926],{"class":211},[28,45261,45262],{"class":30,"line":16908},[28,45263,34642],{"class":269},[28,45265,45266,45268,45270],{"class":30,"line":16922},[28,45267,32711],{"class":211},[28,45269,257],{"class":207},[28,45271,32716],{"class":211},[28,45273,45274],{"class":30,"line":16927},[28,45275,34655],{"class":269},[28,45277,45278,45280,45282,45284,45286,45288,45290],{"class":30,"line":16932},[28,45279,32728],{"class":211},[28,45281,257],{"class":207},[28,45283,32733],{"class":211},[28,45285,32736],{"class":5293},[28,45287,257],{"class":207},[28,45289,427],{"class":38},[28,45291,218],{"class":211},[28,45293,45294],{"class":30,"line":16946},[28,45295,34676],{"class":269},[28,45297,45298,45300,45302],{"class":30,"line":16958},[28,45299,34681],{"class":211},[28,45301,257],{"class":207},[28,45303,34686],{"class":211},[28,45305,45306,45308,45310],{"class":30,"line":16963},[28,45307,34691],{"class":211},[28,45309,257],{"class":207},[28,45311,34696],{"class":211},[28,45313,45314,45316,45318,45320,45322,45324,45326,45328],{"class":30,"line":16976},[28,45315,34701],{"class":38},[28,45317,212],{"class":211},[28,45319,34706],{"class":64},[28,45321,34709],{"class":211},[28,45323,34712],{"class":64},[28,45325,588],{"class":211},[28,45327,34717],{"class":64},[28,45329,34720],{"class":211},[177,45331,45333],{"id":45332},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45335,45336],{},"猫狗分类任务",[14,45338,45339],{},"划分数据集和验证集",[18,45341,45343],{"className":30429,"code":45342,"language":30431,"meta":23,"style":23},"# 创建脚本，用于划分数据集和验证集\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",[25,45344,45345,45350,45357,45362,45373,45380,45384,45394,45408,45417,45421,45426,45436,45456,45460,45465,45475,45486,45499,45503,45508,45517,45527,45538,45542,45547,45557,45561,45566,45571,45576,45581,45586,45590,45600,45627,45640,45652,45679,45684,45689,45703,45708,45720,45735,45750,45758,45762,45767,45773,45785,45798,45803,45808,45813,45863,45869,45873],{"__ignoreMap":23},[28,45346,45347],{"class":30,"line":31},[28,45348,45349],{"class":269},"# 创建脚本，用于划分数据集和验证集\n",[28,45351,45352,45354],{"class":30,"line":42},[28,45353,30443],{"class":207},[28,45355,45356],{"class":211}," os\n",[28,45358,45359],{"class":30,"line":50},[28,45360,45361],{"class":269},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[28,45363,45364,45366,45369,45371],{"class":30,"line":58},[28,45365,30788],{"class":207},[28,45367,45368],{"class":211}," shutil ",[28,45370,30443],{"class":207},[28,45372,31873],{"class":211},[28,45374,45375,45377],{"class":30,"line":70},[28,45376,30443],{"class":207},[28,45378,45379],{"class":211}," random\n",[28,45381,45382],{"class":30,"line":78},[28,45383,2477],{"emptyLinePlaceholder":134},[28,45385,45386,45388,45391],{"class":30,"line":86},[28,45387,31998],{"class":207},[28,45389,45390],{"class":34}," mkfile",[28,45392,45393],{"class":211},"(file):\n",[28,45395,45396,45398,45400,45403,45406],{"class":30,"line":97},[28,45397,3178],{"class":207},[28,45399,38981],{"class":207},[28,45401,45402],{"class":211}," os.path.exists(",[28,45404,45405],{"class":5293},"file",[28,45407,30837],{"class":211},[28,45409,45410,45413,45415],{"class":30,"line":108},[28,45411,45412],{"class":211},"        os.makedirs(",[28,45414,45405],{"class":5293},[28,45416,218],{"class":211},[28,45418,45419],{"class":30,"line":1407},[28,45420,2477],{"emptyLinePlaceholder":134},[28,45422,45423],{"class":30,"line":1690},[28,45424,45425],{"class":269},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[28,45427,45428,45431,45433],{"class":30,"line":1695},[28,45429,45430],{"class":211},"file_path",[28,45432,257],{"class":207},[28,45434,45435],{"class":64},"'data_cat_dog'\n",[28,45437,45438,45441,45443,45446,45448,45451,45453],{"class":30,"line":1701},[28,45439,45440],{"class":211},"flower_class",[28,45442,257],{"class":207},[28,45444,45445],{"class":211},"[cla ",[28,45447,3102],{"class":207},[28,45449,45450],{"class":211}," cla ",[28,45452,26094],{"class":207},[28,45454,45455],{"class":211}," os.listdir(file_path)]\n",[28,45457,45458],{"class":30,"line":1706},[28,45459,2477],{"emptyLinePlaceholder":134},[28,45461,45462],{"class":30,"line":1720},[28,45463,45464],{"class":269},"# 创建训练集train文件夹\n",[28,45466,45467,45470,45473],{"class":30,"line":1725},[28,45468,45469],{"class":211},"mkfile(",[28,45471,45472],{"class":64},"'data\u002Ftrain'",[28,45474,218],{"class":211},[28,45476,45477,45479,45481,45483],{"class":30,"line":1731},[28,45478,3102],{"class":207},[28,45480,45450],{"class":211},[28,45482,26094],{"class":207},[28,45484,45485],{"class":211}," flower_class:\n",[28,45487,45488,45491,45494,45496],{"class":30,"line":1752},[28,45489,45490],{"class":211},"    mkfile(",[28,45492,45493],{"class":64},"'data\u002Ftrain\u002F'",[28,45495,691],{"class":207},[28,45497,45498],{"class":211},"cla)\n",[28,45500,45501],{"class":30,"line":1757},[28,45502,2477],{"emptyLinePlaceholder":134},[28,45504,45505],{"class":30,"line":1771},[28,45506,45507],{"class":269},"# 创建验证集val文件夹\n",[28,45509,45510,45512,45515],{"class":30,"line":1776},[28,45511,45469],{"class":211},[28,45513,45514],{"class":64},"'data\u002Ftest'",[28,45516,218],{"class":211},[28,45518,45519,45521,45523,45525],{"class":30,"line":1805},[28,45520,3102],{"class":207},[28,45522,45450],{"class":211},[28,45524,26094],{"class":207},[28,45526,45485],{"class":211},[28,45528,45529,45531,45534,45536],{"class":30,"line":1810},[28,45530,45490],{"class":211},[28,45532,45533],{"class":64},"'data\u002Ftest\u002F'",[28,45535,691],{"class":207},[28,45537,45498],{"class":211},[28,45539,45540],{"class":30,"line":1827},[28,45541,2477],{"emptyLinePlaceholder":134},[28,45543,45544],{"class":30,"line":1832},[28,45545,45546],{"class":269},"# 划分比例，训练集：测试集=9：1\n",[28,45548,45549,45552,45554],{"class":30,"line":1837},[28,45550,45551],{"class":211},"split_rate",[28,45553,257],{"class":207},[28,45555,45556],{"class":38},"0.1\n",[28,45558,45559],{"class":30,"line":1842},[28,45560,2477],{"emptyLinePlaceholder":134},[28,45562,45563],{"class":30,"line":1856},[28,45564,45565],{"class":269},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[28,45567,45568],{"class":30,"line":1861},[28,45569,45570],{"class":269},"# cla_path：当前类别的原始图片路径\n",[28,45572,45573],{"class":30,"line":2654},[28,45574,45575],{"class":269},"# images：当前类别下所有图片的文件名列表\n",[28,45577,45578],{"class":30,"line":2668},[28,45579,45580],{"class":269},"# num：该类别图片总数\n",[28,45582,45583],{"class":30,"line":2676},[28,45584,45585],{"class":269},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[28,45587,45588],{"class":30,"line":2681},[28,45589,2477],{"emptyLinePlaceholder":134},[28,45591,45592,45594,45596,45598],{"class":30,"line":2687},[28,45593,3102],{"class":207},[28,45595,45450],{"class":211},[28,45597,26094],{"class":207},[28,45599,45485],{"class":211},[28,45601,45602,45605,45607,45610,45612,45615,45618,45620,45622,45624],{"class":30,"line":2693},[28,45603,45604],{"class":211},"    cla_path ",[28,45606,257],{"class":207},[28,45608,45609],{"class":211}," file_path ",[28,45611,691],{"class":207},[28,45613,45614],{"class":64}," '\u002F'",[28,45616,45617],{"class":207}," +",[28,45619,45450],{"class":211},[28,45621,691],{"class":207},[28,45623,45614],{"class":64},[28,45625,45626],{"class":269},"  # 某一类别的子目录\n",[28,45628,45629,45632,45634,45637],{"class":30,"line":2698},[28,45630,45631],{"class":211},"    images ",[28,45633,257],{"class":207},[28,45635,45636],{"class":211}," os.listdir(cla_path)  ",[28,45638,45639],{"class":269},"# iamges 列表存储了该目录下所有图像的名称\n",[28,45641,45642,45645,45647,45649],{"class":30,"line":8025},[28,45643,45644],{"class":211},"    num ",[28,45646,257],{"class":207},[28,45648,7408],{"class":38},[28,45650,45651],{"class":211},"(images)\n",[28,45653,45654,45657,45659,45662,45664,45666,45668,45671,45673,45676],{"class":30,"line":8049},[28,45655,45656],{"class":211},"    eval_index ",[28,45658,257],{"class":207},[28,45660,45661],{"class":211}," random.sample(images, ",[28,45663,703],{"class":5293},[28,45665,257],{"class":207},[28,45667,215],{"class":38},[28,45669,45670],{"class":211},"(num ",[28,45672,665],{"class":207},[28,45674,45675],{"class":211}," split_rate))  ",[28,45677,45678],{"class":269},"# 从images列表中随机抽取 k 个图像名称\n",[28,45680,45681],{"class":30,"line":8054},[28,45682,45683],{"class":269},"    # 遍历该类别下的所有图片\n",[28,45685,45686],{"class":30,"line":8060},[28,45687,45688],{"class":269},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[28,45690,45691,45693,45696,45698,45700],{"class":30,"line":8087},[28,45692,3278],{"class":207},[28,45694,45695],{"class":211}," index, image ",[28,45697,26094],{"class":207},[28,45699,31657],{"class":38},[28,45701,45702],{"class":211},"(images):\n",[28,45704,45705],{"class":30,"line":8092},[28,45706,45707],{"class":269},"        # eval_index 中保存验证集val的图像名称\n",[28,45709,45710,45712,45715,45717],{"class":30,"line":8098},[28,45711,2574],{"class":207},[28,45713,45714],{"class":211}," image ",[28,45716,26094],{"class":207},[28,45718,45719],{"class":211}," eval_index:\n",[28,45721,45722,45725,45727,45730,45732],{"class":30,"line":8110},[28,45723,45724],{"class":211},"            image_path ",[28,45726,257],{"class":207},[28,45728,45729],{"class":211}," cla_path ",[28,45731,691],{"class":207},[28,45733,45734],{"class":211}," image\n",[28,45736,45737,45740,45742,45745,45747],{"class":30,"line":8122},[28,45738,45739],{"class":211},"            new_path ",[28,45741,257],{"class":207},[28,45743,45744],{"class":64}," 'data\u002Ftest\u002F'",[28,45746,45617],{"class":207},[28,45748,45749],{"class":211}," cla\n",[28,45751,45752,45755],{"class":30,"line":8134},[28,45753,45754],{"class":211},"            copy(image_path, new_path)  ",[28,45756,45757],{"class":269},"# 将选中的图像复制到新路径\n",[28,45759,45760],{"class":30,"line":9793},[28,45761,2477],{"emptyLinePlaceholder":134},[28,45763,45764],{"class":30,"line":9818},[28,45765,45766],{"class":269},"        # 其余的图像保存在训练集train中\n",[28,45768,45769,45771],{"class":30,"line":9841},[28,45770,2611],{"class":207},[28,45772,3816],{"class":211},[28,45774,45775,45777,45779,45781,45783],{"class":30,"line":9865},[28,45776,45724],{"class":211},[28,45778,257],{"class":207},[28,45780,45729],{"class":211},[28,45782,691],{"class":207},[28,45784,45734],{"class":211},[28,45786,45787,45789,45791,45794,45796],{"class":30,"line":9870},[28,45788,45739],{"class":211},[28,45790,257],{"class":207},[28,45792,45793],{"class":64}," 'data\u002Ftrain\u002F'",[28,45795,45617],{"class":207},[28,45797,45749],{"class":211},[28,45799,45800],{"class":30,"line":9875},[28,45801,45802],{"class":211},"            copy(image_path, new_path)\n",[28,45804,45805],{"class":30,"line":9880},[28,45806,45807],{"class":269},"            # 打印进度条信息\n",[28,45809,45810],{"class":30,"line":9889},[28,45811,45812],{"class":269},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[28,45814,45815,45817,45819,45821,45824,45826,45828,45831,45833,45835,45837,45840,45843,45845,45847,45850,45853,45855,45857,45860],{"class":30,"line":9894},[28,45816,32502],{"class":38},[28,45818,212],{"class":211},[28,45820,461],{"class":64},[28,45822,45823],{"class":38},"\\r",[28,45825,1100],{"class":64},[28,45827,32510],{"class":38},[28,45829,45830],{"class":64},"] processing [",[28,45832,32510],{"class":38},[28,45834,794],{"class":64},[28,45836,32510],{"class":38},[28,45838,45839],{"class":64},"]\"",[28,45841,45842],{"class":211},".format(cla, index ",[28,45844,691],{"class":207},[28,45846,25189],{"class":38},[28,45848,45849],{"class":211},", num), ",[28,45851,45852],{"class":5293},"end",[28,45854,257],{"class":207},[28,45856,7729],{"class":64},[28,45858,45859],{"class":211},")  ",[28,45861,45862],{"class":269},"# processing bar\n",[28,45864,45865,45867],{"class":30,"line":9900},[28,45866,31350],{"class":38},[28,45868,2053],{"class":211},[28,45870,45871],{"class":30,"line":9921},[28,45872,2477],{"emptyLinePlaceholder":134},[28,45874,45875,45877,45879,45882],{"class":30,"line":9927},[28,45876,30466],{"class":38},[28,45878,212],{"class":211},[28,45880,45881],{"class":64},"\"processing done!\"",[28,45883,218],{"class":211},[14,45885,45886],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22075,45888,45890],{"id":45889},"_242模型代码","2.4.2.模型代码",[14,45892,45893],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[18,45895,45897],{"className":30429,"code":45896,"language":30431,"meta":23,"style":23},"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",[25,45898,45899,45905,45915,45925,45929,45945,45953,45967,45977,45981,46011,46015,46049,46095,46099,46133,46179,46183,46187,46221,46251,46255,46263,46277,46299,46321,46339,46343,46357,46361,46365,46381,46385,46393,46407,46417,46461,46465,46493,46497,46507,46535,46539,46575,46579,46607,46611,46621,46653,46685,46713,46717,46727,46759,46791,46823,46855,46887,46915,46919,46929,46961,46993,47005,47009,47021,47025,47029,47041,47049,47069,47073,47077,47081,47085,47089,47093,47107,47115,47123,47135,47149,47157,47161,47169,47179,47189,47199,47209,47219,47225,47229,47233,47245,47265,47273],{"__ignoreMap":23},[28,45900,45901,45903],{"class":30,"line":31},[28,45902,30443],{"class":207},[28,45904,30446],{"class":211},[28,45906,45907,45909,45911,45913],{"class":30,"line":42},[28,45908,30788],{"class":207},[28,45910,30791],{"class":211},[28,45912,30443],{"class":207},[28,45914,30796],{"class":211},[28,45916,45917,45919,45921,45923],{"class":30,"line":50},[28,45918,30788],{"class":207},[28,45920,30808],{"class":211},[28,45922,30443],{"class":207},[28,45924,30813],{"class":211},[28,45926,45927],{"class":30,"line":58},[28,45928,2477],{"emptyLinePlaceholder":134},[28,45930,45931,45933,45935,45937,45939,45941,45943],{"class":30,"line":70},[28,45932,14771],{"class":207},[28,45934,41544],{"class":34},[28,45936,212],{"class":211},[28,45938,30829],{"class":34},[28,45940,768],{"class":211},[28,45942,30834],{"class":34},[28,45944,30837],{"class":211},[28,45946,45947,45949,45951],{"class":30,"line":78},[28,45948,30852],{"class":207},[28,45950,30855],{"class":38},[28,45952,41563],{"class":211},[28,45954,45955,45957,45959,45961,45963,45965],{"class":30,"line":86},[28,45956,30868],{"class":38},[28,45958,41570],{"class":211},[28,45960,30874],{"class":38},[28,45962,30877],{"class":211},[28,45964,30880],{"class":38},[28,45966,2053],{"class":211},[28,45968,45969,45971,45973,45975],{"class":30,"line":97},[28,45970,30896],{"class":38},[28,45972,34822],{"class":211},[28,45974,257],{"class":207},[28,45976,34827],{"class":211},[28,45978,45979],{"class":30,"line":108},[28,45980,41593],{"class":269},[28,45982,45983,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009],{"class":30,"line":1407},[28,45984,30896],{"class":38},[28,45986,41600],{"class":211},[28,45988,257],{"class":207},[28,45990,30904],{"class":211},[28,45992,30907],{"class":5293},[28,45994,257],{"class":207},[28,45996,41611],{"class":211},[28,45998,30916],{"class":5293},[28,46000,257],{"class":207},[28,46002,41618],{"class":211},[28,46004,30925],{"class":5293},[28,46006,257],{"class":207},[28,46008,427],{"class":38},[28,46010,218],{"class":211},[28,46012,46013],{"class":30,"line":1690},[28,46014,41631],{"class":269},[28,46016,46017,46019,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039,46041,46043,46045,46047],{"class":30,"line":1695},[28,46018,30896],{"class":38},[28,46020,41638],{"class":211},[28,46022,257],{"class":207},[28,46024,30904],{"class":211},[28,46026,30907],{"class":5293},[28,46028,257],{"class":207},[28,46030,41611],{"class":211},[28,46032,30916],{"class":5293},[28,46034,257],{"class":207},[28,46036,41655],{"class":211},[28,46038,401],{"class":38},[28,46040,41660],{"class":211},[28,46042,30925],{"class":5293},[28,46044,257],{"class":207},[28,46046,427],{"class":38},[28,46048,218],{"class":211},[28,46050,46051,46053,46055,46057,46059,46061,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093],{"class":30,"line":1701},[28,46052,30896],{"class":38},[28,46054,41675],{"class":211},[28,46056,257],{"class":207},[28,46058,30904],{"class":211},[28,46060,30907],{"class":5293},[28,46062,257],{"class":207},[28,46064,41655],{"class":211},[28,46066,401],{"class":38},[28,46068,41660],{"class":211},[28,46070,30916],{"class":5293},[28,46072,257],{"class":207},[28,46074,41655],{"class":211},[28,46076,427],{"class":38},[28,46078,41660],{"class":211},[28,46080,30925],{"class":5293},[28,46082,257],{"class":207},[28,46084,282],{"class":38},[28,46086,588],{"class":211},[28,46088,30934],{"class":5293},[28,46090,257],{"class":207},[28,46092,427],{"class":38},[28,46094,218],{"class":211},[28,46096,46097],{"class":30,"line":1706},[28,46098,41720],{"class":269},[28,46100,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131],{"class":30,"line":1720},[28,46102,30896],{"class":38},[28,46104,41727],{"class":211},[28,46106,257],{"class":207},[28,46108,30904],{"class":211},[28,46110,30907],{"class":5293},[28,46112,257],{"class":207},[28,46114,41611],{"class":211},[28,46116,30916],{"class":5293},[28,46118,257],{"class":207},[28,46120,41744],{"class":211},[28,46122,401],{"class":38},[28,46124,41660],{"class":211},[28,46126,30925],{"class":5293},[28,46128,257],{"class":207},[28,46130,427],{"class":38},[28,46132,218],{"class":211},[28,46134,46135,46137,46139,46141,46143,46145,46147,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177],{"class":30,"line":1725},[28,46136,30896],{"class":38},[28,46138,41763],{"class":211},[28,46140,257],{"class":207},[28,46142,30904],{"class":211},[28,46144,30907],{"class":5293},[28,46146,257],{"class":207},[28,46148,41744],{"class":211},[28,46150,401],{"class":38},[28,46152,41660],{"class":211},[28,46154,30916],{"class":5293},[28,46156,257],{"class":207},[28,46158,41744],{"class":211},[28,46160,427],{"class":38},[28,46162,41660],{"class":211},[28,46164,30925],{"class":5293},[28,46166,257],{"class":207},[28,46168,529],{"class":38},[28,46170,588],{"class":211},[28,46172,30934],{"class":5293},[28,46174,257],{"class":207},[28,46176,288],{"class":38},[28,46178,218],{"class":211},[28,46180,46181],{"class":30,"line":1731},[28,46182,41808],{"class":269},[28,46184,46185],{"class":30,"line":1752},[28,46186,41813],{"class":269},[28,46188,46189,46191,46193,46195,46197,46199,46201,46203,46205,46207,46209,46211,46213,46215,46217,46219],{"class":30,"line":1757},[28,46190,30896],{"class":38},[28,46192,41820],{"class":211},[28,46194,257],{"class":207},[28,46196,34880],{"class":211},[28,46198,30925],{"class":5293},[28,46200,257],{"class":207},[28,46202,282],{"class":38},[28,46204,588],{"class":211},[28,46206,30980],{"class":5293},[28,46208,257],{"class":207},[28,46210,427],{"class":38},[28,46212,588],{"class":211},[28,46214,30934],{"class":5293},[28,46216,257],{"class":207},[28,46218,427],{"class":38},[28,46220,218],{"class":211},[28,46222,46223,46225,46227,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247,46249],{"class":30,"line":1771},[28,46224,30896],{"class":38},[28,46226,41855],{"class":211},[28,46228,257],{"class":207},[28,46230,30904],{"class":211},[28,46232,30907],{"class":5293},[28,46234,257],{"class":207},[28,46236,41611],{"class":211},[28,46238,30916],{"class":5293},[28,46240,257],{"class":207},[28,46242,41872],{"class":211},[28,46244,30925],{"class":5293},[28,46246,257],{"class":207},[28,46248,427],{"class":38},[28,46250,218],{"class":211},[28,46252,46253],{"class":30,"line":1776},[28,46254,2477],{"emptyLinePlaceholder":134},[28,46256,46257,46259,46261],{"class":30,"line":1805},[28,46258,30852],{"class":207},[28,46260,31144],{"class":34},[28,46262,31147],{"class":211},[28,46264,46265,46267,46269,46271,46273,46275],{"class":30,"line":1810},[28,46266,41897],{"class":211},[28,46268,257],{"class":207},[28,46270,30874],{"class":38},[28,46272,35235],{"class":211},[28,46274,30874],{"class":38},[28,46276,41908],{"class":211},[28,46278,46279,46281,46283,46285,46287,46289,46291,46293,46295,46297],{"class":30,"line":1827},[28,46280,7162],{"class":211},[28,46282,257],{"class":207},[28,46284,30874],{"class":38},[28,46286,35235],{"class":211},[28,46288,30874],{"class":38},[28,46290,41923],{"class":211},[28,46292,30874],{"class":38},[28,46294,35235],{"class":211},[28,46296,30874],{"class":38},[28,46298,41932],{"class":211},[28,46300,46301,46303,46305,46307,46309,46311,46313,46315,46317,46319],{"class":30,"line":1832},[28,46302,41937],{"class":211},[28,46304,257],{"class":207},[28,46306,30874],{"class":38},[28,46308,35235],{"class":211},[28,46310,30874],{"class":38},[28,46312,41948],{"class":211},[28,46314,30874],{"class":38},[28,46316,35235],{"class":211},[28,46318,30874],{"class":38},[28,46320,41957],{"class":211},[28,46322,46323,46325,46327,46329,46331,46333,46335,46337],{"class":30,"line":1837},[28,46324,41962],{"class":211},[28,46326,257],{"class":207},[28,46328,30874],{"class":38},[28,46330,35235],{"class":211},[28,46332,30874],{"class":38},[28,46334,41973],{"class":211},[28,46336,30874],{"class":38},[28,46338,41978],{"class":211},[28,46340,46341],{"class":30,"line":1842},[28,46342,41983],{"class":269},[28,46344,46345,46347,46349,46351,46353,46355],{"class":30,"line":1856},[28,46346,14829],{"class":207},[28,46348,41990],{"class":211},[28,46350,32736],{"class":5293},[28,46352,257],{"class":207},[28,46354,427],{"class":38},[28,46356,218],{"class":211},[28,46358,46359],{"class":30,"line":1861},[28,46360,2477],{"emptyLinePlaceholder":134},[28,46362,46363],{"class":30,"line":2654},[28,46364,42011],{"class":269},[28,46366,46367,46369,46371,46373,46375,46377,46379],{"class":30,"line":2668},[28,46368,14771],{"class":207},[28,46370,42018],{"class":34},[28,46372,212],{"class":211},[28,46374,30829],{"class":34},[28,46376,768],{"class":211},[28,46378,30834],{"class":34},[28,46380,30837],{"class":211},[28,46382,46383],{"class":30,"line":2676},[28,46384,42033],{"class":269},[28,46386,46387,46389,46391],{"class":30,"line":2681},[28,46388,30852],{"class":207},[28,46390,30855],{"class":38},[28,46392,42042],{"class":211},[28,46394,46395,46397,46399,46401,46403,46405],{"class":30,"line":2687},[28,46396,30868],{"class":38},[28,46398,42049],{"class":211},[28,46400,30874],{"class":38},[28,46402,30877],{"class":211},[28,46404,30880],{"class":38},[28,46406,2053],{"class":211},[28,46408,46409,46411,46413,46415],{"class":30,"line":2693},[28,46410,30896],{"class":38},[28,46412,42064],{"class":211},[28,46414,257],{"class":207},[28,46416,38060],{"class":211},[28,46418,46419,46421,46423,46425,46427,46429,46431,46433,46435,46437,46439,46441,46443,46445,46447,46449,46451,46453,46455,46457,46459],{"class":30,"line":2698},[28,46420,38065],{"class":211},[28,46422,30907],{"class":5293},[28,46424,257],{"class":207},[28,46426,282],{"class":38},[28,46428,588],{"class":211},[28,46430,30916],{"class":5293},[28,46432,257],{"class":207},[28,46434,413],{"class":38},[28,46436,588],{"class":211},[28,46438,30925],{"class":5293},[28,46440,257],{"class":207},[28,46442,579],{"class":38},[28,46444,588],{"class":211},[28,46446,30980],{"class":5293},[28,46448,257],{"class":207},[28,46450,288],{"class":38},[28,46452,588],{"class":211},[28,46454,30934],{"class":5293},[28,46456,257],{"class":207},[28,46458,282],{"class":38},[28,46460,38098],{"class":211},[28,46462,46463],{"class":30,"line":8025},[28,46464,38103],{"class":211},[28,46466,46467,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491],{"class":30,"line":8049},[28,46468,38148],{"class":211},[28,46470,30925],{"class":5293},[28,46472,257],{"class":207},[28,46474,282],{"class":38},[28,46476,588],{"class":211},[28,46478,30980],{"class":5293},[28,46480,257],{"class":207},[28,46482,288],{"class":38},[28,46484,588],{"class":211},[28,46486,30934],{"class":5293},[28,46488,257],{"class":207},[28,46490,427],{"class":38},[28,46492,218],{"class":211},[28,46494,46495],{"class":30,"line":8054},[28,46496,38177],{"class":211},[28,46498,46499,46501,46503,46505],{"class":30,"line":8060},[28,46500,30896],{"class":38},[28,46502,42155],{"class":211},[28,46504,257],{"class":207},[28,46506,38060],{"class":211},[28,46508,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533],{"class":30,"line":8087},[28,46510,38065],{"class":211},[28,46512,30907],{"class":5293},[28,46514,257],{"class":207},[28,46516,413],{"class":38},[28,46518,588],{"class":211},[28,46520,30916],{"class":5293},[28,46522,257],{"class":207},[28,46524,413],{"class":38},[28,46526,588],{"class":211},[28,46528,30925],{"class":5293},[28,46530,257],{"class":207},[28,46532,427],{"class":38},[28,46534,38098],{"class":211},[28,46536,46537],{"class":30,"line":8092},[28,46538,38103],{"class":211},[28,46540,46541,46543,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573],{"class":30,"line":8098},[28,46542,38065],{"class":211},[28,46544,30907],{"class":5293},[28,46546,257],{"class":207},[28,46548,413],{"class":38},[28,46550,588],{"class":211},[28,46552,30916],{"class":5293},[28,46554,257],{"class":207},[28,46556,42210],{"class":38},[28,46558,588],{"class":211},[28,46560,30925],{"class":5293},[28,46562,257],{"class":207},[28,46564,282],{"class":38},[28,46566,588],{"class":211},[28,46568,30934],{"class":5293},[28,46570,257],{"class":207},[28,46572,427],{"class":38},[28,46574,38098],{"class":211},[28,46576,46577],{"class":30,"line":8110},[28,46578,38103],{"class":211},[28,46580,46581,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605],{"class":30,"line":8122},[28,46582,38148],{"class":211},[28,46584,30925],{"class":5293},[28,46586,257],{"class":207},[28,46588,282],{"class":38},[28,46590,588],{"class":211},[28,46592,30980],{"class":5293},[28,46594,257],{"class":207},[28,46596,288],{"class":38},[28,46598,588],{"class":211},[28,46600,30934],{"class":5293},[28,46602,257],{"class":207},[28,46604,427],{"class":38},[28,46606,218],{"class":211},[28,46608,46609],{"class":30,"line":8134},[28,46610,38177],{"class":211},[28,46612,46613,46615,46617,46619],{"class":30,"line":9793},[28,46614,30896],{"class":38},[28,46616,42271],{"class":211},[28,46618,257],{"class":207},[28,46620,38060],{"class":211},[28,46622,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643,46645,46647,46649,46651],{"class":30,"line":9818},[28,46624,42280],{"class":211},[28,46626,42210],{"class":38},[28,46628,588],{"class":211},[28,46630,413],{"class":38},[28,46632,42289],{"class":211},[28,46634,419],{"class":38},[28,46636,588],{"class":211},[28,46638,32121],{"class":38},[28,46640,42298],{"class":211},[28,46642,811],{"class":38},[28,46644,588],{"class":211},[28,46646,407],{"class":38},[28,46648,42307],{"class":211},[28,46650,407],{"class":38},[28,46652,38098],{"class":211},[28,46654,46655,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683],{"class":30,"line":9841},[28,46656,42280],{"class":211},[28,46658,34921],{"class":38},[28,46660,588],{"class":211},[28,46662,32121],{"class":38},[28,46664,42289],{"class":211},[28,46666,32121],{"class":38},[28,46668,588],{"class":211},[28,46670,42210],{"class":38},[28,46672,42298],{"class":211},[28,46674,407],{"class":38},[28,46676,588],{"class":211},[28,46678,419],{"class":38},[28,46680,42307],{"class":211},[28,46682,413],{"class":38},[28,46684,38098],{"class":211},[28,46686,46687,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711],{"class":30,"line":9865},[28,46688,38148],{"class":211},[28,46690,30925],{"class":5293},[28,46692,257],{"class":207},[28,46694,282],{"class":38},[28,46696,588],{"class":211},[28,46698,30980],{"class":5293},[28,46700,257],{"class":207},[28,46702,288],{"class":38},[28,46704,588],{"class":211},[28,46706,30934],{"class":5293},[28,46708,257],{"class":207},[28,46710,427],{"class":38},[28,46712,218],{"class":211},[28,46714,46715],{"class":30,"line":9870},[28,46716,38177],{"class":211},[28,46718,46719,46721,46723,46725],{"class":30,"line":9875},[28,46720,30896],{"class":38},[28,46722,42382],{"class":211},[28,46724,257],{"class":207},[28,46726,38060],{"class":211},[28,46728,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749,46751,46753,46755,46757],{"class":30,"line":9880},[28,46730,42280],{"class":211},[28,46732,42393],{"class":38},[28,46734,588],{"class":211},[28,46736,42210],{"class":38},[28,46738,42289],{"class":211},[28,46740,419],{"class":38},[28,46742,588],{"class":211},[28,46744,42406],{"class":38},[28,46746,42298],{"class":211},[28,46748,811],{"class":38},[28,46750,588],{"class":211},[28,46752,817],{"class":38},[28,46754,42307],{"class":211},[28,46756,413],{"class":38},[28,46758,38098],{"class":211},[28,46760,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781,46783,46785,46787,46789],{"class":30,"line":9889},[28,46762,42280],{"class":211},[28,46764,38508],{"class":38},[28,46766,588],{"class":211},[28,46768,21125],{"class":38},[28,46770,42289],{"class":211},[28,46772,828],{"class":38},[28,46774,588],{"class":211},[28,46776,31552],{"class":38},[28,46778,42298],{"class":211},[28,46780,1010],{"class":38},[28,46782,588],{"class":211},[28,46784,413],{"class":38},[28,46786,42307],{"class":211},[28,46788,413],{"class":38},[28,46790,38098],{"class":211},[28,46792,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813,46815,46817,46819,46821],{"class":30,"line":9894},[28,46794,42280],{"class":211},[28,46796,38508],{"class":38},[28,46798,588],{"class":211},[28,46800,32121],{"class":38},[28,46802,42289],{"class":211},[28,46804,32121],{"class":38},[28,46806,588],{"class":211},[28,46808,34921],{"class":38},[28,46810,42298],{"class":211},[28,46812,1010],{"class":38},[28,46814,588],{"class":211},[28,46816,413],{"class":38},[28,46818,42307],{"class":211},[28,46820,413],{"class":38},[28,46822,38098],{"class":211},[28,46824,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845,46847,46849,46851,46853],{"class":30,"line":9900},[28,46826,42280],{"class":211},[28,46828,38508],{"class":38},[28,46830,588],{"class":211},[28,46832,828],{"class":38},[28,46834,42289],{"class":211},[28,46836,32121],{"class":38},[28,46838,588],{"class":211},[28,46840,42503],{"class":38},[28,46842,42298],{"class":211},[28,46844,407],{"class":38},[28,46846,588],{"class":211},[28,46848,413],{"class":38},[28,46850,42307],{"class":211},[28,46852,413],{"class":38},[28,46854,38098],{"class":211},[28,46856,46857,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885],{"class":30,"line":9921},[28,46858,42280],{"class":211},[28,46860,42524],{"class":38},[28,46862,588],{"class":211},[28,46864,34921],{"class":38},[28,46866,42289],{"class":211},[28,46868,21125],{"class":38},[28,46870,588],{"class":211},[28,46872,42537],{"class":38},[28,46874,42298],{"class":211},[28,46876,407],{"class":38},[28,46878,588],{"class":211},[28,46880,32121],{"class":38},[28,46882,42307],{"class":211},[28,46884,32121],{"class":38},[28,46886,38098],{"class":211},[28,46888,46889,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913],{"class":30,"line":9927},[28,46890,38148],{"class":211},[28,46892,30925],{"class":5293},[28,46894,257],{"class":207},[28,46896,282],{"class":38},[28,46898,588],{"class":211},[28,46900,30980],{"class":5293},[28,46902,257],{"class":207},[28,46904,288],{"class":38},[28,46906,588],{"class":211},[28,46908,30934],{"class":5293},[28,46910,257],{"class":207},[28,46912,427],{"class":38},[28,46914,218],{"class":211},[28,46916,46917],{"class":30,"line":9941},[28,46918,38177],{"class":211},[28,46920,46921,46923,46925,46927],{"class":30,"line":9947},[28,46922,30896],{"class":38},[28,46924,42590],{"class":211},[28,46926,257],{"class":207},[28,46928,38060],{"class":211},[28,46930,46931,46933,46935,46937,46939,46941,46943,46945,46947,46949,46951,46953,46955,46957,46959],{"class":30,"line":9974},[28,46932,42280],{"class":211},[28,46934,42601],{"class":38},[28,46936,588],{"class":211},[28,46938,34921],{"class":38},[28,46940,42289],{"class":211},[28,46942,21125],{"class":38},[28,46944,588],{"class":211},[28,46946,42537],{"class":38},[28,46948,42298],{"class":211},[28,46950,407],{"class":38},[28,46952,588],{"class":211},[28,46954,32121],{"class":38},[28,46956,42307],{"class":211},[28,46958,32121],{"class":38},[28,46960,38098],{"class":211},[28,46962,46963,46965,46967,46969,46971,46973,46975,46977,46979,46981,46983,46985,46987,46989,46991],{"class":30,"line":9983},[28,46964,42280],{"class":211},[28,46966,42601],{"class":38},[28,46968,588],{"class":211},[28,46970,34991],{"class":38},[28,46972,42289],{"class":211},[28,46974,42210],{"class":38},[28,46976,588],{"class":211},[28,46978,34991],{"class":38},[28,46980,42298],{"class":211},[28,46982,817],{"class":38},[28,46984,588],{"class":211},[28,46986,32121],{"class":38},[28,46988,42307],{"class":211},[28,46990,32121],{"class":38},[28,46992,38098],{"class":211},[28,46994,46995,46997,46999,47001,47003],{"class":30,"line":9989},[28,46996,42664],{"class":211},[28,46998,427],{"class":38},[28,47000,588],{"class":211},[28,47002,427],{"class":38},[28,47004,42673],{"class":211},[28,47006,47007],{"class":30,"line":9997},[28,47008,38841],{"class":211},[28,47010,47011,47013,47015,47017,47019],{"class":30,"line":10002},[28,47012,38846],{"class":211},[28,47014,42684],{"class":38},[28,47016,588],{"class":211},[28,47018,288],{"class":38},[28,47020,218],{"class":211},[28,47022,47023],{"class":30,"line":16681},[28,47024,38177],{"class":211},[28,47026,47027],{"class":30,"line":16687},[28,47028,42699],{"class":269},[28,47030,47031,47033,47035,47037,47039],{"class":30,"line":16710},[28,47032,3480],{"class":207},[28,47034,38919],{"class":211},[28,47036,26094],{"class":207},[28,47038,38924],{"class":38},[28,47040,38927],{"class":211},[28,47042,47043,47045,47047],{"class":30,"line":16716},[28,47044,4719],{"class":207},[28,47046,38939],{"class":38},[28,47048,38942],{"class":211},[28,47050,47051,47053,47055,47057,47059,47061,47063,47065,47067],{"class":30,"line":16739},[28,47052,38952],{"class":211},[28,47054,42726],{"class":5293},[28,47056,257],{"class":207},[28,47058,42731],{"class":64},[28,47060,588],{"class":211},[28,47062,38955],{"class":5293},[28,47064,257],{"class":207},[28,47066,38960],{"class":64},[28,47068,218],{"class":211},[28,47070,47071],{"class":30,"line":16753},[28,47072,42746],{"class":269},[28,47074,47075],{"class":30,"line":16773},[28,47076,42751],{"class":269},[28,47078,47079],{"class":30,"line":16779},[28,47080,42756],{"class":269},[28,47082,47083],{"class":30,"line":16790},[28,47084,42761],{"class":269},[28,47086,47087],{"class":30,"line":16813},[28,47088,42766],{"class":269},[28,47090,47091],{"class":30,"line":16835},[28,47092,42771],{"class":269},[28,47094,47095,47097,47099,47101,47103,47105],{"class":30,"line":16840},[28,47096,38972],{"class":207},[28,47098,38975],{"class":211},[28,47100,38978],{"class":207},[28,47102,38981],{"class":207},[28,47104,38984],{"class":38},[28,47106,3816],{"class":211},[28,47108,47109,47111,47113],{"class":30,"line":16846},[28,47110,38996],{"class":211},[28,47112,401],{"class":38},[28,47114,218],{"class":211},[28,47116,47117,47119,47121],{"class":30,"line":16860},[28,47118,42798],{"class":207},[28,47120,38939],{"class":38},[28,47122,39015],{"class":211},[28,47124,47125,47127,47129,47131,47133],{"class":30,"line":16873},[28,47126,42807],{"class":211},[28,47128,401],{"class":38},[28,47130,588],{"class":211},[28,47132,39037],{"class":38},[28,47134,218],{"class":211},[28,47136,47137,47139,47141,47143,47145,47147],{"class":30,"line":16878},[28,47138,42820],{"class":207},[28,47140,38975],{"class":211},[28,47142,38978],{"class":207},[28,47144,38981],{"class":207},[28,47146,38984],{"class":38},[28,47148,3816],{"class":211},[28,47150,47151,47153,47155],{"class":30,"line":16892},[28,47152,42835],{"class":211},[28,47154,401],{"class":38},[28,47156,218],{"class":211},[28,47158,47159],{"class":30,"line":16897},[28,47160,35216],{"class":269},[28,47162,47163,47165,47167],{"class":30,"line":16903},[28,47164,30852],{"class":207},[28,47166,31144],{"class":34},[28,47168,31147],{"class":211},[28,47170,47171,47173,47175,47177],{"class":30,"line":16908},[28,47172,31152],{"class":211},[28,47174,257],{"class":207},[28,47176,30874],{"class":38},[28,47178,42862],{"class":211},[28,47180,47181,47183,47185,47187],{"class":30,"line":16922},[28,47182,31152],{"class":211},[28,47184,257],{"class":207},[28,47186,30874],{"class":38},[28,47188,42873],{"class":211},[28,47190,47191,47193,47195,47197],{"class":30,"line":16927},[28,47192,31152],{"class":211},[28,47194,257],{"class":207},[28,47196,30874],{"class":38},[28,47198,42884],{"class":211},[28,47200,47201,47203,47205,47207],{"class":30,"line":16932},[28,47202,31152],{"class":211},[28,47204,257],{"class":207},[28,47206,30874],{"class":38},[28,47208,42895],{"class":211},[28,47210,47211,47213,47215,47217],{"class":30,"line":16946},[28,47212,31152],{"class":211},[28,47214,257],{"class":207},[28,47216,30874],{"class":38},[28,47218,42906],{"class":211},[28,47220,47221,47223],{"class":30,"line":16958},[28,47222,14829],{"class":207},[28,47224,31260],{"class":211},[28,47226,47227],{"class":30,"line":16963},[28,47228,2477],{"emptyLinePlaceholder":134},[28,47230,47231],{"class":30,"line":16976},[28,47232,42921],{"class":269},[28,47234,47235,47237,47239,47241,47243],{"class":30,"line":16981},[28,47236,1609],{"class":207},[28,47238,31271],{"class":38},[28,47240,3026],{"class":207},[28,47242,31276],{"class":64},[28,47244,3816],{"class":211},[28,47246,47247,47249,47251,47253,47255,47257,47259,47261,47263],{"class":30,"line":16986},[28,47248,31288],{"class":211},[28,47250,257],{"class":207},[28,47252,30502],{"class":211},[28,47254,31295],{"class":64},[28,47256,1782],{"class":207},[28,47258,31300],{"class":211},[28,47260,1779],{"class":207},[28,47262,30527],{"class":64},[28,47264,218],{"class":211},[28,47266,47267,47269,47271],{"class":30,"line":16991},[28,47268,31340],{"class":211},[28,47270,257],{"class":207},[28,47272,42962],{"class":211},[28,47274,47275,47277,47279,47281,47283,47285,47287,47289],{"class":30,"line":17004},[28,47276,31350],{"class":38},[28,47278,31353],{"class":211},[28,47280,427],{"class":38},[28,47282,588],{"class":211},[28,47284,31552],{"class":38},[28,47286,588],{"class":211},[28,47288,31552],{"class":38},[28,47290,31366],{"class":211},[22075,47292,47294],{"id":47293},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47296,47297],{},"计算图片的均值与方差，用于训练中归一化处理操作",[18,47299,47301],{"className":30429,"code":47300,"language":30431,"meta":23,"style":23},"# 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",[25,47302,47303,47308,47321,47326,47332,47337,47347,47351,47356,47366,47370,47375,47385,47402,47406,47411,47423,47435,47466,47475,47485,47495,47499,47504,47519,47523,47528,47533,47538,47548,47553,47578,47582,47587,47602,47606,47619,47623,47628,47633,47638,47643,47648,47658,47668,47691,47699,47707,47715,47719,47731,47735,47740,47744,47748,47755,47775,47799,47806,47820,47825,47830,47834,47848,47852,47864],{"__ignoreMap":23},[28,47304,47305],{"class":30,"line":31},[28,47306,47307],{"class":269},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[28,47309,47310,47312,47315,47318],{"class":30,"line":42},[28,47311,30788],{"class":207},[28,47313,47314],{"class":38}," PIL",[28,47316,47317],{"class":207}," import",[28,47319,47320],{"class":211}," Image\n",[28,47322,47323],{"class":30,"line":50},[28,47324,47325],{"class":269},"# os 用来处理文件夹和文件路径\n",[28,47327,47328,47330],{"class":30,"line":58},[28,47329,30443],{"class":207},[28,47331,45356],{"class":211},[28,47333,47334],{"class":30,"line":70},[28,47335,47336],{"class":269},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[28,47338,47339,47341,47343,47345],{"class":30,"line":78},[28,47340,30443],{"class":207},[28,47342,31431],{"class":211},[28,47344,31434],{"class":207},[28,47346,31437],{"class":211},[28,47348,47349],{"class":30,"line":86},[28,47350,2477],{"emptyLinePlaceholder":134},[28,47352,47353],{"class":30,"line":97},[28,47354,47355],{"class":269},"# 文件夹路径，包含所有图片文件\n",[28,47357,47358,47361,47363],{"class":30,"line":108},[28,47359,47360],{"class":211},"folder_path ",[28,47362,257],{"class":207},[28,47364,47365],{"class":64}," 'data_cat_dog'\n",[28,47367,47368],{"class":30,"line":1407},[28,47369,2477],{"emptyLinePlaceholder":134},[28,47371,47372],{"class":30,"line":1690},[28,47373,47374],{"class":269},"# 初始化累积变量\n",[28,47376,47377,47380,47382],{"class":30,"line":1695},[28,47378,47379],{"class":211},"total_pixels ",[28,47381,257],{"class":207},[28,47383,47384],{"class":38}," 0\n",[28,47386,47387,47390,47392,47395,47397,47399],{"class":30,"line":1701},[28,47388,47389],{"class":211},"sum_normalized_pixel_values ",[28,47391,257],{"class":207},[28,47393,47394],{"class":211}," np.zeros(",[28,47396,282],{"class":38},[28,47398,45859],{"class":211},[28,47400,47401],{"class":269},"# 如果是RGB图像，需要三个通道的均值和方差\n",[28,47403,47404],{"class":30,"line":1706},[28,47405,2477],{"emptyLinePlaceholder":134},[28,47407,47408],{"class":30,"line":1720},[28,47409,47410],{"class":269},"# 遍历文件夹中的图片文件\n",[28,47412,47413,47415,47418,47420],{"class":30,"line":1725},[28,47414,3102],{"class":207},[28,47416,47417],{"class":211}," root, dirs, files ",[28,47419,26094],{"class":207},[28,47421,47422],{"class":211}," os.walk(folder_path):\n",[28,47424,47425,47427,47430,47432],{"class":30,"line":1731},[28,47426,3278],{"class":207},[28,47428,47429],{"class":211}," filename ",[28,47431,26094],{"class":207},[28,47433,47434],{"class":211}," files:\n",[28,47436,47437,47439,47442,47445,47447,47450,47452,47455,47457,47460,47463],{"class":30,"line":1752},[28,47438,2574],{"class":207},[28,47440,47441],{"class":211}," filename.endswith((",[28,47443,47444],{"class":64},"'.jpg'",[28,47446,12512],{"class":211},[28,47448,47449],{"class":64},"'.jpeg'",[28,47451,12512],{"class":211},[28,47453,47454],{"class":64},"'.png'",[28,47456,12512],{"class":211},[28,47458,47459],{"class":64},"'.bmp'",[28,47461,47462],{"class":211},")):  ",[28,47464,47465],{"class":269},"# 可根据实际情况添加其他格式\n",[28,47467,47468,47470,47472],{"class":30,"line":1757},[28,47469,45724],{"class":211},[28,47471,257],{"class":207},[28,47473,47474],{"class":211}," os.path.join(root, filename)\n",[28,47476,47477,47480,47482],{"class":30,"line":1771},[28,47478,47479],{"class":211},"            image ",[28,47481,257],{"class":207},[28,47483,47484],{"class":211}," Image.open(image_path)\n",[28,47486,47487,47490,47492],{"class":30,"line":1776},[28,47488,47489],{"class":211},"            image_array ",[28,47491,257],{"class":207},[28,47493,47494],{"class":211}," np.array(image)\n",[28,47496,47497],{"class":30,"line":1805},[28,47498,2477],{"emptyLinePlaceholder":134},[28,47500,47501],{"class":30,"line":1810},[28,47502,47503],{"class":269},"            # 归一化像素值到0-1之间\n",[28,47505,47506,47509,47511,47514,47516],{"class":30,"line":1827},[28,47507,47508],{"class":211},"            normalized_image_array ",[28,47510,257],{"class":207},[28,47512,47513],{"class":211}," image_array ",[28,47515,794],{"class":207},[28,47517,47518],{"class":38}," 255.0\n",[28,47520,47521],{"class":30,"line":1832},[28,47522,2477],{"emptyLinePlaceholder":134},[28,47524,47525],{"class":30,"line":1837},[28,47526,47527],{"class":269},"            # print(image_path)\n",[28,47529,47530],{"class":30,"line":1842},[28,47531,47532],{"class":269},"            # print(normalized_image_array.shape)\n",[28,47534,47535],{"class":30,"line":1856},[28,47536,47537],{"class":269},"            # 累积归一化后的像素值和像素数量\n",[28,47539,47540,47543,47545],{"class":30,"line":1861},[28,47541,47542],{"class":211},"            total_pixels ",[28,47544,9554],{"class":207},[28,47546,47547],{"class":211}," normalized_image_array.size\n",[28,47549,47550],{"class":30,"line":2654},[28,47551,47552],{"class":269},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[28,47554,47555,47558,47560,47563,47566,47568,47570,47572,47574,47576],{"class":30,"line":2668},[28,47556,47557],{"class":211},"            sum_normalized_pixel_values ",[28,47559,9554],{"class":207},[28,47561,47562],{"class":211}," np.sum(normalized_image_array, ",[28,47564,47565],{"class":5293},"axis",[28,47567,257],{"class":207},[28,47569,212],{"class":211},[28,47571,401],{"class":38},[28,47573,12512],{"class":211},[28,47575,427],{"class":38},[28,47577,30548],{"class":211},[28,47579,47580],{"class":30,"line":2676},[28,47581,2477],{"emptyLinePlaceholder":134},[28,47583,47584],{"class":30,"line":2681},[28,47585,47586],{"class":269},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[28,47588,47589,47592,47594,47597,47599],{"class":30,"line":2687},[28,47590,47591],{"class":211},"mean ",[28,47593,257],{"class":207},[28,47595,47596],{"class":211}," sum_normalized_pixel_values ",[28,47598,794],{"class":207},[28,47600,47601],{"class":211}," total_pixels\n",[28,47603,47604],{"class":30,"line":2693},[28,47605,2477],{"emptyLinePlaceholder":134},[28,47607,47608,47611,47613,47615,47617],{"class":30,"line":2698},[28,47609,47610],{"class":211},"sum_squared_diff ",[28,47612,257],{"class":207},[28,47614,47394],{"class":211},[28,47616,282],{"class":38},[28,47618,218],{"class":211},[28,47620,47621],{"class":30,"line":8025},[28,47622,2477],{"emptyLinePlaceholder":134},[28,47624,47625],{"class":30,"line":8049},[28,47626,47627],{"class":269},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[28,47629,47630],{"class":30,"line":8054},[28,47631,47632],{"class":269},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[28,47634,47635],{"class":30,"line":8060},[28,47636,47637],{"class":269},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[28,47639,47640],{"class":30,"line":8087},[28,47641,47642],{"class":269},"# Image.open(image_path)：打开图片\n",[28,47644,47645],{"class":30,"line":8092},[28,47646,47647],{"class":269},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[28,47649,47650,47652,47654,47656],{"class":30,"line":8098},[28,47651,3102],{"class":207},[28,47653,47417],{"class":211},[28,47655,26094],{"class":207},[28,47657,47422],{"class":211},[28,47659,47660,47662,47664,47666],{"class":30,"line":8110},[28,47661,3278],{"class":207},[28,47663,47429],{"class":211},[28,47665,26094],{"class":207},[28,47667,47434],{"class":211},[28,47669,47670,47672,47674,47676,47678,47680,47682,47684,47686,47688],{"class":30,"line":8122},[28,47671,2574],{"class":207},[28,47673,47441],{"class":211},[28,47675,47444],{"class":64},[28,47677,12512],{"class":211},[28,47679,47449],{"class":64},[28,47681,12512],{"class":211},[28,47683,47454],{"class":64},[28,47685,12512],{"class":211},[28,47687,47459],{"class":64},[28,47689,47690],{"class":211},")):\n",[28,47692,47693,47695,47697],{"class":30,"line":8134},[28,47694,45724],{"class":211},[28,47696,257],{"class":207},[28,47698,47474],{"class":211},[28,47700,47701,47703,47705],{"class":30,"line":9793},[28,47702,47479],{"class":211},[28,47704,257],{"class":207},[28,47706,47484],{"class":211},[28,47708,47709,47711,47713],{"class":30,"line":9818},[28,47710,47489],{"class":211},[28,47712,257],{"class":207},[28,47714,47494],{"class":211},[28,47716,47717],{"class":30,"line":9841},[28,47718,47503],{"class":269},[28,47720,47721,47723,47725,47727,47729],{"class":30,"line":9865},[28,47722,47508],{"class":211},[28,47724,257],{"class":207},[28,47726,47513],{"class":211},[28,47728,794],{"class":207},[28,47730,47518],{"class":38},[28,47732,47733],{"class":30,"line":9870},[28,47734,47532],{"class":269},[28,47736,47737],{"class":30,"line":9875},[28,47738,47739],{"class":269},"            # print(mean.shape)\n",[28,47741,47742],{"class":30,"line":9880},[28,47743,47527],{"class":269},[28,47745,47746],{"class":30,"line":9889},[28,47747,2477],{"emptyLinePlaceholder":134},[28,47749,47750,47753],{"class":30,"line":9894},[28,47751,47752],{"class":207},"            try",[28,47754,3816],{"class":211},[28,47756,47757,47760,47762,47765,47767,47770,47772],{"class":30,"line":9900},[28,47758,47759],{"class":211},"                diff ",[28,47761,257],{"class":207},[28,47763,47764],{"class":211}," (normalized_image_array ",[28,47766,742],{"class":207},[28,47768,47769],{"class":211}," mean) ",[28,47771,10738],{"class":207},[28,47773,47774],{"class":38}," 2\n",[28,47776,47777,47780,47782,47785,47787,47789,47791,47793,47795,47797],{"class":30,"line":9921},[28,47778,47779],{"class":211},"                sum_squared_diff ",[28,47781,9554],{"class":207},[28,47783,47784],{"class":211}," np.sum(diff, ",[28,47786,47565],{"class":5293},[28,47788,257],{"class":207},[28,47790,212],{"class":211},[28,47792,401],{"class":38},[28,47794,12512],{"class":211},[28,47796,427],{"class":38},[28,47798,30548],{"class":211},[28,47800,47801,47804],{"class":30,"line":9927},[28,47802,47803],{"class":207},"            except",[28,47805,3816],{"class":211},[28,47807,47808,47811,47813,47815,47818],{"class":30,"line":9941},[28,47809,47810],{"class":38},"                print",[28,47812,212],{"class":211},[28,47814,263],{"class":207},[28,47816,47817],{"class":64},"\"捕获到自定义异常\"",[28,47819,218],{"class":211},[28,47821,47822],{"class":30,"line":9947},[28,47823,47824],{"class":269},"            # diff = (normalized_image_array - mean) ** 2\n",[28,47826,47827],{"class":30,"line":9974},[28,47828,47829],{"class":269},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[28,47831,47832],{"class":30,"line":9983},[28,47833,2477],{"emptyLinePlaceholder":134},[28,47835,47836,47839,47841,47844,47846],{"class":30,"line":9989},[28,47837,47838],{"class":211},"variance ",[28,47840,257],{"class":207},[28,47842,47843],{"class":211}," sum_squared_diff ",[28,47845,794],{"class":207},[28,47847,47601],{"class":211},[28,47849,47850],{"class":30,"line":9997},[28,47851,2477],{"emptyLinePlaceholder":134},[28,47853,47854,47856,47858,47861],{"class":30,"line":10002},[28,47855,30466],{"class":38},[28,47857,212],{"class":211},[28,47859,47860],{"class":64},"\"Mean:\"",[28,47862,47863],{"class":211},", mean)\n",[28,47865,47866,47868,47870,47873],{"class":30,"line":16681},[28,47867,30466],{"class":38},[28,47869,212],{"class":211},[28,47871,47872],{"class":64},"\"Variance:\"",[28,47874,47875],{"class":211},", variance)\n",[18,47877,47879],{"className":30429,"code":47878,"language":30431,"meta":23,"style":23},"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",[25,47880,47881,47887,47893,47903,47909,47919,47933,47943,47953,47963,47967,47977,47987,47991,47995,48003,48008,48013,48032,48036,48041,48046,48051,48056,48097,48102,48112,48117,48130,48135,48140,48145,48150,48155,48159,48164,48169,48191,48195,48227,48241,48251,48261,48265,48275,48289,48299,48309,48319,48325,48329,48333,48337,48341,48345,48353,48373,48377,48381,48385,48389,48405,48409,48413,48421,48425,48429,48437,48441,48445,48449,48457,48461,48465,48469,48477,48481,48489,48493,48501,48505,48513,48517,48525,48529,48533,48541,48545,48549,48561,48585,48599,48603,48607,48611,48619,48623,48631,48635,48643,48647,48655,48659,48667,48671,48679,48683,48695,48699,48707,48711,48719,48723,48727,48731,48735,48743,48747,48763,48767,48775,48779,48783,48787,48791,48795,48799,48803,48819,48823,48835,48839,48851,48855,48867,48871,48879,48883,48891,48895,48899,48903,48909,48913,48921,48925,48941,48945,48953,48957,48973,48985,48989,49001,49005,49009,49017,49021,49025,49033,49037,49045,49049,49057,49061,49065,49107,49149,49153,49157,49173,49177,49193,49197,49201,49209,49213,49217,49229,49267,49271,49275,49283,49287,49301,49311,49317,49323,49329,49335,49339,49343,49349,49353,49357,49365,49369,49387,49391,49395,49399,49415,49419,49423,49427,49431,49435,49455,49475,49479,49483,49487,49495,49503,49507,49523,49543,49563,49567,49572,49581,49590,49595,49600,49605,49618,49623,49632,49641,49658],{"__ignoreMap":23},[28,47882,47883,47885],{"class":30,"line":31},[28,47884,30443],{"class":207},[28,47886,31873],{"class":211},[28,47888,47889,47891],{"class":30,"line":42},[28,47890,30443],{"class":207},[28,47892,31880],{"class":211},[28,47894,47895,47897,47899,47901],{"class":30,"line":50},[28,47896,30443],{"class":207},[28,47898,31891],{"class":211},[28,47900,31434],{"class":207},[28,47902,31896],{"class":211},[28,47904,47905,47907],{"class":30,"line":58},[28,47906,30443],{"class":207},[28,47908,30446],{"class":211},[28,47910,47911,47913,47915,47917],{"class":30,"line":70},[28,47912,30788],{"class":207},[28,47914,31466],{"class":211},[28,47916,30443],{"class":207},[28,47918,31913],{"class":211},[28,47920,47921,47923,47925,47927,47930],{"class":30,"line":78},[28,47922,30788],{"class":207},[28,47924,31419],{"class":211},[28,47926,30443],{"class":207},[28,47928,47929],{"class":211}," ImageFolder ",[28,47931,47932],{"class":269},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[28,47934,47935,47937,47939,47941],{"class":30,"line":86},[28,47936,30788],{"class":207},[28,47938,31449],{"class":211},[28,47940,30443],{"class":207},[28,47942,31454],{"class":211},[28,47944,47945,47947,47949,47951],{"class":30,"line":97},[28,47946,30443],{"class":207},[28,47948,31466],{"class":211},[28,47950,31434],{"class":207},[28,47952,31471],{"class":211},[28,47954,47955,47957,47959,47961],{"class":30,"line":108},[28,47956,30443],{"class":207},[28,47958,31483],{"class":211},[28,47960,31434],{"class":207},[28,47962,31488],{"class":211},[28,47964,47965],{"class":30,"line":1407},[28,47966,31958],{"class":269},[28,47968,47969,47971,47973,47975],{"class":30,"line":1690},[28,47970,30788],{"class":207},[28,47972,31965],{"class":211},[28,47974,30443],{"class":207},[28,47976,43082],{"class":211},[28,47978,47979,47981,47983,47985],{"class":30,"line":1695},[28,47980,30788],{"class":207},[28,47982,30791],{"class":211},[28,47984,30443],{"class":207},[28,47986,30796],{"class":211},[28,47988,47989],{"class":30,"line":1701},[28,47990,2477],{"emptyLinePlaceholder":134},[28,47992,47993],{"class":30,"line":1706},[28,47994,31993],{"class":269},[28,47996,47997,47999,48001],{"class":30,"line":1720},[28,47998,31998],{"class":207},[28,48000,32001],{"class":34},[28,48002,32004],{"class":211},[28,48004,48005],{"class":30,"line":1725},[28,48006,48007],{"class":269},"    # 导入自己的数据集，并进行数据处理\n",[28,48009,48010],{"class":30,"line":1731},[28,48011,48012],{"class":269},"    # 定义数据集的路径\n",[28,48014,48015,48018,48020,48022,48024,48026,48030],{"class":30,"line":1752},[28,48016,48017],{"class":38},"    ROOT_PATH",[28,48019,257],{"class":207},[28,48021,880],{"class":207},[28,48023,461],{"class":64},[28,48025,768],{"class":38},[28,48027,48029],{"class":48028},"sA_wV","\u002Fdata\u002Ftrain",[28,48031,25204],{"class":64},[28,48033,48034],{"class":30,"line":1757},[28,48035,2477],{"emptyLinePlaceholder":134},[28,48037,48038],{"class":30,"line":1771},[28,48039,48040],{"class":269},"    # 定义归一化方法\n",[28,48042,48043],{"class":30,"line":1776},[28,48044,48045],{"class":269},"    # 这里需要先计算一下数据集的均值和方差\n",[28,48047,48048],{"class":30,"line":1805},[28,48049,48050],{"class":269},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[28,48052,48053],{"class":30,"line":1810},[28,48054,48055],{"class":269},"    # 第一个参数是均值，第二个参数是方差\n",[28,48057,48058,48061,48063,48066,48069,48071,48074,48076,48079,48082,48085,48087,48090,48092,48095],{"class":30,"line":1827},[28,48059,48060],{"class":211},"    normalize",[28,48062,257],{"class":207},[28,48064,48065],{"class":211},"transforms.Normalize([",[28,48067,48068],{"class":38},"0.162",[28,48070,588],{"class":211},[28,48072,48073],{"class":38},"0.151",[28,48075,588],{"class":211},[28,48077,48078],{"class":38},"0.138",[28,48080,48081],{"class":211},"],[",[28,48083,48084],{"class":38},"0.058",[28,48086,588],{"class":211},[28,48088,48089],{"class":38},"0.052",[28,48091,588],{"class":211},[28,48093,48094],{"class":38},"0.048",[28,48096,4734],{"class":211},[28,48098,48099],{"class":30,"line":1832},[28,48100,48101],{"class":269},"    # 定义数据集处理方法变量\n",[28,48103,48104,48107,48109],{"class":30,"line":1837},[28,48105,48106],{"class":211},"    train_transform",[28,48108,257],{"class":207},[28,48110,48111],{"class":211},"transforms.Compose([\n",[28,48113,48114],{"class":30,"line":1842},[28,48115,48116],{"class":269},"        # 调整图像大小为224*224\n",[28,48118,48119,48122,48124,48126,48128],{"class":30,"line":1856},[28,48120,48121],{"class":211},"        transforms.Resize((",[28,48123,31552],{"class":38},[28,48125,588],{"class":211},[28,48127,31552],{"class":38},[28,48129,42673],{"class":211},[28,48131,48132],{"class":30,"line":1861},[28,48133,48134],{"class":269},"        # 将图像转换为张量\n",[28,48136,48137],{"class":30,"line":2654},[28,48138,48139],{"class":211},"        transforms.ToTensor(),\n",[28,48141,48142],{"class":30,"line":2668},[28,48143,48144],{"class":211},"        normalize])\n",[28,48146,48147],{"class":30,"line":2676},[28,48148,48149],{"class":269},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[28,48151,48152],{"class":30,"line":2681},[28,48153,48154],{"class":269},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[28,48156,48157],{"class":30,"line":2687},[28,48158,2477],{"emptyLinePlaceholder":134},[28,48160,48161],{"class":30,"line":2693},[28,48162,48163],{"class":269},"    # 加载数据集\n",[28,48165,48166],{"class":30,"line":2698},[28,48167,48168],{"class":269},"    # 传入数据集路径与处理方法\n",[28,48170,48171,48173,48175,48178,48181,48183,48186,48188],{"class":30,"line":8025},[28,48172,32009],{"class":211},[28,48174,257],{"class":207},[28,48176,48177],{"class":211},"ImageFolder(",[28,48179,48180],{"class":38},"ROOT_PATH",[28,48182,588],{"class":211},[28,48184,48185],{"class":5293},"transform",[28,48187,257],{"class":207},[28,48189,48190],{"class":211},"train_transform)\n",[28,48192,48193],{"class":30,"line":8049},[28,48194,2477],{"emptyLinePlaceholder":134},[28,48196,48197,48199,48201,48203,48205,48207,48209,48211,48213,48215,48217,48219,48221,48223,48225],{"class":30,"line":8054},[28,48198,32061],{"class":211},[28,48200,257],{"class":207},[28,48202,32066],{"class":211},[28,48204,32069],{"class":38},[28,48206,212],{"class":211},[28,48208,32074],{"class":38},[28,48210,665],{"class":207},[28,48212,7435],{"class":38},[28,48214,32081],{"class":211},[28,48216,32069],{"class":38},[28,48218,212],{"class":211},[28,48220,32088],{"class":38},[28,48222,665],{"class":207},[28,48224,7435],{"class":38},[28,48226,32095],{"class":211},[28,48228,48229,48231,48233,48235,48237,48239],{"class":30,"line":8060},[28,48230,32100],{"class":211},[28,48232,257],{"class":207},[28,48234,32105],{"class":211},[28,48236,31588],{"class":5293},[28,48238,257],{"class":207},[28,48240,31593],{"class":211},[28,48242,48243,48245,48247,48249],{"class":30,"line":8087},[28,48244,32116],{"class":5293},[28,48246,257],{"class":207},[28,48248,407],{"class":38},[28,48250,31517],{"class":211},[28,48252,48253,48255,48257,48259],{"class":30,"line":8092},[28,48254,32128],{"class":5293},[28,48256,257],{"class":207},[28,48258,31527],{"class":38},[28,48260,31517],{"class":211},[28,48262,48263],{"class":30,"line":8098},[28,48264,32139],{"class":269},[28,48266,48267,48269,48271,48273],{"class":30,"line":8110},[28,48268,32144],{"class":5293},[28,48270,257],{"class":207},[28,48272,605],{"class":38},[28,48274,218],{"class":211},[28,48276,48277,48279,48281,48283,48285,48287],{"class":30,"line":8122},[28,48278,32155],{"class":211},[28,48280,257],{"class":207},[28,48282,31585],{"class":211},[28,48284,31588],{"class":5293},[28,48286,257],{"class":207},[28,48288,32166],{"class":211},[28,48290,48291,48293,48295,48297],{"class":30,"line":8134},[28,48292,32171],{"class":5293},[28,48294,257],{"class":207},[28,48296,407],{"class":38},[28,48298,31517],{"class":211},[28,48300,48301,48303,48305,48307],{"class":30,"line":9793},[28,48302,32182],{"class":5293},[28,48304,257],{"class":207},[28,48306,31527],{"class":38},[28,48308,31517],{"class":211},[28,48310,48311,48313,48315,48317],{"class":30,"line":9818},[28,48312,32193],{"class":5293},[28,48314,257],{"class":207},[28,48316,605],{"class":38},[28,48318,218],{"class":211},[28,48320,48321,48323],{"class":30,"line":9841},[28,48322,4167],{"class":207},[28,48324,32206],{"class":211},[28,48326,48327],{"class":30,"line":9865},[28,48328,2477],{"emptyLinePlaceholder":134},[28,48330,48331],{"class":30,"line":9870},[28,48332,32215],{"class":269},[28,48334,48335],{"class":30,"line":9875},[28,48336,32220],{"class":269},[28,48338,48339],{"class":30,"line":9880},[28,48340,2477],{"emptyLinePlaceholder":134},[28,48342,48343],{"class":30,"line":9889},[28,48344,32229],{"class":269},[28,48346,48347,48349,48351],{"class":30,"line":9894},[28,48348,31998],{"class":207},[28,48350,32236],{"class":34},[28,48352,32239],{"class":211},[28,48354,48355,48357,48359,48361,48363,48365,48367,48369,48371],{"class":30,"line":9900},[28,48356,31288],{"class":211},[28,48358,257],{"class":207},[28,48360,30502],{"class":211},[28,48362,31295],{"class":64},[28,48364,1782],{"class":207},[28,48366,31300],{"class":211},[28,48368,1779],{"class":207},[28,48370,32258],{"class":64},[28,48372,218],{"class":211},[28,48374,48375],{"class":30,"line":9921},[28,48376,2477],{"emptyLinePlaceholder":134},[28,48378,48379],{"class":30,"line":9927},[28,48380,32273],{"class":269},[28,48382,48383],{"class":30,"line":9941},[28,48384,32278],{"class":269},[28,48386,48387],{"class":30,"line":9947},[28,48388,32283],{"class":269},[28,48390,48391,48393,48395,48397,48399,48401,48403],{"class":30,"line":9974},[28,48392,32288],{"class":211},[28,48394,257],{"class":207},[28,48396,32293],{"class":211},[28,48398,32296],{"class":5293},[28,48400,257],{"class":207},[28,48402,32301],{"class":38},[28,48404,218],{"class":211},[28,48406,48407],{"class":30,"line":9983},[28,48408,2477],{"emptyLinePlaceholder":134},[28,48410,48411],{"class":30,"line":9989},[28,48412,32312],{"class":269},[28,48414,48415,48417,48419],{"class":30,"line":9997},[28,48416,32317],{"class":211},[28,48418,257],{"class":207},[28,48420,32322],{"class":211},[28,48422,48423],{"class":30,"line":10002},[28,48424,2477],{"emptyLinePlaceholder":134},[28,48426,48427],{"class":30,"line":16681},[28,48428,32331],{"class":269},[28,48430,48431,48433,48435],{"class":30,"line":16687},[28,48432,31340],{"class":211},[28,48434,257],{"class":207},[28,48436,32340],{"class":211},[28,48438,48439],{"class":30,"line":16710},[28,48440,32345],{"class":269},[28,48442,48443],{"class":30,"line":16716},[28,48444,32350],{"class":269},[28,48446,48447],{"class":30,"line":16739},[28,48448,32355],{"class":269},[28,48450,48451,48453,48455],{"class":30,"line":16753},[28,48452,32360],{"class":211},[28,48454,257],{"class":207},[28,48456,32365],{"class":211},[28,48458,48459],{"class":30,"line":16773},[28,48460,2477],{"emptyLinePlaceholder":134},[28,48462,48463],{"class":30,"line":16779},[28,48464,32378],{"class":269},[28,48466,48467],{"class":30,"line":16790},[28,48468,32383],{"class":269},[28,48470,48471,48473,48475],{"class":30,"line":16813},[28,48472,32388],{"class":211},[28,48474,257],{"class":207},[28,48476,32393],{"class":38},[28,48478,48479],{"class":30,"line":16835},[28,48480,32398],{"class":269},[28,48482,48483,48485,48487],{"class":30,"line":16840},[28,48484,32403],{"class":211},[28,48486,257],{"class":207},[28,48488,32408],{"class":211},[28,48490,48491],{"class":30,"line":16846},[28,48492,32413],{"class":269},[28,48494,48495,48497,48499],{"class":30,"line":16860},[28,48496,32418],{"class":211},[28,48498,257],{"class":207},[28,48500,32408],{"class":211},[28,48502,48503],{"class":30,"line":16873},[28,48504,32427],{"class":269},[28,48506,48507,48509,48511],{"class":30,"line":16878},[28,48508,32432],{"class":211},[28,48510,257],{"class":207},[28,48512,32408],{"class":211},[28,48514,48515],{"class":30,"line":16892},[28,48516,32441],{"class":269},[28,48518,48519,48521,48523],{"class":30,"line":16897},[28,48520,32446],{"class":211},[28,48522,257],{"class":207},[28,48524,32408],{"class":211},[28,48526,48527],{"class":30,"line":16903},[28,48528,2477],{"emptyLinePlaceholder":134},[28,48530,48531],{"class":30,"line":16908},[28,48532,32459],{"class":269},[28,48534,48535,48537,48539],{"class":30,"line":16922},[28,48536,32464],{"class":211},[28,48538,257],{"class":207},[28,48540,32469],{"class":211},[28,48542,48543],{"class":30,"line":16927},[28,48544,2477],{"emptyLinePlaceholder":134},[28,48546,48547],{"class":30,"line":16932},[28,48548,32482],{"class":269},[28,48550,48551,48553,48555,48557,48559],{"class":30,"line":16946},[28,48552,3278],{"class":207},[28,48554,32489],{"class":211},[28,48556,26094],{"class":207},[28,48558,32494],{"class":38},[28,48560,32497],{"class":211},[28,48562,48563,48565,48567,48569,48571,48573,48575,48577,48579,48581,48583],{"class":30,"line":16958},[28,48564,32502],{"class":38},[28,48566,212],{"class":211},[28,48568,32507],{"class":64},[28,48570,32510],{"class":38},[28,48572,794],{"class":64},[28,48574,32510],{"class":38},[28,48576,461],{"class":64},[28,48578,32519],{"class":211},[28,48580,742],{"class":207},[28,48582,427],{"class":38},[28,48584,30548],{"class":211},[28,48586,48587,48589,48591,48593,48595,48597],{"class":30,"line":16963},[28,48588,32502],{"class":38},[28,48590,212],{"class":211},[28,48592,32534],{"class":64},[28,48594,665],{"class":207},[28,48596,656],{"class":38},[28,48598,218],{"class":211},[28,48600,48601],{"class":30,"line":16976},[28,48602,2477],{"emptyLinePlaceholder":134},[28,48604,48605],{"class":30,"line":16981},[28,48606,32549],{"class":269},[28,48608,48609],{"class":30,"line":16986},[28,48610,32554],{"class":269},[28,48612,48613,48615,48617],{"class":30,"line":16991},[28,48614,32559],{"class":211},[28,48616,257],{"class":207},[28,48618,32393],{"class":38},[28,48620,48621],{"class":30,"line":17004},[28,48622,32568],{"class":269},[28,48624,48625,48627,48629],{"class":30,"line":17009},[28,48626,32573],{"class":211},[28,48628,257],{"class":207},[28,48630,3162],{"class":38},[28,48632,48633],{"class":30,"line":32684},[28,48634,32582],{"class":269},[28,48636,48637,48639,48641],{"class":30,"line":32690},[28,48638,32587],{"class":211},[28,48640,257],{"class":207},[28,48642,32393],{"class":38},[28,48644,48645],{"class":30,"line":32696},[28,48646,32596],{"class":269},[28,48648,48649,48651,48653],{"class":30,"line":32702},[28,48650,32601],{"class":211},[28,48652,257],{"class":207},[28,48654,3162],{"class":38},[28,48656,48657],{"class":30,"line":32708},[28,48658,32610],{"class":269},[28,48660,48661,48663,48665],{"class":30,"line":32719},[28,48662,32615],{"class":211},[28,48664,257],{"class":207},[28,48666,3162],{"class":38},[28,48668,48669],{"class":30,"line":32725},[28,48670,32624],{"class":269},[28,48672,48673,48675,48677],{"class":30,"line":32745},[28,48674,32629],{"class":211},[28,48676,257],{"class":207},[28,48678,3162],{"class":38},[28,48680,48681],{"class":30,"line":32751},[28,48682,32638],{"class":269},[28,48684,48685,48687,48689,48691,48693],{"class":30,"line":32762},[28,48686,3480],{"class":207},[28,48688,31652],{"class":211},[28,48690,26094],{"class":207},[28,48692,31657],{"class":38},[28,48694,32651],{"class":211},[28,48696,48697],{"class":30,"line":32768},[28,48698,32656],{"class":269},[28,48700,48701,48703,48705],{"class":30,"line":32774},[28,48702,32661],{"class":211},[28,48704,257],{"class":207},[28,48706,32666],{"class":211},[28,48708,48709],{"class":30,"line":32780},[28,48710,32671],{"class":269},[28,48712,48713,48715,48717],{"class":30,"line":32786},[28,48714,32676],{"class":211},[28,48716,257],{"class":207},[28,48718,32681],{"class":211},[28,48720,48721],{"class":30,"line":32792},[28,48722,32687],{"class":269},[28,48724,48725],{"class":30,"line":32798},[28,48726,32693],{"class":211},[28,48728,48729],{"class":30,"line":32804},[28,48730,32699],{"class":269},[28,48732,48733],{"class":30,"line":32824},[28,48734,32705],{"class":269},[28,48736,48737,48739,48741],{"class":30,"line":32830},[28,48738,32711],{"class":211},[28,48740,257],{"class":207},[28,48742,32716],{"class":211},[28,48744,48745],{"class":30,"line":32846},[28,48746,32722],{"class":269},[28,48748,48749,48751,48753,48755,48757,48759,48761],{"class":30,"line":32852},[28,48750,32728],{"class":211},[28,48752,257],{"class":207},[28,48754,32733],{"class":211},[28,48756,32736],{"class":5293},[28,48758,257],{"class":207},[28,48760,427],{"class":38},[28,48762,218],{"class":211},[28,48764,48765],{"class":30,"line":32866},[28,48766,32748],{"class":269},[28,48768,48769,48771,48773],{"class":30,"line":32872},[28,48770,32754],{"class":211},[28,48772,257],{"class":207},[28,48774,32759],{"class":211},[28,48776,48777],{"class":30,"line":32887},[28,48778,32765],{"class":269},[28,48780,48781],{"class":30,"line":32893},[28,48782,32771],{"class":211},[28,48784,48785],{"class":30,"line":32902},[28,48786,32777],{"class":269},[28,48788,48789],{"class":30,"line":32908},[28,48790,32783],{"class":211},[28,48792,48793],{"class":30,"line":32917},[28,48794,32789],{"class":269},[28,48796,48797],{"class":30,"line":32923},[28,48798,32795],{"class":211},[28,48800,48801],{"class":30,"line":32929},[28,48802,32801],{"class":269},[28,48804,48805,48807,48809,48811,48813,48815,48817],{"class":30,"line":32938},[28,48806,32807],{"class":211},[28,48808,9554],{"class":207},[28,48810,32812],{"class":211},[28,48812,665],{"class":207},[28,48814,32817],{"class":211},[28,48816,401],{"class":38},[28,48818,218],{"class":211},[28,48820,48821],{"class":30,"line":32944},[28,48822,32827],{"class":269},[28,48824,48825,48827,48829,48831,48833],{"class":30,"line":32955},[28,48826,32833],{"class":211},[28,48828,9554],{"class":207},[28,48830,32838],{"class":211},[28,48832,3026],{"class":207},[28,48834,32843],{"class":211},[28,48836,48837],{"class":30,"line":32961},[28,48838,32849],{"class":269},[28,48840,48841,48843,48845,48847,48849],{"class":30,"line":32980},[28,48842,32855],{"class":211},[28,48844,9554],{"class":207},[28,48846,32817],{"class":211},[28,48848,401],{"class":38},[28,48850,218],{"class":211},[28,48852,48853],{"class":30,"line":32986},[28,48854,32869],{"class":269},[28,48856,48857,48859,48861,48863,48865],{"class":30,"line":32997},[28,48858,3480],{"class":207},[28,48860,32877],{"class":211},[28,48862,26094],{"class":207},[28,48864,31657],{"class":38},[28,48866,32884],{"class":211},[28,48868,48869],{"class":30,"line":33003},[28,48870,32890],{"class":269},[28,48872,48873,48875,48877],{"class":30,"line":33023},[28,48874,32661],{"class":211},[28,48876,257],{"class":207},[28,48878,32666],{"class":211},[28,48880,48881],{"class":30,"line":33039},[28,48882,32905],{"class":269},[28,48884,48885,48887,48889],{"class":30,"line":33045},[28,48886,32676],{"class":211},[28,48888,257],{"class":207},[28,48890,32681],{"class":211},[28,48892,48893],{"class":30,"line":33059},[28,48894,32920],{"class":269},[28,48896,48897],{"class":30,"line":33065},[28,48898,32926],{"class":211},[28,48900,48901],{"class":30,"line":33071},[28,48902,36407],{"class":269},[28,48904,48905,48907],{"class":30,"line":33082},[28,48906,32932],{"class":207},[28,48908,32935],{"class":211},[28,48910,48911],{"class":30,"line":33088},[28,48912,32941],{"class":269},[28,48914,48915,48917,48919],{"class":30,"line":33094},[28,48916,36422],{"class":211},[28,48918,257],{"class":207},[28,48920,32716],{"class":211},[28,48922,48923],{"class":30,"line":33104},[28,48924,32958],{"class":269},[28,48926,48927,48929,48931,48933,48935,48937,48939],{"class":30,"line":33110},[28,48928,36435],{"class":211},[28,48930,257],{"class":207},[28,48932,32733],{"class":211},[28,48934,32736],{"class":5293},[28,48936,257],{"class":207},[28,48938,427],{"class":38},[28,48940,218],{"class":211},[28,48942,48943],{"class":30,"line":33121},[28,48944,32983],{"class":269},[28,48946,48947,48949,48951],{"class":30,"line":33127},[28,48948,36456],{"class":211},[28,48950,257],{"class":207},[28,48952,32759],{"class":211},[28,48954,48955],{"class":30,"line":33137},[28,48956,33000],{"class":269},[28,48958,48959,48961,48963,48965,48967,48969,48971],{"class":30,"line":33142},[28,48960,36469],{"class":211},[28,48962,9554],{"class":207},[28,48964,36474],{"class":211},[28,48966,665],{"class":207},[28,48968,32817],{"class":211},[28,48970,401],{"class":38},[28,48972,218],{"class":211},[28,48974,48975,48977,48979,48981,48983],{"class":30,"line":33148},[28,48976,36487],{"class":211},[28,48978,9554],{"class":207},[28,48980,32838],{"class":211},[28,48982,3026],{"class":207},[28,48984,32843],{"class":211},[28,48986,48987],{"class":30,"line":33197},[28,48988,36500],{"class":269},[28,48990,48991,48993,48995,48997,48999],{"class":30,"line":33244},[28,48992,36505],{"class":211},[28,48994,9554],{"class":207},[28,48996,32817],{"class":211},[28,48998,401],{"class":38},[28,49000,218],{"class":211},[28,49002,49003],{"class":30,"line":33249},[28,49004,33062],{"class":269},[28,49006,49007],{"class":30,"line":33255},[28,49008,33068],{"class":269},[28,49010,49011,49013,49015],{"class":30,"line":33274},[28,49012,33074],{"class":211},[28,49014,794],{"class":207},[28,49016,33079],{"class":211},[28,49018,49019],{"class":30,"line":33280},[28,49020,33085],{"class":269},[28,49022,49023],{"class":30,"line":33300},[28,49024,33091],{"class":269},[28,49026,49027,49029,49031],{"class":30,"line":33306},[28,49028,33097],{"class":211},[28,49030,794],{"class":207},[28,49032,33079],{"class":211},[28,49034,49035],{"class":30,"line":33312},[28,49036,33107],{"class":269},[28,49038,49039,49041,49043],{"class":30,"line":33322},[28,49040,33113],{"class":211},[28,49042,794],{"class":207},[28,49044,33118],{"class":211},[28,49046,49047],{"class":30,"line":33327},[28,49048,33124],{"class":269},[28,49050,49051,49053,49055],{"class":30,"line":33333},[28,49052,33130],{"class":211},[28,49054,794],{"class":207},[28,49056,33118],{"class":211},[28,49058,49059],{"class":30,"line":33349},[28,49060,2477],{"emptyLinePlaceholder":134},[28,49062,49063],{"class":30,"line":33394},[28,49064,33145],{"class":269},[28,49066,49067,49069,49071,49073,49075,49077,49079,49081,49083,49085,49087,49089,49091,49093,49095,49097,49099,49101,49103,49105],{"class":30,"line":33400},[28,49068,32502],{"class":38},[28,49070,212],{"class":211},[28,49072,3669],{"class":64},[28,49074,32510],{"class":38},[28,49076,33159],{"class":64},[28,49078,1106],{"class":38},[28,49080,33164],{"class":207},[28,49082,1156],{"class":38},[28,49084,33169],{"class":64},[28,49086,1106],{"class":38},[28,49088,33164],{"class":207},[28,49090,1156],{"class":38},[28,49092,3669],{"class":64},[28,49094,33180],{"class":211},[28,49096,742],{"class":207},[28,49098,427],{"class":38},[28,49100,33187],{"class":211},[28,49102,742],{"class":207},[28,49104,427],{"class":38},[28,49106,33194],{"class":211},[28,49108,49109,49111,49113,49115,49117,49119,49121,49123,49125,49127,49129,49131,49133,49135,49137,49139,49141,49143,49145,49147],{"class":30,"line":33406},[28,49110,32502],{"class":38},[28,49112,212],{"class":211},[28,49114,3669],{"class":64},[28,49116,32510],{"class":38},[28,49118,33208],{"class":64},[28,49120,1106],{"class":38},[28,49122,33164],{"class":207},[28,49124,1156],{"class":38},[28,49126,33217],{"class":64},[28,49128,1106],{"class":38},[28,49130,33164],{"class":207},[28,49132,1156],{"class":38},[28,49134,3669],{"class":64},[28,49136,33228],{"class":211},[28,49138,742],{"class":207},[28,49140,427],{"class":38},[28,49142,33235],{"class":211},[28,49144,742],{"class":207},[28,49146,427],{"class":38},[28,49148,33194],{"class":211},[28,49150,49151],{"class":30,"line":33412},[28,49152,2477],{"emptyLinePlaceholder":134},[28,49154,49155],{"class":30,"line":33423},[28,49156,33252],{"class":269},[28,49158,49159,49161,49163,49165,49167,49169,49171],{"class":30,"line":33429},[28,49160,2574],{"class":207},[28,49162,33260],{"class":211},[28,49164,742],{"class":207},[28,49166,427],{"class":38},[28,49168,1150],{"class":211},[28,49170,1170],{"class":207},[28,49172,33271],{"class":211},[28,49174,49175],{"class":30,"line":33435},[28,49176,33277],{"class":269},[28,49178,49179,49181,49183,49185,49187,49189,49191],{"class":30,"line":33441},[28,49180,33283],{"class":211},[28,49182,251],{"class":38},[28,49184,257],{"class":207},[28,49186,33290],{"class":211},[28,49188,742],{"class":207},[28,49190,427],{"class":38},[28,49192,33297],{"class":211},[28,49194,49195],{"class":30,"line":33459},[28,49196,33303],{"class":269},[28,49198,49199],{"class":30,"line":33473},[28,49200,33309],{"class":269},[28,49202,49203,49205,49207],{"class":30,"line":33482},[28,49204,33315],{"class":211},[28,49206,257],{"class":207},[28,49208,32365],{"class":211},[28,49210,49211],{"class":30,"line":33491},[28,49212,2477],{"emptyLinePlaceholder":134},[28,49214,49215],{"class":30,"line":33500},[28,49216,33330],{"class":269},[28,49218,49219,49221,49223,49225,49227],{"class":30,"line":33509},[28,49220,33336],{"class":211},[28,49222,257],{"class":207},[28,49224,33341],{"class":211},[28,49226,742],{"class":207},[28,49228,33346],{"class":211},[28,49230,49231,49233,49235,49237,49239,49241,49243,49245,49247,49249,49251,49253,49255,49257,49259,49261,49263,49265],{"class":30,"line":33515},[28,49232,32502],{"class":38},[28,49234,212],{"class":211},[28,49236,33356],{"class":64},[28,49238,1106],{"class":38},[28,49240,33361],{"class":207},[28,49242,1156],{"class":38},[28,49244,754],{"class":64},[28,49246,1106],{"class":38},[28,49248,33361],{"class":207},[28,49250,1156],{"class":38},[28,49252,33374],{"class":64},[28,49254,33377],{"class":211},[28,49256,33380],{"class":207},[28,49258,1117],{"class":38},[28,49260,33385],{"class":211},[28,49262,538],{"class":207},[28,49264,1117],{"class":38},[28,49266,30548],{"class":211},[28,49268,49269],{"class":30,"line":33521},[28,49270,36784],{"class":269},[28,49272,49273],{"class":30,"line":33529},[28,49274,36789],{"class":269},[28,49276,49277,49279,49281],{"class":30,"line":33534},[28,49278,36794],{"class":211},[28,49280,33418],{"class":64},[28,49282,218],{"class":211},[28,49284,49285],{"class":30,"line":33540},[28,49286,33438],{"class":269},[28,49288,49289,49291,49293,49295,49297,49299],{"class":30,"line":33551},[28,49290,33444],{"class":211},[28,49292,257],{"class":207},[28,49294,33449],{"class":211},[28,49296,33452],{"class":5293},[28,49298,257],{"class":207},[28,49300,1624],{"class":211},[28,49302,49303,49305,49307,49309],{"class":30,"line":33557},[28,49304,33462],{"class":64},[28,49306,1069],{"class":211},[28,49308,33467],{"class":38},[28,49310,33470],{"class":211},[28,49312,49313,49315],{"class":30,"line":33577},[28,49314,33476],{"class":64},[28,49316,33479],{"class":211},[28,49318,49319,49321],{"class":30,"line":33583},[28,49320,33485],{"class":64},[28,49322,33488],{"class":211},[28,49324,49325,49327],{"class":30,"line":33589},[28,49326,33494],{"class":64},[28,49328,33497],{"class":211},[28,49330,49331,49333],{"class":30,"line":33595},[28,49332,33503],{"class":64},[28,49334,33506],{"class":211},[28,49336,49337],{"class":30,"line":33612},[28,49338,33512],{"class":211},[28,49340,49341],{"class":30,"line":33618},[28,49342,33518],{"class":269},[28,49344,49345,49347],{"class":30,"line":33624},[28,49346,4167],{"class":207},[28,49348,33526],{"class":211},[28,49350,49351],{"class":30,"line":33630},[28,49352,2477],{"emptyLinePlaceholder":134},[28,49354,49355],{"class":30,"line":33636},[28,49356,33537],{"class":269},[28,49358,49359,49361,49363],{"class":30,"line":33642},[28,49360,31998],{"class":207},[28,49362,33545],{"class":34},[28,49364,33548],{"class":211},[28,49366,49367],{"class":30,"line":33669},[28,49368,33554],{"class":269},[28,49370,49371,49373,49375,49377,49379,49381,49383,49385],{"class":30,"line":33693},[28,49372,33560],{"class":211},[28,49374,31744],{"class":5293},[28,49376,257],{"class":207},[28,49378,212],{"class":211},[28,49380,708],{"class":38},[28,49382,588],{"class":211},[28,49384,503],{"class":38},[28,49386,30548],{"class":211},[28,49388,49389],{"class":30,"line":33699},[28,49390,33580],{"class":269},[28,49392,49393],{"class":30,"line":33705},[28,49394,33586],{"class":269},[28,49396,49397],{"class":30,"line":33711},[28,49398,33592],{"class":269},[28,49400,49401,49403,49405,49407,49409,49411,49413],{"class":30,"line":33722},[28,49402,31778],{"class":211},[28,49404,427],{"class":38},[28,49406,588],{"class":211},[28,49408,288],{"class":38},[28,49410,588],{"class":211},[28,49412,427],{"class":38},[28,49414,218],{"class":211},[28,49416,49417],{"class":30,"line":33733},[28,49418,33615],{"class":269},[28,49420,49421],{"class":30,"line":33739},[28,49422,33621],{"class":269},[28,49424,49425],{"class":30,"line":33756},[28,49426,33627],{"class":269},[28,49428,49429],{"class":30,"line":33779},[28,49430,33633],{"class":269},[28,49432,49433],{"class":30,"line":33802},[28,49434,33639],{"class":269},[28,49436,49437,49439,49441,49443,49445,49447,49449,49451,49453],{"class":30,"line":33808},[28,49438,33645],{"class":211},[28,49440,33648],{"class":64},[28,49442,33651],{"class":211},[28,49444,33654],{"class":64},[28,49446,588],{"class":211},[28,49448,33659],{"class":5293},[28,49450,257],{"class":207},[28,49452,33664],{"class":64},[28,49454,218],{"class":211},[28,49456,49457,49459,49461,49463,49465,49467,49469,49471,49473],{"class":30,"line":33813},[28,49458,33645],{"class":211},[28,49460,33648],{"class":64},[28,49462,33676],{"class":211},[28,49464,33679],{"class":64},[28,49466,588],{"class":211},[28,49468,33659],{"class":5293},[28,49470,257],{"class":207},[28,49472,33688],{"class":64},[28,49474,218],{"class":211},[28,49476,49477],{"class":30,"line":33822},[28,49478,33696],{"class":269},[28,49480,49481],{"class":30,"line":33832},[28,49482,33702],{"class":211},[28,49484,49485],{"class":30,"line":33838},[28,49486,33708],{"class":269},[28,49488,49489,49491,49493],{"class":30,"line":33843},[28,49490,33714],{"class":211},[28,49492,33717],{"class":64},[28,49494,218],{"class":211},[28,49496,49497,49499,49501],{"class":30,"line":33849},[28,49498,33725],{"class":211},[28,49500,33728],{"class":64},[28,49502,218],{"class":211},[28,49504,49505],{"class":30,"line":33862},[28,49506,33736],{"class":269},[28,49508,49509,49511,49513,49515,49517,49519,49521],{"class":30,"line":33868},[28,49510,31778],{"class":211},[28,49512,427],{"class":38},[28,49514,588],{"class":211},[28,49516,288],{"class":38},[28,49518,588],{"class":211},[28,49520,288],{"class":38},[28,49522,218],{"class":211},[28,49524,49525,49527,49529,49531,49533,49535,49537,49539,49541],{"class":30,"line":33879},[28,49526,33645],{"class":211},[28,49528,33648],{"class":64},[28,49530,33763],{"class":211},[28,49532,33654],{"class":64},[28,49534,588],{"class":211},[28,49536,33659],{"class":5293},[28,49538,257],{"class":207},[28,49540,33774],{"class":64},[28,49542,218],{"class":211},[28,49544,49545,49547,49549,49551,49553,49555,49557,49559,49561],{"class":30,"line":33890},[28,49546,33645],{"class":211},[28,49548,33648],{"class":64},[28,49550,33786],{"class":211},[28,49552,33679],{"class":64},[28,49554,588],{"class":211},[28,49556,33659],{"class":5293},[28,49558,257],{"class":207},[28,49560,33797],{"class":64},[28,49562,218],{"class":211},[28,49564,49565],{"class":30,"line":33909},[28,49566,33805],{"class":269},[28,49568,49570],{"class":30,"line":49569},219,[28,49571,33702],{"class":211},[28,49573,49575,49577,49579],{"class":30,"line":49574},220,[28,49576,33714],{"class":211},[28,49578,33648],{"class":64},[28,49580,218],{"class":211},[28,49582,49584,49586,49588],{"class":30,"line":49583},221,[28,49585,33725],{"class":211},[28,49587,33827],{"class":64},[28,49589,218],{"class":211},[28,49591,49593],{"class":30,"line":49592},222,[28,49594,33835],{"class":211},[28,49596,49598],{"class":30,"line":49597},223,[28,49599,2477],{"emptyLinePlaceholder":134},[28,49601,49603],{"class":30,"line":49602},224,[28,49604,33846],{"class":269},[28,49606,49608,49610,49612,49614,49616],{"class":30,"line":49607},225,[28,49609,1609],{"class":207},[28,49611,31271],{"class":38},[28,49613,3026],{"class":207},[28,49615,31276],{"class":64},[28,49617,3816],{"class":211},[28,49619,49621],{"class":30,"line":49620},226,[28,49622,33865],{"class":269},[28,49624,49626,49628,49630],{"class":30,"line":49625},227,[28,49627,44597],{"class":211},[28,49629,257],{"class":207},[28,49631,44602],{"class":211},[28,49633,49635,49637,49639],{"class":30,"line":49634},228,[28,49636,33882],{"class":211},[28,49638,257],{"class":207},[28,49640,33887],{"class":211},[28,49642,49644,49646,49648,49650,49652,49654,49656],{"class":30,"line":49643},229,[28,49645,33444],{"class":211},[28,49647,257],{"class":207},[28,49649,44619],{"class":211},[28,49651,33900],{"class":5293},[28,49653,257],{"class":207},[28,49655,1117],{"class":38},[28,49657,218],{"class":211},[28,49659,49661],{"class":30,"line":49660},230,[28,49662,33912],{"class":211},[22075,49664,49666],{"id":49665},"_242测试代码","2.4.2.测试代码",[14,49668,49669],{},"使用测试集进行测试与推理",[18,49671,49673],{"className":30429,"code":49672,"language":30431,"meta":23,"style":23},"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",[25,49674,49675,49681,49691,49701,49712,49722,49726,49730,49738,49743,49747,49764,49768,49772,49776,49780,49784,49816,49820,49828,49832,49844,49848,49852,49856,49860,49864,49868,49872,49876,49894,49908,49912,49922,49932,49942,49948,49952,49956,49964,49968,49984,49992,49996,50000,50008,50016,50020,50024,50028,50032,50038,50042,50052,50060,50068,50072,50076,50080,50088,50092,50108,50112,50116,50120,50132,50136,50148,50152,50156,50168,50172,50182,50186,50190,50202,50206,50214,50218,50222,50230,50234,50242,50246,50250,50254,50258,50262,50278,50286,50290,50294,50312,50318,50322,50332,50340,50348,50352,50356,50360,50364,50372,50376,50392,50396,50404,50412],{"__ignoreMap":23},[28,49676,49677,49679],{"class":30,"line":31},[28,49678,30443],{"class":207},[28,49680,30446],{"class":211},[28,49682,49683,49685,49687,49689],{"class":30,"line":42},[28,49684,30443],{"class":207},[28,49686,31466],{"class":211},[28,49688,31434],{"class":207},[28,49690,31471],{"class":211},[28,49692,49693,49695,49697,49699],{"class":30,"line":50},[28,49694,30788],{"class":207},[28,49696,31449],{"class":211},[28,49698,30443],{"class":207},[28,49700,31454],{"class":211},[28,49702,49703,49705,49707,49709],{"class":30,"line":58},[28,49704,30788],{"class":207},[28,49706,31419],{"class":211},[28,49708,30443],{"class":207},[28,49710,49711],{"class":211}," ImageFolder\n",[28,49713,49714,49716,49718,49720],{"class":30,"line":70},[28,49715,30788],{"class":207},[28,49717,31965],{"class":211},[28,49719,30443],{"class":207},[28,49721,44691],{"class":211},[28,49723,49724],{"class":30,"line":78},[28,49725,2477],{"emptyLinePlaceholder":134},[28,49727,49728],{"class":30,"line":86},[28,49729,34002],{"class":269},[28,49731,49732,49734,49736],{"class":30,"line":97},[28,49733,31998],{"class":207},[28,49735,34009],{"class":34},[28,49737,32004],{"class":211},[28,49739,49740],{"class":30,"line":108},[28,49741,49742],{"class":269},"   # 导入自己的数据集，并进行数据处理\n",[28,49744,49745],{"class":30,"line":1407},[28,49746,48012],{"class":269},[28,49748,49749,49751,49753,49755,49757,49759,49762],{"class":30,"line":1690},[28,49750,48017],{"class":38},[28,49752,257],{"class":207},[28,49754,880],{"class":207},[28,49756,461],{"class":64},[28,49758,768],{"class":38},[28,49760,49761],{"class":48028},"\u002Fdata\u002Ftest",[28,49763,25204],{"class":64},[28,49765,49766],{"class":30,"line":1695},[28,49767,2477],{"emptyLinePlaceholder":134},[28,49769,49770],{"class":30,"line":1701},[28,49771,48040],{"class":269},[28,49773,49774],{"class":30,"line":1706},[28,49775,48045],{"class":269},[28,49777,49778],{"class":30,"line":1720},[28,49779,48050],{"class":269},[28,49781,49782],{"class":30,"line":1725},[28,49783,48055],{"class":269},[28,49785,49786,49788,49790,49792,49794,49796,49798,49800,49802,49804,49806,49808,49810,49812,49814],{"class":30,"line":1731},[28,49787,48060],{"class":211},[28,49789,257],{"class":207},[28,49791,48065],{"class":211},[28,49793,48068],{"class":38},[28,49795,588],{"class":211},[28,49797,48073],{"class":38},[28,49799,588],{"class":211},[28,49801,48078],{"class":38},[28,49803,48081],{"class":211},[28,49805,48084],{"class":38},[28,49807,588],{"class":211},[28,49809,48089],{"class":38},[28,49811,588],{"class":211},[28,49813,48094],{"class":38},[28,49815,4734],{"class":211},[28,49817,49818],{"class":30,"line":1752},[28,49819,48101],{"class":269},[28,49821,49822,49824,49826],{"class":30,"line":1757},[28,49823,48106],{"class":211},[28,49825,257],{"class":207},[28,49827,48111],{"class":211},[28,49829,49830],{"class":30,"line":1771},[28,49831,48116],{"class":269},[28,49833,49834,49836,49838,49840,49842],{"class":30,"line":1776},[28,49835,48121],{"class":211},[28,49837,31552],{"class":38},[28,49839,588],{"class":211},[28,49841,31552],{"class":38},[28,49843,42673],{"class":211},[28,49845,49846],{"class":30,"line":1805},[28,49847,48134],{"class":269},[28,49849,49850],{"class":30,"line":1810},[28,49851,48139],{"class":211},[28,49853,49854],{"class":30,"line":1827},[28,49855,48144],{"class":211},[28,49857,49858],{"class":30,"line":1832},[28,49859,48149],{"class":269},[28,49861,49862],{"class":30,"line":1837},[28,49863,48154],{"class":269},[28,49865,49866],{"class":30,"line":1842},[28,49867,2477],{"emptyLinePlaceholder":134},[28,49869,49870],{"class":30,"line":1856},[28,49871,48163],{"class":269},[28,49873,49874],{"class":30,"line":1861},[28,49875,48168],{"class":269},[28,49877,49878,49880,49882,49884,49886,49888,49890,49892],{"class":30,"line":2654},[28,49879,34016],{"class":211},[28,49881,257],{"class":207},[28,49883,48177],{"class":211},[28,49885,48180],{"class":38},[28,49887,588],{"class":211},[28,49889,48185],{"class":5293},[28,49891,257],{"class":207},[28,49893,48190],{"class":211},[28,49895,49896,49898,49900,49902,49904,49906],{"class":30,"line":2668},[28,49897,34073],{"class":211},[28,49899,257],{"class":207},[28,49901,31585],{"class":211},[28,49903,31588],{"class":5293},[28,49905,257],{"class":207},[28,49907,34084],{"class":211},[28,49909,49910],{"class":30,"line":2676},[28,49911,34089],{"class":269},[28,49913,49914,49916,49918,49920],{"class":30,"line":2681},[28,49915,34094],{"class":5293},[28,49917,257],{"class":207},[28,49919,427],{"class":38},[28,49921,31517],{"class":211},[28,49923,49924,49926,49928,49930],{"class":30,"line":2687},[28,49925,34105],{"class":5293},[28,49927,257],{"class":207},[28,49929,31527],{"class":38},[28,49931,31517],{"class":211},[28,49933,49934,49936,49938,49940],{"class":30,"line":2693},[28,49935,34116],{"class":5293},[28,49937,257],{"class":207},[28,49939,401],{"class":38},[28,49941,218],{"class":211},[28,49943,49944,49946],{"class":30,"line":2698},[28,49945,4167],{"class":207},[28,49947,34129],{"class":211},[28,49949,49950],{"class":30,"line":8025},[28,49951,2477],{"emptyLinePlaceholder":134},[28,49953,49954],{"class":30,"line":8049},[28,49955,34138],{"class":269},[28,49957,49958,49960,49962],{"class":30,"line":8054},[28,49959,31998],{"class":207},[28,49961,34145],{"class":34},[28,49963,34148],{"class":211},[28,49965,49966],{"class":30,"line":8060},[28,49967,34153],{"class":269},[28,49969,49970,49972,49974,49976,49978,49980,49982],{"class":30,"line":8087},[28,49971,31288],{"class":211},[28,49973,257],{"class":207},[28,49975,31295],{"class":64},[28,49977,1782],{"class":207},[28,49979,31300],{"class":211},[28,49981,1779],{"class":207},[28,49983,34170],{"class":64},[28,49985,49986,49988,49990],{"class":30,"line":8092},[28,49987,31340],{"class":211},[28,49989,257],{"class":207},[28,49991,32340],{"class":211},[28,49993,49994],{"class":30,"line":8098},[28,49995,2477],{"emptyLinePlaceholder":134},[28,49997,49998],{"class":30,"line":8110},[28,49999,34187],{"class":269},[28,50001,50002,50004,50006],{"class":30,"line":8122},[28,50003,34192],{"class":211},[28,50005,257],{"class":207},[28,50007,32393],{"class":38},[28,50009,50010,50012,50014],{"class":30,"line":8134},[28,50011,34201],{"class":211},[28,50013,257],{"class":207},[28,50015,3162],{"class":38},[28,50017,50018],{"class":30,"line":9793},[28,50019,2477],{"emptyLinePlaceholder":134},[28,50021,50022],{"class":30,"line":9818},[28,50023,34214],{"class":269},[28,50025,50026],{"class":30,"line":9841},[28,50027,34219],{"class":269},[28,50029,50030],{"class":30,"line":9865},[28,50031,34224],{"class":269},[28,50033,50034,50036],{"class":30,"line":9870},[28,50035,34229],{"class":207},[28,50037,32935],{"class":211},[28,50039,50040],{"class":30,"line":9875},[28,50041,34236],{"class":269},[28,50043,50044,50046,50048,50050],{"class":30,"line":9880},[28,50045,3480],{"class":207},[28,50047,34243],{"class":211},[28,50049,26094],{"class":207},[28,50051,34248],{"class":211},[28,50053,50054,50056,50058],{"class":30,"line":9889},[28,50055,34253],{"class":211},[28,50057,257],{"class":207},[28,50059,34258],{"class":211},[28,50061,50062,50064,50066],{"class":30,"line":9894},[28,50063,34263],{"class":211},[28,50065,257],{"class":207},[28,50067,34268],{"class":211},[28,50069,50070],{"class":30,"line":9900},[28,50071,34273],{"class":269},[28,50073,50074],{"class":30,"line":9921},[28,50075,32926],{"class":211},[28,50077,50078],{"class":30,"line":9927},[28,50079,34282],{"class":269},[28,50081,50082,50084,50086],{"class":30,"line":9941},[28,50083,32711],{"class":211},[28,50085,257],{"class":207},[28,50087,34291],{"class":211},[28,50089,50090],{"class":30,"line":9947},[28,50091,34296],{"class":269},[28,50093,50094,50096,50098,50100,50102,50104,50106],{"class":30,"line":9974},[28,50095,32728],{"class":211},[28,50097,257],{"class":207},[28,50099,32733],{"class":211},[28,50101,32736],{"class":5293},[28,50103,257],{"class":207},[28,50105,427],{"class":38},[28,50107,218],{"class":211},[28,50109,50110],{"class":30,"line":9983},[28,50111,34317],{"class":269},[28,50113,50114],{"class":30,"line":9989},[28,50115,34322],{"class":269},[28,50117,50118],{"class":30,"line":9997},[28,50119,34327],{"class":269},[28,50121,50122,50124,50126,50128,50130],{"class":30,"line":10002},[28,50123,34332],{"class":211},[28,50125,9554],{"class":207},[28,50127,32838],{"class":211},[28,50129,3026],{"class":207},[28,50131,34341],{"class":211},[28,50133,50134],{"class":30,"line":16681},[28,50135,34346],{"class":269},[28,50137,50138,50140,50142,50144,50146],{"class":30,"line":16687},[28,50139,34351],{"class":211},[28,50141,9554],{"class":207},[28,50143,34356],{"class":211},[28,50145,401],{"class":38},[28,50147,218],{"class":211},[28,50149,50150],{"class":30,"line":16710},[28,50151,2477],{"emptyLinePlaceholder":134},[28,50153,50154],{"class":30,"line":16716},[28,50155,34369],{"class":269},[28,50157,50158,50160,50162,50164,50166],{"class":30,"line":16739},[28,50159,34374],{"class":211},[28,50161,257],{"class":207},[28,50163,34379],{"class":211},[28,50165,794],{"class":207},[28,50167,34384],{"class":211},[28,50169,50170],{"class":30,"line":16753},[28,50171,34389],{"class":269},[28,50173,50174,50176,50178,50180],{"class":30,"line":16773},[28,50175,32502],{"class":38},[28,50177,212],{"class":211},[28,50179,34398],{"class":64},[28,50181,34401],{"class":211},[28,50183,50184],{"class":30,"line":16779},[28,50185,2477],{"emptyLinePlaceholder":134},[28,50187,50188],{"class":30,"line":16790},[28,50189,34410],{"class":269},[28,50191,50192,50194,50196,50198,50200],{"class":30,"line":16813},[28,50193,1609],{"class":207},[28,50195,31271],{"class":38},[28,50197,3026],{"class":207},[28,50199,31276],{"class":64},[28,50201,3816],{"class":211},[28,50203,50204],{"class":30,"line":16835},[28,50205,34427],{"class":269},[28,50207,50208,50210,50212],{"class":30,"line":16840},[28,50209,31340],{"class":211},[28,50211,257],{"class":207},[28,50213,44602],{"class":211},[28,50215,50216],{"class":30,"line":16846},[28,50217,34440],{"class":269},[28,50219,50220],{"class":30,"line":16860},[28,50221,34445],{"class":269},[28,50223,50224,50226,50228],{"class":30,"line":16873},[28,50225,34450],{"class":211},[28,50227,34453],{"class":64},[28,50229,30548],{"class":211},[28,50231,50232],{"class":30,"line":16878},[28,50233,34460],{"class":269},[28,50235,50236,50238,50240],{"class":30,"line":16892},[28,50237,34073],{"class":211},[28,50239,257],{"class":207},[28,50241,34469],{"class":211},[28,50243,50244],{"class":30,"line":16897},[28,50245,34474],{"class":269},[28,50247,50248],{"class":30,"line":16903},[28,50249,34479],{"class":211},[28,50251,50252],{"class":30,"line":16908},[28,50253,2477],{"emptyLinePlaceholder":134},[28,50255,50256],{"class":30,"line":16922},[28,50257,34488],{"class":269},[28,50259,50260],{"class":30,"line":16927},[28,50261,34493],{"class":269},[28,50263,50264,50266,50268,50270,50272,50274,50276],{"class":30,"line":16932},[28,50265,31288],{"class":211},[28,50267,257],{"class":207},[28,50269,31295],{"class":64},[28,50271,1782],{"class":207},[28,50273,31300],{"class":211},[28,50275,1779],{"class":207},[28,50277,34170],{"class":64},[28,50279,50280,50282,50284],{"class":30,"line":16946},[28,50281,31340],{"class":211},[28,50283,257],{"class":207},[28,50285,32340],{"class":211},[28,50287,50288],{"class":30,"line":16958},[28,50289,34522],{"class":269},[28,50291,50292],{"class":30,"line":16963},[28,50293,34527],{"class":269},[28,50295,50296,50298,50300,50302,50305,50307,50310],{"class":30,"line":16976},[28,50297,34532],{"class":211},[28,50299,257],{"class":207},[28,50301,1100],{"class":211},[28,50303,50304],{"class":64},"'猫'",[28,50306,588],{"class":211},[28,50308,50309],{"class":64},"'狗'",[28,50311,33297],{"class":211},[28,50313,50314,50316],{"class":30,"line":16981},[28,50315,34229],{"class":207},[28,50317,32935],{"class":211},[28,50319,50320],{"class":30,"line":16986},[28,50321,34597],{"class":269},[28,50323,50324,50326,50328,50330],{"class":30,"line":16991},[28,50325,3480],{"class":207},[28,50327,34604],{"class":211},[28,50329,26094],{"class":207},[28,50331,34248],{"class":211},[28,50333,50334,50336,50338],{"class":30,"line":17004},[28,50335,32661],{"class":211},[28,50337,257],{"class":207},[28,50339,32666],{"class":211},[28,50341,50342,50344,50346],{"class":30,"line":17009},[28,50343,32676],{"class":211},[28,50345,257],{"class":207},[28,50347,32681],{"class":211},[28,50349,50350],{"class":30,"line":32684},[28,50351,2477],{"emptyLinePlaceholder":134},[28,50353,50354],{"class":30,"line":32690},[28,50355,34633],{"class":269},[28,50357,50358],{"class":30,"line":32696},[28,50359,32926],{"class":211},[28,50361,50362],{"class":30,"line":32702},[28,50363,34642],{"class":269},[28,50365,50366,50368,50370],{"class":30,"line":32708},[28,50367,32711],{"class":211},[28,50369,257],{"class":207},[28,50371,32716],{"class":211},[28,50373,50374],{"class":30,"line":32719},[28,50375,34655],{"class":269},[28,50377,50378,50380,50382,50384,50386,50388,50390],{"class":30,"line":32725},[28,50379,32728],{"class":211},[28,50381,257],{"class":207},[28,50383,32733],{"class":211},[28,50385,32736],{"class":5293},[28,50387,257],{"class":207},[28,50389,427],{"class":38},[28,50391,218],{"class":211},[28,50393,50394],{"class":30,"line":32745},[28,50395,34676],{"class":269},[28,50397,50398,50400,50402],{"class":30,"line":32751},[28,50399,34681],{"class":211},[28,50401,257],{"class":207},[28,50403,34686],{"class":211},[28,50405,50406,50408,50410],{"class":30,"line":32762},[28,50407,34691],{"class":211},[28,50409,257],{"class":207},[28,50411,34696],{"class":211},[28,50413,50414,50416,50418,50420,50422,50424,50426,50428],{"class":30,"line":32768},[28,50415,34701],{"class":38},[28,50417,212],{"class":211},[28,50419,34706],{"class":64},[28,50421,34709],{"class":211},[28,50423,34712],{"class":64},[28,50425,588],{"class":211},[28,50427,34717],{"class":64},[28,50429,34720],{"class":211},[126,50431,50432],{},"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":23,"searchDepth":42,"depth":42,"links":50434},[50435,50436,50437,50438],{"id":30642,"depth":50,"text":30643},{"id":37890,"depth":50,"text":37891},{"id":41323,"depth":50,"text":41324},{"id":45332,"depth":50,"text":45333},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30634,"description":131},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50445,"title":50446,"body":50447,"description":131,"extension":132,"meta":50454,"navigation":134,"path":50455,"seo":50456,"stem":50457,"__hash__":50458},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50448,"toc":50452},[50449],[10,50450,50446],{"id":50451},"_3yolo模型学习",{"title":23,"searchDepth":42,"depth":42,"links":50453},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50446,"description":131},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50460,"title":50461,"body":50462,"description":50469,"extension":132,"meta":50470,"navigation":134,"path":50472,"seo":50473,"stem":50474,"__hash__":50475},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50463,"toc":50467},[50464],[14,50465,50466],{},"yolo模型还未补充",{"title":23,"searchDepth":42,"depth":42,"links":50468},[],"深度学习学习",{"category":50471},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50461,"description":50469},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50477,"title":50478,"body":50479,"description":131,"extension":132,"meta":50504,"navigation":134,"path":50505,"seo":50506,"stem":50507,"__hash__":50508},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50480,"toc":50502},[50481,50484,50487,50492,50499],[10,50482,50478],{"id":50483},"_1工具",[14,50485,50486],{},"提示错误插件：有问题会提前报错",[14,50488,50489],{},[1540,50490],{"alt":23,"src":50491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50493,50494],{},[448,50495,50498],{"href":50496,"rel":50497},"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",[23940],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50500,50501],{},"alt键加上下箭头可以实现语句的移动",{"title":23,"searchDepth":42,"depth":42,"links":50503},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50478,"description":131},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50510,"title":50511,"body":50512,"description":131,"extension":132,"meta":53376,"navigation":134,"path":53377,"seo":53378,"stem":53379,"__hash__":53380},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50513,"toc":53327},[50514,50517,50521,50525,50530,50533,50538,50542,50549,50554,50561,50566,50573,50578,50582,50587,50590,50594,50599,50603,50608,50611,50614,50617,50620,50623,50626,50629,50632,50637,50642,50647,50651,50654,50657,50661,50666,50669,50677,50682,50699,50707,50712,50717,50722,50727,50732,50735,50740,50745,50749,50758,50763,50768,50772,50777,50780,50784,50789,50797,50802,50807,50810,50815,50820,50825,50828,50831,50834,50839,50844,50847,50852,50855,50860,50863,50866,50869,50874,50877,50880,50895,50900,50905,50910,50913,50916,50919,50933,50936,50941,50946,50949,50952,50955,50958,50961,50964,50967,50971,50975,50980,50984,50987,50992,50997,51000,51005,51008,51012,51017,51020,51023,51026,51029,51032,51035,51038,51041,51044,51048,51053,51058,51063,51066,51069,51073,51078,51081,51085,51088,51091,51096,51099,51102,51106,51110,51113,51118,51123,51126,51155,51160,51165,51170,51175,51179,51184,51188,51193,51196,51200,51204,51209,51213,51218,51223,51227,51232,51235,51237,51240,51245,51249,51254,51258,51262,51267,51272,51277,51282,51286,51291,51296,51301,51304,51307,51312,51315,51320,51325,51330,51335,51339,52146,52150,52493,52498,52501,52504,52507,52510,52513,52516,52519,52522,52524,52527,52529,52532,52536,52541,52544,52547,52550,52554,52559,52564,52584,52587,52591,52596,52601,52618,52622,52651,52655,52677,52679,52718,52726,52732,52736,52739,52742,52747,52752,52755,52758,52761,52766,52771,52774,52777,52780,52783,52786,52789,52792,52795,52798,52801,52804,52806,52809,52812,52815,52818,52821,52824,52827,52830,52834,52839,52842,52847,52850,52853,52856,52859,52862,52865,52868,52870,52873,52876,52879,52882,52885,52888,52892,52895,52904,52907,52912,52915,52920,52923,52926,52929,52932,52935,52938,52941,52945,52949,52952,52955,52960,52965,52970,52974,52979,52984,52987,52990,52993,52996,52999,53004,53007,53012,53014,53019,53022,53026,53031,53034,53037,53042,53046,53049,53054,53057,53060,53089,53094,53097,53100,53103,53106,53109,53113,53116,53202,53206,53209,53214,53219,53226,53229,53232,53235,53238,53241,53246,53251,53254,53257,53260,53263,53266,53269,53272,53275,53278,53280,53283,53287,53292,53297,53302,53305,53310,53315,53318,53321,53324],[10,50515,50511],{"id":50516},"_2基础语法",[149,50518,50520],{"id":50519},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[177,50522,50524],{"id":50523},"_211-js组成","2.1.1 js组成",[161,50526,50527],{},[119,50528,50529],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50531,50532],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[161,50534,50535],{"start":42},[119,50536,50537],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[177,50539,50541],{"id":50540},"_212-js书写位置","2.1.2 js书写位置",[161,50543,50544],{},[119,50545,50546],{},[359,50547,50548],{},"内部 JavaScript",[14,50550,50551],{},[1540,50552],{"alt":23,"src":50553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[161,50555,50556],{"start":42},[119,50557,50558],{},[359,50559,50560],{},"外部 JavaScript",[14,50562,50563],{},[1540,50564],{"alt":23,"src":50565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[161,50567,50568],{"start":50},[119,50569,50570],{},[359,50571,50572],{},"内联 JavaScript",[14,50574,50575],{},[1540,50576],{"alt":23,"src":50577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[177,50579,50581],{"id":50580},"_213-javascript注释","2.1.3 JavaScript注释",[14,50583,50584],{},[1540,50585],{"alt":23,"src":50586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50588,50589],{},"alt+shift+a一定要记住！",[177,50591,50593],{"id":50592},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50595,50596],{},[1540,50597],{"alt":23,"src":50598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[177,50600,50602],{"id":50601},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[161,50604,50605],{},[119,50606,50607],{},"输出语法：",[14,50609,50610],{},"①document.write('要出的内容')",[14,50612,50613],{},"向body内输出内容；",[14,50615,50616],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50618,50619],{},"②alert('要出的内容')",[14,50621,50622],{},"页面弹出警告对话框",[14,50624,50625],{},"③console.log('控制台打印')",[14,50627,50628],{},"控制台输出语法，程序员调试使用",[14,50630,50631],{},"输入log就行，自动生成：",[14,50633,50634],{},[1540,50635],{"alt":23,"src":50636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[161,50638,50639],{"start":42},[119,50640,50641],{},"输入语法：",[14,50643,50644],{},[1540,50645],{"alt":23,"src":50646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[177,50648,50650],{"id":50649},"_2116-字面量","21.1.6 字面量",[14,50652,50653],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50655,50656],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[149,50658,50660],{"id":50659},"_22-变量","2.2 变量",[161,50662,50663],{},[119,50664,50665],{},"变量声明",[14,50667,50668],{},"let 变量名",[116,50670,50671,50674],{},[119,50672,50673],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[119,50675,50676],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[161,50678,50679],{"start":42},[119,50680,50681],{},"变量赋值",[18,50683,50687],{"className":50684,"code":50685,"language":50686,"meta":23,"style":23},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[25,50688,50689,50694],{"__ignoreMap":23},[28,50690,50691],{"class":30,"line":31},[28,50692,50693],{"class":211},"let age\n",[28,50695,50696],{"class":30,"line":42},[28,50697,50698],{"class":211},"age=18\n",[161,50700,50701,50704],{"start":50},[119,50702,50703],{},"连这些（变量的初始化）：let age=18",[119,50705,50706],{},"更新变量",[14,50708,50709],{},[1540,50710],{"alt":23,"src":50711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[161,50713,50714],{"start":70},[119,50715,50716],{},"声明多个变量",[14,50718,50719],{},[1540,50720],{"alt":23,"src":50721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[161,50723,50724],{"start":78},[119,50725,50726],{},"变量命名规则与规范",[14,50728,50729],{},[1540,50730],{"alt":23,"src":50731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50733,50734],{},"遵守小驼峰！",[161,50736,50737],{"start":86},[119,50738,50739],{},"变量拓展-let和var的区别",[14,50741,50742],{},[1540,50743],{"alt":23,"src":50744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[149,50746,50748],{"id":50747},"_23-数组","2.3 数组",[18,50750,50752],{"className":50684,"code":50751,"language":50686,"meta":23,"style":23},"let arr = []\n",[25,50753,50754],{"__ignoreMap":23},[28,50755,50756],{"class":30,"line":31},[28,50757,50751],{"class":211},[14,50759,50760],{},[1540,50761],{"alt":23,"src":50762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50764,50765],{},[1540,50766],{"alt":23,"src":50767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[149,50769,50771],{"id":50770},"_24-常量","2.4 常量",[14,50773,50774],{},[1540,50775],{"alt":23,"src":50776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50778,50779],{},"const — 类似于 let ，但是变量的值无法被修改",[149,50781,50783],{"id":50782},"_25-数据类型","2.5 数据类型",[14,50785,50786],{},[1540,50787],{"alt":23,"src":50788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[161,50790,50791,50794],{},[119,50792,50793],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[119,50795,50796],{},"算数运算符：",[14,50798,50799],{},[1540,50800],{"alt":23,"src":50801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[161,50803,50804],{"start":50},[119,50805,50806],{},"数字类型（Number）",[14,50808,50809],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50811,50812],{},[1540,50813],{"alt":23,"src":50814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[161,50816,50817],{"start":58},[119,50818,50819],{},"字符串类型（string）",[14,50821,50822],{},[1540,50823],{"alt":23,"src":50824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50826,50827],{},"反引号也是可以使用的",[14,50829,50830],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50832,50833],{},"例如：document.write(\"我今年\"+age+\"岁\")",[161,50835,50836],{"start":70},[119,50837,50838],{},"模板字符串",[14,50840,50841],{},[1540,50842],{"alt":23,"src":50843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50845,50846],{},"类似于python的字符串格式化",[161,50848,50849],{"start":78},[119,50850,50851],{},"布尔类型",[14,50853,50854],{},"true 和 false",[161,50856,50857],{"start":86},[119,50858,50859],{},"未定义类型（underfined）",[14,50861,50862],{},"表示没有赋值",[14,50864,50865],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50867,50868],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[161,50870,50871],{"start":97},[119,50872,50873],{},"null（空类型）",[14,50875,50876],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50878,50879],{},"赋值了，但是内容为空",[18,50881,50883],{"className":50684,"code":50882,"language":50686,"meta":23,"style":23},"typeof null\n输出的是'object'，是一个对象数据类型\n",[25,50884,50885,50890],{"__ignoreMap":23},[28,50886,50887],{"class":30,"line":31},[28,50888,50889],{"class":211},"typeof null\n",[28,50891,50892],{"class":30,"line":42},[28,50893,50894],{"class":211},"输出的是'object'，是一个对象数据类型\n",[161,50896,50897],{"start":108},[119,50898,50899],{},"控制台检测数据类型",[14,50901,50902],{},[1540,50903],{"alt":23,"src":50904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[161,50906,50907],{"start":1407},[119,50908,50909],{},"类型转换",[14,50911,50912],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50914,50915],{},"转换方式：隐式转换和显示转换",[14,50917,50918],{},"①隐式转换",[116,50920,50921,50924,50927,50930],{},[119,50922,50923],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[119,50925,50926],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[119,50928,50929],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[119,50931,50932],{},"任何数据和字符串相加结果都是字符串",[14,50934,50935],{},"②显示转换",[14,50937,50938],{},[1540,50939],{"alt":23,"src":50940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50942,50943],{},[1540,50944],{"alt":23,"src":50945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50947,50948],{},"在输入的时候要用好隐式转换，简单写起来",[14,50950,50951],{},"let num = +prompt(’请输入数字：‘)",[14,50953,50954],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50956,50957],{},"console.log(parseInt('12.333px'))",[14,50959,50960],{},"输出为：12",[14,50962,50963],{},"console.log(parseInt('a'a'a12.333px'))",[14,50965,50966],{},"输出：NaN",[149,50968,50970],{"id":50969},"_26-运算符","2.6 运算符",[177,50972,50974],{"id":50973},"_261-赋值运算符","2.6.1 赋值运算符",[14,50976,50977],{},[1540,50978],{"alt":23,"src":50979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[177,50981,50983],{"id":50982},"_262-一元运算符","2.6.2 一元运算符",[14,50985,50986],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50988,50989],{},[1540,50990],{"alt":23,"src":50991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50993,50994],{},[1540,50995],{"alt":23,"src":50996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50998,50999],{},"两者的区别：",[14,51001,51002],{},[1540,51003],{"alt":23,"src":51004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,51006,51007],{},"前置先自加；后置后加，代码执行完之后再加",[177,51009,51011],{"id":51010},"_263-比较运算符","2.6.3 比较运算符",[14,51013,51014],{},[1540,51015],{"alt":23,"src":51016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,51018,51019],{},"比较运算符也有隐式转换",[14,51021,51022],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,51024,51025],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,51027,51028],{},"要使用三等，开发的时候",[14,51030,51031],{},"NaN不等于任何人，包括它自己",[14,51033,51034],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,51036,51037],{},"7\u002F10=0.7",[14,51039,51040],{},"最后：0.5+0.2=0.7",[14,51042,51043],{},"字符串比较，比较的是字符对应的ASCII码",[177,51045,51047],{"id":51046},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51049,51050],{},[1540,51051],{"alt":23,"src":51052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51054,51055],{},[1540,51056],{"alt":23,"src":51057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51059,51060],{},[1540,51061],{"alt":23,"src":51062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51064,51065],{},"上述题目选D",[14,51067,51068],{},"与真2假1；或真1假2",[177,51070,51072],{"id":51071},"_265-运算符优先级","2.6.5 运算符优先级",[14,51074,51075],{},[1540,51076],{"alt":23,"src":51077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51079,51080],{},"先算逻辑与，后算逻辑或",[149,51082,51084],{"id":51083},"_27-语句","2.7 语句",[14,51086,51087],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51089,51090],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51092,51093],{},[1540,51094],{"alt":23,"src":51095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51097,51098],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51100,51101],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[177,51103,51105],{"id":51104},"_271-分支语句","2.7.1 分支语句",[22075,51107,51109],{"id":51108},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51111,51112],{},"if语句单行简单的话，可以不写{}，写在一行就行",[161,51114,51115],{},[119,51116,51117],{},"单分支语句",[14,51119,51120],{},[1540,51121],{"alt":23,"src":51122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51124,51125],{},"除了0，所有数字都为真",[18,51127,51129],{"className":50684,"code":51128,"language":50686,"meta":23,"style":23},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[25,51130,51131,51136,51141,51146,51150],{"__ignoreMap":23},[28,51132,51133],{"class":30,"line":31},[28,51134,51135],{"class":211},"if（0) {\n",[28,51137,51138],{"class":30,"line":42},[28,51139,51140],{"class":211},"    let a=1\n",[28,51142,51143],{"class":30,"line":50},[28,51144,51145],{"class":211},"    alert(typeof a)\n",[28,51147,51148],{"class":30,"line":58},[28,51149,1643],{"class":211},[28,51151,51152],{"class":30,"line":70},[28,51153,51154],{"class":211},"不输出，括号为假\n",[161,51156,51157],{"start":42},[119,51158,51159],{},"双分支语句",[14,51161,51162],{},[1540,51163],{"alt":23,"src":51164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[161,51166,51167],{"start":50},[119,51168,51169],{},"多分支语句",[14,51171,51172],{},[1540,51173],{"alt":23,"src":51174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22075,51176,51178],{"id":51177},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51180,51181],{},[1540,51182],{"alt":23,"src":51183},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22075,51185,51187],{"id":51186},"_2713-switch语句","2.7.1.3 switch语句",[14,51189,51190],{},[1540,51191],{"alt":23,"src":51192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51194,51195],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[177,51197,51199],{"id":51198},"_272-循环语句","2.7.2 循环语句",[22075,51201,51203],{"id":51202},"_2721-断点演示","2.7.2.1 断点演示",[14,51205,51206],{},[1540,51207],{"alt":23,"src":51208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22075,51210,51212],{"id":51211},"_2722-while循环","2.7.2.2 while循环",[14,51214,51215],{},[1540,51216],{"alt":23,"src":51217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51219,51220],{},[1540,51221],{"alt":23,"src":51222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22075,51224,51226],{"id":51225},"_2723-for循环","2.7.2.3 for循环",[14,51228,51229],{},[1540,51230],{"alt":23,"src":51231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51233,51234],{},"for(;;) {",[14,51236,1156],{},[14,51238,51239],{},"表示无限循环",[14,51241,51242],{},[1540,51243],{"alt":23,"src":51244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22075,51246,51248],{"id":51247},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51250,51251],{},[1540,51252],{"alt":23,"src":51253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[149,51255,51257],{"id":51256},"_28-数组","2.8 数组",[177,51259,51261],{"id":51260},"_281-基础认识","2.8.1 基础认识",[14,51263,51264],{},[1540,51265],{"alt":23,"src":51266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51268,51269],{},[1540,51270],{"alt":23,"src":51271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51273,51274],{},[1540,51275],{"alt":23,"src":51276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51278,51279],{},[1540,51280],{"alt":23,"src":51281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[177,51283,51285],{"id":51284},"_282-操作数组","2.8.2 操作数组",[14,51287,51288],{},[1540,51289],{"alt":23,"src":51290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[161,51292,51293],{},[119,51294,51295],{},"添加元素",[14,51297,51298],{},[1540,51299],{"alt":23,"src":51300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51302,51303],{},"console.log(arr.push('green'))",[14,51305,51306],{},"输出结果：为新数组的长度",[14,51308,51309],{},[1540,51310],{"alt":23,"src":51311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51313,51314],{},"push用的非常多，一定要记住",[161,51316,51317],{},[119,51318,51319],{},"删除元素",[14,51321,51322],{},[1540,51323],{"alt":23,"src":51324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51326,51327],{},[1540,51328],{"alt":23,"src":51329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51331,51332],{},[1540,51333],{"alt":23,"src":51334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[177,51336,51338],{"id":51337},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[18,51340,51342],{"className":50684,"code":51341,"language":50686,"meta":23,"style":23},"\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",[25,51343,51344,51359,51375,51379,51388,51406,51430,51452,51466,51474,51481,51493,51504,51508,51512,51519,51531,51546,51559,51578,51595,51610,51622,51634,51646,51650,51654,51665,51675,51687,51699,51711,51722,51726,51730,51742,51746,51760,51764,51768,51779,51793,51805,51819,51823,51832,51841,51845,51854,51858,51867,51872,51877,51890,51918,51923,51928,51953,51958,51962,51967,51972,51987,51991,51996,52026,52038,52054,52070,52084,52089,52096,52100,52105,52118,52126,52134,52138],{"__ignoreMap":23},[28,51345,51346,51349,51353,51356],{"class":30,"line":31},[28,51347,51348],{"class":211},"\u003C!",[28,51350,51352],{"class":51351},"s9eBZ","DOCTYPE",[28,51354,51355],{"class":34}," html",[28,51357,51358],{"class":211},">\n",[28,51360,51361,51363,51365,51368,51370,51373],{"class":30,"line":42},[28,51362,1120],{"class":211},[28,51364,50686],{"class":51351},[28,51366,51367],{"class":34}," lang",[28,51369,257],{"class":211},[28,51371,51372],{"class":64},"\"en\"",[28,51374,51358],{"class":211},[28,51376,51377],{"class":30,"line":50},[28,51378,2477],{"emptyLinePlaceholder":134},[28,51380,51381,51383,51386],{"class":30,"line":58},[28,51382,1120],{"class":211},[28,51384,51385],{"class":51351},"head",[28,51387,51358],{"class":211},[28,51389,51390,51393,51396,51399,51401,51404],{"class":30,"line":70},[28,51391,51392],{"class":211},"    \u003C",[28,51394,51395],{"class":51351},"meta",[28,51397,51398],{"class":34}," charset",[28,51400,257],{"class":211},[28,51402,51403],{"class":64},"\"UTF-8\"",[28,51405,51358],{"class":211},[28,51407,51408,51410,51412,51415,51417,51420,51423,51425,51428],{"class":30,"line":78},[28,51409,51392],{"class":211},[28,51411,51395],{"class":51351},[28,51413,51414],{"class":34}," http-equiv",[28,51416,257],{"class":211},[28,51418,51419],{"class":64},"\"X-UA-Compatible\"",[28,51421,51422],{"class":34}," content",[28,51424,257],{"class":211},[28,51426,51427],{"class":64},"\"IE=edge\"",[28,51429,51358],{"class":211},[28,51431,51432,51434,51436,51438,51440,51443,51445,51447,51450],{"class":30,"line":86},[28,51433,51392],{"class":211},[28,51435,51395],{"class":51351},[28,51437,14997],{"class":34},[28,51439,257],{"class":211},[28,51441,51442],{"class":64},"\"viewport\"",[28,51444,51422],{"class":34},[28,51446,257],{"class":211},[28,51448,51449],{"class":64},"\"width=device-width, initial-scale=1.0\"",[28,51451,51358],{"class":211},[28,51453,51454,51456,51459,51462,51464],{"class":30,"line":97},[28,51455,51392],{"class":211},[28,51457,51458],{"class":51351},"title",[28,51460,51461],{"class":211},">Document\u003C\u002F",[28,51463,51458],{"class":51351},[28,51465,51358],{"class":211},[28,51467,51468,51470,51472],{"class":30,"line":108},[28,51469,51392],{"class":211},[28,51471,126],{"class":51351},[28,51473,51358],{"class":211},[28,51475,51476,51479],{"class":30,"line":1407},[28,51477,51478],{"class":51351},"        *",[28,51480,15649],{"class":211},[28,51482,51483,51486,51489,51491],{"class":30,"line":1690},[28,51484,51485],{"class":38},"            margin",[28,51487,51488],{"class":211},": ",[28,51490,401],{"class":38},[28,51492,1370],{"class":211},[28,51494,51495,51498,51500,51502],{"class":30,"line":1695},[28,51496,51497],{"class":38},"            padding",[28,51499,51488],{"class":211},[28,51501,401],{"class":38},[28,51503,1370],{"class":211},[28,51505,51506],{"class":30,"line":1701},[28,51507,2606],{"class":211},[28,51509,51510],{"class":30,"line":1706},[28,51511,2477],{"emptyLinePlaceholder":134},[28,51513,51514,51517],{"class":30,"line":1720},[28,51515,51516],{"class":34},"        .box",[28,51518,15649],{"class":211},[28,51520,51521,51524,51526,51529],{"class":30,"line":1725},[28,51522,51523],{"class":38},"            display",[28,51525,51488],{"class":211},[28,51527,51528],{"class":38},"flex",[28,51530,1370],{"class":211},[28,51532,51533,51536,51538,51541,51544],{"class":30,"line":1731},[28,51534,51535],{"class":38},"            width",[28,51537,51488],{"class":211},[28,51539,51540],{"class":38},"700",[28,51542,51543],{"class":207},"px",[28,51545,1370],{"class":211},[28,51547,51548,51551,51553,51555,51557],{"class":30,"line":1752},[28,51549,51550],{"class":38},"            height",[28,51552,51488],{"class":211},[28,51554,4050],{"class":38},[28,51556,51543],{"class":207},[28,51558,1370],{"class":211},[28,51560,51561,51564,51566,51568,51570,51573,51576],{"class":30,"line":1757},[28,51562,51563],{"class":38},"            border-left",[28,51565,51488],{"class":211},[28,51567,427],{"class":38},[28,51569,51543],{"class":207},[28,51571,51572],{"class":38}," solid",[28,51574,51575],{"class":38}," pink",[28,51577,1370],{"class":211},[28,51579,51580,51583,51585,51587,51589,51591,51593],{"class":30,"line":1771},[28,51581,51582],{"class":38},"            border-bottom",[28,51584,51488],{"class":211},[28,51586,427],{"class":38},[28,51588,51543],{"class":207},[28,51590,51572],{"class":38},[28,51592,51575],{"class":38},[28,51594,1370],{"class":211},[28,51596,51597,51599,51601,51603,51605,51608],{"class":30,"line":1776},[28,51598,51485],{"class":38},[28,51600,51488],{"class":211},[28,51602,866],{"class":38},[28,51604,51543],{"class":207},[28,51606,51607],{"class":38}," auto",[28,51609,1370],{"class":211},[28,51611,51612,51615,51617,51620],{"class":30,"line":1805},[28,51613,51614],{"class":38},"            justify-content",[28,51616,51488],{"class":211},[28,51618,51619],{"class":38},"space-around",[28,51621,1370],{"class":211},[28,51623,51624,51627,51629,51632],{"class":30,"line":1810},[28,51625,51626],{"class":38},"            align-items",[28,51628,51488],{"class":211},[28,51630,51631],{"class":38},"flex-end",[28,51633,1370],{"class":211},[28,51635,51636,51639,51641,51644],{"class":30,"line":1827},[28,51637,51638],{"class":38},"            text-align",[28,51640,51488],{"class":211},[28,51642,51643],{"class":38},"center",[28,51645,1370],{"class":211},[28,51647,51648],{"class":30,"line":1832},[28,51649,2606],{"class":211},[28,51651,51652],{"class":30,"line":1837},[28,51653,2477],{"emptyLinePlaceholder":134},[28,51655,51656,51658,51660,51663],{"class":30,"line":1842},[28,51657,51516],{"class":34},[28,51659,1170],{"class":207},[28,51661,51662],{"class":51351},"div",[28,51664,15649],{"class":211},[28,51666,51667,51669,51671,51673],{"class":30,"line":1856},[28,51668,51523],{"class":38},[28,51670,51488],{"class":211},[28,51672,51528],{"class":38},[28,51674,1370],{"class":211},[28,51676,51677,51679,51681,51683,51685],{"class":30,"line":1861},[28,51678,51535],{"class":38},[28,51680,51488],{"class":211},[28,51682,866],{"class":38},[28,51684,51543],{"class":207},[28,51686,1370],{"class":211},[28,51688,51689,51692,51694,51697],{"class":30,"line":2654},[28,51690,51691],{"class":38},"            background-color",[28,51693,51488],{"class":211},[28,51695,51696],{"class":38},"pink",[28,51698,1370],{"class":211},[28,51700,51701,51704,51706,51709],{"class":30,"line":2668},[28,51702,51703],{"class":38},"            flex-direction",[28,51705,51488],{"class":211},[28,51707,51708],{"class":38},"column",[28,51710,1370],{"class":211},[28,51712,51713,51715,51717,51720],{"class":30,"line":2676},[28,51714,51614],{"class":38},[28,51716,51488],{"class":211},[28,51718,51719],{"class":38},"space-between",[28,51721,1370],{"class":211},[28,51723,51724],{"class":30,"line":2681},[28,51725,2606],{"class":211},[28,51727,51728],{"class":30,"line":2687},[28,51729,2477],{"emptyLinePlaceholder":134},[28,51731,51732,51734,51737,51740],{"class":30,"line":2693},[28,51733,51516],{"class":34},[28,51735,51736],{"class":51351}," div",[28,51738,51739],{"class":51351}," span",[28,51741,15649],{"class":211},[28,51743,51744],{"class":30,"line":2698},[28,51745,2477],{"emptyLinePlaceholder":134},[28,51747,51748,51751,51753,51756,51758],{"class":30,"line":8025},[28,51749,51750],{"class":38},"            margin-top",[28,51752,51488],{"class":211},[28,51754,51755],{"class":38},"-20",[28,51757,51543],{"class":207},[28,51759,1370],{"class":211},[28,51761,51762],{"class":30,"line":8049},[28,51763,2606],{"class":211},[28,51765,51766],{"class":30,"line":8054},[28,51767,2477],{"emptyLinePlaceholder":134},[28,51769,51770,51772,51774,51777],{"class":30,"line":8060},[28,51771,51516],{"class":34},[28,51773,51736],{"class":51351},[28,51775,51776],{"class":51351}," h4",[28,51778,15649],{"class":211},[28,51780,51781,51784,51786,51789,51791],{"class":30,"line":8087},[28,51782,51783],{"class":38},"            margin-bottom",[28,51785,51488],{"class":211},[28,51787,51788],{"class":38},"-35",[28,51790,51543],{"class":207},[28,51792,1370],{"class":211},[28,51794,51795,51797,51799,51801,51803],{"class":30,"line":8092},[28,51796,51535],{"class":38},[28,51798,51488],{"class":211},[28,51800,566],{"class":38},[28,51802,51543],{"class":207},[28,51804,1370],{"class":211},[28,51806,51807,51810,51812,51815,51817],{"class":30,"line":8098},[28,51808,51809],{"class":38},"            margin-left",[28,51811,51488],{"class":211},[28,51813,51814],{"class":38},"-10",[28,51816,51543],{"class":207},[28,51818,1370],{"class":211},[28,51820,51821],{"class":30,"line":8110},[28,51822,2606],{"class":211},[28,51824,51825,51828,51830],{"class":30,"line":8122},[28,51826,51827],{"class":211},"    \u003C\u002F",[28,51829,126],{"class":51351},[28,51831,51358],{"class":211},[28,51833,51834,51837,51839],{"class":30,"line":8134},[28,51835,51836],{"class":211},"\u003C\u002F",[28,51838,51385],{"class":51351},[28,51840,51358],{"class":211},[28,51842,51843],{"class":30,"line":9793},[28,51844,2477],{"emptyLinePlaceholder":134},[28,51846,51847,51849,51852],{"class":30,"line":9818},[28,51848,1120],{"class":211},[28,51850,51851],{"class":51351},"body",[28,51853,51358],{"class":211},[28,51855,51856],{"class":30,"line":9841},[28,51857,2477],{"emptyLinePlaceholder":134},[28,51859,51860,51862,51865],{"class":30,"line":9865},[28,51861,51392],{"class":211},[28,51863,51864],{"class":51351},"script",[28,51866,51358],{"class":211},[28,51868,51869],{"class":30,"line":9870},[28,51870,51871],{"class":269},"        \u002F\u002F 1. 四次弹框效果\n",[28,51873,51874],{"class":30,"line":9875},[28,51875,51876],{"class":269},"        \u002F\u002F 声明一个新的数组\n",[28,51878,51879,51882,51885,51887],{"class":30,"line":9880},[28,51880,51881],{"class":207},"        let",[28,51883,51884],{"class":211}," arr ",[28,51886,257],{"class":207},[28,51888,51889],{"class":211}," []\n",[28,51891,51892,51894,51896,51899,51901,51903,51905,51907,51909,51912,51914,51916],{"class":30,"line":9889},[28,51893,3480],{"class":207},[28,51895,1736],{"class":211},[28,51897,51898],{"class":207},"let",[28,51900,9515],{"class":211},[28,51902,257],{"class":207},[28,51904,25189],{"class":38},[28,51906,9522],{"class":211},[28,51908,1666],{"class":207},[28,51910,51911],{"class":38}," 4",[28,51913,3291],{"class":211},[28,51915,2369],{"class":207},[28,51917,12519],{"class":211},[28,51919,51920],{"class":30,"line":9894},[28,51921,51922],{"class":269},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[28,51924,51925],{"class":30,"line":9900},[28,51926,51927],{"class":269},"            \u002F\u002F arr.push(num)\n",[28,51929,51930,51933,51936,51938,51941,51943,51946,51948,51951],{"class":30,"line":9921},[28,51931,51932],{"class":211},"            arr.",[28,51934,51935],{"class":34},"push",[28,51937,212],{"class":211},[28,51939,51940],{"class":34},"prompt",[28,51942,212],{"class":211},[28,51944,51945],{"class":64},"`请输入第${",[28,51947,651],{"class":211},[28,51949,51950],{"class":64},"}季度的数据:`",[28,51952,30548],{"class":211},[28,51954,51955],{"class":30,"line":9927},[28,51956,51957],{"class":269},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[28,51959,51960],{"class":30,"line":9941},[28,51961,2606],{"class":211},[28,51963,51964],{"class":30,"line":9947},[28,51965,51966],{"class":269},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[28,51968,51969],{"class":30,"line":9974},[28,51970,51971],{"class":269},"        \u002F\u002F 盒子开头\n",[28,51973,51974,51977,51980,51982,51985],{"class":30,"line":9983},[28,51975,51976],{"class":211},"        document.",[28,51978,51979],{"class":34},"write",[28,51981,212],{"class":211},[28,51983,51984],{"class":64},"` \u003Cdiv class=\"box\">`",[28,51986,218],{"class":211},[28,51988,51989],{"class":30,"line":9989},[28,51990,2477],{"emptyLinePlaceholder":134},[28,51992,51993],{"class":30,"line":9997},[28,51994,51995],{"class":269},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[28,51997,51998,52000,52002,52004,52006,52008,52010,52012,52014,52017,52020,52022,52024],{"class":30,"line":10002},[28,51999,3480],{"class":207},[28,52001,1736],{"class":211},[28,52003,51898],{"class":207},[28,52005,9515],{"class":211},[28,52007,257],{"class":207},[28,52009,4170],{"class":38},[28,52011,9522],{"class":211},[28,52013,1120],{"class":207},[28,52015,52016],{"class":211}," arr.",[28,52018,52019],{"class":38},"length",[28,52021,3291],{"class":211},[28,52023,2369],{"class":207},[28,52025,12519],{"class":211},[28,52027,52028,52031,52033,52035],{"class":30,"line":16681},[28,52029,52030],{"class":211},"            document.",[28,52032,51979],{"class":34},[28,52034,212],{"class":211},[28,52036,52037],{"class":64},"`\n",[28,52039,52040,52043,52045,52047,52049,52051],{"class":30,"line":16687},[28,52041,52042],{"class":64},"              \u003Cdiv style=\"height: ${",[28,52044,3957],{"class":211},[28,52046,1100],{"class":64},[28,52048,651],{"class":211},[28,52050,1150],{"class":64},[28,52052,52053],{"class":64},"}px;\">\n",[28,52055,52056,52059,52061,52063,52065,52067],{"class":30,"line":16710},[28,52057,52058],{"class":64},"                \u003Cspan>${",[28,52060,3957],{"class":211},[28,52062,1100],{"class":64},[28,52064,651],{"class":211},[28,52066,1150],{"class":64},[28,52068,52069],{"class":64},"}\u003C\u002Fspan>\n",[28,52071,52072,52075,52077,52079,52081],{"class":30,"line":16716},[28,52073,52074],{"class":64},"                \u003Ch4>第${",[28,52076,651],{"class":211},[28,52078,45617],{"class":207},[28,52080,25189],{"class":38},[28,52082,52083],{"class":64},"}季度\u003C\u002Fh4>\n",[28,52085,52086],{"class":30,"line":16739},[28,52087,52088],{"class":64},"              \u003C\u002Fdiv>          \n",[28,52090,52091,52094],{"class":30,"line":16753},[28,52092,52093],{"class":64},"            `",[28,52095,218],{"class":211},[28,52097,52098],{"class":30,"line":16773},[28,52099,2606],{"class":211},[28,52101,52102],{"class":30,"line":16779},[28,52103,52104],{"class":269},"        \u002F\u002F 盒子结尾\n",[28,52106,52107,52109,52111,52113,52116],{"class":30,"line":16790},[28,52108,51976],{"class":211},[28,52110,51979],{"class":34},[28,52112,212],{"class":211},[28,52114,52115],{"class":64},"` \u003C\u002Fdiv>`",[28,52117,218],{"class":211},[28,52119,52120,52122,52124],{"class":30,"line":16813},[28,52121,51827],{"class":211},[28,52123,51864],{"class":51351},[28,52125,51358],{"class":211},[28,52127,52128,52130,52132],{"class":30,"line":16835},[28,52129,51836],{"class":211},[28,52131,51851],{"class":51351},[28,52133,51358],{"class":211},[28,52135,52136],{"class":30,"line":16840},[28,52137,2477],{"emptyLinePlaceholder":134},[28,52139,52140,52142,52144],{"class":30,"line":16846},[28,52141,51836],{"class":211},[28,52143,50686],{"class":51351},[28,52145,51358],{"class":211},[177,52147,52149],{"id":52148},"_284-冒泡排序","2.8.4 冒泡排序",[18,52151,52153],{"className":50684,"code":52152,"language":50686,"meta":23,"style":23},"\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",[25,52154,52155,52165,52179,52183,52191,52206,52226,52238,52246,52250,52258,52266,52298,52331,52368,52373,52392,52397,52410,52425,52441,52445,52450,52454,52464,52473,52481,52485],{"__ignoreMap":23},[28,52156,52157,52159,52161,52163],{"class":30,"line":31},[28,52158,51348],{"class":211},[28,52160,51352],{"class":51351},[28,52162,51355],{"class":34},[28,52164,51358],{"class":211},[28,52166,52167,52169,52171,52173,52175,52177],{"class":30,"line":42},[28,52168,1120],{"class":211},[28,52170,50686],{"class":51351},[28,52172,51367],{"class":34},[28,52174,257],{"class":211},[28,52176,51372],{"class":64},[28,52178,51358],{"class":211},[28,52180,52181],{"class":30,"line":50},[28,52182,2477],{"emptyLinePlaceholder":134},[28,52184,52185,52187,52189],{"class":30,"line":58},[28,52186,1120],{"class":211},[28,52188,51385],{"class":51351},[28,52190,51358],{"class":211},[28,52192,52193,52196,52198,52200,52202,52204],{"class":30,"line":70},[28,52194,52195],{"class":211},"  \u003C",[28,52197,51395],{"class":51351},[28,52199,51398],{"class":34},[28,52201,257],{"class":211},[28,52203,51403],{"class":64},[28,52205,51358],{"class":211},[28,52207,52208,52210,52212,52214,52216,52218,52220,52222,52224],{"class":30,"line":78},[28,52209,52195],{"class":211},[28,52211,51395],{"class":51351},[28,52213,14997],{"class":34},[28,52215,257],{"class":211},[28,52217,51442],{"class":64},[28,52219,51422],{"class":34},[28,52221,257],{"class":211},[28,52223,51449],{"class":64},[28,52225,51358],{"class":211},[28,52227,52228,52230,52232,52234,52236],{"class":30,"line":86},[28,52229,52195],{"class":211},[28,52231,51458],{"class":51351},[28,52233,51461],{"class":211},[28,52235,51458],{"class":51351},[28,52237,51358],{"class":211},[28,52239,52240,52242,52244],{"class":30,"line":97},[28,52241,51836],{"class":211},[28,52243,51385],{"class":51351},[28,52245,51358],{"class":211},[28,52247,52248],{"class":30,"line":108},[28,52249,2477],{"emptyLinePlaceholder":134},[28,52251,52252,52254,52256],{"class":30,"line":1407},[28,52253,1120],{"class":211},[28,52255,51851],{"class":51351},[28,52257,51358],{"class":211},[28,52259,52260,52262,52264],{"class":30,"line":1690},[28,52261,52195],{"class":211},[28,52263,51864],{"class":51351},[28,52265,51358],{"class":211},[28,52267,52268,52271,52273,52275,52278,52280,52282,52284,52286,52288,52290,52292,52294,52296],{"class":30,"line":1695},[28,52269,52270],{"class":207},"    let",[28,52272,51884],{"class":211},[28,52274,257],{"class":207},[28,52276,52277],{"class":211}," [",[28,52279,529],{"class":38},[28,52281,12512],{"class":211},[28,52283,503],{"class":38},[28,52285,12512],{"class":211},[28,52287,282],{"class":38},[28,52289,12512],{"class":211},[28,52291,288],{"class":38},[28,52293,12512],{"class":211},[28,52295,427],{"class":38},[28,52297,33297],{"class":211},[28,52299,52300,52302,52304,52306,52308,52310,52312,52314,52316,52318,52320,52323,52325,52327,52329],{"class":30,"line":1701},[28,52301,3278],{"class":207},[28,52303,1736],{"class":211},[28,52305,51898],{"class":207},[28,52307,9515],{"class":211},[28,52309,257],{"class":207},[28,52311,4170],{"class":38},[28,52313,9522],{"class":211},[28,52315,1120],{"class":207},[28,52317,52016],{"class":211},[28,52319,52019],{"class":38},[28,52321,52322],{"class":207}," -",[28,52324,25189],{"class":38},[28,52326,3291],{"class":211},[28,52328,2369],{"class":207},[28,52330,12519],{"class":211},[28,52332,52333,52336,52338,52340,52342,52344,52346,52348,52350,52352,52354,52356,52358,52360,52362,52364,52366],{"class":30,"line":1706},[28,52334,52335],{"class":207},"      for",[28,52337,1736],{"class":211},[28,52339,51898],{"class":207},[28,52341,9577],{"class":211},[28,52343,257],{"class":207},[28,52345,4170],{"class":38},[28,52347,9584],{"class":211},[28,52349,1120],{"class":207},[28,52351,52016],{"class":211},[28,52353,52019],{"class":38},[28,52355,52322],{"class":207},[28,52357,9515],{"class":211},[28,52359,742],{"class":207},[28,52361,25189],{"class":38},[28,52363,9591],{"class":211},[28,52365,2369],{"class":207},[28,52367,12519],{"class":211},[28,52369,52370],{"class":30,"line":1720},[28,52371,52372],{"class":269},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[28,52374,52375,52377,52380,52382,52385,52387,52389],{"class":30,"line":1725},[28,52376,2574],{"class":207},[28,52378,52379],{"class":211}," (arr[j] ",[28,52381,1170],{"class":207},[28,52383,52384],{"class":211}," arr[j ",[28,52386,691],{"class":207},[28,52388,25189],{"class":38},[28,52390,52391],{"class":211},"]) {\n",[28,52393,52394],{"class":30,"line":1731},[28,52395,52396],{"class":269},"          \u002F\u002F 交换两个变量\n",[28,52398,52399,52402,52405,52407],{"class":30,"line":1752},[28,52400,52401],{"class":207},"          let",[28,52403,52404],{"class":211}," tmp ",[28,52406,257],{"class":207},[28,52408,52409],{"class":211}," arr[j]\n",[28,52411,52412,52415,52417,52419,52421,52423],{"class":30,"line":1757},[28,52413,52414],{"class":211},"          arr[j] ",[28,52416,257],{"class":207},[28,52418,52384],{"class":211},[28,52420,691],{"class":207},[28,52422,25189],{"class":38},[28,52424,33297],{"class":211},[28,52426,52427,52430,52432,52434,52436,52438],{"class":30,"line":1771},[28,52428,52429],{"class":211},"          arr[j ",[28,52431,691],{"class":207},[28,52433,25189],{"class":38},[28,52435,4520],{"class":211},[28,52437,257],{"class":207},[28,52439,52440],{"class":211}," tmp\n",[28,52442,52443],{"class":30,"line":1776},[28,52444,2606],{"class":211},[28,52446,52447],{"class":30,"line":1805},[28,52448,52449],{"class":211},"      }\n",[28,52451,52452],{"class":30,"line":1810},[28,52453,2264],{"class":211},[28,52455,52456,52459,52461],{"class":30,"line":1827},[28,52457,52458],{"class":211},"    document.",[28,52460,51979],{"class":34},[28,52462,52463],{"class":211},"(arr)\n",[28,52465,52466,52469,52471],{"class":30,"line":1832},[28,52467,52468],{"class":211},"  \u003C\u002F",[28,52470,51864],{"class":51351},[28,52472,51358],{"class":211},[28,52474,52475,52477,52479],{"class":30,"line":1837},[28,52476,51836],{"class":211},[28,52478,51851],{"class":51351},[28,52480,51358],{"class":211},[28,52482,52483],{"class":30,"line":1842},[28,52484,2477],{"emptyLinePlaceholder":134},[28,52486,52487,52489,52491],{"class":30,"line":1856},[28,52488,51836],{"class":211},[28,52490,50686],{"class":51351},[28,52492,51358],{"class":211},[14,52494,52495],{},[1540,52496],{"alt":23,"src":52497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52499,52500],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52502,52503],{},"let arr = [4, 2, 5, 1, 3]",[14,52505,52506],{},"\u002F\u002F 1.升序排列写法",[14,52508,52509],{},"arr.sort(function (a, b) {",[14,52511,52512],{},"return a - b",[14,52514,52515],{},"})",[14,52517,52518],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52520,52521],{},"\u002F\u002F 降序排列写法",[14,52523,52509],{},[14,52525,52526],{},"return b - a",[14,52528,52515],{},[14,52530,52531],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[149,52533,52535],{"id":52534},"_29-函数","2.9 函数",[14,52537,52538],{},[1540,52539],{"alt":23,"src":52540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52542,52543],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52545,52546],{},"函数的声明用function",[14,52548,52549],{},"函数里边可以嵌套函数",[177,52551,52553],{"id":52552},"_291-函数传参","2.9.1 函数传参",[14,52555,52556],{},[1540,52557],{"alt":23,"src":52558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52560,52561],{},[1540,52562],{"alt":23,"src":52563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[116,52565,52566,52569,52572,52575,52578,52581],{},[119,52567,52568],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[119,52570,52571],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[119,52573,52574],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[119,52576,52577],{},"开发中尽量保持形参和实参个数一致",[119,52579,52580],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[119,52582,52583],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52585,52586],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[177,52588,52590],{"id":52589},"_292-函数的返回值","2.9.2 函数的返回值",[14,52592,52593],{},[1540,52594],{"alt":23,"src":52595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52597,52598],{},[1540,52599],{"alt":23,"src":52600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[116,52602,52603,52606,52609,52612,52615],{},[119,52604,52605],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[119,52607,52608],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[119,52610,52611],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[119,52613,52614],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[119,52616,52617],{},"断点调试:进入函数内部看执行过程F11",[177,52619,52621],{"id":52620},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[18,52623,52625],{"className":50684,"code":52624,"language":50686,"meta":23,"style":23},"    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",[25,52626,52627,52632,52637,52641,52646],{"__ignoreMap":23},[28,52628,52629],{"class":30,"line":31},[28,52630,52631],{"class":211},"    function fn(a, b) {\n",[28,52633,52634],{"class":30,"line":42},[28,52635,52636],{"class":211},"      console.log(a + b);\n",[28,52638,52639],{"class":30,"line":50},[28,52640,2264],{"class":211},[28,52642,52643],{"class":30,"line":58},[28,52644,52645],{"class":211},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[28,52647,52648],{"class":30,"line":70},[28,52649,52650],{"class":211},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[177,52652,52654],{"id":52653},"_294-作用域","2.9.4 作用域",[116,52656,52657,52663,52668,52671,52674],{},[119,52658,52659,52660],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[359,52661,52662],{},"作用域",[119,52664,52665],{},[359,52666,52667],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[119,52669,52670],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[119,52672,52673],{},"函数内部可以直接所使用全局变量",[119,52675,52676],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52678,14710],{},[18,52680,52682],{"className":50684,"code":52681,"language":50686,"meta":23,"style":23},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[25,52683,52684,52689,52694,52698,52703,52708,52713],{"__ignoreMap":23},[28,52685,52686],{"class":30,"line":31},[28,52687,52688],{"class":211},"    function fun() {\n",[28,52690,52691],{"class":30,"line":42},[28,52692,52693],{"class":211},"      num = 10\n",[28,52695,52696],{"class":30,"line":50},[28,52697,2264],{"class":211},[28,52699,52700],{"class":30,"line":58},[28,52701,52702],{"class":211},"    fun()\n",[28,52704,52705],{"class":30,"line":70},[28,52706,52707],{"class":211},"    console.log(num)\n",[28,52709,52710],{"class":30,"line":78},[28,52711,52712],{"class":211},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[28,52714,52715],{"class":30,"line":86},[28,52716,52717],{"class":211},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[116,52719,52720,52723],{},[119,52721,52722],{},"函数内部的形参可以看做是局部变量",[119,52724,52725],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52727,52728,52729],{},"变量访问原则： ",[359,52730,52731],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[177,52733,52735],{"id":52734},"_295-匿名函数","2.9.5 匿名函数",[14,52737,52738],{},"函数可以分为具名函数和匿名函数",[14,52740,52741],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[161,52743,52744],{},[119,52745,52746],{},"函数表达式",[14,52748,52749],{},[1540,52750],{"alt":23,"src":52751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52753,52754],{},"里边也可以写参数",[14,52756,52757],{},"具名函数调用位置可以随意调整；",[14,52759,52760],{},"匿名函数函数表达式形式只能在声明后才可以使用",[161,52762,52763],{"start":42},[119,52764,52765],{},"立即执行函数",[14,52767,52768],{},[1540,52769],{"alt":23,"src":52770},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52772,52773],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52775,52776],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52778,52779],{},"(function () {})();",[14,52781,52782],{},"不要落下最后的;",[14,52784,52785],{},"立即执行函数必须要加;",[14,52787,52788],{},"分号写前写后都没问题",[14,52790,52791],{},"写前：",[14,52793,52794],{},"(function() {})()",[14,52796,52797],{},";(function () {})();",[14,52799,52800],{},"写后:",[14,52802,52803],{},"(function() {})();",[14,52805,52779],{},[14,52807,52808],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52810,52811],{},"还有一种写法：",[14,52813,52814],{},"(function(){}());",[14,52816,52817],{},"或者:",[14,52819,52820],{},"!function(){}();",[14,52822,52823],{},"立即执行函数有时候也是可以加名字的：",[14,52825,52826],{},"(function flexible(window,document) {}(window,document));",[14,52828,52829],{},"省一些调用方法",[177,52831,52833],{"id":52832},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52835,52836],{},[1540,52837],{"alt":23,"src":52838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52840,52841],{},"这样就不用非得给x,y初始化了",[14,52843,52844],{},[1540,52845],{"alt":23,"src":52846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52848,52849],{},"代码执行时先看左边",[14,52851,52852],{},"例如：console.log(false && 3+5)",[14,52854,52855],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52857,52858],{},"&&都是真时，就返回最后一个真值",[14,52860,52861],{},"console.log(11 && 22)",[14,52863,52864],{},"输出22",[14,52866,52867],{},"逻辑与：遇真则真",[14,52869,14710],{},[14,52871,52872],{},"let age=1",[14,52874,52875],{},"console.log(11 || age++)",[14,52877,52878],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52880,52881],{},"console.log(11 || 22)",[14,52883,52884],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52886,52887],{},"||如果都是假的话，就取最后一个假的值了",[177,52889,52891],{"id":52890},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52893,52894],{},"显示转换：",[14,52896,52897,52900,52901],{},[359,52898,52899],{},"记忆","： ",[359,52902,52903],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52905,52906],{},"空字符串为假，其他字符串全为真",[14,52908,52909],{},[1540,52910],{"alt":23,"src":52911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52913,52914],{},"隐式转换：",[14,52916,52917],{},[1540,52918],{"alt":23,"src":52919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52921,52922],{},"隐式转换:",[14,52924,52925],{},"null+3=3",[14,52927,52928],{},"undefined+3=NaN",[14,52930,52931],{},"null==undefined 输出true,他两个都当0看",[14,52933,52934],{},"null===undefined 输出false",[14,52936,52937],{},"undefined做任何操作都是NaN",[14,52939,52940],{},"NaN不等于NaN，NaN表示计算错误",[149,52942,52944],{"id":52943},"_210-对象","2.10 对象",[177,52946,52948],{"id":52947},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52950,52951],{},"对象也是一种数据类型，里边的数据是无序的",[14,52953,52954],{},"对象由属性和方法组成",[14,52956,52957],{},[1540,52958],{"alt":23,"src":52959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52961,52962],{},[1540,52963],{"alt":23,"src":52964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52966,52967],{},[1540,52968],{"alt":23,"src":52969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[177,52971,52973],{"id":52972},"_2102-对象属性","2.10.2 对象属性",[14,52975,52976],{},[1540,52977],{"alt":23,"src":52978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[161,52980,52981],{},[119,52982,52983],{},"查询对象",[14,52985,52986],{},"对象名.属性 goods.uname",[14,52988,52989],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52991,52992],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52994,52995],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52997,52998],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[161,53000,53001],{"start":42},[119,53002,53003],{},"重新赋值",[14,53005,53006],{},"对象名.属性=新值",[161,53008,53009],{"start":50},[119,53010,53011],{},"增加新数据",[14,53013,53006],{},[161,53015,53016],{"start":58},[119,53017,53018],{},"删除对象中的属性",[14,53020,53021],{},"delete 对象名.属性",[177,53023,53025],{"id":53024},"_2103-对象方法","2.10.3 对象方法",[14,53027,53028],{},[1540,53029],{"alt":23,"src":53030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,53032,53033],{},"后边跟的是匿名函数",[14,53035,53036],{},"对象外面的叫函数；对象内部的叫方法",[14,53038,53039],{},[1540,53040],{"alt":23,"src":53041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[177,53043,53045],{"id":53044},"_2104-遍历对象","2.10.4 遍历对象",[14,53047,53048],{},"理解为加括号的python字典遍历",[14,53050,53051],{},[1540,53052],{"alt":23,"src":53053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53055,53056],{},"k是字符串类型",[14,53058,53059],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[18,53061,53063],{"className":50684,"code":53062,"language":50686,"meta":23,"style":23},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[25,53064,53065,53070,53075,53080,53085],{"__ignoreMap":23},[28,53066,53067],{"class":30,"line":31},[28,53068,53069],{"class":211},"   let arr = [1, 2, 3]\n",[28,53071,53072],{"class":30,"line":42},[28,53073,53074],{"class":211},"    for (let k in arr) {\n",[28,53076,53077],{"class":30,"line":50},[28,53078,53079],{"class":211},"      console.log(k)\n",[28,53081,53082],{"class":30,"line":58},[28,53083,53084],{"class":211},"      console.log(arr[k])\n",[28,53086,53087],{"class":30,"line":70},[28,53088,2264],{"class":211},[14,53090,53091],{},[1540,53092],{"alt":23,"src":53093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53095,53096],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53098,53099],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53101,53102],{},"for in 得到的k是属性名",[51864,53104,53105],{},"\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,53107,53108],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[177,53110,53112],{"id":53111},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53114,53115],{},"数组中放对象信息",[18,53117,53121],{"className":53118,"code":53119,"language":53120,"meta":23,"style":23},"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",[25,53122,53123,53131,53136,53141,53146,53151,53156,53161,53166,53171,53176,53181,53186,53190,53194],{"__ignoreMap":23},[28,53124,53125,53127,53129],{"class":30,"line":31},[28,53126,1120],{"class":211},[28,53128,51864],{"class":51351},[28,53130,51358],{"class":211},[28,53132,53133],{"class":30,"line":42},[28,53134,53135],{"class":211},"    let students = [\n",[28,53137,53138],{"class":30,"line":50},[28,53139,53140],{"class":211},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[28,53142,53143],{"class":30,"line":58},[28,53144,53145],{"class":211},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[28,53147,53148],{"class":30,"line":70},[28,53149,53150],{"class":211},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[28,53152,53153],{"class":30,"line":78},[28,53154,53155],{"class":211},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[28,53157,53158],{"class":30,"line":86},[28,53159,53160],{"class":211},"    ]\n",[28,53162,53163],{"class":30,"line":97},[28,53164,53165],{"class":211},"    for (let i = 0; i \u003C students.length; i++) {\n",[28,53167,53168],{"class":30,"line":108},[28,53169,53170],{"class":211},"      for (let k in students[i]) {\n",[28,53172,53173],{"class":30,"line":1407},[28,53174,53175],{"class":211},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[28,53177,53178],{"class":30,"line":1690},[28,53179,53180],{"class":211},"        \u002F\u002F输出每个人的名字：\n",[28,53182,53183],{"class":30,"line":1695},[28,53184,53185],{"class":211},"        \u002F\u002Fconsole.log(students[i].name)\n",[28,53187,53188],{"class":30,"line":1701},[28,53189,52449],{"class":211},[28,53191,53192],{"class":30,"line":1706},[28,53193,2264],{"class":211},[28,53195,53196,53198,53200],{"class":30,"line":1720},[28,53197,52468],{"class":211},[28,53199,51864],{"class":51351},[28,53201,51358],{"class":211},[177,53203,53205],{"id":53204},"_2106-内置对象","2.10.6 内置对象",[14,53207,53208],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[161,53210,53211],{},[119,53212,53213],{},"数学对象Math",[14,53215,53216],{},[1540,53217],{"alt":23,"src":53218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53220,53221],{},[448,53222,53225],{"href":53223,"rel":53224},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23940],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53227,53228],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53230,53231],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53233,53234],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53236,53237],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53239,53240],{},"null属于对象数据类型",[161,53242,53243],{"start":42},[119,53244,53245],{},"生成任意范围随机数",[14,53247,53248],{},[1540,53249],{"alt":23,"src":53250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53252,53253],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53255,53256],{},"乘以几就取不到几",[14,53258,53259],{},"取数组中的随机元素：",[14,53261,53262],{},"let arr = ['red', 'green', 'blue']",[14,53264,53265],{},"let random = Math.floor(Math.random() * arr.length)",[14,53267,53268],{},"console.log(arr[random])",[14,53270,53271],{},"这个函数得到的是全闭区间",[14,53273,53274],{},"function getRandom(N, M) {",[14,53276,53277],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53279,1156],{},[14,53281,53282],{},"console.log(getRandom(4, 8))",[177,53284,53286],{"id":53285},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53288,53289],{},[1540,53290],{"alt":23,"src":53291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53293,53294],{},[1540,53295],{"alt":23,"src":53296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53298,53299],{},[1540,53300],{"alt":23,"src":53301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53303,53304],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53306,53307],{},[1540,53308],{"alt":23,"src":53309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53311,53312],{},[1540,53313],{"alt":23,"src":53314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53316,53317],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53319,53320],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53322,53323],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[126,53325,53326],{},"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":23,"searchDepth":42,"depth":42,"links":53328},[53329,53337,53338,53339,53340,53341,53348,53352,53358,53367],{"id":50519,"depth":42,"text":50520,"children":53330},[53331,53332,53333,53334,53335,53336],{"id":50523,"depth":50,"text":50524},{"id":50540,"depth":50,"text":50541},{"id":50580,"depth":50,"text":50581},{"id":50592,"depth":50,"text":50593},{"id":50601,"depth":50,"text":50602},{"id":50649,"depth":50,"text":50650},{"id":50659,"depth":42,"text":50660},{"id":50747,"depth":42,"text":50748},{"id":50770,"depth":42,"text":50771},{"id":50782,"depth":42,"text":50783},{"id":50969,"depth":42,"text":50970,"children":53342},[53343,53344,53345,53346,53347],{"id":50973,"depth":50,"text":50974},{"id":50982,"depth":50,"text":50983},{"id":51010,"depth":50,"text":51011},{"id":51046,"depth":50,"text":51047},{"id":51071,"depth":50,"text":51072},{"id":51083,"depth":42,"text":51084,"children":53349},[53350,53351],{"id":51104,"depth":50,"text":51105},{"id":51198,"depth":50,"text":51199},{"id":51256,"depth":42,"text":51257,"children":53353},[53354,53355,53356,53357],{"id":51260,"depth":50,"text":51261},{"id":51284,"depth":50,"text":51285},{"id":51337,"depth":50,"text":51338},{"id":52148,"depth":50,"text":52149},{"id":52534,"depth":42,"text":52535,"children":53359},[53360,53361,53362,53363,53364,53365,53366],{"id":52552,"depth":50,"text":52553},{"id":52589,"depth":50,"text":52590},{"id":52620,"depth":50,"text":52621},{"id":52653,"depth":50,"text":52654},{"id":52734,"depth":50,"text":52735},{"id":52832,"depth":50,"text":52833},{"id":52890,"depth":50,"text":52891},{"id":52943,"depth":42,"text":52944,"children":53368},[53369,53370,53371,53372,53373,53374,53375],{"id":52947,"depth":50,"text":52948},{"id":52972,"depth":50,"text":52973},{"id":53024,"depth":50,"text":53025},{"id":53044,"depth":50,"text":53045},{"id":53111,"depth":50,"text":53112},{"id":53204,"depth":50,"text":53205},{"id":53285,"depth":50,"text":53286},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50511,"description":131},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53382,"title":53383,"body":53384,"description":131,"extension":132,"meta":76724,"navigation":134,"path":76725,"seo":76726,"stem":76727,"__hash__":76728},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53385,"toc":76664},[53386,53389,53392,53395,53400,53403,53406,53409,53413,53417,53423,53428,53436,53443,53446,53450,53455,53460,53465,53468,53471,53482,53485,53489,53492,53495,53500,53505,53510,53513,53516,53608,53611,53616,53619,53624,53627,53630,53635,53638,53643,53647,53650,53664,53668,53673,53676,53679,53683,53688,53691,53695,53699,53704,53708,53713,53716,53719,53722,53725,53728,53731,53736,53741,53769,53772,53775,53778,53783,53786,53789,53792,53795,53799,53828,53832,53837,53842,53845,53848,53851,53856,53971,53976,53981,54142,54147,54150,54154,54159,54164,54167,54170,54173,54176,54179,54182,54185,54188,54191,54194,54197,54200,54203,54206,54208,54211,54214,54217,54222,54226,54623,54626,54632,54636,54641,55923,55928,55931,55934,55937,55942,57138,57142,57148,57153,57156,57161,57166,57170,57174,57179,57182,57187,57190,57193,57197,58105,58108,58112,58333,58336,58339,58342,58568,58571,58795,58798,58802,58807,58810,58813,59041,59044,59077,59080,59084,59089,59093,59096,59099,59102,59105,59108,59111,59114,59119,60399,60403,60406,61499,61503,61506,61509,61512,61515,61519,61522,61525,61527,61535,63016,63020,63023,63026,63029,63238,63241,63245,63249,63254,63259,63262,63265,63270,63274,63279,63282,63391,63395,63400,63405,63408,63411,63415,63420,63425,63430,63433,63436,63447,63450,63455,63460,63463,63466,63539,63543,63548,63551,63553,63564,63568,63573,64899,64902,64905,64908,64910,64913,64916,64919,64922,64925,64928,64931,64934,64937,64940,64943,64946,64948,64950,64953,64957,66051,66054,66057,66073,66087,66090,66095,66101,66106,66110,66114,66119,66123,66128,66570,66575,66578,66582,66587,66590,66593,66597,66602,66606,66611,66616,66620,66625,66630,66633,66638,66643,66647,66652,66657,66761,66764,66768,66773,67139,67142,67145,67148,67151,67154,67157,67160,67163,68459,68463,68468,68473,68476,68479,68482,68485,68487,68492,68497,68500,68504,68509,68514,68519,68522,68525,68528,68531,68534,68539,68542,68546,68551,68556,68560,68565,68568,68573,68576,68579,68582,68585,68588,68593,68596,68599,68602,68605,68609,68614,68617,68621,68626,68629,68632,68636,68665,68668,68672,68676,68681,68685,68690,68693,68696,68699,68702,68705,68708,68711,68714,68717,68720,68723,68726,68729,68732,68736,68741,68746,68749,68753,68757,68762,68765,68769,68772,68775,68780,68785,68790,68795,68800,68803,68806,68811,68816,68820,68825,68828,68833,68836,68839,68842,68845,68850,68853,68862,68866,68871,68874,68877,68881,68884,68889,68893,68896,68902,68908,68912,68938,68941,70502,70505,71001,71004,71009,71014,71019,71023,71028,71033,71038,71042,71047,71050,71053,71056,71059,71063,71066,71071,71074,71079,71083,71088,71091,71096,71101,71106,71109,71112,71117,71122,71125,71128,71132,71135,71140,71143,71148,71151,71156,71161,71166,71169,71174,71239,71242,71253,71257,71262,71434,71438,71443,71446,71449,71452,71456,71467,71471,71474,71479,71484,71487,71490,71493,71496,71499,71501,71504,71507,71510,71515,71518,71523,71526,71530,71533,71536,71550,71554,71557,71612,71617,71620,71623,71628,71631,71635,71640,71770,71774,71779,71784,71865,71870,71874,71877,71882,71887,71893,71896,71899,71902,71906,71911,71914,71925,71929,71946,74993,74997,75000,75003,75006,75027,75031,75034,75042,75045,75050,75053,75056,75061,75066,75070,75091,75095,75100,75103,75106,75109,75112,75116,75121,75124,75128,75133,75136,75141,75144,75149,75152,75157,76360,76364,76369,76372,76377,76661],[10,53387,53383],{"id":53388},"_3web-apis",[14,53390,53391],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53393,53394],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53396,53397],{},[1540,53398],{"alt":23,"src":53399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53401,53402],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53404,53405],{},"建议数组和对象使用 const 来声明",[14,53407,53408],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[149,53410,53412],{"id":53411},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[177,53414,53416],{"id":53415},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53418,53419,53422],{},[25,53420,53421],{},"document"," = HTML 文件解析后的对象化表示；",[14,53424,53425,53427],{},[25,53426,53421],{}," ≠ HTML 文件本身",[14,53429,53430,53435],{},[359,53431,53432],{},[25,53433,53434],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53437,53438,53442],{},[359,53439,53440],{},[25,53441,53421],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53444,53445],{},"document实际上为window.document的简写",[177,53447,53449],{"id":53448},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53451,53452],{},[1540,53453],{"alt":23,"src":53454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53456,53457],{},[1540,53458],{"alt":23,"src":53459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53461,53462],{},[1540,53463],{"alt":23,"src":53464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53466,53467],{},"console.dir()",[14,53469,53470],{},"dir用来打印对象",[116,53472,53473,53476,53479],{},[119,53474,53475],{},"任何一个标签，都是一个对象",[119,53477,53478],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[119,53480,53481],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53483,53484],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[177,53486,53488],{"id":53487},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53490,53491],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53493,53494],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53496,53497],{},[359,53498,53499],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[161,53501,53502],{},[119,53503,53504],{},"利用CSS选择器来获取标签元素",[14,53506,53507],{},[1540,53508],{"alt":23,"src":53509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53511,53512],{},"里边的选择器必须必须加引号！！！",[14,53514,53515],{},"只选择第一个元素",[18,53517,53519],{"className":53118,"code":53518,"language":53120,"meta":23,"style":23},"\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",[25,53520,53521,53529,53550,53569,53577,53582,53587,53592,53600],{"__ignoreMap":23},[28,53522,53523,53525,53527],{"class":30,"line":31},[28,53524,1120],{"class":211},[28,53526,51851],{"class":51351},[28,53528,51358],{"class":211},[28,53530,53531,53533,53535,53538,53540,53543,53546,53548],{"class":30,"line":42},[28,53532,52195],{"class":211},[28,53534,51662],{"class":51351},[28,53536,53537],{"class":34}," class",[28,53539,257],{"class":211},[28,53541,53542],{"class":64},"\"box\"",[28,53544,53545],{"class":211},">123\u003C\u002F",[28,53547,51662],{"class":51351},[28,53549,51358],{"class":211},[28,53551,53552,53554,53556,53558,53560,53562,53565,53567],{"class":30,"line":50},[28,53553,52195],{"class":211},[28,53555,51662],{"class":51351},[28,53557,53537],{"class":34},[28,53559,257],{"class":211},[28,53561,53542],{"class":64},[28,53563,53564],{"class":211},">456\u003C\u002F",[28,53566,51662],{"class":51351},[28,53568,51358],{"class":211},[28,53570,53571,53573,53575],{"class":30,"line":58},[28,53572,52195],{"class":211},[28,53574,51864],{"class":51351},[28,53576,51358],{"class":211},[28,53578,53579],{"class":30,"line":70},[28,53580,53581],{"class":211},"    \u002F\u002F 1.获取匹配的第一个元素\n",[28,53583,53584],{"class":30,"line":78},[28,53585,53586],{"class":211},"    const box = document.querySelector('div')\n",[28,53588,53589],{"class":30,"line":86},[28,53590,53591],{"class":211},"    console.dir(box)\n",[28,53593,53594,53596,53598],{"class":30,"line":97},[28,53595,52468],{"class":211},[28,53597,51864],{"class":51351},[28,53599,51358],{"class":211},[28,53601,53602,53604,53606],{"class":30,"line":108},[28,53603,51836],{"class":211},[28,53605,51851],{"class":51351},[28,53607,51358],{"class":211},[14,53609,53610],{},"只选123，不选456",[14,53612,53613],{},[1540,53614],{"alt":23,"src":53615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53617,53618],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53620,53621],{},[1540,53622],{"alt":23,"src":53623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53625,53626],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53628,53629],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[161,53631,53632],{"start":42},[119,53633,53634],{},"其他方法来获取标签元素",[14,53636,53637],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53639,53640],{},[1540,53641],{"alt":23,"src":53642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[177,53644,53646],{"id":53645},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53648,53649],{},"设置修改DOM元素内容有两种方式：",[116,53651,53652,53655,53658,53661],{},[119,53653,53654],{},"元素.innerText=''",[119,53656,53657],{},"元素.innerHTML=''",[119,53659,53660],{},"不写字符串输出数字也是可以的",[119,53662,53663],{},"元素.innerHtml=1",[22075,53665,53667],{"id":53666},"_3131-innertext","3.1.3.1 innerText",[14,53669,53670],{},[1540,53671],{"alt":23,"src":53672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53674,53675],{},"思路：实现了修改盒子中的内容！",[14,53677,53678],{},"它只显示纯文本，不解析标签",[22075,53680,53682],{"id":53681},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53684,53685],{},[1540,53686],{"alt":23,"src":53687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53689,53690],{},"相比于innerText，他的强大之处在于可以解析标签",[177,53692,53694],{"id":53693},"_314-操作元素属性","3.1.4 操作元素属性",[22075,53696,53698],{"id":53697},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53700,53701],{},[1540,53702],{"alt":23,"src":53703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22075,53705,53707],{"id":53706},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53709,53710],{},[1540,53711],{"alt":23,"src":53712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53714,53715],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53717,53718],{},"div.style.backgroundColor = 'hotpink'",[14,53720,53721],{},"如果按照css的写法，-表示减，就会出错",[14,53723,53724],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53726,53727],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53729,53730],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53732,53733],{},[1540,53734],{"alt":23,"src":53735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53737,53738],{},[1540,53739],{"alt":23,"src":53740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[161,53742,53743,53746,53749,53752,53755,53758],{},[119,53744,53745],{},"className这个方式就是修改很多样式的时候来使用的！",[119,53747,53748],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[119,53750,53751],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[119,53753,53754],{},"className为属性名，如果还用class的话就导致与关键字冲突",[119,53756,53757],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[119,53759,53760,53761,53766],{},"解析标签的时候就变为了",[51662,53762],{"className":53763},[53764,53765],"nav","box",[53767,53768],"br",{},[14,53770,53771],{},"例子：",[51662,53773],{"className":53774},[53764],[51864,53776,53777],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53779,53780],{},[1540,53781],{"alt":23,"src":53782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53784,53785],{},"追加和删除类名用classList",[14,53787,53788],{},"常用于类似于开关的操作",[14,53790,53791],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53793,53794],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22075,53796,53798],{"id":53797},"_3143-牢记点","3.1.4.3 牢记点",[161,53800,53801,53804,53807,53810,53813,53816,53819,53822,53825],{},[119,53802,53803],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[119,53805,53806],{},"使用style属性操作css时不要忘记引号",[119,53808,53809],{},"使用className或者classList时也不要忘记引号",[119,53811,53812],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[119,53814,53815],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[119,53817,53818],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[119,53820,53821],{},"若： let arr=['1','2',3] arr[0]=1",[119,53823,53824],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[119,53826,53827],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[177,53829,53831],{"id":53830},"_315-操作表单元素","3.1.5 操作表单元素",[161,53833,53834],{},[119,53835,53836],{},"天生的属性",[14,53838,53839],{},[1540,53840],{"alt":23,"src":53841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53843,53844],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53846,53847],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53849,53850],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53852,53853],{},[1540,53854],{"alt":23,"src":53855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[18,53857,53859],{"className":50684,"code":53858,"language":50686,"meta":23,"style":23},"在复选框中如果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",[25,53860,53861,53866,53898,53903,53908,53913,53918,53922,53927,53932,53949,53961,53966],{"__ignoreMap":23},[28,53862,53863],{"class":30,"line":31},[28,53864,53865],{"class":211},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[28,53867,53868,53870,53873,53876,53878,53881,53883,53885,53887,53889,53891,53893,53896],{"class":30,"line":42},[28,53869,1120],{"class":211},[28,53871,53872],{"class":51351},"input",[28,53874,53875],{"class":34}," type",[28,53877,257],{"class":211},[28,53879,53880],{"class":64},"\"checkbox\"",[28,53882,14997],{"class":34},[28,53884,257],{"class":211},[28,53886,7729],{"class":64},[28,53888,15036],{"class":34},[28,53890,257],{"class":211},[28,53892,7729],{"class":64},[28,53894,53895],{"class":34}," checked",[28,53897,51358],{"class":211},[28,53899,53900],{"class":30,"line":50},[28,53901,53902],{"class":211},"不选的话：\n",[28,53904,53905],{"class":30,"line":58},[28,53906,53907],{"class":211},"const input = document.querySelector('input')\n",[28,53909,53910],{"class":30,"line":70},[28,53911,53912],{"class":211},"input.checked=false\n",[28,53914,53915],{"class":30,"line":78},[28,53916,53917],{"class":211},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[28,53919,53920],{"class":30,"line":86},[28,53921,2477],{"emptyLinePlaceholder":134},[28,53923,53924],{"class":30,"line":97},[28,53925,53926],{"class":211},"禁用按钮：\n",[28,53928,53929],{"class":30,"line":108},[28,53930,53931],{"class":211},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[28,53933,53934,53936,53939,53942,53945,53947],{"class":30,"line":1407},[28,53935,1120],{"class":211},[28,53937,53938],{"class":51351},"button",[28,53940,53941],{"class":34}," disabled",[28,53943,53944],{"class":211},">点击\u003C\u002F",[28,53946,53938],{"class":51351},[28,53948,51358],{"class":211},[28,53950,53951,53953,53955,53957,53959],{"class":30,"line":1690},[28,53952,1120],{"class":211},[28,53954,53938],{"class":51351},[28,53956,53944],{"class":211},[28,53958,53938],{"class":51351},[28,53960,51358],{"class":211},[28,53962,53963],{"class":30,"line":1695},[28,53964,53965],{"class":211},"const bt = document.querySelector('button')\n",[28,53967,53968],{"class":30,"line":1701},[28,53969,53970],{"class":211},"bt.disabled = false\n",[161,53972,53973],{"start":42},[119,53974,53975],{},"自定义属性",[14,53977,53978],{},[1540,53979],{"alt":23,"src":53980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[18,53982,53984],{"className":53118,"code":53983,"language":53120,"meta":23,"style":23},"\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",[25,53985,53986,53994,54022,54041,54060,54079,54098,54106,54111,54116,54121,54126,54134],{"__ignoreMap":23},[28,53987,53988,53990,53992],{"class":30,"line":31},[28,53989,1120],{"class":211},[28,53991,51851],{"class":51351},[28,53993,51358],{"class":211},[28,53995,53996,53998,54000,54003,54005,54007,54010,54012,54015,54018,54020],{"class":30,"line":42},[28,53997,52195],{"class":211},[28,53999,51662],{"class":51351},[28,54001,54002],{"class":34}," data-id",[28,54004,257],{"class":211},[28,54006,3755],{"class":64},[28,54008,54009],{"class":34}," data-spm",[28,54011,257],{"class":211},[28,54013,54014],{"class":64},"\"我不知道\"",[28,54016,54017],{"class":211},">1\u003C\u002F",[28,54019,51662],{"class":51351},[28,54021,51358],{"class":211},[28,54023,54024,54026,54028,54030,54032,54034,54037,54039],{"class":30,"line":50},[28,54025,52195],{"class":211},[28,54027,51662],{"class":51351},[28,54029,54002],{"class":34},[28,54031,257],{"class":211},[28,54033,3778],{"class":64},[28,54035,54036],{"class":211},">2\u003C\u002F",[28,54038,51662],{"class":51351},[28,54040,51358],{"class":211},[28,54042,54043,54045,54047,54049,54051,54053,54056,54058],{"class":30,"line":58},[28,54044,52195],{"class":211},[28,54046,51662],{"class":51351},[28,54048,54002],{"class":34},[28,54050,257],{"class":211},[28,54052,3791],{"class":64},[28,54054,54055],{"class":211},">3\u003C\u002F",[28,54057,51662],{"class":51351},[28,54059,51358],{"class":211},[28,54061,54062,54064,54066,54068,54070,54072,54075,54077],{"class":30,"line":70},[28,54063,52195],{"class":211},[28,54065,51662],{"class":51351},[28,54067,54002],{"class":34},[28,54069,257],{"class":211},[28,54071,3804],{"class":64},[28,54073,54074],{"class":211},">4\u003C\u002F",[28,54076,51662],{"class":51351},[28,54078,51358],{"class":211},[28,54080,54081,54083,54085,54087,54089,54091,54094,54096],{"class":30,"line":78},[28,54082,52195],{"class":211},[28,54084,51662],{"class":51351},[28,54086,54002],{"class":34},[28,54088,257],{"class":211},[28,54090,3825],{"class":64},[28,54092,54093],{"class":211},">5\u003C\u002F",[28,54095,51662],{"class":51351},[28,54097,51358],{"class":211},[28,54099,54100,54102,54104],{"class":30,"line":86},[28,54101,52195],{"class":211},[28,54103,51864],{"class":51351},[28,54105,51358],{"class":211},[28,54107,54108],{"class":30,"line":97},[28,54109,54110],{"class":211},"    const one = document.querySelector('div')\n",[28,54112,54113],{"class":30,"line":108},[28,54114,54115],{"class":211},"    console.log(one.dataset)\n",[28,54117,54118],{"class":30,"line":1407},[28,54119,54120],{"class":211},"    console.log(one.dataset.id)\n",[28,54122,54123],{"class":30,"line":1690},[28,54124,54125],{"class":211},"    console.log(one.dataset.spm)\n",[28,54127,54128,54130,54132],{"class":30,"line":1695},[28,54129,52468],{"class":211},[28,54131,51864],{"class":51351},[28,54133,51358],{"class":211},[28,54135,54136,54138,54140],{"class":30,"line":1701},[28,54137,51836],{"class":211},[28,54139,51851],{"class":51351},[28,54141,51358],{"class":211},[14,54143,54144],{},[1540,54145],{"alt":23,"src":54146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54148,54149],{},"document.querySelector选择的是第一个对象（元素）",[177,54151,54153],{"id":54152},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54155,54156],{},[1540,54157],{"alt":23,"src":54158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54160,54161],{},[1540,54162],{"alt":23,"src":54163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54165,54166],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51864,54168,54169],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54171,54172],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51864,54174,54175],{},"\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,54177,54178],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54180,54181],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54183,54184],{},"单位为毫秒！！！",[14,54186,54187],{},"可以搭配匿名函数来用！！！",[14,54189,54190],{},"setInterval(function () {",[14,54192,54193],{},"alert('两秒执行一次')",[14,54195,54196],{},"}, 2000)",[14,54198,54199],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54201,54202],{},"function fn() {",[14,54204,54205],{},"document.write(1)",[14,54207,1156],{},[14,54209,54210],{},"setInterval(fn, 1000)",[14,54212,54213],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54215,54216],{},"setInterval('fn()', 1000)",[14,54218,54219],{},[1540,54220],{"alt":23,"src":54221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22075,54223,54225],{"id":54224},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[18,54227,54229],{"className":50684,"code":54228,"language":50686,"meta":23,"style":23},"\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",[25,54230,54231,54241,54255,54259,54267,54281,54301,54313,54321,54325,54333,54370,54375,54380,54385,54393,54401,54423,54431,54436,54458,54463,54468,54479,54484,54504,54512,54527,54542,54553,54558,54568,54578,54582,54591,54595,54603,54611,54615],{"__ignoreMap":23},[28,54232,54233,54235,54237,54239],{"class":30,"line":31},[28,54234,51348],{"class":211},[28,54236,51352],{"class":51351},[28,54238,51355],{"class":34},[28,54240,51358],{"class":211},[28,54242,54243,54245,54247,54249,54251,54253],{"class":30,"line":42},[28,54244,1120],{"class":211},[28,54246,50686],{"class":51351},[28,54248,51367],{"class":34},[28,54250,257],{"class":211},[28,54252,51372],{"class":64},[28,54254,51358],{"class":211},[28,54256,54257],{"class":30,"line":50},[28,54258,2477],{"emptyLinePlaceholder":134},[28,54260,54261,54263,54265],{"class":30,"line":58},[28,54262,1120],{"class":211},[28,54264,51385],{"class":51351},[28,54266,51358],{"class":211},[28,54268,54269,54271,54273,54275,54277,54279],{"class":30,"line":70},[28,54270,52195],{"class":211},[28,54272,51395],{"class":51351},[28,54274,51398],{"class":34},[28,54276,257],{"class":211},[28,54278,51403],{"class":64},[28,54280,51358],{"class":211},[28,54282,54283,54285,54287,54289,54291,54293,54295,54297,54299],{"class":30,"line":78},[28,54284,52195],{"class":211},[28,54286,51395],{"class":51351},[28,54288,14997],{"class":34},[28,54290,257],{"class":211},[28,54292,51442],{"class":64},[28,54294,51422],{"class":34},[28,54296,257],{"class":211},[28,54298,51449],{"class":64},[28,54300,51358],{"class":211},[28,54302,54303,54305,54307,54309,54311],{"class":30,"line":86},[28,54304,52195],{"class":211},[28,54306,51458],{"class":51351},[28,54308,51461],{"class":211},[28,54310,51458],{"class":51351},[28,54312,51358],{"class":211},[28,54314,54315,54317,54319],{"class":30,"line":97},[28,54316,51836],{"class":211},[28,54318,51385],{"class":51351},[28,54320,51358],{"class":211},[28,54322,54323],{"class":30,"line":108},[28,54324,2477],{"emptyLinePlaceholder":134},[28,54326,54327,54329,54331],{"class":30,"line":1407},[28,54328,1120],{"class":211},[28,54330,51851],{"class":51351},[28,54332,51358],{"class":211},[28,54334,54335,54337,54340,54342,54344,54346,54348,54350,54352,54355,54357,54360,54363,54365,54368],{"class":30,"line":1690},[28,54336,52195],{"class":211},[28,54338,54339],{"class":51351},"textarea",[28,54341,14997],{"class":34},[28,54343,257],{"class":211},[28,54345,7729],{"class":64},[28,54347,15036],{"class":34},[28,54349,257],{"class":211},[28,54351,7729],{"class":64},[28,54353,54354],{"class":34}," cols",[28,54356,257],{"class":211},[28,54358,54359],{"class":64},"\"30\"",[28,54361,54362],{"class":34}," rows",[28,54364,257],{"class":211},[28,54366,54367],{"class":64},"\"10\"",[28,54369,51358],{"class":211},[28,54371,54372],{"class":30,"line":1695},[28,54373,54374],{"class":211},"        用户注册协议\n",[28,54376,54377],{"class":30,"line":1701},[28,54378,54379],{"class":211},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[28,54381,54382],{"class":30,"line":1706},[28,54383,54384],{"class":211},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[28,54386,54387,54389,54391],{"class":30,"line":1720},[28,54388,51827],{"class":211},[28,54390,54339],{"class":51351},[28,54392,51358],{"class":211},[28,54394,54395,54397,54399],{"class":30,"line":1725},[28,54396,52195],{"class":211},[28,54398,53767],{"class":51351},[28,54400,51358],{"class":211},[28,54402,54403,54405,54407,54409,54411,54414,54416,54419,54421],{"class":30,"line":1731},[28,54404,52195],{"class":211},[28,54406,53938],{"class":51351},[28,54408,53537],{"class":34},[28,54410,257],{"class":211},[28,54412,54413],{"class":64},"\"btn\"",[28,54415,53941],{"class":34},[28,54417,54418],{"class":211},">我已经阅读用户协议(5)\u003C\u002F",[28,54420,53938],{"class":51351},[28,54422,51358],{"class":211},[28,54424,54425,54427,54429],{"class":30,"line":1752},[28,54426,52195],{"class":211},[28,54428,51864],{"class":51351},[28,54430,51358],{"class":211},[28,54432,54433],{"class":30,"line":1757},[28,54434,54435],{"class":269},"    \u002F\u002F 1. 获取元素\n",[28,54437,54438,54440,54443,54445,54448,54451,54453,54456],{"class":30,"line":1771},[28,54439,11298],{"class":207},[28,54441,54442],{"class":38}," btn",[28,54444,13641],{"class":207},[28,54446,54447],{"class":211}," document.",[28,54449,54450],{"class":34},"querySelector",[28,54452,212],{"class":211},[28,54454,54455],{"class":64},"'.btn'",[28,54457,218],{"class":211},[28,54459,54460],{"class":30,"line":1776},[28,54461,54462],{"class":269},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[28,54464,54465],{"class":30,"line":1805},[28,54466,54467],{"class":269},"    \u002F\u002F 2. 倒计时\n",[28,54469,54470,54472,54474,54476],{"class":30,"line":1810},[28,54471,52270],{"class":207},[28,54473,9515],{"class":211},[28,54475,257],{"class":207},[28,54477,54478],{"class":38}," 5\n",[28,54480,54481],{"class":30,"line":1827},[28,54482,54483],{"class":269},"    \u002F\u002F 2.1 开启定时器\n",[28,54485,54486,54488,54491,54493,54496,54498,54501],{"class":30,"line":1832},[28,54487,52270],{"class":207},[28,54489,54490],{"class":211}," n ",[28,54492,257],{"class":207},[28,54494,54495],{"class":34}," setInterval",[28,54497,212],{"class":211},[28,54499,54500],{"class":207},"function",[28,54502,54503],{"class":211}," () {\n",[28,54505,54506,54509],{"class":30,"line":1837},[28,54507,54508],{"class":211},"      i",[28,54510,54511],{"class":207},"--\n",[28,54513,54514,54517,54519,54522,54524],{"class":30,"line":1842},[28,54515,54516],{"class":211},"      btn.innerHTML ",[28,54518,257],{"class":207},[28,54520,54521],{"class":64}," `我已经阅读用户协议(${",[28,54523,651],{"class":211},[28,54525,54526],{"class":64},"})`\n",[28,54528,54529,54532,54535,54538,54540],{"class":30,"line":1856},[28,54530,54531],{"class":207},"      if",[28,54533,54534],{"class":211}," (i ",[28,54536,54537],{"class":207},"===",[28,54539,4170],{"class":38},[28,54541,12519],{"class":211},[28,54543,54544,54547,54550],{"class":30,"line":1861},[28,54545,54546],{"class":34},"        clearInterval",[28,54548,54549],{"class":211},"(n)  ",[28,54551,54552],{"class":269},"\u002F\u002F 关闭定时器\n",[28,54554,54555],{"class":30,"line":2654},[28,54556,54557],{"class":269},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[28,54559,54560,54563,54565],{"class":30,"line":2668},[28,54561,54562],{"class":211},"        btn.disabled ",[28,54564,257],{"class":207},[28,54566,54567],{"class":38}," false\n",[28,54569,54570,54573,54575],{"class":30,"line":2676},[28,54571,54572],{"class":211},"        btn.innerHTML ",[28,54574,257],{"class":207},[28,54576,54577],{"class":64}," '同意'\n",[28,54579,54580],{"class":30,"line":2681},[28,54581,52449],{"class":211},[28,54583,54584,54587,54589],{"class":30,"line":2687},[28,54585,54586],{"class":211},"    }, ",[28,54588,6487],{"class":38},[28,54590,218],{"class":211},[28,54592,54593],{"class":30,"line":2693},[28,54594,2477],{"emptyLinePlaceholder":134},[28,54596,54597,54599,54601],{"class":30,"line":2698},[28,54598,52468],{"class":211},[28,54600,51864],{"class":51351},[28,54602,51358],{"class":211},[28,54604,54605,54607,54609],{"class":30,"line":8025},[28,54606,51836],{"class":211},[28,54608,51851],{"class":51351},[28,54610,51358],{"class":211},[28,54612,54613],{"class":30,"line":8049},[28,54614,2477],{"emptyLinePlaceholder":134},[28,54616,54617,54619,54621],{"class":30,"line":8054},[28,54618,51836],{"class":211},[28,54620,50686],{"class":51351},[28,54622,51358],{"class":211},[14,54624,54625],{},"不要一直想着用死循环,避免死循环",[14,54627,54628,54631],{},[25,54629,54630],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22075,54633,54635],{"id":54634},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[161,54637,54638],{},[119,54639,54640],{},"法1",[18,54642,54644],{"className":50684,"code":54643,"language":50686,"meta":23,"style":23},"\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",[25,54645,54646,54656,54670,54674,54682,54696,54716,54728,54736,54742,54753,54764,54768,54772,54779,54791,54795,54799,54806,54818,54832,54845,54859,54863,54867,54874,54885,54896,54907,54919,54931,54943,54947,54951,54959,54969,54982,54994,55007,55011,55015,55022,55032,55044,55056,55067,55078,55088,55100,55112,55116,55120,55129,55141,55153,55181,55194,55198,55202,55209,55220,55224,55232,55240,55244,55252,55266,55281,55305,55313,55328,55341,55349,55370,55382,55394,55406,55418,55430,55442,55454,55463,55471,55479,55487,55499,55522,55541,55560,55579,55598,55617,55636,55656,55660,55680,55699,55719,55740,55751,55768,55778,55788,55798,55803,55808,55813,55818,55843,55856,55860,55883,55887,55895,55903,55911,55915],{"__ignoreMap":23},[28,54647,54648,54650,54652,54654],{"class":30,"line":31},[28,54649,51348],{"class":211},[28,54651,51352],{"class":51351},[28,54653,51355],{"class":34},[28,54655,51358],{"class":211},[28,54657,54658,54660,54662,54664,54666,54668],{"class":30,"line":42},[28,54659,1120],{"class":211},[28,54661,50686],{"class":51351},[28,54663,51367],{"class":34},[28,54665,257],{"class":211},[28,54667,51372],{"class":64},[28,54669,51358],{"class":211},[28,54671,54672],{"class":30,"line":50},[28,54673,2477],{"emptyLinePlaceholder":134},[28,54675,54676,54678,54680],{"class":30,"line":58},[28,54677,1120],{"class":211},[28,54679,51385],{"class":51351},[28,54681,51358],{"class":211},[28,54683,54684,54686,54688,54690,54692,54694],{"class":30,"line":70},[28,54685,52195],{"class":211},[28,54687,51395],{"class":51351},[28,54689,51398],{"class":34},[28,54691,257],{"class":211},[28,54693,51403],{"class":64},[28,54695,51358],{"class":211},[28,54697,54698,54700,54702,54704,54706,54708,54710,54712,54714],{"class":30,"line":78},[28,54699,52195],{"class":211},[28,54701,51395],{"class":51351},[28,54703,14997],{"class":34},[28,54705,257],{"class":211},[28,54707,51442],{"class":64},[28,54709,51422],{"class":34},[28,54711,257],{"class":211},[28,54713,51449],{"class":64},[28,54715,51358],{"class":211},[28,54717,54718,54720,54722,54724,54726],{"class":30,"line":86},[28,54719,52195],{"class":211},[28,54721,51458],{"class":51351},[28,54723,51461],{"class":211},[28,54725,51458],{"class":51351},[28,54727,51358],{"class":211},[28,54729,54730,54732,54734],{"class":30,"line":97},[28,54731,52195],{"class":211},[28,54733,126],{"class":51351},[28,54735,51358],{"class":211},[28,54737,54738,54740],{"class":30,"line":108},[28,54739,6480],{"class":51351},[28,54741,15649],{"class":211},[28,54743,54744,54747,54749,54751],{"class":30,"line":1407},[28,54745,54746],{"class":38},"      padding",[28,54748,51488],{"class":211},[28,54750,401],{"class":38},[28,54752,1370],{"class":211},[28,54754,54755,54758,54760,54762],{"class":30,"line":1690},[28,54756,54757],{"class":38},"      margin",[28,54759,51488],{"class":211},[28,54761,401],{"class":38},[28,54763,1370],{"class":211},[28,54765,54766],{"class":30,"line":1695},[28,54767,2264],{"class":211},[28,54769,54770],{"class":30,"line":1701},[28,54771,2477],{"emptyLinePlaceholder":134},[28,54773,54774,54777],{"class":30,"line":1706},[28,54775,54776],{"class":51351},"    li",[28,54778,15649],{"class":211},[28,54780,54781,54784,54786,54789],{"class":30,"line":1720},[28,54782,54783],{"class":38},"      list-style",[28,54785,51488],{"class":211},[28,54787,54788],{"class":38},"none",[28,54790,1370],{"class":211},[28,54792,54793],{"class":30,"line":1725},[28,54794,2264],{"class":211},[28,54796,54797],{"class":30,"line":1731},[28,54798,2477],{"emptyLinePlaceholder":134},[28,54800,54801,54804],{"class":30,"line":1752},[28,54802,54803],{"class":34},"    .box",[28,54805,15649],{"class":211},[28,54807,54808,54811,54813,54816],{"class":30,"line":1757},[28,54809,54810],{"class":38},"      position",[28,54812,51488],{"class":211},[28,54814,54815],{"class":38},"relative",[28,54817,1370],{"class":211},[28,54819,54820,54823,54825,54828,54830],{"class":30,"line":1771},[28,54821,54822],{"class":38},"      width",[28,54824,51488],{"class":211},[28,54826,54827],{"class":38},"976",[28,54829,51543],{"class":207},[28,54831,1370],{"class":211},[28,54833,54834,54837,54839,54841,54843],{"class":30,"line":1776},[28,54835,54836],{"class":38},"      height",[28,54838,51488],{"class":211},[28,54840,1617],{"class":38},[28,54842,51543],{"class":207},[28,54844,1370],{"class":211},[28,54846,54847,54849,54851,54853,54855,54857],{"class":30,"line":1805},[28,54848,54757],{"class":38},[28,54850,51488],{"class":211},[28,54852,521],{"class":38},[28,54854,51543],{"class":207},[28,54856,51607],{"class":38},[28,54858,1370],{"class":211},[28,54860,54861],{"class":30,"line":1810},[28,54862,2264],{"class":211},[28,54864,54865],{"class":30,"line":1827},[28,54866,2477],{"emptyLinePlaceholder":134},[28,54868,54869,54872],{"class":30,"line":1832},[28,54870,54871],{"class":34},"    .slider-footer",[28,54873,15649],{"class":211},[28,54875,54876,54878,54880,54883],{"class":30,"line":1837},[28,54877,54810],{"class":38},[28,54879,51488],{"class":211},[28,54881,54882],{"class":38},"absolute",[28,54884,1370],{"class":211},[28,54886,54887,54890,54892,54894],{"class":30,"line":1842},[28,54888,54889],{"class":38},"      left",[28,54891,51488],{"class":211},[28,54893,401],{"class":38},[28,54895,1370],{"class":211},[28,54897,54898,54901,54903,54905],{"class":30,"line":1856},[28,54899,54900],{"class":38},"      bottom",[28,54902,51488],{"class":211},[28,54904,401],{"class":38},[28,54906,1370],{"class":211},[28,54908,54909,54911,54913,54915,54917],{"class":30,"line":1861},[28,54910,54822],{"class":38},[28,54912,51488],{"class":211},[28,54914,521],{"class":38},[28,54916,538],{"class":207},[28,54918,1370],{"class":211},[28,54920,54921,54923,54925,54927,54929],{"class":30,"line":2654},[28,54922,54836],{"class":38},[28,54924,51488],{"class":211},[28,54926,785],{"class":38},[28,54928,538],{"class":207},[28,54930,1370],{"class":211},[28,54932,54933,54936,54938,54941],{"class":30,"line":2668},[28,54934,54935],{"class":38},"      background-color",[28,54937,51488],{"class":211},[28,54939,54940],{"class":38},"skyblue",[28,54942,1370],{"class":211},[28,54944,54945],{"class":30,"line":2676},[28,54946,2264],{"class":211},[28,54948,54949],{"class":30,"line":2681},[28,54950,2477],{"emptyLinePlaceholder":134},[28,54952,54953,54955,54957],{"class":30,"line":2687},[28,54954,54871],{"class":34},[28,54956,6902],{"class":51351},[28,54958,15649],{"class":211},[28,54960,54961,54963,54965,54967],{"class":30,"line":2693},[28,54962,54810],{"class":38},[28,54964,51488],{"class":211},[28,54966,54882],{"class":38},[28,54968,1370],{"class":211},[28,54970,54971,54974,54976,54978,54980],{"class":30,"line":2698},[28,54972,54973],{"class":38},"      font-size",[28,54975,51488],{"class":211},[28,54977,1111],{"class":38},[28,54979,51543],{"class":207},[28,54981,1370],{"class":211},[28,54983,54984,54986,54988,54990,54992],{"class":30,"line":8025},[28,54985,54889],{"class":38},[28,54987,51488],{"class":211},[28,54989,910],{"class":38},[28,54991,51543],{"class":207},[28,54993,1370],{"class":211},[28,54995,54996,54999,55001,55003,55005],{"class":30,"line":8049},[28,54997,54998],{"class":38},"      top",[28,55000,51488],{"class":211},[28,55002,529],{"class":38},[28,55004,51543],{"class":207},[28,55006,1370],{"class":211},[28,55008,55009],{"class":30,"line":8054},[28,55010,2264],{"class":211},[28,55012,55013],{"class":30,"line":8060},[28,55014,2477],{"emptyLinePlaceholder":134},[28,55016,55017,55020],{"class":30,"line":8087},[28,55018,55019],{"class":51351},"    ul",[28,55021,15649],{"class":211},[28,55023,55024,55026,55028,55030],{"class":30,"line":8092},[28,55025,54810],{"class":38},[28,55027,51488],{"class":211},[28,55029,54882],{"class":38},[28,55031,1370],{"class":211},[28,55033,55034,55036,55038,55040,55042],{"class":30,"line":8098},[28,55035,54998],{"class":38},[28,55037,51488],{"class":211},[28,55039,991],{"class":38},[28,55041,51543],{"class":207},[28,55043,1370],{"class":211},[28,55045,55046,55048,55050,55052,55054],{"class":30,"line":8110},[28,55047,54889],{"class":38},[28,55049,51488],{"class":211},[28,55051,910],{"class":38},[28,55053,51543],{"class":207},[28,55055,1370],{"class":211},[28,55057,55058,55061,55063,55065],{"class":30,"line":8122},[28,55059,55060],{"class":38},"      display",[28,55062,51488],{"class":211},[28,55064,51528],{"class":38},[28,55066,1370],{"class":211},[28,55068,55069,55072,55074,55076],{"class":30,"line":8134},[28,55070,55071],{"class":38},"      justify-content",[28,55073,51488],{"class":211},[28,55075,51719],{"class":38},[28,55077,1370],{"class":211},[28,55079,55080,55082,55084,55086],{"class":30,"line":9793},[28,55081,54810],{"class":38},[28,55083,51488],{"class":211},[28,55085,54882],{"class":38},[28,55087,1370],{"class":211},[28,55089,55090,55092,55094,55096,55098],{"class":30,"line":9818},[28,55091,54822],{"class":38},[28,55093,51488],{"class":211},[28,55095,4069],{"class":38},[28,55097,51543],{"class":207},[28,55099,1370],{"class":211},[28,55101,55102,55104,55106,55108,55110],{"class":30,"line":9841},[28,55103,54836],{"class":38},[28,55105,51488],{"class":211},[28,55107,910],{"class":38},[28,55109,51543],{"class":207},[28,55111,1370],{"class":211},[28,55113,55114],{"class":30,"line":9865},[28,55115,2264],{"class":211},[28,55117,55118],{"class":30,"line":9870},[28,55119,2477],{"emptyLinePlaceholder":134},[28,55121,55122,55124,55127],{"class":30,"line":9875},[28,55123,55019],{"class":51351},[28,55125,55126],{"class":51351}," li",[28,55128,15649],{"class":211},[28,55130,55131,55133,55135,55137,55139],{"class":30,"line":9880},[28,55132,54822],{"class":38},[28,55134,51488],{"class":211},[28,55136,910],{"class":38},[28,55138,51543],{"class":207},[28,55140,1370],{"class":211},[28,55142,55143,55145,55147,55149,55151],{"class":30,"line":9889},[28,55144,54836],{"class":38},[28,55146,51488],{"class":211},[28,55148,910],{"class":38},[28,55150,51543],{"class":207},[28,55152,1370],{"class":211},[28,55154,55155,55157,55159,55162,55164,55166,55168,55170,55172,55174,55176,55179],{"class":30,"line":9894},[28,55156,54935],{"class":38},[28,55158,51488],{"class":211},[28,55160,55161],{"class":38},"rgba",[28,55163,212],{"class":211},[28,55165,401],{"class":38},[28,55167,12512],{"class":211},[28,55169,401],{"class":38},[28,55171,12512],{"class":211},[28,55173,401],{"class":38},[28,55175,12512],{"class":211},[28,55177,55178],{"class":38},".4",[28,55180,2796],{"class":211},[28,55182,55183,55186,55188,55190,55192],{"class":30,"line":9900},[28,55184,55185],{"class":38},"      border-radius",[28,55187,51488],{"class":211},[28,55189,656],{"class":38},[28,55191,51543],{"class":207},[28,55193,1370],{"class":211},[28,55195,55196],{"class":30,"line":9921},[28,55197,2264],{"class":211},[28,55199,55200],{"class":30,"line":9927},[28,55201,2477],{"emptyLinePlaceholder":134},[28,55203,55204,55207],{"class":30,"line":9941},[28,55205,55206],{"class":34},"    .activate",[28,55208,15649],{"class":211},[28,55210,55211,55213,55215,55218],{"class":30,"line":9947},[28,55212,54935],{"class":38},[28,55214,51488],{"class":211},[28,55216,55217],{"class":38},"#f7f7f7",[28,55219,1370],{"class":211},[28,55221,55222],{"class":30,"line":9974},[28,55223,2264],{"class":211},[28,55225,55226,55228,55230],{"class":30,"line":9983},[28,55227,52468],{"class":211},[28,55229,126],{"class":51351},[28,55231,51358],{"class":211},[28,55233,55234,55236,55238],{"class":30,"line":9989},[28,55235,51836],{"class":211},[28,55237,51385],{"class":51351},[28,55239,51358],{"class":211},[28,55241,55242],{"class":30,"line":9997},[28,55243,2477],{"emptyLinePlaceholder":134},[28,55245,55246,55248,55250],{"class":30,"line":10002},[28,55247,1120],{"class":211},[28,55249,51851],{"class":51351},[28,55251,51358],{"class":211},[28,55253,55254,55256,55258,55260,55262,55264],{"class":30,"line":16681},[28,55255,52195],{"class":211},[28,55257,51662],{"class":51351},[28,55259,53537],{"class":34},[28,55261,257],{"class":211},[28,55263,53542],{"class":64},[28,55265,51358],{"class":211},[28,55267,55268,55270,55272,55274,55276,55279],{"class":30,"line":16687},[28,55269,51392],{"class":211},[28,55271,51662],{"class":51351},[28,55273,53537],{"class":34},[28,55275,257],{"class":211},[28,55277,55278],{"class":64},"\"slider-wrapper\"",[28,55280,51358],{"class":211},[28,55282,55283,55286,55288,55291,55293,55296,55299,55301,55303],{"class":30,"line":16710},[28,55284,55285],{"class":211},"      \u003C",[28,55287,1540],{"class":51351},[28,55289,55290],{"class":34}," src",[28,55292,257],{"class":211},[28,55294,55295],{"class":64},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[28,55297,55298],{"class":34}," alt",[28,55300,257],{"class":211},[28,55302,7729],{"class":64},[28,55304,51358],{"class":211},[28,55306,55307,55309,55311],{"class":30,"line":16716},[28,55308,51827],{"class":211},[28,55310,51662],{"class":51351},[28,55312,51358],{"class":211},[28,55314,55315,55317,55319,55321,55323,55326],{"class":30,"line":16739},[28,55316,51392],{"class":211},[28,55318,51662],{"class":51351},[28,55320,53537],{"class":34},[28,55322,257],{"class":211},[28,55324,55325],{"class":64},"\"slider-footer\"",[28,55327,51358],{"class":211},[28,55329,55330,55332,55334,55337,55339],{"class":30,"line":16753},[28,55331,55285],{"class":211},[28,55333,14],{"class":51351},[28,55335,55336],{"class":211},">对人类来说会不会太超前了?\u003C\u002F",[28,55338,14],{"class":51351},[28,55340,51358],{"class":211},[28,55342,55343,55345,55347],{"class":30,"line":16773},[28,55344,55285],{"class":211},[28,55346,116],{"class":51351},[28,55348,51358],{"class":211},[28,55350,55351,55354,55356,55358,55360,55363,55366,55368],{"class":30,"line":16779},[28,55352,55353],{"class":211},"        \u003C",[28,55355,119],{"class":51351},[28,55357,53537],{"class":34},[28,55359,257],{"class":211},[28,55361,55362],{"class":64},"\"activate\"",[28,55364,55365],{"class":211},">\u003C\u002F",[28,55367,119],{"class":51351},[28,55369,51358],{"class":211},[28,55371,55372,55374,55376,55378,55380],{"class":30,"line":16790},[28,55373,55353],{"class":211},[28,55375,119],{"class":51351},[28,55377,55365],{"class":211},[28,55379,119],{"class":51351},[28,55381,51358],{"class":211},[28,55383,55384,55386,55388,55390,55392],{"class":30,"line":16813},[28,55385,55353],{"class":211},[28,55387,119],{"class":51351},[28,55389,55365],{"class":211},[28,55391,119],{"class":51351},[28,55393,51358],{"class":211},[28,55395,55396,55398,55400,55402,55404],{"class":30,"line":16835},[28,55397,55353],{"class":211},[28,55399,119],{"class":51351},[28,55401,55365],{"class":211},[28,55403,119],{"class":51351},[28,55405,51358],{"class":211},[28,55407,55408,55410,55412,55414,55416],{"class":30,"line":16840},[28,55409,55353],{"class":211},[28,55411,119],{"class":51351},[28,55413,55365],{"class":211},[28,55415,119],{"class":51351},[28,55417,51358],{"class":211},[28,55419,55420,55422,55424,55426,55428],{"class":30,"line":16846},[28,55421,55353],{"class":211},[28,55423,119],{"class":51351},[28,55425,55365],{"class":211},[28,55427,119],{"class":51351},[28,55429,51358],{"class":211},[28,55431,55432,55434,55436,55438,55440],{"class":30,"line":16860},[28,55433,55353],{"class":211},[28,55435,119],{"class":51351},[28,55437,55365],{"class":211},[28,55439,119],{"class":51351},[28,55441,51358],{"class":211},[28,55443,55444,55446,55448,55450,55452],{"class":30,"line":16873},[28,55445,55353],{"class":211},[28,55447,119],{"class":51351},[28,55449,55365],{"class":211},[28,55451,119],{"class":51351},[28,55453,51358],{"class":211},[28,55455,55456,55459,55461],{"class":30,"line":16878},[28,55457,55458],{"class":211},"      \u003C\u002F",[28,55460,116],{"class":51351},[28,55462,51358],{"class":211},[28,55464,55465,55467,55469],{"class":30,"line":16892},[28,55466,51827],{"class":211},[28,55468,51662],{"class":51351},[28,55470,51358],{"class":211},[28,55472,55473,55475,55477],{"class":30,"line":16897},[28,55474,52468],{"class":211},[28,55476,51662],{"class":51351},[28,55478,51358],{"class":211},[28,55480,55481,55483,55485],{"class":30,"line":16903},[28,55482,52195],{"class":211},[28,55484,51864],{"class":51351},[28,55486,51358],{"class":211},[28,55488,55489,55491,55494,55496],{"class":30,"line":16908},[28,55490,11298],{"class":207},[28,55492,55493],{"class":38}," arrImage",[28,55495,13641],{"class":207},[28,55497,55498],{"class":211}," [\n",[28,55500,55501,55504,55507,55510,55513,55516,55519],{"class":30,"line":16922},[28,55502,55503],{"class":211},"      { url: ",[28,55505,55506],{"class":64},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[28,55508,55509],{"class":211},", title: ",[28,55511,55512],{"class":64},"'对人类来说会不会太超前了?'",[28,55514,55515],{"class":211},", color: ",[28,55517,55518],{"class":64},"'rgba(100,67,68)'",[28,55520,55521],{"class":211}," },\n",[28,55523,55524,55526,55529,55531,55534,55536,55539],{"class":30,"line":16927},[28,55525,55503],{"class":211},[28,55527,55528],{"class":64},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[28,55530,55509],{"class":211},[28,55532,55533],{"class":64},"'开启剑与雪的黑暗传说!'",[28,55535,55515],{"class":211},[28,55537,55538],{"class":64},"'rgba(43,35,26)'",[28,55540,55521],{"class":211},[28,55542,55543,55545,55548,55550,55553,55555,55558],{"class":30,"line":16932},[28,55544,55503],{"class":211},[28,55546,55547],{"class":64},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[28,55549,55509],{"class":211},[28,55551,55552],{"class":64},"'真正的jo厨出现了!'",[28,55554,55515],{"class":211},[28,55556,55557],{"class":64},"'rgba(36,31,33)'",[28,55559,55521],{"class":211},[28,55561,55562,55564,55567,55569,55572,55574,55577],{"class":30,"line":16946},[28,55563,55503],{"class":211},[28,55565,55566],{"class":64},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[28,55568,55509],{"class":211},[28,55570,55571],{"class":64},"'李玉刚:让世界通过b站看到东方大国文化'",[28,55573,55515],{"class":211},[28,55575,55576],{"class":64},"'rgba(139,98,66)'",[28,55578,55521],{"class":211},[28,55580,55581,55583,55586,55588,55591,55593,55596],{"class":30,"line":16958},[28,55582,55503],{"class":211},[28,55584,55585],{"class":64},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[28,55587,55509],{"class":211},[28,55589,55590],{"class":64},"'快来分享你的寒假日常吧'",[28,55592,55515],{"class":211},[28,55594,55595],{"class":64},"'rgba(67,90,92)'",[28,55597,55521],{"class":211},[28,55599,55600,55602,55605,55607,55610,55612,55615],{"class":30,"line":16963},[28,55601,55503],{"class":211},[28,55603,55604],{"class":64},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[28,55606,55509],{"class":211},[28,55608,55609],{"class":64},"'哔哩哔哩小年YEAR'",[28,55611,55515],{"class":211},[28,55613,55614],{"class":64},"'rgba(166,131,143)'",[28,55616,55521],{"class":211},[28,55618,55619,55621,55624,55626,55629,55631,55634],{"class":30,"line":16976},[28,55620,55503],{"class":211},[28,55622,55623],{"class":64},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[28,55625,55509],{"class":211},[28,55627,55628],{"class":64},"'一站式解决你的电脑配置问题'",[28,55630,55515],{"class":211},[28,55632,55633],{"class":64},"'rgba(53,29,25)'",[28,55635,55521],{"class":211},[28,55637,55638,55640,55643,55645,55648,55650,55653],{"class":30,"line":16981},[28,55639,55503],{"class":211},[28,55641,55642],{"class":64},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[28,55644,55509],{"class":211},[28,55646,55647],{"class":64},"'谁不想和小猫咪贴贴呢?'",[28,55649,55515],{"class":211},[28,55651,55652],{"class":64},"'rgba(99,72,114)'",[28,55654,55655],{"class":211}," }\n",[28,55657,55658],{"class":30,"line":16986},[28,55659,53160],{"class":211},[28,55661,55662,55664,55667,55669,55671,55673,55675,55678],{"class":30,"line":16991},[28,55663,11298],{"class":207},[28,55665,55666],{"class":38}," img",[28,55668,13641],{"class":207},[28,55670,54447],{"class":211},[28,55672,54450],{"class":34},[28,55674,212],{"class":211},[28,55676,55677],{"class":64},"'.slider-wrapper img'",[28,55679,218],{"class":211},[28,55681,55682,55684,55686,55688,55690,55692,55694,55697],{"class":30,"line":17004},[28,55683,11298],{"class":207},[28,55685,6902],{"class":38},[28,55687,13641],{"class":207},[28,55689,54447],{"class":211},[28,55691,54450],{"class":34},[28,55693,212],{"class":211},[28,55695,55696],{"class":64},"'.slider-footer p'",[28,55698,218],{"class":211},[28,55700,55701,55703,55706,55708,55710,55712,55714,55717],{"class":30,"line":17009},[28,55702,11298],{"class":207},[28,55704,55705],{"class":38}," color",[28,55707,13641],{"class":207},[28,55709,54447],{"class":211},[28,55711,54450],{"class":34},[28,55713,212],{"class":211},[28,55715,55716],{"class":64},"'.slider-footer'",[28,55718,218],{"class":211},[28,55720,55721,55723,55726,55728,55730,55733,55735,55738],{"class":30,"line":32684},[28,55722,11298],{"class":207},[28,55724,55725],{"class":38}," lis",[28,55727,13641],{"class":207},[28,55729,54447],{"class":211},[28,55731,55732],{"class":34},"querySelectorAll",[28,55734,212],{"class":211},[28,55736,55737],{"class":64},"'.slider-footer ul li'",[28,55739,218],{"class":211},[28,55741,55742,55744,55746,55748],{"class":30,"line":32690},[28,55743,52270],{"class":207},[28,55745,9515],{"class":211},[28,55747,257],{"class":207},[28,55749,55750],{"class":38}," 1\n",[28,55752,55753,55755,55758,55760,55762,55764,55766],{"class":30,"line":32696},[28,55754,52270],{"class":207},[28,55756,55757],{"class":211}," timer ",[28,55759,257],{"class":207},[28,55761,54495],{"class":34},[28,55763,212],{"class":211},[28,55765,54500],{"class":207},[28,55767,54503],{"class":211},[28,55769,55770,55773,55775],{"class":30,"line":32702},[28,55771,55772],{"class":211},"      img.src ",[28,55774,257],{"class":207},[28,55776,55777],{"class":211}," arrImage[i].url\n",[28,55779,55780,55783,55785],{"class":30,"line":32708},[28,55781,55782],{"class":211},"      p.innerHTML ",[28,55784,257],{"class":207},[28,55786,55787],{"class":211}," arrImage[i].title\n",[28,55789,55790,55793,55795],{"class":30,"line":32719},[28,55791,55792],{"class":211},"      color.style.backgroundColor ",[28,55794,257],{"class":207},[28,55796,55797],{"class":211}," arrImage[i].color\n",[28,55799,55800],{"class":30,"line":32725},[28,55801,55802],{"class":269},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[28,55804,55805],{"class":30,"line":32745},[28,55806,55807],{"class":269},"      \u002F\u002F li.classList.add('activate')\n",[28,55809,55810],{"class":30,"line":32751},[28,55811,55812],{"class":269},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[28,55814,55815],{"class":30,"line":32762},[28,55816,55817],{"class":269},"      \u002F\u002F lis[i].classList.remove('activate')\n",[28,55819,55820,55823,55825,55827,55830,55833,55836,55838,55841],{"class":30,"line":32768},[28,55821,55822],{"class":211},"      document.",[28,55824,54450],{"class":34},[28,55826,212],{"class":211},[28,55828,55829],{"class":64},"'.activate'",[28,55831,55832],{"class":211},")?.classList.",[28,55834,55835],{"class":34},"toggle",[28,55837,212],{"class":211},[28,55839,55840],{"class":64},"'activate'",[28,55842,218],{"class":211},[28,55844,55845,55848,55850,55852,55854],{"class":30,"line":32774},[28,55846,55847],{"class":211},"      lis[i].classList.",[28,55849,5411],{"class":34},[28,55851,212],{"class":211},[28,55853,55840],{"class":64},[28,55855,218],{"class":211},[28,55857,55858],{"class":30,"line":32780},[28,55859,2477],{"emptyLinePlaceholder":134},[28,55861,55862,55865,55867,55869,55871,55873,55875,55877,55880],{"class":30,"line":32786},[28,55863,55864],{"class":211},"      i ",[28,55866,257],{"class":207},[28,55868,54534],{"class":211},[28,55870,691],{"class":207},[28,55872,25189],{"class":38},[28,55874,13791],{"class":211},[28,55876,538],{"class":207},[28,55878,55879],{"class":211}," arrImage.",[28,55881,55882],{"class":38},"length\n",[28,55884,55885],{"class":30,"line":32792},[28,55886,2477],{"emptyLinePlaceholder":134},[28,55888,55889,55891,55893],{"class":30,"line":32798},[28,55890,54586],{"class":211},[28,55892,6487],{"class":38},[28,55894,218],{"class":211},[28,55896,55897,55899,55901],{"class":30,"line":32804},[28,55898,52468],{"class":211},[28,55900,51864],{"class":51351},[28,55902,51358],{"class":211},[28,55904,55905,55907,55909],{"class":30,"line":32824},[28,55906,51836],{"class":211},[28,55908,51851],{"class":51351},[28,55910,51358],{"class":211},[28,55912,55913],{"class":30,"line":32830},[28,55914,2477],{"emptyLinePlaceholder":134},[28,55916,55917,55919,55921],{"class":30,"line":32846},[28,55918,51836],{"class":211},[28,55920,50686],{"class":51351},[28,55922,51358],{"class":211},[14,55924,55925],{},[1540,55926],{"alt":23,"src":55927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55929,55930],{},"?.就是短路保护,确保输出正常进行",[14,55932,55933],{},"不要忘记取余%,有时候可以用",[14,55935,55936],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[161,55938,55939],{"start":42},[119,55940,55941],{},"法2",[18,55943,55945],{"className":50684,"code":55944,"language":50686,"meta":23,"style":23},"\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",[25,55946,55947,55957,55971,55975,55983,55997,56017,56029,56037,56043,56053,56063,56067,56071,56077,56087,56091,56095,56101,56111,56123,56135,56149,56153,56157,56163,56173,56183,56193,56205,56217,56227,56231,56235,56243,56253,56265,56277,56289,56293,56297,56303,56313,56325,56337,56347,56357,56367,56379,56391,56395,56399,56407,56419,56431,56457,56469,56473,56477,56483,56493,56497,56505,56513,56517,56525,56539,56553,56573,56581,56595,56607,56615,56633,56645,56657,56669,56681,56693,56705,56717,56725,56733,56741,56749,56760,56776,56792,56808,56824,56840,56856,56872,56888,56892,56897,56915,56933,56943,56948,56953,56964,56970,56985,56994,56998,57003,57012,57017,57026,57031,57036,57041,57064,57094,57098,57106,57110,57118,57126,57130],{"__ignoreMap":23},[28,55948,55949,55951,55953,55955],{"class":30,"line":31},[28,55950,51348],{"class":211},[28,55952,51352],{"class":51351},[28,55954,51355],{"class":34},[28,55956,51358],{"class":211},[28,55958,55959,55961,55963,55965,55967,55969],{"class":30,"line":42},[28,55960,1120],{"class":211},[28,55962,50686],{"class":51351},[28,55964,51367],{"class":34},[28,55966,257],{"class":211},[28,55968,51372],{"class":64},[28,55970,51358],{"class":211},[28,55972,55973],{"class":30,"line":50},[28,55974,2477],{"emptyLinePlaceholder":134},[28,55976,55977,55979,55981],{"class":30,"line":58},[28,55978,1120],{"class":211},[28,55980,51385],{"class":51351},[28,55982,51358],{"class":211},[28,55984,55985,55987,55989,55991,55993,55995],{"class":30,"line":70},[28,55986,52195],{"class":211},[28,55988,51395],{"class":51351},[28,55990,51398],{"class":34},[28,55992,257],{"class":211},[28,55994,51403],{"class":64},[28,55996,51358],{"class":211},[28,55998,55999,56001,56003,56005,56007,56009,56011,56013,56015],{"class":30,"line":78},[28,56000,52195],{"class":211},[28,56002,51395],{"class":51351},[28,56004,14997],{"class":34},[28,56006,257],{"class":211},[28,56008,51442],{"class":64},[28,56010,51422],{"class":34},[28,56012,257],{"class":211},[28,56014,51449],{"class":64},[28,56016,51358],{"class":211},[28,56018,56019,56021,56023,56025,56027],{"class":30,"line":86},[28,56020,52195],{"class":211},[28,56022,51458],{"class":51351},[28,56024,51461],{"class":211},[28,56026,51458],{"class":51351},[28,56028,51358],{"class":211},[28,56030,56031,56033,56035],{"class":30,"line":97},[28,56032,52195],{"class":211},[28,56034,126],{"class":51351},[28,56036,51358],{"class":211},[28,56038,56039,56041],{"class":30,"line":108},[28,56040,6480],{"class":51351},[28,56042,15649],{"class":211},[28,56044,56045,56047,56049,56051],{"class":30,"line":1407},[28,56046,54746],{"class":38},[28,56048,51488],{"class":211},[28,56050,401],{"class":38},[28,56052,1370],{"class":211},[28,56054,56055,56057,56059,56061],{"class":30,"line":1690},[28,56056,54757],{"class":38},[28,56058,51488],{"class":211},[28,56060,401],{"class":38},[28,56062,1370],{"class":211},[28,56064,56065],{"class":30,"line":1695},[28,56066,2264],{"class":211},[28,56068,56069],{"class":30,"line":1701},[28,56070,2477],{"emptyLinePlaceholder":134},[28,56072,56073,56075],{"class":30,"line":1706},[28,56074,54776],{"class":51351},[28,56076,15649],{"class":211},[28,56078,56079,56081,56083,56085],{"class":30,"line":1720},[28,56080,54783],{"class":38},[28,56082,51488],{"class":211},[28,56084,54788],{"class":38},[28,56086,1370],{"class":211},[28,56088,56089],{"class":30,"line":1725},[28,56090,2264],{"class":211},[28,56092,56093],{"class":30,"line":1731},[28,56094,2477],{"emptyLinePlaceholder":134},[28,56096,56097,56099],{"class":30,"line":1752},[28,56098,54803],{"class":34},[28,56100,15649],{"class":211},[28,56102,56103,56105,56107,56109],{"class":30,"line":1757},[28,56104,54810],{"class":38},[28,56106,51488],{"class":211},[28,56108,54815],{"class":38},[28,56110,1370],{"class":211},[28,56112,56113,56115,56117,56119,56121],{"class":30,"line":1771},[28,56114,54822],{"class":38},[28,56116,51488],{"class":211},[28,56118,54827],{"class":38},[28,56120,51543],{"class":207},[28,56122,1370],{"class":211},[28,56124,56125,56127,56129,56131,56133],{"class":30,"line":1776},[28,56126,54836],{"class":38},[28,56128,51488],{"class":211},[28,56130,1617],{"class":38},[28,56132,51543],{"class":207},[28,56134,1370],{"class":211},[28,56136,56137,56139,56141,56143,56145,56147],{"class":30,"line":1805},[28,56138,54757],{"class":38},[28,56140,51488],{"class":211},[28,56142,521],{"class":38},[28,56144,51543],{"class":207},[28,56146,51607],{"class":38},[28,56148,1370],{"class":211},[28,56150,56151],{"class":30,"line":1810},[28,56152,2264],{"class":211},[28,56154,56155],{"class":30,"line":1827},[28,56156,2477],{"emptyLinePlaceholder":134},[28,56158,56159,56161],{"class":30,"line":1832},[28,56160,54871],{"class":34},[28,56162,15649],{"class":211},[28,56164,56165,56167,56169,56171],{"class":30,"line":1837},[28,56166,54810],{"class":38},[28,56168,51488],{"class":211},[28,56170,54882],{"class":38},[28,56172,1370],{"class":211},[28,56174,56175,56177,56179,56181],{"class":30,"line":1842},[28,56176,54889],{"class":38},[28,56178,51488],{"class":211},[28,56180,401],{"class":38},[28,56182,1370],{"class":211},[28,56184,56185,56187,56189,56191],{"class":30,"line":1856},[28,56186,54900],{"class":38},[28,56188,51488],{"class":211},[28,56190,401],{"class":38},[28,56192,1370],{"class":211},[28,56194,56195,56197,56199,56201,56203],{"class":30,"line":1861},[28,56196,54822],{"class":38},[28,56198,51488],{"class":211},[28,56200,521],{"class":38},[28,56202,538],{"class":207},[28,56204,1370],{"class":211},[28,56206,56207,56209,56211,56213,56215],{"class":30,"line":2654},[28,56208,54836],{"class":38},[28,56210,51488],{"class":211},[28,56212,785],{"class":38},[28,56214,538],{"class":207},[28,56216,1370],{"class":211},[28,56218,56219,56221,56223,56225],{"class":30,"line":2668},[28,56220,54935],{"class":38},[28,56222,51488],{"class":211},[28,56224,54940],{"class":38},[28,56226,1370],{"class":211},[28,56228,56229],{"class":30,"line":2676},[28,56230,2264],{"class":211},[28,56232,56233],{"class":30,"line":2681},[28,56234,2477],{"emptyLinePlaceholder":134},[28,56236,56237,56239,56241],{"class":30,"line":2687},[28,56238,54871],{"class":34},[28,56240,6902],{"class":51351},[28,56242,15649],{"class":211},[28,56244,56245,56247,56249,56251],{"class":30,"line":2693},[28,56246,54810],{"class":38},[28,56248,51488],{"class":211},[28,56250,54882],{"class":38},[28,56252,1370],{"class":211},[28,56254,56255,56257,56259,56261,56263],{"class":30,"line":2698},[28,56256,54973],{"class":38},[28,56258,51488],{"class":211},[28,56260,1111],{"class":38},[28,56262,51543],{"class":207},[28,56264,1370],{"class":211},[28,56266,56267,56269,56271,56273,56275],{"class":30,"line":8025},[28,56268,54889],{"class":38},[28,56270,51488],{"class":211},[28,56272,910],{"class":38},[28,56274,51543],{"class":207},[28,56276,1370],{"class":211},[28,56278,56279,56281,56283,56285,56287],{"class":30,"line":8049},[28,56280,54998],{"class":38},[28,56282,51488],{"class":211},[28,56284,529],{"class":38},[28,56286,51543],{"class":207},[28,56288,1370],{"class":211},[28,56290,56291],{"class":30,"line":8054},[28,56292,2264],{"class":211},[28,56294,56295],{"class":30,"line":8060},[28,56296,2477],{"emptyLinePlaceholder":134},[28,56298,56299,56301],{"class":30,"line":8087},[28,56300,55019],{"class":51351},[28,56302,15649],{"class":211},[28,56304,56305,56307,56309,56311],{"class":30,"line":8092},[28,56306,54810],{"class":38},[28,56308,51488],{"class":211},[28,56310,54882],{"class":38},[28,56312,1370],{"class":211},[28,56314,56315,56317,56319,56321,56323],{"class":30,"line":8098},[28,56316,54998],{"class":38},[28,56318,51488],{"class":211},[28,56320,991],{"class":38},[28,56322,51543],{"class":207},[28,56324,1370],{"class":211},[28,56326,56327,56329,56331,56333,56335],{"class":30,"line":8110},[28,56328,54889],{"class":38},[28,56330,51488],{"class":211},[28,56332,910],{"class":38},[28,56334,51543],{"class":207},[28,56336,1370],{"class":211},[28,56338,56339,56341,56343,56345],{"class":30,"line":8122},[28,56340,55060],{"class":38},[28,56342,51488],{"class":211},[28,56344,51528],{"class":38},[28,56346,1370],{"class":211},[28,56348,56349,56351,56353,56355],{"class":30,"line":8134},[28,56350,55071],{"class":38},[28,56352,51488],{"class":211},[28,56354,51719],{"class":38},[28,56356,1370],{"class":211},[28,56358,56359,56361,56363,56365],{"class":30,"line":9793},[28,56360,54810],{"class":38},[28,56362,51488],{"class":211},[28,56364,54882],{"class":38},[28,56366,1370],{"class":211},[28,56368,56369,56371,56373,56375,56377],{"class":30,"line":9818},[28,56370,54822],{"class":38},[28,56372,51488],{"class":211},[28,56374,4069],{"class":38},[28,56376,51543],{"class":207},[28,56378,1370],{"class":211},[28,56380,56381,56383,56385,56387,56389],{"class":30,"line":9841},[28,56382,54836],{"class":38},[28,56384,51488],{"class":211},[28,56386,910],{"class":38},[28,56388,51543],{"class":207},[28,56390,1370],{"class":211},[28,56392,56393],{"class":30,"line":9865},[28,56394,2264],{"class":211},[28,56396,56397],{"class":30,"line":9870},[28,56398,2477],{"emptyLinePlaceholder":134},[28,56400,56401,56403,56405],{"class":30,"line":9875},[28,56402,55019],{"class":51351},[28,56404,55126],{"class":51351},[28,56406,15649],{"class":211},[28,56408,56409,56411,56413,56415,56417],{"class":30,"line":9880},[28,56410,54822],{"class":38},[28,56412,51488],{"class":211},[28,56414,910],{"class":38},[28,56416,51543],{"class":207},[28,56418,1370],{"class":211},[28,56420,56421,56423,56425,56427,56429],{"class":30,"line":9889},[28,56422,54836],{"class":38},[28,56424,51488],{"class":211},[28,56426,910],{"class":38},[28,56428,51543],{"class":207},[28,56430,1370],{"class":211},[28,56432,56433,56435,56437,56439,56441,56443,56445,56447,56449,56451,56453,56455],{"class":30,"line":9894},[28,56434,54935],{"class":38},[28,56436,51488],{"class":211},[28,56438,55161],{"class":38},[28,56440,212],{"class":211},[28,56442,401],{"class":38},[28,56444,12512],{"class":211},[28,56446,401],{"class":38},[28,56448,12512],{"class":211},[28,56450,401],{"class":38},[28,56452,12512],{"class":211},[28,56454,55178],{"class":38},[28,56456,2796],{"class":211},[28,56458,56459,56461,56463,56465,56467],{"class":30,"line":9900},[28,56460,55185],{"class":38},[28,56462,51488],{"class":211},[28,56464,656],{"class":38},[28,56466,51543],{"class":207},[28,56468,1370],{"class":211},[28,56470,56471],{"class":30,"line":9921},[28,56472,2264],{"class":211},[28,56474,56475],{"class":30,"line":9927},[28,56476,2477],{"emptyLinePlaceholder":134},[28,56478,56479,56481],{"class":30,"line":9941},[28,56480,55206],{"class":34},[28,56482,15649],{"class":211},[28,56484,56485,56487,56489,56491],{"class":30,"line":9947},[28,56486,54935],{"class":38},[28,56488,51488],{"class":211},[28,56490,55217],{"class":38},[28,56492,1370],{"class":211},[28,56494,56495],{"class":30,"line":9974},[28,56496,2264],{"class":211},[28,56498,56499,56501,56503],{"class":30,"line":9983},[28,56500,52468],{"class":211},[28,56502,126],{"class":51351},[28,56504,51358],{"class":211},[28,56506,56507,56509,56511],{"class":30,"line":9989},[28,56508,51836],{"class":211},[28,56510,51385],{"class":51351},[28,56512,51358],{"class":211},[28,56514,56515],{"class":30,"line":9997},[28,56516,2477],{"emptyLinePlaceholder":134},[28,56518,56519,56521,56523],{"class":30,"line":10002},[28,56520,1120],{"class":211},[28,56522,51851],{"class":51351},[28,56524,51358],{"class":211},[28,56526,56527,56529,56531,56533,56535,56537],{"class":30,"line":16681},[28,56528,52195],{"class":211},[28,56530,51662],{"class":51351},[28,56532,53537],{"class":34},[28,56534,257],{"class":211},[28,56536,53542],{"class":64},[28,56538,51358],{"class":211},[28,56540,56541,56543,56545,56547,56549,56551],{"class":30,"line":16687},[28,56542,51392],{"class":211},[28,56544,51662],{"class":51351},[28,56546,53537],{"class":34},[28,56548,257],{"class":211},[28,56550,55278],{"class":64},[28,56552,51358],{"class":211},[28,56554,56555,56557,56559,56561,56563,56565,56567,56569,56571],{"class":30,"line":16710},[28,56556,55285],{"class":211},[28,56558,1540],{"class":51351},[28,56560,55290],{"class":34},[28,56562,257],{"class":211},[28,56564,55295],{"class":64},[28,56566,55298],{"class":34},[28,56568,257],{"class":211},[28,56570,7729],{"class":64},[28,56572,51358],{"class":211},[28,56574,56575,56577,56579],{"class":30,"line":16716},[28,56576,51827],{"class":211},[28,56578,51662],{"class":51351},[28,56580,51358],{"class":211},[28,56582,56583,56585,56587,56589,56591,56593],{"class":30,"line":16739},[28,56584,51392],{"class":211},[28,56586,51662],{"class":51351},[28,56588,53537],{"class":34},[28,56590,257],{"class":211},[28,56592,55325],{"class":64},[28,56594,51358],{"class":211},[28,56596,56597,56599,56601,56603,56605],{"class":30,"line":16753},[28,56598,55285],{"class":211},[28,56600,14],{"class":51351},[28,56602,55336],{"class":211},[28,56604,14],{"class":51351},[28,56606,51358],{"class":211},[28,56608,56609,56611,56613],{"class":30,"line":16773},[28,56610,55285],{"class":211},[28,56612,116],{"class":51351},[28,56614,51358],{"class":211},[28,56616,56617,56619,56621,56623,56625,56627,56629,56631],{"class":30,"line":16779},[28,56618,55353],{"class":211},[28,56620,119],{"class":51351},[28,56622,53537],{"class":34},[28,56624,257],{"class":211},[28,56626,55362],{"class":64},[28,56628,55365],{"class":211},[28,56630,119],{"class":51351},[28,56632,51358],{"class":211},[28,56634,56635,56637,56639,56641,56643],{"class":30,"line":16790},[28,56636,55353],{"class":211},[28,56638,119],{"class":51351},[28,56640,55365],{"class":211},[28,56642,119],{"class":51351},[28,56644,51358],{"class":211},[28,56646,56647,56649,56651,56653,56655],{"class":30,"line":16813},[28,56648,55353],{"class":211},[28,56650,119],{"class":51351},[28,56652,55365],{"class":211},[28,56654,119],{"class":51351},[28,56656,51358],{"class":211},[28,56658,56659,56661,56663,56665,56667],{"class":30,"line":16835},[28,56660,55353],{"class":211},[28,56662,119],{"class":51351},[28,56664,55365],{"class":211},[28,56666,119],{"class":51351},[28,56668,51358],{"class":211},[28,56670,56671,56673,56675,56677,56679],{"class":30,"line":16840},[28,56672,55353],{"class":211},[28,56674,119],{"class":51351},[28,56676,55365],{"class":211},[28,56678,119],{"class":51351},[28,56680,51358],{"class":211},[28,56682,56683,56685,56687,56689,56691],{"class":30,"line":16846},[28,56684,55353],{"class":211},[28,56686,119],{"class":51351},[28,56688,55365],{"class":211},[28,56690,119],{"class":51351},[28,56692,51358],{"class":211},[28,56694,56695,56697,56699,56701,56703],{"class":30,"line":16860},[28,56696,55353],{"class":211},[28,56698,119],{"class":51351},[28,56700,55365],{"class":211},[28,56702,119],{"class":51351},[28,56704,51358],{"class":211},[28,56706,56707,56709,56711,56713,56715],{"class":30,"line":16873},[28,56708,55353],{"class":211},[28,56710,119],{"class":51351},[28,56712,55365],{"class":211},[28,56714,119],{"class":51351},[28,56716,51358],{"class":211},[28,56718,56719,56721,56723],{"class":30,"line":16878},[28,56720,55458],{"class":211},[28,56722,116],{"class":51351},[28,56724,51358],{"class":211},[28,56726,56727,56729,56731],{"class":30,"line":16892},[28,56728,51827],{"class":211},[28,56730,51662],{"class":51351},[28,56732,51358],{"class":211},[28,56734,56735,56737,56739],{"class":30,"line":16897},[28,56736,52468],{"class":211},[28,56738,51662],{"class":51351},[28,56740,51358],{"class":211},[28,56742,56743,56745,56747],{"class":30,"line":16903},[28,56744,52195],{"class":211},[28,56746,51864],{"class":51351},[28,56748,51358],{"class":211},[28,56750,56751,56753,56756,56758],{"class":30,"line":16908},[28,56752,11298],{"class":207},[28,56754,56755],{"class":38}," sliderData",[28,56757,13641],{"class":207},[28,56759,55498],{"class":211},[28,56761,56762,56764,56766,56768,56770,56772,56774],{"class":30,"line":16922},[28,56763,55503],{"class":211},[28,56765,55506],{"class":64},[28,56767,55509],{"class":211},[28,56769,55512],{"class":64},[28,56771,55515],{"class":211},[28,56773,55518],{"class":64},[28,56775,55521],{"class":211},[28,56777,56778,56780,56782,56784,56786,56788,56790],{"class":30,"line":16927},[28,56779,55503],{"class":211},[28,56781,55528],{"class":64},[28,56783,55509],{"class":211},[28,56785,55533],{"class":64},[28,56787,55515],{"class":211},[28,56789,55538],{"class":64},[28,56791,55521],{"class":211},[28,56793,56794,56796,56798,56800,56802,56804,56806],{"class":30,"line":16932},[28,56795,55503],{"class":211},[28,56797,55547],{"class":64},[28,56799,55509],{"class":211},[28,56801,55552],{"class":64},[28,56803,55515],{"class":211},[28,56805,55557],{"class":64},[28,56807,55521],{"class":211},[28,56809,56810,56812,56814,56816,56818,56820,56822],{"class":30,"line":16946},[28,56811,55503],{"class":211},[28,56813,55566],{"class":64},[28,56815,55509],{"class":211},[28,56817,55571],{"class":64},[28,56819,55515],{"class":211},[28,56821,55576],{"class":64},[28,56823,55521],{"class":211},[28,56825,56826,56828,56830,56832,56834,56836,56838],{"class":30,"line":16958},[28,56827,55503],{"class":211},[28,56829,55585],{"class":64},[28,56831,55509],{"class":211},[28,56833,55590],{"class":64},[28,56835,55515],{"class":211},[28,56837,55595],{"class":64},[28,56839,55521],{"class":211},[28,56841,56842,56844,56846,56848,56850,56852,56854],{"class":30,"line":16963},[28,56843,55503],{"class":211},[28,56845,55604],{"class":64},[28,56847,55509],{"class":211},[28,56849,55609],{"class":64},[28,56851,55515],{"class":211},[28,56853,55614],{"class":64},[28,56855,55521],{"class":211},[28,56857,56858,56860,56862,56864,56866,56868,56870],{"class":30,"line":16976},[28,56859,55503],{"class":211},[28,56861,55623],{"class":64},[28,56863,55509],{"class":211},[28,56865,55628],{"class":64},[28,56867,55515],{"class":211},[28,56869,55633],{"class":64},[28,56871,55521],{"class":211},[28,56873,56874,56876,56878,56880,56882,56884,56886],{"class":30,"line":16981},[28,56875,55503],{"class":211},[28,56877,55642],{"class":64},[28,56879,55509],{"class":211},[28,56881,55647],{"class":64},[28,56883,55515],{"class":211},[28,56885,55652],{"class":64},[28,56887,55655],{"class":211},[28,56889,56890],{"class":30,"line":16986},[28,56891,53160],{"class":211},[28,56893,56894],{"class":30,"line":16991},[28,56895,56896],{"class":269},"    \u002F\u002F 1.获取元素\n",[28,56898,56899,56901,56903,56905,56907,56909,56911,56913],{"class":30,"line":17004},[28,56900,11298],{"class":207},[28,56902,55666],{"class":38},[28,56904,13641],{"class":207},[28,56906,54447],{"class":211},[28,56908,54450],{"class":34},[28,56910,212],{"class":211},[28,56912,55677],{"class":64},[28,56914,218],{"class":211},[28,56916,56917,56919,56921,56923,56925,56927,56929,56931],{"class":30,"line":17009},[28,56918,11298],{"class":207},[28,56920,6902],{"class":38},[28,56922,13641],{"class":207},[28,56924,54447],{"class":211},[28,56926,54450],{"class":34},[28,56928,212],{"class":211},[28,56930,55696],{"class":64},[28,56932,218],{"class":211},[28,56934,56935,56937,56939,56941],{"class":30,"line":32684},[28,56936,52270],{"class":207},[28,56938,9515],{"class":211},[28,56940,257],{"class":207},[28,56942,47384],{"class":38},[28,56944,56945],{"class":30,"line":32690},[28,56946,56947],{"class":269},"    \u002F\u002F 2.开启定时器\n",[28,56949,56950],{"class":30,"line":32696},[28,56951,56952],{"class":269},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[28,56954,56955,56958,56960,56962],{"class":30,"line":32702},[28,56956,56957],{"class":34},"    setInterval",[28,56959,212],{"class":211},[28,56961,54500],{"class":207},[28,56963,54503],{"class":211},[28,56965,56966,56968],{"class":30,"line":32708},[28,56967,54508],{"class":211},[28,56969,2779],{"class":207},[28,56971,56972,56974,56976,56978,56981,56983],{"class":30,"line":32719},[28,56973,54531],{"class":207},[28,56975,54534],{"class":211},[28,56977,1788],{"class":207},[28,56979,56980],{"class":211}," sliderData.",[28,56982,52019],{"class":38},[28,56984,12519],{"class":211},[28,56986,56987,56990,56992],{"class":30,"line":32725},[28,56988,56989],{"class":211},"        i ",[28,56991,257],{"class":207},[28,56993,47384],{"class":38},[28,56995,56996],{"class":30,"line":32745},[28,56997,52449],{"class":211},[28,56999,57000],{"class":30,"line":32751},[28,57001,57002],{"class":269},"      \u002F\u002F 更换图片路径\n",[28,57004,57005,57007,57009],{"class":30,"line":32762},[28,57006,55772],{"class":211},[28,57008,257],{"class":207},[28,57010,57011],{"class":211}," sliderData[i].url\n",[28,57013,57014],{"class":30,"line":32768},[28,57015,57016],{"class":269},"      \u002F\u002F 把文字写到p里面\n",[28,57018,57019,57021,57023],{"class":30,"line":32774},[28,57020,55782],{"class":211},[28,57022,257],{"class":207},[28,57024,57025],{"class":211}," sliderData[i].title\n",[28,57027,57028],{"class":30,"line":32780},[28,57029,57030],{"class":269},"      \u002F\u002F 小圆点\n",[28,57032,57033],{"class":30,"line":32786},[28,57034,57035],{"class":269},"      \u002F\u002F 先删除以前的active\n",[28,57037,57038],{"class":30,"line":32792},[28,57039,57040],{"class":269},"      \u002F\u002F 只让当前li添加active\n",[28,57042,57043,57045,57047,57049,57052,57055,57058,57060,57062],{"class":30,"line":32798},[28,57044,55822],{"class":211},[28,57046,54450],{"class":34},[28,57048,212],{"class":211},[28,57050,57051],{"class":64},"'.slider-footer .activate'",[28,57053,57054],{"class":211},").classList.",[28,57056,57057],{"class":34},"remove",[28,57059,212],{"class":211},[28,57061,55840],{"class":64},[28,57063,218],{"class":211},[28,57065,57066,57068,57070,57072,57075,57077,57079,57081,57084,57086,57088,57090,57092],{"class":30,"line":32804},[28,57067,55822],{"class":211},[28,57069,54450],{"class":34},[28,57071,212],{"class":211},[28,57073,57074],{"class":64},"`.slider-footer ul li:nth-child(${",[28,57076,651],{"class":211},[28,57078,45617],{"class":207},[28,57080,25189],{"class":38},[28,57082,57083],{"class":64},"})`",[28,57085,57054],{"class":211},[28,57087,5411],{"class":34},[28,57089,212],{"class":211},[28,57091,55840],{"class":64},[28,57093,218],{"class":211},[28,57095,57096],{"class":30,"line":32824},[28,57097,2477],{"emptyLinePlaceholder":134},[28,57099,57100,57102,57104],{"class":30,"line":32830},[28,57101,54586],{"class":211},[28,57103,6487],{"class":38},[28,57105,218],{"class":211},[28,57107,57108],{"class":30,"line":32846},[28,57109,2477],{"emptyLinePlaceholder":134},[28,57111,57112,57114,57116],{"class":30,"line":32852},[28,57113,52468],{"class":211},[28,57115,51864],{"class":51351},[28,57117,51358],{"class":211},[28,57119,57120,57122,57124],{"class":30,"line":32866},[28,57121,51836],{"class":211},[28,57123,51851],{"class":51351},[28,57125,51358],{"class":211},[28,57127,57128],{"class":30,"line":32872},[28,57129,2477],{"emptyLinePlaceholder":134},[28,57131,57132,57134,57136],{"class":30,"line":32887},[28,57133,51836],{"class":211},[28,57135,50686],{"class":51351},[28,57137,51358],{"class":211},[177,57139,57141],{"id":57140},"_317-重要知识点","3.1.7 重要知识点",[14,57143,57144,57145],{},"浏览器在渲染文本时， ",[359,57146,57147],{},"没有空格或换行符就没有“断行点”",[14,57149,57150],{},[1540,57151],{"alt":23,"src":57152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57154,57155],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57157,57158],{},[1540,57159],{"alt":23,"src":57160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57162,57163],{},[1540,57164],{"alt":23,"src":57165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[149,57167,57169],{"id":57168},"_32-dom事件基础","3.2 DOM事件基础",[177,57171,57173],{"id":57172},"_321-事件监听","3.2.1 事件监听",[14,57175,57176],{},[1540,57177],{"alt":23,"src":57178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57180,57181],{},"事件监听有响应的发生",[14,57183,57184],{},[1540,57185],{"alt":23,"src":57186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57188,57189],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57191,57192],{},"对于有名函数,要执行的函数名后边不要加()",[177,57194,57196],{"id":57195},"_322-随机点名案例","3.2.2 随机点名案例",[18,57198,57200],{"className":50684,"code":57199,"language":50686,"meta":23,"style":23},"\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",[25,57201,57202,57212,57226,57230,57238,57252,57272,57284,57292,57298,57308,57318,57322,57326,57333,57344,57348,57352,57358,57370,57384,57394,57406,57419,57423,57427,57434,57438,57451,57463,57475,57479,57483,57487,57494,57504,57508,57512,57521,57533,57545,57560,57564,57572,57580,57584,57592,57605,57619,57632,57652,57660,57675,57695,57715,57723,57727,57735,57740,57776,57796,57801,57820,57825,57836,57841,57852,57857,57876,57891,57896,57922,57932,57941,57946,57962,57967,57972,57977,57992,57996,58000,58005,58024,58041,58049,58054,58069,58073,58077,58085,58093,58097],{"__ignoreMap":23},[28,57203,57204,57206,57208,57210],{"class":30,"line":31},[28,57205,51348],{"class":211},[28,57207,51352],{"class":51351},[28,57209,51355],{"class":34},[28,57211,51358],{"class":211},[28,57213,57214,57216,57218,57220,57222,57224],{"class":30,"line":42},[28,57215,1120],{"class":211},[28,57217,50686],{"class":51351},[28,57219,51367],{"class":34},[28,57221,257],{"class":211},[28,57223,51372],{"class":64},[28,57225,51358],{"class":211},[28,57227,57228],{"class":30,"line":50},[28,57229,2477],{"emptyLinePlaceholder":134},[28,57231,57232,57234,57236],{"class":30,"line":58},[28,57233,1120],{"class":211},[28,57235,51385],{"class":51351},[28,57237,51358],{"class":211},[28,57239,57240,57242,57244,57246,57248,57250],{"class":30,"line":70},[28,57241,52195],{"class":211},[28,57243,51395],{"class":51351},[28,57245,51398],{"class":34},[28,57247,257],{"class":211},[28,57249,51403],{"class":64},[28,57251,51358],{"class":211},[28,57253,57254,57256,57258,57260,57262,57264,57266,57268,57270],{"class":30,"line":78},[28,57255,52195],{"class":211},[28,57257,51395],{"class":51351},[28,57259,14997],{"class":34},[28,57261,257],{"class":211},[28,57263,51442],{"class":64},[28,57265,51422],{"class":34},[28,57267,257],{"class":211},[28,57269,51449],{"class":64},[28,57271,51358],{"class":211},[28,57273,57274,57276,57278,57280,57282],{"class":30,"line":86},[28,57275,52195],{"class":211},[28,57277,51458],{"class":51351},[28,57279,51461],{"class":211},[28,57281,51458],{"class":51351},[28,57283,51358],{"class":211},[28,57285,57286,57288,57290],{"class":30,"line":97},[28,57287,52195],{"class":211},[28,57289,126],{"class":51351},[28,57291,51358],{"class":211},[28,57293,57294,57296],{"class":30,"line":108},[28,57295,6480],{"class":51351},[28,57297,15649],{"class":211},[28,57299,57300,57302,57304,57306],{"class":30,"line":1407},[28,57301,54757],{"class":38},[28,57303,51488],{"class":211},[28,57305,401],{"class":38},[28,57307,1370],{"class":211},[28,57309,57310,57312,57314,57316],{"class":30,"line":1690},[28,57311,54746],{"class":38},[28,57313,51488],{"class":211},[28,57315,401],{"class":38},[28,57317,1370],{"class":211},[28,57319,57320],{"class":30,"line":1695},[28,57321,2264],{"class":211},[28,57323,57324],{"class":30,"line":1701},[28,57325,2477],{"emptyLinePlaceholder":134},[28,57327,57328,57331],{"class":30,"line":1706},[28,57329,57330],{"class":51351},"    h2",[28,57332,15649],{"class":211},[28,57334,57335,57338,57340,57342],{"class":30,"line":1720},[28,57336,57337],{"class":38},"      text-align",[28,57339,51488],{"class":211},[28,57341,51643],{"class":38},[28,57343,1370],{"class":211},[28,57345,57346],{"class":30,"line":1725},[28,57347,2264],{"class":211},[28,57349,57350],{"class":30,"line":1731},[28,57351,2477],{"emptyLinePlaceholder":134},[28,57353,57354,57356],{"class":30,"line":1752},[28,57355,54803],{"class":34},[28,57357,15649],{"class":211},[28,57359,57360,57362,57364,57366,57368],{"class":30,"line":1757},[28,57361,54822],{"class":38},[28,57363,51488],{"class":211},[28,57365,1617],{"class":38},[28,57367,51543],{"class":207},[28,57369,1370],{"class":211},[28,57371,57372,57374,57376,57378,57380,57382],{"class":30,"line":1771},[28,57373,54757],{"class":38},[28,57375,51488],{"class":211},[28,57377,866],{"class":38},[28,57379,51543],{"class":207},[28,57381,51607],{"class":38},[28,57383,1370],{"class":211},[28,57385,57386,57388,57390,57392],{"class":30,"line":1776},[28,57387,55060],{"class":38},[28,57389,51488],{"class":211},[28,57391,51528],{"class":38},[28,57393,1370],{"class":211},[28,57395,57396,57398,57400,57402,57404],{"class":30,"line":1805},[28,57397,54973],{"class":38},[28,57399,51488],{"class":211},[28,57401,1035],{"class":38},[28,57403,51543],{"class":207},[28,57405,1370],{"class":211},[28,57407,57408,57411,57413,57415,57417],{"class":30,"line":1810},[28,57409,57410],{"class":38},"      line-height",[28,57412,51488],{"class":211},[28,57414,611],{"class":38},[28,57416,51543],{"class":207},[28,57418,1370],{"class":211},[28,57420,57421],{"class":30,"line":1827},[28,57422,2264],{"class":211},[28,57424,57425],{"class":30,"line":1832},[28,57426,2477],{"emptyLinePlaceholder":134},[28,57428,57429,57432],{"class":30,"line":1837},[28,57430,57431],{"class":34},"    .qs",[28,57433,15649],{"class":211},[28,57435,57436],{"class":30,"line":1842},[28,57437,2477],{"emptyLinePlaceholder":134},[28,57439,57440,57442,57444,57447,57449],{"class":30,"line":1856},[28,57441,54822],{"class":38},[28,57443,51488],{"class":211},[28,57445,57446],{"class":38},"450",[28,57448,51543],{"class":207},[28,57450,1370],{"class":211},[28,57452,57453,57455,57457,57459,57461],{"class":30,"line":1861},[28,57454,54836],{"class":38},[28,57456,51488],{"class":211},[28,57458,611],{"class":38},[28,57460,51543],{"class":207},[28,57462,1370],{"class":211},[28,57464,57465,57468,57470,57473],{"class":30,"line":2654},[28,57466,57467],{"class":38},"      color",[28,57469,51488],{"class":211},[28,57471,57472],{"class":38},"red",[28,57474,1370],{"class":211},[28,57476,57477],{"class":30,"line":2668},[28,57478,2477],{"emptyLinePlaceholder":134},[28,57480,57481],{"class":30,"line":2676},[28,57482,2264],{"class":211},[28,57484,57485],{"class":30,"line":2681},[28,57486,2477],{"emptyLinePlaceholder":134},[28,57488,57489,57492],{"class":30,"line":2687},[28,57490,57491],{"class":34},"    .btns",[28,57493,15649],{"class":211},[28,57495,57496,57498,57500,57502],{"class":30,"line":2693},[28,57497,57337],{"class":38},[28,57499,51488],{"class":211},[28,57501,51643],{"class":38},[28,57503,1370],{"class":211},[28,57505,57506],{"class":30,"line":2698},[28,57507,2264],{"class":211},[28,57509,57510],{"class":30,"line":8025},[28,57511,2477],{"emptyLinePlaceholder":134},[28,57513,57514,57516,57519],{"class":30,"line":8049},[28,57515,57491],{"class":34},[28,57517,57518],{"class":51351}," button",[28,57520,15649],{"class":211},[28,57522,57523,57525,57527,57529,57531],{"class":30,"line":8054},[28,57524,54822],{"class":38},[28,57526,51488],{"class":211},[28,57528,1027],{"class":38},[28,57530,51543],{"class":207},[28,57532,1370],{"class":211},[28,57534,57535,57537,57539,57541,57543],{"class":30,"line":8060},[28,57536,54836],{"class":38},[28,57538,51488],{"class":211},[28,57540,483],{"class":38},[28,57542,51543],{"class":207},[28,57544,1370],{"class":211},[28,57546,57547,57549,57551,57553,57556,57558],{"class":30,"line":8087},[28,57548,54757],{"class":38},[28,57550,51488],{"class":211},[28,57552,401],{"class":38},[28,57554,57555],{"class":38}," 50",[28,57557,51543],{"class":207},[28,57559,1370],{"class":211},[28,57561,57562],{"class":30,"line":8092},[28,57563,2264],{"class":211},[28,57565,57566,57568,57570],{"class":30,"line":8098},[28,57567,52468],{"class":211},[28,57569,126],{"class":51351},[28,57571,51358],{"class":211},[28,57573,57574,57576,57578],{"class":30,"line":8110},[28,57575,51836],{"class":211},[28,57577,51385],{"class":51351},[28,57579,51358],{"class":211},[28,57581,57582],{"class":30,"line":8122},[28,57583,2477],{"emptyLinePlaceholder":134},[28,57585,57586,57588,57590],{"class":30,"line":8134},[28,57587,1120],{"class":211},[28,57589,51851],{"class":51351},[28,57591,51358],{"class":211},[28,57593,57594,57596,57598,57601,57603],{"class":30,"line":9793},[28,57595,52195],{"class":211},[28,57597,149],{"class":51351},[28,57599,57600],{"class":211},">随机点名\u003C\u002F",[28,57602,149],{"class":51351},[28,57604,51358],{"class":211},[28,57606,57607,57609,57611,57613,57615,57617],{"class":30,"line":9818},[28,57608,52195],{"class":211},[28,57610,51662],{"class":51351},[28,57612,53537],{"class":34},[28,57614,257],{"class":211},[28,57616,53542],{"class":64},[28,57618,51358],{"class":211},[28,57620,57621,57623,57625,57628,57630],{"class":30,"line":9841},[28,57622,51392],{"class":211},[28,57624,28],{"class":51351},[28,57626,57627],{"class":211},">名字是：\u003C\u002F",[28,57629,28],{"class":51351},[28,57631,51358],{"class":211},[28,57633,57634,57636,57638,57640,57642,57645,57648,57650],{"class":30,"line":9865},[28,57635,51392],{"class":211},[28,57637,51662],{"class":51351},[28,57639,53537],{"class":34},[28,57641,257],{"class":211},[28,57643,57644],{"class":64},"\"qs\"",[28,57646,57647],{"class":211},">这里显示姓名\u003C\u002F",[28,57649,51662],{"class":51351},[28,57651,51358],{"class":211},[28,57653,57654,57656,57658],{"class":30,"line":9870},[28,57655,52468],{"class":211},[28,57657,51662],{"class":51351},[28,57659,51358],{"class":211},[28,57661,57662,57664,57666,57668,57670,57673],{"class":30,"line":9875},[28,57663,52195],{"class":211},[28,57665,51662],{"class":51351},[28,57667,53537],{"class":34},[28,57669,257],{"class":211},[28,57671,57672],{"class":64},"\"btns\"",[28,57674,51358],{"class":211},[28,57676,57677,57679,57681,57683,57685,57688,57691,57693],{"class":30,"line":9880},[28,57678,51392],{"class":211},[28,57680,53938],{"class":51351},[28,57682,53537],{"class":34},[28,57684,257],{"class":211},[28,57686,57687],{"class":64},"\"start\"",[28,57689,57690],{"class":211},">开始\u003C\u002F",[28,57692,53938],{"class":51351},[28,57694,51358],{"class":211},[28,57696,57697,57699,57701,57703,57705,57708,57711,57713],{"class":30,"line":9889},[28,57698,51392],{"class":211},[28,57700,53938],{"class":51351},[28,57702,53537],{"class":34},[28,57704,257],{"class":211},[28,57706,57707],{"class":64},"\"end\"",[28,57709,57710],{"class":211},">结束\u003C\u002F",[28,57712,53938],{"class":51351},[28,57714,51358],{"class":211},[28,57716,57717,57719,57721],{"class":30,"line":9894},[28,57718,52468],{"class":211},[28,57720,51662],{"class":51351},[28,57722,51358],{"class":211},[28,57724,57725],{"class":30,"line":9900},[28,57726,2477],{"emptyLinePlaceholder":134},[28,57728,57729,57731,57733],{"class":30,"line":9921},[28,57730,52195],{"class":211},[28,57732,51864],{"class":51351},[28,57734,51358],{"class":211},[28,57736,57737],{"class":30,"line":9927},[28,57738,57739],{"class":269},"    \u002F\u002F 数据数组\n",[28,57741,57742,57744,57747,57749,57751,57754,57756,57759,57761,57764,57766,57769,57771,57774],{"class":30,"line":9941},[28,57743,11298],{"class":207},[28,57745,57746],{"class":38}," arr",[28,57748,13641],{"class":207},[28,57750,52277],{"class":211},[28,57752,57753],{"class":64},"'马超'",[28,57755,12512],{"class":211},[28,57757,57758],{"class":64},"'黄忠'",[28,57760,12512],{"class":211},[28,57762,57763],{"class":64},"'赵云'",[28,57765,12512],{"class":211},[28,57767,57768],{"class":64},"'关羽'",[28,57770,12512],{"class":211},[28,57772,57773],{"class":64},"'张飞'",[28,57775,33297],{"class":211},[28,57777,57778,57780,57783,57785,57787,57789,57791,57794],{"class":30,"line":9947},[28,57779,11298],{"class":207},[28,57781,57782],{"class":38}," qs",[28,57784,13641],{"class":207},[28,57786,54447],{"class":211},[28,57788,54450],{"class":34},[28,57790,212],{"class":211},[28,57792,57793],{"class":64},"'.qs'",[28,57795,218],{"class":211},[28,57797,57798],{"class":30,"line":9974},[28,57799,57800],{"class":269},"    \u002F\u002F 1.业务1.开始按钮模块\n",[28,57802,57803,57805,57807,57809,57811,57813,57815,57818],{"class":30,"line":9983},[28,57804,11298],{"class":207},[28,57806,4261],{"class":38},[28,57808,13641],{"class":207},[28,57810,54447],{"class":211},[28,57812,54450],{"class":34},[28,57814,212],{"class":211},[28,57816,57817],{"class":64},"'.start'",[28,57819,218],{"class":211},[28,57821,57822],{"class":30,"line":9989},[28,57823,57824],{"class":269},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[28,57826,57827,57829,57832,57834],{"class":30,"line":9997},[28,57828,52270],{"class":207},[28,57830,57831],{"class":211}," timerId ",[28,57833,257],{"class":207},[28,57835,47384],{"class":38},[28,57837,57838],{"class":30,"line":10002},[28,57839,57840],{"class":269},"    \u002F\u002F 随机号要全局变量\n",[28,57842,57843,57845,57848,57850],{"class":30,"line":16681},[28,57844,52270],{"class":207},[28,57846,57847],{"class":211}," random ",[28,57849,257],{"class":207},[28,57851,47384],{"class":38},[28,57853,57854],{"class":30,"line":16687},[28,57855,57856],{"class":269},"    \u002F\u002F 1.1 添加点击事件\n",[28,57858,57859,57862,57865,57867,57870,57872,57874],{"class":30,"line":16710},[28,57860,57861],{"class":211},"    start.",[28,57863,57864],{"class":34},"addEventListener",[28,57866,212],{"class":211},[28,57868,57869],{"class":64},"'click'",[28,57871,12512],{"class":211},[28,57873,54500],{"class":207},[28,57875,54503],{"class":211},[28,57877,57878,57881,57883,57885,57887,57889],{"class":30,"line":16716},[28,57879,57880],{"class":211},"      timerId ",[28,57882,257],{"class":207},[28,57884,54495],{"class":34},[28,57886,212],{"class":211},[28,57888,54500],{"class":207},[28,57890,54503],{"class":211},[28,57892,57893],{"class":30,"line":16739},[28,57894,57895],{"class":269},"        \u002F\u002F 随机数\n",[28,57897,57898,57901,57903,57906,57909,57912,57914,57916,57918,57920],{"class":30,"line":16753},[28,57899,57900],{"class":211},"        random ",[28,57902,257],{"class":207},[28,57904,57905],{"class":34}," parseInt",[28,57907,57908],{"class":211},"(Math.",[28,57910,57911],{"class":34},"random",[28,57913,13127],{"class":211},[28,57915,665],{"class":207},[28,57917,52016],{"class":211},[28,57919,52019],{"class":38},[28,57921,218],{"class":211},[28,57923,57924,57927,57929],{"class":30,"line":16773},[28,57925,57926],{"class":211},"        qs.innerHTML ",[28,57928,257],{"class":207},[28,57930,57931],{"class":211}," arr[random]\n",[28,57933,57934,57937,57939],{"class":30,"line":16779},[28,57935,57936],{"class":211},"      }, ",[28,57938,483],{"class":38},[28,57940,218],{"class":211},[28,57942,57943],{"class":30,"line":16790},[28,57944,57945],{"class":269},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[28,57947,57948,57950,57953,57955,57958,57960],{"class":30,"line":16813},[28,57949,54531],{"class":207},[28,57951,57952],{"class":211}," (arr.",[28,57954,52019],{"class":38},[28,57956,57957],{"class":207}," ===",[28,57959,25189],{"class":38},[28,57961,12519],{"class":211},[28,57963,57964],{"class":30,"line":16835},[28,57965,57966],{"class":269},"        \u002F\u002F start.disabled = true\n",[28,57968,57969],{"class":30,"line":16840},[28,57970,57971],{"class":269},"        \u002F\u002F end.disabled = true\n",[28,57973,57974],{"class":30,"line":16846},[28,57975,57976],{"class":269},"        \u002F\u002F 可以合起来写\n",[28,57978,57979,57982,57984,57987,57989],{"class":30,"line":16860},[28,57980,57981],{"class":211},"        start.disabled ",[28,57983,257],{"class":207},[28,57985,57986],{"class":211}," end.disabled ",[28,57988,257],{"class":207},[28,57990,57991],{"class":38}," true\n",[28,57993,57994],{"class":30,"line":16873},[28,57995,52449],{"class":211},[28,57997,57998],{"class":30,"line":16878},[28,57999,33512],{"class":211},[28,58001,58002],{"class":30,"line":16892},[28,58003,58004],{"class":269},"    \u002F\u002F 1.2 关闭按钮模块\n",[28,58006,58007,58009,58011,58013,58015,58017,58019,58022],{"class":30,"line":16897},[28,58008,11298],{"class":207},[28,58010,4277],{"class":38},[28,58012,13641],{"class":207},[28,58014,54447],{"class":211},[28,58016,54450],{"class":34},[28,58018,212],{"class":211},[28,58020,58021],{"class":64},"'.end'",[28,58023,218],{"class":211},[28,58025,58026,58029,58031,58033,58035,58037,58039],{"class":30,"line":16903},[28,58027,58028],{"class":211},"    end.",[28,58030,57864],{"class":34},[28,58032,212],{"class":211},[28,58034,57869],{"class":64},[28,58036,12512],{"class":211},[28,58038,54500],{"class":207},[28,58040,54503],{"class":211},[28,58042,58043,58046],{"class":30,"line":16908},[28,58044,58045],{"class":34},"      clearInterval",[28,58047,58048],{"class":211},"(timerId)\n",[28,58050,58051],{"class":30,"line":16922},[28,58052,58053],{"class":269},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[28,58055,58056,58059,58062,58065,58067],{"class":30,"line":16927},[28,58057,58058],{"class":211},"      arr.",[28,58060,58061],{"class":34},"splice",[28,58063,58064],{"class":211},"(random, ",[28,58066,427],{"class":38},[28,58068,218],{"class":211},[28,58070,58071],{"class":30,"line":16932},[28,58072,33512],{"class":211},[28,58074,58075],{"class":30,"line":16946},[28,58076,2477],{"emptyLinePlaceholder":134},[28,58078,58079,58081,58083],{"class":30,"line":16958},[28,58080,52468],{"class":211},[28,58082,51864],{"class":51351},[28,58084,51358],{"class":211},[28,58086,58087,58089,58091],{"class":30,"line":16963},[28,58088,51836],{"class":211},[28,58090,51851],{"class":51351},[28,58092,51358],{"class":211},[28,58094,58095],{"class":30,"line":16976},[28,58096,2477],{"emptyLinePlaceholder":134},[28,58098,58099,58101,58103],{"class":30,"line":16981},[28,58100,51836],{"class":211},[28,58102,50686],{"class":51351},[28,58104,51358],{"class":211},[14,58106,58107],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[177,58109,58111],{"id":58110},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[18,58113,58115],{"className":50684,"code":58114,"language":50686,"meta":23,"style":23},"\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",[25,58116,58117,58127,58141,58145,58153,58167,58187,58199,58207,58211,58219,58231,58239,58258,58275,58291,58301,58305,58313,58321,58325],{"__ignoreMap":23},[28,58118,58119,58121,58123,58125],{"class":30,"line":31},[28,58120,51348],{"class":211},[28,58122,51352],{"class":51351},[28,58124,51355],{"class":34},[28,58126,51358],{"class":211},[28,58128,58129,58131,58133,58135,58137,58139],{"class":30,"line":42},[28,58130,1120],{"class":211},[28,58132,50686],{"class":51351},[28,58134,51367],{"class":34},[28,58136,257],{"class":211},[28,58138,51372],{"class":64},[28,58140,51358],{"class":211},[28,58142,58143],{"class":30,"line":50},[28,58144,2477],{"emptyLinePlaceholder":134},[28,58146,58147,58149,58151],{"class":30,"line":58},[28,58148,1120],{"class":211},[28,58150,51385],{"class":51351},[28,58152,51358],{"class":211},[28,58154,58155,58157,58159,58161,58163,58165],{"class":30,"line":70},[28,58156,52195],{"class":211},[28,58158,51395],{"class":51351},[28,58160,51398],{"class":34},[28,58162,257],{"class":211},[28,58164,51403],{"class":64},[28,58166,51358],{"class":211},[28,58168,58169,58171,58173,58175,58177,58179,58181,58183,58185],{"class":30,"line":78},[28,58170,52195],{"class":211},[28,58172,51395],{"class":51351},[28,58174,14997],{"class":34},[28,58176,257],{"class":211},[28,58178,51442],{"class":64},[28,58180,51422],{"class":34},[28,58182,257],{"class":211},[28,58184,51449],{"class":64},[28,58186,51358],{"class":211},[28,58188,58189,58191,58193,58195,58197],{"class":30,"line":86},[28,58190,52195],{"class":211},[28,58192,51458],{"class":51351},[28,58194,51461],{"class":211},[28,58196,51458],{"class":51351},[28,58198,51358],{"class":211},[28,58200,58201,58203,58205],{"class":30,"line":97},[28,58202,51836],{"class":211},[28,58204,51385],{"class":51351},[28,58206,51358],{"class":211},[28,58208,58209],{"class":30,"line":108},[28,58210,2477],{"emptyLinePlaceholder":134},[28,58212,58213,58215,58217],{"class":30,"line":1407},[28,58214,1120],{"class":211},[28,58216,51851],{"class":51351},[28,58218,51358],{"class":211},[28,58220,58221,58223,58225,58227,58229],{"class":30,"line":1690},[28,58222,52195],{"class":211},[28,58224,53938],{"class":51351},[28,58226,53944],{"class":211},[28,58228,53938],{"class":51351},[28,58230,51358],{"class":211},[28,58232,58233,58235,58237],{"class":30,"line":1695},[28,58234,52195],{"class":211},[28,58236,51864],{"class":51351},[28,58238,51358],{"class":211},[28,58240,58241,58243,58245,58247,58249,58251,58253,58256],{"class":30,"line":1701},[28,58242,11298],{"class":207},[28,58244,54442],{"class":38},[28,58246,13641],{"class":207},[28,58248,54447],{"class":211},[28,58250,54450],{"class":34},[28,58252,212],{"class":211},[28,58254,58255],{"class":64},"'button'",[28,58257,218],{"class":211},[28,58259,58260,58263,58265,58267,58269,58271,58273],{"class":30,"line":1706},[28,58261,58262],{"class":211},"    btn.",[28,58264,57864],{"class":34},[28,58266,212],{"class":211},[28,58268,57869],{"class":64},[28,58270,12512],{"class":211},[28,58272,54500],{"class":207},[28,58274,54503],{"class":211},[28,58276,58277,58280,58282,58284,58287,58289],{"class":30,"line":1720},[28,58278,58279],{"class":207},"      const",[28,58281,2317],{"class":38},[28,58283,13641],{"class":207},[28,58285,58286],{"class":211}," Math.",[28,58288,57911],{"class":34},[28,58290,2053],{"class":211},[28,58292,58293,58296,58299],{"class":30,"line":1725},[28,58294,58295],{"class":211},"      console.",[28,58297,58298],{"class":34},"log",[28,58300,225],{"class":211},[28,58302,58303],{"class":30,"line":1731},[28,58304,33512],{"class":211},[28,58306,58307,58309,58311],{"class":30,"line":1752},[28,58308,52468],{"class":211},[28,58310,51864],{"class":51351},[28,58312,51358],{"class":211},[28,58314,58315,58317,58319],{"class":30,"line":1757},[28,58316,51836],{"class":211},[28,58318,51851],{"class":51351},[28,58320,51358],{"class":211},[28,58322,58323],{"class":30,"line":1771},[28,58324,2477],{"emptyLinePlaceholder":134},[28,58326,58327,58329,58331],{"class":30,"line":1776},[28,58328,51836],{"class":211},[28,58330,50686],{"class":51351},[28,58332,51358],{"class":211},[14,58334,58335],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58337,58338],{},"常量不可以重新赋值",[14,58340,58341],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[18,58343,58345],{"className":50684,"code":58344,"language":50686,"meta":23,"style":23},"\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",[25,58346,58347,58357,58371,58375,58383,58397,58417,58429,58437,58441,58449,58461,58469,58480,58498,58514,58528,58536,58540,58548,58556,58560],{"__ignoreMap":23},[28,58348,58349,58351,58353,58355],{"class":30,"line":31},[28,58350,51348],{"class":211},[28,58352,51352],{"class":51351},[28,58354,51355],{"class":34},[28,58356,51358],{"class":211},[28,58358,58359,58361,58363,58365,58367,58369],{"class":30,"line":42},[28,58360,1120],{"class":211},[28,58362,50686],{"class":51351},[28,58364,51367],{"class":34},[28,58366,257],{"class":211},[28,58368,51372],{"class":64},[28,58370,51358],{"class":211},[28,58372,58373],{"class":30,"line":50},[28,58374,2477],{"emptyLinePlaceholder":134},[28,58376,58377,58379,58381],{"class":30,"line":58},[28,58378,1120],{"class":211},[28,58380,51385],{"class":51351},[28,58382,51358],{"class":211},[28,58384,58385,58387,58389,58391,58393,58395],{"class":30,"line":70},[28,58386,52195],{"class":211},[28,58388,51395],{"class":51351},[28,58390,51398],{"class":34},[28,58392,257],{"class":211},[28,58394,51403],{"class":64},[28,58396,51358],{"class":211},[28,58398,58399,58401,58403,58405,58407,58409,58411,58413,58415],{"class":30,"line":78},[28,58400,52195],{"class":211},[28,58402,51395],{"class":51351},[28,58404,14997],{"class":34},[28,58406,257],{"class":211},[28,58408,51442],{"class":64},[28,58410,51422],{"class":34},[28,58412,257],{"class":211},[28,58414,51449],{"class":64},[28,58416,51358],{"class":211},[28,58418,58419,58421,58423,58425,58427],{"class":30,"line":86},[28,58420,52195],{"class":211},[28,58422,51458],{"class":51351},[28,58424,51461],{"class":211},[28,58426,51458],{"class":51351},[28,58428,51358],{"class":211},[28,58430,58431,58433,58435],{"class":30,"line":97},[28,58432,51836],{"class":211},[28,58434,51385],{"class":51351},[28,58436,51358],{"class":211},[28,58438,58439],{"class":30,"line":108},[28,58440,2477],{"emptyLinePlaceholder":134},[28,58442,58443,58445,58447],{"class":30,"line":1407},[28,58444,1120],{"class":211},[28,58446,51851],{"class":51351},[28,58448,51358],{"class":211},[28,58450,58451,58453,58455,58457,58459],{"class":30,"line":1690},[28,58452,52195],{"class":211},[28,58454,53938],{"class":51351},[28,58456,53944],{"class":211},[28,58458,53938],{"class":51351},[28,58460,51358],{"class":211},[28,58462,58463,58465,58467],{"class":30,"line":1695},[28,58464,52195],{"class":211},[28,58466,51864],{"class":51351},[28,58468,51358],{"class":211},[28,58470,58471,58473,58475,58477],{"class":30,"line":1701},[28,58472,11298],{"class":207},[28,58474,2317],{"class":38},[28,58476,13641],{"class":207},[28,58478,58479],{"class":38}," 10\n",[28,58481,58482,58484,58486,58488,58490,58492,58494,58496],{"class":30,"line":1706},[28,58483,11298],{"class":207},[28,58485,54442],{"class":38},[28,58487,13641],{"class":207},[28,58489,54447],{"class":211},[28,58491,54450],{"class":34},[28,58493,212],{"class":211},[28,58495,58255],{"class":64},[28,58497,218],{"class":211},[28,58499,58500,58502,58504,58506,58508,58510,58512],{"class":30,"line":1720},[28,58501,58262],{"class":211},[28,58503,57864],{"class":34},[28,58505,212],{"class":211},[28,58507,57869],{"class":64},[28,58509,12512],{"class":211},[28,58511,54500],{"class":207},[28,58513,54503],{"class":211},[28,58515,58516,58518,58520,58522,58524,58526],{"class":30,"line":1725},[28,58517,58279],{"class":207},[28,58519,2317],{"class":38},[28,58521,13641],{"class":207},[28,58523,58286],{"class":211},[28,58525,57911],{"class":34},[28,58527,2053],{"class":211},[28,58529,58530,58532,58534],{"class":30,"line":1731},[28,58531,58295],{"class":211},[28,58533,58298],{"class":34},[28,58535,225],{"class":211},[28,58537,58538],{"class":30,"line":1752},[28,58539,33512],{"class":211},[28,58541,58542,58544,58546],{"class":30,"line":1757},[28,58543,52468],{"class":211},[28,58545,51864],{"class":51351},[28,58547,51358],{"class":211},[28,58549,58550,58552,58554],{"class":30,"line":1771},[28,58551,51836],{"class":211},[28,58553,51851],{"class":51351},[28,58555,51358],{"class":211},[28,58557,58558],{"class":30,"line":1776},[28,58559,2477],{"emptyLinePlaceholder":134},[28,58561,58562,58564,58566],{"class":30,"line":1805},[28,58563,51836],{"class":211},[28,58565,50686],{"class":51351},[28,58567,51358],{"class":211},[14,58569,58570],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[18,58572,58574],{"className":50684,"code":58573,"language":50686,"meta":23,"style":23},"\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",[25,58575,58576,58586,58600,58604,58612,58626,58646,58658,58666,58670,58678,58690,58698,58708,58726,58742,58755,58763,58767,58775,58783,58787],{"__ignoreMap":23},[28,58577,58578,58580,58582,58584],{"class":30,"line":31},[28,58579,51348],{"class":211},[28,58581,51352],{"class":51351},[28,58583,51355],{"class":34},[28,58585,51358],{"class":211},[28,58587,58588,58590,58592,58594,58596,58598],{"class":30,"line":42},[28,58589,1120],{"class":211},[28,58591,50686],{"class":51351},[28,58593,51367],{"class":34},[28,58595,257],{"class":211},[28,58597,51372],{"class":64},[28,58599,51358],{"class":211},[28,58601,58602],{"class":30,"line":50},[28,58603,2477],{"emptyLinePlaceholder":134},[28,58605,58606,58608,58610],{"class":30,"line":58},[28,58607,1120],{"class":211},[28,58609,51385],{"class":51351},[28,58611,51358],{"class":211},[28,58613,58614,58616,58618,58620,58622,58624],{"class":30,"line":70},[28,58615,52195],{"class":211},[28,58617,51395],{"class":51351},[28,58619,51398],{"class":34},[28,58621,257],{"class":211},[28,58623,51403],{"class":64},[28,58625,51358],{"class":211},[28,58627,58628,58630,58632,58634,58636,58638,58640,58642,58644],{"class":30,"line":78},[28,58629,52195],{"class":211},[28,58631,51395],{"class":51351},[28,58633,14997],{"class":34},[28,58635,257],{"class":211},[28,58637,51442],{"class":64},[28,58639,51422],{"class":34},[28,58641,257],{"class":211},[28,58643,51449],{"class":64},[28,58645,51358],{"class":211},[28,58647,58648,58650,58652,58654,58656],{"class":30,"line":86},[28,58649,52195],{"class":211},[28,58651,51458],{"class":51351},[28,58653,51461],{"class":211},[28,58655,51458],{"class":51351},[28,58657,51358],{"class":211},[28,58659,58660,58662,58664],{"class":30,"line":97},[28,58661,51836],{"class":211},[28,58663,51385],{"class":51351},[28,58665,51358],{"class":211},[28,58667,58668],{"class":30,"line":108},[28,58669,2477],{"emptyLinePlaceholder":134},[28,58671,58672,58674,58676],{"class":30,"line":1407},[28,58673,1120],{"class":211},[28,58675,51851],{"class":51351},[28,58677,51358],{"class":211},[28,58679,58680,58682,58684,58686,58688],{"class":30,"line":1690},[28,58681,52195],{"class":211},[28,58683,53938],{"class":51351},[28,58685,53944],{"class":211},[28,58687,53938],{"class":51351},[28,58689,51358],{"class":211},[28,58691,58692,58694,58696],{"class":30,"line":1695},[28,58693,52195],{"class":211},[28,58695,51864],{"class":51351},[28,58697,51358],{"class":211},[28,58699,58700,58702,58704,58706],{"class":30,"line":1701},[28,58701,11298],{"class":207},[28,58703,2317],{"class":38},[28,58705,13641],{"class":207},[28,58707,58479],{"class":38},[28,58709,58710,58712,58714,58716,58718,58720,58722,58724],{"class":30,"line":1706},[28,58711,11298],{"class":207},[28,58713,54442],{"class":38},[28,58715,13641],{"class":207},[28,58717,54447],{"class":211},[28,58719,54450],{"class":34},[28,58721,212],{"class":211},[28,58723,58255],{"class":64},[28,58725,218],{"class":211},[28,58727,58728,58730,58732,58734,58736,58738,58740],{"class":30,"line":1720},[28,58729,58262],{"class":211},[28,58731,57864],{"class":34},[28,58733,212],{"class":211},[28,58735,57869],{"class":64},[28,58737,12512],{"class":211},[28,58739,54500],{"class":207},[28,58741,54503],{"class":211},[28,58743,58744,58747,58749,58751,58753],{"class":30,"line":1725},[28,58745,58746],{"class":211},"      num ",[28,58748,257],{"class":207},[28,58750,58286],{"class":211},[28,58752,57911],{"class":34},[28,58754,2053],{"class":211},[28,58756,58757,58759,58761],{"class":30,"line":1731},[28,58758,58295],{"class":211},[28,58760,58298],{"class":34},[28,58762,225],{"class":211},[28,58764,58765],{"class":30,"line":1752},[28,58766,33512],{"class":211},[28,58768,58769,58771,58773],{"class":30,"line":1757},[28,58770,52468],{"class":211},[28,58772,51864],{"class":51351},[28,58774,51358],{"class":211},[28,58776,58777,58779,58781],{"class":30,"line":1771},[28,58778,51836],{"class":211},[28,58780,51851],{"class":51351},[28,58782,51358],{"class":211},[28,58784,58785],{"class":30,"line":1776},[28,58786,2477],{"emptyLinePlaceholder":134},[28,58788,58789,58791,58793],{"class":30,"line":1805},[28,58790,51836],{"class":211},[28,58792,50686],{"class":51351},[28,58794,51358],{"class":211},[14,58796,58797],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[177,58799,58801],{"id":58800},"_324-事件监听版本","3.2.4 事件监听版本",[14,58803,58804],{},[1540,58805],{"alt":23,"src":58806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58808,58809],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58811,58812],{},"这种方式会覆盖前边的事件监听:",[18,58814,58816],{"className":50684,"code":58815,"language":50686,"meta":23,"style":23},"\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",[25,58817,58818,58828,58842,58846,58854,58868,58888,58900,58908,58912,58920,58932,58940,58958,58972,58983,58987,58999,59009,59013,59021,59029,59033],{"__ignoreMap":23},[28,58819,58820,58822,58824,58826],{"class":30,"line":31},[28,58821,51348],{"class":211},[28,58823,51352],{"class":51351},[28,58825,51355],{"class":34},[28,58827,51358],{"class":211},[28,58829,58830,58832,58834,58836,58838,58840],{"class":30,"line":42},[28,58831,1120],{"class":211},[28,58833,50686],{"class":51351},[28,58835,51367],{"class":34},[28,58837,257],{"class":211},[28,58839,51372],{"class":64},[28,58841,51358],{"class":211},[28,58843,58844],{"class":30,"line":50},[28,58845,2477],{"emptyLinePlaceholder":134},[28,58847,58848,58850,58852],{"class":30,"line":58},[28,58849,1120],{"class":211},[28,58851,51385],{"class":51351},[28,58853,51358],{"class":211},[28,58855,58856,58858,58860,58862,58864,58866],{"class":30,"line":70},[28,58857,52195],{"class":211},[28,58859,51395],{"class":51351},[28,58861,51398],{"class":34},[28,58863,257],{"class":211},[28,58865,51403],{"class":64},[28,58867,51358],{"class":211},[28,58869,58870,58872,58874,58876,58878,58880,58882,58884,58886],{"class":30,"line":78},[28,58871,52195],{"class":211},[28,58873,51395],{"class":51351},[28,58875,14997],{"class":34},[28,58877,257],{"class":211},[28,58879,51442],{"class":64},[28,58881,51422],{"class":34},[28,58883,257],{"class":211},[28,58885,51449],{"class":64},[28,58887,51358],{"class":211},[28,58889,58890,58892,58894,58896,58898],{"class":30,"line":86},[28,58891,52195],{"class":211},[28,58893,51458],{"class":51351},[28,58895,51461],{"class":211},[28,58897,51458],{"class":51351},[28,58899,51358],{"class":211},[28,58901,58902,58904,58906],{"class":30,"line":97},[28,58903,51836],{"class":211},[28,58905,51385],{"class":51351},[28,58907,51358],{"class":211},[28,58909,58910],{"class":30,"line":108},[28,58911,2477],{"emptyLinePlaceholder":134},[28,58913,58914,58916,58918],{"class":30,"line":1407},[28,58915,1120],{"class":211},[28,58917,51851],{"class":51351},[28,58919,51358],{"class":211},[28,58921,58922,58924,58926,58928,58930],{"class":30,"line":1690},[28,58923,52195],{"class":211},[28,58925,53938],{"class":51351},[28,58927,53944],{"class":211},[28,58929,53938],{"class":51351},[28,58931,51358],{"class":211},[28,58933,58934,58936,58938],{"class":30,"line":1695},[28,58935,52195],{"class":211},[28,58937,51864],{"class":51351},[28,58939,51358],{"class":211},[28,58941,58942,58944,58946,58948,58950,58952,58954,58956],{"class":30,"line":1701},[28,58943,11298],{"class":207},[28,58945,54442],{"class":38},[28,58947,13641],{"class":207},[28,58949,54447],{"class":211},[28,58951,54450],{"class":34},[28,58953,212],{"class":211},[28,58955,58255],{"class":64},[28,58957,218],{"class":211},[28,58959,58960,58962,58965,58967,58970],{"class":30,"line":1706},[28,58961,58262],{"class":211},[28,58963,58964],{"class":34},"onclick",[28,58966,13641],{"class":207},[28,58968,58969],{"class":207}," function",[28,58971,54503],{"class":211},[28,58973,58974,58977,58979,58981],{"class":30,"line":1720},[28,58975,58976],{"class":34},"      alert",[28,58978,212],{"class":211},[28,58980,682],{"class":38},[28,58982,218],{"class":211},[28,58984,58985],{"class":30,"line":1725},[28,58986,2264],{"class":211},[28,58988,58989,58991,58993,58995,58997],{"class":30,"line":1731},[28,58990,58262],{"class":211},[28,58992,58964],{"class":34},[28,58994,13641],{"class":207},[28,58996,58969],{"class":207},[28,58998,54503],{"class":211},[28,59000,59001,59003,59005,59007],{"class":30,"line":1752},[28,59002,58976],{"class":34},[28,59004,212],{"class":211},[28,59006,960],{"class":38},[28,59008,218],{"class":211},[28,59010,59011],{"class":30,"line":1757},[28,59012,2264],{"class":211},[28,59014,59015,59017,59019],{"class":30,"line":1771},[28,59016,52468],{"class":211},[28,59018,51864],{"class":51351},[28,59020,51358],{"class":211},[28,59022,59023,59025,59027],{"class":30,"line":1776},[28,59024,51836],{"class":211},[28,59026,51851],{"class":51351},[28,59028,51358],{"class":211},[28,59030,59031],{"class":30,"line":1805},[28,59032,2477],{"emptyLinePlaceholder":134},[28,59034,59035,59037,59039],{"class":30,"line":1810},[28,59036,51836],{"class":211},[28,59038,50686],{"class":51351},[28,59040,51358],{"class":211},[14,59042,59043],{},"只要点击就输出结果为22,前边11被覆盖了",[18,59045,59047],{"className":50684,"code":59046,"language":50686,"meta":23,"style":23},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[25,59048,59049,59054,59059,59063,59068,59073],{"__ignoreMap":23},[28,59050,59051],{"class":30,"line":31},[28,59052,59053],{"class":211},"  btn.addEventListener('click', function () {\n",[28,59055,59056],{"class":30,"line":42},[28,59057,59058],{"class":211},"      alert(11)\n",[28,59060,59061],{"class":30,"line":50},[28,59062,33512],{"class":211},[28,59064,59065],{"class":30,"line":58},[28,59066,59067],{"class":211},"    btn.addEventListener('click', function () {\n",[28,59069,59070],{"class":30,"line":70},[28,59071,59072],{"class":211},"      alert(22)\n",[28,59074,59075],{"class":30,"line":78},[28,59076,33512],{"class":211},[14,59078,59079],{},"点击第一次输出11,第二次点击为22",[177,59081,59083],{"id":59082},"_325-事件类型","3.2.5 事件类型",[14,59085,59086],{},[1540,59087],{"alt":23,"src":59088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22075,59090,59092],{"id":59091},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59094,59095],{},"补充知识:",[14,59097,59098],{},"轮播图自动播放模块,可以使用",[14,59100,59101],{},"let timerId = setInterval(function () {",[14,59103,59104],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59106,59107],{},"用js方法模拟进行点击事件,click必须加()",[14,59109,59110],{},"next.click()",[14,59112,59113],{},"}, 1000)",[14,59115,59116],{},[1540,59117],{"alt":23,"src":59118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[18,59120,59122],{"className":53118,"code":59121,"language":53120,"meta":23,"style":23},"\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",[25,59123,59124,59128,59138,59152,59156,59164,59179,59199,59219,59232,59240,59245,59250,59254,59258,59263,59268,59273,59278,59282,59286,59291,59296,59301,59305,59309,59314,59318,59323,59328,59332,59336,59341,59346,59351,59356,59361,59365,59369,59374,59379,59384,59389,59394,59398,59402,59407,59412,59417,59422,59427,59432,59437,59442,59447,59452,59456,59460,59465,59470,59474,59478,59483,59488,59492,59497,59502,59506,59510,59515,59519,59524,59529,59533,59538,59542,59546,59551,59556,59561,59566,59571,59576,59581,59585,59589,59593,59598,59603,59608,59613,59617,59625,59633,59637,59645,59660,59674,59695,59703,59717,59730,59745,59764,59776,59788,59800,59812,59824,59836,59848,59856,59871,59895,59919,59927,59935,59943,59951,59956,59961,59966,59971,59976,59981,59986,59991,59996,60001,60005,60010,60015,60020,60025,60030,60035,60040,60045,60050,60054,60059,60064,60069,60074,60079,60084,60089,60094,60099,60104,60109,60114,60118,60122,60127,60132,60137,60141,60146,60151,60156,60161,60166,60170,60175,60179,60183,60187,60191,60195,60199,60204,60209,60214,60219,60224,60229,60234,60239,60244,60248,60252,60257,60262,60267,60272,60277,60281,60286,60291,60296,60301,60306,60311,60315,60319,60324,60328,60333,60337,60342,60347,60352,60357,60362,60367,60371,60379,60387,60391],{"__ignoreMap":23},[28,59125,59126],{"class":30,"line":31},[28,59127,2477],{"emptyLinePlaceholder":134},[28,59129,59130,59132,59134,59136],{"class":30,"line":42},[28,59131,51348],{"class":211},[28,59133,51352],{"class":207},[28,59135,51355],{"class":38},[28,59137,51358],{"class":211},[28,59139,59140,59142,59144,59146,59148,59150],{"class":30,"line":50},[28,59141,1120],{"class":211},[28,59143,50686],{"class":51351},[28,59145,51367],{"class":34},[28,59147,257],{"class":211},[28,59149,51372],{"class":64},[28,59151,51358],{"class":211},[28,59153,59154],{"class":30,"line":58},[28,59155,2477],{"emptyLinePlaceholder":134},[28,59157,59158,59160,59162],{"class":30,"line":70},[28,59159,1120],{"class":211},[28,59161,51385],{"class":51351},[28,59163,51358],{"class":211},[28,59165,59166,59168,59170,59172,59174,59176],{"class":30,"line":78},[28,59167,52195],{"class":211},[28,59169,51395],{"class":51351},[28,59171,51398],{"class":34},[28,59173,257],{"class":211},[28,59175,51403],{"class":64},[28,59177,59178],{"class":211}," \u002F>\n",[28,59180,59181,59183,59185,59187,59189,59191,59193,59195,59197],{"class":30,"line":86},[28,59182,52195],{"class":211},[28,59184,51395],{"class":51351},[28,59186,51414],{"class":34},[28,59188,257],{"class":211},[28,59190,51419],{"class":64},[28,59192,51422],{"class":34},[28,59194,257],{"class":211},[28,59196,51427],{"class":64},[28,59198,59178],{"class":211},[28,59200,59201,59203,59205,59207,59209,59211,59213,59215,59217],{"class":30,"line":97},[28,59202,52195],{"class":211},[28,59204,51395],{"class":51351},[28,59206,14997],{"class":34},[28,59208,257],{"class":211},[28,59210,51442],{"class":64},[28,59212,51422],{"class":34},[28,59214,257],{"class":211},[28,59216,51449],{"class":64},[28,59218,59178],{"class":211},[28,59220,59221,59223,59225,59228,59230],{"class":30,"line":108},[28,59222,52195],{"class":211},[28,59224,51458],{"class":51351},[28,59226,59227],{"class":211},">轮播图点击切换\u003C\u002F",[28,59229,51458],{"class":51351},[28,59231,51358],{"class":211},[28,59233,59234,59236,59238],{"class":30,"line":1407},[28,59235,52195],{"class":211},[28,59237,126],{"class":51351},[28,59239,51358],{"class":211},[28,59241,59242],{"class":30,"line":1690},[28,59243,59244],{"class":211},"    * {\n",[28,59246,59247],{"class":30,"line":1695},[28,59248,59249],{"class":211},"      box-sizing: border-box;\n",[28,59251,59252],{"class":30,"line":1701},[28,59253,2264],{"class":211},[28,59255,59256],{"class":30,"line":1706},[28,59257,2477],{"emptyLinePlaceholder":134},[28,59259,59260],{"class":30,"line":1720},[28,59261,59262],{"class":211},"    .slider {\n",[28,59264,59265],{"class":30,"line":1725},[28,59266,59267],{"class":211},"      width: 560px;\n",[28,59269,59270],{"class":30,"line":1731},[28,59271,59272],{"class":211},"      height: 400px;\n",[28,59274,59275],{"class":30,"line":1752},[28,59276,59277],{"class":211},"      overflow: hidden;\n",[28,59279,59280],{"class":30,"line":1757},[28,59281,2264],{"class":211},[28,59283,59284],{"class":30,"line":1771},[28,59285,2477],{"emptyLinePlaceholder":134},[28,59287,59288],{"class":30,"line":1776},[28,59289,59290],{"class":211},"    .slider-wrapper {\n",[28,59292,59293],{"class":30,"line":1805},[28,59294,59295],{"class":211},"      width: 100%;\n",[28,59297,59298],{"class":30,"line":1810},[28,59299,59300],{"class":211},"      height: 320px;\n",[28,59302,59303],{"class":30,"line":1827},[28,59304,2264],{"class":211},[28,59306,59307],{"class":30,"line":1832},[28,59308,2477],{"emptyLinePlaceholder":134},[28,59310,59311],{"class":30,"line":1837},[28,59312,59313],{"class":211},"    .slider-wrapper img {\n",[28,59315,59316],{"class":30,"line":1842},[28,59317,59295],{"class":211},[28,59319,59320],{"class":30,"line":1856},[28,59321,59322],{"class":211},"      height: 100%;\n",[28,59324,59325],{"class":30,"line":1861},[28,59326,59327],{"class":211},"      display: block;\n",[28,59329,59330],{"class":30,"line":2654},[28,59331,2264],{"class":211},[28,59333,59334],{"class":30,"line":2668},[28,59335,2477],{"emptyLinePlaceholder":134},[28,59337,59338],{"class":30,"line":2676},[28,59339,59340],{"class":211},"    .slider-footer {\n",[28,59342,59343],{"class":30,"line":2681},[28,59344,59345],{"class":211},"      height: 80px;\n",[28,59347,59348],{"class":30,"line":2687},[28,59349,59350],{"class":211},"      background-color: rgb(100, 67, 68);\n",[28,59352,59353],{"class":30,"line":2693},[28,59354,59355],{"class":211},"      padding: 12px 12px 0 12px;\n",[28,59357,59358],{"class":30,"line":2698},[28,59359,59360],{"class":211},"      position: relative;\n",[28,59362,59363],{"class":30,"line":8025},[28,59364,2264],{"class":211},[28,59366,59367],{"class":30,"line":8049},[28,59368,2477],{"emptyLinePlaceholder":134},[28,59370,59371],{"class":30,"line":8054},[28,59372,59373],{"class":211},"    .slider-footer .toggle {\n",[28,59375,59376],{"class":30,"line":8060},[28,59377,59378],{"class":211},"      position: absolute;\n",[28,59380,59381],{"class":30,"line":8087},[28,59382,59383],{"class":211},"      right: 0;\n",[28,59385,59386],{"class":30,"line":8092},[28,59387,59388],{"class":211},"      top: 12px;\n",[28,59390,59391],{"class":30,"line":8098},[28,59392,59393],{"class":211},"      display: flex;\n",[28,59395,59396],{"class":30,"line":8110},[28,59397,2264],{"class":211},[28,59399,59400],{"class":30,"line":8122},[28,59401,2477],{"emptyLinePlaceholder":134},[28,59403,59404],{"class":30,"line":8134},[28,59405,59406],{"class":211},"    .slider-footer .toggle button {\n",[28,59408,59409],{"class":30,"line":9793},[28,59410,59411],{"class":211},"      margin-right: 12px;\n",[28,59413,59414],{"class":30,"line":9818},[28,59415,59416],{"class":211},"      width: 28px;\n",[28,59418,59419],{"class":30,"line":9841},[28,59420,59421],{"class":211},"      height: 28px;\n",[28,59423,59424],{"class":30,"line":9865},[28,59425,59426],{"class":211},"      appearance: none;\n",[28,59428,59429],{"class":30,"line":9870},[28,59430,59431],{"class":211},"      border: none;\n",[28,59433,59434],{"class":30,"line":9875},[28,59435,59436],{"class":211},"      background: rgba(255, 255, 255, 0.1);\n",[28,59438,59439],{"class":30,"line":9880},[28,59440,59441],{"class":211},"      color: #fff;\n",[28,59443,59444],{"class":30,"line":9889},[28,59445,59446],{"class":211},"      border-radius: 4px;\n",[28,59448,59449],{"class":30,"line":9894},[28,59450,59451],{"class":211},"      cursor: pointer;\n",[28,59453,59454],{"class":30,"line":9900},[28,59455,2264],{"class":211},[28,59457,59458],{"class":30,"line":9921},[28,59459,2477],{"emptyLinePlaceholder":134},[28,59461,59462],{"class":30,"line":9927},[28,59463,59464],{"class":211},"    .slider-footer .toggle button:hover {\n",[28,59466,59467],{"class":30,"line":9941},[28,59468,59469],{"class":211},"      background: rgba(255, 255, 255, 0.2);\n",[28,59471,59472],{"class":30,"line":9947},[28,59473,2264],{"class":211},[28,59475,59476],{"class":30,"line":9974},[28,59477,2477],{"emptyLinePlaceholder":134},[28,59479,59480],{"class":30,"line":9983},[28,59481,59482],{"class":211},"    .slider-footer p {\n",[28,59484,59485],{"class":30,"line":9989},[28,59486,59487],{"class":211},"      margin: 0;\n",[28,59489,59490],{"class":30,"line":9997},[28,59491,59441],{"class":211},[28,59493,59494],{"class":30,"line":10002},[28,59495,59496],{"class":211},"      font-size: 18px;\n",[28,59498,59499],{"class":30,"line":16681},[28,59500,59501],{"class":211},"      margin-bottom: 10px;\n",[28,59503,59504],{"class":30,"line":16687},[28,59505,2264],{"class":211},[28,59507,59508],{"class":30,"line":16710},[28,59509,2477],{"emptyLinePlaceholder":134},[28,59511,59512],{"class":30,"line":16716},[28,59513,59514],{"class":211},"    .slider-indicator {\n",[28,59516,59517],{"class":30,"line":16739},[28,59518,59487],{"class":211},[28,59520,59521],{"class":30,"line":16753},[28,59522,59523],{"class":211},"      padding: 0;\n",[28,59525,59526],{"class":30,"line":16773},[28,59527,59528],{"class":211},"      list-style: none;\n",[28,59530,59531],{"class":30,"line":16779},[28,59532,59393],{"class":211},[28,59534,59535],{"class":30,"line":16790},[28,59536,59537],{"class":211},"      align-items: center;\n",[28,59539,59540],{"class":30,"line":16813},[28,59541,2264],{"class":211},[28,59543,59544],{"class":30,"line":16835},[28,59545,2477],{"emptyLinePlaceholder":134},[28,59547,59548],{"class":30,"line":16840},[28,59549,59550],{"class":211},"    .slider-indicator li {\n",[28,59552,59553],{"class":30,"line":16846},[28,59554,59555],{"class":211},"      width: 8px;\n",[28,59557,59558],{"class":30,"line":16860},[28,59559,59560],{"class":211},"      height: 8px;\n",[28,59562,59563],{"class":30,"line":16873},[28,59564,59565],{"class":211},"      margin: 4px;\n",[28,59567,59568],{"class":30,"line":16878},[28,59569,59570],{"class":211},"      border-radius: 50%;\n",[28,59572,59573],{"class":30,"line":16892},[28,59574,59575],{"class":211},"      background: #fff;\n",[28,59577,59578],{"class":30,"line":16897},[28,59579,59580],{"class":211},"      opacity: 0.4;\n",[28,59582,59583],{"class":30,"line":16903},[28,59584,59451],{"class":211},[28,59586,59587],{"class":30,"line":16908},[28,59588,2264],{"class":211},[28,59590,59591],{"class":30,"line":16922},[28,59592,2477],{"emptyLinePlaceholder":134},[28,59594,59595],{"class":30,"line":16927},[28,59596,59597],{"class":211},"    .slider-indicator li.active {\n",[28,59599,59600],{"class":30,"line":16932},[28,59601,59602],{"class":211},"      width: 12px;\n",[28,59604,59605],{"class":30,"line":16946},[28,59606,59607],{"class":211},"      height: 12px;\n",[28,59609,59610],{"class":30,"line":16958},[28,59611,59612],{"class":211},"      opacity: 1;\n",[28,59614,59615],{"class":30,"line":16963},[28,59616,2264],{"class":211},[28,59618,59619,59621,59623],{"class":30,"line":16976},[28,59620,52468],{"class":211},[28,59622,126],{"class":51351},[28,59624,51358],{"class":211},[28,59626,59627,59629,59631],{"class":30,"line":16981},[28,59628,51836],{"class":211},[28,59630,51385],{"class":51351},[28,59632,51358],{"class":211},[28,59634,59635],{"class":30,"line":16986},[28,59636,2477],{"emptyLinePlaceholder":134},[28,59638,59639,59641,59643],{"class":30,"line":16991},[28,59640,1120],{"class":211},[28,59642,51851],{"class":51351},[28,59644,51358],{"class":211},[28,59646,59647,59649,59651,59653,59655,59658],{"class":30,"line":17004},[28,59648,52195],{"class":211},[28,59650,51662],{"class":51351},[28,59652,53537],{"class":34},[28,59654,257],{"class":211},[28,59656,59657],{"class":64},"\"slider\"",[28,59659,51358],{"class":211},[28,59661,59662,59664,59666,59668,59670,59672],{"class":30,"line":17009},[28,59663,51392],{"class":211},[28,59665,51662],{"class":51351},[28,59667,53537],{"class":34},[28,59669,257],{"class":211},[28,59671,55278],{"class":64},[28,59673,51358],{"class":211},[28,59675,59676,59678,59680,59682,59684,59687,59689,59691,59693],{"class":30,"line":32684},[28,59677,55285],{"class":211},[28,59679,1540],{"class":51351},[28,59681,55290],{"class":34},[28,59683,257],{"class":211},[28,59685,59686],{"class":64},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[28,59688,55298],{"class":34},[28,59690,257],{"class":211},[28,59692,7729],{"class":64},[28,59694,59178],{"class":211},[28,59696,59697,59699,59701],{"class":30,"line":32690},[28,59698,51827],{"class":211},[28,59700,51662],{"class":51351},[28,59702,51358],{"class":211},[28,59704,59705,59707,59709,59711,59713,59715],{"class":30,"line":32696},[28,59706,51392],{"class":211},[28,59708,51662],{"class":51351},[28,59710,53537],{"class":34},[28,59712,257],{"class":211},[28,59714,55325],{"class":64},[28,59716,51358],{"class":211},[28,59718,59719,59721,59723,59726,59728],{"class":30,"line":32702},[28,59720,55285],{"class":211},[28,59722,14],{"class":51351},[28,59724,59725],{"class":211},">对人类来说会不会太超前了？\u003C\u002F",[28,59727,14],{"class":51351},[28,59729,51358],{"class":211},[28,59731,59732,59734,59736,59738,59740,59743],{"class":30,"line":32708},[28,59733,55285],{"class":211},[28,59735,116],{"class":51351},[28,59737,53537],{"class":34},[28,59739,257],{"class":211},[28,59741,59742],{"class":64},"\"slider-indicator\"",[28,59744,51358],{"class":211},[28,59746,59747,59749,59751,59753,59755,59758,59760,59762],{"class":30,"line":32719},[28,59748,55353],{"class":211},[28,59750,119],{"class":51351},[28,59752,53537],{"class":34},[28,59754,257],{"class":211},[28,59756,59757],{"class":64},"\"active\"",[28,59759,55365],{"class":211},[28,59761,119],{"class":51351},[28,59763,51358],{"class":211},[28,59765,59766,59768,59770,59772,59774],{"class":30,"line":32725},[28,59767,55353],{"class":211},[28,59769,119],{"class":51351},[28,59771,55365],{"class":211},[28,59773,119],{"class":51351},[28,59775,51358],{"class":211},[28,59777,59778,59780,59782,59784,59786],{"class":30,"line":32745},[28,59779,55353],{"class":211},[28,59781,119],{"class":51351},[28,59783,55365],{"class":211},[28,59785,119],{"class":51351},[28,59787,51358],{"class":211},[28,59789,59790,59792,59794,59796,59798],{"class":30,"line":32751},[28,59791,55353],{"class":211},[28,59793,119],{"class":51351},[28,59795,55365],{"class":211},[28,59797,119],{"class":51351},[28,59799,51358],{"class":211},[28,59801,59802,59804,59806,59808,59810],{"class":30,"line":32762},[28,59803,55353],{"class":211},[28,59805,119],{"class":51351},[28,59807,55365],{"class":211},[28,59809,119],{"class":51351},[28,59811,51358],{"class":211},[28,59813,59814,59816,59818,59820,59822],{"class":30,"line":32768},[28,59815,55353],{"class":211},[28,59817,119],{"class":51351},[28,59819,55365],{"class":211},[28,59821,119],{"class":51351},[28,59823,51358],{"class":211},[28,59825,59826,59828,59830,59832,59834],{"class":30,"line":32774},[28,59827,55353],{"class":211},[28,59829,119],{"class":51351},[28,59831,55365],{"class":211},[28,59833,119],{"class":51351},[28,59835,51358],{"class":211},[28,59837,59838,59840,59842,59844,59846],{"class":30,"line":32780},[28,59839,55353],{"class":211},[28,59841,119],{"class":51351},[28,59843,55365],{"class":211},[28,59845,119],{"class":51351},[28,59847,51358],{"class":211},[28,59849,59850,59852,59854],{"class":30,"line":32786},[28,59851,55458],{"class":211},[28,59853,116],{"class":51351},[28,59855,51358],{"class":211},[28,59857,59858,59860,59862,59864,59866,59869],{"class":30,"line":32792},[28,59859,55285],{"class":211},[28,59861,51662],{"class":51351},[28,59863,53537],{"class":34},[28,59865,257],{"class":211},[28,59867,59868],{"class":64},"\"toggle\"",[28,59870,51358],{"class":211},[28,59872,59873,59875,59877,59879,59881,59884,59886,59889,59891,59893],{"class":30,"line":32798},[28,59874,55353],{"class":211},[28,59876,53938],{"class":51351},[28,59878,53537],{"class":34},[28,59880,257],{"class":211},[28,59882,59883],{"class":64},"\"prev\"",[28,59885,1170],{"class":211},[28,59887,59888],{"class":38},"&lt;",[28,59890,51836],{"class":211},[28,59892,53938],{"class":51351},[28,59894,51358],{"class":211},[28,59896,59897,59899,59901,59903,59905,59908,59910,59913,59915,59917],{"class":30,"line":32804},[28,59898,55353],{"class":211},[28,59900,53938],{"class":51351},[28,59902,53537],{"class":34},[28,59904,257],{"class":211},[28,59906,59907],{"class":64},"\"next\"",[28,59909,1170],{"class":211},[28,59911,59912],{"class":38},"&gt;",[28,59914,51836],{"class":211},[28,59916,53938],{"class":51351},[28,59918,51358],{"class":211},[28,59920,59921,59923,59925],{"class":30,"line":32824},[28,59922,55458],{"class":211},[28,59924,51662],{"class":51351},[28,59926,51358],{"class":211},[28,59928,59929,59931,59933],{"class":30,"line":32830},[28,59930,51827],{"class":211},[28,59932,51662],{"class":51351},[28,59934,51358],{"class":211},[28,59936,59937,59939,59941],{"class":30,"line":32846},[28,59938,52468],{"class":211},[28,59940,51662],{"class":51351},[28,59942,51358],{"class":211},[28,59944,59945,59947,59949],{"class":30,"line":32852},[28,59946,52195],{"class":211},[28,59948,51864],{"class":51351},[28,59950,51358],{"class":211},[28,59952,59953],{"class":30,"line":32866},[28,59954,59955],{"class":211},"    \u002F\u002F 1. 初始数据\n",[28,59957,59958],{"class":30,"line":32872},[28,59959,59960],{"class":211},"    const data = [\n",[28,59962,59963],{"class":30,"line":32887},[28,59964,59965],{"class":211},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[28,59967,59968],{"class":30,"line":32893},[28,59969,59970],{"class":211},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[28,59972,59973],{"class":30,"line":32902},[28,59974,59975],{"class":211},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[28,59977,59978],{"class":30,"line":32908},[28,59979,59980],{"class":211},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[28,59982,59983],{"class":30,"line":32917},[28,59984,59985],{"class":211},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[28,59987,59988],{"class":30,"line":32923},[28,59989,59990],{"class":211},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[28,59992,59993],{"class":30,"line":32929},[28,59994,59995],{"class":211},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[28,59997,59998],{"class":30,"line":32938},[28,59999,60000],{"class":211},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[28,60002,60003],{"class":30,"line":32944},[28,60004,53160],{"class":211},[28,60006,60007],{"class":30,"line":32955},[28,60008,60009],{"class":211},"    \u002F\u002F 获取元素\n",[28,60011,60012],{"class":30,"line":32961},[28,60013,60014],{"class":211},"    const img = document.querySelector('.slider-wrapper img')\n",[28,60016,60017],{"class":30,"line":32980},[28,60018,60019],{"class":211},"    const p = document.querySelector('.slider-footer p')\n",[28,60021,60022],{"class":30,"line":32986},[28,60023,60024],{"class":211},"    const footer = document.querySelector('.slider-footer')\n",[28,60026,60027],{"class":30,"line":32997},[28,60028,60029],{"class":211},"    \u002F\u002F 1. 右按钮业务\n",[28,60031,60032],{"class":30,"line":33003},[28,60033,60034],{"class":211},"    \u002F\u002F 1.1 获取右侧按钮 \n",[28,60036,60037],{"class":30,"line":33023},[28,60038,60039],{"class":211},"    const next = document.querySelector('.next')\n",[28,60041,60042],{"class":30,"line":33039},[28,60043,60044],{"class":211},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[28,60046,60047],{"class":30,"line":33045},[28,60048,60049],{"class":211},"    \u002F\u002F 1.2 注册点击事件\n",[28,60051,60052],{"class":30,"line":33059},[28,60053,2477],{"emptyLinePlaceholder":134},[28,60055,60056],{"class":30,"line":33065},[28,60057,60058],{"class":211},"    next.addEventListener('click', function () {\n",[28,60060,60061],{"class":30,"line":33071},[28,60062,60063],{"class":211},"      \u002F\u002F console.log(11)\n",[28,60065,60066],{"class":30,"line":33082},[28,60067,60068],{"class":211},"      i++\n",[28,60070,60071],{"class":30,"line":33088},[28,60072,60073],{"class":211},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[28,60075,60076],{"class":30,"line":33094},[28,60077,60078],{"class":211},"      \u002F\u002F if (i >= 8) {\n",[28,60080,60081],{"class":30,"line":33104},[28,60082,60083],{"class":211},"      \u002F\u002F   i = 0\n",[28,60085,60086],{"class":30,"line":33110},[28,60087,60088],{"class":211},"      \u002F\u002F }\n",[28,60090,60091],{"class":30,"line":33121},[28,60092,60093],{"class":211},"      i = i >= data.length ? 0 : i\n",[28,60095,60096],{"class":30,"line":33127},[28,60097,60098],{"class":211},"      \u002F\u002F 1.3 得到对应的对象\n",[28,60100,60101],{"class":30,"line":33137},[28,60102,60103],{"class":211},"      \u002F\u002F console.log(data[i])\n",[28,60105,60106],{"class":30,"line":33142},[28,60107,60108],{"class":211},"      \u002F\u002F 调用函数\n",[28,60110,60111],{"class":30,"line":33148},[28,60112,60113],{"class":211},"      toggle()\n",[28,60115,60116],{"class":30,"line":33197},[28,60117,33512],{"class":211},[28,60119,60120],{"class":30,"line":33244},[28,60121,2477],{"emptyLinePlaceholder":134},[28,60123,60124],{"class":30,"line":33249},[28,60125,60126],{"class":211},"    \u002F\u002F 2. 左侧按钮业务\n",[28,60128,60129],{"class":30,"line":33255},[28,60130,60131],{"class":211},"    \u002F\u002F 2.1 获取左侧按钮 \n",[28,60133,60134],{"class":30,"line":33274},[28,60135,60136],{"class":211},"    const prev = document.querySelector('.prev')\n",[28,60138,60139],{"class":30,"line":33280},[28,60140,60049],{"class":211},[28,60142,60143],{"class":30,"line":33300},[28,60144,60145],{"class":211},"    prev.addEventListener('click', function () {\n",[28,60147,60148],{"class":30,"line":33306},[28,60149,60150],{"class":211},"      i--\n",[28,60152,60153],{"class":30,"line":33312},[28,60154,60155],{"class":211},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[28,60157,60158],{"class":30,"line":33322},[28,60159,60160],{"class":211},"      \u002F\u002F if (i \u003C 0) {\n",[28,60162,60163],{"class":30,"line":33327},[28,60164,60165],{"class":211},"      \u002F\u002F   i = 7\n",[28,60167,60168],{"class":30,"line":33333},[28,60169,60088],{"class":211},[28,60171,60172],{"class":30,"line":33349},[28,60173,60174],{"class":211},"      i = i \u003C 0 ? data.length - 1 : i\n",[28,60176,60177],{"class":30,"line":33394},[28,60178,60098],{"class":211},[28,60180,60181],{"class":30,"line":33400},[28,60182,60103],{"class":211},[28,60184,60185],{"class":30,"line":33406},[28,60186,60108],{"class":211},[28,60188,60189],{"class":30,"line":33412},[28,60190,60113],{"class":211},[28,60192,60193],{"class":30,"line":33423},[28,60194,33512],{"class":211},[28,60196,60197],{"class":30,"line":33429},[28,60198,2477],{"emptyLinePlaceholder":134},[28,60200,60201],{"class":30,"line":33435},[28,60202,60203],{"class":211},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[28,60205,60206],{"class":30,"line":33441},[28,60207,60208],{"class":211},"    function toggle() {\n",[28,60210,60211],{"class":30,"line":33459},[28,60212,60213],{"class":211},"      \u002F\u002F 1.4 渲染对应的数据\n",[28,60215,60216],{"class":30,"line":33473},[28,60217,60218],{"class":211},"      img.src = data[i].url\n",[28,60220,60221],{"class":30,"line":33482},[28,60222,60223],{"class":211},"      p.innerHTML = data[i].title\n",[28,60225,60226],{"class":30,"line":33491},[28,60227,60228],{"class":211},"      footer.style.backgroundColor = data[i].color\n",[28,60230,60231],{"class":30,"line":33500},[28,60232,60233],{"class":211},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[28,60235,60236],{"class":30,"line":33509},[28,60237,60238],{"class":211},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[28,60240,60241],{"class":30,"line":33515},[28,60242,60243],{"class":211},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[28,60245,60246],{"class":30,"line":33521},[28,60247,2264],{"class":211},[28,60249,60250],{"class":30,"line":33529},[28,60251,2477],{"emptyLinePlaceholder":134},[28,60253,60254],{"class":30,"line":33534},[28,60255,60256],{"class":211},"    \u002F\u002F 3. 自动播放模块\n",[28,60258,60259],{"class":30,"line":33540},[28,60260,60261],{"class":211},"    let timerId = setInterval(function () {\n",[28,60263,60264],{"class":30,"line":33551},[28,60265,60266],{"class":211},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[28,60268,60269],{"class":30,"line":33557},[28,60270,60271],{"class":211},"      next.click()\n",[28,60273,60274],{"class":30,"line":33577},[28,60275,60276],{"class":211},"    }, 1000)\n",[28,60278,60279],{"class":30,"line":33583},[28,60280,2477],{"emptyLinePlaceholder":134},[28,60282,60283],{"class":30,"line":33589},[28,60284,60285],{"class":211},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[28,60287,60288],{"class":30,"line":33595},[28,60289,60290],{"class":211},"    const slider = document.querySelector('.slider')\n",[28,60292,60293],{"class":30,"line":33612},[28,60294,60295],{"class":211},"    \u002F\u002F 注册事件\n",[28,60297,60298],{"class":30,"line":33618},[28,60299,60300],{"class":211},"    slider.addEventListener('mouseenter', function () {\n",[28,60302,60303],{"class":30,"line":33624},[28,60304,60305],{"class":211},"      \u002F\u002F 停止定时器\n",[28,60307,60308],{"class":30,"line":33630},[28,60309,60310],{"class":211},"      clearInterval(timerId)\n",[28,60312,60313],{"class":30,"line":33636},[28,60314,33512],{"class":211},[28,60316,60317],{"class":30,"line":33642},[28,60318,2477],{"emptyLinePlaceholder":134},[28,60320,60321],{"class":30,"line":33669},[28,60322,60323],{"class":211},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[28,60325,60326],{"class":30,"line":33693},[28,60327,60295],{"class":211},[28,60329,60330],{"class":30,"line":33699},[28,60331,60332],{"class":211},"    slider.addEventListener('mouseleave', function () {\n",[28,60334,60335],{"class":30,"line":33705},[28,60336,60305],{"class":211},[28,60338,60339],{"class":30,"line":33711},[28,60340,60341],{"class":211},"      if (timerId) clearInterval(timerId)\n",[28,60343,60344],{"class":30,"line":33722},[28,60345,60346],{"class":211},"      \u002F\u002F 开启定时器\n",[28,60348,60349],{"class":30,"line":33733},[28,60350,60351],{"class":211},"      timerId = setInterval(function () {\n",[28,60353,60354],{"class":30,"line":33739},[28,60355,60356],{"class":211},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[28,60358,60359],{"class":30,"line":33756},[28,60360,60361],{"class":211},"        next.click()\n",[28,60363,60364],{"class":30,"line":33779},[28,60365,60366],{"class":211},"      }, 1000)\n",[28,60368,60369],{"class":30,"line":33802},[28,60370,33512],{"class":211},[28,60372,60373,60375,60377],{"class":30,"line":33808},[28,60374,52468],{"class":211},[28,60376,51864],{"class":51351},[28,60378,51358],{"class":211},[28,60380,60381,60383,60385],{"class":30,"line":33813},[28,60382,51836],{"class":211},[28,60384,51851],{"class":51351},[28,60386,51358],{"class":211},[28,60388,60389],{"class":30,"line":33822},[28,60390,2477],{"emptyLinePlaceholder":134},[28,60392,60393,60395,60397],{"class":30,"line":33832},[28,60394,51836],{"class":211},[28,60396,50686],{"class":51351},[28,60398,51358],{"class":211},[22075,60400,60402],{"id":60401},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60404,60405],{},"小米搜索框案例：",[18,60407,60409],{"className":50684,"code":60408,"language":50686,"meta":23,"style":23},"\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",[25,60410,60411,60421,60435,60439,60447,60461,60481,60501,60513,60521,60527,60537,60547,60559,60563,60567,60574,60578,60589,60593,60597,60604,60615,60628,60642,60646,60650,60659,60671,60683,60697,60710,60723,60741,60752,60756,60760,60769,60786,60790,60794,60801,60811,60821,60832,60845,60857,60873,60884,60896,60900,60904,60912,60923,60940,60952,60964,60975,60979,60983,60994,61005,61009,61017,61021,61029,61033,61041,61056,61079,61094,61125,61152,61179,61206,61233,61260,61287,61296,61304,61312,61317,61337,61357,61362,61367,61385,61390,61400,61405,61419,61424,61429,61446,61455,61467,61471,61479,61487,61491],{"__ignoreMap":23},[28,60412,60413,60415,60417,60419],{"class":30,"line":31},[28,60414,51348],{"class":211},[28,60416,51352],{"class":51351},[28,60418,51355],{"class":34},[28,60420,51358],{"class":211},[28,60422,60423,60425,60427,60429,60431,60433],{"class":30,"line":42},[28,60424,1120],{"class":211},[28,60426,50686],{"class":51351},[28,60428,51367],{"class":34},[28,60430,257],{"class":211},[28,60432,51372],{"class":64},[28,60434,51358],{"class":211},[28,60436,60437],{"class":30,"line":50},[28,60438,2477],{"emptyLinePlaceholder":134},[28,60440,60441,60443,60445],{"class":30,"line":58},[28,60442,1120],{"class":211},[28,60444,51385],{"class":51351},[28,60446,51358],{"class":211},[28,60448,60449,60451,60453,60455,60457,60459],{"class":30,"line":70},[28,60450,51392],{"class":211},[28,60452,51395],{"class":51351},[28,60454,51398],{"class":34},[28,60456,257],{"class":211},[28,60458,51403],{"class":64},[28,60460,51358],{"class":211},[28,60462,60463,60465,60467,60469,60471,60473,60475,60477,60479],{"class":30,"line":78},[28,60464,51392],{"class":211},[28,60466,51395],{"class":51351},[28,60468,51414],{"class":34},[28,60470,257],{"class":211},[28,60472,51419],{"class":64},[28,60474,51422],{"class":34},[28,60476,257],{"class":211},[28,60478,51427],{"class":64},[28,60480,51358],{"class":211},[28,60482,60483,60485,60487,60489,60491,60493,60495,60497,60499],{"class":30,"line":86},[28,60484,51392],{"class":211},[28,60486,51395],{"class":51351},[28,60488,14997],{"class":34},[28,60490,257],{"class":211},[28,60492,51442],{"class":64},[28,60494,51422],{"class":34},[28,60496,257],{"class":211},[28,60498,51449],{"class":64},[28,60500,51358],{"class":211},[28,60502,60503,60505,60507,60509,60511],{"class":30,"line":97},[28,60504,51392],{"class":211},[28,60506,51458],{"class":51351},[28,60508,51461],{"class":211},[28,60510,51458],{"class":51351},[28,60512,51358],{"class":211},[28,60514,60515,60517,60519],{"class":30,"line":108},[28,60516,51392],{"class":211},[28,60518,126],{"class":51351},[28,60520,51358],{"class":211},[28,60522,60523,60525],{"class":30,"line":1407},[28,60524,51478],{"class":51351},[28,60526,15649],{"class":211},[28,60528,60529,60531,60533,60535],{"class":30,"line":1690},[28,60530,51485],{"class":38},[28,60532,51488],{"class":211},[28,60534,401],{"class":38},[28,60536,1370],{"class":211},[28,60538,60539,60541,60543,60545],{"class":30,"line":1695},[28,60540,51497],{"class":38},[28,60542,51488],{"class":211},[28,60544,401],{"class":38},[28,60546,1370],{"class":211},[28,60548,60549,60552,60554,60557],{"class":30,"line":1701},[28,60550,60551],{"class":38},"            box-sizing",[28,60553,51488],{"class":211},[28,60555,60556],{"class":38},"border-box",[28,60558,1370],{"class":211},[28,60560,60561],{"class":30,"line":1706},[28,60562,2606],{"class":211},[28,60564,60565],{"class":30,"line":1720},[28,60566,2477],{"emptyLinePlaceholder":134},[28,60568,60569,60572],{"class":30,"line":1725},[28,60570,60571],{"class":51351},"        ul",[28,60573,15649],{"class":211},[28,60575,60576],{"class":30,"line":1731},[28,60577,2477],{"emptyLinePlaceholder":134},[28,60579,60580,60583,60585,60587],{"class":30,"line":1752},[28,60581,60582],{"class":38},"            list-style",[28,60584,51488],{"class":211},[28,60586,54788],{"class":38},[28,60588,1370],{"class":211},[28,60590,60591],{"class":30,"line":1757},[28,60592,2606],{"class":211},[28,60594,60595],{"class":30,"line":1771},[28,60596,2477],{"emptyLinePlaceholder":134},[28,60598,60599,60602],{"class":30,"line":1776},[28,60600,60601],{"class":34},"        .mi",[28,60603,15649],{"class":211},[28,60605,60606,60609,60611,60613],{"class":30,"line":1805},[28,60607,60608],{"class":38},"            position",[28,60610,51488],{"class":211},[28,60612,54815],{"class":38},[28,60614,1370],{"class":211},[28,60616,60617,60619,60621,60624,60626],{"class":30,"line":1810},[28,60618,51535],{"class":38},[28,60620,51488],{"class":211},[28,60622,60623],{"class":38},"223",[28,60625,51543],{"class":207},[28,60627,1370],{"class":211},[28,60629,60630,60632,60634,60636,60638,60640],{"class":30,"line":1827},[28,60631,51485],{"class":38},[28,60633,51488],{"class":211},[28,60635,521],{"class":38},[28,60637,51543],{"class":207},[28,60639,51607],{"class":38},[28,60641,1370],{"class":211},[28,60643,60644],{"class":30,"line":1832},[28,60645,2606],{"class":211},[28,60647,60648],{"class":30,"line":1837},[28,60649,2477],{"emptyLinePlaceholder":134},[28,60651,60652,60654,60657],{"class":30,"line":1842},[28,60653,60601],{"class":34},[28,60655,60656],{"class":51351}," input",[28,60658,15649],{"class":211},[28,60660,60661,60663,60665,60667,60669],{"class":30,"line":1856},[28,60662,51535],{"class":38},[28,60664,51488],{"class":211},[28,60666,60623],{"class":38},[28,60668,51543],{"class":207},[28,60670,1370],{"class":211},[28,60672,60673,60675,60677,60679,60681],{"class":30,"line":1861},[28,60674,51550],{"class":38},[28,60676,51488],{"class":211},[28,60678,817],{"class":38},[28,60680,51543],{"class":207},[28,60682,1370],{"class":211},[28,60684,60685,60687,60689,60691,60693,60695],{"class":30,"line":2654},[28,60686,51497],{"class":38},[28,60688,51488],{"class":211},[28,60690,401],{"class":38},[28,60692,2115],{"class":38},[28,60694,51543],{"class":207},[28,60696,1370],{"class":211},[28,60698,60699,60702,60704,60706,60708],{"class":30,"line":2668},[28,60700,60701],{"class":38},"            font-size",[28,60703,51488],{"class":211},[28,60705,759],{"class":38},[28,60707,51543],{"class":207},[28,60709,1370],{"class":211},[28,60711,60712,60715,60717,60719,60721],{"class":30,"line":2676},[28,60713,60714],{"class":38},"            line-height",[28,60716,51488],{"class":211},[28,60718,817],{"class":38},[28,60720,51543],{"class":207},[28,60722,1370],{"class":211},[28,60724,60725,60728,60730,60732,60734,60736,60739],{"class":30,"line":2681},[28,60726,60727],{"class":38},"            border",[28,60729,51488],{"class":211},[28,60731,427],{"class":38},[28,60733,51543],{"class":207},[28,60735,51572],{"class":38},[28,60737,60738],{"class":38}," #e0e0e0",[28,60740,1370],{"class":211},[28,60742,60743,60746,60748,60750],{"class":30,"line":2687},[28,60744,60745],{"class":38},"            outline",[28,60747,51488],{"class":211},[28,60749,54788],{"class":38},[28,60751,1370],{"class":211},[28,60753,60754],{"class":30,"line":2693},[28,60755,2606],{"class":211},[28,60757,60758],{"class":30,"line":2698},[28,60759,2477],{"emptyLinePlaceholder":134},[28,60761,60762,60764,60767],{"class":30,"line":8025},[28,60763,60601],{"class":34},[28,60765,60766],{"class":34}," .search",[28,60768,15649],{"class":211},[28,60770,60771,60773,60775,60777,60779,60781,60784],{"class":30,"line":8049},[28,60772,60727],{"class":38},[28,60774,51488],{"class":211},[28,60776,427],{"class":38},[28,60778,51543],{"class":207},[28,60780,51572],{"class":38},[28,60782,60783],{"class":38}," #ff6700",[28,60785,1370],{"class":211},[28,60787,60788],{"class":30,"line":8054},[28,60789,2606],{"class":211},[28,60791,60792],{"class":30,"line":8060},[28,60793,2477],{"emptyLinePlaceholder":134},[28,60795,60796,60799],{"class":30,"line":8087},[28,60797,60798],{"class":34},"        .result-list",[28,60800,15649],{"class":211},[28,60802,60803,60805,60807,60809],{"class":30,"line":8092},[28,60804,51523],{"class":38},[28,60806,51488],{"class":211},[28,60808,54788],{"class":38},[28,60810,1370],{"class":211},[28,60812,60813,60815,60817,60819],{"class":30,"line":8098},[28,60814,60608],{"class":38},[28,60816,51488],{"class":211},[28,60818,54882],{"class":38},[28,60820,1370],{"class":211},[28,60822,60823,60826,60828,60830],{"class":30,"line":8110},[28,60824,60825],{"class":38},"            left",[28,60827,51488],{"class":211},[28,60829,401],{"class":38},[28,60831,1370],{"class":211},[28,60833,60834,60837,60839,60841,60843],{"class":30,"line":8122},[28,60835,60836],{"class":38},"            top",[28,60838,51488],{"class":211},[28,60840,817],{"class":38},[28,60842,51543],{"class":207},[28,60844,1370],{"class":211},[28,60846,60847,60849,60851,60853,60855],{"class":30,"line":8134},[28,60848,51535],{"class":38},[28,60850,51488],{"class":211},[28,60852,60623],{"class":38},[28,60854,51543],{"class":207},[28,60856,1370],{"class":211},[28,60858,60859,60861,60863,60865,60867,60869,60871],{"class":30,"line":9793},[28,60860,60727],{"class":38},[28,60862,51488],{"class":211},[28,60864,427],{"class":38},[28,60866,51543],{"class":207},[28,60868,51572],{"class":38},[28,60870,60783],{"class":38},[28,60872,1370],{"class":211},[28,60874,60875,60878,60880,60882],{"class":30,"line":9818},[28,60876,60877],{"class":38},"            border-top",[28,60879,51488],{"class":211},[28,60881,401],{"class":38},[28,60883,1370],{"class":211},[28,60885,60886,60889,60891,60894],{"class":30,"line":9841},[28,60887,60888],{"class":38},"            background",[28,60890,51488],{"class":211},[28,60892,60893],{"class":38},"#fff",[28,60895,1370],{"class":211},[28,60897,60898],{"class":30,"line":9865},[28,60899,2606],{"class":211},[28,60901,60902],{"class":30,"line":9870},[28,60903,2477],{"emptyLinePlaceholder":134},[28,60905,60906,60908,60910],{"class":30,"line":9875},[28,60907,60798],{"class":34},[28,60909,1476],{"class":51351},[28,60911,15649],{"class":211},[28,60913,60914,60916,60918,60921],{"class":30,"line":9880},[28,60915,51523],{"class":38},[28,60917,51488],{"class":211},[28,60919,60920],{"class":38},"block",[28,60922,1370],{"class":211},[28,60924,60925,60927,60929,60931,60933,60936,60938],{"class":30,"line":9889},[28,60926,51497],{"class":38},[28,60928,51488],{"class":211},[28,60930,554],{"class":38},[28,60932,51543],{"class":207},[28,60934,60935],{"class":38}," 15",[28,60937,51543],{"class":207},[28,60939,1370],{"class":211},[28,60941,60942,60944,60946,60948,60950],{"class":30,"line":9894},[28,60943,60701],{"class":38},[28,60945,51488],{"class":211},[28,60947,708],{"class":38},[28,60949,51543],{"class":207},[28,60951,1370],{"class":211},[28,60953,60954,60957,60959,60962],{"class":30,"line":9900},[28,60955,60956],{"class":38},"            color",[28,60958,51488],{"class":211},[28,60960,60961],{"class":38},"#424242",[28,60963,1370],{"class":211},[28,60965,60966,60969,60971,60973],{"class":30,"line":9921},[28,60967,60968],{"class":38},"            text-decoration",[28,60970,51488],{"class":211},[28,60972,54788],{"class":38},[28,60974,1370],{"class":211},[28,60976,60977],{"class":30,"line":9927},[28,60978,2606],{"class":211},[28,60980,60981],{"class":30,"line":9941},[28,60982,2477],{"emptyLinePlaceholder":134},[28,60984,60985,60987,60989,60992],{"class":30,"line":9947},[28,60986,60798],{"class":34},[28,60988,1476],{"class":51351},[28,60990,60991],{"class":34},":hover",[28,60993,15649],{"class":211},[28,60995,60996,60998,61000,61003],{"class":30,"line":9974},[28,60997,51691],{"class":38},[28,60999,51488],{"class":211},[28,61001,61002],{"class":38},"#eee",[28,61004,1370],{"class":211},[28,61006,61007],{"class":30,"line":9983},[28,61008,2606],{"class":211},[28,61010,61011,61013,61015],{"class":30,"line":9989},[28,61012,51827],{"class":211},[28,61014,126],{"class":51351},[28,61016,51358],{"class":211},[28,61018,61019],{"class":30,"line":9997},[28,61020,2477],{"emptyLinePlaceholder":134},[28,61022,61023,61025,61027],{"class":30,"line":10002},[28,61024,51836],{"class":211},[28,61026,51385],{"class":51351},[28,61028,51358],{"class":211},[28,61030,61031],{"class":30,"line":16681},[28,61032,2477],{"emptyLinePlaceholder":134},[28,61034,61035,61037,61039],{"class":30,"line":16687},[28,61036,1120],{"class":211},[28,61038,51851],{"class":51351},[28,61040,51358],{"class":211},[28,61042,61043,61045,61047,61049,61051,61054],{"class":30,"line":16710},[28,61044,51392],{"class":211},[28,61046,51662],{"class":51351},[28,61048,53537],{"class":34},[28,61050,257],{"class":211},[28,61052,61053],{"class":64},"\"mi\"",[28,61055,51358],{"class":211},[28,61057,61058,61060,61062,61064,61066,61069,61072,61074,61077],{"class":30,"line":16716},[28,61059,55353],{"class":211},[28,61061,53872],{"class":51351},[28,61063,53875],{"class":34},[28,61065,257],{"class":211},[28,61067,61068],{"class":64},"\"search\"",[28,61070,61071],{"class":34}," placeholder",[28,61073,257],{"class":211},[28,61075,61076],{"class":64},"\"小米笔记本\"",[28,61078,51358],{"class":211},[28,61080,61081,61083,61085,61087,61089,61092],{"class":30,"line":16739},[28,61082,55353],{"class":211},[28,61084,116],{"class":51351},[28,61086,53537],{"class":34},[28,61088,257],{"class":211},[28,61090,61091],{"class":64},"\"result-list\"",[28,61093,51358],{"class":211},[28,61095,61096,61099,61101,61104,61106,61109,61111,61114,61117,61119,61121,61123],{"class":30,"line":16753},[28,61097,61098],{"class":211},"            \u003C",[28,61100,119],{"class":51351},[28,61102,61103],{"class":211},">\u003C",[28,61105,448],{"class":51351},[28,61107,61108],{"class":34}," href",[28,61110,257],{"class":211},[28,61112,61113],{"class":64},"\"#\"",[28,61115,61116],{"class":211},">全部商品\u003C\u002F",[28,61118,448],{"class":51351},[28,61120,55365],{"class":211},[28,61122,119],{"class":51351},[28,61124,51358],{"class":211},[28,61126,61127,61129,61131,61133,61135,61137,61139,61141,61144,61146,61148,61150],{"class":30,"line":16773},[28,61128,61098],{"class":211},[28,61130,119],{"class":51351},[28,61132,61103],{"class":211},[28,61134,448],{"class":51351},[28,61136,61108],{"class":34},[28,61138,257],{"class":211},[28,61140,61113],{"class":64},[28,61142,61143],{"class":211},">小米11\u003C\u002F",[28,61145,448],{"class":51351},[28,61147,55365],{"class":211},[28,61149,119],{"class":51351},[28,61151,51358],{"class":211},[28,61153,61154,61156,61158,61160,61162,61164,61166,61168,61171,61173,61175,61177],{"class":30,"line":16779},[28,61155,61098],{"class":211},[28,61157,119],{"class":51351},[28,61159,61103],{"class":211},[28,61161,448],{"class":51351},[28,61163,61108],{"class":34},[28,61165,257],{"class":211},[28,61167,61113],{"class":64},[28,61169,61170],{"class":211},">小米10S\u003C\u002F",[28,61172,448],{"class":51351},[28,61174,55365],{"class":211},[28,61176,119],{"class":51351},[28,61178,51358],{"class":211},[28,61180,61181,61183,61185,61187,61189,61191,61193,61195,61198,61200,61202,61204],{"class":30,"line":16790},[28,61182,61098],{"class":211},[28,61184,119],{"class":51351},[28,61186,61103],{"class":211},[28,61188,448],{"class":51351},[28,61190,61108],{"class":34},[28,61192,257],{"class":211},[28,61194,61113],{"class":64},[28,61196,61197],{"class":211},">小米笔记本\u003C\u002F",[28,61199,448],{"class":51351},[28,61201,55365],{"class":211},[28,61203,119],{"class":51351},[28,61205,51358],{"class":211},[28,61207,61208,61210,61212,61214,61216,61218,61220,61222,61225,61227,61229,61231],{"class":30,"line":16813},[28,61209,61098],{"class":211},[28,61211,119],{"class":51351},[28,61213,61103],{"class":211},[28,61215,448],{"class":51351},[28,61217,61108],{"class":34},[28,61219,257],{"class":211},[28,61221,61113],{"class":64},[28,61223,61224],{"class":211},">小米手机\u003C\u002F",[28,61226,448],{"class":51351},[28,61228,55365],{"class":211},[28,61230,119],{"class":51351},[28,61232,51358],{"class":211},[28,61234,61235,61237,61239,61241,61243,61245,61247,61249,61252,61254,61256,61258],{"class":30,"line":16835},[28,61236,61098],{"class":211},[28,61238,119],{"class":51351},[28,61240,61103],{"class":211},[28,61242,448],{"class":51351},[28,61244,61108],{"class":34},[28,61246,257],{"class":211},[28,61248,61113],{"class":64},[28,61250,61251],{"class":211},">黑鲨4\u003C\u002F",[28,61253,448],{"class":51351},[28,61255,55365],{"class":211},[28,61257,119],{"class":51351},[28,61259,51358],{"class":211},[28,61261,61262,61264,61266,61268,61270,61272,61274,61276,61279,61281,61283,61285],{"class":30,"line":16840},[28,61263,61098],{"class":211},[28,61265,119],{"class":51351},[28,61267,61103],{"class":211},[28,61269,448],{"class":51351},[28,61271,61108],{"class":34},[28,61273,257],{"class":211},[28,61275,61113],{"class":64},[28,61277,61278],{"class":211},">空调\u003C\u002F",[28,61280,448],{"class":51351},[28,61282,55365],{"class":211},[28,61284,119],{"class":51351},[28,61286,51358],{"class":211},[28,61288,61289,61292,61294],{"class":30,"line":16846},[28,61290,61291],{"class":211},"        \u003C\u002F",[28,61293,116],{"class":51351},[28,61295,51358],{"class":211},[28,61297,61298,61300,61302],{"class":30,"line":16860},[28,61299,51827],{"class":211},[28,61301,51662],{"class":51351},[28,61303,51358],{"class":211},[28,61305,61306,61308,61310],{"class":30,"line":16873},[28,61307,51392],{"class":211},[28,61309,51864],{"class":51351},[28,61311,51358],{"class":211},[28,61313,61314],{"class":30,"line":16878},[28,61315,61316],{"class":269},"        \u002F\u002F 1. 获取元素\n",[28,61318,61319,61322,61324,61326,61328,61330,61332,61335],{"class":30,"line":16892},[28,61320,61321],{"class":207},"        const",[28,61323,60656],{"class":38},[28,61325,13641],{"class":207},[28,61327,54447],{"class":211},[28,61329,54450],{"class":34},[28,61331,212],{"class":211},[28,61333,61334],{"class":64},"'[type=search]'",[28,61336,218],{"class":211},[28,61338,61339,61341,61344,61346,61348,61350,61352,61355],{"class":30,"line":16897},[28,61340,61321],{"class":207},[28,61342,61343],{"class":38}," ul",[28,61345,13641],{"class":207},[28,61347,54447],{"class":211},[28,61349,54450],{"class":34},[28,61351,212],{"class":211},[28,61353,61354],{"class":64},"'.result-list'",[28,61356,218],{"class":211},[28,61358,61359],{"class":30,"line":16903},[28,61360,61361],{"class":269},"        \u002F\u002F console.log(input)\n",[28,61363,61364],{"class":30,"line":16908},[28,61365,61366],{"class":269},"        \u002F\u002F 2. 监听事件 获得焦点\n",[28,61368,61369,61372,61374,61376,61379,61381,61383],{"class":30,"line":16922},[28,61370,61371],{"class":211},"        input.",[28,61373,57864],{"class":34},[28,61375,212],{"class":211},[28,61377,61378],{"class":64},"'focus'",[28,61380,12512],{"class":211},[28,61382,54500],{"class":207},[28,61384,54503],{"class":211},[28,61386,61387],{"class":30,"line":16927},[28,61388,61389],{"class":269},"            \u002F\u002F ul显示\n",[28,61391,61392,61395,61397],{"class":30,"line":16932},[28,61393,61394],{"class":211},"            ul.style.display ",[28,61396,257],{"class":207},[28,61398,61399],{"class":64}," 'block'\n",[28,61401,61402],{"class":30,"line":16946},[28,61403,61404],{"class":269},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[28,61406,61407,61410,61412,61414,61417],{"class":30,"line":16958},[28,61408,61409],{"class":211},"            input.classList.",[28,61411,5411],{"class":34},[28,61413,212],{"class":211},[28,61415,61416],{"class":64},"'search'",[28,61418,218],{"class":211},[28,61420,61421],{"class":30,"line":16963},[28,61422,61423],{"class":211},"        })\n",[28,61425,61426],{"class":30,"line":16976},[28,61427,61428],{"class":269},"        \u002F\u002F 3. 监听事件 失去焦点\n",[28,61430,61431,61433,61435,61437,61440,61442,61444],{"class":30,"line":16981},[28,61432,61371],{"class":211},[28,61434,57864],{"class":34},[28,61436,212],{"class":211},[28,61438,61439],{"class":64},"'blur'",[28,61441,12512],{"class":211},[28,61443,54500],{"class":207},[28,61445,54503],{"class":211},[28,61447,61448,61450,61452],{"class":30,"line":16986},[28,61449,61394],{"class":211},[28,61451,257],{"class":207},[28,61453,61454],{"class":64}," 'none'\n",[28,61456,61457,61459,61461,61463,61465],{"class":30,"line":16991},[28,61458,61409],{"class":211},[28,61460,57057],{"class":34},[28,61462,212],{"class":211},[28,61464,61416],{"class":64},[28,61466,218],{"class":211},[28,61468,61469],{"class":30,"line":17004},[28,61470,61423],{"class":211},[28,61472,61473,61475,61477],{"class":30,"line":17009},[28,61474,51827],{"class":211},[28,61476,51864],{"class":51351},[28,61478,51358],{"class":211},[28,61480,61481,61483,61485],{"class":30,"line":32684},[28,61482,51836],{"class":211},[28,61484,51851],{"class":51351},[28,61486,51358],{"class":211},[28,61488,61489],{"class":30,"line":32690},[28,61490,2477],{"emptyLinePlaceholder":134},[28,61492,61493,61495,61497],{"class":30,"line":32696},[28,61494,51836],{"class":211},[28,61496,50686],{"class":51351},[28,61498,51358],{"class":211},[22075,61500,61502],{"id":61501},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61504,61505],{},"评论字数统计案例",[14,61507,61508],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61510,61511],{},"牢记focus伪类选择器",[51395,61513],{"charSet":61514},"UTF-8",[51395,61516],{"name":61517,"content":61518},"viewport","width=device-width, initial-scale=1.0",[51458,61520,61521],{},"Document",[126,61523,61524],{},"\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",[53872,61526],{"type":5264},[116,61528,61529,61532],{},[119,61530,61531],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[119,61533,61534],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[18,61536,61538],{"className":50684,"code":61537,"language":50686,"meta":23,"style":23},"\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",[25,61539,61540,61550,61564,61568,61576,61590,61610,61630,61643,61651,61658,61671,61685,61695,61705,61709,61713,61720,61732,61744,61756,61768,61797,61810,61814,61818,61827,61838,61850,61861,61872,61884,61895,61907,61923,61935,61939,61943,61954,61965,61975,61987,61991,61995,62003,62014,62024,62035,62047,62060,62072,62084,62088,62092,62101,62113,62124,62137,62148,62162,62166,62170,62177,62189,62201,62211,62215,62219,62228,62240,62250,62254,62258,62269,62279,62298,62311,62315,62319,62329,62339,62343,62347,62358,62369,62381,62393,62397,62401,62412,62423,62437,62441,62445,62456,62466,62478,62482,62490,62498,62502,62510,62525,62544,62584,62597,62605,62619,62639,62647,62662,62685,62703,62718,62738,62758,62778,62786,62794,62802,62810,62830,62850,62855,62872,62881,62885,62890,62906,62914,62918,62923,62940,62945,62970,62974,62978,62983,62988,62996,63004,63008],{"__ignoreMap":23},[28,61541,61542,61544,61546,61548],{"class":30,"line":31},[28,61543,51348],{"class":211},[28,61545,51352],{"class":51351},[28,61547,51355],{"class":34},[28,61549,51358],{"class":211},[28,61551,61552,61554,61556,61558,61560,61562],{"class":30,"line":42},[28,61553,1120],{"class":211},[28,61555,50686],{"class":51351},[28,61557,51367],{"class":34},[28,61559,257],{"class":211},[28,61561,51372],{"class":64},[28,61563,51358],{"class":211},[28,61565,61566],{"class":30,"line":50},[28,61567,2477],{"emptyLinePlaceholder":134},[28,61569,61570,61572,61574],{"class":30,"line":58},[28,61571,1120],{"class":211},[28,61573,51385],{"class":51351},[28,61575,51358],{"class":211},[28,61577,61578,61580,61582,61584,61586,61588],{"class":30,"line":70},[28,61579,52195],{"class":211},[28,61581,51395],{"class":51351},[28,61583,51398],{"class":34},[28,61585,257],{"class":211},[28,61587,51403],{"class":64},[28,61589,51358],{"class":211},[28,61591,61592,61594,61596,61598,61600,61602,61604,61606,61608],{"class":30,"line":78},[28,61593,52195],{"class":211},[28,61595,51395],{"class":51351},[28,61597,51414],{"class":34},[28,61599,257],{"class":211},[28,61601,51419],{"class":64},[28,61603,51422],{"class":34},[28,61605,257],{"class":211},[28,61607,51427],{"class":64},[28,61609,51358],{"class":211},[28,61611,61612,61614,61616,61618,61620,61622,61624,61626,61628],{"class":30,"line":86},[28,61613,52195],{"class":211},[28,61615,51395],{"class":51351},[28,61617,14997],{"class":34},[28,61619,257],{"class":211},[28,61621,51442],{"class":64},[28,61623,51422],{"class":34},[28,61625,257],{"class":211},[28,61627,51449],{"class":64},[28,61629,51358],{"class":211},[28,61631,61632,61634,61636,61639,61641],{"class":30,"line":97},[28,61633,52195],{"class":211},[28,61635,51458],{"class":51351},[28,61637,61638],{"class":211},">评论回车发布\u003C\u002F",[28,61640,51458],{"class":51351},[28,61642,51358],{"class":211},[28,61644,61645,61647,61649],{"class":30,"line":108},[28,61646,52195],{"class":211},[28,61648,126],{"class":51351},[28,61650,51358],{"class":211},[28,61652,61653,61656],{"class":30,"line":1407},[28,61654,61655],{"class":34},"    .wrapper",[28,61657,15649],{"class":211},[28,61659,61660,61663,61665,61667,61669],{"class":30,"line":1690},[28,61661,61662],{"class":38},"      min-width",[28,61664,51488],{"class":211},[28,61666,4064],{"class":38},[28,61668,51543],{"class":207},[28,61670,1370],{"class":211},[28,61672,61673,61676,61678,61681,61683],{"class":30,"line":1695},[28,61674,61675],{"class":38},"      max-width",[28,61677,51488],{"class":211},[28,61679,61680],{"class":38},"800",[28,61682,51543],{"class":207},[28,61684,1370],{"class":211},[28,61686,61687,61689,61691,61693],{"class":30,"line":1701},[28,61688,55060],{"class":38},[28,61690,51488],{"class":211},[28,61692,51528],{"class":38},[28,61694,1370],{"class":211},[28,61696,61697,61699,61701,61703],{"class":30,"line":1706},[28,61698,55071],{"class":38},[28,61700,51488],{"class":211},[28,61702,51631],{"class":38},[28,61704,1370],{"class":211},[28,61706,61707],{"class":30,"line":1720},[28,61708,2264],{"class":211},[28,61710,61711],{"class":30,"line":1725},[28,61712,2477],{"emptyLinePlaceholder":134},[28,61714,61715,61718],{"class":30,"line":1731},[28,61716,61717],{"class":34},"    .avatar",[28,61719,15649],{"class":211},[28,61721,61722,61724,61726,61728,61730],{"class":30,"line":1752},[28,61723,54822],{"class":38},[28,61725,51488],{"class":211},[28,61727,817],{"class":38},[28,61729,51543],{"class":207},[28,61731,1370],{"class":211},[28,61733,61734,61736,61738,61740,61742],{"class":30,"line":1757},[28,61735,54836],{"class":38},[28,61737,51488],{"class":211},[28,61739,817],{"class":38},[28,61741,51543],{"class":207},[28,61743,1370],{"class":211},[28,61745,61746,61748,61750,61752,61754],{"class":30,"line":1771},[28,61747,55185],{"class":38},[28,61749,51488],{"class":211},[28,61751,866],{"class":38},[28,61753,538],{"class":207},[28,61755,1370],{"class":211},[28,61757,61758,61761,61763,61766],{"class":30,"line":1776},[28,61759,61760],{"class":38},"      overflow",[28,61762,51488],{"class":211},[28,61764,61765],{"class":38},"hidden",[28,61767,1370],{"class":211},[28,61769,61770,61773,61775,61778,61780,61783,61785,61788,61790,61792,61795],{"class":30,"line":1805},[28,61771,61772],{"class":38},"      background",[28,61774,51488],{"class":211},[28,61776,61777],{"class":38},"url",[28,61779,212],{"class":211},[28,61781,61782],{"class":5293},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[28,61784,13791],{"class":211},[28,61786,61787],{"class":38},"no-repeat",[28,61789,17221],{"class":38},[28,61791,25049],{"class":211},[28,61793,61794],{"class":38},"cover",[28,61796,1370],{"class":211},[28,61798,61799,61802,61804,61806,61808],{"class":30,"line":1810},[28,61800,61801],{"class":38},"      margin-right",[28,61803,51488],{"class":211},[28,61805,910],{"class":38},[28,61807,51543],{"class":207},[28,61809,1370],{"class":211},[28,61811,61812],{"class":30,"line":1827},[28,61813,2264],{"class":211},[28,61815,61816],{"class":30,"line":1832},[28,61817,2477],{"emptyLinePlaceholder":134},[28,61819,61820,61822,61825],{"class":30,"line":1837},[28,61821,61655],{"class":34},[28,61823,61824],{"class":51351}," textarea",[28,61826,15649],{"class":211},[28,61828,61829,61832,61834,61836],{"class":30,"line":1842},[28,61830,61831],{"class":38},"      outline",[28,61833,51488],{"class":211},[28,61835,54788],{"class":38},[28,61837,1370],{"class":211},[28,61839,61840,61843,61845,61848],{"class":30,"line":1856},[28,61841,61842],{"class":38},"      border-color",[28,61844,51488],{"class":211},[28,61846,61847],{"class":38},"transparent",[28,61849,1370],{"class":211},[28,61851,61852,61855,61857,61859],{"class":30,"line":1861},[28,61853,61854],{"class":38},"      resize",[28,61856,51488],{"class":211},[28,61858,54788],{"class":38},[28,61860,1370],{"class":211},[28,61862,61863,61865,61867,61870],{"class":30,"line":2654},[28,61864,61772],{"class":38},[28,61866,51488],{"class":211},[28,61868,61869],{"class":38},"#f5f5f5",[28,61871,1370],{"class":211},[28,61873,61874,61876,61878,61880,61882],{"class":30,"line":2668},[28,61875,55185],{"class":38},[28,61877,51488],{"class":211},[28,61879,503],{"class":38},[28,61881,51543],{"class":207},[28,61883,1370],{"class":211},[28,61885,61886,61889,61891,61893],{"class":30,"line":2676},[28,61887,61888],{"class":38},"      flex",[28,61890,51488],{"class":211},[28,61892,427],{"class":38},[28,61894,1370],{"class":211},[28,61896,61897,61899,61901,61903,61905],{"class":30,"line":2681},[28,61898,54746],{"class":38},[28,61900,51488],{"class":211},[28,61902,656],{"class":38},[28,61904,51543],{"class":207},[28,61906,1370],{"class":211},[28,61908,61909,61912,61914,61916,61919,61921],{"class":30,"line":2687},[28,61910,61911],{"class":38},"      transition",[28,61913,51488],{"class":211},[28,61915,28172],{"class":38},[28,61917,61918],{"class":38}," 0.5",[28,61920,905],{"class":207},[28,61922,1370],{"class":211},[28,61924,61925,61927,61929,61931,61933],{"class":30,"line":2693},[28,61926,54836],{"class":38},[28,61928,51488],{"class":211},[28,61930,1161],{"class":38},[28,61932,51543],{"class":207},[28,61934,1370],{"class":211},[28,61936,61937],{"class":30,"line":2698},[28,61938,2264],{"class":211},[28,61940,61941],{"class":30,"line":8025},[28,61942,2477],{"emptyLinePlaceholder":134},[28,61944,61945,61947,61949,61952],{"class":30,"line":8049},[28,61946,61655],{"class":34},[28,61948,61824],{"class":51351},[28,61950,61951],{"class":34},":focus",[28,61953,15649],{"class":211},[28,61955,61956,61958,61960,61963],{"class":30,"line":8054},[28,61957,61842],{"class":38},[28,61959,51488],{"class":211},[28,61961,61962],{"class":38},"#e4e4e4",[28,61964,1370],{"class":211},[28,61966,61967,61969,61971,61973],{"class":30,"line":8060},[28,61968,61772],{"class":38},[28,61970,51488],{"class":211},[28,61972,60893],{"class":38},[28,61974,1370],{"class":211},[28,61976,61977,61979,61981,61983,61985],{"class":30,"line":8087},[28,61978,54836],{"class":38},[28,61980,51488],{"class":211},[28,61982,866],{"class":38},[28,61984,51543],{"class":207},[28,61986,1370],{"class":211},[28,61988,61989],{"class":30,"line":8092},[28,61990,2264],{"class":211},[28,61992,61993],{"class":30,"line":8098},[28,61994,2477],{"emptyLinePlaceholder":134},[28,61996,61997,61999,62001],{"class":30,"line":8110},[28,61998,61655],{"class":34},[28,62000,57518],{"class":51351},[28,62002,15649],{"class":211},[28,62004,62005,62007,62009,62012],{"class":30,"line":8122},[28,62006,61772],{"class":38},[28,62008,51488],{"class":211},[28,62010,62011],{"class":38},"#00aeec",[28,62013,1370],{"class":211},[28,62015,62016,62018,62020,62022],{"class":30,"line":8134},[28,62017,57467],{"class":38},[28,62019,51488],{"class":211},[28,62021,60893],{"class":38},[28,62023,1370],{"class":211},[28,62025,62026,62029,62031,62033],{"class":30,"line":9793},[28,62027,62028],{"class":38},"      border",[28,62030,51488],{"class":211},[28,62032,54788],{"class":38},[28,62034,1370],{"class":211},[28,62036,62037,62039,62041,62043,62045],{"class":30,"line":9818},[28,62038,55185],{"class":38},[28,62040,51488],{"class":211},[28,62042,503],{"class":38},[28,62044,51543],{"class":207},[28,62046,1370],{"class":211},[28,62048,62049,62052,62054,62056,62058],{"class":30,"line":9841},[28,62050,62051],{"class":38},"      margin-left",[28,62053,51488],{"class":211},[28,62055,656],{"class":38},[28,62057,51543],{"class":207},[28,62059,1370],{"class":211},[28,62061,62062,62064,62066,62068,62070],{"class":30,"line":9865},[28,62063,54822],{"class":38},[28,62065,51488],{"class":211},[28,62067,566],{"class":38},[28,62069,51543],{"class":207},[28,62071,1370],{"class":211},[28,62073,62074,62077,62079,62082],{"class":30,"line":9870},[28,62075,62076],{"class":38},"      cursor",[28,62078,51488],{"class":211},[28,62080,62081],{"class":38},"pointer",[28,62083,1370],{"class":211},[28,62085,62086],{"class":30,"line":9875},[28,62087,2264],{"class":211},[28,62089,62090],{"class":30,"line":9880},[28,62091,2477],{"emptyLinePlaceholder":134},[28,62093,62094,62096,62099],{"class":30,"line":9889},[28,62095,61655],{"class":34},[28,62097,62098],{"class":34}," .total",[28,62100,15649],{"class":211},[28,62102,62103,62105,62107,62109,62111],{"class":30,"line":9894},[28,62104,61801],{"class":38},[28,62106,51488],{"class":211},[28,62108,822],{"class":38},[28,62110,51543],{"class":207},[28,62112,1370],{"class":211},[28,62114,62115,62117,62119,62122],{"class":30,"line":9900},[28,62116,57467],{"class":38},[28,62118,51488],{"class":211},[28,62120,62121],{"class":38},"#999",[28,62123,1370],{"class":211},[28,62125,62126,62129,62131,62133,62135],{"class":30,"line":9921},[28,62127,62128],{"class":38},"      margin-top",[28,62130,51488],{"class":211},[28,62132,529],{"class":38},[28,62134,51543],{"class":207},[28,62136,1370],{"class":211},[28,62138,62139,62142,62144,62146],{"class":30,"line":9927},[28,62140,62141],{"class":38},"      opacity",[28,62143,51488],{"class":211},[28,62145,401],{"class":38},[28,62147,1370],{"class":211},[28,62149,62150,62152,62154,62156,62158,62160],{"class":30,"line":9941},[28,62151,61911],{"class":38},[28,62153,51488],{"class":211},[28,62155,28172],{"class":38},[28,62157,61918],{"class":38},[28,62159,905],{"class":207},[28,62161,1370],{"class":211},[28,62163,62164],{"class":30,"line":9947},[28,62165,2264],{"class":211},[28,62167,62168],{"class":30,"line":9974},[28,62169,2477],{"emptyLinePlaceholder":134},[28,62171,62172,62175],{"class":30,"line":9983},[28,62173,62174],{"class":34},"    .list",[28,62176,15649],{"class":211},[28,62178,62179,62181,62183,62185,62187],{"class":30,"line":9989},[28,62180,61662],{"class":38},[28,62182,51488],{"class":211},[28,62184,4064],{"class":38},[28,62186,51543],{"class":207},[28,62188,1370],{"class":211},[28,62190,62191,62193,62195,62197,62199],{"class":30,"line":9997},[28,62192,61675],{"class":38},[28,62194,51488],{"class":211},[28,62196,61680],{"class":38},[28,62198,51543],{"class":207},[28,62200,1370],{"class":211},[28,62202,62203,62205,62207,62209],{"class":30,"line":10002},[28,62204,55060],{"class":38},[28,62206,51488],{"class":211},[28,62208,51528],{"class":38},[28,62210,1370],{"class":211},[28,62212,62213],{"class":30,"line":16681},[28,62214,2264],{"class":211},[28,62216,62217],{"class":30,"line":16687},[28,62218,2477],{"emptyLinePlaceholder":134},[28,62220,62221,62223,62226],{"class":30,"line":16710},[28,62222,62174],{"class":34},[28,62224,62225],{"class":34}," .item",[28,62227,15649],{"class":211},[28,62229,62230,62232,62234,62236,62238],{"class":30,"line":16716},[28,62231,54822],{"class":38},[28,62233,51488],{"class":211},[28,62235,521],{"class":38},[28,62237,538],{"class":207},[28,62239,1370],{"class":211},[28,62241,62242,62244,62246,62248],{"class":30,"line":16739},[28,62243,55060],{"class":38},[28,62245,51488],{"class":211},[28,62247,51528],{"class":38},[28,62249,1370],{"class":211},[28,62251,62252],{"class":30,"line":16753},[28,62253,2264],{"class":211},[28,62255,62256],{"class":30,"line":16773},[28,62257,2477],{"emptyLinePlaceholder":134},[28,62259,62260,62262,62264,62267],{"class":30,"line":16779},[28,62261,62174],{"class":34},[28,62263,62225],{"class":34},[28,62265,62266],{"class":34}," .info",[28,62268,15649],{"class":211},[28,62270,62271,62273,62275,62277],{"class":30,"line":16790},[28,62272,61888],{"class":38},[28,62274,51488],{"class":211},[28,62276,427],{"class":38},[28,62278,1370],{"class":211},[28,62280,62281,62284,62286,62288,62290,62293,62296],{"class":30,"line":16813},[28,62282,62283],{"class":38},"      border-bottom",[28,62285,51488],{"class":211},[28,62287,427],{"class":38},[28,62289,51543],{"class":207},[28,62291,62292],{"class":38}," dashed",[28,62294,62295],{"class":38}," #e4e4e4",[28,62297,1370],{"class":211},[28,62299,62300,62303,62305,62307,62309],{"class":30,"line":16835},[28,62301,62302],{"class":38},"      padding-bottom",[28,62304,51488],{"class":211},[28,62306,656],{"class":38},[28,62308,51543],{"class":207},[28,62310,1370],{"class":211},[28,62312,62313],{"class":30,"line":16840},[28,62314,2264],{"class":211},[28,62316,62317],{"class":30,"line":16846},[28,62318,2477],{"emptyLinePlaceholder":134},[28,62320,62321,62323,62325,62327],{"class":30,"line":16860},[28,62322,62174],{"class":34},[28,62324,62225],{"class":34},[28,62326,6902],{"class":51351},[28,62328,15649],{"class":211},[28,62330,62331,62333,62335,62337],{"class":30,"line":16873},[28,62332,54757],{"class":38},[28,62334,51488],{"class":211},[28,62336,401],{"class":38},[28,62338,1370],{"class":211},[28,62340,62341],{"class":30,"line":16878},[28,62342,2264],{"class":211},[28,62344,62345],{"class":30,"line":16892},[28,62346,2477],{"emptyLinePlaceholder":134},[28,62348,62349,62351,62353,62356],{"class":30,"line":16897},[28,62350,62174],{"class":34},[28,62352,62225],{"class":34},[28,62354,62355],{"class":34}," .name",[28,62357,15649],{"class":211},[28,62359,62360,62362,62364,62367],{"class":30,"line":16903},[28,62361,57467],{"class":38},[28,62363,51488],{"class":211},[28,62365,62366],{"class":38},"#FB7299",[28,62368,1370],{"class":211},[28,62370,62371,62373,62375,62377,62379],{"class":30,"line":16908},[28,62372,54973],{"class":38},[28,62374,51488],{"class":211},[28,62376,759],{"class":38},[28,62378,51543],{"class":207},[28,62380,1370],{"class":211},[28,62382,62383,62386,62388,62391],{"class":30,"line":16922},[28,62384,62385],{"class":38},"      font-weight",[28,62387,51488],{"class":211},[28,62389,62390],{"class":38},"bold",[28,62392,1370],{"class":211},[28,62394,62395],{"class":30,"line":16927},[28,62396,2264],{"class":211},[28,62398,62399],{"class":30,"line":16932},[28,62400,2477],{"emptyLinePlaceholder":134},[28,62402,62403,62405,62407,62410],{"class":30,"line":16946},[28,62404,62174],{"class":34},[28,62406,62225],{"class":34},[28,62408,62409],{"class":34}," .text",[28,62411,15649],{"class":211},[28,62413,62414,62416,62418,62421],{"class":30,"line":16958},[28,62415,57467],{"class":38},[28,62417,51488],{"class":211},[28,62419,62420],{"class":38},"#333",[28,62422,1370],{"class":211},[28,62424,62425,62427,62429,62431,62433,62435],{"class":30,"line":16963},[28,62426,54746],{"class":38},[28,62428,51488],{"class":211},[28,62430,656],{"class":38},[28,62432,51543],{"class":207},[28,62434,4170],{"class":38},[28,62436,1370],{"class":211},[28,62438,62439],{"class":30,"line":16976},[28,62440,2264],{"class":211},[28,62442,62443],{"class":30,"line":16981},[28,62444,2477],{"emptyLinePlaceholder":134},[28,62446,62447,62449,62451,62454],{"class":30,"line":16986},[28,62448,62174],{"class":34},[28,62450,62225],{"class":34},[28,62452,62453],{"class":34}," .time",[28,62455,15649],{"class":211},[28,62457,62458,62460,62462,62464],{"class":30,"line":16991},[28,62459,57467],{"class":38},[28,62461,51488],{"class":211},[28,62463,62121],{"class":38},[28,62465,1370],{"class":211},[28,62467,62468,62470,62472,62474,62476],{"class":30,"line":17004},[28,62469,54973],{"class":38},[28,62471,51488],{"class":211},[28,62473,708],{"class":38},[28,62475,51543],{"class":207},[28,62477,1370],{"class":211},[28,62479,62480],{"class":30,"line":17009},[28,62481,2264],{"class":211},[28,62483,62484,62486,62488],{"class":30,"line":32684},[28,62485,52468],{"class":211},[28,62487,126],{"class":51351},[28,62489,51358],{"class":211},[28,62491,62492,62494,62496],{"class":30,"line":32690},[28,62493,51836],{"class":211},[28,62495,51385],{"class":51351},[28,62497,51358],{"class":211},[28,62499,62500],{"class":30,"line":32696},[28,62501,2477],{"emptyLinePlaceholder":134},[28,62503,62504,62506,62508],{"class":30,"line":32702},[28,62505,1120],{"class":211},[28,62507,51851],{"class":51351},[28,62509,51358],{"class":211},[28,62511,62512,62514,62516,62518,62520,62523],{"class":30,"line":32708},[28,62513,52195],{"class":211},[28,62515,51662],{"class":51351},[28,62517,53537],{"class":34},[28,62519,257],{"class":211},[28,62521,62522],{"class":64},"\"wrapper\"",[28,62524,51358],{"class":211},[28,62526,62527,62529,62531,62533,62535,62538,62540,62542],{"class":30,"line":32719},[28,62528,51392],{"class":211},[28,62530,651],{"class":51351},[28,62532,53537],{"class":34},[28,62534,257],{"class":211},[28,62536,62537],{"class":64},"\"avatar\"",[28,62539,55365],{"class":211},[28,62541,651],{"class":51351},[28,62543,51358],{"class":211},[28,62545,62546,62548,62550,62552,62554,62557,62559,62561,62564,62566,62568,62570,62573,62575,62578,62580,62582],{"class":30,"line":32725},[28,62547,51392],{"class":211},[28,62549,54339],{"class":51351},[28,62551,15036],{"class":34},[28,62553,257],{"class":211},[28,62555,62556],{"class":64},"\"tx\"",[28,62558,61071],{"class":34},[28,62560,257],{"class":211},[28,62562,62563],{"class":64},"\"发一条友善的评论\"",[28,62565,54362],{"class":34},[28,62567,257],{"class":211},[28,62569,3778],{"class":64},[28,62571,62572],{"class":34}," maxlength",[28,62574,257],{"class":211},[28,62576,62577],{"class":64},"\"200\"",[28,62579,55365],{"class":211},[28,62581,54339],{"class":51351},[28,62583,51358],{"class":211},[28,62585,62586,62588,62590,62593,62595],{"class":30,"line":32745},[28,62587,51392],{"class":211},[28,62589,53938],{"class":51351},[28,62591,62592],{"class":211},">发布\u003C\u002F",[28,62594,53938],{"class":51351},[28,62596,51358],{"class":211},[28,62598,62599,62601,62603],{"class":30,"line":32751},[28,62600,52468],{"class":211},[28,62602,51662],{"class":51351},[28,62604,51358],{"class":211},[28,62606,62607,62609,62611,62613,62615,62617],{"class":30,"line":32762},[28,62608,52195],{"class":211},[28,62610,51662],{"class":51351},[28,62612,53537],{"class":34},[28,62614,257],{"class":211},[28,62616,62522],{"class":64},[28,62618,51358],{"class":211},[28,62620,62621,62623,62625,62627,62629,62632,62635,62637],{"class":30,"line":32768},[28,62622,51392],{"class":211},[28,62624,28],{"class":51351},[28,62626,53537],{"class":34},[28,62628,257],{"class":211},[28,62630,62631],{"class":64},"\"total\"",[28,62633,62634],{"class":211},">0\u002F200字\u003C\u002F",[28,62636,28],{"class":51351},[28,62638,51358],{"class":211},[28,62640,62641,62643,62645],{"class":30,"line":32774},[28,62642,52468],{"class":211},[28,62644,51662],{"class":51351},[28,62646,51358],{"class":211},[28,62648,62649,62651,62653,62655,62657,62660],{"class":30,"line":32780},[28,62650,52195],{"class":211},[28,62652,51662],{"class":51351},[28,62654,53537],{"class":34},[28,62656,257],{"class":211},[28,62658,62659],{"class":64},"\"list\"",[28,62661,51358],{"class":211},[28,62663,62664,62666,62668,62670,62672,62675,62678,62680,62683],{"class":30,"line":32786},[28,62665,51392],{"class":211},[28,62667,51662],{"class":51351},[28,62669,53537],{"class":34},[28,62671,257],{"class":211},[28,62673,62674],{"class":64},"\"item\"",[28,62676,62677],{"class":34}," style",[28,62679,257],{"class":211},[28,62681,62682],{"class":64},"\"display: none;\"",[28,62684,51358],{"class":211},[28,62686,62687,62689,62691,62693,62695,62697,62699,62701],{"class":30,"line":32792},[28,62688,55285],{"class":211},[28,62690,651],{"class":51351},[28,62692,53537],{"class":34},[28,62694,257],{"class":211},[28,62696,62537],{"class":64},[28,62698,55365],{"class":211},[28,62700,651],{"class":51351},[28,62702,51358],{"class":211},[28,62704,62705,62707,62709,62711,62713,62716],{"class":30,"line":32798},[28,62706,55285],{"class":211},[28,62708,51662],{"class":51351},[28,62710,53537],{"class":34},[28,62712,257],{"class":211},[28,62714,62715],{"class":64},"\"info\"",[28,62717,51358],{"class":211},[28,62719,62720,62722,62724,62726,62728,62731,62734,62736],{"class":30,"line":32804},[28,62721,55353],{"class":211},[28,62723,14],{"class":51351},[28,62725,53537],{"class":34},[28,62727,257],{"class":211},[28,62729,62730],{"class":64},"\"name\"",[28,62732,62733],{"class":211},">清风徐来\u003C\u002F",[28,62735,14],{"class":51351},[28,62737,51358],{"class":211},[28,62739,62740,62742,62744,62746,62748,62751,62754,62756],{"class":30,"line":32824},[28,62741,55353],{"class":211},[28,62743,14],{"class":51351},[28,62745,53537],{"class":34},[28,62747,257],{"class":211},[28,62749,62750],{"class":64},"\"text\"",[28,62752,62753],{"class":211},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[28,62755,14],{"class":51351},[28,62757,51358],{"class":211},[28,62759,62760,62762,62764,62766,62768,62771,62774,62776],{"class":30,"line":32830},[28,62761,55353],{"class":211},[28,62763,14],{"class":51351},[28,62765,53537],{"class":34},[28,62767,257],{"class":211},[28,62769,62770],{"class":64},"\"time\"",[28,62772,62773],{"class":211},">2022-10-10 20:29:21\u003C\u002F",[28,62775,14],{"class":51351},[28,62777,51358],{"class":211},[28,62779,62780,62782,62784],{"class":30,"line":32846},[28,62781,55458],{"class":211},[28,62783,51662],{"class":51351},[28,62785,51358],{"class":211},[28,62787,62788,62790,62792],{"class":30,"line":32852},[28,62789,51827],{"class":211},[28,62791,51662],{"class":51351},[28,62793,51358],{"class":211},[28,62795,62796,62798,62800],{"class":30,"line":32866},[28,62797,52468],{"class":211},[28,62799,51662],{"class":51351},[28,62801,51358],{"class":211},[28,62803,62804,62806,62808],{"class":30,"line":32872},[28,62805,52195],{"class":211},[28,62807,51864],{"class":51351},[28,62809,51358],{"class":211},[28,62811,62812,62814,62817,62819,62821,62823,62825,62828],{"class":30,"line":32887},[28,62813,11298],{"class":207},[28,62815,62816],{"class":38}," tx",[28,62818,13641],{"class":207},[28,62820,54447],{"class":211},[28,62822,54450],{"class":34},[28,62824,212],{"class":211},[28,62826,62827],{"class":64},"'#tx'",[28,62829,218],{"class":211},[28,62831,62832,62834,62837,62839,62841,62843,62845,62848],{"class":30,"line":32893},[28,62833,11298],{"class":207},[28,62835,62836],{"class":38}," total",[28,62838,13641],{"class":207},[28,62840,54447],{"class":211},[28,62842,54450],{"class":34},[28,62844,212],{"class":211},[28,62846,62847],{"class":64},"'.total'",[28,62849,218],{"class":211},[28,62851,62852],{"class":30,"line":32902},[28,62853,62854],{"class":269},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[28,62856,62857,62860,62862,62864,62866,62868,62870],{"class":30,"line":32908},[28,62858,62859],{"class":211},"    tx.",[28,62861,57864],{"class":34},[28,62863,212],{"class":211},[28,62865,61378],{"class":64},[28,62867,12512],{"class":211},[28,62869,54500],{"class":207},[28,62871,54503],{"class":211},[28,62873,62874,62877,62879],{"class":30,"line":32917},[28,62875,62876],{"class":211},"      total.style.opacity ",[28,62878,257],{"class":207},[28,62880,55750],{"class":38},[28,62882,62883],{"class":30,"line":32923},[28,62884,33512],{"class":211},[28,62886,62887],{"class":30,"line":32929},[28,62888,62889],{"class":269},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[28,62891,62892,62894,62896,62898,62900,62902,62904],{"class":30,"line":32938},[28,62893,62859],{"class":211},[28,62895,57864],{"class":34},[28,62897,212],{"class":211},[28,62899,61439],{"class":64},[28,62901,12512],{"class":211},[28,62903,54500],{"class":207},[28,62905,54503],{"class":211},[28,62907,62908,62910,62912],{"class":30,"line":32944},[28,62909,62876],{"class":211},[28,62911,257],{"class":207},[28,62913,47384],{"class":38},[28,62915,62916],{"class":30,"line":32955},[28,62917,33512],{"class":211},[28,62919,62920],{"class":30,"line":32961},[28,62921,62922],{"class":269},"    \u002F\u002F 3. 检测用户输入\n",[28,62924,62925,62927,62929,62931,62934,62936,62938],{"class":30,"line":32980},[28,62926,62859],{"class":211},[28,62928,57864],{"class":34},[28,62930,212],{"class":211},[28,62932,62933],{"class":64},"'input'",[28,62935,12512],{"class":211},[28,62937,54500],{"class":207},[28,62939,54503],{"class":211},[28,62941,62942],{"class":30,"line":32986},[28,62943,62944],{"class":269},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[28,62946,62947,62950,62952,62955,62958,62960,62963,62965,62967],{"class":30,"line":32997},[28,62948,62949],{"class":211},"      total.innerHTML ",[28,62951,257],{"class":207},[28,62953,62954],{"class":64}," `${",[28,62956,62957],{"class":211},"tx",[28,62959,768],{"class":64},[28,62961,62962],{"class":211},"value",[28,62964,768],{"class":64},[28,62966,52019],{"class":38},[28,62968,62969],{"class":64},"}\u002F200字`\n",[28,62971,62972],{"class":30,"line":33003},[28,62973,33512],{"class":211},[28,62975,62976],{"class":30,"line":33023},[28,62977,2477],{"emptyLinePlaceholder":134},[28,62979,62980],{"class":30,"line":33039},[28,62981,62982],{"class":269},"    \u002F\u002F const str = 'andy'\n",[28,62984,62985],{"class":30,"line":33045},[28,62986,62987],{"class":269},"    \u002F\u002F console.log(str.length)\n",[28,62989,62990,62992,62994],{"class":30,"line":33059},[28,62991,52468],{"class":211},[28,62993,51864],{"class":51351},[28,62995,51358],{"class":211},[28,62997,62998,63000,63002],{"class":30,"line":33065},[28,62999,51836],{"class":211},[28,63001,51851],{"class":51351},[28,63003,51358],{"class":211},[28,63005,63006],{"class":30,"line":33071},[28,63007,2477],{"emptyLinePlaceholder":134},[28,63009,63010,63012,63014],{"class":30,"line":33082},[28,63011,51836],{"class":211},[28,63013,50686],{"class":51351},[28,63015,51358],{"class":211},[22075,63017,63019],{"id":63018},"_3254-change事件","3.2.5.4 change事件",[14,63021,63022],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,63024,63025],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,63027,63028],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[18,63030,63032],{"className":50684,"code":63031,"language":50686,"meta":23,"style":23},"\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",[25,63033,63034,63044,63058,63062,63070,63084,63104,63116,63124,63128,63136,63150,63158,63176,63194,63206,63210,63218,63226,63230],{"__ignoreMap":23},[28,63035,63036,63038,63040,63042],{"class":30,"line":31},[28,63037,51348],{"class":211},[28,63039,51352],{"class":51351},[28,63041,51355],{"class":34},[28,63043,51358],{"class":211},[28,63045,63046,63048,63050,63052,63054,63056],{"class":30,"line":42},[28,63047,1120],{"class":211},[28,63049,50686],{"class":51351},[28,63051,51367],{"class":34},[28,63053,257],{"class":211},[28,63055,51372],{"class":64},[28,63057,51358],{"class":211},[28,63059,63060],{"class":30,"line":50},[28,63061,2477],{"emptyLinePlaceholder":134},[28,63063,63064,63066,63068],{"class":30,"line":58},[28,63065,1120],{"class":211},[28,63067,51385],{"class":51351},[28,63069,51358],{"class":211},[28,63071,63072,63074,63076,63078,63080,63082],{"class":30,"line":70},[28,63073,52195],{"class":211},[28,63075,51395],{"class":51351},[28,63077,51398],{"class":34},[28,63079,257],{"class":211},[28,63081,51403],{"class":64},[28,63083,51358],{"class":211},[28,63085,63086,63088,63090,63092,63094,63096,63098,63100,63102],{"class":30,"line":78},[28,63087,52195],{"class":211},[28,63089,51395],{"class":51351},[28,63091,14997],{"class":34},[28,63093,257],{"class":211},[28,63095,51442],{"class":64},[28,63097,51422],{"class":34},[28,63099,257],{"class":211},[28,63101,51449],{"class":64},[28,63103,51358],{"class":211},[28,63105,63106,63108,63110,63112,63114],{"class":30,"line":86},[28,63107,52195],{"class":211},[28,63109,51458],{"class":51351},[28,63111,51461],{"class":211},[28,63113,51458],{"class":51351},[28,63115,51358],{"class":211},[28,63117,63118,63120,63122],{"class":30,"line":97},[28,63119,51836],{"class":211},[28,63121,51385],{"class":51351},[28,63123,51358],{"class":211},[28,63125,63126],{"class":30,"line":108},[28,63127,2477],{"emptyLinePlaceholder":134},[28,63129,63130,63132,63134],{"class":30,"line":1407},[28,63131,1120],{"class":211},[28,63133,51851],{"class":51351},[28,63135,51358],{"class":211},[28,63137,63138,63140,63142,63144,63146,63148],{"class":30,"line":1690},[28,63139,52195],{"class":211},[28,63141,53872],{"class":51351},[28,63143,53875],{"class":34},[28,63145,257],{"class":211},[28,63147,62750],{"class":64},[28,63149,51358],{"class":211},[28,63151,63152,63154,63156],{"class":30,"line":1695},[28,63153,52195],{"class":211},[28,63155,51864],{"class":51351},[28,63157,51358],{"class":211},[28,63159,63160,63162,63164,63166,63168,63170,63172,63174],{"class":30,"line":1701},[28,63161,11298],{"class":207},[28,63163,60656],{"class":38},[28,63165,13641],{"class":207},[28,63167,54447],{"class":211},[28,63169,54450],{"class":34},[28,63171,212],{"class":211},[28,63173,62933],{"class":64},[28,63175,218],{"class":211},[28,63177,63178,63181,63183,63185,63188,63190,63192],{"class":30,"line":1706},[28,63179,63180],{"class":211},"    input.",[28,63182,57864],{"class":34},[28,63184,212],{"class":211},[28,63186,63187],{"class":64},"'change'",[28,63189,12512],{"class":211},[28,63191,54500],{"class":207},[28,63193,54503],{"class":211},[28,63195,63196,63198,63200,63202,63204],{"class":30,"line":1720},[28,63197,58295],{"class":211},[28,63199,58298],{"class":34},[28,63201,212],{"class":211},[28,63203,803],{"class":38},[28,63205,218],{"class":211},[28,63207,63208],{"class":30,"line":1725},[28,63209,33512],{"class":211},[28,63211,63212,63214,63216],{"class":30,"line":1731},[28,63213,52468],{"class":211},[28,63215,51864],{"class":51351},[28,63217,51358],{"class":211},[28,63219,63220,63222,63224],{"class":30,"line":1752},[28,63221,51836],{"class":211},[28,63223,51851],{"class":51351},[28,63225,51358],{"class":211},[28,63227,63228],{"class":30,"line":1757},[28,63229,2477],{"emptyLinePlaceholder":134},[28,63231,63232,63234,63236],{"class":30,"line":1771},[28,63233,51836],{"class":211},[28,63235,50686],{"class":51351},[28,63237,51358],{"class":211},[14,63239,63240],{},"总结：内容发生改变才回去触发",[177,63242,63244],{"id":63243},"_326-事件对象","3.2.6 事件对象",[22075,63246,63248],{"id":63247},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63250,63251],{},[1540,63252],{"alt":23,"src":63253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63255,63256],{},[1540,63257],{"alt":23,"src":63258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63260,63261],{},"点击一次，就输出了事件对象，它是个对象",[14,63263,63264],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63266,63267],{},[1540,63268],{"alt":23,"src":63269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22075,63271,63273],{"id":63272},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63275,63276],{},[1540,63277],{"alt":23,"src":63278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63280,63281],{},"实现按特殊字符才是实现打印输出效果：",[18,63283,63285],{"className":53118,"code":63284,"language":53120,"meta":23,"style":23},"\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",[25,63286,63287,63295,63300,63314,63322,63327,63332,63337,63342,63347,63352,63357,63362,63367,63371,63375,63383],{"__ignoreMap":23},[28,63288,63289,63291,63293],{"class":30,"line":31},[28,63290,1120],{"class":211},[28,63292,51851],{"class":51351},[28,63294,51358],{"class":211},[28,63296,63297],{"class":30,"line":42},[28,63298,63299],{"class":269},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[28,63301,63302,63304,63306,63308,63310,63312],{"class":30,"line":50},[28,63303,52195],{"class":211},[28,63305,53872],{"class":51351},[28,63307,53875],{"class":34},[28,63309,257],{"class":211},[28,63311,62750],{"class":64},[28,63313,51358],{"class":211},[28,63315,63316,63318,63320],{"class":30,"line":58},[28,63317,52195],{"class":211},[28,63319,51864],{"class":51351},[28,63321,51358],{"class":211},[28,63323,63324],{"class":30,"line":70},[28,63325,63326],{"class":211},"    \u002F\u002F const btn = document.querySelector('button')\n",[28,63328,63329],{"class":30,"line":78},[28,63330,63331],{"class":211},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[28,63333,63334],{"class":30,"line":86},[28,63335,63336],{"class":211},"    \u002F\u002F   console.log(e);\n",[28,63338,63339],{"class":30,"line":97},[28,63340,63341],{"class":211},"    \u002F\u002F })\n",[28,63343,63344],{"class":30,"line":108},[28,63345,63346],{"class":211},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[28,63348,63349],{"class":30,"line":1407},[28,63350,63351],{"class":211},"    const input = document.querySelector('input')\n",[28,63353,63354],{"class":30,"line":1690},[28,63355,63356],{"class":211},"    input.addEventListener('keyup', function (e) {\n",[28,63358,63359],{"class":30,"line":1695},[28,63360,63361],{"class":211},"      if (e.key === 'Enter') {\n",[28,63363,63364],{"class":30,"line":1701},[28,63365,63366],{"class":211},"        console.log('我按下了回车键')\n",[28,63368,63369],{"class":30,"line":1706},[28,63370,52449],{"class":211},[28,63372,63373],{"class":30,"line":1720},[28,63374,33512],{"class":211},[28,63376,63377,63379,63381],{"class":30,"line":1725},[28,63378,52468],{"class":211},[28,63380,51864],{"class":51351},[28,63382,51358],{"class":211},[28,63384,63385,63387,63389],{"class":30,"line":1731},[28,63386,51836],{"class":211},[28,63388,51851],{"class":51351},[28,63390,51358],{"class":211},[22075,63392,63394],{"id":63393},"_3263-trim方法","3.2.6.3 trim方法",[14,63396,63397],{},[1540,63398],{"alt":23,"src":63399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63401,63402],{},[1540,63403],{"alt":23,"src":63404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63406,63407],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63409,63410],{},"str.trim()",[177,63412,63414],{"id":63413},"_327-环境对象","3.2.7 环境对象",[14,63416,63417],{},[1540,63418],{"alt":23,"src":63419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63421,63422],{},[1540,63423],{"alt":23,"src":63424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63426,63427],{},[1540,63428],{"alt":23,"src":63429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63431,63432],{},"实际函数调用是window.fn()",[14,63434,63435],{},"普通函数里面this指向的是window",[116,63437,63438,63441,63444],{},[119,63439,63440],{},"在普通函数下，this指向的是window",[119,63442,63443],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[119,63445,63446],{},"箭头函数没有this",[14,63448,63449],{},"粗略记法就是：谁调用，this就指向谁",[14,63451,63452],{},[1540,63453],{"alt":23,"src":63454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63456,63457],{},[1540,63458],{"alt":23,"src":63459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63461,63462],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63464,63465],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[18,63467,63469],{"className":53118,"code":63468,"language":53120,"meta":23,"style":23},"\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",[25,63470,63471,63479,63491,63499,63504,63509,63514,63519,63523,63531],{"__ignoreMap":23},[28,63472,63473,63475,63477],{"class":30,"line":31},[28,63474,1120],{"class":211},[28,63476,51851],{"class":51351},[28,63478,51358],{"class":211},[28,63480,63481,63483,63485,63487,63489],{"class":30,"line":42},[28,63482,52195],{"class":211},[28,63484,53938],{"class":51351},[28,63486,53944],{"class":211},[28,63488,53938],{"class":51351},[28,63490,51358],{"class":211},[28,63492,63493,63495,63497],{"class":30,"line":50},[28,63494,52195],{"class":211},[28,63496,51864],{"class":51351},[28,63498,51358],{"class":211},[28,63500,63501],{"class":30,"line":58},[28,63502,63503],{"class":211},"    const button = document.querySelector('button')\n",[28,63505,63506],{"class":30,"line":70},[28,63507,63508],{"class":211},"    button.addEventListener('click', function () {\n",[28,63510,63511],{"class":30,"line":78},[28,63512,63513],{"class":211},"      \u002F\u002F console.log(this);\n",[28,63515,63516],{"class":30,"line":86},[28,63517,63518],{"class":211},"      this.style.color = 'pink'\n",[28,63520,63521],{"class":30,"line":97},[28,63522,33512],{"class":211},[28,63524,63525,63527,63529],{"class":30,"line":108},[28,63526,52468],{"class":211},[28,63528,51864],{"class":51351},[28,63530,51358],{"class":211},[28,63532,63533,63535,63537],{"class":30,"line":1407},[28,63534,51836],{"class":211},[28,63536,51851],{"class":51351},[28,63538,51358],{"class":211},[177,63540,63542],{"id":63541},"_328-回调函数","3.2.8 回调函数",[14,63544,63545],{},[1540,63546],{"alt":23,"src":63547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63549,63550],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63552,11409],{},[116,63554,63555,63558,63561],{},[119,63556,63557],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[119,63559,63560],{},"回调函数本质还是函数，只不过把它当成参数使用",[119,63562,63563],{},"使用匿名函数做为回调函数比较常见",[177,63565,63567],{"id":63566},"_329-tab栏切换","3.2.9 tab栏切换",[14,63569,63570],{},[1540,63571],{"alt":23,"src":63572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[18,63574,63576],{"className":50684,"code":63575,"language":50686,"meta":23,"style":23},"\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",[25,63577,63578,63588,63602,63606,63614,63628,63648,63668,63681,63689,63695,63705,63715,63719,63723,63730,63743,63756,63768,63784,63788,63792,63799,63811,63823,63835,63845,63855,63859,63863,63872,63884,63895,63907,63911,63915,63923,63933,63943,63953,63957,63961,63971,63985,63997,64001,64005,64017,64028,64045,64055,64059,64063,64078,64089,64099,64103,64107,64114,64129,64133,64137,64145,64155,64159,64163,64172,64182,64186,64194,64202,64206,64214,64229,64244,64257,64265,64299,64326,64353,64380,64407,64415,64423,64438,64475,64510,64545,64580,64615,64623,64631,64639,64644,64649,64669,64674,64703,64708,64713,64731,64736,64741,64746,64768,64773,64789,64793,64798,64803,64824,64829,64858,64862,64867,64871,64879,64887,64891],{"__ignoreMap":23},[28,63579,63580,63582,63584,63586],{"class":30,"line":31},[28,63581,51348],{"class":211},[28,63583,51352],{"class":51351},[28,63585,51355],{"class":34},[28,63587,51358],{"class":211},[28,63589,63590,63592,63594,63596,63598,63600],{"class":30,"line":42},[28,63591,1120],{"class":211},[28,63593,50686],{"class":51351},[28,63595,51367],{"class":34},[28,63597,257],{"class":211},[28,63599,51372],{"class":64},[28,63601,51358],{"class":211},[28,63603,63604],{"class":30,"line":50},[28,63605,2477],{"emptyLinePlaceholder":134},[28,63607,63608,63610,63612],{"class":30,"line":58},[28,63609,1120],{"class":211},[28,63611,51385],{"class":51351},[28,63613,51358],{"class":211},[28,63615,63616,63618,63620,63622,63624,63626],{"class":30,"line":70},[28,63617,52195],{"class":211},[28,63619,51395],{"class":51351},[28,63621,51398],{"class":34},[28,63623,257],{"class":211},[28,63625,51403],{"class":64},[28,63627,59178],{"class":211},[28,63629,63630,63632,63634,63636,63638,63640,63642,63644,63646],{"class":30,"line":78},[28,63631,52195],{"class":211},[28,63633,51395],{"class":51351},[28,63635,51414],{"class":34},[28,63637,257],{"class":211},[28,63639,51419],{"class":64},[28,63641,51422],{"class":34},[28,63643,257],{"class":211},[28,63645,51427],{"class":64},[28,63647,59178],{"class":211},[28,63649,63650,63652,63654,63656,63658,63660,63662,63664,63666],{"class":30,"line":86},[28,63651,52195],{"class":211},[28,63653,51395],{"class":51351},[28,63655,14997],{"class":34},[28,63657,257],{"class":211},[28,63659,51442],{"class":64},[28,63661,51422],{"class":34},[28,63663,257],{"class":211},[28,63665,51449],{"class":64},[28,63667,59178],{"class":211},[28,63669,63670,63672,63674,63677,63679],{"class":30,"line":97},[28,63671,52195],{"class":211},[28,63673,51458],{"class":51351},[28,63675,63676],{"class":211},">tab栏切换\u003C\u002F",[28,63678,51458],{"class":51351},[28,63680,51358],{"class":211},[28,63682,63683,63685,63687],{"class":30,"line":108},[28,63684,52195],{"class":211},[28,63686,126],{"class":51351},[28,63688,51358],{"class":211},[28,63690,63691,63693],{"class":30,"line":1407},[28,63692,6480],{"class":51351},[28,63694,15649],{"class":211},[28,63696,63697,63699,63701,63703],{"class":30,"line":1690},[28,63698,54757],{"class":38},[28,63700,51488],{"class":211},[28,63702,401],{"class":38},[28,63704,1370],{"class":211},[28,63706,63707,63709,63711,63713],{"class":30,"line":1695},[28,63708,54746],{"class":38},[28,63710,51488],{"class":211},[28,63712,401],{"class":38},[28,63714,1370],{"class":211},[28,63716,63717],{"class":30,"line":1701},[28,63718,2264],{"class":211},[28,63720,63721],{"class":30,"line":1706},[28,63722,2477],{"emptyLinePlaceholder":134},[28,63724,63725,63728],{"class":30,"line":1720},[28,63726,63727],{"class":34},"    .tab",[28,63729,15649],{"class":211},[28,63731,63732,63734,63736,63739,63741],{"class":30,"line":1725},[28,63733,54822],{"class":38},[28,63735,51488],{"class":211},[28,63737,63738],{"class":38},"590",[28,63740,51543],{"class":207},[28,63742,1370],{"class":211},[28,63744,63745,63747,63749,63752,63754],{"class":30,"line":1731},[28,63746,54836],{"class":38},[28,63748,51488],{"class":211},[28,63750,63751],{"class":38},"340",[28,63753,51543],{"class":207},[28,63755,1370],{"class":211},[28,63757,63758,63760,63762,63764,63766],{"class":30,"line":1752},[28,63759,54757],{"class":38},[28,63761,51488],{"class":211},[28,63763,910],{"class":38},[28,63765,51543],{"class":207},[28,63767,1370],{"class":211},[28,63769,63770,63772,63774,63776,63778,63780,63782],{"class":30,"line":1757},[28,63771,62028],{"class":38},[28,63773,51488],{"class":211},[28,63775,427],{"class":38},[28,63777,51543],{"class":207},[28,63779,51572],{"class":38},[28,63781,62295],{"class":38},[28,63783,1370],{"class":211},[28,63785,63786],{"class":30,"line":1771},[28,63787,2264],{"class":211},[28,63789,63790],{"class":30,"line":1776},[28,63791,2477],{"emptyLinePlaceholder":134},[28,63793,63794,63797],{"class":30,"line":1805},[28,63795,63796],{"class":34},"    .tab-nav",[28,63798,15649],{"class":211},[28,63800,63801,63803,63805,63807,63809],{"class":30,"line":1810},[28,63802,54822],{"class":38},[28,63804,51488],{"class":211},[28,63806,521],{"class":38},[28,63808,538],{"class":207},[28,63810,1370],{"class":211},[28,63812,63813,63815,63817,63819,63821],{"class":30,"line":1827},[28,63814,54836],{"class":38},[28,63816,51488],{"class":211},[28,63818,1117],{"class":38},[28,63820,51543],{"class":207},[28,63822,1370],{"class":211},[28,63824,63825,63827,63829,63831,63833],{"class":30,"line":1832},[28,63826,57410],{"class":38},[28,63828,51488],{"class":211},[28,63830,1117],{"class":38},[28,63832,51543],{"class":207},[28,63834,1370],{"class":211},[28,63836,63837,63839,63841,63843],{"class":30,"line":1837},[28,63838,55060],{"class":38},[28,63840,51488],{"class":211},[28,63842,51528],{"class":38},[28,63844,1370],{"class":211},[28,63846,63847,63849,63851,63853],{"class":30,"line":1842},[28,63848,55071],{"class":38},[28,63850,51488],{"class":211},[28,63852,51719],{"class":38},[28,63854,1370],{"class":211},[28,63856,63857],{"class":30,"line":1856},[28,63858,2264],{"class":211},[28,63860,63861],{"class":30,"line":1861},[28,63862,2477],{"emptyLinePlaceholder":134},[28,63864,63865,63867,63870],{"class":30,"line":2654},[28,63866,63796],{"class":34},[28,63868,63869],{"class":51351}," h3",[28,63871,15649],{"class":211},[28,63873,63874,63876,63878,63880,63882],{"class":30,"line":2668},[28,63875,54973],{"class":38},[28,63877,51488],{"class":211},[28,63879,1010],{"class":38},[28,63881,51543],{"class":207},[28,63883,1370],{"class":211},[28,63885,63886,63888,63890,63893],{"class":30,"line":2676},[28,63887,62385],{"class":38},[28,63889,51488],{"class":211},[28,63891,63892],{"class":38},"normal",[28,63894,1370],{"class":211},[28,63896,63897,63899,63901,63903,63905],{"class":30,"line":2681},[28,63898,62051],{"class":38},[28,63900,51488],{"class":211},[28,63902,910],{"class":38},[28,63904,51543],{"class":207},[28,63906,1370],{"class":211},[28,63908,63909],{"class":30,"line":2687},[28,63910,2264],{"class":211},[28,63912,63913],{"class":30,"line":2693},[28,63914,2477],{"emptyLinePlaceholder":134},[28,63916,63917,63919,63921],{"class":30,"line":2698},[28,63918,63796],{"class":34},[28,63920,61343],{"class":51351},[28,63922,15649],{"class":211},[28,63924,63925,63927,63929,63931],{"class":30,"line":8025},[28,63926,54783],{"class":38},[28,63928,51488],{"class":211},[28,63930,54788],{"class":38},[28,63932,1370],{"class":211},[28,63934,63935,63937,63939,63941],{"class":30,"line":8049},[28,63936,55060],{"class":38},[28,63938,51488],{"class":211},[28,63940,51528],{"class":38},[28,63942,1370],{"class":211},[28,63944,63945,63947,63949,63951],{"class":30,"line":8054},[28,63946,55071],{"class":38},[28,63948,51488],{"class":211},[28,63950,51631],{"class":38},[28,63952,1370],{"class":211},[28,63954,63955],{"class":30,"line":8060},[28,63956,2264],{"class":211},[28,63958,63959],{"class":30,"line":8087},[28,63960,2477],{"emptyLinePlaceholder":134},[28,63962,63963,63965,63967,63969],{"class":30,"line":8092},[28,63964,63796],{"class":34},[28,63966,61343],{"class":51351},[28,63968,55126],{"class":51351},[28,63970,15649],{"class":211},[28,63972,63973,63975,63977,63979,63981,63983],{"class":30,"line":8098},[28,63974,54757],{"class":38},[28,63976,51488],{"class":211},[28,63978,401],{"class":38},[28,63980,9027],{"class":38},[28,63982,51543],{"class":207},[28,63984,1370],{"class":211},[28,63986,63987,63989,63991,63993,63995],{"class":30,"line":8110},[28,63988,54973],{"class":38},[28,63990,51488],{"class":211},[28,63992,759],{"class":38},[28,63994,51543],{"class":207},[28,63996,1370],{"class":211},[28,63998,63999],{"class":30,"line":8122},[28,64000,2264],{"class":211},[28,64002,64003],{"class":30,"line":8134},[28,64004,2477],{"emptyLinePlaceholder":134},[28,64006,64007,64009,64011,64013,64015],{"class":30,"line":9793},[28,64008,63796],{"class":34},[28,64010,61343],{"class":51351},[28,64012,55126],{"class":51351},[28,64014,1476],{"class":51351},[28,64016,15649],{"class":211},[28,64018,64019,64022,64024,64026],{"class":30,"line":9818},[28,64020,64021],{"class":38},"      text-decoration",[28,64023,51488],{"class":211},[28,64025,54788],{"class":38},[28,64027,1370],{"class":211},[28,64029,64030,64032,64034,64036,64038,64040,64043],{"class":30,"line":9841},[28,64031,62283],{"class":38},[28,64033,51488],{"class":211},[28,64035,288],{"class":38},[28,64037,51543],{"class":207},[28,64039,51572],{"class":38},[28,64041,64042],{"class":38}," transparent",[28,64044,1370],{"class":211},[28,64046,64047,64049,64051,64053],{"class":30,"line":9865},[28,64048,57467],{"class":38},[28,64050,51488],{"class":211},[28,64052,62420],{"class":38},[28,64054,1370],{"class":211},[28,64056,64057],{"class":30,"line":9870},[28,64058,2264],{"class":211},[28,64060,64061],{"class":30,"line":9875},[28,64062,2477],{"emptyLinePlaceholder":134},[28,64064,64065,64067,64069,64071,64073,64076],{"class":30,"line":9880},[28,64066,63796],{"class":34},[28,64068,61343],{"class":51351},[28,64070,55126],{"class":51351},[28,64072,1476],{"class":51351},[28,64074,64075],{"class":34},".active",[28,64077,15649],{"class":211},[28,64079,64080,64082,64084,64087],{"class":30,"line":9889},[28,64081,61842],{"class":38},[28,64083,51488],{"class":211},[28,64085,64086],{"class":38},"#e1251b",[28,64088,1370],{"class":211},[28,64090,64091,64093,64095,64097],{"class":30,"line":9894},[28,64092,57467],{"class":38},[28,64094,51488],{"class":211},[28,64096,64086],{"class":38},[28,64098,1370],{"class":211},[28,64100,64101],{"class":30,"line":9900},[28,64102,2264],{"class":211},[28,64104,64105],{"class":30,"line":9921},[28,64106,2477],{"emptyLinePlaceholder":134},[28,64108,64109,64112],{"class":30,"line":9927},[28,64110,64111],{"class":34},"    .tab-content",[28,64113,15649],{"class":211},[28,64115,64116,64118,64120,64122,64125,64127],{"class":30,"line":9941},[28,64117,54746],{"class":38},[28,64119,51488],{"class":211},[28,64121,401],{"class":38},[28,64123,64124],{"class":38}," 16",[28,64126,51543],{"class":207},[28,64128,1370],{"class":211},[28,64130,64131],{"class":30,"line":9947},[28,64132,2264],{"class":211},[28,64134,64135],{"class":30,"line":9974},[28,64136,2477],{"emptyLinePlaceholder":134},[28,64138,64139,64141,64143],{"class":30,"line":9983},[28,64140,64111],{"class":34},[28,64142,62225],{"class":34},[28,64144,15649],{"class":211},[28,64146,64147,64149,64151,64153],{"class":30,"line":9989},[28,64148,55060],{"class":38},[28,64150,51488],{"class":211},[28,64152,54788],{"class":38},[28,64154,1370],{"class":211},[28,64156,64157],{"class":30,"line":9997},[28,64158,2264],{"class":211},[28,64160,64161],{"class":30,"line":10002},[28,64162,2477],{"emptyLinePlaceholder":134},[28,64164,64165,64167,64170],{"class":30,"line":16681},[28,64166,64111],{"class":34},[28,64168,64169],{"class":34}," .item.active",[28,64171,15649],{"class":211},[28,64173,64174,64176,64178,64180],{"class":30,"line":16687},[28,64175,55060],{"class":38},[28,64177,51488],{"class":211},[28,64179,60920],{"class":38},[28,64181,1370],{"class":211},[28,64183,64184],{"class":30,"line":16710},[28,64185,2264],{"class":211},[28,64187,64188,64190,64192],{"class":30,"line":16716},[28,64189,52468],{"class":211},[28,64191,126],{"class":51351},[28,64193,51358],{"class":211},[28,64195,64196,64198,64200],{"class":30,"line":16739},[28,64197,51836],{"class":211},[28,64199,51385],{"class":51351},[28,64201,51358],{"class":211},[28,64203,64204],{"class":30,"line":16753},[28,64205,2477],{"emptyLinePlaceholder":134},[28,64207,64208,64210,64212],{"class":30,"line":16773},[28,64209,1120],{"class":211},[28,64211,51851],{"class":51351},[28,64213,51358],{"class":211},[28,64215,64216,64218,64220,64222,64224,64227],{"class":30,"line":16779},[28,64217,52195],{"class":211},[28,64219,51662],{"class":51351},[28,64221,53537],{"class":34},[28,64223,257],{"class":211},[28,64225,64226],{"class":64},"\"tab\"",[28,64228,51358],{"class":211},[28,64230,64231,64233,64235,64237,64239,64242],{"class":30,"line":16790},[28,64232,51392],{"class":211},[28,64234,51662],{"class":51351},[28,64236,53537],{"class":34},[28,64238,257],{"class":211},[28,64240,64241],{"class":64},"\"tab-nav\"",[28,64243,51358],{"class":211},[28,64245,64246,64248,64250,64253,64255],{"class":30,"line":16813},[28,64247,55285],{"class":211},[28,64249,177],{"class":51351},[28,64251,64252],{"class":211},">每日特价\u003C\u002F",[28,64254,177],{"class":51351},[28,64256,51358],{"class":211},[28,64258,64259,64261,64263],{"class":30,"line":16835},[28,64260,55285],{"class":211},[28,64262,116],{"class":51351},[28,64264,51358],{"class":211},[28,64266,64267,64269,64271,64273,64275,64277,64279,64281,64283,64285,64288,64291,64293,64295,64297],{"class":30,"line":16840},[28,64268,55353],{"class":211},[28,64270,119],{"class":51351},[28,64272,61103],{"class":211},[28,64274,448],{"class":51351},[28,64276,53537],{"class":34},[28,64278,257],{"class":211},[28,64280,59757],{"class":64},[28,64282,61108],{"class":34},[28,64284,257],{"class":211},[28,64286,64287],{"class":64},"\"javascript:;\"",[28,64289,64290],{"class":211},">精选\u003C\u002F",[28,64292,448],{"class":51351},[28,64294,55365],{"class":211},[28,64296,119],{"class":51351},[28,64298,51358],{"class":211},[28,64300,64301,64303,64305,64307,64309,64311,64313,64315,64318,64320,64322,64324],{"class":30,"line":16846},[28,64302,55353],{"class":211},[28,64304,119],{"class":51351},[28,64306,61103],{"class":211},[28,64308,448],{"class":51351},[28,64310,61108],{"class":34},[28,64312,257],{"class":211},[28,64314,64287],{"class":64},[28,64316,64317],{"class":211},">美食\u003C\u002F",[28,64319,448],{"class":51351},[28,64321,55365],{"class":211},[28,64323,119],{"class":51351},[28,64325,51358],{"class":211},[28,64327,64328,64330,64332,64334,64336,64338,64340,64342,64345,64347,64349,64351],{"class":30,"line":16860},[28,64329,55353],{"class":211},[28,64331,119],{"class":51351},[28,64333,61103],{"class":211},[28,64335,448],{"class":51351},[28,64337,61108],{"class":34},[28,64339,257],{"class":211},[28,64341,64287],{"class":64},[28,64343,64344],{"class":211},">百货\u003C\u002F",[28,64346,448],{"class":51351},[28,64348,55365],{"class":211},[28,64350,119],{"class":51351},[28,64352,51358],{"class":211},[28,64354,64355,64357,64359,64361,64363,64365,64367,64369,64372,64374,64376,64378],{"class":30,"line":16873},[28,64356,55353],{"class":211},[28,64358,119],{"class":51351},[28,64360,61103],{"class":211},[28,64362,448],{"class":51351},[28,64364,61108],{"class":34},[28,64366,257],{"class":211},[28,64368,64287],{"class":64},[28,64370,64371],{"class":211},">个护\u003C\u002F",[28,64373,448],{"class":51351},[28,64375,55365],{"class":211},[28,64377,119],{"class":51351},[28,64379,51358],{"class":211},[28,64381,64382,64384,64386,64388,64390,64392,64394,64396,64399,64401,64403,64405],{"class":30,"line":16878},[28,64383,55353],{"class":211},[28,64385,119],{"class":51351},[28,64387,61103],{"class":211},[28,64389,448],{"class":51351},[28,64391,61108],{"class":34},[28,64393,257],{"class":211},[28,64395,64287],{"class":64},[28,64397,64398],{"class":211},">预告\u003C\u002F",[28,64400,448],{"class":51351},[28,64402,55365],{"class":211},[28,64404,119],{"class":51351},[28,64406,51358],{"class":211},[28,64408,64409,64411,64413],{"class":30,"line":16892},[28,64410,55458],{"class":211},[28,64412,116],{"class":51351},[28,64414,51358],{"class":211},[28,64416,64417,64419,64421],{"class":30,"line":16897},[28,64418,51827],{"class":211},[28,64420,51662],{"class":51351},[28,64422,51358],{"class":211},[28,64424,64425,64427,64429,64431,64433,64436],{"class":30,"line":16903},[28,64426,51392],{"class":211},[28,64428,51662],{"class":51351},[28,64430,53537],{"class":34},[28,64432,257],{"class":211},[28,64434,64435],{"class":64},"\"tab-content\"",[28,64437,51358],{"class":211},[28,64439,64440,64442,64444,64446,64448,64451,64453,64455,64457,64459,64462,64464,64466,64468,64471,64473],{"class":30,"line":16908},[28,64441,55285],{"class":211},[28,64443,51662],{"class":51351},[28,64445,53537],{"class":34},[28,64447,257],{"class":211},[28,64449,64450],{"class":64},"\"item active\"",[28,64452,61103],{"class":211},[28,64454,1540],{"class":51351},[28,64456,55290],{"class":34},[28,64458,257],{"class":211},[28,64460,64461],{"class":64},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[28,64463,55298],{"class":34},[28,64465,257],{"class":211},[28,64467,7729],{"class":64},[28,64469,64470],{"class":211}," \u002F>\u003C\u002F",[28,64472,51662],{"class":51351},[28,64474,51358],{"class":211},[28,64476,64477,64479,64481,64483,64485,64487,64489,64491,64493,64495,64498,64500,64502,64504,64506,64508],{"class":30,"line":16922},[28,64478,55285],{"class":211},[28,64480,51662],{"class":51351},[28,64482,53537],{"class":34},[28,64484,257],{"class":211},[28,64486,62674],{"class":64},[28,64488,61103],{"class":211},[28,64490,1540],{"class":51351},[28,64492,55290],{"class":34},[28,64494,257],{"class":211},[28,64496,64497],{"class":64},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[28,64499,55298],{"class":34},[28,64501,257],{"class":211},[28,64503,7729],{"class":64},[28,64505,64470],{"class":211},[28,64507,51662],{"class":51351},[28,64509,51358],{"class":211},[28,64511,64512,64514,64516,64518,64520,64522,64524,64526,64528,64530,64533,64535,64537,64539,64541,64543],{"class":30,"line":16927},[28,64513,55285],{"class":211},[28,64515,51662],{"class":51351},[28,64517,53537],{"class":34},[28,64519,257],{"class":211},[28,64521,62674],{"class":64},[28,64523,61103],{"class":211},[28,64525,1540],{"class":51351},[28,64527,55290],{"class":34},[28,64529,257],{"class":211},[28,64531,64532],{"class":64},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[28,64534,55298],{"class":34},[28,64536,257],{"class":211},[28,64538,7729],{"class":64},[28,64540,64470],{"class":211},[28,64542,51662],{"class":51351},[28,64544,51358],{"class":211},[28,64546,64547,64549,64551,64553,64555,64557,64559,64561,64563,64565,64568,64570,64572,64574,64576,64578],{"class":30,"line":16932},[28,64548,55285],{"class":211},[28,64550,51662],{"class":51351},[28,64552,53537],{"class":34},[28,64554,257],{"class":211},[28,64556,62674],{"class":64},[28,64558,61103],{"class":211},[28,64560,1540],{"class":51351},[28,64562,55290],{"class":34},[28,64564,257],{"class":211},[28,64566,64567],{"class":64},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[28,64569,55298],{"class":34},[28,64571,257],{"class":211},[28,64573,7729],{"class":64},[28,64575,64470],{"class":211},[28,64577,51662],{"class":51351},[28,64579,51358],{"class":211},[28,64581,64582,64584,64586,64588,64590,64592,64594,64596,64598,64600,64603,64605,64607,64609,64611,64613],{"class":30,"line":16946},[28,64583,55285],{"class":211},[28,64585,51662],{"class":51351},[28,64587,53537],{"class":34},[28,64589,257],{"class":211},[28,64591,62674],{"class":64},[28,64593,61103],{"class":211},[28,64595,1540],{"class":51351},[28,64597,55290],{"class":34},[28,64599,257],{"class":211},[28,64601,64602],{"class":64},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[28,64604,55298],{"class":34},[28,64606,257],{"class":211},[28,64608,7729],{"class":64},[28,64610,64470],{"class":211},[28,64612,51662],{"class":51351},[28,64614,51358],{"class":211},[28,64616,64617,64619,64621],{"class":30,"line":16958},[28,64618,51827],{"class":211},[28,64620,51662],{"class":51351},[28,64622,51358],{"class":211},[28,64624,64625,64627,64629],{"class":30,"line":16963},[28,64626,52468],{"class":211},[28,64628,51662],{"class":51351},[28,64630,51358],{"class":211},[28,64632,64633,64635,64637],{"class":30,"line":16976},[28,64634,52195],{"class":211},[28,64636,51864],{"class":51351},[28,64638,51358],{"class":211},[28,64640,64641],{"class":30,"line":16981},[28,64642,64643],{"class":269},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[28,64645,64646],{"class":30,"line":16986},[28,64647,64648],{"class":269},"    \u002F\u002F 1.1 获取 a 元素 \n",[28,64650,64651,64653,64656,64658,64660,64662,64664,64667],{"class":30,"line":16991},[28,64652,11298],{"class":207},[28,64654,64655],{"class":38}," as",[28,64657,13641],{"class":207},[28,64659,54447],{"class":211},[28,64661,55732],{"class":34},[28,64663,212],{"class":211},[28,64665,64666],{"class":64},"'.tab-nav a'",[28,64668,218],{"class":211},[28,64670,64671],{"class":30,"line":17004},[28,64672,64673],{"class":269},"    \u002F\u002F console.log(as) \n",[28,64675,64676,64678,64680,64682,64684,64686,64688,64690,64692,64695,64697,64699,64701],{"class":30,"line":17009},[28,64677,3278],{"class":207},[28,64679,1736],{"class":211},[28,64681,51898],{"class":207},[28,64683,9515],{"class":211},[28,64685,257],{"class":207},[28,64687,4170],{"class":38},[28,64689,9522],{"class":211},[28,64691,1120],{"class":207},[28,64693,64694],{"class":211}," as.",[28,64696,52019],{"class":38},[28,64698,3291],{"class":211},[28,64700,2369],{"class":207},[28,64702,12519],{"class":211},[28,64704,64705],{"class":30,"line":32684},[28,64706,64707],{"class":269},"      \u002F\u002F console.log(as[i])\n",[28,64709,64710],{"class":30,"line":32690},[28,64711,64712],{"class":269},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[28,64714,64715,64718,64720,64722,64725,64727,64729],{"class":30,"line":32696},[28,64716,64717],{"class":211},"      as[i].",[28,64719,57864],{"class":34},[28,64721,212],{"class":211},[28,64723,64724],{"class":64},"'mouseenter'",[28,64726,12512],{"class":211},[28,64728,54500],{"class":207},[28,64730,54503],{"class":211},[28,64732,64733],{"class":30,"line":32702},[28,64734,64735],{"class":269},"        \u002F\u002F console.log('鼠标经过')\n",[28,64737,64738],{"class":30,"line":32708},[28,64739,64740],{"class":269},"        \u002F\u002F 排他思想  \n",[28,64742,64743],{"class":30,"line":32719},[28,64744,64745],{"class":269},"        \u002F\u002F 干掉别人 移除类active\n",[28,64747,64748,64750,64752,64754,64757,64759,64761,64763,64766],{"class":30,"line":32725},[28,64749,51976],{"class":211},[28,64751,54450],{"class":34},[28,64753,212],{"class":211},[28,64755,64756],{"class":64},"'.tab-nav .active'",[28,64758,57054],{"class":211},[28,64760,57057],{"class":34},[28,64762,212],{"class":211},[28,64764,64765],{"class":64},"'active'",[28,64767,218],{"class":211},[28,64769,64770],{"class":30,"line":32745},[28,64771,64772],{"class":269},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[28,64774,64775,64778,64781,64783,64785,64787],{"class":30,"line":32751},[28,64776,64777],{"class":38},"        this",[28,64779,64780],{"class":211},".classList.",[28,64782,5411],{"class":34},[28,64784,212],{"class":211},[28,64786,64765],{"class":64},[28,64788,218],{"class":211},[28,64790,64791],{"class":30,"line":32762},[28,64792,2477],{"emptyLinePlaceholder":134},[28,64794,64795],{"class":30,"line":32768},[28,64796,64797],{"class":269},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[28,64799,64800],{"class":30,"line":32774},[28,64801,64802],{"class":269},"        \u002F\u002F 干掉别人\n",[28,64804,64805,64807,64809,64811,64814,64816,64818,64820,64822],{"class":30,"line":32780},[28,64806,51976],{"class":211},[28,64808,54450],{"class":34},[28,64810,212],{"class":211},[28,64812,64813],{"class":64},"'.tab-content .active'",[28,64815,57054],{"class":211},[28,64817,57057],{"class":34},[28,64819,212],{"class":211},[28,64821,64765],{"class":64},[28,64823,218],{"class":211},[28,64825,64826],{"class":30,"line":32786},[28,64827,64828],{"class":269},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[28,64830,64831,64833,64835,64837,64840,64842,64844,64846,64848,64850,64852,64854,64856],{"class":30,"line":32792},[28,64832,51976],{"class":211},[28,64834,54450],{"class":34},[28,64836,212],{"class":211},[28,64838,64839],{"class":64},"`.tab-content .item:nth-child(${",[28,64841,651],{"class":211},[28,64843,45617],{"class":207},[28,64845,25189],{"class":38},[28,64847,57083],{"class":64},[28,64849,57054],{"class":211},[28,64851,5411],{"class":34},[28,64853,212],{"class":211},[28,64855,64765],{"class":64},[28,64857,218],{"class":211},[28,64859,64860],{"class":30,"line":32798},[28,64861,2477],{"emptyLinePlaceholder":134},[28,64863,64864],{"class":30,"line":32804},[28,64865,64866],{"class":211},"      })\n",[28,64868,64869],{"class":30,"line":32824},[28,64870,2264],{"class":211},[28,64872,64873,64875,64877],{"class":30,"line":32830},[28,64874,52468],{"class":211},[28,64876,51864],{"class":51351},[28,64878,51358],{"class":211},[28,64880,64881,64883,64885],{"class":30,"line":32846},[28,64882,51836],{"class":211},[28,64884,51851],{"class":51351},[28,64886,51358],{"class":211},[28,64888,64889],{"class":30,"line":32852},[28,64890,2477],{"emptyLinePlaceholder":134},[28,64892,64893,64895,64897],{"class":30,"line":32866},[28,64894,51836],{"class":211},[28,64896,50686],{"class":51351},[28,64898,51358],{"class":211},[14,64900,64901],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64903,64904],{},"在监听事件中，this指向的就是他的调用者",[14,64906,64907],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64909,53771],{},[14,64911,64912],{},"(function () {",[14,64914,64915],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64917,64918],{},"list.addEventListener('click', function (e) {",[14,64920,64921],{},"if (e.target.tagName === 'A') {",[14,64923,64924],{},"\u002F\u002F 排他思想",[14,64926,64927],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64929,64930],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64932,64933],{},"\u002F\u002F console.log(old);",[14,64935,64936],{},"\u002F\u002F 判断",[14,64938,64939],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64941,64942],{},"if (old) old.classList.remove('active')",[14,64944,64945],{},"e.target.classList.add('active')",[14,64947,1156],{},[14,64949,52515],{},[14,64951,64952],{},"})();",[177,64954,64956],{"id":64955},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[18,64958,64960],{"className":50684,"code":64959,"language":50686,"meta":23,"style":23},"\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",[25,64961,64962,64972,64976,64984,64988,65002,65016,65028,65036,65042,65052,65062,65066,65070,65077,65089,65100,65117,65130,65144,65154,65158,65162,65169,65180,65198,65208,65220,65224,65228,65235,65252,65263,65275,65279,65283,65290,65302,65306,65314,65322,65326,65334,65342,65350,65365,65409,65417,65430,65443,65456,65464,65472,65480,65508,65516,65528,65541,65554,65562,65570,65578,65604,65612,65625,65637,65650,65658,65666,65674,65700,65708,65721,65733,65746,65754,65762,65770,65775,65795,65800,65820,65825,65842,65847,65855,65860,65889,65902,65906,65910,65915,65919,65947,65952,65969,65974,65979,65984,65989,66015,66019,66023,66031,66039,66043],{"__ignoreMap":23},[28,64963,64964,64966,64968,64970],{"class":30,"line":31},[28,64965,51348],{"class":211},[28,64967,51352],{"class":51351},[28,64969,51355],{"class":34},[28,64971,51358],{"class":211},[28,64973,64974],{"class":30,"line":42},[28,64975,2477],{"emptyLinePlaceholder":134},[28,64977,64978,64980,64982],{"class":30,"line":50},[28,64979,1120],{"class":211},[28,64981,50686],{"class":51351},[28,64983,51358],{"class":211},[28,64985,64986],{"class":30,"line":58},[28,64987,2477],{"emptyLinePlaceholder":134},[28,64989,64990,64992,64994,64996,64998,65000],{"class":30,"line":70},[28,64991,1120],{"class":211},[28,64993,51385],{"class":51351},[28,64995,51367],{"class":34},[28,64997,257],{"class":211},[28,64999,51372],{"class":64},[28,65001,51358],{"class":211},[28,65003,65004,65006,65008,65010,65012,65014],{"class":30,"line":78},[28,65005,52195],{"class":211},[28,65007,51395],{"class":51351},[28,65009,51398],{"class":34},[28,65011,257],{"class":211},[28,65013,51403],{"class":64},[28,65015,51358],{"class":211},[28,65017,65018,65020,65022,65024,65026],{"class":30,"line":86},[28,65019,52195],{"class":211},[28,65021,51458],{"class":51351},[28,65023,55365],{"class":211},[28,65025,51458],{"class":51351},[28,65027,51358],{"class":211},[28,65029,65030,65032,65034],{"class":30,"line":97},[28,65031,52195],{"class":211},[28,65033,126],{"class":51351},[28,65035,51358],{"class":211},[28,65037,65038,65040],{"class":30,"line":108},[28,65039,6480],{"class":51351},[28,65041,15649],{"class":211},[28,65043,65044,65046,65048,65050],{"class":30,"line":1407},[28,65045,54757],{"class":38},[28,65047,51488],{"class":211},[28,65049,401],{"class":38},[28,65051,1370],{"class":211},[28,65053,65054,65056,65058,65060],{"class":30,"line":1690},[28,65055,54746],{"class":38},[28,65057,51488],{"class":211},[28,65059,401],{"class":38},[28,65061,1370],{"class":211},[28,65063,65064],{"class":30,"line":1695},[28,65065,2264],{"class":211},[28,65067,65068],{"class":30,"line":1701},[28,65069,2477],{"emptyLinePlaceholder":134},[28,65071,65072,65075],{"class":30,"line":1706},[28,65073,65074],{"class":51351},"    table",[28,65076,15649],{"class":211},[28,65078,65079,65082,65084,65087],{"class":30,"line":1720},[28,65080,65081],{"class":38},"      border-collapse",[28,65083,51488],{"class":211},[28,65085,65086],{"class":38},"collapse",[28,65088,1370],{"class":211},[28,65090,65091,65094,65096,65098],{"class":30,"line":1725},[28,65092,65093],{"class":38},"      border-spacing",[28,65095,51488],{"class":211},[28,65097,401],{"class":38},[28,65099,1370],{"class":211},[28,65101,65102,65104,65106,65108,65110,65112,65115],{"class":30,"line":1731},[28,65103,62028],{"class":38},[28,65105,51488],{"class":211},[28,65107,427],{"class":38},[28,65109,51543],{"class":207},[28,65111,51572],{"class":38},[28,65113,65114],{"class":38}," #c0c0c0",[28,65116,1370],{"class":211},[28,65118,65119,65121,65123,65126,65128],{"class":30,"line":1752},[28,65120,54822],{"class":38},[28,65122,51488],{"class":211},[28,65124,65125],{"class":38},"500",[28,65127,51543],{"class":207},[28,65129,1370],{"class":211},[28,65131,65132,65134,65136,65138,65140,65142],{"class":30,"line":1757},[28,65133,54757],{"class":38},[28,65135,51488],{"class":211},[28,65137,521],{"class":38},[28,65139,51543],{"class":207},[28,65141,51607],{"class":38},[28,65143,1370],{"class":211},[28,65145,65146,65148,65150,65152],{"class":30,"line":1771},[28,65147,57337],{"class":38},[28,65149,51488],{"class":211},[28,65151,51643],{"class":38},[28,65153,1370],{"class":211},[28,65155,65156],{"class":30,"line":1776},[28,65157,2264],{"class":211},[28,65159,65160],{"class":30,"line":1805},[28,65161,2477],{"emptyLinePlaceholder":134},[28,65163,65164,65167],{"class":30,"line":1810},[28,65165,65166],{"class":51351},"    th",[28,65168,15649],{"class":211},[28,65170,65171,65173,65175,65178],{"class":30,"line":1827},[28,65172,54935],{"class":38},[28,65174,51488],{"class":211},[28,65176,65177],{"class":38},"#09c",[28,65179,1370],{"class":211},[28,65181,65182,65185,65187,65189,65191,65193,65196],{"class":30,"line":1832},[28,65183,65184],{"class":38},"      font",[28,65186,51488],{"class":211},[28,65188,62390],{"class":38},[28,65190,64124],{"class":38},[28,65192,51543],{"class":207},[28,65194,65195],{"class":64}," \"微软雅黑\"",[28,65197,1370],{"class":211},[28,65199,65200,65202,65204,65206],{"class":30,"line":1837},[28,65201,57467],{"class":38},[28,65203,51488],{"class":211},[28,65205,60893],{"class":38},[28,65207,1370],{"class":211},[28,65209,65210,65212,65214,65216,65218],{"class":30,"line":1842},[28,65211,54836],{"class":38},[28,65213,51488],{"class":211},[28,65215,1010],{"class":38},[28,65217,51543],{"class":207},[28,65219,1370],{"class":211},[28,65221,65222],{"class":30,"line":1856},[28,65223,2264],{"class":211},[28,65225,65226],{"class":30,"line":1861},[28,65227,2477],{"emptyLinePlaceholder":134},[28,65229,65230,65233],{"class":30,"line":2654},[28,65231,65232],{"class":51351},"    td",[28,65234,15649],{"class":211},[28,65236,65237,65239,65241,65243,65245,65247,65250],{"class":30,"line":2668},[28,65238,62028],{"class":38},[28,65240,51488],{"class":211},[28,65242,427],{"class":38},[28,65244,51543],{"class":207},[28,65246,51572],{"class":38},[28,65248,65249],{"class":38}," #d0d0d0",[28,65251,1370],{"class":211},[28,65253,65254,65256,65258,65261],{"class":30,"line":2676},[28,65255,57467],{"class":38},[28,65257,51488],{"class":211},[28,65259,65260],{"class":38},"#404060",[28,65262,1370],{"class":211},[28,65264,65265,65267,65269,65271,65273],{"class":30,"line":2681},[28,65266,54746],{"class":38},[28,65268,51488],{"class":211},[28,65270,656],{"class":38},[28,65272,51543],{"class":207},[28,65274,1370],{"class":211},[28,65276,65277],{"class":30,"line":2687},[28,65278,2264],{"class":211},[28,65280,65281],{"class":30,"line":2693},[28,65282,2477],{"emptyLinePlaceholder":134},[28,65284,65285,65288],{"class":30,"line":2698},[28,65286,65287],{"class":34},"    .allCheck",[28,65289,15649],{"class":211},[28,65291,65292,65294,65296,65298,65300],{"class":30,"line":8025},[28,65293,54822],{"class":38},[28,65295,51488],{"class":211},[28,65297,822],{"class":38},[28,65299,51543],{"class":207},[28,65301,1370],{"class":211},[28,65303,65304],{"class":30,"line":8049},[28,65305,2264],{"class":211},[28,65307,65308,65310,65312],{"class":30,"line":8054},[28,65309,52468],{"class":211},[28,65311,126],{"class":51351},[28,65313,51358],{"class":211},[28,65315,65316,65318,65320],{"class":30,"line":8060},[28,65317,51836],{"class":211},[28,65319,51385],{"class":51351},[28,65321,51358],{"class":211},[28,65323,65324],{"class":30,"line":8087},[28,65325,2477],{"emptyLinePlaceholder":134},[28,65327,65328,65330,65332],{"class":30,"line":8092},[28,65329,1120],{"class":211},[28,65331,51851],{"class":51351},[28,65333,51358],{"class":211},[28,65335,65336,65338,65340],{"class":30,"line":8098},[28,65337,52195],{"class":211},[28,65339,347],{"class":51351},[28,65341,51358],{"class":211},[28,65343,65344,65346,65348],{"class":30,"line":8110},[28,65345,51392],{"class":211},[28,65347,353],{"class":51351},[28,65349,51358],{"class":211},[28,65351,65352,65354,65356,65358,65360,65363],{"class":30,"line":8122},[28,65353,55285],{"class":211},[28,65355,356],{"class":51351},[28,65357,53537],{"class":34},[28,65359,257],{"class":211},[28,65361,65362],{"class":64},"\"allCheck\"",[28,65364,51358],{"class":211},[28,65366,65367,65369,65371,65373,65375,65377,65379,65381,65383,65385,65387,65390,65393,65395,65397,65399,65402,65405,65407],{"class":30,"line":8134},[28,65368,55353],{"class":211},[28,65370,53872],{"class":51351},[28,65372,53875],{"class":34},[28,65374,257],{"class":211},[28,65376,53880],{"class":64},[28,65378,14997],{"class":34},[28,65380,257],{"class":211},[28,65382,7729],{"class":64},[28,65384,15036],{"class":34},[28,65386,257],{"class":211},[28,65388,65389],{"class":64},"\"checkAll\"",[28,65391,65392],{"class":211},"> \u003C",[28,65394,28],{"class":51351},[28,65396,53537],{"class":34},[28,65398,257],{"class":211},[28,65400,65401],{"class":64},"\"all\"",[28,65403,65404],{"class":211},">全选\u003C\u002F",[28,65406,28],{"class":51351},[28,65408,51358],{"class":211},[28,65410,65411,65413,65415],{"class":30,"line":9793},[28,65412,55458],{"class":211},[28,65414,356],{"class":51351},[28,65416,51358],{"class":211},[28,65418,65419,65421,65423,65426,65428],{"class":30,"line":9818},[28,65420,55285],{"class":211},[28,65422,356],{"class":51351},[28,65424,65425],{"class":211},">商品\u003C\u002F",[28,65427,356],{"class":51351},[28,65429,51358],{"class":211},[28,65431,65432,65434,65436,65439,65441],{"class":30,"line":9841},[28,65433,55285],{"class":211},[28,65435,356],{"class":51351},[28,65437,65438],{"class":211},">商家\u003C\u002F",[28,65440,356],{"class":51351},[28,65442,51358],{"class":211},[28,65444,65445,65447,65449,65452,65454],{"class":30,"line":9865},[28,65446,55285],{"class":211},[28,65448,356],{"class":51351},[28,65450,65451],{"class":211},">价格\u003C\u002F",[28,65453,356],{"class":51351},[28,65455,51358],{"class":211},[28,65457,65458,65460,65462],{"class":30,"line":9870},[28,65459,51827],{"class":211},[28,65461,353],{"class":51351},[28,65463,51358],{"class":211},[28,65465,65466,65468,65470],{"class":30,"line":9875},[28,65467,51392],{"class":211},[28,65469,353],{"class":51351},[28,65471,51358],{"class":211},[28,65473,65474,65476,65478],{"class":30,"line":9880},[28,65475,55285],{"class":211},[28,65477,399],{"class":51351},[28,65479,51358],{"class":211},[28,65481,65482,65484,65486,65488,65490,65492,65494,65496,65499,65501,65503,65506],{"class":30,"line":9889},[28,65483,55353],{"class":211},[28,65485,53872],{"class":51351},[28,65487,53875],{"class":34},[28,65489,257],{"class":211},[28,65491,53880],{"class":64},[28,65493,14997],{"class":34},[28,65495,257],{"class":211},[28,65497,65498],{"class":64},"\"check\"",[28,65500,53537],{"class":34},[28,65502,257],{"class":211},[28,65504,65505],{"class":64},"\"ck\"",[28,65507,51358],{"class":211},[28,65509,65510,65512,65514],{"class":30,"line":9894},[28,65511,55458],{"class":211},[28,65513,399],{"class":51351},[28,65515,51358],{"class":211},[28,65517,65518,65520,65522,65524,65526],{"class":30,"line":9900},[28,65519,55285],{"class":211},[28,65521,399],{"class":51351},[28,65523,61224],{"class":211},[28,65525,399],{"class":51351},[28,65527,51358],{"class":211},[28,65529,65530,65532,65534,65537,65539],{"class":30,"line":9921},[28,65531,55285],{"class":211},[28,65533,399],{"class":51351},[28,65535,65536],{"class":211},">小米\u003C\u002F",[28,65538,399],{"class":51351},[28,65540,51358],{"class":211},[28,65542,65543,65545,65547,65550,65552],{"class":30,"line":9927},[28,65544,55285],{"class":211},[28,65546,399],{"class":51351},[28,65548,65549],{"class":211},">￥1999\u003C\u002F",[28,65551,399],{"class":51351},[28,65553,51358],{"class":211},[28,65555,65556,65558,65560],{"class":30,"line":9941},[28,65557,51827],{"class":211},[28,65559,353],{"class":51351},[28,65561,51358],{"class":211},[28,65563,65564,65566,65568],{"class":30,"line":9947},[28,65565,51392],{"class":211},[28,65567,353],{"class":51351},[28,65569,51358],{"class":211},[28,65571,65572,65574,65576],{"class":30,"line":9974},[28,65573,55285],{"class":211},[28,65575,399],{"class":51351},[28,65577,51358],{"class":211},[28,65579,65580,65582,65584,65586,65588,65590,65592,65594,65596,65598,65600,65602],{"class":30,"line":9983},[28,65581,55353],{"class":211},[28,65583,53872],{"class":51351},[28,65585,53875],{"class":34},[28,65587,257],{"class":211},[28,65589,53880],{"class":64},[28,65591,14997],{"class":34},[28,65593,257],{"class":211},[28,65595,65498],{"class":64},[28,65597,53537],{"class":34},[28,65599,257],{"class":211},[28,65601,65505],{"class":64},[28,65603,51358],{"class":211},[28,65605,65606,65608,65610],{"class":30,"line":9989},[28,65607,55458],{"class":211},[28,65609,399],{"class":51351},[28,65611,51358],{"class":211},[28,65613,65614,65616,65618,65621,65623],{"class":30,"line":9997},[28,65615,55285],{"class":211},[28,65617,399],{"class":51351},[28,65619,65620],{"class":211},">小米净水器\u003C\u002F",[28,65622,399],{"class":51351},[28,65624,51358],{"class":211},[28,65626,65627,65629,65631,65633,65635],{"class":30,"line":10002},[28,65628,55285],{"class":211},[28,65630,399],{"class":51351},[28,65632,65536],{"class":211},[28,65634,399],{"class":51351},[28,65636,51358],{"class":211},[28,65638,65639,65641,65643,65646,65648],{"class":30,"line":16681},[28,65640,55285],{"class":211},[28,65642,399],{"class":51351},[28,65644,65645],{"class":211},">￥4999\u003C\u002F",[28,65647,399],{"class":51351},[28,65649,51358],{"class":211},[28,65651,65652,65654,65656],{"class":30,"line":16687},[28,65653,51827],{"class":211},[28,65655,353],{"class":51351},[28,65657,51358],{"class":211},[28,65659,65660,65662,65664],{"class":30,"line":16710},[28,65661,51392],{"class":211},[28,65663,353],{"class":51351},[28,65665,51358],{"class":211},[28,65667,65668,65670,65672],{"class":30,"line":16716},[28,65669,55285],{"class":211},[28,65671,399],{"class":51351},[28,65673,51358],{"class":211},[28,65675,65676,65678,65680,65682,65684,65686,65688,65690,65692,65694,65696,65698],{"class":30,"line":16739},[28,65677,55353],{"class":211},[28,65679,53872],{"class":51351},[28,65681,53875],{"class":34},[28,65683,257],{"class":211},[28,65685,53880],{"class":64},[28,65687,14997],{"class":34},[28,65689,257],{"class":211},[28,65691,65498],{"class":64},[28,65693,53537],{"class":34},[28,65695,257],{"class":211},[28,65697,65505],{"class":64},[28,65699,51358],{"class":211},[28,65701,65702,65704,65706],{"class":30,"line":16753},[28,65703,55458],{"class":211},[28,65705,399],{"class":51351},[28,65707,51358],{"class":211},[28,65709,65710,65712,65714,65717,65719],{"class":30,"line":16773},[28,65711,55285],{"class":211},[28,65713,399],{"class":51351},[28,65715,65716],{"class":211},">小米电视\u003C\u002F",[28,65718,399],{"class":51351},[28,65720,51358],{"class":211},[28,65722,65723,65725,65727,65729,65731],{"class":30,"line":16779},[28,65724,55285],{"class":211},[28,65726,399],{"class":51351},[28,65728,65536],{"class":211},[28,65730,399],{"class":51351},[28,65732,51358],{"class":211},[28,65734,65735,65737,65739,65742,65744],{"class":30,"line":16790},[28,65736,55285],{"class":211},[28,65738,399],{"class":51351},[28,65740,65741],{"class":211},">￥5999\u003C\u002F",[28,65743,399],{"class":51351},[28,65745,51358],{"class":211},[28,65747,65748,65750,65752],{"class":30,"line":16813},[28,65749,51827],{"class":211},[28,65751,353],{"class":51351},[28,65753,51358],{"class":211},[28,65755,65756,65758,65760],{"class":30,"line":16835},[28,65757,52468],{"class":211},[28,65759,347],{"class":51351},[28,65761,51358],{"class":211},[28,65763,65764,65766,65768],{"class":30,"line":16840},[28,65765,52195],{"class":211},[28,65767,51864],{"class":51351},[28,65769,51358],{"class":211},[28,65771,65772],{"class":30,"line":16846},[28,65773,65774],{"class":269},"    \u002F\u002F 1. 获取大复选框\n",[28,65776,65777,65779,65782,65784,65786,65788,65790,65793],{"class":30,"line":16860},[28,65778,11298],{"class":207},[28,65780,65781],{"class":38}," checkAll",[28,65783,13641],{"class":207},[28,65785,54447],{"class":211},[28,65787,54450],{"class":34},[28,65789,212],{"class":211},[28,65791,65792],{"class":64},"'#checkAll'",[28,65794,218],{"class":211},[28,65796,65797],{"class":30,"line":16873},[28,65798,65799],{"class":269},"    \u002F\u002F 2. 获取所有的小复选框\n",[28,65801,65802,65804,65807,65809,65811,65813,65815,65818],{"class":30,"line":16878},[28,65803,11298],{"class":207},[28,65805,65806],{"class":38}," cks",[28,65808,13641],{"class":207},[28,65810,54447],{"class":211},[28,65812,55732],{"class":34},[28,65814,212],{"class":211},[28,65816,65817],{"class":64},"'.ck'",[28,65819,218],{"class":211},[28,65821,65822],{"class":30,"line":16892},[28,65823,65824],{"class":269},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[28,65826,65827,65830,65832,65834,65836,65838,65840],{"class":30,"line":16897},[28,65828,65829],{"class":211},"    checkAll.",[28,65831,57864],{"class":34},[28,65833,212],{"class":211},[28,65835,57869],{"class":64},[28,65837,12512],{"class":211},[28,65839,54500],{"class":207},[28,65841,54503],{"class":211},[28,65843,65844],{"class":30,"line":16903},[28,65845,65846],{"class":269},"      \u002F\u002F 得到当前大复选框的选中状态\n",[28,65848,65849,65852],{"class":30,"line":16908},[28,65850,65851],{"class":269},"      \u002F\u002F console.log(checkAll.checked)",[28,65853,65854],{"class":269},"  \u002F\u002F 得到 是 true 或者是 false\n",[28,65856,65857],{"class":30,"line":16922},[28,65858,65859],{"class":269},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[28,65861,65862,65864,65866,65868,65870,65872,65874,65876,65878,65881,65883,65885,65887],{"class":30,"line":16927},[28,65863,52335],{"class":207},[28,65865,1736],{"class":211},[28,65867,51898],{"class":207},[28,65869,9515],{"class":211},[28,65871,257],{"class":207},[28,65873,4170],{"class":38},[28,65875,9522],{"class":211},[28,65877,1120],{"class":207},[28,65879,65880],{"class":211}," cks.",[28,65882,52019],{"class":38},[28,65884,3291],{"class":211},[28,65886,2369],{"class":207},[28,65888,12519],{"class":211},[28,65890,65891,65894,65896,65899],{"class":30,"line":16932},[28,65892,65893],{"class":211},"        cks[i].checked ",[28,65895,257],{"class":207},[28,65897,65898],{"class":38}," this",[28,65900,65901],{"class":211},".checked\n",[28,65903,65904],{"class":30,"line":16946},[28,65905,52449],{"class":211},[28,65907,65908],{"class":30,"line":16958},[28,65909,33512],{"class":211},[28,65911,65912],{"class":30,"line":16963},[28,65913,65914],{"class":269},"    \u002F\u002F 5. 小复选框控制大复选框\n",[28,65916,65917],{"class":30,"line":16976},[28,65918,2477],{"emptyLinePlaceholder":134},[28,65920,65921,65923,65925,65927,65929,65931,65933,65935,65937,65939,65941,65943,65945],{"class":30,"line":16981},[28,65922,3278],{"class":207},[28,65924,1736],{"class":211},[28,65926,51898],{"class":207},[28,65928,9515],{"class":211},[28,65930,257],{"class":207},[28,65932,4170],{"class":38},[28,65934,9522],{"class":211},[28,65936,1120],{"class":207},[28,65938,65880],{"class":211},[28,65940,52019],{"class":38},[28,65942,3291],{"class":211},[28,65944,2369],{"class":207},[28,65946,12519],{"class":211},[28,65948,65949],{"class":30,"line":16986},[28,65950,65951],{"class":269},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[28,65953,65954,65957,65959,65961,65963,65965,65967],{"class":30,"line":16991},[28,65955,65956],{"class":211},"      cks[i].",[28,65958,57864],{"class":34},[28,65960,212],{"class":211},[28,65962,57869],{"class":64},[28,65964,12512],{"class":211},[28,65966,54500],{"class":207},[28,65968,54503],{"class":211},[28,65970,65971],{"class":30,"line":17004},[28,65972,65973],{"class":269},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[28,65975,65976],{"class":30,"line":17009},[28,65977,65978],{"class":269},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[28,65980,65981],{"class":30,"line":32684},[28,65982,65983],{"class":269},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[28,65985,65986],{"class":30,"line":32690},[28,65987,65988],{"class":269},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[28,65990,65991,65994,65996,65998,66000,66002,66005,66007,66009,66011,66013],{"class":30,"line":32696},[28,65992,65993],{"class":211},"        checkAll.checked ",[28,65995,257],{"class":207},[28,65997,54447],{"class":211},[28,65999,55732],{"class":34},[28,66001,212],{"class":211},[28,66003,66004],{"class":64},"'.ck:checked'",[28,66006,30877],{"class":211},[28,66008,52019],{"class":38},[28,66010,57957],{"class":207},[28,66012,65880],{"class":211},[28,66014,55882],{"class":38},[28,66016,66017],{"class":30,"line":32702},[28,66018,64866],{"class":211},[28,66020,66021],{"class":30,"line":32708},[28,66022,2264],{"class":211},[28,66024,66025,66027,66029],{"class":30,"line":32719},[28,66026,52468],{"class":211},[28,66028,51864],{"class":51351},[28,66030,51358],{"class":211},[28,66032,66033,66035,66037],{"class":30,"line":32725},[28,66034,51836],{"class":211},[28,66036,51851],{"class":51351},[28,66038,51358],{"class":211},[28,66040,66041],{"class":30,"line":32745},[28,66042,2477],{"emptyLinePlaceholder":134},[28,66044,66045,66047,66049],{"class":30,"line":32751},[28,66046,51836],{"class":211},[28,66048,50686],{"class":51351},[28,66050,51358],{"class":211},[14,66052,66053],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66055,66056],{},"用好之间比较得到的布尔值！！！",[14,66058,66059,66060,66063,66064,1736,66067,794,66069,66072],{},"在 JS 里访问的时候，",[25,66061,66062],{},"checkbox.checked"," 是一个 ",[359,66065,66066],{},"布尔值",[25,66068,1440],{},[25,66070,66071],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66074,66075,66076,66079,66080],{},"HTML 的 ",[25,66077,66078],{},"checked=\"checked\""," 只是 ",[359,66081,66082,66083,66086],{},"初始值；JS 的 ",[25,66084,66085],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66088,66089],{},"：checked是一个伪类选择器",[14,66091,66092],{},[1540,66093],{"alt":23,"src":66094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66096,66097,66100],{},[66098,66099],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66102,66103],{},[1540,66104],{"alt":23,"src":66105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[149,66107,66109],{"id":66108},"_33-dom事件进阶","3.3 DOM事件进阶",[177,66111,66113],{"id":66112},"_331-事件流","3.3.1 事件流",[14,66115,66116],{},[1540,66117],{"alt":23,"src":66118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22075,66120,66122],{"id":66121},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66124,66125],{},[1540,66126],{"alt":23,"src":66127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[18,66129,66131],{"className":50684,"code":66130,"language":50686,"meta":23,"style":23},"\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",[25,66132,66133,66143,66157,66161,66169,66183,66203,66215,66223,66230,66242,66254,66264,66268,66272,66279,66291,66303,66313,66317,66325,66333,66337,66345,66360,66379,66387,66395,66415,66435,66451,66462,66470,66487,66498,66506,66523,66534,66542,66550,66558,66562],{"__ignoreMap":23},[28,66134,66135,66137,66139,66141],{"class":30,"line":31},[28,66136,51348],{"class":211},[28,66138,51352],{"class":51351},[28,66140,51355],{"class":34},[28,66142,51358],{"class":211},[28,66144,66145,66147,66149,66151,66153,66155],{"class":30,"line":42},[28,66146,1120],{"class":211},[28,66148,50686],{"class":51351},[28,66150,51367],{"class":34},[28,66152,257],{"class":211},[28,66154,51372],{"class":64},[28,66156,51358],{"class":211},[28,66158,66159],{"class":30,"line":50},[28,66160,2477],{"emptyLinePlaceholder":134},[28,66162,66163,66165,66167],{"class":30,"line":58},[28,66164,1120],{"class":211},[28,66166,51385],{"class":51351},[28,66168,51358],{"class":211},[28,66170,66171,66173,66175,66177,66179,66181],{"class":30,"line":70},[28,66172,52195],{"class":211},[28,66174,51395],{"class":51351},[28,66176,51398],{"class":34},[28,66178,257],{"class":211},[28,66180,51403],{"class":64},[28,66182,51358],{"class":211},[28,66184,66185,66187,66189,66191,66193,66195,66197,66199,66201],{"class":30,"line":78},[28,66186,52195],{"class":211},[28,66188,51395],{"class":51351},[28,66190,14997],{"class":34},[28,66192,257],{"class":211},[28,66194,51442],{"class":64},[28,66196,51422],{"class":34},[28,66198,257],{"class":211},[28,66200,51449],{"class":64},[28,66202,51358],{"class":211},[28,66204,66205,66207,66209,66211,66213],{"class":30,"line":86},[28,66206,52195],{"class":211},[28,66208,51458],{"class":51351},[28,66210,51461],{"class":211},[28,66212,51458],{"class":51351},[28,66214,51358],{"class":211},[28,66216,66217,66219,66221],{"class":30,"line":97},[28,66218,52195],{"class":211},[28,66220,126],{"class":51351},[28,66222,51358],{"class":211},[28,66224,66225,66228],{"class":30,"line":108},[28,66226,66227],{"class":34},"    .father",[28,66229,15649],{"class":211},[28,66231,66232,66234,66236,66238,66240],{"class":30,"line":1407},[28,66233,54822],{"class":38},[28,66235,51488],{"class":211},[28,66237,65125],{"class":38},[28,66239,51543],{"class":207},[28,66241,1370],{"class":211},[28,66243,66244,66246,66248,66250,66252],{"class":30,"line":1690},[28,66245,54836],{"class":38},[28,66247,51488],{"class":211},[28,66249,65125],{"class":38},[28,66251,51543],{"class":207},[28,66253,1370],{"class":211},[28,66255,66256,66258,66260,66262],{"class":30,"line":1695},[28,66257,54935],{"class":38},[28,66259,51488],{"class":211},[28,66261,51696],{"class":38},[28,66263,1370],{"class":211},[28,66265,66266],{"class":30,"line":1701},[28,66267,2264],{"class":211},[28,66269,66270],{"class":30,"line":1706},[28,66271,2477],{"emptyLinePlaceholder":134},[28,66273,66274,66277],{"class":30,"line":1720},[28,66275,66276],{"class":34},"    .son",[28,66278,15649],{"class":211},[28,66280,66281,66283,66285,66287,66289],{"class":30,"line":1725},[28,66282,54822],{"class":38},[28,66284,51488],{"class":211},[28,66286,1800],{"class":38},[28,66288,51543],{"class":207},[28,66290,1370],{"class":211},[28,66292,66293,66295,66297,66299,66301],{"class":30,"line":1731},[28,66294,54836],{"class":38},[28,66296,51488],{"class":211},[28,66298,1800],{"class":38},[28,66300,51543],{"class":207},[28,66302,1370],{"class":211},[28,66304,66305,66307,66309,66311],{"class":30,"line":1752},[28,66306,54935],{"class":38},[28,66308,51488],{"class":211},[28,66310,54940],{"class":38},[28,66312,1370],{"class":211},[28,66314,66315],{"class":30,"line":1757},[28,66316,2264],{"class":211},[28,66318,66319,66321,66323],{"class":30,"line":1771},[28,66320,52468],{"class":211},[28,66322,126],{"class":51351},[28,66324,51358],{"class":211},[28,66326,66327,66329,66331],{"class":30,"line":1776},[28,66328,51836],{"class":211},[28,66330,51385],{"class":51351},[28,66332,51358],{"class":211},[28,66334,66335],{"class":30,"line":1805},[28,66336,2477],{"emptyLinePlaceholder":134},[28,66338,66339,66341,66343],{"class":30,"line":1810},[28,66340,1120],{"class":211},[28,66342,51851],{"class":51351},[28,66344,51358],{"class":211},[28,66346,66347,66349,66351,66353,66355,66358],{"class":30,"line":1827},[28,66348,52195],{"class":211},[28,66350,51662],{"class":51351},[28,66352,53537],{"class":34},[28,66354,257],{"class":211},[28,66356,66357],{"class":64},"\"father\"",[28,66359,51358],{"class":211},[28,66361,66362,66364,66366,66368,66370,66373,66375,66377],{"class":30,"line":1832},[28,66363,51392],{"class":211},[28,66365,51662],{"class":51351},[28,66367,53537],{"class":34},[28,66369,257],{"class":211},[28,66371,66372],{"class":64},"\"son\"",[28,66374,55365],{"class":211},[28,66376,51662],{"class":51351},[28,66378,51358],{"class":211},[28,66380,66381,66383,66385],{"class":30,"line":1837},[28,66382,52468],{"class":211},[28,66384,51662],{"class":51351},[28,66386,51358],{"class":211},[28,66388,66389,66391,66393],{"class":30,"line":1842},[28,66390,52195],{"class":211},[28,66392,51864],{"class":51351},[28,66394,51358],{"class":211},[28,66396,66397,66399,66402,66404,66406,66408,66410,66413],{"class":30,"line":1856},[28,66398,11298],{"class":207},[28,66400,66401],{"class":38}," fa",[28,66403,13641],{"class":207},[28,66405,54447],{"class":211},[28,66407,54450],{"class":34},[28,66409,212],{"class":211},[28,66411,66412],{"class":64},"'.father'",[28,66414,218],{"class":211},[28,66416,66417,66419,66422,66424,66426,66428,66430,66433],{"class":30,"line":1861},[28,66418,11298],{"class":207},[28,66420,66421],{"class":38}," son",[28,66423,13641],{"class":207},[28,66425,54447],{"class":211},[28,66427,54450],{"class":34},[28,66429,212],{"class":211},[28,66431,66432],{"class":64},"'.son'",[28,66434,218],{"class":211},[28,66436,66437,66439,66441,66443,66445,66447,66449],{"class":30,"line":2654},[28,66438,52458],{"class":211},[28,66440,57864],{"class":34},[28,66442,212],{"class":211},[28,66444,57869],{"class":64},[28,66446,12512],{"class":211},[28,66448,54500],{"class":207},[28,66450,54503],{"class":211},[28,66452,66453,66455,66457,66460],{"class":30,"line":2668},[28,66454,58976],{"class":34},[28,66456,212],{"class":211},[28,66458,66459],{"class":64},"'woshiu1'",[28,66461,218],{"class":211},[28,66463,66464,66466,66468],{"class":30,"line":2676},[28,66465,54586],{"class":211},[28,66467,1440],{"class":38},[28,66469,218],{"class":211},[28,66471,66472,66475,66477,66479,66481,66483,66485],{"class":30,"line":2681},[28,66473,66474],{"class":211},"    fa.",[28,66476,57864],{"class":34},[28,66478,212],{"class":211},[28,66480,57869],{"class":64},[28,66482,12512],{"class":211},[28,66484,54500],{"class":207},[28,66486,54503],{"class":211},[28,66488,66489,66491,66493,66496],{"class":30,"line":2687},[28,66490,58976],{"class":34},[28,66492,212],{"class":211},[28,66494,66495],{"class":64},"'1'",[28,66497,218],{"class":211},[28,66499,66500,66502,66504],{"class":30,"line":2693},[28,66501,54586],{"class":211},[28,66503,1440],{"class":38},[28,66505,218],{"class":211},[28,66507,66508,66511,66513,66515,66517,66519,66521],{"class":30,"line":2698},[28,66509,66510],{"class":211},"    son.",[28,66512,57864],{"class":34},[28,66514,212],{"class":211},[28,66516,57869],{"class":64},[28,66518,12512],{"class":211},[28,66520,54500],{"class":207},[28,66522,54503],{"class":211},[28,66524,66525,66527,66529,66532],{"class":30,"line":8025},[28,66526,58976],{"class":34},[28,66528,212],{"class":211},[28,66530,66531],{"class":64},"'2'",[28,66533,218],{"class":211},[28,66535,66536,66538,66540],{"class":30,"line":8049},[28,66537,54586],{"class":211},[28,66539,1440],{"class":38},[28,66541,218],{"class":211},[28,66543,66544,66546,66548],{"class":30,"line":8054},[28,66545,52468],{"class":211},[28,66547,51864],{"class":51351},[28,66549,51358],{"class":211},[28,66551,66552,66554,66556],{"class":30,"line":8060},[28,66553,51836],{"class":211},[28,66555,51851],{"class":51351},[28,66557,51358],{"class":211},[28,66559,66560],{"class":30,"line":8087},[28,66561,2477],{"emptyLinePlaceholder":134},[28,66563,66564,66566,66568],{"class":30,"line":8092},[28,66565,51836],{"class":211},[28,66567,50686],{"class":51351},[28,66569,51358],{"class":211},[14,66571,66572],{},[1540,66573],{"alt":23,"src":66574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66576,66577],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22075,66579,66581],{"id":66580},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66583,66584],{},[1540,66585],{"alt":23,"src":66586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66588,66589],{},"反着来",[14,66591,66592],{},"注意是同名事件，比如都是‘click’",[22075,66594,66596],{"id":66595},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66598,66599],{},[1540,66600],{"alt":23,"src":66601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22075,66603,66605],{"id":66604},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66607,66608],{},[1540,66609],{"alt":23,"src":66610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66612,66613],{},[1540,66614],{"alt":23,"src":66615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22075,66617,66619],{"id":66618},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[161,66621,66622],{},[119,66623,66624],{},"事件类型的区别",[14,66626,66627],{},[1540,66628],{"alt":23,"src":66629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66631,66632],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[161,66634,66635],{"start":42},[119,66636,66637],{},"注册事件的区别",[14,66639,66640],{},[1540,66641],{"alt":23,"src":66642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22075,66644,66646],{"id":66645},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66648,66649],{},[1540,66650],{"alt":23,"src":66651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66653,66654],{},[1540,66655],{"alt":23,"src":66656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[18,66658,66660],{"className":53118,"code":66659,"language":53120,"meta":23,"style":23},"\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",[25,66661,66662,66670,66687,66710,66718,66723,66728,66733,66737,66745,66753],{"__ignoreMap":23},[28,66663,66664,66666,66668],{"class":30,"line":31},[28,66665,1120],{"class":211},[28,66667,51851],{"class":51351},[28,66669,51358],{"class":211},[28,66671,66672,66674,66677,66680,66682,66685],{"class":30,"line":42},[28,66673,52195],{"class":211},[28,66675,66676],{"class":51351},"form",[28,66678,66679],{"class":34}," action",[28,66681,257],{"class":211},[28,66683,66684],{"class":64},"\"http:\u002F\u002Fwww.itcast.cn\"",[28,66686,51358],{"class":211},[28,66688,66689,66691,66693,66695,66697,66700,66703,66705,66708],{"class":30,"line":50},[28,66690,51392],{"class":211},[28,66692,53872],{"class":51351},[28,66694,53875],{"class":34},[28,66696,257],{"class":211},[28,66698,66699],{"class":64},"\"submit\"",[28,66701,66702],{"class":34}," value",[28,66704,257],{"class":211},[28,66706,66707],{"class":64},"\"免费注册\"",[28,66709,51358],{"class":211},[28,66711,66712,66714,66716],{"class":30,"line":58},[28,66713,51392],{"class":211},[28,66715,51864],{"class":51351},[28,66717,51358],{"class":211},[28,66719,66720],{"class":30,"line":70},[28,66721,66722],{"class":211},"      const form = document.querySelector('form')\n",[28,66724,66725],{"class":30,"line":78},[28,66726,66727],{"class":211},"      form.addEventListener('submit', function (e) {\n",[28,66729,66730],{"class":30,"line":86},[28,66731,66732],{"class":211},"        e.preventDefault()\n",[28,66734,66735],{"class":30,"line":97},[28,66736,64866],{"class":211},[28,66738,66739,66741,66743],{"class":30,"line":108},[28,66740,51827],{"class":211},[28,66742,51864],{"class":51351},[28,66744,51358],{"class":211},[28,66746,66747,66749,66751],{"class":30,"line":1407},[28,66748,52468],{"class":211},[28,66750,66676],{"class":51351},[28,66752,51358],{"class":211},[28,66754,66755,66757,66759],{"class":30,"line":1690},[28,66756,51836],{"class":211},[28,66758,51851],{"class":51351},[28,66760,51358],{"class":211},[14,66762,66763],{},"点击不在跳转！！！",[177,66765,66767],{"id":66766},"_332-事件委托","3.3.2 事件委托",[14,66769,66770],{},[1540,66771],{"alt":23,"src":66772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[18,66774,66776],{"className":50684,"code":66775,"language":50686,"meta":23,"style":23},"\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",[25,66777,66778,66788,66802,66806,66814,66828,66848,66860,66868,66872,66880,66888,66900,66912,66924,66936,66948,66961,66969,66977,66982,67001,67022,67027,67032,67037,67042,67051,67055,67065,67069,67074,67079,67093,67103,67107,67111,67119,67127,67131],{"__ignoreMap":23},[28,66779,66780,66782,66784,66786],{"class":30,"line":31},[28,66781,51348],{"class":211},[28,66783,51352],{"class":51351},[28,66785,51355],{"class":34},[28,66787,51358],{"class":211},[28,66789,66790,66792,66794,66796,66798,66800],{"class":30,"line":42},[28,66791,1120],{"class":211},[28,66793,50686],{"class":51351},[28,66795,51367],{"class":34},[28,66797,257],{"class":211},[28,66799,51372],{"class":64},[28,66801,51358],{"class":211},[28,66803,66804],{"class":30,"line":50},[28,66805,2477],{"emptyLinePlaceholder":134},[28,66807,66808,66810,66812],{"class":30,"line":58},[28,66809,1120],{"class":211},[28,66811,51385],{"class":51351},[28,66813,51358],{"class":211},[28,66815,66816,66818,66820,66822,66824,66826],{"class":30,"line":70},[28,66817,52195],{"class":211},[28,66819,51395],{"class":51351},[28,66821,51398],{"class":34},[28,66823,257],{"class":211},[28,66825,51403],{"class":64},[28,66827,51358],{"class":211},[28,66829,66830,66832,66834,66836,66838,66840,66842,66844,66846],{"class":30,"line":78},[28,66831,52195],{"class":211},[28,66833,51395],{"class":51351},[28,66835,14997],{"class":34},[28,66837,257],{"class":211},[28,66839,51442],{"class":64},[28,66841,51422],{"class":34},[28,66843,257],{"class":211},[28,66845,51449],{"class":64},[28,66847,51358],{"class":211},[28,66849,66850,66852,66854,66856,66858],{"class":30,"line":86},[28,66851,52195],{"class":211},[28,66853,51458],{"class":51351},[28,66855,51461],{"class":211},[28,66857,51458],{"class":51351},[28,66859,51358],{"class":211},[28,66861,66862,66864,66866],{"class":30,"line":97},[28,66863,51836],{"class":211},[28,66865,51385],{"class":51351},[28,66867,51358],{"class":211},[28,66869,66870],{"class":30,"line":108},[28,66871,2477],{"emptyLinePlaceholder":134},[28,66873,66874,66876,66878],{"class":30,"line":1407},[28,66875,1120],{"class":211},[28,66877,51851],{"class":51351},[28,66879,51358],{"class":211},[28,66881,66882,66884,66886],{"class":30,"line":1690},[28,66883,52195],{"class":211},[28,66885,116],{"class":51351},[28,66887,51358],{"class":211},[28,66889,66890,66892,66894,66896,66898],{"class":30,"line":1695},[28,66891,51392],{"class":211},[28,66893,119],{"class":51351},[28,66895,54017],{"class":211},[28,66897,119],{"class":51351},[28,66899,51358],{"class":211},[28,66901,66902,66904,66906,66908,66910],{"class":30,"line":1701},[28,66903,51392],{"class":211},[28,66905,119],{"class":51351},[28,66907,54036],{"class":211},[28,66909,119],{"class":51351},[28,66911,51358],{"class":211},[28,66913,66914,66916,66918,66920,66922],{"class":30,"line":1706},[28,66915,51392],{"class":211},[28,66917,119],{"class":51351},[28,66919,54055],{"class":211},[28,66921,119],{"class":51351},[28,66923,51358],{"class":211},[28,66925,66926,66928,66930,66932,66934],{"class":30,"line":1720},[28,66927,51392],{"class":211},[28,66929,119],{"class":51351},[28,66931,54074],{"class":211},[28,66933,119],{"class":51351},[28,66935,51358],{"class":211},[28,66937,66938,66940,66942,66944,66946],{"class":30,"line":1725},[28,66939,51392],{"class":211},[28,66941,119],{"class":51351},[28,66943,54093],{"class":211},[28,66945,119],{"class":51351},[28,66947,51358],{"class":211},[28,66949,66950,66952,66954,66957,66959],{"class":30,"line":1731},[28,66951,51392],{"class":211},[28,66953,14],{"class":51351},[28,66955,66956],{"class":211},">我不需要变色\u003C\u002F",[28,66958,14],{"class":51351},[28,66960,51358],{"class":211},[28,66962,66963,66965,66967],{"class":30,"line":1752},[28,66964,52468],{"class":211},[28,66966,116],{"class":51351},[28,66968,51358],{"class":211},[28,66970,66971,66973,66975],{"class":30,"line":1757},[28,66972,52195],{"class":211},[28,66974,51864],{"class":51351},[28,66976,51358],{"class":211},[28,66978,66979],{"class":30,"line":1771},[28,66980,66981],{"class":269},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[28,66983,66984,66986,66988,66990,66992,66994,66996,66999],{"class":30,"line":1776},[28,66985,11298],{"class":207},[28,66987,61343],{"class":38},[28,66989,13641],{"class":207},[28,66991,54447],{"class":211},[28,66993,54450],{"class":34},[28,66995,212],{"class":211},[28,66997,66998],{"class":64},"'ul'",[28,67000,218],{"class":211},[28,67002,67003,67006,67008,67010,67012,67014,67016,67018,67020],{"class":30,"line":1805},[28,67004,67005],{"class":211},"    ul.",[28,67007,57864],{"class":34},[28,67009,212],{"class":211},[28,67011,57869],{"class":64},[28,67013,12512],{"class":211},[28,67015,54500],{"class":207},[28,67017,1736],{"class":211},[28,67019,285],{"class":5293},[28,67021,12519],{"class":211},[28,67023,67024],{"class":30,"line":1810},[28,67025,67026],{"class":269},"      \u002F\u002F alert(1)\n",[28,67028,67029],{"class":30,"line":1827},[28,67030,67031],{"class":269},"      \u002F\u002F e.target就是我们点击的对象\n",[28,67033,67034],{"class":30,"line":1832},[28,67035,67036],{"class":269},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[28,67038,67039],{"class":30,"line":1837},[28,67040,67041],{"class":269},"      \u002F\u002F e.target.style.color = 'red'\n",[28,67043,67044,67046,67048],{"class":30,"line":1842},[28,67045,58295],{"class":211},[28,67047,58298],{"class":34},[28,67049,67050],{"class":211},"(e)\n",[28,67052,67053],{"class":30,"line":1856},[28,67054,2477],{"emptyLinePlaceholder":134},[28,67056,67057,67059,67062],{"class":30,"line":1861},[28,67058,58295],{"class":211},[28,67060,67061],{"class":34},"dir",[28,67063,67064],{"class":211},"(e.target)\n",[28,67066,67067],{"class":30,"line":2654},[28,67068,2477],{"emptyLinePlaceholder":134},[28,67070,67071],{"class":30,"line":2668},[28,67072,67073],{"class":269},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[28,67075,67076],{"class":30,"line":2676},[28,67077,67078],{"class":269},"      \u002F\u002F 通过tagName来进行判断\n",[28,67080,67081,67083,67086,67088,67091],{"class":30,"line":2681},[28,67082,54531],{"class":207},[28,67084,67085],{"class":211}," (e.target.tagName ",[28,67087,54537],{"class":207},[28,67089,67090],{"class":64}," 'LI'",[28,67092,12519],{"class":211},[28,67094,67095,67098,67100],{"class":30,"line":2687},[28,67096,67097],{"class":211},"        e.target.style.color ",[28,67099,257],{"class":207},[28,67101,67102],{"class":64}," 'red'\n",[28,67104,67105],{"class":30,"line":2693},[28,67106,52449],{"class":211},[28,67108,67109],{"class":30,"line":2698},[28,67110,33512],{"class":211},[28,67112,67113,67115,67117],{"class":30,"line":8025},[28,67114,52468],{"class":211},[28,67116,51864],{"class":51351},[28,67118,51358],{"class":211},[28,67120,67121,67123,67125],{"class":30,"line":8049},[28,67122,51836],{"class":211},[28,67124,51851],{"class":51351},[28,67126,51358],{"class":211},[28,67128,67129],{"class":30,"line":8054},[28,67130,2477],{"emptyLinePlaceholder":134},[28,67132,67133,67135,67137],{"class":30,"line":8060},[28,67134,51836],{"class":211},[28,67136,50686],{"class":51351},[28,67138,51358],{"class":211},[14,67140,67141],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67143,67144],{},"if(e.target.ragName==='P') {}",[14,67146,67147],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67149,67150],{},"通过事件委托的方式实现tab栏切换改造：",[14,67152,67153],{},"一定要记住自定义属性！！！！！！",[14,67155,67156],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67158,67159],{},"id是自定义的属性名",[14,67161,67162],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[18,67164,67166],{"className":50684,"code":67165,"language":50686,"meta":23,"style":23},"\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",[25,67167,67168,67178,67192,67196,67204,67218,67238,67258,67270,67278,67284,67294,67304,67308,67312,67318,67330,67342,67354,67370,67374,67378,67384,67396,67408,67420,67430,67440,67444,67448,67456,67468,67478,67490,67494,67498,67506,67516,67526,67536,67540,67544,67554,67568,67580,67584,67588,67600,67610,67626,67636,67640,67644,67658,67668,67678,67682,67686,67692,67706,67710,67714,67722,67732,67736,67740,67749,67759,67763,67771,67779,67783,67791,67805,67819,67831,67839,67878,67910,67942,67974,68006,68014,68022,68036,68070,68104,68138,68172,68206,68214,68222,68230,68235,68240,68259,68264,68284,68292,68297,68310,68331,68344,68348,68353,68358,68371,68391,68419,68423,68427,68431,68439,68447,68451],{"__ignoreMap":23},[28,67169,67170,67172,67174,67176],{"class":30,"line":31},[28,67171,51348],{"class":211},[28,67173,51352],{"class":51351},[28,67175,51355],{"class":34},[28,67177,51358],{"class":211},[28,67179,67180,67182,67184,67186,67188,67190],{"class":30,"line":42},[28,67181,1120],{"class":211},[28,67183,50686],{"class":51351},[28,67185,51367],{"class":34},[28,67187,257],{"class":211},[28,67189,51372],{"class":64},[28,67191,51358],{"class":211},[28,67193,67194],{"class":30,"line":50},[28,67195,2477],{"emptyLinePlaceholder":134},[28,67197,67198,67200,67202],{"class":30,"line":58},[28,67199,1120],{"class":211},[28,67201,51385],{"class":51351},[28,67203,51358],{"class":211},[28,67205,67206,67208,67210,67212,67214,67216],{"class":30,"line":70},[28,67207,52195],{"class":211},[28,67209,51395],{"class":51351},[28,67211,51398],{"class":34},[28,67213,257],{"class":211},[28,67215,51403],{"class":64},[28,67217,59178],{"class":211},[28,67219,67220,67222,67224,67226,67228,67230,67232,67234,67236],{"class":30,"line":78},[28,67221,52195],{"class":211},[28,67223,51395],{"class":51351},[28,67225,51414],{"class":34},[28,67227,257],{"class":211},[28,67229,51419],{"class":64},[28,67231,51422],{"class":34},[28,67233,257],{"class":211},[28,67235,51427],{"class":64},[28,67237,59178],{"class":211},[28,67239,67240,67242,67244,67246,67248,67250,67252,67254,67256],{"class":30,"line":86},[28,67241,52195],{"class":211},[28,67243,51395],{"class":51351},[28,67245,14997],{"class":34},[28,67247,257],{"class":211},[28,67249,51442],{"class":64},[28,67251,51422],{"class":34},[28,67253,257],{"class":211},[28,67255,51449],{"class":64},[28,67257,59178],{"class":211},[28,67259,67260,67262,67264,67266,67268],{"class":30,"line":97},[28,67261,52195],{"class":211},[28,67263,51458],{"class":51351},[28,67265,63676],{"class":211},[28,67267,51458],{"class":51351},[28,67269,51358],{"class":211},[28,67271,67272,67274,67276],{"class":30,"line":108},[28,67273,52195],{"class":211},[28,67275,126],{"class":51351},[28,67277,51358],{"class":211},[28,67279,67280,67282],{"class":30,"line":1407},[28,67281,6480],{"class":51351},[28,67283,15649],{"class":211},[28,67285,67286,67288,67290,67292],{"class":30,"line":1690},[28,67287,54757],{"class":38},[28,67289,51488],{"class":211},[28,67291,401],{"class":38},[28,67293,1370],{"class":211},[28,67295,67296,67298,67300,67302],{"class":30,"line":1695},[28,67297,54746],{"class":38},[28,67299,51488],{"class":211},[28,67301,401],{"class":38},[28,67303,1370],{"class":211},[28,67305,67306],{"class":30,"line":1701},[28,67307,2264],{"class":211},[28,67309,67310],{"class":30,"line":1706},[28,67311,2477],{"emptyLinePlaceholder":134},[28,67313,67314,67316],{"class":30,"line":1720},[28,67315,63727],{"class":34},[28,67317,15649],{"class":211},[28,67319,67320,67322,67324,67326,67328],{"class":30,"line":1725},[28,67321,54822],{"class":38},[28,67323,51488],{"class":211},[28,67325,63738],{"class":38},[28,67327,51543],{"class":207},[28,67329,1370],{"class":211},[28,67331,67332,67334,67336,67338,67340],{"class":30,"line":1731},[28,67333,54836],{"class":38},[28,67335,51488],{"class":211},[28,67337,63751],{"class":38},[28,67339,51543],{"class":207},[28,67341,1370],{"class":211},[28,67343,67344,67346,67348,67350,67352],{"class":30,"line":1752},[28,67345,54757],{"class":38},[28,67347,51488],{"class":211},[28,67349,910],{"class":38},[28,67351,51543],{"class":207},[28,67353,1370],{"class":211},[28,67355,67356,67358,67360,67362,67364,67366,67368],{"class":30,"line":1757},[28,67357,62028],{"class":38},[28,67359,51488],{"class":211},[28,67361,427],{"class":38},[28,67363,51543],{"class":207},[28,67365,51572],{"class":38},[28,67367,62295],{"class":38},[28,67369,1370],{"class":211},[28,67371,67372],{"class":30,"line":1771},[28,67373,2264],{"class":211},[28,67375,67376],{"class":30,"line":1776},[28,67377,2477],{"emptyLinePlaceholder":134},[28,67379,67380,67382],{"class":30,"line":1805},[28,67381,63796],{"class":34},[28,67383,15649],{"class":211},[28,67385,67386,67388,67390,67392,67394],{"class":30,"line":1810},[28,67387,54822],{"class":38},[28,67389,51488],{"class":211},[28,67391,521],{"class":38},[28,67393,538],{"class":207},[28,67395,1370],{"class":211},[28,67397,67398,67400,67402,67404,67406],{"class":30,"line":1827},[28,67399,54836],{"class":38},[28,67401,51488],{"class":211},[28,67403,1117],{"class":38},[28,67405,51543],{"class":207},[28,67407,1370],{"class":211},[28,67409,67410,67412,67414,67416,67418],{"class":30,"line":1832},[28,67411,57410],{"class":38},[28,67413,51488],{"class":211},[28,67415,1117],{"class":38},[28,67417,51543],{"class":207},[28,67419,1370],{"class":211},[28,67421,67422,67424,67426,67428],{"class":30,"line":1837},[28,67423,55060],{"class":38},[28,67425,51488],{"class":211},[28,67427,51528],{"class":38},[28,67429,1370],{"class":211},[28,67431,67432,67434,67436,67438],{"class":30,"line":1842},[28,67433,55071],{"class":38},[28,67435,51488],{"class":211},[28,67437,51719],{"class":38},[28,67439,1370],{"class":211},[28,67441,67442],{"class":30,"line":1856},[28,67443,2264],{"class":211},[28,67445,67446],{"class":30,"line":1861},[28,67447,2477],{"emptyLinePlaceholder":134},[28,67449,67450,67452,67454],{"class":30,"line":2654},[28,67451,63796],{"class":34},[28,67453,63869],{"class":51351},[28,67455,15649],{"class":211},[28,67457,67458,67460,67462,67464,67466],{"class":30,"line":2668},[28,67459,54973],{"class":38},[28,67461,51488],{"class":211},[28,67463,1010],{"class":38},[28,67465,51543],{"class":207},[28,67467,1370],{"class":211},[28,67469,67470,67472,67474,67476],{"class":30,"line":2676},[28,67471,62385],{"class":38},[28,67473,51488],{"class":211},[28,67475,63892],{"class":38},[28,67477,1370],{"class":211},[28,67479,67480,67482,67484,67486,67488],{"class":30,"line":2681},[28,67481,62051],{"class":38},[28,67483,51488],{"class":211},[28,67485,910],{"class":38},[28,67487,51543],{"class":207},[28,67489,1370],{"class":211},[28,67491,67492],{"class":30,"line":2687},[28,67493,2264],{"class":211},[28,67495,67496],{"class":30,"line":2693},[28,67497,2477],{"emptyLinePlaceholder":134},[28,67499,67500,67502,67504],{"class":30,"line":2698},[28,67501,63796],{"class":34},[28,67503,61343],{"class":51351},[28,67505,15649],{"class":211},[28,67507,67508,67510,67512,67514],{"class":30,"line":8025},[28,67509,54783],{"class":38},[28,67511,51488],{"class":211},[28,67513,54788],{"class":38},[28,67515,1370],{"class":211},[28,67517,67518,67520,67522,67524],{"class":30,"line":8049},[28,67519,55060],{"class":38},[28,67521,51488],{"class":211},[28,67523,51528],{"class":38},[28,67525,1370],{"class":211},[28,67527,67528,67530,67532,67534],{"class":30,"line":8054},[28,67529,55071],{"class":38},[28,67531,51488],{"class":211},[28,67533,51631],{"class":38},[28,67535,1370],{"class":211},[28,67537,67538],{"class":30,"line":8060},[28,67539,2264],{"class":211},[28,67541,67542],{"class":30,"line":8087},[28,67543,2477],{"emptyLinePlaceholder":134},[28,67545,67546,67548,67550,67552],{"class":30,"line":8092},[28,67547,63796],{"class":34},[28,67549,61343],{"class":51351},[28,67551,55126],{"class":51351},[28,67553,15649],{"class":211},[28,67555,67556,67558,67560,67562,67564,67566],{"class":30,"line":8098},[28,67557,54757],{"class":38},[28,67559,51488],{"class":211},[28,67561,401],{"class":38},[28,67563,9027],{"class":38},[28,67565,51543],{"class":207},[28,67567,1370],{"class":211},[28,67569,67570,67572,67574,67576,67578],{"class":30,"line":8110},[28,67571,54973],{"class":38},[28,67573,51488],{"class":211},[28,67575,759],{"class":38},[28,67577,51543],{"class":207},[28,67579,1370],{"class":211},[28,67581,67582],{"class":30,"line":8122},[28,67583,2264],{"class":211},[28,67585,67586],{"class":30,"line":8134},[28,67587,2477],{"emptyLinePlaceholder":134},[28,67589,67590,67592,67594,67596,67598],{"class":30,"line":9793},[28,67591,63796],{"class":34},[28,67593,61343],{"class":51351},[28,67595,55126],{"class":51351},[28,67597,1476],{"class":51351},[28,67599,15649],{"class":211},[28,67601,67602,67604,67606,67608],{"class":30,"line":9818},[28,67603,64021],{"class":38},[28,67605,51488],{"class":211},[28,67607,54788],{"class":38},[28,67609,1370],{"class":211},[28,67611,67612,67614,67616,67618,67620,67622,67624],{"class":30,"line":9841},[28,67613,62283],{"class":38},[28,67615,51488],{"class":211},[28,67617,288],{"class":38},[28,67619,51543],{"class":207},[28,67621,51572],{"class":38},[28,67623,64042],{"class":38},[28,67625,1370],{"class":211},[28,67627,67628,67630,67632,67634],{"class":30,"line":9865},[28,67629,57467],{"class":38},[28,67631,51488],{"class":211},[28,67633,62420],{"class":38},[28,67635,1370],{"class":211},[28,67637,67638],{"class":30,"line":9870},[28,67639,2264],{"class":211},[28,67641,67642],{"class":30,"line":9875},[28,67643,2477],{"emptyLinePlaceholder":134},[28,67645,67646,67648,67650,67652,67654,67656],{"class":30,"line":9880},[28,67647,63796],{"class":34},[28,67649,61343],{"class":51351},[28,67651,55126],{"class":51351},[28,67653,1476],{"class":51351},[28,67655,64075],{"class":34},[28,67657,15649],{"class":211},[28,67659,67660,67662,67664,67666],{"class":30,"line":9889},[28,67661,61842],{"class":38},[28,67663,51488],{"class":211},[28,67665,64086],{"class":38},[28,67667,1370],{"class":211},[28,67669,67670,67672,67674,67676],{"class":30,"line":9894},[28,67671,57467],{"class":38},[28,67673,51488],{"class":211},[28,67675,64086],{"class":38},[28,67677,1370],{"class":211},[28,67679,67680],{"class":30,"line":9900},[28,67681,2264],{"class":211},[28,67683,67684],{"class":30,"line":9921},[28,67685,2477],{"emptyLinePlaceholder":134},[28,67687,67688,67690],{"class":30,"line":9927},[28,67689,64111],{"class":34},[28,67691,15649],{"class":211},[28,67693,67694,67696,67698,67700,67702,67704],{"class":30,"line":9941},[28,67695,54746],{"class":38},[28,67697,51488],{"class":211},[28,67699,401],{"class":38},[28,67701,64124],{"class":38},[28,67703,51543],{"class":207},[28,67705,1370],{"class":211},[28,67707,67708],{"class":30,"line":9947},[28,67709,2264],{"class":211},[28,67711,67712],{"class":30,"line":9974},[28,67713,2477],{"emptyLinePlaceholder":134},[28,67715,67716,67718,67720],{"class":30,"line":9983},[28,67717,64111],{"class":34},[28,67719,62225],{"class":34},[28,67721,15649],{"class":211},[28,67723,67724,67726,67728,67730],{"class":30,"line":9989},[28,67725,55060],{"class":38},[28,67727,51488],{"class":211},[28,67729,54788],{"class":38},[28,67731,1370],{"class":211},[28,67733,67734],{"class":30,"line":9997},[28,67735,2264],{"class":211},[28,67737,67738],{"class":30,"line":10002},[28,67739,2477],{"emptyLinePlaceholder":134},[28,67741,67742,67744,67747],{"class":30,"line":16681},[28,67743,64111],{"class":34},[28,67745,67746],{"class":34}," .active",[28,67748,15649],{"class":211},[28,67750,67751,67753,67755,67757],{"class":30,"line":16687},[28,67752,55060],{"class":38},[28,67754,51488],{"class":211},[28,67756,60920],{"class":38},[28,67758,1370],{"class":211},[28,67760,67761],{"class":30,"line":16710},[28,67762,2264],{"class":211},[28,67764,67765,67767,67769],{"class":30,"line":16716},[28,67766,52468],{"class":211},[28,67768,126],{"class":51351},[28,67770,51358],{"class":211},[28,67772,67773,67775,67777],{"class":30,"line":16739},[28,67774,51836],{"class":211},[28,67776,51385],{"class":51351},[28,67778,51358],{"class":211},[28,67780,67781],{"class":30,"line":16753},[28,67782,2477],{"emptyLinePlaceholder":134},[28,67784,67785,67787,67789],{"class":30,"line":16773},[28,67786,1120],{"class":211},[28,67788,51851],{"class":51351},[28,67790,51358],{"class":211},[28,67792,67793,67795,67797,67799,67801,67803],{"class":30,"line":16779},[28,67794,52195],{"class":211},[28,67796,51662],{"class":51351},[28,67798,53537],{"class":34},[28,67800,257],{"class":211},[28,67802,64226],{"class":64},[28,67804,51358],{"class":211},[28,67806,67807,67809,67811,67813,67815,67817],{"class":30,"line":16790},[28,67808,51392],{"class":211},[28,67810,51662],{"class":51351},[28,67812,53537],{"class":34},[28,67814,257],{"class":211},[28,67816,64241],{"class":64},[28,67818,51358],{"class":211},[28,67820,67821,67823,67825,67827,67829],{"class":30,"line":16813},[28,67822,55285],{"class":211},[28,67824,177],{"class":51351},[28,67826,64252],{"class":211},[28,67828,177],{"class":51351},[28,67830,51358],{"class":211},[28,67832,67833,67835,67837],{"class":30,"line":16835},[28,67834,55285],{"class":211},[28,67836,116],{"class":51351},[28,67838,51358],{"class":211},[28,67840,67841,67843,67845,67847,67849,67851,67853,67855,67857,67859,67861,67863,67865,67868,67870,67872,67874,67876],{"class":30,"line":16840},[28,67842,55353],{"class":211},[28,67844,119],{"class":51351},[28,67846,61103],{"class":211},[28,67848,448],{"class":51351},[28,67850,53537],{"class":34},[28,67852,257],{"class":211},[28,67854,59757],{"class":64},[28,67856,61108],{"class":34},[28,67858,257],{"class":211},[28,67860,64287],{"class":64},[28,67862,54002],{"class":34},[28,67864,257],{"class":211},[28,67866,67867],{"class":64},"\"0\"",[28,67869,64290],{"class":211},[28,67871,448],{"class":51351},[28,67873,55365],{"class":211},[28,67875,119],{"class":51351},[28,67877,51358],{"class":211},[28,67879,67880,67882,67884,67886,67888,67890,67892,67894,67896,67898,67900,67902,67904,67906,67908],{"class":30,"line":16846},[28,67881,55353],{"class":211},[28,67883,119],{"class":51351},[28,67885,61103],{"class":211},[28,67887,448],{"class":51351},[28,67889,61108],{"class":34},[28,67891,257],{"class":211},[28,67893,64287],{"class":64},[28,67895,54002],{"class":34},[28,67897,257],{"class":211},[28,67899,3755],{"class":64},[28,67901,64317],{"class":211},[28,67903,448],{"class":51351},[28,67905,55365],{"class":211},[28,67907,119],{"class":51351},[28,67909,51358],{"class":211},[28,67911,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930,67932,67934,67936,67938,67940],{"class":30,"line":16860},[28,67913,55353],{"class":211},[28,67915,119],{"class":51351},[28,67917,61103],{"class":211},[28,67919,448],{"class":51351},[28,67921,61108],{"class":34},[28,67923,257],{"class":211},[28,67925,64287],{"class":64},[28,67927,54002],{"class":34},[28,67929,257],{"class":211},[28,67931,3778],{"class":64},[28,67933,64344],{"class":211},[28,67935,448],{"class":51351},[28,67937,55365],{"class":211},[28,67939,119],{"class":51351},[28,67941,51358],{"class":211},[28,67943,67944,67946,67948,67950,67952,67954,67956,67958,67960,67962,67964,67966,67968,67970,67972],{"class":30,"line":16873},[28,67945,55353],{"class":211},[28,67947,119],{"class":51351},[28,67949,61103],{"class":211},[28,67951,448],{"class":51351},[28,67953,61108],{"class":34},[28,67955,257],{"class":211},[28,67957,64287],{"class":64},[28,67959,54002],{"class":34},[28,67961,257],{"class":211},[28,67963,3791],{"class":64},[28,67965,64371],{"class":211},[28,67967,448],{"class":51351},[28,67969,55365],{"class":211},[28,67971,119],{"class":51351},[28,67973,51358],{"class":211},[28,67975,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998,68000,68002,68004],{"class":30,"line":16878},[28,67977,55353],{"class":211},[28,67979,119],{"class":51351},[28,67981,61103],{"class":211},[28,67983,448],{"class":51351},[28,67985,61108],{"class":34},[28,67987,257],{"class":211},[28,67989,64287],{"class":64},[28,67991,54002],{"class":34},[28,67993,257],{"class":211},[28,67995,3804],{"class":64},[28,67997,64398],{"class":211},[28,67999,448],{"class":51351},[28,68001,55365],{"class":211},[28,68003,119],{"class":51351},[28,68005,51358],{"class":211},[28,68007,68008,68010,68012],{"class":30,"line":16892},[28,68009,55458],{"class":211},[28,68011,116],{"class":51351},[28,68013,51358],{"class":211},[28,68015,68016,68018,68020],{"class":30,"line":16897},[28,68017,51827],{"class":211},[28,68019,51662],{"class":51351},[28,68021,51358],{"class":211},[28,68023,68024,68026,68028,68030,68032,68034],{"class":30,"line":16903},[28,68025,51392],{"class":211},[28,68027,51662],{"class":51351},[28,68029,53537],{"class":34},[28,68031,257],{"class":211},[28,68033,64435],{"class":64},[28,68035,51358],{"class":211},[28,68037,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062,68064,68066,68068],{"class":30,"line":16908},[28,68039,55285],{"class":211},[28,68041,51662],{"class":51351},[28,68043,53537],{"class":34},[28,68045,257],{"class":211},[28,68047,64450],{"class":64},[28,68049,61103],{"class":211},[28,68051,1540],{"class":51351},[28,68053,55290],{"class":34},[28,68055,257],{"class":211},[28,68057,64461],{"class":64},[28,68059,55298],{"class":34},[28,68061,257],{"class":211},[28,68063,7729],{"class":64},[28,68065,64470],{"class":211},[28,68067,51662],{"class":51351},[28,68069,51358],{"class":211},[28,68071,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098,68100,68102],{"class":30,"line":16922},[28,68073,55285],{"class":211},[28,68075,51662],{"class":51351},[28,68077,53537],{"class":34},[28,68079,257],{"class":211},[28,68081,62674],{"class":64},[28,68083,61103],{"class":211},[28,68085,1540],{"class":51351},[28,68087,55290],{"class":34},[28,68089,257],{"class":211},[28,68091,64497],{"class":64},[28,68093,55298],{"class":34},[28,68095,257],{"class":211},[28,68097,7729],{"class":64},[28,68099,64470],{"class":211},[28,68101,51662],{"class":51351},[28,68103,51358],{"class":211},[28,68105,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132,68134,68136],{"class":30,"line":16927},[28,68107,55285],{"class":211},[28,68109,51662],{"class":51351},[28,68111,53537],{"class":34},[28,68113,257],{"class":211},[28,68115,62674],{"class":64},[28,68117,61103],{"class":211},[28,68119,1540],{"class":51351},[28,68121,55290],{"class":34},[28,68123,257],{"class":211},[28,68125,64532],{"class":64},[28,68127,55298],{"class":34},[28,68129,257],{"class":211},[28,68131,7729],{"class":64},[28,68133,64470],{"class":211},[28,68135,51662],{"class":51351},[28,68137,51358],{"class":211},[28,68139,68140,68142,68144,68146,68148,68150,68152,68154,68156,68158,68160,68162,68164,68166,68168,68170],{"class":30,"line":16932},[28,68141,55285],{"class":211},[28,68143,51662],{"class":51351},[28,68145,53537],{"class":34},[28,68147,257],{"class":211},[28,68149,62674],{"class":64},[28,68151,61103],{"class":211},[28,68153,1540],{"class":51351},[28,68155,55290],{"class":34},[28,68157,257],{"class":211},[28,68159,64567],{"class":64},[28,68161,55298],{"class":34},[28,68163,257],{"class":211},[28,68165,7729],{"class":64},[28,68167,64470],{"class":211},[28,68169,51662],{"class":51351},[28,68171,51358],{"class":211},[28,68173,68174,68176,68178,68180,68182,68184,68186,68188,68190,68192,68194,68196,68198,68200,68202,68204],{"class":30,"line":16946},[28,68175,55285],{"class":211},[28,68177,51662],{"class":51351},[28,68179,53537],{"class":34},[28,68181,257],{"class":211},[28,68183,62674],{"class":64},[28,68185,61103],{"class":211},[28,68187,1540],{"class":51351},[28,68189,55290],{"class":34},[28,68191,257],{"class":211},[28,68193,64602],{"class":64},[28,68195,55298],{"class":34},[28,68197,257],{"class":211},[28,68199,7729],{"class":64},[28,68201,64470],{"class":211},[28,68203,51662],{"class":51351},[28,68205,51358],{"class":211},[28,68207,68208,68210,68212],{"class":30,"line":16958},[28,68209,51827],{"class":211},[28,68211,51662],{"class":51351},[28,68213,51358],{"class":211},[28,68215,68216,68218,68220],{"class":30,"line":16963},[28,68217,52468],{"class":211},[28,68219,51662],{"class":51351},[28,68221,51358],{"class":211},[28,68223,68224,68226,68228],{"class":30,"line":16976},[28,68225,52195],{"class":211},[28,68227,51864],{"class":51351},[28,68229,51358],{"class":211},[28,68231,68232],{"class":30,"line":16981},[28,68233,68234],{"class":269},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[28,68236,68237],{"class":30,"line":16986},[28,68238,68239],{"class":269},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[28,68241,68242,68244,68246,68248,68250,68252,68254,68257],{"class":30,"line":16991},[28,68243,11298],{"class":207},[28,68245,61343],{"class":38},[28,68247,13641],{"class":207},[28,68249,54447],{"class":211},[28,68251,54450],{"class":34},[28,68253,212],{"class":211},[28,68255,68256],{"class":64},"'.tab-nav ul'",[28,68258,218],{"class":211},[28,68260,68261],{"class":30,"line":17004},[28,68262,68263],{"class":269},"    \u002F\u002F 2.添加事件\n",[28,68265,68266,68268,68270,68272,68274,68276,68278,68280,68282],{"class":30,"line":17009},[28,68267,67005],{"class":211},[28,68269,57864],{"class":34},[28,68271,212],{"class":211},[28,68273,57869],{"class":64},[28,68275,12512],{"class":211},[28,68277,54500],{"class":207},[28,68279,1736],{"class":211},[28,68281,285],{"class":5293},[28,68283,12519],{"class":211},[28,68285,68286,68288,68290],{"class":30,"line":32684},[28,68287,58295],{"class":211},[28,68289,67061],{"class":34},[28,68291,67064],{"class":211},[28,68293,68294],{"class":30,"line":32690},[28,68295,68296],{"class":269},"      \u002F\u002Fe.targer是我们点击的对象\n",[28,68298,68299,68301,68303,68305,68308],{"class":30,"line":32696},[28,68300,54531],{"class":207},[28,68302,67085],{"class":211},[28,68304,54537],{"class":207},[28,68306,68307],{"class":64}," 'A'",[28,68309,12519],{"class":211},[28,68311,68312,68314,68316,68318,68321,68323,68325,68327,68329],{"class":30,"line":32702},[28,68313,51976],{"class":211},[28,68315,54450],{"class":34},[28,68317,212],{"class":211},[28,68319,68320],{"class":64},"'.active'",[28,68322,57054],{"class":211},[28,68324,57057],{"class":34},[28,68326,212],{"class":211},[28,68328,64765],{"class":64},[28,68330,218],{"class":211},[28,68332,68333,68336,68338,68340,68342],{"class":30,"line":32708},[28,68334,68335],{"class":211},"        e.target.classList.",[28,68337,5411],{"class":34},[28,68339,212],{"class":211},[28,68341,64765],{"class":64},[28,68343,218],{"class":211},[28,68345,68346],{"class":30,"line":32719},[28,68347,2477],{"emptyLinePlaceholder":134},[28,68349,68350],{"class":30,"line":32725},[28,68351,68352],{"class":269},"        \u002F\u002F 下面大盒子模块\n",[28,68354,68355],{"class":30,"line":32745},[28,68356,68357],{"class":269},"        \u002F\u002F console.log(e.target.dataset.id)\n",[28,68359,68360,68362,68364,68366,68368],{"class":30,"line":32751},[28,68361,61321],{"class":207},[28,68363,3109],{"class":38},[28,68365,13641],{"class":207},[28,68367,45617],{"class":207},[28,68369,68370],{"class":211},"e.target.dataset.id\n",[28,68372,68373,68375,68377,68379,68381,68383,68385,68387,68389],{"class":30,"line":32762},[28,68374,51976],{"class":211},[28,68376,54450],{"class":34},[28,68378,212],{"class":211},[28,68380,64813],{"class":64},[28,68382,57054],{"class":211},[28,68384,57057],{"class":34},[28,68386,212],{"class":211},[28,68388,64765],{"class":64},[28,68390,218],{"class":211},[28,68392,68393,68395,68397,68399,68401,68403,68405,68407,68409,68411,68413,68415,68417],{"class":30,"line":32768},[28,68394,51976],{"class":211},[28,68396,54450],{"class":34},[28,68398,212],{"class":211},[28,68400,64839],{"class":64},[28,68402,651],{"class":211},[28,68404,45617],{"class":207},[28,68406,25189],{"class":38},[28,68408,57083],{"class":64},[28,68410,57054],{"class":211},[28,68412,5411],{"class":34},[28,68414,212],{"class":211},[28,68416,64765],{"class":64},[28,68418,218],{"class":211},[28,68420,68421],{"class":30,"line":32774},[28,68422,2477],{"emptyLinePlaceholder":134},[28,68424,68425],{"class":30,"line":32780},[28,68426,52449],{"class":211},[28,68428,68429],{"class":30,"line":32786},[28,68430,33512],{"class":211},[28,68432,68433,68435,68437],{"class":30,"line":32792},[28,68434,52468],{"class":211},[28,68436,51864],{"class":51351},[28,68438,51358],{"class":211},[28,68440,68441,68443,68445],{"class":30,"line":32798},[28,68442,51836],{"class":211},[28,68444,51851],{"class":51351},[28,68446,51358],{"class":211},[28,68448,68449],{"class":30,"line":32804},[28,68450,2477],{"emptyLinePlaceholder":134},[28,68452,68453,68455,68457],{"class":30,"line":32824},[28,68454,51836],{"class":211},[28,68456,50686],{"class":51351},[28,68458,51358],{"class":211},[177,68460,68462],{"id":68461},"_333-页面加载事件","3.3.3 页面加载事件",[161,68464,68465],{},[119,68466,68467],{},"load",[14,68469,68470],{},[1540,68471],{"alt":23,"src":68472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68474,68475],{},"window代表整个窗口，比document还要大",[14,68477,68478],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68480,68481],{},"img.addEventListener('load', function () {",[14,68483,68484],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68486,52515],{},[161,68488,68489],{"start":42},[119,68490,68491],{},"DOMContentLoaded",[14,68493,68494],{},[1540,68495],{"alt":23,"src":68496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68498,68499],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[177,68501,68503],{"id":68502},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68505,68506],{},[1540,68507],{"alt":23,"src":68508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68510,68511],{},[1540,68512],{"alt":23,"src":68513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68515,68516],{},[1540,68517],{"alt":23,"src":68518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68520,68521],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68523,68524],{},"获得的是数字型数据，不带单位",[14,68526,68527],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68529,68530],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68532,68533],{},"它是通过document.documentElement来获取",[14,68535,68536],{},[1540,68537],{"alt":23,"src":68538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68540,68541],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[177,68543,68545],{"id":68544},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68547,68548],{},[1540,68549],{"alt":23,"src":68550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68552,68553],{},[1540,68554],{"alt":23,"src":68555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[177,68557,68559],{"id":68558},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68561,68562],{},[1540,68563],{"alt":23,"src":68564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68566,68567],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68569,68570],{},[1540,68571],{"alt":23,"src":68572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68574,68575],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68577,68578],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68580,68581],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68583,68584],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68586,68587],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68589,68590],{},[1540,68591],{"alt":23,"src":68592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68594,68595],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68597,68598],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68600,68601],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68603,68604],{},"e.pageX-box.getBoundingClientRect()",[177,68606,68608],{"id":68607},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68610,68611],{},[1540,68612],{"alt":23,"src":68613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68615,68616],{},"这个是相对于视口来说的，它是个方法，不是属性值",[177,68618,68620],{"id":68619},"_338-总结","3.3.8 总结",[14,68622,68623],{},[1540,68624],{"alt":23,"src":68625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68627,68628],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68630,68631],{},"修改盒子的宽高只能通过width和height来实现",[177,68633,68635],{"id":68634},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[18,68637,68639],{"className":50684,"code":68638,"language":50686,"meta":23,"style":23},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[25,68640,68641,68646,68651,68656,68661],{"__ignoreMap":23},[28,68642,68643],{"class":30,"line":31},[28,68644,68645],{"class":211},"\u002F* 页面滑动 *\u002F\n",[28,68647,68648],{"class":30,"line":42},[28,68649,68650],{"class":211},"html {\n",[28,68652,68653],{"class":30,"line":50},[28,68654,68655],{"class":211},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[28,68657,68658],{"class":30,"line":58},[28,68659,68660],{"class":211},"  scroll-behavior: smooth;\n",[28,68662,68663],{"class":30,"line":70},[28,68664,1643],{"class":211},[14,68666,68667],{},"默认是auto",[177,68669,68671],{"id":68670},"_3310-日期对象","3.3.10 日期对象",[22075,68673,68675],{"id":68674},"_33101-实例化","3.3.10.1 实例化",[14,68677,68678],{},[1540,68679],{"alt":23,"src":68680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22075,68682,68684],{"id":68683},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68686,68687],{},[1540,68688],{"alt":23,"src":68689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68691,68692],{},"月份+1",[14,68694,68695],{},"老外认为第一天为0，星期天",[14,68697,68698],{},"方法使用的时候必须要跟括号",[14,68700,68701],{},"快速获得日期",[14,68703,68704],{},"\u002F\u002F 得到年月日",[14,68706,68707],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68709,68710],{},"\u002F\u002F 得到当地日期",[14,68712,68713],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68715,68716],{},"\u002F\u002F 得到当地时间",[14,68718,68719],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68721,68722],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68724,68725],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51864,68727,68728],{},"\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,68730,68731],{},"学会去封装函数！",[22075,68733,68735],{"id":68734},"_33103-时间戳","3.3.10.3 时间戳",[14,68737,68738],{},[1540,68739],{"alt":23,"src":68740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68742,68743],{},[1540,68744],{"alt":23,"src":68745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68747,68748],{},"三种方法记住一个就可以",[177,68750,68752],{"id":68751},"_3311-节点操作","3.3.11 节点操作",[22075,68754,68756],{"id":68755},"_33111-dom节点","3.3.11.1 DOM节点",[14,68758,68759],{},[1540,68760],{"alt":23,"src":68761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68763,68764],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22075,68766,68768],{"id":68767},"_33112-查找节点","3.3.11.2 查找节点",[14,68770,68771],{},"前边的document.querySelector()是获取的元素",[14,68773,68774],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68776,68777],{},[1540,68778],{"alt":23,"src":68779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[161,68781,68782],{},[119,68783,68784],{},"父节点",[14,68786,68787],{},[1540,68788],{"alt":23,"src":68789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[161,68791,68792],{"start":42},[119,68793,68794],{},"子节点",[14,68796,68797],{},[1540,68798],{"alt":23,"src":68799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68801,68802],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68804,68805],{},"children获得的是伪数组，是亲儿子",[161,68807,68808],{"start":50},[119,68809,68810],{},"兄弟节点",[14,68812,68813],{},[1540,68814],{"alt":23,"src":68815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22075,68817,68819],{"id":68818},"_33113-增加节点","3.3.11.3 增加节点",[14,68821,68822],{},[1540,68823],{"alt":23,"src":68824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68826,68827],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68829,68830],{},[1540,68831],{"alt":23,"src":68832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68834,68835],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68837,68838],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68840,68841],{},"例：",[51864,68843,68844],{},"\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,68846,68847],{},[1540,68848],{"alt":23,"src":68849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68851,68852],{},"false只克隆标签，里边的内容不会克隆过来",[18,68854,68856],{"className":50684,"code":68855,"language":50686,"meta":23,"style":23},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[25,68857,68858],{"__ignoreMap":23},[28,68859,68860],{"class":30,"line":31},[28,68861,68855],{"class":211},[22075,68863,68865],{"id":68864},"_33114-删除节点","3.3.11.4 删除节点",[14,68867,68868],{},[1540,68869],{"alt":23,"src":68870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68872,68873],{},"父亲删儿子",[14,68875,68876],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[177,68878,68880],{"id":68879},"_3312-m端事件","3.3.12 M端事件",[14,68882,68883],{},"M端就是移动端",[14,68885,68886],{},[1540,68887],{"alt":23,"src":68888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[177,68890,68892],{"id":68891},"_3313-插件","3.3.13 插件",[14,68894,68895],{},"要熟悉官网！！！",[14,68897,68898],{},[448,68899,68900],{"href":68900,"rel":68901},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23940],[14,68903,68904],{},[448,68905,68906],{"href":68906,"rel":68907},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23940],[177,68909,68911],{"id":68910},"_3314-学生信息表","3.3.14 学生信息表",[161,68913,68914,68917,68920,68923,68926,68929,68932,68935],{},[119,68915,68916],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[119,68918,68919],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[119,68921,68922],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[119,68924,68925],{},"用好表单元素自带的属性，value,name等",[119,68927,68928],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[119,68930,68931],{},"不要忘记事件对象",[119,68933,68934],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[119,68936,68937],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68939,68940],{},"结构：",[18,68942,68944],{"className":50684,"code":68943,"language":50686,"meta":23,"style":23},"\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",[25,68945,68946,68956,68970,68974,68982,68996,69016,69037,69050,69074,69082,69086,69094,69107,69128,69156,69184,69189,69211,69231,69250,69258,69286,69308,69328,69348,69368,69388,69408,69416,69436,69444,69448,69461,69469,69477,69485,69498,69511,69524,69537,69550,69563,69576,69584,69592,69600,69605,69610,69615,69620,69625,69630,69635,69640,69645,69650,69655,69660,69665,69673,69681,69689,69693,69713,69732,69752,69772,69792,69812,69816,69821,69841,69846,69856,69861,69866,69886,69908,69913,69923,69927,69931,69936,69941,69970,69984,69999,70003,70007,70011,70016,70027,70040,70045,70050,70055,70060,70065,70069,70074,70079,70088,70093,70098,70110,70115,70122,70126,70131,70141,70146,70156,70161,70189,70210,70220,70240,70258,70275,70292,70309,70326,70330,70340,70345,70350,70355,70366,70370,70374,70378,70383,70388,70409,70421,70426,70431,70436,70450,70455,70462,70466,70470,70478,70482,70490,70494],{"__ignoreMap":23},[28,68947,68948,68950,68952,68954],{"class":30,"line":31},[28,68949,51348],{"class":211},[28,68951,51352],{"class":51351},[28,68953,51355],{"class":34},[28,68955,51358],{"class":211},[28,68957,68958,68960,68962,68964,68966,68968],{"class":30,"line":42},[28,68959,1120],{"class":211},[28,68961,50686],{"class":51351},[28,68963,51367],{"class":34},[28,68965,257],{"class":211},[28,68967,51372],{"class":64},[28,68969,51358],{"class":211},[28,68971,68972],{"class":30,"line":50},[28,68973,2477],{"emptyLinePlaceholder":134},[28,68975,68976,68978,68980],{"class":30,"line":58},[28,68977,1120],{"class":211},[28,68979,51385],{"class":51351},[28,68981,51358],{"class":211},[28,68983,68984,68986,68988,68990,68992,68994],{"class":30,"line":70},[28,68985,52195],{"class":211},[28,68987,51395],{"class":51351},[28,68989,51398],{"class":34},[28,68991,257],{"class":211},[28,68993,51403],{"class":64},[28,68995,59178],{"class":211},[28,68997,68998,69000,69002,69004,69006,69008,69010,69012,69014],{"class":30,"line":78},[28,68999,52195],{"class":211},[28,69001,51395],{"class":51351},[28,69003,14997],{"class":34},[28,69005,257],{"class":211},[28,69007,51442],{"class":64},[28,69009,51422],{"class":34},[28,69011,257],{"class":211},[28,69013,51449],{"class":64},[28,69015,59178],{"class":211},[28,69017,69018,69020,69022,69024,69026,69028,69030,69032,69035],{"class":30,"line":86},[28,69019,52195],{"class":211},[28,69021,51395],{"class":51351},[28,69023,51414],{"class":34},[28,69025,257],{"class":211},[28,69027,51419],{"class":64},[28,69029,51422],{"class":34},[28,69031,257],{"class":211},[28,69033,69034],{"class":64},"\"ie=edge\"",[28,69036,59178],{"class":211},[28,69038,69039,69041,69043,69046,69048],{"class":30,"line":97},[28,69040,52195],{"class":211},[28,69042,51458],{"class":51351},[28,69044,69045],{"class":211},">学生信息管理\u003C\u002F",[28,69047,51458],{"class":51351},[28,69049,51358],{"class":211},[28,69051,69052,69054,69057,69060,69062,69065,69067,69069,69072],{"class":30,"line":108},[28,69053,52195],{"class":211},[28,69055,69056],{"class":51351},"link",[28,69058,69059],{"class":34}," rel",[28,69061,257],{"class":211},[28,69063,69064],{"class":64},"\"stylesheet\"",[28,69066,61108],{"class":34},[28,69068,257],{"class":211},[28,69070,69071],{"class":64},"\"css\u002Findex.css\"",[28,69073,59178],{"class":211},[28,69075,69076,69078,69080],{"class":30,"line":1407},[28,69077,51836],{"class":211},[28,69079,51385],{"class":51351},[28,69081,51358],{"class":211},[28,69083,69084],{"class":30,"line":1690},[28,69085,2477],{"emptyLinePlaceholder":134},[28,69087,69088,69090,69092],{"class":30,"line":1695},[28,69089,1120],{"class":211},[28,69091,51851],{"class":51351},[28,69093,51358],{"class":211},[28,69095,69096,69098,69100,69103,69105],{"class":30,"line":1701},[28,69097,52195],{"class":211},[28,69099,10],{"class":51351},[28,69101,69102],{"class":211},">新增学员\u003C\u002F",[28,69104,10],{"class":51351},[28,69106,51358],{"class":211},[28,69108,69109,69111,69113,69115,69117,69119,69122,69124,69126],{"class":30,"line":1706},[28,69110,52195],{"class":211},[28,69112,66676],{"class":51351},[28,69114,53537],{"class":34},[28,69116,257],{"class":211},[28,69118,62715],{"class":64},[28,69120,69121],{"class":34}," autocomplete",[28,69123,257],{"class":211},[28,69125,31827],{"class":64},[28,69127,51358],{"class":211},[28,69129,69130,69133,69135,69137,69139,69141,69143,69145,69148,69150,69152,69154],{"class":30,"line":1720},[28,69131,69132],{"class":211},"    姓名：\u003C",[28,69134,53872],{"class":51351},[28,69136,53875],{"class":34},[28,69138,257],{"class":211},[28,69140,62750],{"class":64},[28,69142,53537],{"class":34},[28,69144,257],{"class":211},[28,69146,69147],{"class":64},"\"uname\"",[28,69149,14997],{"class":34},[28,69151,257],{"class":211},[28,69153,69147],{"class":64},[28,69155,59178],{"class":211},[28,69157,69158,69161,69163,69165,69167,69169,69171,69173,69176,69178,69180,69182],{"class":30,"line":1725},[28,69159,69160],{"class":211},"    年龄：\u003C",[28,69162,53872],{"class":51351},[28,69164,53875],{"class":34},[28,69166,257],{"class":211},[28,69168,62750],{"class":64},[28,69170,53537],{"class":34},[28,69172,257],{"class":211},[28,69174,69175],{"class":64},"\"age\"",[28,69177,14997],{"class":34},[28,69179,257],{"class":211},[28,69181,69175],{"class":64},[28,69183,59178],{"class":211},[28,69185,69186],{"class":30,"line":1731},[28,69187,69188],{"class":211},"    性别:\n",[28,69190,69191,69193,69196,69198,69200,69203,69205,69207,69209],{"class":30,"line":1752},[28,69192,51392],{"class":211},[28,69194,69195],{"class":51351},"select",[28,69197,14997],{"class":34},[28,69199,257],{"class":211},[28,69201,69202],{"class":64},"\"gender\"",[28,69204,53537],{"class":34},[28,69206,257],{"class":211},[28,69208,69202],{"class":64},[28,69210,51358],{"class":211},[28,69212,69213,69215,69218,69220,69222,69224,69227,69229],{"class":30,"line":1757},[28,69214,55285],{"class":211},[28,69216,69217],{"class":51351},"option",[28,69219,66702],{"class":34},[28,69221,257],{"class":211},[28,69223,10038],{"class":64},[28,69225,69226],{"class":211},">男\u003C\u002F",[28,69228,69217],{"class":51351},[28,69230,51358],{"class":211},[28,69232,69233,69235,69237,69239,69241,69243,69246,69248],{"class":30,"line":1771},[28,69234,55285],{"class":211},[28,69236,69217],{"class":51351},[28,69238,66702],{"class":34},[28,69240,257],{"class":211},[28,69242,10107],{"class":64},[28,69244,69245],{"class":211},">女\u003C\u002F",[28,69247,69217],{"class":51351},[28,69249,51358],{"class":211},[28,69251,69252,69254,69256],{"class":30,"line":1776},[28,69253,51827],{"class":211},[28,69255,69195],{"class":51351},[28,69257,51358],{"class":211},[28,69259,69260,69263,69265,69267,69269,69271,69273,69275,69278,69280,69282,69284],{"class":30,"line":1805},[28,69261,69262],{"class":211},"    薪资：\u003C",[28,69264,53872],{"class":51351},[28,69266,53875],{"class":34},[28,69268,257],{"class":211},[28,69270,62750],{"class":64},[28,69272,53537],{"class":34},[28,69274,257],{"class":211},[28,69276,69277],{"class":64},"\"salary\"",[28,69279,14997],{"class":34},[28,69281,257],{"class":211},[28,69283,69277],{"class":64},[28,69285,59178],{"class":211},[28,69287,69288,69291,69293,69295,69297,69300,69302,69304,69306],{"class":30,"line":1810},[28,69289,69290],{"class":211},"    就业城市：\u003C",[28,69292,69195],{"class":51351},[28,69294,14997],{"class":34},[28,69296,257],{"class":211},[28,69298,69299],{"class":64},"\"city\"",[28,69301,53537],{"class":34},[28,69303,257],{"class":211},[28,69305,69299],{"class":64},[28,69307,51358],{"class":211},[28,69309,69310,69312,69314,69316,69318,69321,69324,69326],{"class":30,"line":1827},[28,69311,55285],{"class":211},[28,69313,69217],{"class":51351},[28,69315,66702],{"class":34},[28,69317,257],{"class":211},[28,69319,69320],{"class":64},"\"北京\"",[28,69322,69323],{"class":211},">北京\u003C\u002F",[28,69325,69217],{"class":51351},[28,69327,51358],{"class":211},[28,69329,69330,69332,69334,69336,69338,69341,69344,69346],{"class":30,"line":1832},[28,69331,55285],{"class":211},[28,69333,69217],{"class":51351},[28,69335,66702],{"class":34},[28,69337,257],{"class":211},[28,69339,69340],{"class":64},"\"上海\"",[28,69342,69343],{"class":211},">上海\u003C\u002F",[28,69345,69217],{"class":51351},[28,69347,51358],{"class":211},[28,69349,69350,69352,69354,69356,69358,69361,69364,69366],{"class":30,"line":1837},[28,69351,55285],{"class":211},[28,69353,69217],{"class":51351},[28,69355,66702],{"class":34},[28,69357,257],{"class":211},[28,69359,69360],{"class":64},"\"广州\"",[28,69362,69363],{"class":211},">广州\u003C\u002F",[28,69365,69217],{"class":51351},[28,69367,51358],{"class":211},[28,69369,69370,69372,69374,69376,69378,69381,69384,69386],{"class":30,"line":1842},[28,69371,55285],{"class":211},[28,69373,69217],{"class":51351},[28,69375,66702],{"class":34},[28,69377,257],{"class":211},[28,69379,69380],{"class":64},"\"深圳\"",[28,69382,69383],{"class":211},">深圳\u003C\u002F",[28,69385,69217],{"class":51351},[28,69387,51358],{"class":211},[28,69389,69390,69392,69394,69396,69398,69401,69404,69406],{"class":30,"line":1856},[28,69391,55285],{"class":211},[28,69393,69217],{"class":51351},[28,69395,66702],{"class":34},[28,69397,257],{"class":211},[28,69399,69400],{"class":64},"\"曹县\"",[28,69402,69403],{"class":211},">曹县\u003C\u002F",[28,69405,69217],{"class":51351},[28,69407,51358],{"class":211},[28,69409,69410,69412,69414],{"class":30,"line":1861},[28,69411,51827],{"class":211},[28,69413,69195],{"class":51351},[28,69415,51358],{"class":211},[28,69417,69418,69420,69422,69424,69426,69429,69432,69434],{"class":30,"line":2654},[28,69419,51392],{"class":211},[28,69421,53938],{"class":51351},[28,69423,53537],{"class":34},[28,69425,257],{"class":211},[28,69427,69428],{"class":64},"\"add\"",[28,69430,69431],{"class":211},">录入\u003C\u002F",[28,69433,53938],{"class":51351},[28,69435,51358],{"class":211},[28,69437,69438,69440,69442],{"class":30,"line":2668},[28,69439,52468],{"class":211},[28,69441,66676],{"class":51351},[28,69443,51358],{"class":211},[28,69445,69446],{"class":30,"line":2676},[28,69447,2477],{"emptyLinePlaceholder":134},[28,69449,69450,69452,69454,69457,69459],{"class":30,"line":2681},[28,69451,52195],{"class":211},[28,69453,10],{"class":51351},[28,69455,69456],{"class":211},">就业榜\u003C\u002F",[28,69458,10],{"class":51351},[28,69460,51358],{"class":211},[28,69462,69463,69465,69467],{"class":30,"line":2687},[28,69464,52195],{"class":211},[28,69466,347],{"class":51351},[28,69468,51358],{"class":211},[28,69470,69471,69473,69475],{"class":30,"line":2693},[28,69472,51392],{"class":211},[28,69474,350],{"class":51351},[28,69476,51358],{"class":211},[28,69478,69479,69481,69483],{"class":30,"line":2698},[28,69480,55285],{"class":211},[28,69482,353],{"class":51351},[28,69484,51358],{"class":211},[28,69486,69487,69489,69491,69494,69496],{"class":30,"line":8025},[28,69488,55353],{"class":211},[28,69490,356],{"class":51351},[28,69492,69493],{"class":211},">序号\u003C\u002F",[28,69495,356],{"class":51351},[28,69497,51358],{"class":211},[28,69499,69500,69502,69504,69507,69509],{"class":30,"line":8049},[28,69501,55353],{"class":211},[28,69503,356],{"class":51351},[28,69505,69506],{"class":211},">姓名\u003C\u002F",[28,69508,356],{"class":51351},[28,69510,51358],{"class":211},[28,69512,69513,69515,69517,69520,69522],{"class":30,"line":8054},[28,69514,55353],{"class":211},[28,69516,356],{"class":51351},[28,69518,69519],{"class":211},">年龄\u003C\u002F",[28,69521,356],{"class":51351},[28,69523,51358],{"class":211},[28,69525,69526,69528,69530,69533,69535],{"class":30,"line":8060},[28,69527,55353],{"class":211},[28,69529,356],{"class":51351},[28,69531,69532],{"class":211},">性别\u003C\u002F",[28,69534,356],{"class":51351},[28,69536,51358],{"class":211},[28,69538,69539,69541,69543,69546,69548],{"class":30,"line":8087},[28,69540,55353],{"class":211},[28,69542,356],{"class":51351},[28,69544,69545],{"class":211},">薪资\u003C\u002F",[28,69547,356],{"class":51351},[28,69549,51358],{"class":211},[28,69551,69552,69554,69556,69559,69561],{"class":30,"line":8092},[28,69553,55353],{"class":211},[28,69555,356],{"class":51351},[28,69557,69558],{"class":211},">就业城市\u003C\u002F",[28,69560,356],{"class":51351},[28,69562,51358],{"class":211},[28,69564,69565,69567,69569,69572,69574],{"class":30,"line":8098},[28,69566,55353],{"class":211},[28,69568,356],{"class":51351},[28,69570,69571],{"class":211},">操作\u003C\u002F",[28,69573,356],{"class":51351},[28,69575,51358],{"class":211},[28,69577,69578,69580,69582],{"class":30,"line":8110},[28,69579,55458],{"class":211},[28,69581,353],{"class":51351},[28,69583,51358],{"class":211},[28,69585,69586,69588,69590],{"class":30,"line":8122},[28,69587,51827],{"class":211},[28,69589,350],{"class":51351},[28,69591,51358],{"class":211},[28,69593,69594,69596,69598],{"class":30,"line":8134},[28,69595,51392],{"class":211},[28,69597,394],{"class":51351},[28,69599,51358],{"class":211},[28,69601,69602],{"class":30,"line":9793},[28,69603,69604],{"class":269},"      \u003C!-- \n",[28,69606,69607],{"class":30,"line":9818},[28,69608,69609],{"class":269},"        \u003Ctr>\n",[28,69611,69612],{"class":30,"line":9841},[28,69613,69614],{"class":269},"          \u003Ctd>1001\u003C\u002Ftd>\n",[28,69616,69617],{"class":30,"line":9865},[28,69618,69619],{"class":269},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[28,69621,69622],{"class":30,"line":9870},[28,69623,69624],{"class":269},"          \u003Ctd>19\u003C\u002Ftd>\n",[28,69626,69627],{"class":30,"line":9875},[28,69628,69629],{"class":269},"          \u003Ctd>男\u003C\u002Ftd>\n",[28,69631,69632],{"class":30,"line":9880},[28,69633,69634],{"class":269},"          \u003Ctd>15000\u003C\u002Ftd>\n",[28,69636,69637],{"class":30,"line":9889},[28,69638,69639],{"class":269},"          \u003Ctd>上海\u003C\u002Ftd>\n",[28,69641,69642],{"class":30,"line":9894},[28,69643,69644],{"class":269},"          \u003Ctd>\n",[28,69646,69647],{"class":30,"line":9900},[28,69648,69649],{"class":269},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[28,69651,69652],{"class":30,"line":9921},[28,69653,69654],{"class":269},"          \u003C\u002Ftd>\n",[28,69656,69657],{"class":30,"line":9927},[28,69658,69659],{"class":269},"        \u003C\u002Ftr> \n",[28,69661,69662],{"class":30,"line":9941},[28,69663,69664],{"class":269},"        -->\n",[28,69666,69667,69669,69671],{"class":30,"line":9947},[28,69668,51827],{"class":211},[28,69670,394],{"class":51351},[28,69672,51358],{"class":211},[28,69674,69675,69677,69679],{"class":30,"line":9974},[28,69676,52468],{"class":211},[28,69678,347],{"class":51351},[28,69680,51358],{"class":211},[28,69682,69683,69685,69687],{"class":30,"line":9983},[28,69684,52195],{"class":211},[28,69686,51864],{"class":51351},[28,69688,51358],{"class":211},[28,69690,69691],{"class":30,"line":9989},[28,69692,60009],{"class":269},[28,69694,69695,69697,69700,69702,69704,69706,69708,69711],{"class":30,"line":9997},[28,69696,11298],{"class":207},[28,69698,69699],{"class":38}," uname",[28,69701,13641],{"class":207},[28,69703,54447],{"class":211},[28,69705,54450],{"class":34},[28,69707,212],{"class":211},[28,69709,69710],{"class":64},"'.uname'",[28,69712,218],{"class":211},[28,69714,69715,69717,69719,69721,69723,69725,69727,69730],{"class":30,"line":10002},[28,69716,11298],{"class":207},[28,69718,15766],{"class":38},[28,69720,13641],{"class":207},[28,69722,54447],{"class":211},[28,69724,54450],{"class":34},[28,69726,212],{"class":211},[28,69728,69729],{"class":64},"'.age'",[28,69731,218],{"class":211},[28,69733,69734,69736,69739,69741,69743,69745,69747,69750],{"class":30,"line":16681},[28,69735,11298],{"class":207},[28,69737,69738],{"class":38}," gender",[28,69740,13641],{"class":207},[28,69742,54447],{"class":211},[28,69744,54450],{"class":34},[28,69746,212],{"class":211},[28,69748,69749],{"class":64},"'.gender'",[28,69751,218],{"class":211},[28,69753,69754,69756,69759,69761,69763,69765,69767,69770],{"class":30,"line":16687},[28,69755,11298],{"class":207},[28,69757,69758],{"class":38}," salary",[28,69760,13641],{"class":207},[28,69762,54447],{"class":211},[28,69764,54450],{"class":34},[28,69766,212],{"class":211},[28,69768,69769],{"class":64},"'.salary'",[28,69771,218],{"class":211},[28,69773,69774,69776,69779,69781,69783,69785,69787,69790],{"class":30,"line":16710},[28,69775,11298],{"class":207},[28,69777,69778],{"class":38}," city",[28,69780,13641],{"class":207},[28,69782,54447],{"class":211},[28,69784,54450],{"class":34},[28,69786,212],{"class":211},[28,69788,69789],{"class":64},"'.city'",[28,69791,218],{"class":211},[28,69793,69794,69796,69799,69801,69803,69805,69807,69810],{"class":30,"line":16716},[28,69795,11298],{"class":207},[28,69797,69798],{"class":38}," tbody",[28,69800,13641],{"class":207},[28,69802,54447],{"class":211},[28,69804,54450],{"class":34},[28,69806,212],{"class":211},[28,69808,69809],{"class":64},"'tbody'",[28,69811,218],{"class":211},[28,69813,69814],{"class":30,"line":16739},[28,69815,2477],{"emptyLinePlaceholder":134},[28,69817,69818],{"class":30,"line":16753},[28,69819,69820],{"class":269},"    \u002F\u002F 获取所有带有name属性的元素\n",[28,69822,69823,69825,69828,69830,69832,69834,69836,69839],{"class":30,"line":16773},[28,69824,11298],{"class":207},[28,69826,69827],{"class":38}," items",[28,69829,13641],{"class":207},[28,69831,54447],{"class":211},[28,69833,55732],{"class":34},[28,69835,212],{"class":211},[28,69837,69838],{"class":64},"'[name]'",[28,69840,218],{"class":211},[28,69842,69843],{"class":30,"line":16779},[28,69844,69845],{"class":269},"    \u002F\u002F 声明一个空的数组\n",[28,69847,69848,69850,69852,69854],{"class":30,"line":16790},[28,69849,11298],{"class":207},[28,69851,57746],{"class":38},[28,69853,13641],{"class":207},[28,69855,51889],{"class":211},[28,69857,69858],{"class":30,"line":16813},[28,69859,69860],{"class":269},"    \u002F\u002F 1.录入模块\n",[28,69862,69863],{"class":30,"line":16835},[28,69864,69865],{"class":269},"    \u002F\u002F 1.1这是一个表单提交事件\n",[28,69867,69868,69870,69873,69875,69877,69879,69881,69884],{"class":30,"line":16840},[28,69869,11298],{"class":207},[28,69871,69872],{"class":38}," info",[28,69874,13641],{"class":207},[28,69876,54447],{"class":211},[28,69878,54450],{"class":34},[28,69880,212],{"class":211},[28,69882,69883],{"class":64},"'.info'",[28,69885,218],{"class":211},[28,69887,69888,69891,69893,69895,69898,69900,69902,69904,69906],{"class":30,"line":16846},[28,69889,69890],{"class":211},"    info.",[28,69892,57864],{"class":34},[28,69894,212],{"class":211},[28,69896,69897],{"class":64},"'submit'",[28,69899,12512],{"class":211},[28,69901,54500],{"class":207},[28,69903,1736],{"class":211},[28,69905,285],{"class":5293},[28,69907,12519],{"class":211},[28,69909,69910],{"class":30,"line":16860},[28,69911,69912],{"class":269},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[28,69914,69915,69918,69921],{"class":30,"line":16873},[28,69916,69917],{"class":211},"      e.",[28,69919,69920],{"class":34},"preventDefault",[28,69922,2053],{"class":211},[28,69924,69925],{"class":30,"line":16878},[28,69926,60063],{"class":269},[28,69928,69929],{"class":30,"line":16892},[28,69930,2477],{"emptyLinePlaceholder":134},[28,69932,69933],{"class":30,"line":16897},[28,69934,69935],{"class":269},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[28,69937,69938],{"class":30,"line":16903},[28,69939,69940],{"class":269},"      \u002F\u002F 先遍历循环\n",[28,69942,69943,69945,69947,69949,69951,69953,69955,69957,69959,69962,69964,69966,69968],{"class":30,"line":16908},[28,69944,52335],{"class":207},[28,69946,1736],{"class":211},[28,69948,51898],{"class":207},[28,69950,9515],{"class":211},[28,69952,257],{"class":207},[28,69954,4170],{"class":38},[28,69956,9522],{"class":211},[28,69958,1120],{"class":207},[28,69960,69961],{"class":211}," items.",[28,69963,52019],{"class":38},[28,69965,3291],{"class":211},[28,69967,2369],{"class":207},[28,69969,12519],{"class":211},[28,69971,69972,69974,69977,69979,69982],{"class":30,"line":16922},[28,69973,2574],{"class":207},[28,69975,69976],{"class":211}," (items[i].value ",[28,69978,54537],{"class":207},[28,69980,69981],{"class":64}," ''",[28,69983,12519],{"class":211},[28,69985,69986,69989,69992,69994,69997],{"class":30,"line":16927},[28,69987,69988],{"class":207},"          return",[28,69990,69991],{"class":34}," alert",[28,69993,212],{"class":211},[28,69995,69996],{"class":64},"'输入内容不能为空'",[28,69998,218],{"class":211},[28,70000,70001],{"class":30,"line":16932},[28,70002,2606],{"class":211},[28,70004,70005],{"class":30,"line":16946},[28,70006,52449],{"class":211},[28,70008,70009],{"class":30,"line":16958},[28,70010,2477],{"emptyLinePlaceholder":134},[28,70012,70013],{"class":30,"line":16963},[28,70014,70015],{"class":269},"      \u002F\u002F 创建新的对象\n",[28,70017,70018,70020,70023,70025],{"class":30,"line":16976},[28,70019,58279],{"class":207},[28,70021,70022],{"class":38}," obj",[28,70024,13641],{"class":207},[28,70026,15649],{"class":211},[28,70028,70029,70032,70034,70036,70038],{"class":30,"line":16981},[28,70030,70031],{"class":211},"        stuID: arr.",[28,70033,52019],{"class":38},[28,70035,45617],{"class":207},[28,70037,25189],{"class":38},[28,70039,31517],{"class":211},[28,70041,70042],{"class":30,"line":16986},[28,70043,70044],{"class":211},"        uname: uname.value,\n",[28,70046,70047],{"class":30,"line":16991},[28,70048,70049],{"class":211},"        age: age.value,\n",[28,70051,70052],{"class":30,"line":17004},[28,70053,70054],{"class":211},"        gender: gender.value,\n",[28,70056,70057],{"class":30,"line":17009},[28,70058,70059],{"class":211},"        salary: salary.value,\n",[28,70061,70062],{"class":30,"line":32684},[28,70063,70064],{"class":211},"        city: city.value\n",[28,70066,70067],{"class":30,"line":32690},[28,70068,52449],{"class":211},[28,70070,70071],{"class":30,"line":32696},[28,70072,70073],{"class":269},"      \u002F\u002F console.log(obj);\n",[28,70075,70076],{"class":30,"line":32702},[28,70077,70078],{"class":269},"      \u002F\u002F 追加到数组里面\n",[28,70080,70081,70083,70085],{"class":30,"line":32708},[28,70082,58058],{"class":211},[28,70084,51935],{"class":34},[28,70086,70087],{"class":211},"(obj)\n",[28,70089,70090],{"class":30,"line":32719},[28,70091,70092],{"class":269},"      \u002F\u002F console.log(arr);\n",[28,70094,70095],{"class":30,"line":32725},[28,70096,70097],{"class":269},"      \u002F\u002F 清空表单  reset重置表单\n",[28,70099,70100,70103,70105,70108],{"class":30,"line":32745},[28,70101,70102],{"class":38},"      this",[28,70104,768],{"class":211},[28,70106,70107],{"class":34},"reset",[28,70109,2053],{"class":211},[28,70111,70112],{"class":30,"line":32751},[28,70113,70114],{"class":269},"      \u002F\u002F 调用渲染函数\n",[28,70116,70117,70120],{"class":30,"line":32762},[28,70118,70119],{"class":34},"      render",[28,70121,2053],{"class":211},[28,70123,70124],{"class":30,"line":32768},[28,70125,33512],{"class":211},[28,70127,70128],{"class":30,"line":32774},[28,70129,70130],{"class":269},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[28,70132,70133,70136,70139],{"class":30,"line":32780},[28,70134,70135],{"class":207},"    function",[28,70137,70138],{"class":34}," render",[28,70140,10930],{"class":211},[28,70142,70143],{"class":30,"line":32786},[28,70144,70145],{"class":269},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[28,70147,70148,70151,70153],{"class":30,"line":32792},[28,70149,70150],{"class":211},"      tbody.innerHTML ",[28,70152,257],{"class":207},[28,70154,70155],{"class":64}," ''\n",[28,70157,70158],{"class":30,"line":32798},[28,70159,70160],{"class":269},"      \u002F\u002F 遍历数组\n",[28,70162,70163,70165,70167,70169,70171,70173,70175,70177,70179,70181,70183,70185,70187],{"class":30,"line":32804},[28,70164,52335],{"class":207},[28,70166,1736],{"class":211},[28,70168,51898],{"class":207},[28,70170,9515],{"class":211},[28,70172,257],{"class":207},[28,70174,4170],{"class":38},[28,70176,9522],{"class":211},[28,70178,1120],{"class":207},[28,70180,52016],{"class":211},[28,70182,52019],{"class":38},[28,70184,3291],{"class":211},[28,70186,2369],{"class":207},[28,70188,12519],{"class":211},[28,70190,70191,70193,70196,70198,70200,70203,70205,70208],{"class":30,"line":32824},[28,70192,61321],{"class":207},[28,70194,70195],{"class":38}," tr",[28,70197,13641],{"class":207},[28,70199,54447],{"class":211},[28,70201,70202],{"class":34},"createElement",[28,70204,212],{"class":211},[28,70206,70207],{"class":64},"'tr'",[28,70209,218],{"class":211},[28,70211,70212,70215,70217],{"class":30,"line":32830},[28,70213,70214],{"class":211},"        tr.innerHTML ",[28,70216,257],{"class":207},[28,70218,70219],{"class":64}," `\n",[28,70221,70222,70225,70227,70229,70231,70234,70237],{"class":30,"line":32846},[28,70223,70224],{"class":64},"        \u003Ctd>${",[28,70226,3957],{"class":211},[28,70228,1100],{"class":64},[28,70230,651],{"class":211},[28,70232,70233],{"class":64},"].",[28,70235,70236],{"class":211},"stuID",[28,70238,70239],{"class":64},"}\u003C\u002Ftd>\n",[28,70241,70242,70245,70247,70249,70251,70253,70256],{"class":30,"line":32852},[28,70243,70244],{"class":64},"          \u003Ctd>${",[28,70246,3957],{"class":211},[28,70248,1100],{"class":64},[28,70250,651],{"class":211},[28,70252,70233],{"class":64},[28,70254,70255],{"class":211},"uname",[28,70257,70239],{"class":64},[28,70259,70260,70262,70264,70266,70268,70270,70273],{"class":30,"line":32866},[28,70261,70244],{"class":64},[28,70263,3957],{"class":211},[28,70265,1100],{"class":64},[28,70267,651],{"class":211},[28,70269,70233],{"class":64},[28,70271,70272],{"class":211},"age",[28,70274,70239],{"class":64},[28,70276,70277,70279,70281,70283,70285,70287,70290],{"class":30,"line":32872},[28,70278,70244],{"class":64},[28,70280,3957],{"class":211},[28,70282,1100],{"class":64},[28,70284,651],{"class":211},[28,70286,70233],{"class":64},[28,70288,70289],{"class":211},"gender",[28,70291,70239],{"class":64},[28,70293,70294,70296,70298,70300,70302,70304,70307],{"class":30,"line":32887},[28,70295,70244],{"class":64},[28,70297,3957],{"class":211},[28,70299,1100],{"class":64},[28,70301,651],{"class":211},[28,70303,70233],{"class":64},[28,70305,70306],{"class":211},"salary",[28,70308,70239],{"class":64},[28,70310,70311,70313,70315,70317,70319,70321,70324],{"class":30,"line":32893},[28,70312,70244],{"class":64},[28,70314,3957],{"class":211},[28,70316,1100],{"class":64},[28,70318,651],{"class":211},[28,70320,70233],{"class":64},[28,70322,70323],{"class":211},"city",[28,70325,70239],{"class":64},[28,70327,70328],{"class":30,"line":32902},[28,70329,69644],{"class":64},[28,70331,70332,70335,70337],{"class":30,"line":32908},[28,70333,70334],{"class":64},"            \u003Ca href=\"javascript:\" data-id=${",[28,70336,651],{"class":211},[28,70338,70339],{"class":64},"}>删除\u003C\u002Fa>\n",[28,70341,70342],{"class":30,"line":32917},[28,70343,70344],{"class":64},"          \u003C\u002Ftd> \n",[28,70346,70347],{"class":30,"line":32923},[28,70348,70349],{"class":64},"          `\n",[28,70351,70352],{"class":30,"line":32929},[28,70353,70354],{"class":269},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[28,70356,70357,70360,70363],{"class":30,"line":32938},[28,70358,70359],{"class":211},"        tbody.",[28,70361,70362],{"class":34},"appendChild",[28,70364,70365],{"class":211},"(tr)\n",[28,70367,70368],{"class":30,"line":32944},[28,70369,52449],{"class":211},[28,70371,70372],{"class":30,"line":32955},[28,70373,2264],{"class":211},[28,70375,70376],{"class":30,"line":32961},[28,70377,2477],{"emptyLinePlaceholder":134},[28,70379,70380],{"class":30,"line":32980},[28,70381,70382],{"class":269},"    \u002F\u002F 3.删除委托\n",[28,70384,70385],{"class":30,"line":32986},[28,70386,70387],{"class":269},"    \u002F\u002F 3.1 事件委托 tbody\n",[28,70389,70390,70393,70395,70397,70399,70401,70403,70405,70407],{"class":30,"line":32997},[28,70391,70392],{"class":211},"    tbody.",[28,70394,57864],{"class":34},[28,70396,212],{"class":211},[28,70398,57869],{"class":64},[28,70400,12512],{"class":211},[28,70402,54500],{"class":207},[28,70404,1736],{"class":211},[28,70406,285],{"class":5293},[28,70408,12519],{"class":211},[28,70410,70411,70413,70415,70417,70419],{"class":30,"line":33003},[28,70412,54531],{"class":207},[28,70414,67085],{"class":211},[28,70416,54537],{"class":207},[28,70418,68307],{"class":64},[28,70420,12519],{"class":211},[28,70422,70423],{"class":30,"line":33023},[28,70424,70425],{"class":269},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[28,70427,70428],{"class":30,"line":33039},[28,70429,70430],{"class":269},"        \u002F\u002F console.log(e.target.dataset.id);\n",[28,70432,70433],{"class":30,"line":33045},[28,70434,70435],{"class":269},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[28,70437,70438,70441,70443,70446,70448],{"class":30,"line":33059},[28,70439,70440],{"class":211},"        arr.",[28,70442,58061],{"class":34},[28,70444,70445],{"class":211},"(e.target.dataset.id, ",[28,70447,427],{"class":38},[28,70449,218],{"class":211},[28,70451,70452],{"class":30,"line":33065},[28,70453,70454],{"class":269},"        \u002F\u002F 重新渲染一次\n",[28,70456,70457,70460],{"class":30,"line":33071},[28,70458,70459],{"class":34},"        render",[28,70461,2053],{"class":211},[28,70463,70464],{"class":30,"line":33082},[28,70465,52449],{"class":211},[28,70467,70468],{"class":30,"line":33088},[28,70469,33512],{"class":211},[28,70471,70472,70474,70476],{"class":30,"line":33094},[28,70473,52468],{"class":211},[28,70475,51864],{"class":51351},[28,70477,51358],{"class":211},[28,70479,70480],{"class":30,"line":33104},[28,70481,2477],{"emptyLinePlaceholder":134},[28,70483,70484,70486,70488],{"class":30,"line":33110},[28,70485,51836],{"class":211},[28,70487,51851],{"class":51351},[28,70489,51358],{"class":211},[28,70491,70492],{"class":30,"line":33121},[28,70493,2477],{"emptyLinePlaceholder":134},[28,70495,70496,70498,70500],{"class":30,"line":33127},[28,70497,51836],{"class":211},[28,70499,50686],{"class":51351},[28,70501,51358],{"class":211},[14,70503,70504],{},"样式：",[18,70506,70510],{"className":70507,"code":70508,"language":70509,"meta":23,"style":23},"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",[25,70511,70512,70517,70527,70536,70540,70544,70549,70559,70564,70568,70573,70583,70588,70597,70601,70605,70610,70615,70625,70635,70640,70644,70649,70658,70668,70673,70683,70693,70697,70702,70710,70714,70719,70724,70729,70737,70746,70750,70755,70764,70768,70773,70782,70786,70791,70800,70809,70817,70821,70826,70835,70845,70854,70864,70870,70879,70889,70899,70903,70908,70917,70925,70935,70943,70952,70961,70971,70979,70983,70988,70997],{"__ignoreMap":23},[28,70513,70514],{"class":30,"line":31},[28,70515,70516],{"class":211},"* {\n",[28,70518,70519,70522,70524],{"class":30,"line":42},[28,70520,70521],{"class":51351},"  margin",[28,70523,51488],{"class":211},[28,70525,70526],{"class":64},"0;\n",[28,70528,70529,70532,70534],{"class":30,"line":50},[28,70530,70531],{"class":64},"  padding",[28,70533,51488],{"class":211},[28,70535,70526],{"class":64},[28,70537,70538],{"class":30,"line":58},[28,70539,1643],{"class":211},[28,70541,70542],{"class":30,"line":70},[28,70543,2477],{"emptyLinePlaceholder":134},[28,70545,70546],{"class":30,"line":78},[28,70547,70548],{"class":64},"a {\n",[28,70550,70551,70554,70556],{"class":30,"line":86},[28,70552,70553],{"class":51351},"  text-decoration",[28,70555,51488],{"class":211},[28,70557,70558],{"class":64},"none;\n",[28,70560,70561],{"class":30,"line":97},[28,70562,70563],{"class":64},"  color:#721c24;\n",[28,70565,70566],{"class":30,"line":108},[28,70567,1643],{"class":211},[28,70569,70570],{"class":30,"line":1407},[28,70571,70572],{"class":64},"h1 {\n",[28,70574,70575,70578,70580],{"class":30,"line":1690},[28,70576,70577],{"class":51351},"  text-align",[28,70579,51488],{"class":211},[28,70581,70582],{"class":64},"center;\n",[28,70584,70585],{"class":30,"line":1695},[28,70586,70587],{"class":64},"  color:#333;\n",[28,70589,70590,70592,70594],{"class":30,"line":1701},[28,70591,70521],{"class":51351},[28,70593,51488],{"class":211},[28,70595,70596],{"class":64},"20px 0;\n",[28,70598,70599],{"class":30,"line":1706},[28,70600,2751],{"class":211},[28,70602,70603],{"class":30,"line":1720},[28,70604,1643],{"class":211},[28,70606,70607],{"class":30,"line":1725},[28,70608,70609],{"class":64},"table {\n",[28,70611,70612],{"class":30,"line":1731},[28,70613,70614],{"class":64},"  margin:0 auto;\n",[28,70616,70617,70620,70622],{"class":30,"line":1752},[28,70618,70619],{"class":51351},"  width",[28,70621,51488],{"class":211},[28,70623,70624],{"class":64},"800px;\n",[28,70626,70627,70630,70632],{"class":30,"line":1757},[28,70628,70629],{"class":51351},"  border-collapse",[28,70631,51488],{"class":211},[28,70633,70634],{"class":64},"collapse;\n",[28,70636,70637],{"class":30,"line":1771},[28,70638,70639],{"class":64},"  color:#004085;\n",[28,70641,70642],{"class":30,"line":1776},[28,70643,1643],{"class":211},[28,70645,70646],{"class":30,"line":1805},[28,70647,70648],{"class":64},"th {\n",[28,70650,70651,70653,70655],{"class":30,"line":1810},[28,70652,70531],{"class":51351},[28,70654,51488],{"class":211},[28,70656,70657],{"class":64},"10px;\n",[28,70659,70660,70663,70665],{"class":30,"line":1827},[28,70661,70662],{"class":51351},"  background",[28,70664,51488],{"class":211},[28,70666,70667],{"class":269},"#cfe5ff;\n",[28,70669,70670],{"class":30,"line":1832},[28,70671,70672],{"class":211},"  \n",[28,70674,70675,70678,70680],{"class":30,"line":1837},[28,70676,70677],{"class":51351},"  font-size",[28,70679,51488],{"class":211},[28,70681,70682],{"class":64},"20px;\n",[28,70684,70685,70688,70690],{"class":30,"line":1842},[28,70686,70687],{"class":51351},"  font-weight",[28,70689,51488],{"class":211},[28,70691,70692],{"class":64},"400;\n",[28,70694,70695],{"class":30,"line":1856},[28,70696,1643],{"class":211},[28,70698,70699],{"class":30,"line":1861},[28,70700,70701],{"class":64},"td,th {\n",[28,70703,70704,70707],{"class":30,"line":2654},[28,70705,70706],{"class":64},"  border:1px solid",[28,70708,70709],{"class":269}," #b8daff;\n",[28,70711,70712],{"class":30,"line":2668},[28,70713,1643],{"class":211},[28,70715,70716],{"class":30,"line":2676},[28,70717,70718],{"class":64},"td {\n",[28,70720,70721],{"class":30,"line":2681},[28,70722,70723],{"class":64},"  padding:10px;\n",[28,70725,70726],{"class":30,"line":2687},[28,70727,70728],{"class":64},"  color:#666;\n",[28,70730,70731,70733,70735],{"class":30,"line":2693},[28,70732,70577],{"class":51351},[28,70734,51488],{"class":211},[28,70736,70582],{"class":64},[28,70738,70739,70741,70743],{"class":30,"line":2698},[28,70740,70677],{"class":51351},[28,70742,51488],{"class":211},[28,70744,70745],{"class":64},"16px;\n",[28,70747,70748],{"class":30,"line":8025},[28,70749,1643],{"class":211},[28,70751,70752],{"class":30,"line":8049},[28,70753,70754],{"class":64},"tbody tr {\n",[28,70756,70757,70759,70761],{"class":30,"line":8054},[28,70758,70662],{"class":51351},[28,70760,51488],{"class":211},[28,70762,70763],{"class":269},"#fff;\n",[28,70765,70766],{"class":30,"line":8060},[28,70767,1643],{"class":211},[28,70769,70770],{"class":30,"line":8087},[28,70771,70772],{"class":64},"tbody tr:hover {\n",[28,70774,70775,70777,70779],{"class":30,"line":8092},[28,70776,70662],{"class":51351},[28,70778,51488],{"class":211},[28,70780,70781],{"class":269},"#e1ecf8;\n",[28,70783,70784],{"class":30,"line":8098},[28,70785,1643],{"class":211},[28,70787,70788],{"class":30,"line":8110},[28,70789,70790],{"class":64},".info {\n",[28,70792,70793,70795,70797],{"class":30,"line":8122},[28,70794,70619],{"class":51351},[28,70796,51488],{"class":211},[28,70798,70799],{"class":64},"900px;\n",[28,70801,70802,70804,70806],{"class":30,"line":8134},[28,70803,70521],{"class":51351},[28,70805,51488],{"class":211},[28,70807,70808],{"class":64},"50px auto;\n",[28,70810,70811,70813,70815],{"class":30,"line":9793},[28,70812,70577],{"class":51351},[28,70814,51488],{"class":211},[28,70816,70582],{"class":64},[28,70818,70819],{"class":30,"line":9818},[28,70820,1643],{"class":211},[28,70822,70823],{"class":30,"line":9841},[28,70824,70825],{"class":64},".info  input, .info select {\n",[28,70827,70828,70830,70832],{"class":30,"line":9865},[28,70829,70619],{"class":51351},[28,70831,51488],{"class":211},[28,70833,70834],{"class":64},"80px;\n",[28,70836,70837,70840,70842],{"class":30,"line":9870},[28,70838,70839],{"class":51351},"  height",[28,70841,51488],{"class":211},[28,70843,70844],{"class":64},"27px;\n",[28,70846,70847,70850,70852],{"class":30,"line":9875},[28,70848,70849],{"class":51351},"  outline",[28,70851,51488],{"class":211},[28,70853,70558],{"class":64},[28,70855,70856,70859,70861],{"class":30,"line":9880},[28,70857,70858],{"class":51351},"  border-radius",[28,70860,51488],{"class":211},[28,70862,70863],{"class":64},"5px;\n",[28,70865,70866,70868],{"class":30,"line":9889},[28,70867,70706],{"class":64},[28,70869,70709],{"class":269},[28,70871,70872,70875,70877],{"class":30,"line":9894},[28,70873,70874],{"class":51351},"  padding-left",[28,70876,51488],{"class":211},[28,70878,70863],{"class":64},[28,70880,70881,70884,70886],{"class":30,"line":9900},[28,70882,70883],{"class":51351},"  box-sizing",[28,70885,51488],{"class":211},[28,70887,70888],{"class":64},"border-box;\n",[28,70890,70891,70894,70896],{"class":30,"line":9921},[28,70892,70893],{"class":51351},"  margin-right",[28,70895,51488],{"class":211},[28,70897,70898],{"class":64},"15px;\n",[28,70900,70901],{"class":30,"line":9927},[28,70902,1643],{"class":211},[28,70904,70905],{"class":30,"line":9941},[28,70906,70907],{"class":64},".info button {\n",[28,70909,70910,70912,70914],{"class":30,"line":9947},[28,70911,70619],{"class":51351},[28,70913,51488],{"class":211},[28,70915,70916],{"class":64},"60px;\n",[28,70918,70919,70921,70923],{"class":30,"line":9974},[28,70920,70839],{"class":51351},[28,70922,51488],{"class":211},[28,70924,70844],{"class":64},[28,70926,70927,70930,70932],{"class":30,"line":9983},[28,70928,70929],{"class":51351},"  background-color",[28,70931,51488],{"class":211},[28,70933,70934],{"class":269},"#004085;\n",[28,70936,70937,70939,70941],{"class":30,"line":9989},[28,70938,70849],{"class":51351},[28,70940,51488],{"class":211},[28,70942,70558],{"class":64},[28,70944,70945,70948,70950],{"class":30,"line":9997},[28,70946,70947],{"class":51351},"  border",[28,70949,51488],{"class":211},[28,70951,70526],{"class":64},[28,70953,70954,70957,70959],{"class":30,"line":10002},[28,70955,70956],{"class":51351},"  color",[28,70958,51488],{"class":211},[28,70960,70763],{"class":269},[28,70962,70963,70966,70968],{"class":30,"line":16681},[28,70964,70965],{"class":51351},"  cursor",[28,70967,51488],{"class":211},[28,70969,70970],{"class":64},"pointer;\n",[28,70972,70973,70975,70977],{"class":30,"line":16687},[28,70974,70858],{"class":51351},[28,70976,51488],{"class":211},[28,70978,70863],{"class":64},[28,70980,70981],{"class":30,"line":16710},[28,70982,1643],{"class":211},[28,70984,70985],{"class":30,"line":16716},[28,70986,70987],{"class":64},".info .age {\n",[28,70989,70990,70992,70994],{"class":30,"line":16739},[28,70991,70619],{"class":51351},[28,70993,51488],{"class":211},[28,70995,70996],{"class":64},"50px;\n",[28,70998,70999],{"class":30,"line":16753},[28,71000,1643],{"class":211},[14,71002,71003],{},"思路：",[14,71005,71006],{},[1540,71007],{"alt":23,"src":71008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,71010,71011],{},[1540,71012],{"alt":23,"src":71013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,71015,71016],{},[1540,71017],{"alt":23,"src":71018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[177,71020,71022],{"id":71021},"_3315-重绘回流","3.3.15 重绘回流",[14,71024,71025],{},[1540,71026],{"alt":23,"src":71027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,71029,71030],{},[1540,71031],{"alt":23,"src":71032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,71034,71035],{},[1540,71036],{"alt":23,"src":71037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[149,71039,71041],{"id":71040},"_34-bom","3.4 BOM",[14,71043,71044],{},[1540,71045],{"alt":23,"src":71046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71048,71049],{},"平时写的document省略了window而已，实际上是window.document",[14,71051,71052],{},"函数也是这样，调用的时候实际为window.fn()",[14,71054,71055],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71057,71058],{},"window大部分情况下可以省略",[177,71060,71062],{"id":71061},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71064,71065],{},"只执行一次",[14,71067,71068],{},[1540,71069],{"alt":23,"src":71070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71072,71073],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71075,71076],{},[1540,71077],{"alt":23,"src":71078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[177,71080,71082],{"id":71081},"_342-js执行机制","3.4.2 JS执行机制",[14,71084,71085],{},[1540,71086],{"alt":23,"src":71087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71089,71090],{},"两个的结果都是1111 3333 2222",[14,71092,71093],{},[1540,71094],{"alt":23,"src":71095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71097,71098],{},[1540,71099],{"alt":23,"src":71100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71102,71103],{},[1540,71104],{"alt":23,"src":71105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71107,71108],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71110,71111],{},"工作流程：",[14,71113,71114],{},[1540,71115],{"alt":23,"src":71116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71118,71119],{},[1540,71120],{"alt":23,"src":71121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71123,71124],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71126,71127],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[177,71129,71131],{"id":71130},"_343-location对象","3.4.3 location对象",[14,71133,71134],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71136,71137],{},[1540,71138],{"alt":23,"src":71139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71141,71142],{},"href可以跳转页面",[161,71144,71145],{},[119,71146,71147],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71149,71150],{},"search得到提交信息之后网站后边的地址",[14,71152,71153],{},[1540,71154],{"alt":23,"src":71155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71157,71158],{},[1540,71159],{"alt":23,"src":71160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[161,71162,71163],{"start":42},[119,71164,71165],{},"hash:这个获取单页面应用#后边的地址",[14,71167,71168],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71170,71171],{},[1540,71172],{"alt":23,"src":71173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[18,71175,71177],{"className":53118,"code":71176,"language":53120,"meta":23,"style":23},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[25,71178,71179,71199,71219],{"__ignoreMap":23},[28,71180,71181,71183,71185,71187,71189,71192,71195,71197],{"class":30,"line":31},[28,71182,52195],{"class":211},[28,71184,448],{"class":51351},[28,71186,61108],{"class":34},[28,71188,257],{"class":211},[28,71190,71191],{"class":64},"\"#\u002Fmy\"",[28,71193,71194],{"class":211},">我的\u003C\u002F",[28,71196,448],{"class":51351},[28,71198,51358],{"class":211},[28,71200,71201,71203,71205,71207,71209,71212,71215,71217],{"class":30,"line":42},[28,71202,52195],{"class":211},[28,71204,448],{"class":51351},[28,71206,61108],{"class":34},[28,71208,257],{"class":211},[28,71210,71211],{"class":64},"\"#\u002Ffriend\"",[28,71213,71214],{"class":211},">关注\u003C\u002F",[28,71216,448],{"class":51351},[28,71218,51358],{"class":211},[28,71220,71221,71223,71225,71227,71229,71232,71235,71237],{"class":30,"line":50},[28,71222,52195],{"class":211},[28,71224,448],{"class":51351},[28,71226,61108],{"class":34},[28,71228,257],{"class":211},[28,71230,71231],{"class":64},"\"#\u002Fdownload\"",[28,71233,71234],{"class":211},">下载\u003C\u002F",[28,71236,448],{"class":51351},[28,71238,51358],{"class":211},[14,71240,71241],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[161,71243,71244],{"start":50},[119,71245,71246,71247,71249,71250,71252],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53767,71248],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53767,71251],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[177,71254,71256],{"id":71255},"_345-navigator对象","3.4.5 navigator对象",[14,71258,71259],{},[1540,71260],{"alt":23,"src":71261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[18,71263,71267],{"className":71264,"code":71265,"language":71266,"meta":23,"style":23},"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",[25,71268,71269,71274,71285,71297,71302,71353,71394,71399,71412,71424,71429],{"__ignoreMap":23},[28,71270,71271],{"class":30,"line":31},[28,71272,71273],{"class":269},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[28,71275,71276,71278,71280,71282],{"class":30,"line":42},[28,71277,436],{"class":207},[28,71279,212],{"class":211},[28,71281,54500],{"class":207},[28,71283,71284],{"class":211}," () { \n",[28,71286,71287,71289,71292,71294],{"class":30,"line":50},[28,71288,6869],{"class":207},[28,71290,71291],{"class":38}," userAgent",[28,71293,13641],{"class":207},[28,71295,71296],{"class":211}," navigator.userAgent \n",[28,71298,71299],{"class":30,"line":58},[28,71300,71301],{"class":269},"\u002F\u002F 验证是否为Android或iPhone \n",[28,71303,71304,71306,71309,71311,71314,71317,71319,71321,71324,71326,71329,71333,71335,71337,71339,71342,71344,71346,71348,71350],{"class":30,"line":70},[28,71305,6869],{"class":207},[28,71307,71308],{"class":38}," android",[28,71310,13641],{"class":207},[28,71312,71313],{"class":211}," userAgent.",[28,71315,71316],{"class":34},"match",[28,71318,212],{"class":211},[28,71320,794],{"class":64},[28,71322,71323],{"class":48028},"(Android);",[28,71325,1196],{"class":207},[28,71327,71328],{"class":38},"[\\s",[28,71330,71332],{"class":71331},"snhLl","\\\u002F",[28,71334,1150],{"class":38},[28,71336,691],{"class":207},[28,71338,212],{"class":48028},[28,71340,71341],{"class":38},"[\\d.]",[28,71343,691],{"class":207},[28,71345,639],{"class":48028},[28,71347,1196],{"class":207},[28,71349,794],{"class":64},[28,71351,71352],{"class":211},") \n",[28,71354,71355,71357,71360,71362,71364,71366,71368,71370,71373,71376,71379,71381,71383,71386,71388,71390,71392],{"class":30,"line":78},[28,71356,6869],{"class":207},[28,71358,71359],{"class":38}," iphone",[28,71361,13641],{"class":207},[28,71363,71313],{"class":211},[28,71365,71316],{"class":34},[28,71367,212],{"class":211},[28,71369,794],{"class":64},[28,71371,71372],{"class":48028},"(iPhone",[28,71374,71375],{"class":38},"\\s",[28,71377,71378],{"class":48028},"OS)",[28,71380,71375],{"class":38},[28,71382,212],{"class":48028},[28,71384,71385],{"class":38},"[\\d_]",[28,71387,691],{"class":207},[28,71389,639],{"class":48028},[28,71391,794],{"class":64},[28,71393,71352],{"class":211},[28,71395,71396],{"class":30,"line":86},[28,71397,71398],{"class":269},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[28,71400,71401,71403,71406,71409],{"class":30,"line":97},[28,71402,1609],{"class":207},[28,71404,71405],{"class":211}," (android ",[28,71407,71408],{"class":207},"||",[28,71410,71411],{"class":211}," iphone) { \n",[28,71413,71414,71417,71419,71422],{"class":30,"line":108},[28,71415,71416],{"class":211},"location.href ",[28,71418,257],{"class":207},[28,71420,71421],{"class":64}," 'http:\u002F\u002Fm.itcast.cn'",[28,71423,2751],{"class":211},[28,71425,71426],{"class":30,"line":1407},[28,71427,71428],{"class":211},"} \n",[28,71430,71431],{"class":30,"line":1690},[28,71432,71433],{"class":211},"})()\n",[177,71435,71437],{"id":71436},"_346-histroy对象","3.4.6 histroy对象",[14,71439,71440],{},[1540,71441],{"alt":23,"src":71442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71444,71445],{},"浏览器地址的前进与后退!!!",[14,71447,71448],{},"history.back() 等效于 history.go(-1)",[14,71450,71451],{},"history.forward() 等效于 history.go(1)",[149,71453,71455],{"id":71454},"_35-本地存储","3.5 本地存储",[161,71457,71458,71461,71464],{},[119,71459,71460],{},"数据存储在用户浏览器中",[119,71462,71463],{},"设置、读取方便、甚至页面刷新不丢失数据",[119,71465,71466],{},"容量较大，sessionStorage和localStorage约 5M 左右",[177,71468,71470],{"id":71469},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71472,71473],{},"只能存储字符串",[14,71475,71476],{},[1540,71477],{"alt":23,"src":71478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71480,71481],{},[1540,71482],{"alt":23,"src":71483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71485,71486],{},"键值对要加引号,不然就会当变量来看了",[14,71488,71489],{},"localStorage.setItem('uname', 'pink')",[14,71491,71492],{},"刷新之后信息不再丢失",[14,71494,71495],{},"操作key,value会跟着变",[14,71497,71498],{},"删除只删除键就可以,即名字",[14,71500,71489],{},[14,71502,71503],{},"改:",[14,71505,71506],{},"localStorage.setItem('uname','red')",[14,71508,71509],{},"有这个键就是改,没有这个键就是改",[14,71511,71512],{},[1540,71513],{"alt":23,"src":71514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71516,71517],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71519,71520],{},[1540,71521],{"alt":23,"src":71522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71524,71525],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[177,71527,71529],{"id":71528},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71531,71532],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71534,71535],{},"特性:",[161,71537,71538,71541,71544,71547],{},[119,71539,71540],{},"生命周期为关闭浏览器窗口",[119,71542,71543],{},"在同一个窗口(页面)下数据可以共享",[119,71545,71546],{},"以键值对的形式存储使用",[119,71548,71549],{},"用法跟localStorage 基本相同",[177,71551,71553],{"id":71552},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71555,71556],{},"本地只能存储字符串,无法直接存储复杂数据类型",[18,71558,71560],{"className":53118,"code":71559,"language":53120,"meta":23,"style":23},"\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",[25,71561,71562,71570,71575,71580,71585,71590,71594,71599,71604],{"__ignoreMap":23},[28,71563,71564,71566,71568],{"class":30,"line":31},[28,71565,1120],{"class":211},[28,71567,51864],{"class":51351},[28,71569,51358],{"class":211},[28,71571,71572],{"class":30,"line":42},[28,71573,71574],{"class":211},"    const obj = {\n",[28,71576,71577],{"class":30,"line":50},[28,71578,71579],{"class":211},"      uname: 'pink老师',\n",[28,71581,71582],{"class":30,"line":58},[28,71583,71584],{"class":211},"      age: 18,\n",[28,71586,71587],{"class":30,"line":70},[28,71588,71589],{"class":211},"      gender: '女'\n",[28,71591,71592],{"class":30,"line":78},[28,71593,2264],{"class":211},[28,71595,71596],{"class":30,"line":86},[28,71597,71598],{"class":211},"    \u002F\u002F 存储复杂数据类型\n",[28,71600,71601],{"class":30,"line":97},[28,71602,71603],{"class":211},"    localStorage.setItem('obj', obj)\n",[28,71605,71606,71608,71610],{"class":30,"line":108},[28,71607,52468],{"class":211},[28,71609,51864],{"class":51351},[28,71611,51358],{"class":211},[14,71613,71614],{},[1540,71615],{"alt":23,"src":71616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71618,71619],{},"如果获取一下数据:",[14,71621,71622],{},"log(localStorage.getItem('obj'))",[14,71624,71625],{},[1540,71626],{"alt":23,"src":71627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71629,71630],{},"发现直接存对象是使用不了的!!!",[22075,71632,71634],{"id":71633},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71636,71637],{},[1540,71638],{"alt":23,"src":71639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[18,71641,71643],{"className":50684,"code":71642,"language":50686,"meta":23,"style":23},"\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",[25,71644,71645,71653,71663,71673,71682,71690,71694,71698,71724,71743,71751,71755,71760,71765],{"__ignoreMap":23},[28,71646,71647,71649,71651],{"class":30,"line":31},[28,71648,1120],{"class":211},[28,71650,51864],{"class":51351},[28,71652,51358],{"class":211},[28,71654,71655,71657,71659,71661],{"class":30,"line":42},[28,71656,11298],{"class":207},[28,71658,70022],{"class":38},[28,71660,13641],{"class":207},[28,71662,15649],{"class":211},[28,71664,71665,71668,71671],{"class":30,"line":50},[28,71666,71667],{"class":211},"      uname: ",[28,71669,71670],{"class":64},"'pink老师'",[28,71672,31517],{"class":211},[28,71674,71675,71678,71680],{"class":30,"line":58},[28,71676,71677],{"class":211},"      age: ",[28,71679,860],{"class":38},[28,71681,31517],{"class":211},[28,71683,71684,71687],{"class":30,"line":70},[28,71685,71686],{"class":211},"      gender: ",[28,71688,71689],{"class":64},"'女'\n",[28,71691,71692],{"class":30,"line":78},[28,71693,2264],{"class":211},[28,71695,71696],{"class":30,"line":86},[28,71697,71598],{"class":269},[28,71699,71700,71703,71706,71708,71711,71713,71716,71718,71721],{"class":30,"line":97},[28,71701,71702],{"class":211},"  localStorage.",[28,71704,71705],{"class":34},"setItem",[28,71707,212],{"class":211},[28,71709,71710],{"class":64},"'obj'",[28,71712,12512],{"class":211},[28,71714,71715],{"class":38},"JSON",[28,71717,768],{"class":211},[28,71719,71720],{"class":34},"stringify",[28,71722,71723],{"class":211},"(obj))\n",[28,71725,71726,71729,71731,71734,71737,71739,71741],{"class":30,"line":108},[28,71727,71728],{"class":211},"  console.",[28,71730,58298],{"class":34},[28,71732,71733],{"class":211},"(localStorage.",[28,71735,71736],{"class":34},"getItem",[28,71738,212],{"class":211},[28,71740,71710],{"class":64},[28,71742,30548],{"class":211},[28,71744,71745,71747,71749],{"class":30,"line":1407},[28,71746,52468],{"class":211},[28,71748,51864],{"class":51351},[28,71750,51358],{"class":211},[28,71752,71753],{"class":30,"line":1690},[28,71754,70672],{"class":211},[28,71756,71757],{"class":30,"line":1695},[28,71758,71759],{"class":211},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[28,71761,71762],{"class":30,"line":1701},[28,71763,71764],{"class":211},"  类型是字符串的\n",[28,71766,71767],{"class":30,"line":1706},[28,71768,71769],{"class":211},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22075,71771,71773],{"id":71772},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71775,71776],{},[1540,71777],{"alt":23,"src":71778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71780,71781],{},[1540,71782],{"alt":23,"src":71783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[18,71785,71787],{"className":53118,"code":71786,"language":53120,"meta":23,"style":23},"  \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",[25,71788,71789,71797,71801,71805,71809,71813,71817,71822,71827,71832,71837,71842,71847,71852,71857],{"__ignoreMap":23},[28,71790,71791,71793,71795],{"class":30,"line":31},[28,71792,52195],{"class":211},[28,71794,51864],{"class":51351},[28,71796,51358],{"class":211},[28,71798,71799],{"class":30,"line":42},[28,71800,71574],{"class":211},[28,71802,71803],{"class":30,"line":50},[28,71804,71579],{"class":211},[28,71806,71807],{"class":30,"line":58},[28,71808,71584],{"class":211},[28,71810,71811],{"class":30,"line":70},[28,71812,71589],{"class":211},[28,71814,71815],{"class":30,"line":78},[28,71816,2264],{"class":211},[28,71818,71819],{"class":30,"line":86},[28,71820,71821],{"class":211},"    \u002F\u002F 1.存储复杂数据类型\n",[28,71823,71824],{"class":30,"line":97},[28,71825,71826],{"class":211},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[28,71828,71829],{"class":30,"line":108},[28,71830,71831],{"class":211},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[28,71833,71834],{"class":30,"line":1407},[28,71835,71836],{"class":211},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[28,71838,71839],{"class":30,"line":1690},[28,71840,71841],{"class":211},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[28,71843,71844],{"class":30,"line":1695},[28,71845,71846],{"class":211},"    \u002F\u002F 取\n",[28,71848,71849],{"class":30,"line":1701},[28,71850,71851],{"class":211},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[28,71853,71854],{"class":30,"line":1706},[28,71855,71856],{"class":211},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[28,71858,71859,71861,71863],{"class":30,"line":1720},[28,71860,52468],{"class":211},[28,71862,51864],{"class":51351},[28,71864,51358],{"class":211},[14,71866,71867],{},[1540,71868],{"alt":23,"src":71869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[177,71871,71873],{"id":71872},"_356-数组map方法","3.5.6 数组map方法",[14,71875,71876],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71878,71879],{},[1540,71880],{"alt":23,"src":71881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71883,71884],{},[1540,71885],{"alt":23,"src":71886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71888,71889,71892],{},[359,71890,71891],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71894,71895],{},"map有返回值，但是forEach没有返回值",[14,71897,71898],{},"map是个方法。用的时候要加 ()",[14,71900,71901],{},"map返回的是一个数组",[177,71903,71905],{"id":71904},"_357-数组中join方法","3.5.7 数组中join方法",[14,71907,71908],{},[1540,71909],{"alt":23,"src":71910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71912,71913],{},"类似于python中拼接字符串一样！",[161,71915,71916,71919,71922],{},[119,71917,71918],{},"小括号为空则逗号分开",[119,71920,71921],{},"小括号为空字符串 ''，则元素之间没有分隔符",[119,71923,71924],{},"小括号用啥符号就用进行分割",[177,71926,71928],{"id":71927},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[161,71930,71931,71934,71937,71940,71943],{},[119,71932,71933],{},"记住本地时间获取快速方式：new Date().toDateString()",[119,71935,71936],{},"尽量减少DOM操作，用好map+join的渲染方式",[119,71938,71939],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[119,71941,71942],{},"return可以实现函数的结束",[119,71944,71945],{},"禁止跳转是 preventDefault() 不要忘记",[18,71947,71949],{"className":50684,"code":71948,"language":50686,"meta":23,"style":23},"\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",[25,71950,71951,71961,71975,71979,71987,72001,72021,72033,72041,72047,72057,72067,72071,72075,72081,72091,72103,72107,72111,72118,72130,72144,72154,72158,72162,72169,72176,72183,72195,72207,72217,72229,72233,72237,72244,72251,72263,72275,72285,72297,72327,72331,72335,72342,72354,72366,72390,72400,72410,72414,72418,72426,72437,72449,72461,72473,72490,72502,72514,72518,72522,72529,72541,72553,72565,72576,72594,72607,72619,72643,72654,72658,72662,72670,72680,72684,72688,72694,72706,72717,72727,72731,72735,72741,72763,72767,72771,72777,72783,72795,72805,72817,72847,72860,72877,72881,72885,72896,72918,72928,72932,72936,72949,72959,72971,72983,72995,73007,73017,73027,73037,73048,73061,73065,73073,73081,73085,73093,73106,73126,73159,73192,73225,73251,73269,73287,73295,73321,73339,73357,73375,73393,73411,73419,73427,73445,73453,73482,73490,73498,73506,73519,73531,73543,73555,73567,73579,73592,73604,73612,73620,73628,73633,73638,73642,73646,73650,73654,73658,73662,73667,73672,73677,73682,73690,73698,73706,73711,73716,73721,73726,73731,73736,73741,73746,73751,73756,73761,73766,73771,73776,73780,73785,73790,73800,73809,73813,73818,73827,73843,73885,73925,73964,74029,74037,74041,74046,74064,74072,74077,74082,74112,74118,74123,74136,74148,74160,74172,74184,74196,74208,74212,74222,74226,74231,74236,74240,74249,74253,74258,74263,74282,74287,74307,74311,74316,74320,74325,74343,74361,74379,74398,74417,74436,74441,74447,74468,74474,74483,74489,74495,74501,74528,74541,74546,74556,74562,74568,74574,74580,74585,74591,74597,74603,74609,74642,74647,74652,74657,74662,74668,74674,74680,74691,74696,74702,74709,74723,74729,74753,74758,74763,74769,74775,74796,74802,74815,74821,74827,74833,74839,74844,74850,74856,74862,74880,74894,74900,74908,74914,74936,74941,74946,74951,74956,74961,74970,74979,74984],{"__ignoreMap":23},[28,71952,71953,71955,71957,71959],{"class":30,"line":31},[28,71954,51348],{"class":211},[28,71956,51352],{"class":51351},[28,71958,51355],{"class":34},[28,71960,51358],{"class":211},[28,71962,71963,71965,71967,71969,71971,71973],{"class":30,"line":42},[28,71964,1120],{"class":211},[28,71966,50686],{"class":51351},[28,71968,51367],{"class":34},[28,71970,257],{"class":211},[28,71972,51372],{"class":64},[28,71974,51358],{"class":211},[28,71976,71977],{"class":30,"line":50},[28,71978,2477],{"emptyLinePlaceholder":134},[28,71980,71981,71983,71985],{"class":30,"line":58},[28,71982,1120],{"class":211},[28,71984,51385],{"class":51351},[28,71986,51358],{"class":211},[28,71988,71989,71991,71993,71995,71997,71999],{"class":30,"line":70},[28,71990,52195],{"class":211},[28,71992,51395],{"class":51351},[28,71994,51398],{"class":34},[28,71996,257],{"class":211},[28,71998,51403],{"class":64},[28,72000,51358],{"class":211},[28,72002,72003,72005,72007,72009,72011,72013,72015,72017,72019],{"class":30,"line":78},[28,72004,52195],{"class":211},[28,72006,51395],{"class":51351},[28,72008,14997],{"class":34},[28,72010,257],{"class":211},[28,72012,51442],{"class":64},[28,72014,51422],{"class":34},[28,72016,257],{"class":211},[28,72018,51449],{"class":64},[28,72020,51358],{"class":211},[28,72022,72023,72025,72027,72029,72031],{"class":30,"line":86},[28,72024,52195],{"class":211},[28,72026,51458],{"class":51351},[28,72028,51461],{"class":211},[28,72030,51458],{"class":51351},[28,72032,51358],{"class":211},[28,72034,72035,72037,72039],{"class":30,"line":97},[28,72036,52195],{"class":211},[28,72038,126],{"class":51351},[28,72040,51358],{"class":211},[28,72042,72043,72045],{"class":30,"line":108},[28,72044,6480],{"class":51351},[28,72046,15649],{"class":211},[28,72048,72049,72051,72053,72055],{"class":30,"line":1407},[28,72050,54746],{"class":38},[28,72052,51488],{"class":211},[28,72054,401],{"class":38},[28,72056,1370],{"class":211},[28,72058,72059,72061,72063,72065],{"class":30,"line":1690},[28,72060,54757],{"class":38},[28,72062,51488],{"class":211},[28,72064,401],{"class":38},[28,72066,1370],{"class":211},[28,72068,72069],{"class":30,"line":1695},[28,72070,2264],{"class":211},[28,72072,72073],{"class":30,"line":1701},[28,72074,2477],{"emptyLinePlaceholder":134},[28,72076,72077,72079],{"class":30,"line":1706},[28,72078,57330],{"class":51351},[28,72080,15649],{"class":211},[28,72082,72083,72085,72087,72089],{"class":30,"line":1720},[28,72084,57337],{"class":38},[28,72086,51488],{"class":211},[28,72088,51643],{"class":38},[28,72090,1370],{"class":211},[28,72092,72093,72095,72097,72099,72101],{"class":30,"line":1725},[28,72094,62128],{"class":38},[28,72096,51488],{"class":211},[28,72098,910],{"class":38},[28,72100,51543],{"class":207},[28,72102,1370],{"class":211},[28,72104,72105],{"class":30,"line":1731},[28,72106,2264],{"class":211},[28,72108,72109],{"class":30,"line":1752},[28,72110,2477],{"emptyLinePlaceholder":134},[28,72112,72113,72116],{"class":30,"line":1757},[28,72114,72115],{"class":34},"    .info",[28,72117,15649],{"class":211},[28,72119,72120,72122,72124,72126,72128],{"class":30,"line":1771},[28,72121,54822],{"class":38},[28,72123,51488],{"class":211},[28,72125,51540],{"class":38},[28,72127,51543],{"class":207},[28,72129,1370],{"class":211},[28,72131,72132,72134,72136,72138,72140,72142],{"class":30,"line":1776},[28,72133,54757],{"class":38},[28,72135,51488],{"class":211},[28,72137,656],{"class":38},[28,72139,51543],{"class":207},[28,72141,51607],{"class":38},[28,72143,1370],{"class":211},[28,72145,72146,72148,72150,72152],{"class":30,"line":1805},[28,72147,57337],{"class":38},[28,72149,51488],{"class":211},[28,72151,51643],{"class":38},[28,72153,1370],{"class":211},[28,72155,72156],{"class":30,"line":1810},[28,72157,2264],{"class":211},[28,72159,72160],{"class":30,"line":1827},[28,72161,2477],{"emptyLinePlaceholder":134},[28,72163,72164,72167],{"class":30,"line":1832},[28,72165,72166],{"class":34},"    .uname",[28,72168,31517],{"class":211},[28,72170,72171,72174],{"class":30,"line":1837},[28,72172,72173],{"class":34},"    .age",[28,72175,31517],{"class":211},[28,72177,72178,72181],{"class":30,"line":1842},[28,72179,72180],{"class":34},"    .salary",[28,72182,15649],{"class":211},[28,72184,72185,72187,72189,72191,72193],{"class":30,"line":1856},[28,72186,54822],{"class":38},[28,72188,51488],{"class":211},[28,72190,521],{"class":38},[28,72192,51543],{"class":207},[28,72194,1370],{"class":211},[28,72196,72197,72199,72201,72203,72205],{"class":30,"line":1861},[28,72198,54836],{"class":38},[28,72200,51488],{"class":211},[28,72202,910],{"class":38},[28,72204,51543],{"class":207},[28,72206,1370],{"class":211},[28,72208,72209,72211,72213,72215],{"class":30,"line":2654},[28,72210,61831],{"class":38},[28,72212,51488],{"class":211},[28,72214,54788],{"class":38},[28,72216,1370],{"class":211},[28,72218,72219,72221,72223,72225,72227],{"class":30,"line":2668},[28,72220,61801],{"class":38},[28,72222,51488],{"class":211},[28,72224,785],{"class":38},[28,72226,51543],{"class":207},[28,72228,1370],{"class":211},[28,72230,72231],{"class":30,"line":2676},[28,72232,2264],{"class":211},[28,72234,72235],{"class":30,"line":2681},[28,72236,2477],{"emptyLinePlaceholder":134},[28,72238,72239,72242],{"class":30,"line":2687},[28,72240,72241],{"class":34},"    .gender",[28,72243,31517],{"class":211},[28,72245,72246,72249],{"class":30,"line":2693},[28,72247,72248],{"class":34},"    .city",[28,72250,15649],{"class":211},[28,72252,72253,72255,72257,72259,72261],{"class":30,"line":2698},[28,72254,54822],{"class":38},[28,72256,51488],{"class":211},[28,72258,521],{"class":38},[28,72260,51543],{"class":207},[28,72262,1370],{"class":211},[28,72264,72265,72267,72269,72271,72273],{"class":30,"line":8025},[28,72266,54836],{"class":38},[28,72268,51488],{"class":211},[28,72270,1035],{"class":38},[28,72272,51543],{"class":207},[28,72274,1370],{"class":211},[28,72276,72277,72279,72281,72283],{"class":30,"line":8049},[28,72278,61831],{"class":38},[28,72280,51488],{"class":211},[28,72282,54788],{"class":38},[28,72284,1370],{"class":211},[28,72286,72287,72289,72291,72293,72295],{"class":30,"line":8054},[28,72288,61801],{"class":38},[28,72290,51488],{"class":211},[28,72292,785],{"class":38},[28,72294,51543],{"class":207},[28,72296,1370],{"class":211},[28,72298,72299,72301,72303,72305,72307,72309,72312,72314,72316,72318,72321,72323,72325],{"class":30,"line":8060},[28,72300,62028],{"class":38},[28,72302,51488],{"class":211},[28,72304,427],{"class":38},[28,72306,51543],{"class":207},[28,72308,51572],{"class":38},[28,72310,72311],{"class":38}," rgb",[28,72313,212],{"class":211},[28,72315,1800],{"class":38},[28,72317,12512],{"class":211},[28,72319,72320],{"class":38},"197",[28,72322,12512],{"class":211},[28,72324,72320],{"class":38},[28,72326,2796],{"class":211},[28,72328,72329],{"class":30,"line":8087},[28,72330,2264],{"class":211},[28,72332,72333],{"class":30,"line":8092},[28,72334,2477],{"emptyLinePlaceholder":134},[28,72336,72337,72340],{"class":30,"line":8098},[28,72338,72339],{"class":51351},"    button",[28,72341,15649],{"class":211},[28,72343,72344,72346,72348,72350,72352],{"class":30,"line":8110},[28,72345,54836],{"class":38},[28,72347,51488],{"class":211},[28,72349,1035],{"class":38},[28,72351,51543],{"class":207},[28,72353,1370],{"class":211},[28,72355,72356,72358,72360,72362,72364],{"class":30,"line":8122},[28,72357,54822],{"class":38},[28,72359,51488],{"class":211},[28,72361,694],{"class":38},[28,72363,51543],{"class":207},[28,72365,1370],{"class":211},[28,72367,72368,72370,72372,72375,72377,72379,72381,72384,72386,72388],{"class":30,"line":8134},[28,72369,54935],{"class":38},[28,72371,51488],{"class":211},[28,72373,72374],{"class":38},"rgb",[28,72376,212],{"class":211},[28,72378,1179],{"class":38},[28,72380,12512],{"class":211},[28,72382,72383],{"class":38},"187",[28,72385,12512],{"class":211},[28,72387,509],{"class":38},[28,72389,2796],{"class":211},[28,72391,72392,72394,72396,72398],{"class":30,"line":9793},[28,72393,57467],{"class":38},[28,72395,51488],{"class":211},[28,72397,60893],{"class":38},[28,72399,1370],{"class":211},[28,72401,72402,72404,72406,72408],{"class":30,"line":9818},[28,72403,62028],{"class":38},[28,72405,51488],{"class":211},[28,72407,401],{"class":38},[28,72409,1370],{"class":211},[28,72411,72412],{"class":30,"line":9841},[28,72413,2264],{"class":211},[28,72415,72416],{"class":30,"line":9865},[28,72417,2477],{"emptyLinePlaceholder":134},[28,72419,72420,72422,72424],{"class":30,"line":9870},[28,72421,72339],{"class":51351},[28,72423,51739],{"class":51351},[28,72425,15649],{"class":211},[28,72427,72428,72430,72432,72435],{"class":30,"line":9875},[28,72429,55060],{"class":38},[28,72431,51488],{"class":211},[28,72433,72434],{"class":38},"inline-block",[28,72436,1370],{"class":211},[28,72438,72439,72441,72443,72445,72447],{"class":30,"line":9880},[28,72440,54822],{"class":38},[28,72442,51488],{"class":211},[28,72444,656],{"class":38},[28,72446,51543],{"class":207},[28,72448,1370],{"class":211},[28,72450,72451,72453,72455,72457,72459],{"class":30,"line":9889},[28,72452,54836],{"class":38},[28,72454,51488],{"class":211},[28,72456,656],{"class":38},[28,72458,51543],{"class":207},[28,72460,1370],{"class":211},[28,72462,72463,72465,72467,72469,72471],{"class":30,"line":9894},[28,72464,57410],{"class":38},[28,72466,51488],{"class":211},[28,72468,682],{"class":38},[28,72470,51543],{"class":207},[28,72472,1370],{"class":211},[28,72474,72475,72477,72479,72481,72483,72485,72488],{"class":30,"line":9900},[28,72476,62028],{"class":38},[28,72478,51488],{"class":211},[28,72480,427],{"class":38},[28,72482,51543],{"class":207},[28,72484,51572],{"class":38},[28,72486,72487],{"class":38}," #fff",[28,72489,1370],{"class":211},[28,72491,72492,72494,72496,72498,72500],{"class":30,"line":9921},[28,72493,55185],{"class":38},[28,72495,51488],{"class":211},[28,72497,529],{"class":38},[28,72499,51543],{"class":207},[28,72501,1370],{"class":211},[28,72503,72504,72506,72508,72510,72512],{"class":30,"line":9927},[28,72505,61801],{"class":38},[28,72507,51488],{"class":211},[28,72509,427],{"class":38},[28,72511,51543],{"class":207},[28,72513,1370],{"class":211},[28,72515,72516],{"class":30,"line":9941},[28,72517,2264],{"class":211},[28,72519,72520],{"class":30,"line":9947},[28,72521,2477],{"emptyLinePlaceholder":134},[28,72523,72524,72527],{"class":30,"line":9974},[28,72525,72526],{"class":34},"    .total",[28,72528,15649],{"class":211},[28,72530,72531,72533,72535,72537,72539],{"class":30,"line":9983},[28,72532,54822],{"class":38},[28,72534,51488],{"class":211},[28,72536,61680],{"class":38},[28,72538,51543],{"class":207},[28,72540,1370],{"class":211},[28,72542,72543,72545,72547,72549,72551],{"class":30,"line":9989},[28,72544,54836],{"class":38},[28,72546,51488],{"class":211},[28,72548,611],{"class":38},[28,72550,51543],{"class":207},[28,72552,1370],{"class":211},[28,72554,72555,72557,72559,72561,72563],{"class":30,"line":9997},[28,72556,57410],{"class":38},[28,72558,51488],{"class":211},[28,72560,611],{"class":38},[28,72562,51543],{"class":207},[28,72564,1370],{"class":211},[28,72566,72567,72569,72571,72574],{"class":30,"line":10002},[28,72568,57337],{"class":38},[28,72570,51488],{"class":211},[28,72572,72573],{"class":38},"right",[28,72575,1370],{"class":211},[28,72577,72578,72580,72582,72584,72586,72588,72590,72592],{"class":30,"line":16681},[28,72579,54757],{"class":38},[28,72581,51488],{"class":211},[28,72583,611],{"class":38},[28,72585,51543],{"class":207},[28,72587,51607],{"class":38},[28,72589,2115],{"class":38},[28,72591,51543],{"class":207},[28,72593,1370],{"class":211},[28,72595,72596,72599,72601,72603,72605],{"class":30,"line":16687},[28,72597,72598],{"class":38},"      padding-right",[28,72600,51488],{"class":211},[28,72602,656],{"class":38},[28,72604,51543],{"class":207},[28,72606,1370],{"class":211},[28,72608,72609,72611,72613,72615,72617],{"class":30,"line":16710},[28,72610,54973],{"class":38},[28,72612,51488],{"class":211},[28,72614,733],{"class":38},[28,72616,51543],{"class":207},[28,72618,1370],{"class":211},[28,72620,72621,72623,72625,72627,72629,72632,72634,72637,72639,72641],{"class":30,"line":16716},[28,72622,54935],{"class":38},[28,72624,51488],{"class":211},[28,72626,72374],{"class":38},[28,72628,212],{"class":211},[28,72630,72631],{"class":38},"237",[28,72633,12512],{"class":211},[28,72635,72636],{"class":38},"235",[28,72638,12512],{"class":211},[28,72640,72636],{"class":38},[28,72642,2796],{"class":211},[28,72644,72645,72648,72650,72652],{"class":30,"line":16739},[28,72646,72647],{"class":38},"      box-sizing",[28,72649,51488],{"class":211},[28,72651,60556],{"class":38},[28,72653,1370],{"class":211},[28,72655,72656],{"class":30,"line":16753},[28,72657,2264],{"class":211},[28,72659,72660],{"class":30,"line":16773},[28,72661,2477],{"emptyLinePlaceholder":134},[28,72663,72664,72666,72668],{"class":30,"line":16779},[28,72665,72526],{"class":34},[28,72667,51739],{"class":51351},[28,72669,15649],{"class":211},[28,72671,72672,72674,72676,72678],{"class":30,"line":16790},[28,72673,57467],{"class":38},[28,72675,51488],{"class":211},[28,72677,57472],{"class":38},[28,72679,1370],{"class":211},[28,72681,72682],{"class":30,"line":16813},[28,72683,2264],{"class":211},[28,72685,72686],{"class":30,"line":16835},[28,72687,2477],{"emptyLinePlaceholder":134},[28,72689,72690,72692],{"class":30,"line":16840},[28,72691,65074],{"class":51351},[28,72693,15649],{"class":211},[28,72695,72696,72698,72700,72702,72704],{"class":30,"line":16846},[28,72697,54822],{"class":38},[28,72699,51488],{"class":211},[28,72701,61680],{"class":38},[28,72703,51543],{"class":207},[28,72705,1370],{"class":211},[28,72707,72708,72710,72712,72715],{"class":30,"line":16860},[28,72709,54757],{"class":38},[28,72711,51488],{"class":211},[28,72713,72714],{"class":38},"auto",[28,72716,1370],{"class":211},[28,72718,72719,72721,72723,72725],{"class":30,"line":16873},[28,72720,65081],{"class":38},[28,72722,51488],{"class":211},[28,72724,65086],{"class":38},[28,72726,1370],{"class":211},[28,72728,72729],{"class":30,"line":16878},[28,72730,2264],{"class":211},[28,72732,72733],{"class":30,"line":16892},[28,72734,2477],{"emptyLinePlaceholder":134},[28,72736,72737,72739],{"class":30,"line":16897},[28,72738,65166],{"class":51351},[28,72740,15649],{"class":211},[28,72742,72743,72745,72747,72749,72751,72753,72755,72757,72759,72761],{"class":30,"line":16903},[28,72744,54935],{"class":38},[28,72746,51488],{"class":211},[28,72748,72374],{"class":38},[28,72750,212],{"class":211},[28,72752,72631],{"class":38},[28,72754,12512],{"class":211},[28,72756,72636],{"class":38},[28,72758,12512],{"class":211},[28,72760,72636],{"class":38},[28,72762,2796],{"class":211},[28,72764,72765],{"class":30,"line":16908},[28,72766,2264],{"class":211},[28,72768,72769],{"class":30,"line":16922},[28,72770,2477],{"emptyLinePlaceholder":134},[28,72772,72773,72775],{"class":30,"line":16927},[28,72774,65166],{"class":51351},[28,72776,31517],{"class":211},[28,72778,72779,72781],{"class":30,"line":16932},[28,72780,65232],{"class":51351},[28,72782,15649],{"class":211},[28,72784,72785,72787,72789,72791,72793],{"class":30,"line":16946},[28,72786,54836],{"class":38},[28,72788,51488],{"class":211},[28,72790,483],{"class":38},[28,72792,51543],{"class":207},[28,72794,1370],{"class":211},[28,72796,72797,72799,72801,72803],{"class":30,"line":16958},[28,72798,57337],{"class":38},[28,72800,51488],{"class":211},[28,72802,23813],{"class":38},[28,72804,1370],{"class":211},[28,72806,72807,72809,72811,72813,72815],{"class":30,"line":16963},[28,72808,54973],{"class":38},[28,72810,51488],{"class":211},[28,72812,759],{"class":38},[28,72814,51543],{"class":207},[28,72816,1370],{"class":211},[28,72818,72819,72821,72823,72825,72827,72829,72831,72833,72836,72838,72841,72843,72845],{"class":30,"line":16976},[28,72820,62028],{"class":38},[28,72822,51488],{"class":211},[28,72824,427],{"class":38},[28,72826,51543],{"class":207},[28,72828,51572],{"class":38},[28,72830,72311],{"class":38},[28,72832,212],{"class":211},[28,72834,72835],{"class":38},"228",[28,72837,12512],{"class":211},[28,72839,72840],{"class":38},"225",[28,72842,12512],{"class":211},[28,72844,72840],{"class":38},[28,72846,2796],{"class":211},[28,72848,72849,72852,72854,72856,72858],{"class":30,"line":16981},[28,72850,72851],{"class":38},"      padding-left",[28,72853,51488],{"class":211},[28,72855,529],{"class":38},[28,72857,51543],{"class":207},[28,72859,1370],{"class":211},[28,72861,72862,72864,72866,72868,72871,72873,72875],{"class":30,"line":16986},[28,72863,61911],{"class":38},[28,72865,51488],{"class":211},[28,72867,28172],{"class":38},[28,72869,72870],{"class":38}," linear",[28,72872,61918],{"class":38},[28,72874,905],{"class":207},[28,72876,1370],{"class":211},[28,72878,72879],{"class":30,"line":16991},[28,72880,2264],{"class":211},[28,72882,72883],{"class":30,"line":17004},[28,72884,2477],{"emptyLinePlaceholder":134},[28,72886,72887,72890,72892,72894],{"class":30,"line":17009},[28,72888,72889],{"class":51351},"    tbody",[28,72891,70195],{"class":51351},[28,72893,60991],{"class":34},[28,72895,15649],{"class":211},[28,72897,72898,72900,72902,72904,72906,72908,72910,72912,72914,72916],{"class":30,"line":32684},[28,72899,54935],{"class":38},[28,72901,51488],{"class":211},[28,72903,72374],{"class":38},[28,72905,212],{"class":211},[28,72907,72631],{"class":38},[28,72909,12512],{"class":211},[28,72911,72636],{"class":38},[28,72913,12512],{"class":211},[28,72915,72636],{"class":38},[28,72917,2796],{"class":211},[28,72919,72920,72922,72924,72926],{"class":30,"line":32690},[28,72921,62076],{"class":38},[28,72923,51488],{"class":211},[28,72925,62081],{"class":38},[28,72927,1370],{"class":211},[28,72929,72930],{"class":30,"line":32696},[28,72931,2264],{"class":211},[28,72933,72934],{"class":30,"line":32702},[28,72935,2477],{"emptyLinePlaceholder":134},[28,72937,72938,72940,72942,72945,72947],{"class":30,"line":32708},[28,72939,72889],{"class":51351},[28,72941,70195],{"class":51351},[28,72943,72944],{"class":51351}," td",[28,72946,1476],{"class":51351},[28,72948,15649],{"class":211},[28,72950,72951,72953,72955,72957],{"class":30,"line":32719},[28,72952,55060],{"class":38},[28,72954,51488],{"class":211},[28,72956,60920],{"class":38},[28,72958,1370],{"class":211},[28,72960,72961,72963,72965,72967,72969],{"class":30,"line":32725},[28,72962,54822],{"class":38},[28,72964,51488],{"class":211},[28,72966,1117],{"class":38},[28,72968,51543],{"class":207},[28,72970,1370],{"class":211},[28,72972,72973,72975,72977,72979,72981],{"class":30,"line":32745},[28,72974,54836],{"class":38},[28,72976,51488],{"class":211},[28,72978,1035],{"class":38},[28,72980,51543],{"class":207},[28,72982,1370],{"class":211},[28,72984,72985,72987,72989,72991,72993],{"class":30,"line":32751},[28,72986,57410],{"class":38},[28,72988,51488],{"class":211},[28,72990,1035],{"class":38},[28,72992,51543],{"class":207},[28,72994,1370],{"class":211},[28,72996,72997,72999,73001,73003,73005],{"class":30,"line":32762},[28,72998,62128],{"class":38},[28,73000,51488],{"class":211},[28,73002,288],{"class":38},[28,73004,51543],{"class":207},[28,73006,1370],{"class":211},[28,73008,73009,73011,73013,73015],{"class":30,"line":32768},[28,73010,57467],{"class":38},[28,73012,51488],{"class":211},[28,73014,60893],{"class":38},[28,73016,1370],{"class":211},[28,73018,73019,73021,73023,73025],{"class":30,"line":32774},[28,73020,57337],{"class":38},[28,73022,51488],{"class":211},[28,73024,51643],{"class":38},[28,73026,1370],{"class":211},[28,73028,73029,73031,73033,73035],{"class":30,"line":32780},[28,73030,64021],{"class":38},[28,73032,51488],{"class":211},[28,73034,54788],{"class":38},[28,73036,1370],{"class":211},[28,73038,73039,73041,73043,73046],{"class":30,"line":32786},[28,73040,54935],{"class":38},[28,73042,51488],{"class":211},[28,73044,73045],{"class":38},"orange",[28,73047,1370],{"class":211},[28,73049,73050,73052,73054,73057,73059],{"class":30,"line":32792},[28,73051,55185],{"class":38},[28,73053,51488],{"class":211},[28,73055,73056],{"class":38},"12.5",[28,73058,51543],{"class":207},[28,73060,1370],{"class":211},[28,73062,73063],{"class":30,"line":32798},[28,73064,2264],{"class":211},[28,73066,73067,73069,73071],{"class":30,"line":32804},[28,73068,52468],{"class":211},[28,73070,126],{"class":51351},[28,73072,51358],{"class":211},[28,73074,73075,73077,73079],{"class":30,"line":32824},[28,73076,51836],{"class":211},[28,73078,51385],{"class":51351},[28,73080,51358],{"class":211},[28,73082,73083],{"class":30,"line":32830},[28,73084,2477],{"emptyLinePlaceholder":134},[28,73086,73087,73089,73091],{"class":30,"line":32846},[28,73088,1120],{"class":211},[28,73090,51851],{"class":51351},[28,73092,51358],{"class":211},[28,73094,73095,73097,73099,73102,73104],{"class":30,"line":32852},[28,73096,52195],{"class":211},[28,73098,149],{"class":51351},[28,73100,73101],{"class":211},">学生就业统计表\u003C\u002F",[28,73103,149],{"class":51351},[28,73105,51358],{"class":211},[28,73107,73108,73110,73112,73114,73116,73118,73120,73122,73124],{"class":30,"line":32866},[28,73109,52195],{"class":211},[28,73111,66676],{"class":51351},[28,73113,53537],{"class":34},[28,73115,257],{"class":211},[28,73117,62715],{"class":64},[28,73119,69121],{"class":34},[28,73121,257],{"class":211},[28,73123,31827],{"class":64},[28,73125,51358],{"class":211},[28,73127,73128,73130,73132,73134,73136,73138,73140,73142,73144,73146,73148,73151,73153,73155,73157],{"class":30,"line":32872},[28,73129,51392],{"class":211},[28,73131,53872],{"class":51351},[28,73133,53875],{"class":34},[28,73135,257],{"class":211},[28,73137,62750],{"class":64},[28,73139,14997],{"class":34},[28,73141,257],{"class":211},[28,73143,69147],{"class":64},[28,73145,61071],{"class":34},[28,73147,257],{"class":211},[28,73149,73150],{"class":64},"\"姓名\"",[28,73152,53537],{"class":34},[28,73154,257],{"class":211},[28,73156,69147],{"class":64},[28,73158,51358],{"class":211},[28,73160,73161,73163,73165,73167,73169,73171,73173,73175,73177,73179,73181,73184,73186,73188,73190],{"class":30,"line":32887},[28,73162,51392],{"class":211},[28,73164,53872],{"class":51351},[28,73166,53875],{"class":34},[28,73168,257],{"class":211},[28,73170,62750],{"class":64},[28,73172,14997],{"class":34},[28,73174,257],{"class":211},[28,73176,69175],{"class":64},[28,73178,61071],{"class":34},[28,73180,257],{"class":211},[28,73182,73183],{"class":64},"\"年龄\"",[28,73185,53537],{"class":34},[28,73187,257],{"class":211},[28,73189,69175],{"class":64},[28,73191,51358],{"class":211},[28,73193,73194,73196,73198,73200,73202,73204,73206,73208,73210,73212,73214,73217,73219,73221,73223],{"class":30,"line":32893},[28,73195,51392],{"class":211},[28,73197,53872],{"class":51351},[28,73199,53875],{"class":34},[28,73201,257],{"class":211},[28,73203,62750],{"class":64},[28,73205,14997],{"class":34},[28,73207,257],{"class":211},[28,73209,69277],{"class":64},[28,73211,61071],{"class":34},[28,73213,257],{"class":211},[28,73215,73216],{"class":64},"\"薪资\"",[28,73218,53537],{"class":34},[28,73220,257],{"class":211},[28,73222,69277],{"class":64},[28,73224,51358],{"class":211},[28,73226,73227,73229,73231,73233,73235,73237,73239,73241,73243,73245,73247,73249],{"class":30,"line":32902},[28,73228,51392],{"class":211},[28,73230,69195],{"class":51351},[28,73232,14997],{"class":34},[28,73234,257],{"class":211},[28,73236,69202],{"class":64},[28,73238,15036],{"class":34},[28,73240,257],{"class":211},[28,73242,7729],{"class":64},[28,73244,53537],{"class":34},[28,73246,257],{"class":211},[28,73248,69202],{"class":64},[28,73250,51358],{"class":211},[28,73252,73253,73255,73257,73259,73261,73263,73265,73267],{"class":30,"line":32908},[28,73254,55285],{"class":211},[28,73256,69217],{"class":51351},[28,73258,66702],{"class":34},[28,73260,257],{"class":211},[28,73262,10038],{"class":64},[28,73264,69226],{"class":211},[28,73266,69217],{"class":51351},[28,73268,51358],{"class":211},[28,73270,73271,73273,73275,73277,73279,73281,73283,73285],{"class":30,"line":32917},[28,73272,55285],{"class":211},[28,73274,69217],{"class":51351},[28,73276,66702],{"class":34},[28,73278,257],{"class":211},[28,73280,10107],{"class":64},[28,73282,69245],{"class":211},[28,73284,69217],{"class":51351},[28,73286,51358],{"class":211},[28,73288,73289,73291,73293],{"class":30,"line":32923},[28,73290,51827],{"class":211},[28,73292,69195],{"class":51351},[28,73294,51358],{"class":211},[28,73296,73297,73299,73301,73303,73305,73307,73309,73311,73313,73315,73317,73319],{"class":30,"line":32929},[28,73298,51392],{"class":211},[28,73300,69195],{"class":51351},[28,73302,14997],{"class":34},[28,73304,257],{"class":211},[28,73306,69299],{"class":64},[28,73308,15036],{"class":34},[28,73310,257],{"class":211},[28,73312,7729],{"class":64},[28,73314,53537],{"class":34},[28,73316,257],{"class":211},[28,73318,69299],{"class":64},[28,73320,51358],{"class":211},[28,73322,73323,73325,73327,73329,73331,73333,73335,73337],{"class":30,"line":32938},[28,73324,55285],{"class":211},[28,73326,69217],{"class":51351},[28,73328,66702],{"class":34},[28,73330,257],{"class":211},[28,73332,69320],{"class":64},[28,73334,69323],{"class":211},[28,73336,69217],{"class":51351},[28,73338,51358],{"class":211},[28,73340,73341,73343,73345,73347,73349,73351,73353,73355],{"class":30,"line":32944},[28,73342,55285],{"class":211},[28,73344,69217],{"class":51351},[28,73346,66702],{"class":34},[28,73348,257],{"class":211},[28,73350,69340],{"class":64},[28,73352,69343],{"class":211},[28,73354,69217],{"class":51351},[28,73356,51358],{"class":211},[28,73358,73359,73361,73363,73365,73367,73369,73371,73373],{"class":30,"line":32955},[28,73360,55285],{"class":211},[28,73362,69217],{"class":51351},[28,73364,66702],{"class":34},[28,73366,257],{"class":211},[28,73368,69360],{"class":64},[28,73370,69363],{"class":211},[28,73372,69217],{"class":51351},[28,73374,51358],{"class":211},[28,73376,73377,73379,73381,73383,73385,73387,73389,73391],{"class":30,"line":32961},[28,73378,55285],{"class":211},[28,73380,69217],{"class":51351},[28,73382,66702],{"class":34},[28,73384,257],{"class":211},[28,73386,69380],{"class":64},[28,73388,69383],{"class":211},[28,73390,69217],{"class":51351},[28,73392,51358],{"class":211},[28,73394,73395,73397,73399,73401,73403,73405,73407,73409],{"class":30,"line":32980},[28,73396,55285],{"class":211},[28,73398,69217],{"class":51351},[28,73400,66702],{"class":34},[28,73402,257],{"class":211},[28,73404,69400],{"class":64},[28,73406,69403],{"class":211},[28,73408,69217],{"class":51351},[28,73410,51358],{"class":211},[28,73412,73413,73415,73417],{"class":30,"line":32986},[28,73414,51827],{"class":211},[28,73416,69195],{"class":51351},[28,73418,51358],{"class":211},[28,73420,73421,73423,73425],{"class":30,"line":32997},[28,73422,51392],{"class":211},[28,73424,53938],{"class":51351},[28,73426,51358],{"class":211},[28,73428,73429,73431,73433,73436,73438,73441,73443],{"class":30,"line":33003},[28,73430,55285],{"class":211},[28,73432,28],{"class":51351},[28,73434,73435],{"class":211},">+\u003C\u002F",[28,73437,28],{"class":51351},[28,73439,73440],{"class":211},">添加\u003C\u002F",[28,73442,53938],{"class":51351},[28,73444,51358],{"class":211},[28,73446,73447,73449,73451],{"class":30,"line":33023},[28,73448,52468],{"class":211},[28,73450,66676],{"class":51351},[28,73452,51358],{"class":211},[28,73454,73455,73457,73459,73461,73463,73465,73468,73470,73473,73475,73478,73480],{"class":30,"line":33039},[28,73456,52195],{"class":211},[28,73458,51662],{"class":51351},[28,73460,53537],{"class":34},[28,73462,257],{"class":211},[28,73464,62631],{"class":64},[28,73466,73467],{"class":211},">共有数据 \u003C",[28,73469,28],{"class":51351},[28,73471,73472],{"class":211},">0\u003C\u002F",[28,73474,28],{"class":51351},[28,73476,73477],{"class":211},"> 条\u003C\u002F",[28,73479,51662],{"class":51351},[28,73481,51358],{"class":211},[28,73483,73484,73486,73488],{"class":30,"line":33045},[28,73485,52195],{"class":211},[28,73487,347],{"class":51351},[28,73489,51358],{"class":211},[28,73491,73492,73494,73496],{"class":30,"line":33059},[28,73493,51392],{"class":211},[28,73495,350],{"class":51351},[28,73497,51358],{"class":211},[28,73499,73500,73502,73504],{"class":30,"line":33065},[28,73501,55285],{"class":211},[28,73503,353],{"class":51351},[28,73505,51358],{"class":211},[28,73507,73508,73510,73512,73515,73517],{"class":30,"line":33071},[28,73509,55353],{"class":211},[28,73511,356],{"class":51351},[28,73513,73514],{"class":211},">ID\u003C\u002F",[28,73516,356],{"class":51351},[28,73518,51358],{"class":211},[28,73520,73521,73523,73525,73527,73529],{"class":30,"line":33082},[28,73522,55353],{"class":211},[28,73524,356],{"class":51351},[28,73526,69506],{"class":211},[28,73528,356],{"class":51351},[28,73530,51358],{"class":211},[28,73532,73533,73535,73537,73539,73541],{"class":30,"line":33088},[28,73534,55353],{"class":211},[28,73536,356],{"class":51351},[28,73538,69519],{"class":211},[28,73540,356],{"class":51351},[28,73542,51358],{"class":211},[28,73544,73545,73547,73549,73551,73553],{"class":30,"line":33094},[28,73546,55353],{"class":211},[28,73548,356],{"class":51351},[28,73550,69532],{"class":211},[28,73552,356],{"class":51351},[28,73554,51358],{"class":211},[28,73556,73557,73559,73561,73563,73565],{"class":30,"line":33104},[28,73558,55353],{"class":211},[28,73560,356],{"class":51351},[28,73562,69545],{"class":211},[28,73564,356],{"class":51351},[28,73566,51358],{"class":211},[28,73568,73569,73571,73573,73575,73577],{"class":30,"line":33110},[28,73570,55353],{"class":211},[28,73572,356],{"class":51351},[28,73574,69558],{"class":211},[28,73576,356],{"class":51351},[28,73578,51358],{"class":211},[28,73580,73581,73583,73585,73588,73590],{"class":30,"line":33121},[28,73582,55353],{"class":211},[28,73584,356],{"class":51351},[28,73586,73587],{"class":211},">录入时间\u003C\u002F",[28,73589,356],{"class":51351},[28,73591,51358],{"class":211},[28,73593,73594,73596,73598,73600,73602],{"class":30,"line":33127},[28,73595,55353],{"class":211},[28,73597,356],{"class":51351},[28,73599,69571],{"class":211},[28,73601,356],{"class":51351},[28,73603,51358],{"class":211},[28,73605,73606,73608,73610],{"class":30,"line":33137},[28,73607,55458],{"class":211},[28,73609,353],{"class":51351},[28,73611,51358],{"class":211},[28,73613,73614,73616,73618],{"class":30,"line":33142},[28,73615,51827],{"class":211},[28,73617,350],{"class":51351},[28,73619,51358],{"class":211},[28,73621,73622,73624,73626],{"class":30,"line":33148},[28,73623,51392],{"class":211},[28,73625,394],{"class":51351},[28,73627,51358],{"class":211},[28,73629,73630],{"class":30,"line":33197},[28,73631,73632],{"class":269},"      \u003C!-- \u003Ctr>\n",[28,73634,73635],{"class":30,"line":33244},[28,73636,73637],{"class":269},"        \u003Ctd>1\u003C\u002Ftd>\n",[28,73639,73640],{"class":30,"line":33249},[28,73641,73637],{"class":269},[28,73643,73644],{"class":30,"line":33255},[28,73645,73637],{"class":269},[28,73647,73648],{"class":30,"line":33274},[28,73649,73637],{"class":269},[28,73651,73652],{"class":30,"line":33280},[28,73653,73637],{"class":269},[28,73655,73656],{"class":30,"line":33300},[28,73657,73637],{"class":269},[28,73659,73660],{"class":30,"line":33306},[28,73661,73637],{"class":269},[28,73663,73664],{"class":30,"line":33312},[28,73665,73666],{"class":269},"        \u003Ctd>\n",[28,73668,73669],{"class":30,"line":33322},[28,73670,73671],{"class":269},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[28,73673,73674],{"class":30,"line":33327},[28,73675,73676],{"class":269},"        \u003C\u002Ftd>\n",[28,73678,73679],{"class":30,"line":33333},[28,73680,73681],{"class":269},"      \u003C\u002Ftr> -->\n",[28,73683,73684,73686,73688],{"class":30,"line":33349},[28,73685,51827],{"class":211},[28,73687,394],{"class":51351},[28,73689,51358],{"class":211},[28,73691,73692,73694,73696],{"class":30,"line":33394},[28,73693,52468],{"class":211},[28,73695,347],{"class":51351},[28,73697,51358],{"class":211},[28,73699,73700,73702,73704],{"class":30,"line":33400},[28,73701,52195],{"class":211},[28,73703,51864],{"class":51351},[28,73705,51358],{"class":211},[28,73707,73708],{"class":30,"line":33406},[28,73709,73710],{"class":269},"    \u002F\u002F const initData = [{\n",[28,73712,73713],{"class":30,"line":33412},[28,73714,73715],{"class":269},"    \u002F\u002F   unameId: 1,\n",[28,73717,73718],{"class":30,"line":33423},[28,73719,73720],{"class":269},"    \u002F\u002F   uname: '华晨宇',\n",[28,73722,73723],{"class":30,"line":33429},[28,73724,73725],{"class":269},"    \u002F\u002F   age: 22,\n",[28,73727,73728],{"class":30,"line":33435},[28,73729,73730],{"class":269},"    \u002F\u002F   salary: 12000,\n",[28,73732,73733],{"class":30,"line":33441},[28,73734,73735],{"class":269},"    \u002F\u002F   gender: '男',\n",[28,73737,73738],{"class":30,"line":33459},[28,73739,73740],{"class":269},"    \u002F\u002F   city: '北京',\n",[28,73742,73743],{"class":30,"line":33473},[28,73744,73745],{"class":269},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[28,73747,73748],{"class":30,"line":33482},[28,73749,73750],{"class":269},"    \u002F\u002F }]\n",[28,73752,73753],{"class":30,"line":33491},[28,73754,73755],{"class":269},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[28,73757,73758],{"class":30,"line":33500},[28,73759,73760],{"class":269},"    \u002F\u002F 1.渲染业务\n",[28,73762,73763],{"class":30,"line":33509},[28,73764,73765],{"class":269},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[28,73767,73768],{"class":30,"line":33515},[28,73769,73770],{"class":269},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[28,73772,73773],{"class":30,"line":33521},[28,73774,73775],{"class":269},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[28,73777,73778],{"class":30,"line":33529},[28,73779,2477],{"emptyLinePlaceholder":134},[28,73781,73782],{"class":30,"line":33534},[28,73783,73784],{"class":269},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[28,73786,73787],{"class":30,"line":33540},[28,73788,73789],{"class":269},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[28,73791,73792,73794,73796,73798],{"class":30,"line":33551},[28,73793,11298],{"class":207},[28,73795,57746],{"class":38},[28,73797,13641],{"class":207},[28,73799,51889],{"class":211},[28,73801,73802,73805,73807],{"class":30,"line":33557},[28,73803,73804],{"class":211},"    console.",[28,73806,58298],{"class":34},[28,73808,52463],{"class":211},[28,73810,73811],{"class":30,"line":33577},[28,73812,2477],{"emptyLinePlaceholder":134},[28,73814,73815],{"class":30,"line":33583},[28,73816,73817],{"class":269},"    \u002F\u002F 时间函数\n",[28,73819,73820,73822,73825],{"class":30,"line":33589},[28,73821,70135],{"class":207},[28,73823,73824],{"class":34}," getTime",[28,73826,10930],{"class":211},[28,73828,73829,73831,73834,73836,73838,73841],{"class":30,"line":33595},[28,73830,58279],{"class":207},[28,73832,73833],{"class":38}," date",[28,73835,13641],{"class":207},[28,73837,11655],{"class":207},[28,73839,73840],{"class":34}," Date",[28,73842,2053],{"class":211},[28,73844,73845,73847,73849,73851,73854,73857,73859,73861,73863,73866,73869,73871,73873,73875,73877,73879,73881,73883],{"class":30,"line":33612},[28,73846,58279],{"class":207},[28,73848,16168],{"class":38},[28,73850,13641],{"class":207},[28,73852,73853],{"class":211}," date.",[28,73855,73856],{"class":34},"getHours",[28,73858,13127],{"class":211},[28,73860,1120],{"class":207},[28,73862,2115],{"class":38},[28,73864,73865],{"class":207}," ?",[28,73867,73868],{"class":64}," '0'",[28,73870,45617],{"class":207},[28,73872,73853],{"class":211},[28,73874,73856],{"class":34},[28,73876,13127],{"class":211},[28,73878,1069],{"class":207},[28,73880,73853],{"class":211},[28,73882,73856],{"class":34},[28,73884,2053],{"class":211},[28,73886,73887,73889,73892,73894,73896,73899,73901,73903,73905,73907,73909,73911,73913,73915,73917,73919,73921,73923],{"class":30,"line":33618},[28,73888,58279],{"class":207},[28,73890,73891],{"class":38}," m",[28,73893,13641],{"class":207},[28,73895,73853],{"class":211},[28,73897,73898],{"class":34},"getMinutes",[28,73900,13127],{"class":211},[28,73902,1120],{"class":207},[28,73904,2115],{"class":38},[28,73906,73865],{"class":207},[28,73908,73868],{"class":64},[28,73910,45617],{"class":207},[28,73912,73853],{"class":211},[28,73914,73898],{"class":34},[28,73916,13127],{"class":211},[28,73918,1069],{"class":207},[28,73920,73853],{"class":211},[28,73922,73898],{"class":34},[28,73924,2053],{"class":211},[28,73926,73927,73929,73931,73933,73935,73938,73940,73942,73944,73946,73948,73950,73952,73954,73956,73958,73960,73962],{"class":30,"line":33624},[28,73928,58279],{"class":207},[28,73930,8505],{"class":38},[28,73932,13641],{"class":207},[28,73934,73853],{"class":211},[28,73936,73937],{"class":34},"getSeconds",[28,73939,13127],{"class":211},[28,73941,1120],{"class":207},[28,73943,2115],{"class":38},[28,73945,73865],{"class":207},[28,73947,73868],{"class":64},[28,73949,45617],{"class":207},[28,73951,73853],{"class":211},[28,73953,73937],{"class":34},[28,73955,13127],{"class":211},[28,73957,1069],{"class":207},[28,73959,73853],{"class":211},[28,73961,73937],{"class":34},[28,73963,2053],{"class":211},[28,73965,73966,73968,73971,73973,73975,73978,73980,73983,73985,73988,73990,73992,73995,73997,73999,74001,74003,74005,74007,74010,74012,74015,74017,74020,74022,74024,74026],{"class":30,"line":33630},[28,73967,58279],{"class":207},[28,73969,73970],{"class":38}," str",[28,73972,13641],{"class":207},[28,73974,62954],{"class":64},[28,73976,73977],{"class":211},"date",[28,73979,768],{"class":64},[28,73981,73982],{"class":34},"getFullYear",[28,73984,2504],{"class":64},[28,73986,73987],{"class":64},"}\u002F${",[28,73989,73977],{"class":211},[28,73991,768],{"class":64},[28,73993,73994],{"class":34},"getMonth",[28,73996,13127],{"class":64},[28,73998,691],{"class":207},[28,74000,25189],{"class":38},[28,74002,73987],{"class":64},[28,74004,73977],{"class":211},[28,74006,768],{"class":64},[28,74008,74009],{"class":34},"getDate",[28,74011,2504],{"class":64},[28,74013,74014],{"class":64},"} ${",[28,74016,625],{"class":211},[28,74018,74019],{"class":64},"}:${",[28,74021,754],{"class":211},[28,74023,74019],{"class":64},[28,74025,905],{"class":211},[28,74027,74028],{"class":64},"}`\n",[28,74030,74031,74034],{"class":30,"line":33636},[28,74032,74033],{"class":207},"      return",[28,74035,74036],{"class":211}," str\n",[28,74038,74039],{"class":30,"line":33642},[28,74040,2264],{"class":211},[28,74042,74043],{"class":30,"line":33669},[28,74044,74045],{"class":269},"    \u002F\u002F 渲染函数\n",[28,74047,74048,74050,74052,74054,74056,74058,74060,74062],{"class":30,"line":33693},[28,74049,11298],{"class":207},[28,74051,69798],{"class":38},[28,74053,13641],{"class":207},[28,74055,54447],{"class":211},[28,74057,54450],{"class":34},[28,74059,212],{"class":211},[28,74061,69809],{"class":64},[28,74063,218],{"class":211},[28,74065,74066,74068,74070],{"class":30,"line":33699},[28,74067,70135],{"class":207},[28,74069,70138],{"class":34},[28,74071,10930],{"class":211},[28,74073,74074],{"class":30,"line":33705},[28,74075,74076],{"class":269},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[28,74078,74079],{"class":30,"line":33711},[28,74080,74081],{"class":269},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[28,74083,74084,74086,74089,74091,74093,74096,74098,74100,74102,74105,74107,74110],{"class":30,"line":33722},[28,74085,58279],{"class":207},[28,74087,74088],{"class":38}," trArr",[28,74090,13641],{"class":207},[28,74092,52016],{"class":211},[28,74094,74095],{"class":34},"map",[28,74097,212],{"class":211},[28,74099,54500],{"class":207},[28,74101,1736],{"class":211},[28,74103,74104],{"class":5293},"ele",[28,74106,12512],{"class":211},[28,74108,74109],{"class":5293},"index",[28,74111,12519],{"class":211},[28,74113,74114,74116],{"class":30,"line":33733},[28,74115,14829],{"class":207},[28,74117,70219],{"class":64},[28,74119,74120],{"class":30,"line":33739},[28,74121,74122],{"class":64},"      \u003Ctr>\n",[28,74124,74125,74127,74129,74131,74134],{"class":30,"line":33756},[28,74126,70224],{"class":64},[28,74128,74104],{"class":211},[28,74130,768],{"class":64},[28,74132,74133],{"class":211},"unameId",[28,74135,70239],{"class":64},[28,74137,74138,74140,74142,74144,74146],{"class":30,"line":33779},[28,74139,70224],{"class":64},[28,74141,74104],{"class":211},[28,74143,768],{"class":64},[28,74145,70255],{"class":211},[28,74147,70239],{"class":64},[28,74149,74150,74152,74154,74156,74158],{"class":30,"line":33802},[28,74151,70224],{"class":64},[28,74153,74104],{"class":211},[28,74155,768],{"class":64},[28,74157,70272],{"class":211},[28,74159,70239],{"class":64},[28,74161,74162,74164,74166,74168,74170],{"class":30,"line":33808},[28,74163,70224],{"class":64},[28,74165,74104],{"class":211},[28,74167,768],{"class":64},[28,74169,70289],{"class":211},[28,74171,70239],{"class":64},[28,74173,74174,74176,74178,74180,74182],{"class":30,"line":33813},[28,74175,70224],{"class":64},[28,74177,74104],{"class":211},[28,74179,768],{"class":64},[28,74181,70306],{"class":211},[28,74183,70239],{"class":64},[28,74185,74186,74188,74190,74192,74194],{"class":30,"line":33822},[28,74187,70224],{"class":64},[28,74189,74104],{"class":211},[28,74191,768],{"class":64},[28,74193,70323],{"class":211},[28,74195,70239],{"class":64},[28,74197,74198,74200,74202,74204,74206],{"class":30,"line":33832},[28,74199,70224],{"class":64},[28,74201,74104],{"class":211},[28,74203,768],{"class":64},[28,74205,2464],{"class":211},[28,74207,70239],{"class":64},[28,74209,74210],{"class":30,"line":33838},[28,74211,73666],{"class":64},[28,74213,74214,74217,74219],{"class":30,"line":33843},[28,74215,74216],{"class":64},"          \u003Ca href=\"#\" data-id=\"${",[28,74218,74109],{"class":211},[28,74220,74221],{"class":64},"}\">删除\u003C\u002Fa>\n",[28,74223,74224],{"class":30,"line":33849},[28,74225,73676],{"class":64},[28,74227,74228],{"class":30,"line":33862},[28,74229,74230],{"class":64},"      \u003C\u002Ftr>\n",[28,74232,74233],{"class":30,"line":33868},[28,74234,74235],{"class":64},"  `\n",[28,74237,74238],{"class":30,"line":33879},[28,74239,64866],{"class":211},[28,74241,74242,74244,74246],{"class":30,"line":33890},[28,74243,58295],{"class":211},[28,74245,58298],{"class":34},[28,74247,74248],{"class":211},"(trArr)\n",[28,74250,74251],{"class":30,"line":33909},[28,74252,2477],{"emptyLinePlaceholder":134},[28,74254,74255],{"class":30,"line":49569},[28,74256,74257],{"class":269},"      \u002F\u002F (2) 把数组转换为字符串join\n",[28,74259,74260],{"class":30,"line":49574},[28,74261,74262],{"class":269},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[28,74264,74265,74267,74269,74272,74275,74277,74280],{"class":30,"line":49583},[28,74266,70150],{"class":211},[28,74268,257],{"class":207},[28,74270,74271],{"class":211}," trArr.",[28,74273,74274],{"class":34},"join",[28,74276,212],{"class":211},[28,74278,74279],{"class":64},"''",[28,74281,218],{"class":211},[28,74283,74284],{"class":30,"line":49592},[28,74285,74286],{"class":269},"      \u002F\u002F 显示共有几条\n",[28,74288,74289,74291,74293,74295,74298,74301,74303,74305],{"class":30,"line":49597},[28,74290,55822],{"class":211},[28,74292,54450],{"class":34},[28,74294,212],{"class":211},[28,74296,74297],{"class":64},"'.total span'",[28,74299,74300],{"class":211},").innerHTML ",[28,74302,257],{"class":207},[28,74304,52016],{"class":211},[28,74306,55882],{"class":38},[28,74308,74309],{"class":30,"line":49602},[28,74310,2264],{"class":211},[28,74312,74313],{"class":30,"line":49607},[28,74314,74315],{"class":269},"    \u002F\u002F render()\n",[28,74317,74318],{"class":30,"line":49620},[28,74319,2477],{"emptyLinePlaceholder":134},[28,74321,74322],{"class":30,"line":49625},[28,74323,74324],{"class":269},"    \u002F\u002F 获取DOM对象\n",[28,74326,74327,74329,74331,74333,74335,74337,74339,74341],{"class":30,"line":49634},[28,74328,11298],{"class":207},[28,74330,69872],{"class":38},[28,74332,13641],{"class":207},[28,74334,54447],{"class":211},[28,74336,54450],{"class":34},[28,74338,212],{"class":211},[28,74340,69883],{"class":64},[28,74342,218],{"class":211},[28,74344,74345,74347,74349,74351,74353,74355,74357,74359],{"class":30,"line":49643},[28,74346,11298],{"class":207},[28,74348,69699],{"class":38},[28,74350,13641],{"class":207},[28,74352,54447],{"class":211},[28,74354,54450],{"class":34},[28,74356,212],{"class":211},[28,74358,69710],{"class":64},[28,74360,218],{"class":211},[28,74362,74363,74365,74367,74369,74371,74373,74375,74377],{"class":30,"line":49660},[28,74364,11298],{"class":207},[28,74366,15766],{"class":38},[28,74368,13641],{"class":207},[28,74370,54447],{"class":211},[28,74372,54450],{"class":34},[28,74374,212],{"class":211},[28,74376,69729],{"class":64},[28,74378,218],{"class":211},[28,74380,74382,74384,74386,74388,74390,74392,74394,74396],{"class":30,"line":74381},231,[28,74383,11298],{"class":207},[28,74385,69758],{"class":38},[28,74387,13641],{"class":207},[28,74389,54447],{"class":211},[28,74391,54450],{"class":34},[28,74393,212],{"class":211},[28,74395,69769],{"class":64},[28,74397,218],{"class":211},[28,74399,74401,74403,74405,74407,74409,74411,74413,74415],{"class":30,"line":74400},232,[28,74402,11298],{"class":207},[28,74404,69738],{"class":38},[28,74406,13641],{"class":207},[28,74408,54447],{"class":211},[28,74410,54450],{"class":34},[28,74412,212],{"class":211},[28,74414,69749],{"class":64},[28,74416,218],{"class":211},[28,74418,74420,74422,74424,74426,74428,74430,74432,74434],{"class":30,"line":74419},233,[28,74421,11298],{"class":207},[28,74423,69778],{"class":38},[28,74425,13641],{"class":207},[28,74427,54447],{"class":211},[28,74429,54450],{"class":34},[28,74431,212],{"class":211},[28,74433,69789],{"class":64},[28,74435,218],{"class":211},[28,74437,74439],{"class":30,"line":74438},234,[28,74440,2477],{"emptyLinePlaceholder":134},[28,74442,74444],{"class":30,"line":74443},235,[28,74445,74446],{"class":269},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[28,74448,74450,74452,74454,74456,74458,74460,74462,74464,74466],{"class":30,"line":74449},236,[28,74451,69890],{"class":211},[28,74453,57864],{"class":34},[28,74455,212],{"class":211},[28,74457,69897],{"class":64},[28,74459,12512],{"class":211},[28,74461,54500],{"class":207},[28,74463,1736],{"class":211},[28,74465,285],{"class":5293},[28,74467,12519],{"class":211},[28,74469,74471],{"class":30,"line":74470},237,[28,74472,74473],{"class":269},"      \u002F\u002F 禁止浏览器跳转\n",[28,74475,74477,74479,74481],{"class":30,"line":74476},238,[28,74478,69917],{"class":211},[28,74480,69920],{"class":34},[28,74482,2053],{"class":211},[28,74484,74486],{"class":30,"line":74485},239,[28,74487,74488],{"class":269},"      \u002F\u002F 非空判断\n",[28,74490,74492],{"class":30,"line":74491},240,[28,74493,74494],{"class":269},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[28,74496,74498],{"class":30,"line":74497},241,[28,74499,74500],{"class":269},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[28,74502,74504,74506,74508,74510,74513,74515,74518,74521,74523,74525],{"class":30,"line":74503},242,[28,74505,54531],{"class":207},[28,74507,1736],{"class":211},[28,74509,436],{"class":207},[28,74511,74512],{"class":211},"uname.value ",[28,74514,71408],{"class":207},[28,74516,74517],{"class":207}," !",[28,74519,74520],{"class":211},"age.value ",[28,74522,71408],{"class":207},[28,74524,74517],{"class":207},[28,74526,74527],{"class":211},"salary.value) {\n",[28,74529,74531,74533,74535,74537,74539],{"class":30,"line":74530},243,[28,74532,14829],{"class":207},[28,74534,69991],{"class":34},[28,74536,212],{"class":211},[28,74538,69996],{"class":64},[28,74540,218],{"class":211},[28,74542,74544],{"class":30,"line":74543},244,[28,74545,52449],{"class":211},[28,74547,74549,74551,74553],{"class":30,"line":74548},245,[28,74550,58058],{"class":211},[28,74552,51935],{"class":34},[28,74554,74555],{"class":211},"({\n",[28,74557,74559],{"class":30,"line":74558},246,[28,74560,74561],{"class":269},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[28,74563,74565],{"class":30,"line":74564},247,[28,74566,74567],{"class":269},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[28,74569,74571],{"class":30,"line":74570},248,[28,74572,74573],{"class":269},"        \u002F\u002F 对象的序号应为数组长度+1\n",[28,74575,74577],{"class":30,"line":74576},249,[28,74578,74579],{"class":269},"        \u002F\u002F unameId: arr.length + 1,\n",[28,74581,74583],{"class":30,"line":74582},250,[28,74584,2477],{"emptyLinePlaceholder":134},[28,74586,74588],{"class":30,"line":74587},251,[28,74589,74590],{"class":269},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[28,74592,74594],{"class":30,"line":74593},252,[28,74595,74596],{"class":269},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[28,74598,74600],{"class":30,"line":74599},253,[28,74601,74602],{"class":269},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[28,74604,74606],{"class":30,"line":74605},254,[28,74607,74608],{"class":269},"        \u002F\u002F 0当假看\n",[28,74610,74612,74615,74617,74619,74622,74624,74626,74628,74631,74633,74635,74638,74640],{"class":30,"line":74611},255,[28,74613,74614],{"class":211},"        unameId: arr.",[28,74616,52019],{"class":38},[28,74618,73865],{"class":207},[28,74620,74621],{"class":211}," arr[arr.",[28,74623,52019],{"class":38},[28,74625,52322],{"class":207},[28,74627,25189],{"class":38},[28,74629,74630],{"class":211},"].unameId ",[28,74632,691],{"class":207},[28,74634,25189],{"class":38},[28,74636,74637],{"class":207}," :",[28,74639,25189],{"class":38},[28,74641,31517],{"class":211},[28,74643,74645],{"class":30,"line":74644},256,[28,74646,70044],{"class":211},[28,74648,74650],{"class":30,"line":74649},257,[28,74651,70049],{"class":211},[28,74653,74655],{"class":30,"line":74654},258,[28,74656,70059],{"class":211},[28,74658,74660],{"class":30,"line":74659},259,[28,74661,70054],{"class":211},[28,74663,74665],{"class":30,"line":74664},260,[28,74666,74667],{"class":211},"        city: city.value,\n",[28,74669,74671],{"class":30,"line":74670},261,[28,74672,74673],{"class":269},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[28,74675,74677],{"class":30,"line":74676},262,[28,74678,74679],{"class":269},"        \u002F\u002F time: new Date().toDateString()\n",[28,74681,74683,74686,74689],{"class":30,"line":74682},263,[28,74684,74685],{"class":211},"        time: ",[28,74687,74688],{"class":34},"getTime",[28,74690,2053],{"class":211},[28,74692,74694],{"class":30,"line":74693},264,[28,74695,64866],{"class":211},[28,74697,74699],{"class":30,"line":74698},265,[28,74700,74701],{"class":269},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[28,74703,74705,74707],{"class":30,"line":74704},266,[28,74706,70119],{"class":34},[28,74708,2053],{"class":211},[28,74710,74712,74714,74716,74718,74720],{"class":30,"line":74711},267,[28,74713,70102],{"class":38},[28,74715,768],{"class":211},[28,74717,70107],{"class":34},[28,74719,13127],{"class":211},[28,74721,74722],{"class":269},"\u002F\u002F重置表单\n",[28,74724,74726],{"class":30,"line":74725},268,[28,74727,74728],{"class":269},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[28,74730,74732,74735,74737,74739,74742,74744,74746,74748,74750],{"class":30,"line":74731},269,[28,74733,74734],{"class":211},"      localStorage.",[28,74736,71705],{"class":34},[28,74738,212],{"class":211},[28,74740,74741],{"class":64},"'data'",[28,74743,12512],{"class":211},[28,74745,71715],{"class":38},[28,74747,768],{"class":211},[28,74749,71720],{"class":34},[28,74751,74752],{"class":211},"(arr))\n",[28,74754,74756],{"class":30,"line":74755},270,[28,74757,33512],{"class":211},[28,74759,74761],{"class":30,"line":74760},271,[28,74762,2477],{"emptyLinePlaceholder":134},[28,74764,74766],{"class":30,"line":74765},272,[28,74767,74768],{"class":269},"    \u002F\u002F 3.删除业务\n",[28,74770,74772],{"class":30,"line":74771},273,[28,74773,74774],{"class":269},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[28,74776,74778,74780,74782,74784,74786,74788,74790,74792,74794],{"class":30,"line":74777},274,[28,74779,70392],{"class":211},[28,74781,57864],{"class":34},[28,74783,212],{"class":211},[28,74785,57869],{"class":64},[28,74787,12512],{"class":211},[28,74789,54500],{"class":207},[28,74791,1736],{"class":211},[28,74793,285],{"class":5293},[28,74795,12519],{"class":211},[28,74797,74799],{"class":30,"line":74798},275,[28,74800,74801],{"class":269},"      \u002F\u002F 判断是否点击的是删除按钮\n",[28,74803,74805,74807,74809,74811,74813],{"class":30,"line":74804},276,[28,74806,54531],{"class":207},[28,74808,67085],{"class":211},[28,74810,54537],{"class":207},[28,74812,68307],{"class":64},[28,74814,12519],{"class":211},[28,74816,74818],{"class":30,"line":74817},277,[28,74819,74820],{"class":269},"        \u002F\u002F alert(1)\n",[28,74822,74824],{"class":30,"line":74823},278,[28,74825,74826],{"class":269},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[28,74828,74830],{"class":30,"line":74829},279,[28,74831,74832],{"class":269},"        \u002F\u002F console.log(e.target)\n",[28,74834,74836],{"class":30,"line":74835},280,[28,74837,74838],{"class":269},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[28,74840,74842],{"class":30,"line":74841},281,[28,74843,2477],{"emptyLinePlaceholder":134},[28,74845,74847],{"class":30,"line":74846},282,[28,74848,74849],{"class":269},"        \u002F\u002F 确认框，确然是否真的要删除\n",[28,74851,74853],{"class":30,"line":74852},283,[28,74854,74855],{"class":269},"        \u002F\u002F confirm()为确认框\n",[28,74857,74859],{"class":30,"line":74858},284,[28,74860,74861],{"class":269},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[28,74863,74865,74867,74869,74872,74874,74877],{"class":30,"line":74864},285,[28,74866,2574],{"class":207},[28,74868,1736],{"class":211},[28,74870,74871],{"class":34},"confirm",[28,74873,212],{"class":211},[28,74875,74876],{"class":64},"'您确定要删除这条数据吗？'",[28,74878,74879],{"class":211},")) {\n",[28,74881,74883,74886,74888,74890,74892],{"class":30,"line":74882},286,[28,74884,74885],{"class":211},"          arr.",[28,74887,58061],{"class":34},[28,74889,70445],{"class":211},[28,74891,427],{"class":38},[28,74893,218],{"class":211},[28,74895,74897],{"class":30,"line":74896},287,[28,74898,74899],{"class":269},"          \u002F\u002F 3.4 重新渲染页面\n",[28,74901,74903,74906],{"class":30,"line":74902},288,[28,74904,74905],{"class":34},"          render",[28,74907,2053],{"class":211},[28,74909,74911],{"class":30,"line":74910},289,[28,74912,74913],{"class":269},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[28,74915,74917,74920,74922,74924,74926,74928,74930,74932,74934],{"class":30,"line":74916},290,[28,74918,74919],{"class":211},"          localStorage.",[28,74921,71705],{"class":34},[28,74923,212],{"class":211},[28,74925,74741],{"class":64},[28,74927,12512],{"class":211},[28,74929,71715],{"class":38},[28,74931,768],{"class":211},[28,74933,71720],{"class":34},[28,74935,74752],{"class":211},[28,74937,74939],{"class":30,"line":74938},291,[28,74940,2606],{"class":211},[28,74942,74944],{"class":30,"line":74943},292,[28,74945,52449],{"class":211},[28,74947,74949],{"class":30,"line":74948},293,[28,74950,2477],{"emptyLinePlaceholder":134},[28,74952,74954],{"class":30,"line":74953},294,[28,74955,33512],{"class":211},[28,74957,74959],{"class":30,"line":74958},295,[28,74960,2477],{"emptyLinePlaceholder":134},[28,74962,74964,74966,74968],{"class":30,"line":74963},296,[28,74965,52468],{"class":211},[28,74967,51864],{"class":51351},[28,74969,51358],{"class":211},[28,74971,74973,74975,74977],{"class":30,"line":74972},297,[28,74974,51836],{"class":211},[28,74976,51851],{"class":51351},[28,74978,51358],{"class":211},[28,74980,74982],{"class":30,"line":74981},298,[28,74983,2477],{"emptyLinePlaceholder":134},[28,74985,74987,74989,74991],{"class":30,"line":74986},299,[28,74988,51836],{"class":211},[28,74990,50686],{"class":51351},[28,74992,51358],{"class":211},[149,74994,74996],{"id":74995},"_36-正则表达式","3.6 正则表达式",[14,74998,74999],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,75001,75002],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,75004,75005],{},"正则表达式的作用：",[116,75007,75008,75015,75021],{},[119,75009,75010,75011,75014],{},"表单验证（ ",[359,75012,75013],{},"匹配"," ）",[119,75016,75017,75018,75014],{},"过滤敏感词（ ",[359,75019,75020],{},"替换",[119,75022,75023,75024,75014],{},"字符串中提取我们想要的部分（ ",[359,75025,75026],{},"提取",[177,75028,75030],{"id":75029},"_361-语法","3.6.1 语法",[14,75032,75033],{},"正则表达式使用步骤：",[161,75035,75036,75039],{},[119,75037,75038],{},"定义规则",[119,75040,75041],{},"查找是否匹配",[14,75043,75044],{},"正则表达式里边不需要写引号",[14,75046,75047],{},[1540,75048],{"alt":23,"src":75049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75051,75052],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75054,75055],{},"reg.test(str)",[14,75057,75058],{},[1540,75059],{"alt":23,"src":75060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75062,75063],{},[1540,75064],{"alt":23,"src":75065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[177,75067,75069],{"id":75068},"_362-元字符","3.6.2 元字符",[161,75071,75072,75075,75078,75081,75088],{},[119,75073,75074],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[119,75076,75077],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[119,75079,75080],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[119,75082,75083,75084],{},"正则验证工具：",[448,75085,75086],{"href":75086,"rel":75087},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23940],[119,75089,75090],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22075,75092,75094],{"id":75093},"_3621-边界符","3.6.2.1 边界符",[14,75096,75097],{},[1540,75098],{"alt":23,"src":75099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75101,75102],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75104,75105],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75107,75108],{},"只匹配一次",[14,75110,75111],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22075,75113,75115],{"id":75114},"_3622-量词","3.6.2.2 量词",[14,75117,75118],{},[1540,75119],{"alt":23,"src":75120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75122,75123],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22075,75125,75127],{"id":75126},"_3623-元字符","3.6.2.3 元字符",[14,75129,75130],{},[1540,75131],{"alt":23,"src":75132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75134,75135],{},"匹配的是a或b或c []只选一个",[14,75137,75138],{},[1540,75139],{"alt":23,"src":75140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75142,75143],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75145,75146],{},[1540,75147],{"alt":23,"src":75148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75150,75151],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75153,75154],{},[1540,75155],{"alt":23,"src":75156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[18,75158,75160],{"className":50684,"code":75159,"language":50686,"meta":23,"style":23},"\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",[25,75161,75162,75172,75186,75190,75198,75212,75232,75244,75252,75256,75264,75272,75277,75308,75335,75363,75367,75372,75400,75431,75436,75441,75472,75504,75536,75540,75545,75576,75606,75636,75640,75645,75676,75707,75737,75767,75771,75776,75809,75813,75818,75849,75880,75884,75889,75920,75950,75981,75985,75990,76022,76053,76084,76111,76142,76174,76207,76238,76269,76301,76332,76340,76348,76352],{"__ignoreMap":23},[28,75163,75164,75166,75168,75170],{"class":30,"line":31},[28,75165,51348],{"class":211},[28,75167,51352],{"class":51351},[28,75169,51355],{"class":34},[28,75171,51358],{"class":211},[28,75173,75174,75176,75178,75180,75182,75184],{"class":30,"line":42},[28,75175,1120],{"class":211},[28,75177,50686],{"class":51351},[28,75179,51367],{"class":34},[28,75181,257],{"class":211},[28,75183,51372],{"class":64},[28,75185,51358],{"class":211},[28,75187,75188],{"class":30,"line":50},[28,75189,2477],{"emptyLinePlaceholder":134},[28,75191,75192,75194,75196],{"class":30,"line":58},[28,75193,1120],{"class":211},[28,75195,51385],{"class":51351},[28,75197,51358],{"class":211},[28,75199,75200,75202,75204,75206,75208,75210],{"class":30,"line":70},[28,75201,52195],{"class":211},[28,75203,51395],{"class":51351},[28,75205,51398],{"class":34},[28,75207,257],{"class":211},[28,75209,51403],{"class":64},[28,75211,51358],{"class":211},[28,75213,75214,75216,75218,75220,75222,75224,75226,75228,75230],{"class":30,"line":78},[28,75215,52195],{"class":211},[28,75217,51395],{"class":51351},[28,75219,14997],{"class":34},[28,75221,257],{"class":211},[28,75223,51442],{"class":64},[28,75225,51422],{"class":34},[28,75227,257],{"class":211},[28,75229,51449],{"class":64},[28,75231,51358],{"class":211},[28,75233,75234,75236,75238,75240,75242],{"class":30,"line":86},[28,75235,52195],{"class":211},[28,75237,51458],{"class":51351},[28,75239,51461],{"class":211},[28,75241,51458],{"class":51351},[28,75243,51358],{"class":211},[28,75245,75246,75248,75250],{"class":30,"line":97},[28,75247,51836],{"class":211},[28,75249,51385],{"class":51351},[28,75251,51358],{"class":211},[28,75253,75254],{"class":30,"line":108},[28,75255,2477],{"emptyLinePlaceholder":134},[28,75257,75258,75260,75262],{"class":30,"line":1407},[28,75259,1120],{"class":211},[28,75261,51851],{"class":51351},[28,75263,51358],{"class":211},[28,75265,75266,75268,75270],{"class":30,"line":1690},[28,75267,52195],{"class":211},[28,75269,51864],{"class":51351},[28,75271,51358],{"class":211},[28,75273,75274],{"class":30,"line":1695},[28,75275,75276],{"class":269},"    \u002F\u002F 元字符中\n",[28,75278,75279,75281,75283,75285,75287,75290,75292,75294,75297,75299,75302,75305],{"class":30,"line":1701},[28,75280,73804],{"class":211},[28,75282,58298],{"class":34},[28,75284,212],{"class":211},[28,75286,794],{"class":64},[28,75288,75289],{"class":48028},"哈",[28,75291,794],{"class":64},[28,75293,768],{"class":211},[28,75295,75296],{"class":34},"test",[28,75298,212],{"class":211},[28,75300,75301],{"class":64},"'哈'",[28,75303,75304],{"class":211},"))  ",[28,75306,75307],{"class":269},"\u002F\u002Ftrue\n",[28,75309,75310,75312,75314,75316,75318,75320,75322,75324,75326,75328,75331,75333],{"class":30,"line":1706},[28,75311,73804],{"class":211},[28,75313,58298],{"class":34},[28,75315,212],{"class":211},[28,75317,794],{"class":64},[28,75319,75289],{"class":48028},[28,75321,794],{"class":64},[28,75323,768],{"class":211},[28,75325,75296],{"class":34},[28,75327,212],{"class":211},[28,75329,75330],{"class":64},"'哈哈'",[28,75332,75304],{"class":211},[28,75334,75307],{"class":269},[28,75336,75337,75339,75341,75343,75345,75347,75349,75351,75353,75355,75358,75361],{"class":30,"line":1720},[28,75338,73804],{"class":211},[28,75340,58298],{"class":34},[28,75342,212],{"class":211},[28,75344,794],{"class":64},[28,75346,75289],{"class":48028},[28,75348,794],{"class":64},[28,75350,768],{"class":211},[28,75352,75296],{"class":34},[28,75354,212],{"class":211},[28,75356,75357],{"class":64},"'二哈'",[28,75359,75360],{"class":211},"))   ",[28,75362,75307],{"class":269},[28,75364,75365],{"class":30,"line":1725},[28,75366,2477],{"emptyLinePlaceholder":134},[28,75368,75369],{"class":30,"line":1731},[28,75370,75371],{"class":269},"    \u002F\u002F 1.边界符\n",[28,75373,75374,75376,75378,75380,75382,75384,75386,75388,75390,75392,75394,75396,75398],{"class":30,"line":1752},[28,75375,73804],{"class":211},[28,75377,58298],{"class":34},[28,75379,212],{"class":211},[28,75381,794],{"class":64},[28,75383,1176],{"class":207},[28,75385,75289],{"class":48028},[28,75387,794],{"class":64},[28,75389,768],{"class":211},[28,75391,75296],{"class":34},[28,75393,212],{"class":211},[28,75395,75301],{"class":64},[28,75397,75304],{"class":211},[28,75399,75307],{"class":269},[28,75401,75402,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422,75424,75426,75428],{"class":30,"line":1757},[28,75403,73804],{"class":211},[28,75405,58298],{"class":34},[28,75407,212],{"class":211},[28,75409,794],{"class":64},[28,75411,1176],{"class":207},[28,75413,75289],{"class":48028},[28,75415,512],{"class":207},[28,75417,794],{"class":64},[28,75419,768],{"class":211},[28,75421,75296],{"class":34},[28,75423,212],{"class":211},[28,75425,75330],{"class":64},[28,75427,75304],{"class":211},[28,75429,75430],{"class":269},"\u002F\u002Ffalse\n",[28,75432,75433],{"class":30,"line":1771},[28,75434,75435],{"class":269},"    \u002F\u002F 2.量词\n",[28,75437,75438],{"class":30,"line":1776},[28,75439,75440],{"class":269},"    \u002F\u002F 量词 * 类似于 >= 0\n",[28,75442,75443,75445,75447,75449,75451,75453,75455,75458,75460,75462,75464,75466,75468,75470],{"class":30,"line":1805},[28,75444,73804],{"class":211},[28,75446,58298],{"class":34},[28,75448,212],{"class":211},[28,75450,794],{"class":64},[28,75452,1176],{"class":207},[28,75454,75289],{"class":48028},[28,75456,75457],{"class":207},"*$",[28,75459,794],{"class":64},[28,75461,768],{"class":211},[28,75463,75296],{"class":34},[28,75465,212],{"class":211},[28,75467,75330],{"class":64},[28,75469,75304],{"class":211},[28,75471,75307],{"class":269},[28,75473,75474,75476,75478,75480,75482,75484,75486,75488,75490,75492,75494,75496,75499,75501],{"class":30,"line":1810},[28,75475,73804],{"class":211},[28,75477,58298],{"class":34},[28,75479,212],{"class":211},[28,75481,794],{"class":64},[28,75483,1176],{"class":207},[28,75485,75289],{"class":48028},[28,75487,75457],{"class":207},[28,75489,794],{"class":64},[28,75491,768],{"class":211},[28,75493,75296],{"class":34},[28,75495,212],{"class":211},[28,75497,75498],{"class":64},"'二哈好傻'",[28,75500,75304],{"class":211},[28,75502,75503],{"class":269},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[28,75505,75506,75508,75510,75512,75514,75516,75518,75520,75522,75524,75526,75528,75531,75533],{"class":30,"line":1827},[28,75507,73804],{"class":211},[28,75509,58298],{"class":34},[28,75511,212],{"class":211},[28,75513,794],{"class":64},[28,75515,1176],{"class":207},[28,75517,75289],{"class":48028},[28,75519,75457],{"class":207},[28,75521,794],{"class":64},[28,75523,768],{"class":211},[28,75525,75296],{"class":34},[28,75527,212],{"class":211},[28,75529,75530],{"class":64},"'哈好哈'",[28,75532,75360],{"class":211},[28,75534,75535],{"class":269},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[28,75537,75538],{"class":30,"line":1832},[28,75539,2477],{"emptyLinePlaceholder":134},[28,75541,75542],{"class":30,"line":1837},[28,75543,75544],{"class":269},"    \u002F\u002F +类似于>=1\n",[28,75546,75547,75549,75551,75553,75555,75557,75559,75562,75564,75566,75568,75570,75572,75574],{"class":30,"line":1842},[28,75548,73804],{"class":211},[28,75550,58298],{"class":34},[28,75552,212],{"class":211},[28,75554,794],{"class":64},[28,75556,1176],{"class":207},[28,75558,75289],{"class":48028},[28,75560,75561],{"class":207},"+$",[28,75563,794],{"class":64},[28,75565,768],{"class":211},[28,75567,75296],{"class":34},[28,75569,212],{"class":211},[28,75571,75330],{"class":64},[28,75573,75304],{"class":211},[28,75575,75307],{"class":269},[28,75577,75578,75580,75582,75584,75586,75588,75590,75592,75594,75596,75598,75600,75602,75604],{"class":30,"line":1856},[28,75579,73804],{"class":211},[28,75581,58298],{"class":34},[28,75583,212],{"class":211},[28,75585,794],{"class":64},[28,75587,1176],{"class":207},[28,75589,75289],{"class":48028},[28,75591,75561],{"class":207},[28,75593,794],{"class":64},[28,75595,768],{"class":211},[28,75597,75296],{"class":34},[28,75599,212],{"class":211},[28,75601,75498],{"class":64},[28,75603,75304],{"class":211},[28,75605,75503],{"class":269},[28,75607,75608,75610,75612,75614,75616,75618,75620,75622,75624,75626,75628,75630,75632,75634],{"class":30,"line":1861},[28,75609,73804],{"class":211},[28,75611,58298],{"class":34},[28,75613,212],{"class":211},[28,75615,794],{"class":64},[28,75617,1176],{"class":207},[28,75619,75289],{"class":48028},[28,75621,75561],{"class":207},[28,75623,794],{"class":64},[28,75625,768],{"class":211},[28,75627,75296],{"class":34},[28,75629,212],{"class":211},[28,75631,75530],{"class":64},[28,75633,75360],{"class":211},[28,75635,75430],{"class":269},[28,75637,75638],{"class":30,"line":2654},[28,75639,2477],{"emptyLinePlaceholder":134},[28,75641,75642],{"class":30,"line":2668},[28,75643,75644],{"class":269},"    \u002F\u002F ?类似于0次或一次\n",[28,75646,75647,75649,75651,75653,75655,75657,75660,75662,75664,75666,75668,75670,75672,75674],{"class":30,"line":2676},[28,75648,73804],{"class":211},[28,75650,58298],{"class":34},[28,75652,212],{"class":211},[28,75654,794],{"class":64},[28,75656,1176],{"class":207},[28,75658,75659],{"class":48028},"哈？",[28,75661,512],{"class":207},[28,75663,794],{"class":64},[28,75665,768],{"class":211},[28,75667,75296],{"class":34},[28,75669,212],{"class":211},[28,75671,74279],{"class":64},[28,75673,75360],{"class":211},[28,75675,75307],{"class":269},[28,75677,75678,75680,75682,75684,75686,75688,75690,75693,75695,75697,75699,75701,75703,75705],{"class":30,"line":2681},[28,75679,73804],{"class":211},[28,75681,58298],{"class":34},[28,75683,212],{"class":211},[28,75685,794],{"class":64},[28,75687,1176],{"class":207},[28,75689,75289],{"class":48028},[28,75691,75692],{"class":207},"?$",[28,75694,794],{"class":64},[28,75696,768],{"class":211},[28,75698,75296],{"class":34},[28,75700,212],{"class":211},[28,75702,75330],{"class":64},[28,75704,75304],{"class":211},[28,75706,75430],{"class":269},[28,75708,75709,75711,75713,75715,75717,75719,75721,75723,75725,75727,75729,75731,75733,75735],{"class":30,"line":2687},[28,75710,73804],{"class":211},[28,75712,58298],{"class":34},[28,75714,212],{"class":211},[28,75716,794],{"class":64},[28,75718,1176],{"class":207},[28,75720,75289],{"class":48028},[28,75722,75692],{"class":207},[28,75724,794],{"class":64},[28,75726,768],{"class":211},[28,75728,75296],{"class":34},[28,75730,212],{"class":211},[28,75732,75498],{"class":64},[28,75734,75304],{"class":211},[28,75736,75503],{"class":269},[28,75738,75739,75741,75743,75745,75747,75749,75751,75753,75755,75757,75759,75761,75763,75765],{"class":30,"line":2693},[28,75740,73804],{"class":211},[28,75742,58298],{"class":34},[28,75744,212],{"class":211},[28,75746,794],{"class":64},[28,75748,1176],{"class":207},[28,75750,75289],{"class":48028},[28,75752,75692],{"class":207},[28,75754,794],{"class":64},[28,75756,768],{"class":211},[28,75758,75296],{"class":34},[28,75760,212],{"class":211},[28,75762,75530],{"class":64},[28,75764,75304],{"class":211},[28,75766,75430],{"class":269},[28,75768,75769],{"class":30,"line":2698},[28,75770,2477],{"emptyLinePlaceholder":134},[28,75772,75773],{"class":30,"line":8025},[28,75774,75775],{"class":269},"    \u002F\u002F {n}写几，就必须出现几次\n",[28,75777,75778,75780,75782,75784,75786,75788,75790,75793,75795,75797,75799,75801,75804,75807],{"class":30,"line":8049},[28,75779,73804],{"class":211},[28,75781,58298],{"class":34},[28,75783,212],{"class":211},[28,75785,794],{"class":64},[28,75787,1176],{"class":207},[28,75789,75289],{"class":48028},[28,75791,75792],{"class":207},"{4}$",[28,75794,794],{"class":64},[28,75796,768],{"class":211},[28,75798,75296],{"class":34},[28,75800,212],{"class":211},[28,75802,75803],{"class":64},"'哈哈哈哈'",[28,75805,75806],{"class":211},")) ",[28,75808,75307],{"class":269},[28,75810,75811],{"class":30,"line":8054},[28,75812,2477],{"emptyLinePlaceholder":134},[28,75814,75815],{"class":30,"line":8060},[28,75816,75817],{"class":269},"    \u002F\u002F {n,}大于等于n次\n",[28,75819,75820,75822,75824,75826,75828,75830,75832,75835,75837,75839,75841,75843,75845,75847],{"class":30,"line":8087},[28,75821,73804],{"class":211},[28,75823,58298],{"class":34},[28,75825,212],{"class":211},[28,75827,794],{"class":64},[28,75829,1176],{"class":207},[28,75831,75289],{"class":48028},[28,75833,75834],{"class":207},"{4,}$",[28,75836,794],{"class":64},[28,75838,768],{"class":211},[28,75840,75296],{"class":34},[28,75842,212],{"class":211},[28,75844,75803],{"class":64},[28,75846,75806],{"class":211},[28,75848,75307],{"class":269},[28,75850,75851,75853,75855,75857,75859,75861,75863,75865,75867,75869,75871,75873,75876,75878],{"class":30,"line":8092},[28,75852,73804],{"class":211},[28,75854,58298],{"class":34},[28,75856,212],{"class":211},[28,75858,794],{"class":64},[28,75860,1176],{"class":207},[28,75862,75289],{"class":48028},[28,75864,75834],{"class":207},[28,75866,794],{"class":64},[28,75868,768],{"class":211},[28,75870,75296],{"class":34},[28,75872,212],{"class":211},[28,75874,75875],{"class":64},"'哈哈哈哈哈'",[28,75877,75806],{"class":211},[28,75879,75307],{"class":269},[28,75881,75882],{"class":30,"line":8098},[28,75883,2477],{"emptyLinePlaceholder":134},[28,75885,75886],{"class":30,"line":8110},[28,75887,75888],{"class":269},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[28,75890,75891,75893,75895,75897,75899,75901,75903,75906,75908,75910,75912,75914,75916,75918],{"class":30,"line":8122},[28,75892,73804],{"class":211},[28,75894,58298],{"class":34},[28,75896,212],{"class":211},[28,75898,794],{"class":64},[28,75900,1176],{"class":207},[28,75902,75289],{"class":48028},[28,75904,75905],{"class":207},"{4,6}$",[28,75907,794],{"class":64},[28,75909,768],{"class":211},[28,75911,75296],{"class":34},[28,75913,212],{"class":211},[28,75915,75803],{"class":64},[28,75917,75806],{"class":211},[28,75919,75307],{"class":269},[28,75921,75922,75924,75926,75928,75930,75932,75934,75936,75938,75940,75942,75944,75946,75948],{"class":30,"line":8134},[28,75923,73804],{"class":211},[28,75925,58298],{"class":34},[28,75927,212],{"class":211},[28,75929,794],{"class":64},[28,75931,1176],{"class":207},[28,75933,75289],{"class":48028},[28,75935,75905],{"class":207},[28,75937,794],{"class":64},[28,75939,768],{"class":211},[28,75941,75296],{"class":34},[28,75943,212],{"class":211},[28,75945,75875],{"class":64},[28,75947,75806],{"class":211},[28,75949,75307],{"class":269},[28,75951,75952,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75977,75979],{"class":30,"line":9793},[28,75953,73804],{"class":211},[28,75955,58298],{"class":34},[28,75957,212],{"class":211},[28,75959,794],{"class":64},[28,75961,1176],{"class":207},[28,75963,75289],{"class":48028},[28,75965,75905],{"class":207},[28,75967,794],{"class":64},[28,75969,768],{"class":211},[28,75971,75296],{"class":34},[28,75973,212],{"class":211},[28,75975,75976],{"class":64},"'哈哈哈哈哈哈哈'",[28,75978,75806],{"class":211},[28,75980,75430],{"class":269},[28,75982,75983],{"class":30,"line":9818},[28,75984,2477],{"emptyLinePlaceholder":134},[28,75986,75987],{"class":30,"line":9841},[28,75988,75989],{"class":269},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[28,75991,75992,75994,75996,75998,76000,76002,76005,76007,76009,76011,76013,76015,76018,76020],{"class":30,"line":9865},[28,75993,73804],{"class":211},[28,75995,58298],{"class":34},[28,75997,212],{"class":211},[28,75999,794],{"class":64},[28,76001,1176],{"class":207},[28,76003,76004],{"class":38},"[abc]",[28,76006,512],{"class":207},[28,76008,794],{"class":64},[28,76010,768],{"class":211},[28,76012,75296],{"class":34},[28,76014,212],{"class":211},[28,76016,76017],{"class":64},"'a'",[28,76019,75304],{"class":211},[28,76021,75307],{"class":269},[28,76023,76024,76026,76028,76030,76032,76034,76036,76038,76040,76042,76044,76046,76049,76051],{"class":30,"line":9870},[28,76025,73804],{"class":211},[28,76027,58298],{"class":34},[28,76029,212],{"class":211},[28,76031,794],{"class":64},[28,76033,1176],{"class":207},[28,76035,76004],{"class":38},[28,76037,512],{"class":207},[28,76039,794],{"class":64},[28,76041,768],{"class":211},[28,76043,75296],{"class":34},[28,76045,212],{"class":211},[28,76047,76048],{"class":64},"'b'",[28,76050,75304],{"class":211},[28,76052,75307],{"class":269},[28,76054,76055,76057,76059,76061,76063,76065,76067,76069,76071,76073,76075,76077,76080,76082],{"class":30,"line":9875},[28,76056,73804],{"class":211},[28,76058,58298],{"class":34},[28,76060,212],{"class":211},[28,76062,794],{"class":64},[28,76064,1176],{"class":207},[28,76066,76004],{"class":38},[28,76068,512],{"class":207},[28,76070,794],{"class":64},[28,76072,768],{"class":211},[28,76074,75296],{"class":34},[28,76076,212],{"class":211},[28,76078,76079],{"class":64},"'c'",[28,76081,75304],{"class":211},[28,76083,75307],{"class":269},[28,76085,76086,76088,76090,76092,76094,76096,76098,76100,76102,76104,76107,76109],{"class":30,"line":9880},[28,76087,73804],{"class":211},[28,76089,58298],{"class":34},[28,76091,212],{"class":211},[28,76093,794],{"class":64},[28,76095,76004],{"class":38},[28,76097,794],{"class":64},[28,76099,768],{"class":211},[28,76101,75296],{"class":34},[28,76103,212],{"class":211},[28,76105,76106],{"class":64},"'ab'",[28,76108,75304],{"class":211},[28,76110,75307],{"class":269},[28,76112,76113,76115,76117,76119,76121,76123,76125,76127,76129,76131,76133,76135,76137,76139],{"class":30,"line":9889},[28,76114,73804],{"class":211},[28,76116,58298],{"class":34},[28,76118,212],{"class":211},[28,76120,794],{"class":64},[28,76122,1176],{"class":207},[28,76124,76004],{"class":38},[28,76126,512],{"class":207},[28,76128,794],{"class":64},[28,76130,768],{"class":211},[28,76132,75296],{"class":34},[28,76134,212],{"class":211},[28,76136,76106],{"class":64},[28,76138,75304],{"class":211},[28,76140,76141],{"class":269},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[28,76143,76144,76146,76148,76150,76152,76154,76156,76159,76161,76163,76165,76167,76169,76171],{"class":30,"line":9894},[28,76145,73804],{"class":211},[28,76147,58298],{"class":34},[28,76149,212],{"class":211},[28,76151,794],{"class":64},[28,76153,1176],{"class":207},[28,76155,76004],{"class":38},[28,76157,76158],{"class":207},"{2}$",[28,76160,794],{"class":64},[28,76162,768],{"class":211},[28,76164,75296],{"class":34},[28,76166,212],{"class":211},[28,76168,76106],{"class":64},[28,76170,75304],{"class":211},[28,76172,76173],{"class":269},"\u002F\u002Ftrue   可以选两个\n",[28,76175,76176,76178,76180,76182,76184,76186,76189,76191,76193,76195,76197,76199,76202,76204],{"class":30,"line":9900},[28,76177,73804],{"class":211},[28,76179,58298],{"class":34},[28,76181,212],{"class":211},[28,76183,794],{"class":64},[28,76185,1176],{"class":207},[28,76187,76188],{"class":38},"[a-z]",[28,76190,512],{"class":207},[28,76192,794],{"class":64},[28,76194,768],{"class":211},[28,76196,75296],{"class":34},[28,76198,212],{"class":211},[28,76200,76201],{"class":64},"'p'",[28,76203,75360],{"class":211},[28,76205,76206],{"class":269},"\u002F\u002Ftrue   依然只能选一个\n",[28,76208,76209,76211,76213,76215,76217,76219,76222,76224,76226,76228,76230,76232,76234,76236],{"class":30,"line":9921},[28,76210,73804],{"class":211},[28,76212,58298],{"class":34},[28,76214,212],{"class":211},[28,76216,794],{"class":64},[28,76218,1176],{"class":207},[28,76220,76221],{"class":38},"[A-Z]",[28,76223,512],{"class":207},[28,76225,794],{"class":64},[28,76227,768],{"class":211},[28,76229,75296],{"class":34},[28,76231,212],{"class":211},[28,76233,76201],{"class":64},[28,76235,75360],{"class":211},[28,76237,75430],{"class":269},[28,76239,76240,76242,76244,76246,76248,76250,76252,76254,76256,76258,76260,76262,76265,76267],{"class":30,"line":9927},[28,76241,73804],{"class":211},[28,76243,58298],{"class":34},[28,76245,212],{"class":211},[28,76247,794],{"class":64},[28,76249,1176],{"class":207},[28,76251,76221],{"class":38},[28,76253,512],{"class":207},[28,76255,794],{"class":64},[28,76257,768],{"class":211},[28,76259,75296],{"class":34},[28,76261,212],{"class":211},[28,76263,76264],{"class":64},"'P'",[28,76266,75360],{"class":211},[28,76268,75307],{"class":269},[28,76270,76271,76273,76275,76277,76279,76281,76284,76286,76288,76290,76292,76294,76297,76299],{"class":30,"line":9941},[28,76272,73804],{"class":211},[28,76274,58298],{"class":34},[28,76276,212],{"class":211},[28,76278,794],{"class":64},[28,76280,1176],{"class":207},[28,76282,76283],{"class":38},"[0-9]",[28,76285,512],{"class":207},[28,76287,794],{"class":64},[28,76289,768],{"class":211},[28,76291,75296],{"class":34},[28,76293,212],{"class":211},[28,76295,76296],{"class":64},"'0'",[28,76298,75360],{"class":211},[28,76300,75307],{"class":269},[28,76302,76303,76305,76307,76309,76311,76313,76316,76318,76320,76322,76324,76326,76328,76330],{"class":30,"line":9947},[28,76304,73804],{"class":211},[28,76306,58298],{"class":34},[28,76308,212],{"class":211},[28,76310,794],{"class":64},[28,76312,1176],{"class":207},[28,76314,76315],{"class":38},"[a-zA-Z0-9]",[28,76317,512],{"class":207},[28,76319,794],{"class":64},[28,76321,768],{"class":211},[28,76323,75296],{"class":34},[28,76325,212],{"class":211},[28,76327,76201],{"class":64},[28,76329,75304],{"class":211},[28,76331,75307],{"class":269},[28,76333,76334,76336,76338],{"class":30,"line":9974},[28,76335,52468],{"class":211},[28,76337,51864],{"class":51351},[28,76339,51358],{"class":211},[28,76341,76342,76344,76346],{"class":30,"line":9983},[28,76343,51836],{"class":211},[28,76345,51851],{"class":51351},[28,76347,51358],{"class":211},[28,76349,76350],{"class":30,"line":9989},[28,76351,2477],{"emptyLinePlaceholder":134},[28,76353,76354,76356,76358],{"class":30,"line":9997},[28,76355,51836],{"class":211},[28,76357,50686],{"class":51351},[28,76359,51358],{"class":211},[22075,76361,76363],{"id":76362},"_3624-修饰符","3.6.2.4 修饰符",[14,76365,76366],{},[1540,76367],{"alt":23,"src":76368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76370,76371],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76373,76374],{},[1540,76375],{"alt":23,"src":76376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[18,76378,76380],{"className":50684,"code":76379,"language":50686,"meta":23,"style":23},"\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",[25,76381,76382,76392,76406,76414,76428,76448,76460,76468,76476,76484,76516,76547,76552,76584,76595,76628,76637,76645,76653],{"__ignoreMap":23},[28,76383,76384,76386,76388,76390],{"class":30,"line":31},[28,76385,51348],{"class":211},[28,76387,51352],{"class":51351},[28,76389,51355],{"class":34},[28,76391,51358],{"class":211},[28,76393,76394,76396,76398,76400,76402,76404],{"class":30,"line":42},[28,76395,1120],{"class":211},[28,76397,50686],{"class":51351},[28,76399,51367],{"class":34},[28,76401,257],{"class":211},[28,76403,51372],{"class":64},[28,76405,51358],{"class":211},[28,76407,76408,76410,76412],{"class":30,"line":50},[28,76409,1120],{"class":211},[28,76411,51385],{"class":51351},[28,76413,51358],{"class":211},[28,76415,76416,76418,76420,76422,76424,76426],{"class":30,"line":58},[28,76417,52195],{"class":211},[28,76419,51395],{"class":51351},[28,76421,51398],{"class":34},[28,76423,257],{"class":211},[28,76425,51403],{"class":64},[28,76427,51358],{"class":211},[28,76429,76430,76432,76434,76436,76438,76440,76442,76444,76446],{"class":30,"line":70},[28,76431,52195],{"class":211},[28,76433,51395],{"class":51351},[28,76435,14997],{"class":34},[28,76437,257],{"class":211},[28,76439,51442],{"class":64},[28,76441,51422],{"class":34},[28,76443,257],{"class":211},[28,76445,51449],{"class":64},[28,76447,51358],{"class":211},[28,76449,76450,76452,76454,76456,76458],{"class":30,"line":78},[28,76451,52195],{"class":211},[28,76453,51458],{"class":51351},[28,76455,51461],{"class":211},[28,76457,51458],{"class":51351},[28,76459,51358],{"class":211},[28,76461,76462,76464,76466],{"class":30,"line":86},[28,76463,51836],{"class":211},[28,76465,51385],{"class":51351},[28,76467,51358],{"class":211},[28,76469,76470,76472,76474],{"class":30,"line":97},[28,76471,1120],{"class":211},[28,76473,51851],{"class":51351},[28,76475,51358],{"class":211},[28,76477,76478,76480,76482],{"class":30,"line":108},[28,76479,52195],{"class":211},[28,76481,51864],{"class":51351},[28,76483,51358],{"class":211},[28,76485,76486,76488,76490,76492,76494,76496,76499,76501,76503,76505,76507,76509,76512,76514],{"class":30,"line":1407},[28,76487,73804],{"class":211},[28,76489,58298],{"class":34},[28,76491,212],{"class":211},[28,76493,794],{"class":64},[28,76495,1176],{"class":207},[28,76497,76498],{"class":48028},"java",[28,76500,512],{"class":207},[28,76502,794],{"class":64},[28,76504,768],{"class":211},[28,76506,75296],{"class":34},[28,76508,212],{"class":211},[28,76510,76511],{"class":64},"'java'",[28,76513,75806],{"class":211},[28,76515,75307],{"class":269},[28,76517,76518,76520,76522,76524,76526,76528,76530,76532,76534,76536,76538,76540,76543,76545],{"class":30,"line":1690},[28,76519,73804],{"class":211},[28,76521,58298],{"class":34},[28,76523,212],{"class":211},[28,76525,794],{"class":64},[28,76527,1176],{"class":207},[28,76529,76498],{"class":48028},[28,76531,512],{"class":207},[28,76533,794],{"class":64},[28,76535,768],{"class":211},[28,76537,75296],{"class":34},[28,76539,212],{"class":211},[28,76541,76542],{"class":64},"'Java'",[28,76544,75806],{"class":211},[28,76546,75430],{"class":269},[28,76548,76549],{"class":30,"line":1695},[28,76550,76551],{"class":269},"    \u002F\u002F 不区分大小写、\n",[28,76553,76554,76556,76558,76560,76562,76564,76566,76568,76570,76572,76574,76576,76578,76580,76582],{"class":30,"line":1701},[28,76555,73804],{"class":211},[28,76557,58298],{"class":34},[28,76559,212],{"class":211},[28,76561,794],{"class":64},[28,76563,1176],{"class":207},[28,76565,76498],{"class":48028},[28,76567,512],{"class":207},[28,76569,794],{"class":64},[28,76571,651],{"class":207},[28,76573,768],{"class":211},[28,76575,75296],{"class":34},[28,76577,212],{"class":211},[28,76579,76542],{"class":64},[28,76581,75806],{"class":211},[28,76583,75307],{"class":269},[28,76585,76586,76588,76590,76592],{"class":30,"line":1706},[28,76587,11298],{"class":207},[28,76589,73970],{"class":38},[28,76591,13641],{"class":207},[28,76593,76594],{"class":64}," 'java是一门编程语言，学完java工资很高'\n",[28,76596,76597,76599,76602,76604,76607,76610,76612,76614,76616,76618,76621,76623,76626],{"class":30,"line":1720},[28,76598,11298],{"class":207},[28,76600,76601],{"class":38}," result",[28,76603,13641],{"class":207},[28,76605,76606],{"class":211}," str.",[28,76608,76609],{"class":34},"replace",[28,76611,212],{"class":211},[28,76613,794],{"class":64},[28,76615,76498],{"class":48028},[28,76617,794],{"class":64},[28,76619,76620],{"class":207},"ig",[28,76622,12512],{"class":211},[28,76624,76625],{"class":64},"'前端'",[28,76627,218],{"class":211},[28,76629,76630,76632,76634],{"class":30,"line":1725},[28,76631,73804],{"class":211},[28,76633,58298],{"class":34},[28,76635,76636],{"class":211},"(result)\n",[28,76638,76639,76641,76643],{"class":30,"line":1731},[28,76640,52468],{"class":211},[28,76642,51864],{"class":51351},[28,76644,51358],{"class":211},[28,76646,76647,76649,76651],{"class":30,"line":1752},[28,76648,51836],{"class":211},[28,76650,51851],{"class":51351},[28,76652,51358],{"class":211},[28,76654,76655,76657,76659],{"class":30,"line":1757},[28,76656,51836],{"class":211},[28,76658,50686],{"class":51351},[28,76660,51358],{"class":211},[126,76662,76663],{},"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":23,"searchDepth":42,"depth":42,"links":76665},[76666,76676,76688,76705,76712,76720],{"id":53411,"depth":42,"text":53412,"children":76667},[76668,76669,76670,76671,76672,76673,76674,76675],{"id":53415,"depth":50,"text":53416},{"id":53448,"depth":50,"text":53449},{"id":53487,"depth":50,"text":53488},{"id":53645,"depth":50,"text":53646},{"id":53693,"depth":50,"text":53694},{"id":53830,"depth":50,"text":53831},{"id":54152,"depth":50,"text":54153},{"id":57140,"depth":50,"text":57141},{"id":57168,"depth":42,"text":57169,"children":76677},[76678,76679,76680,76681,76682,76683,76684,76685,76686,76687],{"id":57172,"depth":50,"text":57173},{"id":57195,"depth":50,"text":57196},{"id":58110,"depth":50,"text":58111},{"id":58800,"depth":50,"text":58801},{"id":59082,"depth":50,"text":59083},{"id":63243,"depth":50,"text":63244},{"id":63413,"depth":50,"text":63414},{"id":63541,"depth":50,"text":63542},{"id":63566,"depth":50,"text":63567},{"id":64955,"depth":50,"text":64956},{"id":66108,"depth":42,"text":66109,"children":76689},[76690,76691,76692,76693,76694,76695,76696,76697,76698,76699,76700,76701,76702,76703,76704],{"id":66112,"depth":50,"text":66113},{"id":66766,"depth":50,"text":66767},{"id":68461,"depth":50,"text":68462},{"id":68502,"depth":50,"text":68503},{"id":68544,"depth":50,"text":68545},{"id":68558,"depth":50,"text":68559},{"id":68607,"depth":50,"text":68608},{"id":68619,"depth":50,"text":68620},{"id":68634,"depth":50,"text":68635},{"id":68670,"depth":50,"text":68671},{"id":68751,"depth":50,"text":68752},{"id":68879,"depth":50,"text":68880},{"id":68891,"depth":50,"text":68892},{"id":68910,"depth":50,"text":68911},{"id":71021,"depth":50,"text":71022},{"id":71040,"depth":42,"text":71041,"children":76706},[76707,76708,76709,76710,76711],{"id":71061,"depth":50,"text":71062},{"id":71081,"depth":50,"text":71082},{"id":71130,"depth":50,"text":71131},{"id":71255,"depth":50,"text":71256},{"id":71436,"depth":50,"text":71437},{"id":71454,"depth":42,"text":71455,"children":76713},[76714,76715,76716,76717,76718,76719],{"id":71469,"depth":50,"text":71470},{"id":71528,"depth":50,"text":71529},{"id":71552,"depth":50,"text":71553},{"id":71872,"depth":50,"text":71873},{"id":71904,"depth":50,"text":71905},{"id":71927,"depth":50,"text":71928},{"id":74995,"depth":42,"text":74996,"children":76721},[76722,76723],{"id":75029,"depth":50,"text":75030},{"id":75068,"depth":50,"text":75069},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53383,"description":131},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76730,"title":76731,"body":76732,"description":131,"extension":132,"meta":92869,"navigation":134,"path":92870,"seo":92871,"stem":92872,"__hash__":92873},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76733,"toc":92805},[76734,76737,76740,76744,76748,76753,76758,76769,76773,76778,76781,76785,76788,76793,76797,76801,76804,76809,76812,76816,76819,76827,76830,76834,76839,76844,76847,76851,76856,76861,76864,76868,76873,76876,76881,76884,76889,76892,76897,76902,76905,76908,76912,76917,76922,76925,76929,76933,76936,76939,76942,76946,76950,76955,76960,76963,76967,76972,76977,76980,76983,76986,76989,76992,76995,76998,77001,77004,77009,77013,77018,77023,77026,77029,77032,77035,77038,77041,77044,77047,77051,77055,77058,77061,77064,77069,77071,77074,77077,77080,77083,77086,77089,77092,77095,77098,77101,77104,77107,77110,77115,77120,77125,77128,77132,77135,77140,77144,77146,77157,77162,77263,77266,77269,77272,77275,77278,77281,77284,77287,77289,77292,77295,77298,77301,77304,77306,77309,77312,77315,77318,77321,77324,77326,77329,77331,77333,77336,77340,77344,77347,77350,77353,77356,77359,77362,77365,77368,77371,77376,77496,77499,77502,77507,77510,77513,77516,77519,77524,77527,77530,77533,77536,77541,77544,77644,77709,77783,77787,77790,77793,77797,77800,77814,77843,77846,77849,77852,77855,77858,77861,77864,77866,77869,77872,77875,77878,77882,77887,77891,77896,77971,77974,78157,78160,78163,78166,78169,78172,78174,78177,78180,78183,78186,78189,78192,78194,78198,78201,78206,78209,78212,78215,78218,78220,78225,78228,78231,78234,78237,78239,78244,78247,78250,78252,78254,78257,78261,78264,78267,78272,78275,78278,78281,78331,78336,78340,78345,78348,78417,78420,78429,78433,78438,78441,78444,78452,78455,78472,80274,80278,80282,80287,80290,80294,80300,80306,80458,80463,80468,80471,80474,80477,80480,80483,80486,80489,80492,80495,80498,80501,80504,80509,80513,80516,80527,80531,80536,80539,80542,80545,80548,80551,80553,80556,80559,80562,80565,80567,80584,80587,80591,80594,80599,80604,80607,80610,80614,80617,80620,80629,80632,80636,80639,80644,80649,80716,80720,80723,80726,80731,80736,80822,80827,80831,80834,80837,80852,80855,80860,80864,80869,80978,80981,80992,81142,81146,81151,81260,81264,81269,81274,81279,81282,81289,81309,81345,81509,81514,81517,81522,81529,81532,81535,81538,81597,81653,81709,81713,81718,82033,82036,82040,82043,82048,82157,82162,82166,82171,82175,82246,82250,82252,82255,82258,82296,82572,82576,82593,82659,82693,82697,82700,82705,82734,82741,82750,82755,82770,82775,82784,82787,82924,82928,82990,82994,82999,83244,83248,83253,83256,83259,83262,83265,83269,83274,84855,84859,84863,84869,84872,84877,84881,84884,84889,84892,84903,84907,84912,84916,84921,84926,84929,84934,84938,84942,84945,84950,84955,84958,84961,84964,85086,85091,85193,85196,85199,85203,85208,85380,85385,85389,85392,85397,85463,85468,85471,85602,85605,85610,85613,85616,85707,85712,85715,85718,85721,85724,85729,85734,85737,85742,85747,85752,85756,85759,85762,85767,85772,85777,85782,85836,85839,85842,85847,85850,85853,85858,85863,85868,85872,85877,85891,85896,85899,85904,85908,85913,85918,85923,85928,85933,85938,85943,85948,85951,85955,85960,85963,85966,85969,85974,85979,85982,85985,85989,85992,85995,86000,86005,86010,86015,86018,86023,86028,86089,86094,86097,86102,87343,87348,87352,87356,87361,87364,87369,87374,87377,87382,87384,87389,87393,87396,87399,87410,87414,87419,87424,87479,87484,87489,87494,87705,87710,87714,87719,87722,87724,87727,87730,88177,88182,88189,88195,88198,88201,88465,88470,88474,88739,88744,88748,88753,88758,88763,88768,89099,89102,89107,89112,89115,89119,89123,89128,89133,89138,89143,89148,89153,89157,89160,89165,89170,89173,89247,89252,89257,89262,89264,89267,89637,89642,89647,89652,89655,89658,89760,89765,89770,89873,89877,89882,89886,89890,89895,89900,89903,89908,89911,89914,90307,90312,90315,90318,90321,90324,90844,90848,90853,90858,90863,90866,90871,90874,90877,91259,91264,91266,91268,91271,91274,91786,91790,91851,91854,91857,91860,91864,91867,91872,91877,92802],[10,76735,76731],{"id":76736},"_4js进阶",[14,76738,76739],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[149,76741,76743],{"id":76742},"_41-作用域","4.1 作用域",[177,76745,76747],{"id":76746},"_411-局部作用域","4.1.1 局部作用域",[14,76749,76750],{},[1540,76751],{"alt":23,"src":76752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76754,76755],{},[1540,76756],{"alt":23,"src":76757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[116,76759,76760,76763,76766],{},[119,76761,76762],{},"函数作用域在函数内部",[119,76764,76765],{},"块级作用域在{}",[119,76767,76768],{},"对象的那个{}不是作用域，不是块作用域",[177,76770,76772],{"id":76771},"_412-全局作用域","4.1.2 全局作用域",[14,76774,76775],{},[1540,76776],{"alt":23,"src":76777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76779,76780],{},"window.a=10不要这样写",[177,76782,76784],{"id":76783},"_413-作用域链","4.1.3 作用域链",[14,76786,76787],{},"变量查找机制",[14,76789,76790],{},[1540,76791],{"alt":23,"src":76792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[149,76794,76796],{"id":76795},"_42-垃圾回收机制","4.2 垃圾回收机制",[177,76798,76800],{"id":76799},"_421-大体介绍","4.2.1 大体介绍",[14,76802,76803],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76805,76806],{},[1540,76807],{"alt":23,"src":76808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76810,76811],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[177,76813,76815],{"id":76814},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76817,76818],{},"堆栈空间分配区别：",[161,76820,76821,76824],{},[119,76822,76823],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[119,76825,76826],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76828,76829],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22075,76831,76833],{"id":76832},"_4221-引用计数","4.2.2.1 引用计数",[14,76835,76836],{},[1540,76837],{"alt":23,"src":76838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76840,76841],{},[1540,76842],{"alt":23,"src":76843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76845,76846],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22075,76848,76850],{"id":76849},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76852,76853],{},[1540,76854],{"alt":23,"src":76855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76857,76858],{},[1540,76859],{"alt":23,"src":76860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76862,76863],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[149,76865,76867],{"id":76866},"_43-闭包","4.3 闭包",[14,76869,76870],{},[1540,76871],{"alt":23,"src":76872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76874,76875],{},"闭包：内层函数+外层函数的变量",[14,76877,76878],{},[1540,76879],{"alt":23,"src":76880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76882,76883],{},"closure就是闭包",[14,76885,76886],{},[1540,76887],{"alt":23,"src":76888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76890,76891],{},"内层函数必须包含外层函数的变量才是闭包",[14,76893,76894],{},[1540,76895],{"alt":23,"src":76896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76898,76899],{},[1540,76900],{"alt":23,"src":76901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76903,76904],{},"闭包可能会引起内存泄漏",[14,76906,76907],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[149,76909,76911],{"id":76910},"_44-变量提升","4.4 变量提升",[14,76913,76914],{},[1540,76915],{"alt":23,"src":76916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76918,76919],{},[1540,76920],{"alt":23,"src":76921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76923,76924],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[149,76926,76928],{"id":76927},"_45-函数进阶","4.5 函数进阶",[177,76930,76932],{"id":76931},"_451-函数提升","4.5.1 函数提升",[14,76934,76935],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76937,76938],{},"只提升函数声明，不提升函数调用",[51864,76940,76941],{},"\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",[177,76943,76945],{"id":76944},"_452-函数参数","4.5.2 函数参数",[22075,76947,76949],{"id":76948},"_4521-动态参数","4.5.2.1 动态参数",[14,76951,76952],{},[1540,76953],{"alt":23,"src":76954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76956,76957],{},[1540,76958],{"alt":23,"src":76959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76961,76962],{},"箭头函数里边没有arguments",[22075,76964,76966],{"id":76965},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76968,76969],{},[1540,76970],{"alt":23,"src":76971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76973,76974],{},[1540,76975],{"alt":23,"src":76976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76978,76979],{},"剩余参数使用的时候不需要写...",[14,76981,76982],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76984,76985],{},"  function getSum(a,b,...arr) {",[14,76987,76988],{},"  console.log(11)",[14,76990,76991],{},"  }",[14,76993,76994],{},"  getSum(1,2,3,4)",[14,76996,76997],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76999,77000],{},"  getSum(1,2)",[14,77002,77003],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,77005,77006],{},[1540,77007],{"alt":23,"src":77008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22075,77010,77012],{"id":77011},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,77014,77015],{},[1540,77016],{"alt":23,"src":77017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,77019,77020],{},[1540,77021],{"alt":23,"src":77022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,77024,77025],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,77027,77028],{},"展开运算符可以用于数组之间的合并：",[14,77030,77031],{},"const arr1 = [1, 2, 3]",[14,77033,77034],{},"const arr2 = [3, 4, 5]",[14,77036,77037],{},"const arr = [...arr1, ...arr2]",[14,77039,77040],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77042,77043],{},"剩余参数：函数参数使用，得到真数组",[14,77045,77046],{},"展开运算符：数组中使用，数组展开",[177,77048,77050],{"id":77049},"_453-箭头函数","4.5.3 箭头函数",[22075,77052,77054],{"id":77053},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77056,77057],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77059,77060],{},"它不是万能的！！！",[14,77062,77063],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77065,77066],{},[1540,77067],{"alt":23,"src":77068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77070,241],{},[14,77072,77073],{},"① 只有一个形参的时候，可以省略小括号：",[14,77075,77076],{},"const fn=x=>{console.log(x)}",[14,77078,77079],{},"② 只有一行代码时可以省略大括号：",[14,77081,77082],{},"const fn=x=>console.log(11)",[14,77084,77085],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77087,77088],{},"const fn=x=>x+x",[14,77090,77091],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77093,77094],{},"⑤ 阻止表单默认提交：",[14,77096,77097],{},"const form = document.querySelector('form')",[14,77099,77100],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77102,77103],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77105,77106],{},"const fn=uname=>({uname:uname})",[14,77108,77109],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77111,77112],{},[1540,77113],{"alt":23,"src":77114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77116,77117],{},[1540,77118],{"alt":23,"src":77119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77121,77122],{},[1540,77123],{"alt":23,"src":77124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77126,77127],{},"一定不要忘记用()，有()就理解为自带return",[22075,77129,77131],{"id":77130},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77133,77134],{},"箭头函数是没有动态参数的arguments",[14,77136,77137],{},[1540,77138],{"alt":23,"src":77139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22075,77141,77143],{"id":77142},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77145,11409],{},[161,77147,77148,77151,77154],{},[119,77149,77150],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[119,77152,77153],{},"事件回调函数使用箭头函数时，this 为全局的 window",[119,77155,77156],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77158,77159],{},[1540,77160],{"alt":23,"src":77161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[18,77163,77165],{"className":53118,"code":77164,"language":53120,"meta":23,"style":23},"  \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",[25,77166,77167,77175,77180,77185,77190,77195,77200,77204,77209,77213,77217,77222,77227,77232,77236,77240,77245,77250,77255],{"__ignoreMap":23},[28,77168,77169,77171,77173],{"class":30,"line":31},[28,77170,52195],{"class":211},[28,77172,51864],{"class":51351},[28,77174,51358],{"class":211},[28,77176,77177],{"class":30,"line":42},[28,77178,77179],{"class":211},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[28,77181,77182],{"class":30,"line":50},[28,77183,77184],{"class":211},"    console.log(this) \u002F\u002F指向window\n",[28,77186,77187],{"class":30,"line":58},[28,77188,77189],{"class":211},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[28,77191,77192],{"class":30,"line":70},[28,77193,77194],{"class":211},"    function fn() {\n",[28,77196,77197],{"class":30,"line":78},[28,77198,77199],{"class":211},"      console.log(this)  \u002F\u002F指向window\n",[28,77201,77202],{"class":30,"line":86},[28,77203,2264],{"class":211},[28,77205,77206],{"class":30,"line":97},[28,77207,77208],{"class":211},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[28,77210,77211],{"class":30,"line":108},[28,77212,2477],{"emptyLinePlaceholder":134},[28,77214,77215],{"class":30,"line":1407},[28,77216,71574],{"class":211},[28,77218,77219],{"class":30,"line":1690},[28,77220,77221],{"class":211},"      name: 'andy',\n",[28,77223,77224],{"class":30,"line":1695},[28,77225,77226],{"class":211},"      sayHai: function () {\n",[28,77228,77229],{"class":30,"line":1701},[28,77230,77231],{"class":211},"        console.log(this)\n",[28,77233,77234],{"class":30,"line":1706},[28,77235,52449],{"class":211},[28,77237,77238],{"class":30,"line":1720},[28,77239,2264],{"class":211},[28,77241,77242],{"class":30,"line":1725},[28,77243,77244],{"class":211},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[28,77246,77247],{"class":30,"line":1731},[28,77248,77249],{"class":211},"    \u002F\u002F 2.箭头函数的this\n",[28,77251,77252],{"class":30,"line":1752},[28,77253,77254],{"class":211},"    const fn = () => console.log(this)\n",[28,77256,77257,77259,77261],{"class":30,"line":1757},[28,77258,52468],{"class":211},[28,77260,51864],{"class":51351},[28,77262,51358],{"class":211},[14,77264,77265],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77267,77268],{},"const fn = () => console.log(this)",[14,77270,77271],{},"fn() \u002F\u002F指向window",[14,77273,77274],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77276,77277],{},"①",[14,77279,77280],{},"const obj = {",[14,77282,77283],{},"uname: 'pink老师',",[14,77285,77286],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77288,1156],{},[14,77290,77291],{},"调用对象里边的函数",[14,77293,77294],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77296,77297],{},"obj.sayHai()",[14,77299,77300],{},"②",[14,77302,77303],{},"const obj1 = {",[14,77305,77283],{},[14,77307,77308],{},"sayHai: function () {",[14,77310,77311],{},"let i = 10",[14,77313,77314],{},"const count = () => {",[14,77316,77317],{},"console.log(this)",[14,77319,77320],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77322,77323],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77325,1156],{},[14,77327,77328],{},"count()",[14,77330,1156],{},[14,77332,1156],{},[14,77334,77335],{},"obj1.sayHai()",[149,77337,77339],{"id":77338},"_46-解构赋值","4.6 解构赋值",[177,77341,77343],{"id":77342},"_461-数组解构","4.6.1 数组解构",[14,77345,77346],{},"以前要是使用数组中的值的话：",[14,77348,77349],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77351,77352],{},"const arr=[100,60,80]",[14,77354,77355],{},"const max=arr[0]",[14,77357,77358],{},"const min=arr[1]",[14,77360,77361],{},"const avg=arr[2]",[14,77363,77364],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77366,77367],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77369,77370],{},"这个写法就类似于上边的那种用很多const的方法",[14,77372,77373],{},[1540,77374],{"alt":23,"src":77375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[18,77377,77379],{"className":50684,"code":77378,"language":50686,"meta":23,"style":23},"①变量之间交换值:\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",[25,77380,77381,77386,77391,77396,77401,77406,77410,77414,77419,77423,77428,77433,77437,77442,77447,77458,77468,77473,77478,77483,77487,77491],{"__ignoreMap":23},[28,77382,77383],{"class":30,"line":31},[28,77384,77385],{"class":211},"①变量之间交换值:\n",[28,77387,77388],{"class":30,"line":42},[28,77389,77390],{"class":211},"let a=1\n",[28,77392,77393],{"class":30,"line":50},[28,77394,77395],{"class":211},"let b=2;\n",[28,77397,77398],{"class":30,"line":58},[28,77399,77400],{"class":211},"必须加这行代码，不然就会报错\n",[28,77402,77403],{"class":30,"line":70},[28,77404,77405],{"class":211},"[b,a]=[a,b]\n",[28,77407,77408],{"class":30,"line":78},[28,77409,2477],{"emptyLinePlaceholder":134},[28,77411,77412],{"class":30,"line":86},[28,77413,2477],{"emptyLinePlaceholder":134},[28,77415,77416],{"class":30,"line":97},[28,77417,77418],{"class":211},"可以写成下面的方式：\n",[28,77420,77421],{"class":30,"line":108},[28,77422,77390],{"class":211},[28,77424,77425],{"class":30,"line":1407},[28,77426,77427],{"class":211},"let b=2\n",[28,77429,77430],{"class":30,"line":1690},[28,77431,77432],{"class":211},";[b,a]=[a,b]\n",[28,77434,77435],{"class":30,"line":1695},[28,77436,2477],{"emptyLinePlaceholder":134},[28,77438,77439],{"class":30,"line":1701},[28,77440,77441],{"class":211},"②排序\n",[28,77443,77444],{"class":30,"line":1706},[28,77445,77446],{"class":211},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[28,77448,77449,77452,77455],{"class":30,"line":1720},[28,77450,77451],{"class":211},"for (let i = 0; i ",[28,77453,1120],{"class":77454},"s7hpK",[28,77456,77457],{"class":211}," arr1.length; i++) {\n",[28,77459,77460,77463,77465],{"class":30,"line":1725},[28,77461,77462],{"class":211},"   for (let j = 0; j ",[28,77464,1120],{"class":77454},[28,77466,77467],{"class":211}," arr1.length - 1; j++) {\n",[28,77469,77470],{"class":30,"line":1731},[28,77471,77472],{"class":211},"      if (arr1[j] > arr1[j + 1]) {\n",[28,77474,77475],{"class":30,"line":1752},[28,77476,77477],{"class":211},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[28,77479,77480],{"class":30,"line":1757},[28,77481,77482],{"class":211},"       }\n",[28,77484,77485],{"class":30,"line":1771},[28,77486,4386],{"class":211},[28,77488,77489],{"class":30,"line":1776},[28,77490,1643],{"class":211},[28,77492,77493],{"class":30,"line":1805},[28,77494,77495],{"class":211},"console.log(arr1)\n",[14,77497,77498],{},"数组解构的细节：",[14,77500,77501],{},"①变量多，单元值少",[14,77503,77504],{},[1540,77505],{"alt":23,"src":77506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77508,77509],{},"防止出现undefined的方法：",[14,77511,77512],{},"const [a=0,b=0] =[1]",[14,77514,77515],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77517,77518],{},"②变量少，单元值多",[14,77520,77521],{},[1540,77522],{"alt":23,"src":77523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77525,77526],{},"此时可以使用剩余参数来接收多余的值",[14,77528,77529],{},"const [a,b,...c]=[1,2,3,4]",[14,77531,77532],{},"console.log(c) 输出[3,4]",[14,77534,77535],{},"③可以按需导入，忽略某些返回值",[14,77537,77538],{},[1540,77539],{"alt":23,"src":77540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77542,77543],{},"④支持多维数组的结构",[18,77545,77549],{"className":77546,"code":77547,"language":77548,"meta":23,"style":23},"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",[25,77550,77551,77579,77595,77610,77625],{"__ignoreMap":23},[28,77552,77553,77555,77557,77559,77561,77563,77565,77567,77570,77572,77574,77576],{"class":30,"line":31},[28,77554,6869],{"class":207},[28,77556,51884],{"class":211},[28,77558,257],{"class":207},[28,77560,52277],{"class":211},[28,77562,427],{"class":38},[28,77564,12512],{"class":211},[28,77566,288],{"class":38},[28,77568,77569],{"class":211},", [",[28,77571,282],{"class":38},[28,77573,12512],{"class":211},[28,77575,503],{"class":38},[28,77577,77578],{"class":211},"]]\n",[28,77580,77581,77584,77586,77588,77590,77592],{"class":30,"line":42},[28,77582,77583],{"class":211},"console.",[28,77585,58298],{"class":34},[28,77587,3928],{"class":211},[28,77589,401],{"class":38},[28,77591,4293],{"class":211},[28,77593,77594],{"class":269},"  \u002F\u002F1\n",[28,77596,77597,77599,77601,77603,77605,77607],{"class":30,"line":50},[28,77598,77583],{"class":211},[28,77600,58298],{"class":34},[28,77602,3928],{"class":211},[28,77604,427],{"class":38},[28,77606,4293],{"class":211},[28,77608,77609],{"class":269},"  \u002F\u002F2\n",[28,77611,77612,77614,77616,77618,77620,77622],{"class":30,"line":58},[28,77613,77583],{"class":211},[28,77615,58298],{"class":34},[28,77617,3928],{"class":211},[28,77619,288],{"class":38},[28,77621,4293],{"class":211},[28,77623,77624],{"class":269},"  \u002F\u002F[3,4]\n",[28,77626,77627,77629,77631,77633,77635,77637,77639,77641],{"class":30,"line":70},[28,77628,77583],{"class":211},[28,77630,58298],{"class":34},[28,77632,3928],{"class":211},[28,77634,288],{"class":38},[28,77636,4978],{"class":211},[28,77638,401],{"class":38},[28,77640,4293],{"class":211},[28,77642,77643],{"class":269},"  \u002F\u002F3\n",[18,77645,77647],{"className":77546,"code":77646,"language":77548,"meta":23,"style":23},"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",[25,77648,77649,77676,77687,77698],{"__ignoreMap":23},[28,77650,77651,77653,77656,77658,77660,77662,77664,77666,77668,77670,77672,77674],{"class":30,"line":31},[28,77652,6869],{"class":207},[28,77654,77655],{"class":211}," [a, b, c] ",[28,77657,257],{"class":207},[28,77659,52277],{"class":211},[28,77661,427],{"class":38},[28,77663,12512],{"class":211},[28,77665,288],{"class":38},[28,77667,77569],{"class":211},[28,77669,282],{"class":38},[28,77671,12512],{"class":211},[28,77673,503],{"class":38},[28,77675,77578],{"class":211},[28,77677,77678,77680,77682,77685],{"class":30,"line":42},[28,77679,77583],{"class":211},[28,77681,58298],{"class":34},[28,77683,77684],{"class":211},"(a)",[28,77686,77594],{"class":269},[28,77688,77689,77691,77693,77696],{"class":30,"line":50},[28,77690,77583],{"class":211},[28,77692,58298],{"class":34},[28,77694,77695],{"class":211},"(b)",[28,77697,77609],{"class":269},[28,77699,77700,77702,77704,77707],{"class":30,"line":58},[28,77701,77583],{"class":211},[28,77703,58298],{"class":34},[28,77705,77706],{"class":211},"(c)",[28,77708,77624],{"class":269},[18,77710,77712],{"className":77546,"code":77711,"language":77548,"meta":23,"style":23},"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",[25,77713,77714,77741,77751,77761,77771],{"__ignoreMap":23},[28,77715,77716,77718,77721,77723,77725,77727,77729,77731,77733,77735,77737,77739],{"class":30,"line":31},[28,77717,6869],{"class":207},[28,77719,77720],{"class":211}," [a, b, [c, d]] ",[28,77722,257],{"class":207},[28,77724,52277],{"class":211},[28,77726,427],{"class":38},[28,77728,12512],{"class":211},[28,77730,288],{"class":38},[28,77732,77569],{"class":211},[28,77734,282],{"class":38},[28,77736,12512],{"class":211},[28,77738,503],{"class":38},[28,77740,77578],{"class":211},[28,77742,77743,77745,77747,77749],{"class":30,"line":42},[28,77744,77583],{"class":211},[28,77746,58298],{"class":34},[28,77748,77684],{"class":211},[28,77750,77594],{"class":269},[28,77752,77753,77755,77757,77759],{"class":30,"line":50},[28,77754,77583],{"class":211},[28,77756,58298],{"class":34},[28,77758,77695],{"class":211},[28,77760,77609],{"class":269},[28,77762,77763,77765,77767,77769],{"class":30,"line":58},[28,77764,77583],{"class":211},[28,77766,58298],{"class":34},[28,77768,77706],{"class":211},[28,77770,77643],{"class":269},[28,77772,77773,77775,77777,77780],{"class":30,"line":70},[28,77774,77583],{"class":211},[28,77776,58298],{"class":34},[28,77778,77779],{"class":211},"(d)",[28,77781,77782],{"class":269},"  \u002F\u002F4\n",[177,77784,77786],{"id":77785},"_462-对象解构","4.6.2 对象解构",[14,77788,77789],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77791,77792],{},"用的非常非常多！！！！！！",[22075,77794,77796],{"id":77795},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77798,77799],{},"基本语法：",[161,77801,77802,77805,77808,77811],{},[119,77803,77804],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[119,77806,77807],{},"对象属性的值将被赋值给与属性名相同的变量",[119,77809,77810],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[119,77812,77813],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[18,77815,77817],{"className":50684,"code":77816,"language":50686,"meta":23,"style":23},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[25,77818,77819,77824,77829,77834,77838],{"__ignoreMap":23},[28,77820,77821],{"class":30,"line":31},[28,77822,77823],{"class":211},"const obj = {\n",[28,77825,77826],{"class":30,"line":42},[28,77827,77828],{"class":211},"   uname: 'pink老师',\n",[28,77830,77831],{"class":30,"line":50},[28,77832,77833],{"class":211},"   age: 18,\n",[28,77835,77836],{"class":30,"line":58},[28,77837,1643],{"class":211},[28,77839,77840],{"class":30,"line":70},[28,77841,77842],{"class":211},"const { uname, age } = obj\n",[14,77844,77845],{},"上方代码这样写等价于：",[14,77847,77848],{},"const uname等价于obj.uname",[14,77850,77851],{},"变量名可以重新改名：",[14,77853,77854],{},"const uname='red老师'",[14,77856,77857],{},"const user={",[14,77859,77860],{},"  uname:'pink老师',",[14,77862,77863],{},"  age:18",[14,77865,1156],{},[14,77867,77868],{},"const {uname,age}=user",[14,77870,77871],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77873,77874],{},"const {旧变量名：新变量名}=对象",[14,77876,77877],{},"const {uname:username,age}=user",[22075,77879,77881],{"id":77880},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77883,77884],{},[1540,77885],{"alt":23,"src":77886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22075,77888,77890],{"id":77889},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77892,77893],{},[1540,77894],{"alt":23,"src":77895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[18,77897,77899],{"className":53118,"code":77898,"language":53120,"meta":23,"style":23},"  \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",[25,77900,77901,77909,77914,77919,77924,77929,77934,77939,77944,77949,77953,77958,77963],{"__ignoreMap":23},[28,77902,77903,77905,77907],{"class":30,"line":31},[28,77904,52195],{"class":211},[28,77906,51864],{"class":51351},[28,77908,51358],{"class":211},[28,77910,77911],{"class":30,"line":42},[28,77912,77913],{"class":211},"    const pig = {\n",[28,77915,77916],{"class":30,"line":50},[28,77917,77918],{"class":211},"      name: '佩奇',\n",[28,77920,77921],{"class":30,"line":58},[28,77922,77923],{"class":211},"      family: {\n",[28,77925,77926],{"class":30,"line":70},[28,77927,77928],{"class":211},"        mother: '猪妈妈',\n",[28,77930,77931],{"class":30,"line":78},[28,77932,77933],{"class":211},"        father: '猪爸爸',\n",[28,77935,77936],{"class":30,"line":86},[28,77937,77938],{"class":211},"        sister: '乔治'\n",[28,77940,77941],{"class":30,"line":97},[28,77942,77943],{"class":211},"      },\n",[28,77945,77946],{"class":30,"line":108},[28,77947,77948],{"class":211},"      age: 6\n",[28,77950,77951],{"class":30,"line":1407},[28,77952,2264],{"class":211},[28,77954,77955],{"class":30,"line":1690},[28,77956,77957],{"class":211},"    \u002F\u002F 多级对象解构\n",[28,77959,77960],{"class":30,"line":1695},[28,77961,77962],{"class":211},"    const { name, family: { mother, father, sister }, age } = pig\n",[28,77964,77965,77967,77969],{"class":30,"line":1701},[28,77966,52468],{"class":211},[28,77968,51864],{"class":51351},[28,77970,51358],{"class":211},[14,77972,77973],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[18,77975,77978],{"className":77976,"code":77977,"language":76498,"meta":23,"style":23},"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",[25,77979,77980,77985,77996,78008,78020,78029,78033,78044,78056,78066,78071,78075,78085,78096,78105,78109,78113,78124,78135,78144,78148,78153],{"__ignoreMap":23},[28,77981,77982],{"class":30,"line":31},[28,77983,77984],{"class":269},"    \u002F\u002F 这是后台传递过来的数据\n",[28,77986,77987,77989,77992,77994],{"class":30,"line":42},[28,77988,11298],{"class":207},[28,77990,77991],{"class":211}," msg ",[28,77993,257],{"class":207},[28,77995,15649],{"class":211},[28,77997,77998,78001,78003,78006],{"class":30,"line":50},[28,77999,78000],{"class":64},"      \"code\"",[28,78002,1069],{"class":207},[28,78004,78005],{"class":38}," 200",[28,78007,31517],{"class":211},[28,78009,78010,78013,78015,78018],{"class":30,"line":58},[28,78011,78012],{"class":64},"      \"msg\"",[28,78014,1069],{"class":207},[28,78016,78017],{"class":64}," \"获取新闻列表成功\"",[28,78019,31517],{"class":211},[28,78021,78022,78025,78027],{"class":30,"line":70},[28,78023,78024],{"class":64},"      \"data\"",[28,78026,1069],{"class":207},[28,78028,55498],{"class":211},[28,78030,78031],{"class":30,"line":78},[28,78032,2587],{"class":211},[28,78034,78035,78038,78040,78042],{"class":30,"line":86},[28,78036,78037],{"class":64},"          \"id\"",[28,78039,1069],{"class":207},[28,78041,25189],{"class":38},[28,78043,31517],{"class":211},[28,78045,78046,78049,78051,78054],{"class":30,"line":97},[28,78047,78048],{"class":64},"          \"title\"",[28,78050,1069],{"class":207},[28,78052,78053],{"class":64}," \"5G商用自己，三大运用商收入下降\"",[28,78055,31517],{"class":211},[28,78057,78058,78061,78063],{"class":30,"line":108},[28,78059,78060],{"class":64},"          \"count\"",[28,78062,1069],{"class":207},[28,78064,78065],{"class":38}," 58\n",[28,78067,78068],{"class":30,"line":1407},[28,78069,78070],{"class":211},"        },\n",[28,78072,78073],{"class":30,"line":1690},[28,78074,2587],{"class":211},[28,78076,78077,78079,78081,78083],{"class":30,"line":1695},[28,78078,78037],{"class":64},[28,78080,1069],{"class":207},[28,78082,14832],{"class":38},[28,78084,31517],{"class":211},[28,78086,78087,78089,78091,78094],{"class":30,"line":1701},[28,78088,78048],{"class":64},[28,78090,1069],{"class":207},[28,78092,78093],{"class":64}," \"国际媒体头条速览\"",[28,78095,31517],{"class":211},[28,78097,78098,78100,78102],{"class":30,"line":1706},[28,78099,78060],{"class":64},[28,78101,1069],{"class":207},[28,78103,78104],{"class":38}," 56\n",[28,78106,78107],{"class":30,"line":1720},[28,78108,78070],{"class":211},[28,78110,78111],{"class":30,"line":1725},[28,78112,2587],{"class":211},[28,78114,78115,78117,78119,78122],{"class":30,"line":1731},[28,78116,78037],{"class":64},[28,78118,1069],{"class":207},[28,78120,78121],{"class":38}," 3",[28,78123,31517],{"class":211},[28,78125,78126,78128,78130,78133],{"class":30,"line":1752},[28,78127,78048],{"class":64},[28,78129,1069],{"class":207},[28,78131,78132],{"class":64}," \"乌克兰和俄罗斯持续冲突\"",[28,78134,31517],{"class":211},[28,78136,78137,78139,78141],{"class":30,"line":1757},[28,78138,78060],{"class":64},[28,78140,1069],{"class":207},[28,78142,78143],{"class":38}," 1669\n",[28,78145,78146],{"class":30,"line":1771},[28,78147,78070],{"class":211},[28,78149,78150],{"class":30,"line":1776},[28,78151,78152],{"class":211},"      ]\n",[28,78154,78155],{"class":30,"line":1805},[28,78156,2264],{"class":211},[14,78158,78159],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78161,78162],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78164,78165],{},"\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,78167,78168],{},"function({data}) {",[14,78170,78171],{},"console.log(data)",[14,78173,1156],{},[14,78175,78176],{},"render(msg)",[14,78178,78179],{},"实参传递给形参的时候解构了",[14,78181,78182],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78184,78185],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78187,78188],{},"function render({data:mydata}) {",[14,78190,78191],{},"  console.log(data)",[14,78193,1156],{},[177,78195,78197],{"id":78196},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78199,78200],{},"有两种情况：一个是数组结构，一个是立即执行函数",[161,78202,78203],{},[119,78204,78205],{},"如果对一个数组进行遍历，有两种方式：",[14,78207,78208],{},"①法1",[14,78210,78211],{},"const arr=[1,2,3]",[14,78213,78214],{},"arr.map(function(item,index) {",[14,78216,78217],{},"  console.log(item)",[14,78219,52515],{},[14,78221,78222],{},[1540,78223],{"alt":23,"src":78224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78226,78227],{},"②法2",[14,78229,78230],{},"const str='pink'",[14,78232,78233],{},"[1,2,3].map(function(item,index) {",[14,78235,78236],{},"console.log(item)",[14,78238,52515],{},[14,78240,78241],{},[1540,78242],{"alt":23,"src":78243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78245,78246],{},"此时会报错",[14,78248,78249],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78251,78236],{},[14,78253,52515],{},[14,78255,78256],{},"内部会当成这样处理，所以我们用分号进行隔开",[149,78258,78260],{"id":78259},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78262,78263],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78265,78266],{},"可以理解为加强版的for循环",[14,78268,78269],{},[1540,78270],{"alt":23,"src":78271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78273,78274],{},"里边不写return，不返回数组，只遍历不返回",[14,78276,78277],{},"map是返回数组",[14,78279,78280],{},"forEach主要用于遍历数组对象",[18,78282,78284],{"className":53118,"code":78283,"language":53120,"meta":23,"style":23},"  \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",[25,78285,78286,78294,78299,78304,78309,78314,78318,78323],{"__ignoreMap":23},[28,78287,78288,78290,78292],{"class":30,"line":31},[28,78289,52195],{"class":211},[28,78291,51864],{"class":51351},[28,78293,51358],{"class":211},[28,78295,78296],{"class":30,"line":42},[28,78297,78298],{"class":211},"    const arr = ['red', 'green', 'pink']\n",[28,78300,78301],{"class":30,"line":50},[28,78302,78303],{"class":211},"    const result = arr.forEach(function (item, index) {\n",[28,78305,78306],{"class":30,"line":58},[28,78307,78308],{"class":211},"      console.log(item)\n",[28,78310,78311],{"class":30,"line":70},[28,78312,78313],{"class":211},"      console.log(index)\n",[28,78315,78316],{"class":30,"line":78},[28,78317,33512],{"class":211},[28,78319,78320],{"class":30,"line":86},[28,78321,78322],{"class":211},"    console.log(result)\n",[28,78324,78325,78327,78329],{"class":30,"line":97},[28,78326,52468],{"class":211},[28,78328,51864],{"class":51351},[28,78330,51358],{"class":211},[14,78332,78333],{},[1540,78334],{"alt":23,"src":78335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[149,78337,78339],{"id":78338},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78341,78342],{},[1540,78343],{"alt":23,"src":78344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78346,78347],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[18,78349,78351],{"className":53118,"code":78350,"language":53120,"meta":23,"style":23},"\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",[25,78352,78353,78361,78369,78374,78379,78383,78387,78392,78396,78401,78409],{"__ignoreMap":23},[28,78354,78355,78357,78359],{"class":30,"line":31},[28,78356,1120],{"class":211},[28,78358,51851],{"class":51351},[28,78360,51358],{"class":211},[28,78362,78363,78365,78367],{"class":30,"line":42},[28,78364,52195],{"class":211},[28,78366,51864],{"class":51351},[28,78368,51358],{"class":211},[28,78370,78371],{"class":30,"line":50},[28,78372,78373],{"class":211},"    const arr = [10, 20, 30]\n",[28,78375,78376],{"class":30,"line":58},[28,78377,78378],{"class":211},"    const newArr = arr.filter(function (item, index) {\n",[28,78380,78381],{"class":30,"line":70},[28,78382,78308],{"class":211},[28,78384,78385],{"class":30,"line":78},[28,78386,78313],{"class":211},[28,78388,78389],{"class":30,"line":86},[28,78390,78391],{"class":211},"      return item >= 20\n",[28,78393,78394],{"class":30,"line":97},[28,78395,33512],{"class":211},[28,78397,78398],{"class":30,"line":108},[28,78399,78400],{"class":211},"    console.log(newArr)\n",[28,78402,78403,78405,78407],{"class":30,"line":1407},[28,78404,52468],{"class":211},[28,78406,51864],{"class":51351},[28,78408,51358],{"class":211},[28,78410,78411,78413,78415],{"class":30,"line":1690},[28,78412,51836],{"class":211},[28,78414,51851],{"class":51351},[28,78416,51358],{"class":211},[14,78418,78419],{},"这个也可以写成箭头函数：",[18,78421,78423],{"className":50684,"code":78422,"language":50686,"meta":23,"style":23},"const newArr = arr.filter(item => item >= 20)\n",[25,78424,78425],{"__ignoreMap":23},[28,78426,78427],{"class":30,"line":31},[28,78428,78422],{"class":211},[149,78430,78432],{"id":78431},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78434,78435],{},[1540,78436],{"alt":23,"src":78437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78439,78440],{},"步骤：",[14,78442,78443],{},"①：渲染页面模块",[116,78445,78446,78449],{},[119,78447,78448],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[119,78450,78451],{},"用forEach+字符串的形式",[14,78453,78454],{},"②：点击不同需求，显示不同页面内容",[116,78456,78457,78460,78463,78466,78469],{},[119,78458,78459],{},"点击采取事件委托方式 .filter",[119,78461,78462],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[119,78464,78465],{},"筛选条件是根据点击的 data-index 来判断",[119,78467,78468],{},"可以使用对象解构，把事件对象解构",[119,78470,78471],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[18,78473,78475],{"className":50684,"code":78474,"language":50686,"meta":23,"style":23},"\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",[25,78476,78477,78487,78501,78505,78513,78527,78547,78559,78567,78573,78583,78593,78603,78607,78611,78617,78630,78642,78652,78664,78668,78672,78679,78692,78704,78721,78739,78752,78756,78760,78772,78782,78786,78790,78797,78838,78865,78875,78879,78883,78891,78903,78907,78911,78919,78931,78943,78954,78958,78962,78971,78983,78994,78998,79002,79011,79023,79035,79039,79043,79050,79060,79072,79084,79099,79103,79107,79115,79131,79141,79151,79161,79173,79177,79181,79191,79202,79212,79216,79224,79232,79236,79244,79259,79285,79310,79335,79354,79362,79376,79381,79386,79391,79396,79401,79409,79417,79422,79433,79438,79448,79458,79468,79478,79482,79486,79495,79504,79513,79522,79526,79530,79539,79548,79557,79566,79570,79574,79583,79592,79601,79610,79614,79618,79627,79636,79645,79654,79658,79662,79671,79680,79689,79698,79702,79706,79715,79724,79733,79742,79746,79750,79759,79768,79776,79785,79789,79793,79797,79802,79814,79819,79831,79835,79852,79880,79889,79894,79904,79914,79923,79928,79933,79937,79942,79959,79963,79968,79976,79981,80008,80013,80033,80038,80050,80055,80060,80065,80076,80090,80127,80145,80178,80195,80219,80223,80228,80234,80238,80242,80246,80254,80262,80266],{"__ignoreMap":23},[28,78478,78479,78481,78483,78485],{"class":30,"line":31},[28,78480,51348],{"class":211},[28,78482,51352],{"class":51351},[28,78484,51355],{"class":34},[28,78486,51358],{"class":211},[28,78488,78489,78491,78493,78495,78497,78499],{"class":30,"line":42},[28,78490,1120],{"class":211},[28,78492,50686],{"class":51351},[28,78494,51367],{"class":34},[28,78496,257],{"class":211},[28,78498,51372],{"class":64},[28,78500,51358],{"class":211},[28,78502,78503],{"class":30,"line":50},[28,78504,2477],{"emptyLinePlaceholder":134},[28,78506,78507,78509,78511],{"class":30,"line":58},[28,78508,1120],{"class":211},[28,78510,51385],{"class":51351},[28,78512,51358],{"class":211},[28,78514,78515,78517,78519,78521,78523,78525],{"class":30,"line":70},[28,78516,52195],{"class":211},[28,78518,51395],{"class":51351},[28,78520,51398],{"class":34},[28,78522,257],{"class":211},[28,78524,51403],{"class":64},[28,78526,51358],{"class":211},[28,78528,78529,78531,78533,78535,78537,78539,78541,78543,78545],{"class":30,"line":78},[28,78530,52195],{"class":211},[28,78532,51395],{"class":51351},[28,78534,14997],{"class":34},[28,78536,257],{"class":211},[28,78538,51442],{"class":64},[28,78540,51422],{"class":34},[28,78542,257],{"class":211},[28,78544,51449],{"class":64},[28,78546,51358],{"class":211},[28,78548,78549,78551,78553,78555,78557],{"class":30,"line":86},[28,78550,52195],{"class":211},[28,78552,51458],{"class":51351},[28,78554,51461],{"class":211},[28,78556,51458],{"class":51351},[28,78558,51358],{"class":211},[28,78560,78561,78563,78565],{"class":30,"line":97},[28,78562,52195],{"class":211},[28,78564,126],{"class":51351},[28,78566,51358],{"class":211},[28,78568,78569,78571],{"class":30,"line":108},[28,78570,6480],{"class":51351},[28,78572,15649],{"class":211},[28,78574,78575,78577,78579,78581],{"class":30,"line":1407},[28,78576,54746],{"class":38},[28,78578,51488],{"class":211},[28,78580,401],{"class":38},[28,78582,1370],{"class":211},[28,78584,78585,78587,78589,78591],{"class":30,"line":1690},[28,78586,54757],{"class":38},[28,78588,51488],{"class":211},[28,78590,401],{"class":38},[28,78592,1370],{"class":211},[28,78594,78595,78597,78599,78601],{"class":30,"line":1695},[28,78596,72647],{"class":38},[28,78598,51488],{"class":211},[28,78600,60556],{"class":38},[28,78602,1370],{"class":211},[28,78604,78605],{"class":30,"line":1701},[28,78606,2264],{"class":211},[28,78608,78609],{"class":30,"line":1706},[28,78610,2477],{"emptyLinePlaceholder":134},[28,78612,78613,78615],{"class":30,"line":1720},[28,78614,62174],{"class":34},[28,78616,15649],{"class":211},[28,78618,78619,78621,78623,78626,78628],{"class":30,"line":1725},[28,78620,54822],{"class":38},[28,78622,51488],{"class":211},[28,78624,78625],{"class":38},"990",[28,78627,51543],{"class":207},[28,78629,1370],{"class":211},[28,78631,78632,78634,78636,78638,78640],{"class":30,"line":1731},[28,78633,54757],{"class":38},[28,78635,51488],{"class":211},[28,78637,401],{"class":38},[28,78639,51607],{"class":38},[28,78641,1370],{"class":211},[28,78643,78644,78646,78648,78650],{"class":30,"line":1752},[28,78645,55060],{"class":38},[28,78647,51488],{"class":211},[28,78649,51528],{"class":38},[28,78651,1370],{"class":211},[28,78653,78654,78657,78659,78662],{"class":30,"line":1757},[28,78655,78656],{"class":38},"      flex-wrap",[28,78658,51488],{"class":211},[28,78660,78661],{"class":38},"wrap",[28,78663,1370],{"class":211},[28,78665,78666],{"class":30,"line":1771},[28,78667,2264],{"class":211},[28,78669,78670],{"class":30,"line":1776},[28,78671,2477],{"emptyLinePlaceholder":134},[28,78673,78674,78677],{"class":30,"line":1805},[28,78675,78676],{"class":34},"    .item",[28,78678,15649],{"class":211},[28,78680,78681,78683,78685,78688,78690],{"class":30,"line":1810},[28,78682,54822],{"class":38},[28,78684,51488],{"class":211},[28,78686,78687],{"class":38},"240",[28,78689,51543],{"class":207},[28,78691,1370],{"class":211},[28,78693,78694,78696,78698,78700,78702],{"class":30,"line":1827},[28,78695,62051],{"class":38},[28,78697,51488],{"class":211},[28,78699,656],{"class":38},[28,78701,51543],{"class":207},[28,78703,1370],{"class":211},[28,78705,78706,78708,78710,78712,78714,78717,78719],{"class":30,"line":1832},[28,78707,54746],{"class":38},[28,78709,51488],{"class":211},[28,78711,910],{"class":38},[28,78713,51543],{"class":207},[28,78715,78716],{"class":38}," 30",[28,78718,51543],{"class":207},[28,78720,1370],{"class":211},[28,78722,78723,78725,78727,78729,78732,78735,78737],{"class":30,"line":1837},[28,78724,61911],{"class":38},[28,78726,51488],{"class":211},[28,78728,28172],{"class":38},[28,78730,78731],{"class":38}," ease",[28,78733,78734],{"class":38}," .5",[28,78736,905],{"class":207},[28,78738,1370],{"class":211},[28,78740,78741,78744,78746,78748,78750],{"class":30,"line":1842},[28,78742,78743],{"class":38},"      margin-bottom",[28,78745,51488],{"class":211},[28,78747,910],{"class":38},[28,78749,51543],{"class":207},[28,78751,1370],{"class":211},[28,78753,78754],{"class":30,"line":1856},[28,78755,2264],{"class":211},[28,78757,78758],{"class":30,"line":1861},[28,78759,2477],{"emptyLinePlaceholder":134},[28,78761,78762,78765,78767,78770],{"class":30,"line":2654},[28,78763,78764],{"class":34},"    .item:nth-child",[28,78766,212],{"class":211},[28,78768,78769],{"class":38},"4n",[28,78771,12519],{"class":211},[28,78773,78774,78776,78778,78780],{"class":30,"line":2668},[28,78775,62051],{"class":38},[28,78777,51488],{"class":211},[28,78779,401],{"class":38},[28,78781,1370],{"class":211},[28,78783,78784],{"class":30,"line":2676},[28,78785,2264],{"class":211},[28,78787,78788],{"class":30,"line":2681},[28,78789,2477],{"emptyLinePlaceholder":134},[28,78791,78792,78795],{"class":30,"line":2687},[28,78793,78794],{"class":34},"    .item:hover",[28,78796,15649],{"class":211},[28,78798,78799,78802,78804,78806,78808,78810,78812,78814,78816,78819,78821,78823,78825,78827,78829,78831,78833,78836],{"class":30,"line":2693},[28,78800,78801],{"class":38},"      box-shadow",[28,78803,51488],{"class":211},[28,78805,401],{"class":38},[28,78807,51543],{"class":207},[28,78809,4170],{"class":38},[28,78811,51543],{"class":207},[28,78813,2225],{"class":38},[28,78815,51543],{"class":207},[28,78817,78818],{"class":38}," rgba",[28,78820,212],{"class":211},[28,78822,401],{"class":38},[28,78824,12512],{"class":211},[28,78826,401],{"class":38},[28,78828,12512],{"class":211},[28,78830,401],{"class":38},[28,78832,12512],{"class":211},[28,78834,78835],{"class":38},".2",[28,78837,2796],{"class":211},[28,78839,78840,78843,78845,78848,78850,78852,78854,78857,78859,78861,78863],{"class":30,"line":2698},[28,78841,78842],{"class":38},"      transform",[28,78844,51488],{"class":211},[28,78846,78847],{"class":38},"translate3d",[28,78849,212],{"class":211},[28,78851,401],{"class":38},[28,78853,12512],{"class":211},[28,78855,78856],{"class":38},"-4",[28,78858,51543],{"class":207},[28,78860,12512],{"class":211},[28,78862,401],{"class":38},[28,78864,2796],{"class":211},[28,78866,78867,78869,78871,78873],{"class":30,"line":8025},[28,78868,62076],{"class":38},[28,78870,51488],{"class":211},[28,78872,62081],{"class":38},[28,78874,1370],{"class":211},[28,78876,78877],{"class":30,"line":8049},[28,78878,2264],{"class":211},[28,78880,78881],{"class":30,"line":8054},[28,78882,2477],{"emptyLinePlaceholder":134},[28,78884,78885,78887,78889],{"class":30,"line":8060},[28,78886,78676],{"class":34},[28,78888,55666],{"class":51351},[28,78890,15649],{"class":211},[28,78892,78893,78895,78897,78899,78901],{"class":30,"line":8087},[28,78894,54822],{"class":38},[28,78896,51488],{"class":211},[28,78898,521],{"class":38},[28,78900,538],{"class":207},[28,78902,1370],{"class":211},[28,78904,78905],{"class":30,"line":8092},[28,78906,2264],{"class":211},[28,78908,78909],{"class":30,"line":8098},[28,78910,2477],{"emptyLinePlaceholder":134},[28,78912,78913,78915,78917],{"class":30,"line":8110},[28,78914,78676],{"class":34},[28,78916,62355],{"class":34},[28,78918,15649],{"class":211},[28,78920,78921,78923,78925,78927,78929],{"class":30,"line":8122},[28,78922,54973],{"class":38},[28,78924,51488],{"class":211},[28,78926,860],{"class":38},[28,78928,51543],{"class":207},[28,78930,1370],{"class":211},[28,78932,78933,78935,78937,78939,78941],{"class":30,"line":8134},[28,78934,78743],{"class":38},[28,78936,51488],{"class":211},[28,78938,656],{"class":38},[28,78940,51543],{"class":207},[28,78942,1370],{"class":211},[28,78944,78945,78947,78949,78952],{"class":30,"line":9793},[28,78946,57467],{"class":38},[28,78948,51488],{"class":211},[28,78950,78951],{"class":38},"#666",[28,78953,1370],{"class":211},[28,78955,78956],{"class":30,"line":9818},[28,78957,2264],{"class":211},[28,78959,78960],{"class":30,"line":9841},[28,78961,2477],{"emptyLinePlaceholder":134},[28,78963,78964,78966,78969],{"class":30,"line":9865},[28,78965,78676],{"class":34},[28,78967,78968],{"class":34}," .price",[28,78970,15649],{"class":211},[28,78972,78973,78975,78977,78979,78981],{"class":30,"line":9870},[28,78974,54973],{"class":38},[28,78976,51488],{"class":211},[28,78978,960],{"class":38},[28,78980,51543],{"class":207},[28,78982,1370],{"class":211},[28,78984,78985,78987,78989,78992],{"class":30,"line":9875},[28,78986,57467],{"class":38},[28,78988,51488],{"class":211},[28,78990,78991],{"class":38},"firebrick",[28,78993,1370],{"class":211},[28,78995,78996],{"class":30,"line":9880},[28,78997,2264],{"class":211},[28,78999,79000],{"class":30,"line":9889},[28,79001,2477],{"emptyLinePlaceholder":134},[28,79003,79004,79006,79009],{"class":30,"line":9894},[28,79005,78676],{"class":34},[28,79007,79008],{"class":34}," .price::before",[28,79010,15649],{"class":211},[28,79012,79013,79016,79018,79021],{"class":30,"line":9900},[28,79014,79015],{"class":38},"      content",[28,79017,51488],{"class":211},[28,79019,79020],{"class":64},"'￥'",[28,79022,1370],{"class":211},[28,79024,79025,79027,79029,79031,79033],{"class":30,"line":9921},[28,79026,54973],{"class":38},[28,79028,51488],{"class":211},[28,79030,759],{"class":38},[28,79032,51543],{"class":207},[28,79034,1370],{"class":211},[28,79036,79037],{"class":30,"line":9927},[28,79038,2264],{"class":211},[28,79040,79041],{"class":30,"line":9941},[28,79042,2477],{"emptyLinePlaceholder":134},[28,79044,79045,79048],{"class":30,"line":9947},[28,79046,79047],{"class":34},"    .filter",[28,79049,15649],{"class":211},[28,79051,79052,79054,79056,79058],{"class":30,"line":9974},[28,79053,55060],{"class":38},[28,79055,51488],{"class":211},[28,79057,51528],{"class":38},[28,79059,1370],{"class":211},[28,79061,79062,79064,79066,79068,79070],{"class":30,"line":9983},[28,79063,54822],{"class":38},[28,79065,51488],{"class":211},[28,79067,78625],{"class":38},[28,79069,51543],{"class":207},[28,79071,1370],{"class":211},[28,79073,79074,79076,79078,79080,79082],{"class":30,"line":9989},[28,79075,54757],{"class":38},[28,79077,51488],{"class":211},[28,79079,401],{"class":38},[28,79081,51607],{"class":38},[28,79083,1370],{"class":211},[28,79085,79086,79088,79090,79092,79094,79096],{"class":30,"line":9997},[28,79087,54746],{"class":38},[28,79089,51488],{"class":211},[28,79091,866],{"class":38},[28,79093,51543],{"class":207},[28,79095,78716],{"class":38},[28,79097,79098],{"class":207},"px\n",[28,79100,79101],{"class":30,"line":10002},[28,79102,2264],{"class":211},[28,79104,79105],{"class":30,"line":16681},[28,79106,2477],{"emptyLinePlaceholder":134},[28,79108,79109,79111,79113],{"class":30,"line":16687},[28,79110,79047],{"class":34},[28,79112,1476],{"class":51351},[28,79114,15649],{"class":211},[28,79116,79117,79119,79121,79123,79125,79127,79129],{"class":30,"line":16710},[28,79118,54746],{"class":38},[28,79120,51488],{"class":211},[28,79122,656],{"class":38},[28,79124,51543],{"class":207},[28,79126,9027],{"class":38},[28,79128,51543],{"class":207},[28,79130,1370],{"class":211},[28,79132,79133,79135,79137,79139],{"class":30,"line":16716},[28,79134,61772],{"class":38},[28,79136,51488],{"class":211},[28,79138,61869],{"class":38},[28,79140,1370],{"class":211},[28,79142,79143,79145,79147,79149],{"class":30,"line":16739},[28,79144,57467],{"class":38},[28,79146,51488],{"class":211},[28,79148,78951],{"class":38},[28,79150,1370],{"class":211},[28,79152,79153,79155,79157,79159],{"class":30,"line":16753},[28,79154,64021],{"class":38},[28,79156,51488],{"class":211},[28,79158,54788],{"class":38},[28,79160,1370],{"class":211},[28,79162,79163,79165,79167,79169,79171],{"class":30,"line":16773},[28,79164,61801],{"class":38},[28,79166,51488],{"class":211},[28,79168,910],{"class":38},[28,79170,51543],{"class":207},[28,79172,1370],{"class":211},[28,79174,79175],{"class":30,"line":16779},[28,79176,2264],{"class":211},[28,79178,79179],{"class":30,"line":16790},[28,79180,2477],{"emptyLinePlaceholder":134},[28,79182,79183,79185,79187,79189],{"class":30,"line":16813},[28,79184,79047],{"class":34},[28,79186,1476],{"class":51351},[28,79188,61951],{"class":34},[28,79190,15649],{"class":211},[28,79192,79193,79195,79197,79200],{"class":30,"line":16835},[28,79194,54935],{"class":38},[28,79196,51488],{"class":211},[28,79198,79199],{"class":38},"#05943c",[28,79201,1370],{"class":211},[28,79203,79204,79206,79208,79210],{"class":30,"line":16840},[28,79205,57467],{"class":38},[28,79207,51488],{"class":211},[28,79209,60893],{"class":38},[28,79211,1370],{"class":211},[28,79213,79214],{"class":30,"line":16846},[28,79215,2264],{"class":211},[28,79217,79218,79220,79222],{"class":30,"line":16860},[28,79219,52468],{"class":211},[28,79221,126],{"class":51351},[28,79223,51358],{"class":211},[28,79225,79226,79228,79230],{"class":30,"line":16873},[28,79227,51836],{"class":211},[28,79229,51385],{"class":51351},[28,79231,51358],{"class":211},[28,79233,79234],{"class":30,"line":16878},[28,79235,2477],{"emptyLinePlaceholder":134},[28,79237,79238,79240,79242],{"class":30,"line":16892},[28,79239,1120],{"class":211},[28,79241,51851],{"class":51351},[28,79243,51358],{"class":211},[28,79245,79246,79248,79250,79252,79254,79257],{"class":30,"line":16897},[28,79247,52195],{"class":211},[28,79249,51662],{"class":51351},[28,79251,53537],{"class":34},[28,79253,257],{"class":211},[28,79255,79256],{"class":64},"\"filter\"",[28,79258,51358],{"class":211},[28,79260,79261,79263,79265,79267,79269,79271,79274,79276,79278,79281,79283],{"class":30,"line":16903},[28,79262,51392],{"class":211},[28,79264,448],{"class":51351},[28,79266,61108],{"class":34},[28,79268,257],{"class":211},[28,79270,61113],{"class":64},[28,79272,79273],{"class":34}," data-index",[28,79275,257],{"class":211},[28,79277,3755],{"class":64},[28,79279,79280],{"class":211},">0-100元\u003C\u002F",[28,79282,448],{"class":51351},[28,79284,51358],{"class":211},[28,79286,79287,79289,79291,79293,79295,79297,79299,79301,79303,79306,79308],{"class":30,"line":16908},[28,79288,51392],{"class":211},[28,79290,448],{"class":51351},[28,79292,61108],{"class":34},[28,79294,257],{"class":211},[28,79296,61113],{"class":64},[28,79298,79273],{"class":34},[28,79300,257],{"class":211},[28,79302,3778],{"class":64},[28,79304,79305],{"class":211},">100-300元\u003C\u002F",[28,79307,448],{"class":51351},[28,79309,51358],{"class":211},[28,79311,79312,79314,79316,79318,79320,79322,79324,79326,79328,79331,79333],{"class":30,"line":16922},[28,79313,51392],{"class":211},[28,79315,448],{"class":51351},[28,79317,61108],{"class":34},[28,79319,257],{"class":211},[28,79321,61113],{"class":64},[28,79323,79273],{"class":34},[28,79325,257],{"class":211},[28,79327,3791],{"class":64},[28,79329,79330],{"class":211},">300元以上\u003C\u002F",[28,79332,448],{"class":51351},[28,79334,51358],{"class":211},[28,79336,79337,79339,79341,79343,79345,79347,79350,79352],{"class":30,"line":16927},[28,79338,51392],{"class":211},[28,79340,448],{"class":51351},[28,79342,61108],{"class":34},[28,79344,257],{"class":211},[28,79346,61113],{"class":64},[28,79348,79349],{"class":211},">全部区间\u003C\u002F",[28,79351,448],{"class":51351},[28,79353,51358],{"class":211},[28,79355,79356,79358,79360],{"class":30,"line":16932},[28,79357,52468],{"class":211},[28,79359,51662],{"class":51351},[28,79361,51358],{"class":211},[28,79363,79364,79366,79368,79370,79372,79374],{"class":30,"line":16946},[28,79365,52195],{"class":211},[28,79367,51662],{"class":51351},[28,79369,53537],{"class":34},[28,79371,257],{"class":211},[28,79373,62659],{"class":64},[28,79375,51358],{"class":211},[28,79377,79378],{"class":30,"line":16958},[28,79379,79380],{"class":269},"    \u003C!-- \u003Cdiv class=\"item\">\n",[28,79382,79383],{"class":30,"line":16963},[28,79384,79385],{"class":269},"      \u003Cimg src=\"\" alt=\"\">\n",[28,79387,79388],{"class":30,"line":16976},[28,79389,79390],{"class":269},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[28,79392,79393],{"class":30,"line":16981},[28,79394,79395],{"class":269},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[28,79397,79398],{"class":30,"line":16986},[28,79399,79400],{"class":269},"    \u003C\u002Fdiv> -->\n",[28,79402,79403,79405,79407],{"class":30,"line":16991},[28,79404,52468],{"class":211},[28,79406,51662],{"class":51351},[28,79408,51358],{"class":211},[28,79410,79411,79413,79415],{"class":30,"line":17004},[28,79412,52195],{"class":211},[28,79414,51864],{"class":51351},[28,79416,51358],{"class":211},[28,79418,79419],{"class":30,"line":17009},[28,79420,79421],{"class":269},"    \u002F\u002F 2. 初始化数据\n",[28,79423,79424,79426,79429,79431],{"class":30,"line":32684},[28,79425,11298],{"class":207},[28,79427,79428],{"class":38}," goodsList",[28,79430,13641],{"class":207},[28,79432,55498],{"class":211},[28,79434,79435],{"class":30,"line":32690},[28,79436,79437],{"class":211},"      {\n",[28,79439,79440,79443,79446],{"class":30,"line":32696},[28,79441,79442],{"class":211},"        id: ",[28,79444,79445],{"class":64},"'4001172'",[28,79447,31517],{"class":211},[28,79449,79450,79453,79456],{"class":30,"line":32702},[28,79451,79452],{"class":211},"        name: ",[28,79454,79455],{"class":64},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[28,79457,31517],{"class":211},[28,79459,79460,79463,79466],{"class":30,"line":32708},[28,79461,79462],{"class":211},"        price: ",[28,79464,79465],{"class":64},"'289.00'",[28,79467,31517],{"class":211},[28,79469,79470,79473,79476],{"class":30,"line":32719},[28,79471,79472],{"class":211},"        picture: ",[28,79474,79475],{"class":64},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[28,79477,31517],{"class":211},[28,79479,79480],{"class":30,"line":32725},[28,79481,77943],{"class":211},[28,79483,79484],{"class":30,"line":32745},[28,79485,79437],{"class":211},[28,79487,79488,79490,79493],{"class":30,"line":32751},[28,79489,79442],{"class":211},[28,79491,79492],{"class":64},"'4001594'",[28,79494,31517],{"class":211},[28,79496,79497,79499,79502],{"class":30,"line":32762},[28,79498,79452],{"class":211},[28,79500,79501],{"class":64},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[28,79503,31517],{"class":211},[28,79505,79506,79508,79511],{"class":30,"line":32768},[28,79507,79462],{"class":211},[28,79509,79510],{"class":64},"'288.00'",[28,79512,31517],{"class":211},[28,79514,79515,79517,79520],{"class":30,"line":32774},[28,79516,79472],{"class":211},[28,79518,79519],{"class":64},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[28,79521,31517],{"class":211},[28,79523,79524],{"class":30,"line":32780},[28,79525,77943],{"class":211},[28,79527,79528],{"class":30,"line":32786},[28,79529,79437],{"class":211},[28,79531,79532,79534,79537],{"class":30,"line":32792},[28,79533,79442],{"class":211},[28,79535,79536],{"class":64},"'4001009'",[28,79538,31517],{"class":211},[28,79540,79541,79543,79546],{"class":30,"line":32798},[28,79542,79452],{"class":211},[28,79544,79545],{"class":64},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[28,79547,31517],{"class":211},[28,79549,79550,79552,79555],{"class":30,"line":32804},[28,79551,79462],{"class":211},[28,79553,79554],{"class":64},"'109.00'",[28,79556,31517],{"class":211},[28,79558,79559,79561,79564],{"class":30,"line":32824},[28,79560,79472],{"class":211},[28,79562,79563],{"class":64},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[28,79565,31517],{"class":211},[28,79567,79568],{"class":30,"line":32830},[28,79569,77943],{"class":211},[28,79571,79572],{"class":30,"line":32846},[28,79573,79437],{"class":211},[28,79575,79576,79578,79581],{"class":30,"line":32852},[28,79577,79442],{"class":211},[28,79579,79580],{"class":64},"'4001874'",[28,79582,31517],{"class":211},[28,79584,79585,79587,79590],{"class":30,"line":32866},[28,79586,79452],{"class":211},[28,79588,79589],{"class":64},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[28,79591,31517],{"class":211},[28,79593,79594,79596,79599],{"class":30,"line":32872},[28,79595,79462],{"class":211},[28,79597,79598],{"class":64},"'488.00'",[28,79600,31517],{"class":211},[28,79602,79603,79605,79608],{"class":30,"line":32887},[28,79604,79472],{"class":211},[28,79606,79607],{"class":64},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[28,79609,31517],{"class":211},[28,79611,79612],{"class":30,"line":32893},[28,79613,77943],{"class":211},[28,79615,79616],{"class":30,"line":32902},[28,79617,79437],{"class":211},[28,79619,79620,79622,79625],{"class":30,"line":32908},[28,79621,79442],{"class":211},[28,79623,79624],{"class":64},"'4001649'",[28,79626,31517],{"class":211},[28,79628,79629,79631,79634],{"class":30,"line":32917},[28,79630,79452],{"class":211},[28,79632,79633],{"class":64},"'大师监制龙泉青瓷茶叶罐'",[28,79635,31517],{"class":211},[28,79637,79638,79640,79643],{"class":30,"line":32923},[28,79639,79462],{"class":211},[28,79641,79642],{"class":64},"'139.00'",[28,79644,31517],{"class":211},[28,79646,79647,79649,79652],{"class":30,"line":32929},[28,79648,79472],{"class":211},[28,79650,79651],{"class":64},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[28,79653,31517],{"class":211},[28,79655,79656],{"class":30,"line":32938},[28,79657,77943],{"class":211},[28,79659,79660],{"class":30,"line":32944},[28,79661,79437],{"class":211},[28,79663,79664,79666,79669],{"class":30,"line":32955},[28,79665,79442],{"class":211},[28,79667,79668],{"class":64},"'3997185'",[28,79670,31517],{"class":211},[28,79672,79673,79675,79678],{"class":30,"line":32961},[28,79674,79452],{"class":211},[28,79676,79677],{"class":64},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[28,79679,31517],{"class":211},[28,79681,79682,79684,79687],{"class":30,"line":32980},[28,79683,79462],{"class":211},[28,79685,79686],{"class":64},"'108.00'",[28,79688,31517],{"class":211},[28,79690,79691,79693,79696],{"class":30,"line":32986},[28,79692,79472],{"class":211},[28,79694,79695],{"class":64},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[28,79697,31517],{"class":211},[28,79699,79700],{"class":30,"line":32997},[28,79701,77943],{"class":211},[28,79703,79704],{"class":30,"line":33003},[28,79705,79437],{"class":211},[28,79707,79708,79710,79713],{"class":30,"line":33023},[28,79709,79442],{"class":211},[28,79711,79712],{"class":64},"'3997403'",[28,79714,31517],{"class":211},[28,79716,79717,79719,79722],{"class":30,"line":33039},[28,79718,79452],{"class":211},[28,79720,79721],{"class":64},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[28,79723,31517],{"class":211},[28,79725,79726,79728,79731],{"class":30,"line":33045},[28,79727,79462],{"class":211},[28,79729,79730],{"class":64},"'100.00'",[28,79732,31517],{"class":211},[28,79734,79735,79737,79740],{"class":30,"line":33059},[28,79736,79472],{"class":211},[28,79738,79739],{"class":64},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[28,79741,31517],{"class":211},[28,79743,79744],{"class":30,"line":33065},[28,79745,77943],{"class":211},[28,79747,79748],{"class":30,"line":33071},[28,79749,79437],{"class":211},[28,79751,79752,79754,79757],{"class":30,"line":33082},[28,79753,79442],{"class":211},[28,79755,79756],{"class":64},"'3998274'",[28,79758,31517],{"class":211},[28,79760,79761,79763,79766],{"class":30,"line":33088},[28,79762,79452],{"class":211},[28,79764,79765],{"class":64},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[28,79767,31517],{"class":211},[28,79769,79770,79772,79774],{"class":30,"line":33094},[28,79771,79462],{"class":211},[28,79773,79642],{"class":64},[28,79775,31517],{"class":211},[28,79777,79778,79780,79783],{"class":30,"line":33104},[28,79779,79472],{"class":211},[28,79781,79782],{"class":64},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[28,79784,31517],{"class":211},[28,79786,79787],{"class":30,"line":33110},[28,79788,77943],{"class":211},[28,79790,79791],{"class":30,"line":33121},[28,79792,53160],{"class":211},[28,79794,79795],{"class":30,"line":33127},[28,79796,2477],{"emptyLinePlaceholder":134},[28,79798,79799],{"class":30,"line":33137},[28,79800,79801],{"class":269},"    \u002F\u002F 1.渲染函数\n",[28,79803,79804,79806,79808,79810,79812],{"class":30,"line":33142},[28,79805,70135],{"class":207},[28,79807,70138],{"class":34},[28,79809,212],{"class":211},[28,79811,3957],{"class":5293},[28,79813,12519],{"class":211},[28,79815,79816],{"class":30,"line":33148},[28,79817,79818],{"class":269},"      \u002F\u002F 声明空字符串\n",[28,79820,79821,79824,79827,79829],{"class":30,"line":33197},[28,79822,79823],{"class":207},"      let",[28,79825,79826],{"class":211}," str ",[28,79828,257],{"class":207},[28,79830,70155],{"class":64},[28,79832,79833],{"class":30,"line":33244},[28,79834,70160],{"class":269},[28,79836,79837,79839,79842,79844,79847,79850],{"class":30,"line":33249},[28,79838,58058],{"class":211},[28,79840,79841],{"class":34},"forEach",[28,79843,212],{"class":211},[28,79845,79846],{"class":5293},"item",[28,79848,79849],{"class":207}," =>",[28,79851,15649],{"class":211},[28,79853,79854,79856,79859,79862,79864,79867,79869,79872,79875,79877],{"class":30,"line":33255},[28,79855,61321],{"class":207},[28,79857,79858],{"class":211}," { ",[28,79860,79861],{"class":38},"name",[28,79863,12512],{"class":211},[28,79865,79866],{"class":38},"price",[28,79868,12512],{"class":211},[28,79870,79871],{"class":38},"picture",[28,79873,79874],{"class":211}," } ",[28,79876,257],{"class":207},[28,79878,79879],{"class":211}," item\n",[28,79881,79882,79885,79887],{"class":30,"line":33274},[28,79883,79884],{"class":211},"        str ",[28,79886,9554],{"class":207},[28,79888,70219],{"class":64},[28,79890,79891],{"class":30,"line":33280},[28,79892,79893],{"class":64},"          \u003Cdiv class=\"item\">\n",[28,79895,79896,79899,79901],{"class":30,"line":33300},[28,79897,79898],{"class":64},"            \u003Cimg src=\"${",[28,79900,79871],{"class":211},[28,79902,79903],{"class":64},"}\" alt=\"\">\n",[28,79905,79906,79909,79911],{"class":30,"line":33306},[28,79907,79908],{"class":64},"            \u003Cp class=\"name\">${",[28,79910,79861],{"class":211},[28,79912,79913],{"class":64},"}\u003C\u002Fp>\n",[28,79915,79916,79919,79921],{"class":30,"line":33312},[28,79917,79918],{"class":64},"            \u003Cp class=\"price\">${",[28,79920,79866],{"class":211},[28,79922,79913],{"class":64},[28,79924,79925],{"class":30,"line":33322},[28,79926,79927],{"class":64},"          \u003C\u002Fdiv>\n",[28,79929,79930],{"class":30,"line":33327},[28,79931,79932],{"class":64},"        `\n",[28,79934,79935],{"class":30,"line":33333},[28,79936,64866],{"class":211},[28,79938,79939],{"class":30,"line":33349},[28,79940,79941],{"class":269},"      \u002F\u002F 追加给List\n",[28,79943,79944,79946,79948,79950,79953,79955,79957],{"class":30,"line":33394},[28,79945,55822],{"class":211},[28,79947,54450],{"class":34},[28,79949,212],{"class":211},[28,79951,79952],{"class":64},"'.list'",[28,79954,74300],{"class":211},[28,79956,257],{"class":207},[28,79958,74036],{"class":211},[28,79960,79961],{"class":30,"line":33400},[28,79962,2264],{"class":211},[28,79964,79965],{"class":30,"line":33406},[28,79966,79967],{"class":269},"    \u002F\u002F 页面一打开就需要渲染\n",[28,79969,79970,79973],{"class":30,"line":33412},[28,79971,79972],{"class":34},"    render",[28,79974,79975],{"class":211},"(goodsList)\n",[28,79977,79978],{"class":30,"line":33423},[28,79979,79980],{"class":269},"    \u002F\u002F 2.过滤筛选\n",[28,79982,79983,79985,79987,79989,79992,79994,79996,79998,80000,80002,80004,80006],{"class":30,"line":33429},[28,79984,52458],{"class":211},[28,79986,54450],{"class":34},[28,79988,212],{"class":211},[28,79990,79991],{"class":64},"'.filter'",[28,79993,30877],{"class":211},[28,79995,57864],{"class":34},[28,79997,212],{"class":211},[28,79999,57869],{"class":64},[28,80001,12512],{"class":211},[28,80003,285],{"class":5293},[28,80005,79849],{"class":207},[28,80007,15649],{"class":211},[28,80009,80010],{"class":30,"line":33435},[28,80011,80012],{"class":269},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[28,80014,80015,80017,80019,80022,80024,80026,80028,80030],{"class":30,"line":33441},[28,80016,58279],{"class":207},[28,80018,79858],{"class":211},[28,80020,80021],{"class":38},"tagName",[28,80023,12512],{"class":211},[28,80025,31588],{"class":38},[28,80027,79874],{"class":211},[28,80029,257],{"class":207},[28,80031,80032],{"class":211}," e.target\n",[28,80034,80035],{"class":30,"line":33459},[28,80036,80037],{"class":269},"      \u002F\u002F 判断\n",[28,80039,80040,80042,80044,80046,80048],{"class":30,"line":33473},[28,80041,54531],{"class":207},[28,80043,67085],{"class":211},[28,80045,54537],{"class":207},[28,80047,68307],{"class":64},[28,80049,12519],{"class":211},[28,80051,80052],{"class":30,"line":33482},[28,80053,80054],{"class":269},"        \u002F\u002F console.log(11)\n",[28,80056,80057],{"class":30,"line":33491},[28,80058,80059],{"class":269},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[28,80061,80062],{"class":30,"line":33500},[28,80063,80064],{"class":269},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[28,80066,80067,80069,80071,80073],{"class":30,"line":33509},[28,80068,51881],{"class":207},[28,80070,51884],{"class":211},[28,80072,257],{"class":207},[28,80074,80075],{"class":211}," goodsList\n",[28,80077,80078,80080,80083,80085,80088],{"class":30,"line":33515},[28,80079,2574],{"class":207},[28,80081,80082],{"class":211}," (dataset.index ",[28,80084,54537],{"class":207},[28,80086,80087],{"class":64}," '1'",[28,80089,12519],{"class":211},[28,80091,80092,80095,80097,80100,80103,80105,80107,80109,80112,80114,80116,80119,80121,80123,80125],{"class":30,"line":33521},[28,80093,80094],{"class":211},"          arr ",[28,80096,257],{"class":207},[28,80098,80099],{"class":211}," goodsList.",[28,80101,80102],{"class":34},"filter",[28,80104,212],{"class":211},[28,80106,79846],{"class":5293},[28,80108,79849],{"class":207},[28,80110,80111],{"class":211}," item.price ",[28,80113,1788],{"class":207},[28,80115,4170],{"class":38},[28,80117,80118],{"class":207}," &&",[28,80120,80111],{"class":211},[28,80122,1666],{"class":207},[28,80124,5831],{"class":38},[28,80126,218],{"class":211},[28,80128,80129,80132,80134,80136,80138,80140,80143],{"class":30,"line":33529},[28,80130,80131],{"class":211},"        } ",[28,80133,1779],{"class":207},[28,80135,1782],{"class":207},[28,80137,80082],{"class":211},[28,80139,54537],{"class":207},[28,80141,80142],{"class":64}," '2'",[28,80144,12519],{"class":211},[28,80146,80147,80149,80151,80153,80155,80157,80159,80161,80163,80165,80167,80169,80171,80173,80176],{"class":30,"line":33534},[28,80148,80094],{"class":211},[28,80150,257],{"class":207},[28,80152,80099],{"class":211},[28,80154,80102],{"class":34},[28,80156,212],{"class":211},[28,80158,79846],{"class":5293},[28,80160,79849],{"class":207},[28,80162,80111],{"class":211},[28,80164,1788],{"class":207},[28,80166,5831],{"class":38},[28,80168,80118],{"class":207},[28,80170,80111],{"class":211},[28,80172,1666],{"class":207},[28,80174,80175],{"class":38}," 300",[28,80177,218],{"class":211},[28,80179,80180,80182,80184,80186,80188,80190,80193],{"class":30,"line":33540},[28,80181,80131],{"class":211},[28,80183,1779],{"class":207},[28,80185,1782],{"class":207},[28,80187,80082],{"class":211},[28,80189,54537],{"class":207},[28,80191,80192],{"class":64}," '3'",[28,80194,12519],{"class":211},[28,80196,80197,80199,80201,80203,80205,80207,80209,80211,80213,80215,80217],{"class":30,"line":33551},[28,80198,80094],{"class":211},[28,80200,257],{"class":207},[28,80202,80099],{"class":211},[28,80204,80102],{"class":34},[28,80206,212],{"class":211},[28,80208,79846],{"class":5293},[28,80210,79849],{"class":207},[28,80212,80111],{"class":211},[28,80214,1788],{"class":207},[28,80216,80175],{"class":38},[28,80218,218],{"class":211},[28,80220,80221],{"class":30,"line":33557},[28,80222,2606],{"class":211},[28,80224,80225],{"class":30,"line":33577},[28,80226,80227],{"class":269},"        \u002F\u002F 渲染函数\n",[28,80229,80230,80232],{"class":30,"line":33583},[28,80231,70459],{"class":34},[28,80233,52463],{"class":211},[28,80235,80236],{"class":30,"line":33589},[28,80237,52449],{"class":211},[28,80239,80240],{"class":30,"line":33595},[28,80241,2477],{"emptyLinePlaceholder":134},[28,80243,80244],{"class":30,"line":33612},[28,80245,33512],{"class":211},[28,80247,80248,80250,80252],{"class":30,"line":33618},[28,80249,52468],{"class":211},[28,80251,51864],{"class":51351},[28,80253,51358],{"class":211},[28,80255,80256,80258,80260],{"class":30,"line":33624},[28,80257,51836],{"class":211},[28,80259,51851],{"class":51351},[28,80261,51358],{"class":211},[28,80263,80264],{"class":30,"line":33630},[28,80265,2477],{"emptyLinePlaceholder":134},[28,80267,80268,80270,80272],{"class":30,"line":33636},[28,80269,51836],{"class":211},[28,80271,50686],{"class":51351},[28,80273,51358],{"class":211},[149,80275,80277],{"id":80276},"_410-深入了解对象","4.10 深入了解对象",[177,80279,80281],{"id":80280},"_4101-创建对象","4.10.1 创建对象",[14,80283,80284],{},[1540,80285],{"alt":23,"src":80286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80288,80289],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[177,80291,80293],{"id":80292},"_4102-构造函数","4.10.2 构造函数",[14,80295,80296,80299],{},[359,80297,80298],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80301,80302,80305],{},[359,80303,80304],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[18,80307,80309],{"className":50684,"code":80308,"language":50686,"meta":23,"style":23},"\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",[25,80310,80311,80319,80324,80345,80358,80370,80382,80386,80391,80418,80423,80450],{"__ignoreMap":23},[28,80312,80313,80315,80317],{"class":30,"line":31},[28,80314,1120],{"class":211},[28,80316,51864],{"class":51351},[28,80318,51358],{"class":211},[28,80320,80321],{"class":30,"line":42},[28,80322,80323],{"class":269},"\u002F\u002F例：\n",[28,80325,80326,80328,80331,80333,80335,80337,80339,80341,80343],{"class":30,"line":50},[28,80327,54500],{"class":207},[28,80329,80330],{"class":34}," Pig",[28,80332,212],{"class":211},[28,80334,79861],{"class":5293},[28,80336,588],{"class":211},[28,80338,70272],{"class":5293},[28,80340,588],{"class":211},[28,80342,70289],{"class":5293},[28,80344,12519],{"class":211},[28,80346,80347,80350,80353,80355],{"class":30,"line":58},[28,80348,80349],{"class":38},"    this",[28,80351,80352],{"class":211},".name",[28,80354,257],{"class":207},[28,80356,80357],{"class":211},"name\n",[28,80359,80360,80362,80365,80367],{"class":30,"line":70},[28,80361,80349],{"class":38},[28,80363,80364],{"class":211},".age",[28,80366,257],{"class":207},[28,80368,80369],{"class":211},"age\n",[28,80371,80372,80374,80377,80379],{"class":30,"line":78},[28,80373,80349],{"class":38},[28,80375,80376],{"class":211},".gender",[28,80378,257],{"class":207},[28,80380,80381],{"class":211},"gender    \n",[28,80383,80384],{"class":30,"line":86},[28,80385,1643],{"class":211},[28,80387,80388],{"class":30,"line":97},[28,80389,80390],{"class":269},"\u002F\u002F创建佩奇对象\n",[28,80392,80393,80395,80398,80400,80402,80404,80407,80409,80411,80413,80416],{"class":30,"line":108},[28,80394,6869],{"class":207},[28,80396,80397],{"class":38}," Peppa",[28,80399,11794],{"class":207},[28,80401,80330],{"class":34},[28,80403,212],{"class":211},[28,80405,80406],{"class":64},"'佩奇'",[28,80408,588],{"class":211},[28,80410,554],{"class":38},[28,80412,588],{"class":211},[28,80414,80415],{"class":64},"'女'",[28,80417,218],{"class":211},[28,80419,80420],{"class":30,"line":1407},[28,80421,80422],{"class":269},"\u002F\u002F创建乔治对象\n",[28,80424,80425,80427,80430,80432,80434,80436,80439,80441,80443,80445,80448],{"class":30,"line":1690},[28,80426,6869],{"class":207},[28,80428,80429],{"class":38}," George",[28,80431,11794],{"class":207},[28,80433,80330],{"class":34},[28,80435,212],{"class":211},[28,80437,80438],{"class":64},"'乔治'",[28,80440,588],{"class":211},[28,80442,282],{"class":38},[28,80444,588],{"class":211},[28,80446,80447],{"class":64},"'男'",[28,80449,218],{"class":211},[28,80451,80452,80454,80456],{"class":30,"line":1695},[28,80453,51836],{"class":211},[28,80455,51864],{"class":51351},[28,80457,51358],{"class":211},[14,80459,80460],{},[1540,80461],{"alt":23,"src":80462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80464,80465],{},[1540,80466],{"alt":23,"src":80467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80469,80470],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80472,80473],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80475,80476],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80478,80479],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80481,80482],{},"这里用等号是因为：对象.属性=值",[14,80484,80485],{},"①利用对象字面量创建对象",[14,80487,80488],{},"const o={",[14,80490,80491],{},"name:'pink'",[14,80493,80494],{},"} ②利用new Object创建对象",[14,80496,80497],{},"const o=new Object({name:'pink'})",[14,80499,80500],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80502,80503],{},"构造函数创建对象的执行过程：",[14,80505,80506],{},[1540,80507],{"alt":23,"src":80508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[177,80510,80512],{"id":80511},"_4103-实例成员","4.10.3 实例成员",[14,80514,80515],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[161,80517,80518,80521,80524],{},[119,80519,80520],{},"实例对象的属性和方法即为实例成员",[119,80522,80523],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[119,80525,80526],{},"构造函数创建的实例对象彼此独立互不影响",[177,80528,80530],{"id":80529},"_4104-静态成员","4.10.4 静态成员",[14,80532,80533],{},[1540,80534],{"alt":23,"src":80535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80537,80538],{},"静态成员有Date.now() Math.PI Math.random()",[14,80540,80541],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80543,80544],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80546,80547],{},"function Pig(name) n {",[14,80549,80550],{},"this.name=name",[14,80552,1156],{},[14,80554,80555],{},"Pig.eyes=2",[14,80557,80558],{},"Pig.sayHai=function () { console.log(this) }",[14,80560,80561],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80563,80564],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80566,11409],{},[161,80568,80569,80572,80575,80578,80581],{},[119,80570,80571],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[119,80573,80574],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[119,80576,80577],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[119,80579,80580],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[119,80582,80583],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80585,80586],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[177,80588,80590],{"id":80589},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80592,80593],{},"内置构造函数包含：",[14,80595,80596],{},[1540,80597],{"alt":23,"src":80598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80600,80601],{},[1540,80602],{"alt":23,"src":80603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80605,80606],{},"这些基本数据类型，js对他们进行了包装",[51864,80608,80609],{},"\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",[22075,80611,80613],{"id":80612},"_41051-object","4.10.5.1 Object",[14,80615,80616],{},"Object 是内置的构造函数，用于创建普通对象",[14,80618,80619],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[18,80621,80623],{"className":50684,"code":80622,"language":50686,"meta":23,"style":23},"const user=new Object({name:'小明',age:15})\n",[25,80624,80625],{"__ignoreMap":23},[28,80626,80627],{"class":30,"line":31},[28,80628,80622],{"class":211},[14,80630,80631],{},"三个常用的静态方法：",[22987,80633,80635],{"id":80634},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80637,80638],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80640,80641],{},[1540,80642],{"alt":23,"src":80643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80645,80646],{},[1540,80647],{"alt":23,"src":80648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[18,80650,80652],{"className":53118,"code":80651,"language":53120,"meta":23,"style":23},"\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",[25,80653,80654,80662,80670,80675,80680,80685,80690,80695,80700,80708],{"__ignoreMap":23},[28,80655,80656,80658,80660],{"class":30,"line":31},[28,80657,1120],{"class":211},[28,80659,51851],{"class":51351},[28,80661,51358],{"class":211},[28,80663,80664,80666,80668],{"class":30,"line":42},[28,80665,52195],{"class":211},[28,80667,51864],{"class":51351},[28,80669,51358],{"class":211},[28,80671,80672],{"class":30,"line":50},[28,80673,80674],{"class":211},"    const o = { name: 'pink', age: 6 }\n",[28,80676,80677],{"class":30,"line":58},[28,80678,80679],{"class":211},"    \u002F\u002F 获得所有属性名\n",[28,80681,80682],{"class":30,"line":70},[28,80683,80684],{"class":211},"    const arr = Object.keys(o)\n",[28,80686,80687],{"class":30,"line":78},[28,80688,80689],{"class":211},"    console.log(arr)\n",[28,80691,80692],{"class":30,"line":86},[28,80693,80694],{"class":211},"    \u002F\u002F 获得所有属性值\n",[28,80696,80697],{"class":30,"line":97},[28,80698,80699],{"class":211},"    console.log(Object.values(o))\n",[28,80701,80702,80704,80706],{"class":30,"line":108},[28,80703,52468],{"class":211},[28,80705,51864],{"class":51351},[28,80707,51358],{"class":211},[28,80709,80710,80712,80714],{"class":30,"line":1407},[28,80711,51836],{"class":211},[28,80713,51851],{"class":51351},[28,80715,51358],{"class":211},[22987,80717,80719],{"id":80718},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80721,80722],{},"Object.assign(oo,o)",[14,80724,80725],{},"后的东西添加给前 是追加",[14,80727,80728],{},[1540,80729],{"alt":23,"src":80730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80732,80733],{},[1540,80734],{"alt":23,"src":80735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[18,80737,80739],{"className":53118,"code":80738,"language":53120,"meta":23,"style":23},"\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",[25,80740,80741,80749,80757,80761,80765,80769,80773,80777,80781,80786,80791,80796,80801,80806,80814],{"__ignoreMap":23},[28,80742,80743,80745,80747],{"class":30,"line":31},[28,80744,1120],{"class":211},[28,80746,51851],{"class":51351},[28,80748,51358],{"class":211},[28,80750,80751,80753,80755],{"class":30,"line":42},[28,80752,52195],{"class":211},[28,80754,51864],{"class":51351},[28,80756,51358],{"class":211},[28,80758,80759],{"class":30,"line":50},[28,80760,80674],{"class":211},[28,80762,80763],{"class":30,"line":58},[28,80764,80679],{"class":211},[28,80766,80767],{"class":30,"line":70},[28,80768,80684],{"class":211},[28,80770,80771],{"class":30,"line":78},[28,80772,80689],{"class":211},[28,80774,80775],{"class":30,"line":86},[28,80776,80694],{"class":211},[28,80778,80779],{"class":30,"line":97},[28,80780,80699],{"class":211},[28,80782,80783],{"class":30,"line":108},[28,80784,80785],{"class":211},"    const oo = {}\n",[28,80787,80788],{"class":30,"line":1407},[28,80789,80790],{"class":211},"    Object.assign(oo, o)\n",[28,80792,80793],{"class":30,"line":1690},[28,80794,80795],{"class":211},"    console.log(oo)\n",[28,80797,80798],{"class":30,"line":1695},[28,80799,80800],{"class":211},"    Object.assign(o, { gender: '女' })\n",[28,80802,80803],{"class":30,"line":1701},[28,80804,80805],{"class":211},"    console.log(o)\n",[28,80807,80808,80810,80812],{"class":30,"line":1706},[28,80809,52468],{"class":211},[28,80811,51864],{"class":51351},[28,80813,51358],{"class":211},[28,80815,80816,80818,80820],{"class":30,"line":1720},[28,80817,51836],{"class":211},[28,80819,51851],{"class":51351},[28,80821,51358],{"class":211},[14,80823,80824],{},[1540,80825],{"alt":23,"src":80826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22075,80828,80830],{"id":80829},"_41052-array","4.10.5.2 Array",[14,80832,80833],{},"Array 是内置的构造函数，用于创建数组",[14,80835,80836],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[18,80838,80840],{"className":50684,"code":80839,"language":50686,"meta":23,"style":23},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[25,80841,80842,80847],{"__ignoreMap":23},[28,80843,80844],{"class":30,"line":31},[28,80845,80846],{"class":211},"const arr=new Array(3,5)\n",[28,80848,80849],{"class":30,"line":42},[28,80850,80851],{"class":211},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80853,80854],{},"Array的实例方法，这个方法是实例成员",[14,80856,80857],{},[1540,80858],{"alt":23,"src":80859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22987,80861,80863],{"id":80862},"_410521-reduce","4.10.5.2.1 reduce",[14,80865,80866],{},[1540,80867],{"alt":23,"src":80868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[18,80870,80872],{"className":53118,"code":80871,"language":53120,"meta":23,"style":23},"\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",[25,80873,80874,80882,80890,80895,80900,80905,80910,80914,80919,80924,80929,80933,80938,80943,80947,80952,80957,80962,80970],{"__ignoreMap":23},[28,80875,80876,80878,80880],{"class":30,"line":31},[28,80877,1120],{"class":211},[28,80879,51851],{"class":51351},[28,80881,51358],{"class":211},[28,80883,80884,80886,80888],{"class":30,"line":42},[28,80885,52195],{"class":211},[28,80887,51864],{"class":51351},[28,80889,51358],{"class":211},[28,80891,80892],{"class":30,"line":50},[28,80893,80894],{"class":211},"    const arr = [1, 5, 8]\n",[28,80896,80897],{"class":30,"line":58},[28,80898,80899],{"class":211},"    \u002F\u002F 1.没有初始值\n",[28,80901,80902],{"class":30,"line":70},[28,80903,80904],{"class":211},"    const total = arr.reduce(function (prev, current) {\n",[28,80906,80907],{"class":30,"line":78},[28,80908,80909],{"class":211},"      return prev + current\n",[28,80911,80912],{"class":30,"line":86},[28,80913,33512],{"class":211},[28,80915,80916],{"class":30,"line":97},[28,80917,80918],{"class":211},"    console.log(total)   \u002F\u002F14\n",[28,80920,80921],{"class":30,"line":108},[28,80922,80923],{"class":211},"    \u002F\u002F 2.有初始值\n",[28,80925,80926],{"class":30,"line":1407},[28,80927,80928],{"class":211},"    const total1 = arr.reduce(function (prev, current) {\n",[28,80930,80931],{"class":30,"line":1690},[28,80932,80909],{"class":211},[28,80934,80935],{"class":30,"line":1695},[28,80936,80937],{"class":211},"    }, 10)\n",[28,80939,80940],{"class":30,"line":1701},[28,80941,80942],{"class":211},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[28,80944,80945],{"class":30,"line":1706},[28,80946,2477],{"emptyLinePlaceholder":134},[28,80948,80949],{"class":30,"line":1720},[28,80950,80951],{"class":211},"    \u002F\u002F 3.箭头函数写法\n",[28,80953,80954],{"class":30,"line":1725},[28,80955,80956],{"class":211},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[28,80958,80959],{"class":30,"line":1731},[28,80960,80961],{"class":211},"    console.log(total2)   \u002F\u002F24\n",[28,80963,80964,80966,80968],{"class":30,"line":1752},[28,80965,52468],{"class":211},[28,80967,51864],{"class":51351},[28,80969,51358],{"class":211},[28,80971,80972,80974,80976],{"class":30,"line":1757},[28,80973,51836],{"class":211},[28,80975,51851],{"class":51351},[28,80977,51358],{"class":211},[14,80979,80980],{},"执行过程：",[161,80982,80983,80986,80989],{},[119,80984,80985],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[119,80987,80988],{},"每一次循环，把返回值给作为下一次循环的上一次值",[119,80990,80991],{},"如果有起始值，则起始值作为上一次值",[18,80993,80995],{"className":53118,"code":80994,"language":53120,"meta":23,"style":23},"\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",[25,80996,80997,81005,81013,81017,81021,81025,81029,81033,81037,81042,81047,81052,81057,81062,81066,81070,81074,81078,81082,81086,81091,81095,81100,81104,81109,81114,81118,81122,81126,81134],{"__ignoreMap":23},[28,80998,80999,81001,81003],{"class":30,"line":31},[28,81000,1120],{"class":211},[28,81002,51851],{"class":51351},[28,81004,51358],{"class":211},[28,81006,81007,81009,81011],{"class":30,"line":42},[28,81008,52195],{"class":211},[28,81010,51864],{"class":51351},[28,81012,51358],{"class":211},[28,81014,81015],{"class":30,"line":50},[28,81016,80894],{"class":211},[28,81018,81019],{"class":30,"line":58},[28,81020,80899],{"class":211},[28,81022,81023],{"class":30,"line":70},[28,81024,80904],{"class":211},[28,81026,81027],{"class":30,"line":78},[28,81028,80909],{"class":211},[28,81030,81031],{"class":30,"line":86},[28,81032,33512],{"class":211},[28,81034,81035],{"class":30,"line":97},[28,81036,80918],{"class":211},[28,81038,81039],{"class":30,"line":108},[28,81040,81041],{"class":211},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[28,81043,81044],{"class":30,"line":1407},[28,81045,81046],{"class":211},"    \u002F\u002F     1              5                    6\n",[28,81048,81049],{"class":30,"line":1690},[28,81050,81051],{"class":211},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[28,81053,81054],{"class":30,"line":1695},[28,81055,81056],{"class":211},"    \u002F\u002F     6              8                    14\n",[28,81058,81059],{"class":30,"line":1701},[28,81060,81061],{"class":211},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[28,81063,81064],{"class":30,"line":1706},[28,81065,80923],{"class":211},[28,81067,81068],{"class":30,"line":1720},[28,81069,80928],{"class":211},[28,81071,81072],{"class":30,"line":1725},[28,81073,80909],{"class":211},[28,81075,81076],{"class":30,"line":1731},[28,81077,80937],{"class":211},[28,81079,81080],{"class":30,"line":1752},[28,81081,80942],{"class":211},[28,81083,81084],{"class":30,"line":1757},[28,81085,81041],{"class":211},[28,81087,81088],{"class":30,"line":1771},[28,81089,81090],{"class":211},"    \u002F\u002F     10             1                     11\n",[28,81092,81093],{"class":30,"line":1776},[28,81094,81051],{"class":211},[28,81096,81097],{"class":30,"line":1805},[28,81098,81099],{"class":211},"    \u002F\u002F     11             5                    16\n",[28,81101,81102],{"class":30,"line":1810},[28,81103,81051],{"class":211},[28,81105,81106],{"class":30,"line":1827},[28,81107,81108],{"class":211},"    \u002F\u002F     16             8                    24\n",[28,81110,81111],{"class":30,"line":1832},[28,81112,81113],{"class":211},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[28,81115,81116],{"class":30,"line":1837},[28,81117,80951],{"class":211},[28,81119,81120],{"class":30,"line":1842},[28,81121,80956],{"class":211},[28,81123,81124],{"class":30,"line":1856},[28,81125,80961],{"class":211},[28,81127,81128,81130,81132],{"class":30,"line":1861},[28,81129,52468],{"class":211},[28,81131,51864],{"class":51351},[28,81133,51358],{"class":211},[28,81135,81136,81138,81140],{"class":30,"line":2654},[28,81137,51836],{"class":211},[28,81139,51851],{"class":51351},[28,81141,51358],{"class":211},[22987,81143,81145],{"id":81144},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81147,81148],{},[1540,81149],{"alt":23,"src":81150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[18,81152,81154],{"className":53118,"code":81153,"language":53120,"meta":23,"style":23},"\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",[25,81155,81156,81164,81172,81177,81182,81187,81192,81196,81201,81206,81211,81216,81221,81226,81230,81235,81239,81244,81252],{"__ignoreMap":23},[28,81157,81158,81160,81162],{"class":30,"line":31},[28,81159,1120],{"class":211},[28,81161,51851],{"class":51351},[28,81163,51358],{"class":211},[28,81165,81166,81168,81170],{"class":30,"line":42},[28,81167,52195],{"class":211},[28,81169,51864],{"class":51351},[28,81171,51358],{"class":211},[28,81173,81174],{"class":30,"line":50},[28,81175,81176],{"class":211},"    const arr = [\n",[28,81178,81179],{"class":30,"line":58},[28,81180,81181],{"class":211},"      { name: '张三', salary: 10000 },\n",[28,81183,81184],{"class":30,"line":70},[28,81185,81186],{"class":211},"      { name: '李四', salary: 10000 },\n",[28,81188,81189],{"class":30,"line":78},[28,81190,81191],{"class":211},"      { name: '王五', salary: 10000 }\n",[28,81193,81194],{"class":30,"line":86},[28,81195,53160],{"class":211},[28,81197,81198],{"class":30,"line":97},[28,81199,81200],{"class":211},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[28,81202,81203],{"class":30,"line":108},[28,81204,81205],{"class":211},"    \u002F\u002F prev是累计值\n",[28,81207,81208],{"class":30,"line":1407},[28,81209,81210],{"class":211},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[28,81212,81213],{"class":30,"line":1690},[28,81214,81215],{"class":211},"    console.log(total)\n",[28,81217,81218],{"class":30,"line":1695},[28,81219,81220],{"class":211},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[28,81222,81223],{"class":30,"line":1701},[28,81224,81225],{"class":211},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[28,81227,81228],{"class":30,"line":1706},[28,81229,81220],{"class":211},[28,81231,81232],{"class":30,"line":1720},[28,81233,81234],{"class":211},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[28,81236,81237],{"class":30,"line":1725},[28,81238,81220],{"class":211},[28,81240,81241],{"class":30,"line":1731},[28,81242,81243],{"class":211},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[28,81245,81246,81248,81250],{"class":30,"line":1752},[28,81247,52468],{"class":211},[28,81249,51864],{"class":51351},[28,81251,51358],{"class":211},[28,81253,81254,81256,81258],{"class":30,"line":1757},[28,81255,51836],{"class":211},[28,81257,51851],{"class":51351},[28,81259,51358],{"class":211},[22987,81261,81263],{"id":81262},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81265,81266],{},[1540,81267],{"alt":23,"src":81268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81270,81271],{},[1540,81272],{"alt":23,"src":81273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[161,81275,81276],{},[119,81277,81278],{},"find()",[14,81280,81281],{},"循环查找，找到第一个就ok",[14,81283,81284],{},[448,81285,81288],{"href":81286,"rel":81287},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23940],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[18,81290,81292],{"className":50684,"code":81291,"language":50686,"meta":23,"style":23},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[25,81293,81294,81299,81304],{"__ignoreMap":23},[28,81295,81296],{"class":30,"line":31},[28,81297,81298],{"class":211},"const array1 = [5, 12, 8, 130, 44]\n",[28,81300,81301],{"class":30,"line":42},[28,81302,81303],{"class":211},"const found = array1.find((element) => element > 10)\n",[28,81305,81306],{"class":30,"line":50},[28,81307,81308],{"class":211},"console.log(found)  \u002F\u002F12\n",[14,81310,81311,81313,81314,81319,81320,81323,81324,81326,81327,81332,81333,81335,81336,81338,81339,81341,81342],{},[25,81312,81278],{}," 方法是一个",[448,81315,81318],{"href":81316,"rel":81317},"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",[23940],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[25,81321,81322],{},"callbackFn"," 函数，直到 ",[25,81325,81322],{}," 返回一个",[448,81328,81331],{"href":81329,"rel":81330},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23940],"真值","。然后 ",[25,81334,81278],{}," 返回该元素并停止迭代数组。如果 ",[25,81337,81322],{}," 从未返回真值，则 ",[25,81340,81278],{}," 返回 ",[25,81343,81344],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[18,81346,81348],{"className":53118,"code":81347,"language":53120,"meta":23,"style":23},"\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",[25,81349,81350,81358,81366,81371,81376,81381,81385,81390,81395,81399,81404,81409,81413,81417,81422,81427,81431,81435,81440,81445,81450,81455,81460,81464,81469,81474,81479,81484,81488,81493,81501],{"__ignoreMap":23},[28,81351,81352,81354,81356],{"class":30,"line":31},[28,81353,1120],{"class":211},[28,81355,51851],{"class":51351},[28,81357,51358],{"class":211},[28,81359,81360,81362,81364],{"class":30,"line":42},[28,81361,52195],{"class":211},[28,81363,51864],{"class":51351},[28,81365,51358],{"class":211},[28,81367,81368],{"class":30,"line":50},[28,81369,81370],{"class":211},"    const arr = ['red', 'blue', 'green']\n",[28,81372,81373],{"class":30,"line":58},[28,81374,81375],{"class":211},"    const found = arr.find(item => item === 'pink')\n",[28,81377,81378],{"class":30,"line":70},[28,81379,81380],{"class":211},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[28,81382,81383],{"class":30,"line":78},[28,81384,2477],{"emptyLinePlaceholder":134},[28,81386,81387],{"class":30,"line":86},[28,81388,81389],{"class":211},"    \u002F\u002F 使用场景，用于查找数据\n",[28,81391,81392],{"class":30,"line":97},[28,81393,81394],{"class":211},"    const arr1 = [\n",[28,81396,81397],{"class":30,"line":108},[28,81398,79437],{"class":211},[28,81400,81401],{"class":30,"line":1407},[28,81402,81403],{"class":211},"        name: '小米',\n",[28,81405,81406],{"class":30,"line":1690},[28,81407,81408],{"class":211},"        price: 1999\n",[28,81410,81411],{"class":30,"line":1695},[28,81412,77943],{"class":211},[28,81414,81415],{"class":30,"line":1701},[28,81416,79437],{"class":211},[28,81418,81419],{"class":30,"line":1706},[28,81420,81421],{"class":211},"        name: '华为',\n",[28,81423,81424],{"class":30,"line":1720},[28,81425,81426],{"class":211},"        price: 3999\n",[28,81428,81429],{"class":30,"line":1725},[28,81430,52449],{"class":211},[28,81432,81433],{"class":30,"line":1731},[28,81434,53160],{"class":211},[28,81436,81437],{"class":30,"line":1752},[28,81438,81439],{"class":211},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[28,81441,81442],{"class":30,"line":1757},[28,81443,81444],{"class":211},"    \u002F\u002F const found1 = arr1.find(item => {\n",[28,81446,81447],{"class":30,"line":1771},[28,81448,81449],{"class":211},"    \u002F\u002F   if (item.name === '小米') {\n",[28,81451,81452],{"class":30,"line":1776},[28,81453,81454],{"class":211},"    \u002F\u002F     return item\n",[28,81456,81457],{"class":30,"line":1805},[28,81458,81459],{"class":211},"    \u002F\u002F   }\n",[28,81461,81462],{"class":30,"line":1810},[28,81463,63341],{"class":211},[28,81465,81466],{"class":30,"line":1827},[28,81467,81468],{"class":211},"    \u002F\u002F 另一种写法\n",[28,81470,81471],{"class":30,"line":1832},[28,81472,81473],{"class":211},"    const found1 = arr1.find(item => {\n",[28,81475,81476],{"class":30,"line":1837},[28,81477,81478],{"class":211},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[28,81480,81481],{"class":30,"line":1842},[28,81482,81483],{"class":211},"      return item.name = '小米'\n",[28,81485,81486],{"class":30,"line":1856},[28,81487,33512],{"class":211},[28,81489,81490],{"class":30,"line":1861},[28,81491,81492],{"class":211},"    console.log(found1)\n",[28,81494,81495,81497,81499],{"class":30,"line":2654},[28,81496,52468],{"class":211},[28,81498,51864],{"class":51351},[28,81500,51358],{"class":211},[28,81502,81503,81505,81507],{"class":30,"line":2668},[28,81504,51836],{"class":211},[28,81506,51851],{"class":51351},[28,81508,51358],{"class":211},[14,81510,81511],{},[1540,81512],{"alt":23,"src":81513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81515,81516],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[161,81518,81519],{"start":42},[119,81520,81521],{},"every()返回的是布尔值",[14,81523,81524],{},[448,81525,81528],{"href":81526,"rel":81527},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23940],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81530,81531],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81533,81534],{},"some是只有有一个就没问题",[14,81536,81537],{},"every是必须全是才行",[18,81539,81543],{"className":81540,"code":81541,"language":81542,"meta":23,"style":23},"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",[25,81544,81545,81561,81575,81579,81588],{"__ignoreMap":23},[28,81546,81547,81549,81552,81554,81556,81559],{"class":30,"line":31},[28,81548,54500],{"class":207},[28,81550,81551],{"class":211}," isBigEnough(element, ",[28,81553,74109],{"class":207},[28,81555,12512],{"class":211},[28,81557,81558],{"class":207},"array",[28,81560,12519],{"class":211},[28,81562,81563,81566,81569,81571,81573],{"class":30,"line":42},[28,81564,81565],{"class":207},"  return",[28,81567,81568],{"class":211}," element ",[28,81570,1788],{"class":207},[28,81572,2115],{"class":38},[28,81574,1370],{"class":211},[28,81576,81577],{"class":30,"line":50},[28,81578,1643],{"class":211},[28,81580,81581,81584,81586],{"class":30,"line":58},[28,81582,81583],{"class":211},"[12, 5, 8, 130, 44].every(isBigEnough); ",[28,81585,33380],{"class":207},[28,81587,54567],{"class":211},[28,81589,81590,81593,81595],{"class":30,"line":70},[28,81591,81592],{"class":211},"[12, 54, 18, 130, 44].every(isBigEnough); ",[28,81594,33380],{"class":207},[28,81596,57991],{"class":211},[18,81598,81600],{"className":53118,"code":81599,"language":53120,"meta":23,"style":23},"\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",[25,81601,81602,81610,81618,81623,81627,81632,81637,81645],{"__ignoreMap":23},[28,81603,81604,81606,81608],{"class":30,"line":31},[28,81605,1120],{"class":211},[28,81607,51851],{"class":51351},[28,81609,51358],{"class":211},[28,81611,81612,81614,81616],{"class":30,"line":42},[28,81613,52195],{"class":211},[28,81615,51864],{"class":51351},[28,81617,51358],{"class":211},[28,81619,81620],{"class":30,"line":50},[28,81621,81622],{"class":211},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[28,81624,81625],{"class":30,"line":58},[28,81626,78373],{"class":211},[28,81628,81629],{"class":30,"line":70},[28,81630,81631],{"class":211},"    const flag = arr.every(item => item >= 10)\n",[28,81633,81634],{"class":30,"line":78},[28,81635,81636],{"class":211},"    console.log(flag)    \u002F\u002Ftrue\n",[28,81638,81639,81641,81643],{"class":30,"line":86},[28,81640,52468],{"class":211},[28,81642,51864],{"class":51351},[28,81644,51358],{"class":211},[28,81646,81647,81649,81651],{"class":30,"line":97},[28,81648,51836],{"class":211},[28,81650,51851],{"class":51351},[28,81652,51358],{"class":211},[18,81654,81656],{"className":53118,"code":81655,"language":53120,"meta":23,"style":23},"\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",[25,81657,81658,81666,81674,81678,81683,81688,81693,81701],{"__ignoreMap":23},[28,81659,81660,81662,81664],{"class":30,"line":31},[28,81661,1120],{"class":211},[28,81663,51851],{"class":51351},[28,81665,51358],{"class":211},[28,81667,81668,81670,81672],{"class":30,"line":42},[28,81669,52195],{"class":211},[28,81671,51864],{"class":51351},[28,81673,51358],{"class":211},[28,81675,81676],{"class":30,"line":50},[28,81677,81622],{"class":211},[28,81679,81680],{"class":30,"line":58},[28,81681,81682],{"class":211},"    const arr = [10, 0, 5]\n",[28,81684,81685],{"class":30,"line":70},[28,81686,81687],{"class":211},"    const flag = arr.some(item => item >= 10)\n",[28,81689,81690],{"class":30,"line":78},[28,81691,81692],{"class":211},"    console.log(flag)   \u002F\u002Ftrue\n",[28,81694,81695,81697,81699],{"class":30,"line":86},[28,81696,52468],{"class":211},[28,81698,51864],{"class":51351},[28,81700,51358],{"class":211},[28,81702,81703,81705,81707],{"class":30,"line":97},[28,81704,51836],{"class":211},[28,81706,51851],{"class":51351},[28,81708,51358],{"class":211},[22987,81710,81712],{"id":81711},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81714,81715],{},[1540,81716],{"alt":23,"src":81717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[18,81719,81721],{"className":50684,"code":81720,"language":50686,"meta":23,"style":23},"\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",[25,81722,81723,81733,81747,81751,81759,81773,81793,81805,81813,81820,81832,81844,81856,81868,81878,81888,81892,81900,81908,81912,81920,81932,81940,81962,81967,81972,82005,82013,82021,82025],{"__ignoreMap":23},[28,81724,81725,81727,81729,81731],{"class":30,"line":31},[28,81726,51348],{"class":211},[28,81728,51352],{"class":51351},[28,81730,51355],{"class":34},[28,81732,51358],{"class":211},[28,81734,81735,81737,81739,81741,81743,81745],{"class":30,"line":42},[28,81736,1120],{"class":211},[28,81738,50686],{"class":51351},[28,81740,51367],{"class":34},[28,81742,257],{"class":211},[28,81744,51372],{"class":64},[28,81746,51358],{"class":211},[28,81748,81749],{"class":30,"line":50},[28,81750,2477],{"emptyLinePlaceholder":134},[28,81752,81753,81755,81757],{"class":30,"line":58},[28,81754,1120],{"class":211},[28,81756,51385],{"class":51351},[28,81758,51358],{"class":211},[28,81760,81761,81763,81765,81767,81769,81771],{"class":30,"line":70},[28,81762,52195],{"class":211},[28,81764,51395],{"class":51351},[28,81766,51398],{"class":34},[28,81768,257],{"class":211},[28,81770,51403],{"class":64},[28,81772,51358],{"class":211},[28,81774,81775,81777,81779,81781,81783,81785,81787,81789,81791],{"class":30,"line":78},[28,81776,52195],{"class":211},[28,81778,51395],{"class":51351},[28,81780,14997],{"class":34},[28,81782,257],{"class":211},[28,81784,51442],{"class":64},[28,81786,51422],{"class":34},[28,81788,257],{"class":211},[28,81790,51449],{"class":64},[28,81792,51358],{"class":211},[28,81794,81795,81797,81799,81801,81803],{"class":30,"line":86},[28,81796,52195],{"class":211},[28,81798,51458],{"class":51351},[28,81800,51461],{"class":211},[28,81802,51458],{"class":51351},[28,81804,51358],{"class":211},[28,81806,81807,81809,81811],{"class":30,"line":97},[28,81808,52195],{"class":211},[28,81810,126],{"class":51351},[28,81812,51358],{"class":211},[28,81814,81815,81818],{"class":30,"line":108},[28,81816,81817],{"class":51351},"    div",[28,81819,15649],{"class":211},[28,81821,81822,81824,81826,81828,81830],{"class":30,"line":1407},[28,81823,54822],{"class":38},[28,81825,51488],{"class":211},[28,81827,1800],{"class":38},[28,81829,51543],{"class":207},[28,81831,1370],{"class":211},[28,81833,81834,81836,81838,81840,81842],{"class":30,"line":1690},[28,81835,54836],{"class":38},[28,81837,51488],{"class":211},[28,81839,611],{"class":38},[28,81841,51543],{"class":207},[28,81843,1370],{"class":211},[28,81845,81846,81848,81850,81852,81854],{"class":30,"line":1695},[28,81847,57410],{"class":38},[28,81849,51488],{"class":211},[28,81851,611],{"class":38},[28,81853,51543],{"class":207},[28,81855,1370],{"class":211},[28,81857,81858,81860,81862,81864,81866],{"class":30,"line":1701},[28,81859,65184],{"class":38},[28,81861,51488],{"class":211},[28,81863,708],{"class":38},[28,81865,51543],{"class":207},[28,81867,1370],{"class":211},[28,81869,81870,81872,81874,81876],{"class":30,"line":1706},[28,81871,57337],{"class":38},[28,81873,51488],{"class":211},[28,81875,51643],{"class":38},[28,81877,1370],{"class":211},[28,81879,81880,81882,81884,81886],{"class":30,"line":1720},[28,81881,54935],{"class":38},[28,81883,51488],{"class":211},[28,81885,51696],{"class":38},[28,81887,1370],{"class":211},[28,81889,81890],{"class":30,"line":1725},[28,81891,2264],{"class":211},[28,81893,81894,81896,81898],{"class":30,"line":1731},[28,81895,52468],{"class":211},[28,81897,126],{"class":51351},[28,81899,51358],{"class":211},[28,81901,81902,81904,81906],{"class":30,"line":1752},[28,81903,51836],{"class":211},[28,81905,51385],{"class":51351},[28,81907,51358],{"class":211},[28,81909,81910],{"class":30,"line":1757},[28,81911,2477],{"emptyLinePlaceholder":134},[28,81913,81914,81916,81918],{"class":30,"line":1771},[28,81915,1120],{"class":211},[28,81917,51851],{"class":51351},[28,81919,51358],{"class":211},[28,81921,81922,81924,81926,81928,81930],{"class":30,"line":1776},[28,81923,52195],{"class":211},[28,81925,51662],{"class":51351},[28,81927,55365],{"class":211},[28,81929,51662],{"class":51351},[28,81931,51358],{"class":211},[28,81933,81934,81936,81938],{"class":30,"line":1805},[28,81935,52195],{"class":211},[28,81937,51864],{"class":51351},[28,81939,51358],{"class":211},[28,81941,81942,81944,81947,81949,81952,81955,81957,81960],{"class":30,"line":1810},[28,81943,11298],{"class":207},[28,81945,81946],{"class":38}," spec",[28,81948,13641],{"class":207},[28,81950,81951],{"class":211}," { size: ",[28,81953,81954],{"class":64},"'40cm*40cm'",[28,81956,55515],{"class":211},[28,81958,81959],{"class":64},"'黑色'",[28,81961,55655],{"class":211},[28,81963,81964],{"class":30,"line":1827},[28,81965,81966],{"class":269},"    \u002F\u002F const arr = Object.values(spec)\n",[28,81968,81969],{"class":30,"line":1832},[28,81970,81971],{"class":269},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[28,81973,81974,81976,81978,81980,81983,81985,81987,81990,81993,81996,81998,82000,82003],{"class":30,"line":1837},[28,81975,52458],{"class":211},[28,81977,54450],{"class":34},[28,81979,212],{"class":211},[28,81981,81982],{"class":64},"'div'",[28,81984,74300],{"class":211},[28,81986,257],{"class":207},[28,81988,81989],{"class":211}," Object.",[28,81991,81992],{"class":34},"values",[28,81994,81995],{"class":211},"(spec).",[28,81997,74274],{"class":34},[28,81999,212],{"class":211},[28,82001,82002],{"class":64},"'\u002F'",[28,82004,218],{"class":211},[28,82006,82007,82009,82011],{"class":30,"line":1842},[28,82008,52468],{"class":211},[28,82010,51864],{"class":51351},[28,82012,51358],{"class":211},[28,82014,82015,82017,82019],{"class":30,"line":1856},[28,82016,51836],{"class":211},[28,82018,51851],{"class":51351},[28,82020,51358],{"class":211},[28,82022,82023],{"class":30,"line":1861},[28,82024,2477],{"emptyLinePlaceholder":134},[28,82026,82027,82029,82031],{"class":30,"line":2654},[28,82028,51836],{"class":211},[28,82030,50686],{"class":51351},[28,82032,51358],{"class":211},[14,82034,82035],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22987,82037,82039],{"id":82038},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82041,82042],{},"静态方法，将伪数组转换为真数组",[14,82044,82045],{},[1540,82046],{"alt":23,"src":82047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[18,82049,82051],{"className":53118,"code":82050,"language":53120,"meta":23,"style":23},"\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",[25,82052,82053,82061,82069,82081,82093,82105,82113,82121,82126,82131,82136,82141,82149],{"__ignoreMap":23},[28,82054,82055,82057,82059],{"class":30,"line":31},[28,82056,1120],{"class":211},[28,82058,51851],{"class":51351},[28,82060,51358],{"class":211},[28,82062,82063,82065,82067],{"class":30,"line":42},[28,82064,52195],{"class":211},[28,82066,116],{"class":51351},[28,82068,51358],{"class":211},[28,82070,82071,82073,82075,82077,82079],{"class":30,"line":50},[28,82072,51392],{"class":211},[28,82074,119],{"class":51351},[28,82076,55365],{"class":211},[28,82078,119],{"class":51351},[28,82080,51358],{"class":211},[28,82082,82083,82085,82087,82089,82091],{"class":30,"line":58},[28,82084,51392],{"class":211},[28,82086,119],{"class":51351},[28,82088,55365],{"class":211},[28,82090,119],{"class":51351},[28,82092,51358],{"class":211},[28,82094,82095,82097,82099,82101,82103],{"class":30,"line":70},[28,82096,51392],{"class":211},[28,82098,119],{"class":51351},[28,82100,55365],{"class":211},[28,82102,119],{"class":51351},[28,82104,51358],{"class":211},[28,82106,82107,82109,82111],{"class":30,"line":78},[28,82108,52468],{"class":211},[28,82110,116],{"class":51351},[28,82112,51358],{"class":211},[28,82114,82115,82117,82119],{"class":30,"line":86},[28,82116,52195],{"class":211},[28,82118,51864],{"class":51351},[28,82120,51358],{"class":211},[28,82122,82123],{"class":30,"line":97},[28,82124,82125],{"class":211},"    const lis = document.querySelectorAll('li')\n",[28,82127,82128],{"class":30,"line":108},[28,82129,82130],{"class":211},"    const liss = Array.from(lis)\n",[28,82132,82133],{"class":30,"line":1407},[28,82134,82135],{"class":211},"    liss.pop()\n",[28,82137,82138],{"class":30,"line":1690},[28,82139,82140],{"class":211},"    console.log(liss)\n",[28,82142,82143,82145,82147],{"class":30,"line":1695},[28,82144,52468],{"class":211},[28,82146,51864],{"class":51351},[28,82148,51358],{"class":211},[28,82150,82151,82153,82155],{"class":30,"line":1701},[28,82152,51836],{"class":211},[28,82154,51851],{"class":51351},[28,82156,51358],{"class":211},[14,82158,82159],{},[1540,82160],{"alt":23,"src":82161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22075,82163,82165],{"id":82164},"_41053-string","4.10.5.3 String",[14,82167,82168],{},[1540,82169],{"alt":23,"src":82170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22987,82172,82174],{"id":82173},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[18,82176,82178],{"className":53118,"code":82177,"language":53120,"meta":23,"style":23},"\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",[25,82179,82180,82188,82196,82201,82206,82211,82215,82220,82225,82230,82238],{"__ignoreMap":23},[28,82181,82182,82184,82186],{"class":30,"line":31},[28,82183,1120],{"class":211},[28,82185,51851],{"class":51351},[28,82187,51358],{"class":211},[28,82189,82190,82192,82194],{"class":30,"line":42},[28,82191,52195],{"class":211},[28,82193,51864],{"class":51351},[28,82195,51358],{"class":211},[28,82197,82198],{"class":30,"line":50},[28,82199,82200],{"class":211},"    \u002F\u002F 把字符串转化为数组\n",[28,82202,82203],{"class":30,"line":58},[28,82204,82205],{"class":211},"    const str = 'pink,red'\n",[28,82207,82208],{"class":30,"line":70},[28,82209,82210],{"class":211},"    const arr = str.split(',')\n",[28,82212,82213],{"class":30,"line":78},[28,82214,80689],{"class":211},[28,82216,82217],{"class":30,"line":86},[28,82218,82219],{"class":211},"    const str1 = '2025-8-25'\n",[28,82221,82222],{"class":30,"line":97},[28,82223,82224],{"class":211},"    const arr1 = str1.split('-')\n",[28,82226,82227],{"class":30,"line":108},[28,82228,82229],{"class":211},"    console.log(arr1)\n",[28,82231,82232,82234,82236],{"class":30,"line":1407},[28,82233,52468],{"class":211},[28,82235,51864],{"class":51351},[28,82237,51358],{"class":211},[28,82239,82240,82242,82244],{"class":30,"line":1690},[28,82241,51836],{"class":211},[28,82243,51851],{"class":51351},[28,82245,51358],{"class":211},[22987,82247,82249],{"id":82248},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82251,5258],{},[14,82253,82254],{},"substring(indexStart)",[14,82256,82257],{},"substring(indexStart, indexEnd)",[116,82259,82260,82271,82283,82293],{},[119,82261,82262,82263,82266,82267,82270],{},"如果省略了 ",[25,82264,82265],{},"indexEnd","，则 ",[25,82268,82269],{},"substring()"," 提取字符直到字符串的末尾",[119,82272,82273,82274,82277,82278,82266,82280,82282],{},"如果 ",[25,82275,82276],{},"indexStart"," 等于 ",[25,82279,82265],{},[25,82281,82269],{}," 返回一个空字符串",[119,82284,82273,82285,82287,82288,82266,82290,82292],{},[25,82286,82276],{}," 大于 ",[25,82289,82265],{},[25,82291,82269],{}," 的效果就像交换了这两个参数一样",[119,82294,82295],{},"结束的索引号不包含想要截取的部分",[18,82297,82299],{"className":81540,"code":82298,"language":81542,"meta":23,"style":23},"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",[25,82300,82301,82313,82317,82351,82381,82385,82416,82420,82447,82477,82507,82511,82542],{"__ignoreMap":23},[28,82302,82303,82306,82308,82311],{"class":30,"line":31},[28,82304,82305],{"class":211},"const anyString ",[28,82307,257],{"class":207},[28,82309,82310],{"class":64}," \"Mozilla\"",[28,82312,1370],{"class":211},[28,82314,82315],{"class":30,"line":42},[28,82316,2477],{"emptyLinePlaceholder":134},[28,82318,82319,82322,82324,82326,82328,82331,82333,82336,82338,82340,82342,82344,82346,82348],{"class":30,"line":50},[28,82320,82321],{"class":38},"console",[28,82323,768],{"class":211},[28,82325,58298],{"class":38},[28,82327,212],{"class":211},[28,82329,82330],{"class":38},"anyString",[28,82332,768],{"class":211},[28,82334,82335],{"class":38},"substring",[28,82337,212],{"class":211},[28,82339,401],{"class":38},[28,82341,12512],{"class":211},[28,82343,427],{"class":38},[28,82345,75304],{"class":211},[28,82347,33380],{"class":207},[28,82349,82350],{"class":64}," 'M'\n",[28,82352,82353,82355,82357,82359,82361,82363,82365,82367,82369,82371,82373,82375,82377,82379],{"class":30,"line":58},[28,82354,82321],{"class":38},[28,82356,768],{"class":211},[28,82358,58298],{"class":38},[28,82360,212],{"class":211},[28,82362,82330],{"class":38},[28,82364,768],{"class":211},[28,82366,82335],{"class":38},[28,82368,212],{"class":211},[28,82370,427],{"class":38},[28,82372,12512],{"class":211},[28,82374,401],{"class":38},[28,82376,75304],{"class":211},[28,82378,33380],{"class":207},[28,82380,82350],{"class":64},[28,82382,82383],{"class":30,"line":70},[28,82384,2477],{"emptyLinePlaceholder":134},[28,82386,82387,82389,82391,82393,82395,82397,82399,82401,82403,82405,82407,82409,82411,82413],{"class":30,"line":78},[28,82388,82321],{"class":38},[28,82390,768],{"class":211},[28,82392,58298],{"class":38},[28,82394,212],{"class":211},[28,82396,82330],{"class":38},[28,82398,768],{"class":211},[28,82400,82335],{"class":38},[28,82402,212],{"class":211},[28,82404,401],{"class":38},[28,82406,12512],{"class":211},[28,82408,554],{"class":38},[28,82410,75304],{"class":211},[28,82412,33380],{"class":207},[28,82414,82415],{"class":64}," 'Mozill'\n",[28,82417,82418],{"class":30,"line":86},[28,82419,2477],{"emptyLinePlaceholder":134},[28,82421,82422,82424,82426,82428,82430,82432,82434,82436,82438,82440,82442,82444],{"class":30,"line":97},[28,82423,82321],{"class":38},[28,82425,768],{"class":211},[28,82427,58298],{"class":38},[28,82429,212],{"class":211},[28,82431,82330],{"class":38},[28,82433,768],{"class":211},[28,82435,82335],{"class":38},[28,82437,212],{"class":211},[28,82439,503],{"class":38},[28,82441,75304],{"class":211},[28,82443,33380],{"class":207},[28,82445,82446],{"class":64}," 'lla'\n",[28,82448,82449,82451,82453,82455,82457,82459,82461,82463,82465,82467,82469,82471,82473,82475],{"class":30,"line":108},[28,82450,82321],{"class":38},[28,82452,768],{"class":211},[28,82454,58298],{"class":38},[28,82456,212],{"class":211},[28,82458,82330],{"class":38},[28,82460,768],{"class":211},[28,82462,82335],{"class":38},[28,82464,212],{"class":211},[28,82466,503],{"class":38},[28,82468,12512],{"class":211},[28,82470,579],{"class":38},[28,82472,75360],{"class":211},[28,82474,33380],{"class":207},[28,82476,82446],{"class":64},[28,82478,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499,82501,82503,82505],{"class":30,"line":1407},[28,82480,82321],{"class":38},[28,82482,768],{"class":211},[28,82484,58298],{"class":38},[28,82486,212],{"class":211},[28,82488,82330],{"class":38},[28,82490,768],{"class":211},[28,82492,82335],{"class":38},[28,82494,212],{"class":211},[28,82496,579],{"class":38},[28,82498,12512],{"class":211},[28,82500,503],{"class":38},[28,82502,75304],{"class":211},[28,82504,33380],{"class":207},[28,82506,82446],{"class":64},[28,82508,82509],{"class":30,"line":1690},[28,82510,2477],{"emptyLinePlaceholder":134},[28,82512,82513,82515,82517,82519,82521,82523,82525,82527,82529,82531,82533,82535,82537,82539],{"class":30,"line":1695},[28,82514,82321],{"class":38},[28,82516,768],{"class":211},[28,82518,58298],{"class":38},[28,82520,212],{"class":211},[28,82522,82330],{"class":38},[28,82524,768],{"class":211},[28,82526,82335],{"class":38},[28,82528,212],{"class":211},[28,82530,401],{"class":38},[28,82532,12512],{"class":211},[28,82534,579],{"class":38},[28,82536,75304],{"class":211},[28,82538,33380],{"class":207},[28,82540,82541],{"class":64}," 'Mozilla'\n",[28,82543,82544,82546,82548,82550,82552,82554,82556,82558,82560,82562,82564,82566,82568,82570],{"class":30,"line":1701},[28,82545,82321],{"class":38},[28,82547,768],{"class":211},[28,82549,58298],{"class":38},[28,82551,212],{"class":211},[28,82553,82330],{"class":38},[28,82555,768],{"class":211},[28,82557,82335],{"class":38},[28,82559,212],{"class":211},[28,82561,401],{"class":38},[28,82563,12512],{"class":211},[28,82565,656],{"class":38},[28,82567,75304],{"class":211},[28,82569,33380],{"class":207},[28,82571,82541],{"class":64},[22987,82573,82575],{"id":82574},"_410533-startswith","4.10.5.3.3 startsWith",[14,82577,82578,82581,82582,82587,82588,82590,82591],{},[25,82579,82580],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[359,82583,82584],{},[25,82585,82586],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[25,82589,1440],{}," 或 ",[25,82592,66071],{},[18,82594,82596],{"className":77546,"code":82595,"language":77548,"meta":23,"style":23},"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",[25,82597,82598,82610,82629,82634,82654],{"__ignoreMap":23},[28,82599,82600,82602,82605,82607],{"class":30,"line":31},[28,82601,6869],{"class":207},[28,82603,82604],{"class":211}," str1 ",[28,82606,257],{"class":207},[28,82608,82609],{"class":64}," \"Saturday night plans\"\n",[28,82611,82612,82614,82616,82619,82622,82624,82627],{"class":30,"line":42},[28,82613,77583],{"class":211},[28,82615,58298],{"class":34},[28,82617,82618],{"class":211},"(str1.",[28,82620,82621],{"class":34},"startsWith",[28,82623,212],{"class":211},[28,82625,82626],{"class":64},"\"Sat\"",[28,82628,30548],{"class":211},[28,82630,82631],{"class":30,"line":50},[28,82632,82633],{"class":269},"\u002F\u002F Expected output: true\n",[28,82635,82636,82638,82640,82642,82644,82646,82648,82650,82652],{"class":30,"line":58},[28,82637,77583],{"class":211},[28,82639,58298],{"class":34},[28,82641,82618],{"class":211},[28,82643,82621],{"class":34},[28,82645,212],{"class":211},[28,82647,82626],{"class":64},[28,82649,12512],{"class":211},[28,82651,282],{"class":38},[28,82653,30548],{"class":211},[28,82655,82656],{"class":30,"line":70},[28,82657,82658],{"class":269},"\u002F\u002F Expected output: false\n",[18,82660,82662],{"className":50684,"code":82661,"language":50686,"meta":23,"style":23},"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",[25,82663,82664,82669,82674,82678,82683,82688],{"__ignoreMap":23},[28,82665,82666],{"class":30,"line":31},[28,82667,82668],{"class":211},"startsWith(searchString)\n",[28,82670,82671],{"class":30,"line":42},[28,82672,82673],{"class":211},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[28,82675,82676],{"class":30,"line":50},[28,82677,2477],{"emptyLinePlaceholder":134},[28,82679,82680],{"class":30,"line":58},[28,82681,82682],{"class":211},"const str3 = 'pink老师上课中'\n",[28,82684,82685],{"class":30,"line":70},[28,82686,82687],{"class":211},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[28,82689,82690],{"class":30,"line":78},[28,82691,82692],{"class":211},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22987,82694,82696],{"id":82695},"_410534-includes","4.10.5.3.4 includes",[14,82698,82699],{},"includes(searchString) includes(searchString, position)",[161,82701,82702],{},[119,82703,82704],{},"searchString:",[14,82706,82707,82708,82710,82711,82716,82717,82722,82723,21577,82726,82729,82730,82733],{},"一个要在 ",[25,82709,1379],{}," 中查找的字符串。",[448,82712,82715],{"href":82713,"rel":82714},"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",[23940],"不能是正则表达式","。所有非正则表达式的值都会被",[448,82718,82721],{"href":82719,"rel":82720},"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",[23940],"强制转换为字符串","，因此如果该参数被省略或传入 ",[25,82724,82725],{},"undefined",[25,82727,82728],{},"includes()"," 方法会在字符串中搜索 ",[25,82731,82732],{},"\"undefined\"","，这通常不是你想要的",[161,82735,82736],{"start":42},[119,82737,82738,1069],{},[25,82739,82740],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82742,82743,82744,82747,82748],{},"在字符串中开始搜索 ",[25,82745,82746],{},"searchString"," 的位置。默认值为 ",[25,82749,401],{},[161,82751,82752],{"start":50},[119,82753,82754],{},"返回值：",[14,82756,82757,82758,82760,82761,82765,82766],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[25,82759,82746],{}," 为空字符串的情况），则返回 ",[359,82762,82763],{},[25,82764,1440],{}," ，否则返回 ",[359,82767,82768],{},[25,82769,66071],{},[161,82771,82772],{"start":58},[119,82773,82774],{},"异常：",[14,82776,82273,82777,13872,82779,82783],{},[25,82778,82746],{},[448,82780,82782],{"href":82713,"rel":82781},[23940],"是一个正则表达式","，则会抛出",[14,82785,82786],{},"只要是有就是true，不需要非得以谁开头结尾",[18,82788,82790],{"className":77546,"code":82789,"language":77548,"meta":23,"style":23},"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",[25,82791,82792,82803,82826,82845,82865,82887,82906],{"__ignoreMap":23},[28,82793,82794,82796,82798,82800],{"class":30,"line":31},[28,82795,6869],{"class":207},[28,82797,79826],{"class":211},[28,82799,257],{"class":207},[28,82801,82802],{"class":64}," \"To be, or not to be, that is the question.\"\n",[28,82804,82805,82807,82809,82812,82815,82817,82820,82823],{"class":30,"line":42},[28,82806,77583],{"class":211},[28,82808,58298],{"class":34},[28,82810,82811],{"class":211},"(str.",[28,82813,82814],{"class":34},"includes",[28,82816,212],{"class":211},[28,82818,82819],{"class":64},"\"To be\"",[28,82821,82822],{"class":211},"))",[28,82824,82825],{"class":269},"  \u002F\u002F true\n",[28,82827,82828,82830,82832,82834,82836,82838,82841,82843],{"class":30,"line":50},[28,82829,77583],{"class":211},[28,82831,58298],{"class":34},[28,82833,82811],{"class":211},[28,82835,82814],{"class":34},[28,82837,212],{"class":211},[28,82839,82840],{"class":64},"\"question\"",[28,82842,82822],{"class":211},[28,82844,82825],{"class":269},[28,82846,82847,82849,82851,82853,82855,82857,82860,82862],{"class":30,"line":58},[28,82848,77583],{"class":211},[28,82850,58298],{"class":34},[28,82852,82811],{"class":211},[28,82854,82814],{"class":34},[28,82856,212],{"class":211},[28,82858,82859],{"class":64},"\"nonexistent\"",[28,82861,82822],{"class":211},[28,82863,82864],{"class":269},"  \u002F\u002F false\n",[28,82866,82867,82869,82871,82873,82875,82877,82879,82881,82883,82885],{"class":30,"line":70},[28,82868,77583],{"class":211},[28,82870,58298],{"class":34},[28,82872,82811],{"class":211},[28,82874,82814],{"class":34},[28,82876,212],{"class":211},[28,82878,82819],{"class":64},[28,82880,12512],{"class":211},[28,82882,427],{"class":38},[28,82884,82822],{"class":211},[28,82886,82864],{"class":269},[28,82888,82889,82891,82893,82895,82897,82899,82902,82904],{"class":30,"line":78},[28,82890,77583],{"class":211},[28,82892,58298],{"class":34},[28,82894,82811],{"class":211},[28,82896,82814],{"class":34},[28,82898,212],{"class":211},[28,82900,82901],{"class":64},"\"TO BE\"",[28,82903,82822],{"class":211},[28,82905,82864],{"class":269},[28,82907,82908,82910,82912,82914,82916,82918,82920,82922],{"class":30,"line":86},[28,82909,77583],{"class":211},[28,82911,58298],{"class":34},[28,82913,82811],{"class":211},[28,82915,82814],{"class":34},[28,82917,212],{"class":211},[28,82919,7729],{"class":64},[28,82921,82822],{"class":211},[28,82923,82825],{"class":269},[22987,82925,82927],{"id":82926},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[18,82929,82931],{"className":53118,"code":82930,"language":53120,"meta":23,"style":23},"\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",[25,82932,82933,82941,82949,82954,82959,82964,82969,82974,82982],{"__ignoreMap":23},[28,82934,82935,82937,82939],{"class":30,"line":31},[28,82936,1120],{"class":211},[28,82938,51851],{"class":51351},[28,82940,51358],{"class":211},[28,82942,82943,82945,82947],{"class":30,"line":42},[28,82944,52195],{"class":211},[28,82946,51864],{"class":51351},[28,82948,51358],{"class":211},[28,82950,82951],{"class":30,"line":50},[28,82952,82953],{"class":211},"    const num = 10\n",[28,82955,82956],{"class":30,"line":58},[28,82957,82958],{"class":211},"    \u002F\u002F 强制转换\n",[28,82960,82961],{"class":30,"line":70},[28,82962,82963],{"class":211},"    console.log(String(num))\n",[28,82965,82966],{"class":30,"line":78},[28,82967,82968],{"class":211},"    \u002F\u002F toString()方法转换\n",[28,82970,82971],{"class":30,"line":86},[28,82972,82973],{"class":211},"    console.log(num.toString())\n",[28,82975,82976,82978,82980],{"class":30,"line":97},[28,82977,52468],{"class":211},[28,82979,51864],{"class":51351},[28,82981,51358],{"class":211},[28,82983,82984,82986,82988],{"class":30,"line":108},[28,82985,51836],{"class":211},[28,82987,51851],{"class":51351},[28,82989,51358],{"class":211},[22987,82991,82993],{"id":82992},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82995,82996],{},[1540,82997],{"alt":23,"src":82998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[18,83000,83002],{"className":50684,"code":83001,"language":50686,"meta":23,"style":23},"\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",[25,83003,83004,83014,83028,83032,83040,83054,83074,83086,83094,83098,83106,83118,83126,83138,83143,83148,83153,83200,83216,83224,83232,83236],{"__ignoreMap":23},[28,83005,83006,83008,83010,83012],{"class":30,"line":31},[28,83007,51348],{"class":211},[28,83009,51352],{"class":51351},[28,83011,51355],{"class":34},[28,83013,51358],{"class":211},[28,83015,83016,83018,83020,83022,83024,83026],{"class":30,"line":42},[28,83017,1120],{"class":211},[28,83019,50686],{"class":51351},[28,83021,51367],{"class":34},[28,83023,257],{"class":211},[28,83025,51372],{"class":64},[28,83027,51358],{"class":211},[28,83029,83030],{"class":30,"line":50},[28,83031,2477],{"emptyLinePlaceholder":134},[28,83033,83034,83036,83038],{"class":30,"line":58},[28,83035,1120],{"class":211},[28,83037,51385],{"class":51351},[28,83039,51358],{"class":211},[28,83041,83042,83044,83046,83048,83050,83052],{"class":30,"line":70},[28,83043,52195],{"class":211},[28,83045,51395],{"class":51351},[28,83047,51398],{"class":34},[28,83049,257],{"class":211},[28,83051,51403],{"class":64},[28,83053,51358],{"class":211},[28,83055,83056,83058,83060,83062,83064,83066,83068,83070,83072],{"class":30,"line":78},[28,83057,52195],{"class":211},[28,83059,51395],{"class":51351},[28,83061,14997],{"class":34},[28,83063,257],{"class":211},[28,83065,51442],{"class":64},[28,83067,51422],{"class":34},[28,83069,257],{"class":211},[28,83071,51449],{"class":64},[28,83073,51358],{"class":211},[28,83075,83076,83078,83080,83082,83084],{"class":30,"line":86},[28,83077,52195],{"class":211},[28,83079,51458],{"class":51351},[28,83081,51461],{"class":211},[28,83083,51458],{"class":51351},[28,83085,51358],{"class":211},[28,83087,83088,83090,83092],{"class":30,"line":97},[28,83089,51836],{"class":211},[28,83091,51385],{"class":51351},[28,83093,51358],{"class":211},[28,83095,83096],{"class":30,"line":108},[28,83097,2477],{"emptyLinePlaceholder":134},[28,83099,83100,83102,83104],{"class":30,"line":1407},[28,83101,1120],{"class":211},[28,83103,51851],{"class":51351},[28,83105,51358],{"class":211},[28,83107,83108,83110,83112,83114,83116],{"class":30,"line":1690},[28,83109,52195],{"class":211},[28,83111,51662],{"class":51351},[28,83113,55365],{"class":211},[28,83115,51662],{"class":51351},[28,83117,51358],{"class":211},[28,83119,83120,83122,83124],{"class":30,"line":1695},[28,83121,52195],{"class":211},[28,83123,51864],{"class":51351},[28,83125,51358],{"class":211},[28,83127,83128,83130,83133,83135],{"class":30,"line":1701},[28,83129,11298],{"class":207},[28,83131,83132],{"class":38}," gift",[28,83134,13641],{"class":207},[28,83136,83137],{"class":64}," '50g的茶叶，清洗球'\n",[28,83139,83140],{"class":30,"line":1706},[28,83141,83142],{"class":269},"    \u002F\u002F 1.把字符串拆分为数组\n",[28,83144,83145],{"class":30,"line":1720},[28,83146,83147],{"class":269},"    \u002F\u002F console.log(gift.split(','))\n",[28,83149,83150],{"class":30,"line":1725},[28,83151,83152],{"class":269},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[28,83154,83155,83157,83159,83161,83164,83167,83169,83172,83174,83176,83178,83180,83182,83185,83187,83190,83192,83194,83196,83198],{"class":30,"line":1731},[28,83156,11298],{"class":207},[28,83158,73970],{"class":38},[28,83160,13641],{"class":207},[28,83162,83163],{"class":211}," gift.",[28,83165,83166],{"class":34},"split",[28,83168,212],{"class":211},[28,83170,83171],{"class":64},"'，'",[28,83173,30877],{"class":211},[28,83175,74095],{"class":34},[28,83177,212],{"class":211},[28,83179,79846],{"class":5293},[28,83181,79849],{"class":207},[28,83183,83184],{"class":64}," `\u003Cspan>【赠品】${",[28,83186,79846],{"class":211},[28,83188,83189],{"class":64},"}\u003C\u002Fspan>\u003Cbr>`",[28,83191,30877],{"class":211},[28,83193,74274],{"class":34},[28,83195,212],{"class":211},[28,83197,74279],{"class":64},[28,83199,218],{"class":211},[28,83201,83202,83204,83206,83208,83210,83212,83214],{"class":30,"line":1752},[28,83203,52458],{"class":211},[28,83205,54450],{"class":34},[28,83207,212],{"class":211},[28,83209,81982],{"class":64},[28,83211,74300],{"class":211},[28,83213,257],{"class":207},[28,83215,74036],{"class":211},[28,83217,83218,83220,83222],{"class":30,"line":1757},[28,83219,52468],{"class":211},[28,83221,51864],{"class":51351},[28,83223,51358],{"class":211},[28,83225,83226,83228,83230],{"class":30,"line":1771},[28,83227,51836],{"class":211},[28,83229,51851],{"class":51351},[28,83231,51358],{"class":211},[28,83233,83234],{"class":30,"line":1776},[28,83235,2477],{"emptyLinePlaceholder":134},[28,83237,83238,83240,83242],{"class":30,"line":1805},[28,83239,51836],{"class":211},[28,83241,50686],{"class":51351},[28,83243,51358],{"class":211},[22075,83245,83247],{"id":83246},"_41054-number","4.10.5.4 Number",[14,83249,83250],{},[1540,83251],{"alt":23,"src":83252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83254,83255],{},"整数也可以进行toFixed来保留小数",[14,83257,83258],{},"比如：",[14,83260,83261],{},"const price=10",[14,83263,83264],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22075,83266,83268],{"id":83267},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83270,83271],{},[1540,83272],{"alt":23,"src":83273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[18,83275,83277],{"className":50684,"code":83276,"language":50686,"meta":23,"style":23},"\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",[25,83278,83279,83289,83303,83307,83315,83329,83349,83361,83369,83375,83385,83395,83405,83409,83413,83419,83431,83445,83449,83453,83459,83471,83487,83497,83513,83517,83521,83527,83537,83547,83551,83555,83563,83575,83587,83599,83603,83607,83615,83627,83631,83635,83646,83656,83668,83680,83690,83694,83698,83706,83715,83727,83737,83747,83751,83755,83763,83772,83779,83789,83801,83805,83809,83818,83828,83839,83851,83863,83867,83871,83880,83890,83901,83905,83909,83915,83927,83939,83949,83959,83977,83989,83993,83997,84006,84018,84028,84038,84050,84054,84062,84070,84074,84082,84096,84104,84118,84146,84154,84162,84172,84176,84184,84192,84201,84209,84218,84228,84232,84236,84244,84252,84261,84269,84277,84290,84294,84298,84306,84314,84323,84331,84339,84354,84358,84362,84370,84378,84387,84395,84403,84417,84425,84429,84433,84438,84464,84469,84506,84511,84534,84539,84593,84598,84634,84638,84644,84649,84658,84672,84681,84700,84709,84719,84724,84729,84742,84747,84801,84827,84835,84843,84847],{"__ignoreMap":23},[28,83280,83281,83283,83285,83287],{"class":30,"line":31},[28,83282,51348],{"class":211},[28,83284,51352],{"class":51351},[28,83286,51355],{"class":34},[28,83288,51358],{"class":211},[28,83290,83291,83293,83295,83297,83299,83301],{"class":30,"line":42},[28,83292,1120],{"class":211},[28,83294,50686],{"class":51351},[28,83296,51367],{"class":34},[28,83298,257],{"class":211},[28,83300,51372],{"class":64},[28,83302,51358],{"class":211},[28,83304,83305],{"class":30,"line":50},[28,83306,2477],{"emptyLinePlaceholder":134},[28,83308,83309,83311,83313],{"class":30,"line":58},[28,83310,1120],{"class":211},[28,83312,51385],{"class":51351},[28,83314,51358],{"class":211},[28,83316,83317,83319,83321,83323,83325,83327],{"class":30,"line":70},[28,83318,52195],{"class":211},[28,83320,51395],{"class":51351},[28,83322,51398],{"class":34},[28,83324,257],{"class":211},[28,83326,51403],{"class":64},[28,83328,51358],{"class":211},[28,83330,83331,83333,83335,83337,83339,83341,83343,83345,83347],{"class":30,"line":78},[28,83332,52195],{"class":211},[28,83334,51395],{"class":51351},[28,83336,14997],{"class":34},[28,83338,257],{"class":211},[28,83340,51442],{"class":64},[28,83342,51422],{"class":34},[28,83344,257],{"class":211},[28,83346,51449],{"class":64},[28,83348,51358],{"class":211},[28,83350,83351,83353,83355,83357,83359],{"class":30,"line":86},[28,83352,52195],{"class":211},[28,83354,51458],{"class":51351},[28,83356,51461],{"class":211},[28,83358,51458],{"class":51351},[28,83360,51358],{"class":211},[28,83362,83363,83365,83367],{"class":30,"line":97},[28,83364,52195],{"class":211},[28,83366,126],{"class":51351},[28,83368,51358],{"class":211},[28,83370,83371,83373],{"class":30,"line":108},[28,83372,6480],{"class":51351},[28,83374,15649],{"class":211},[28,83376,83377,83379,83381,83383],{"class":30,"line":1407},[28,83378,54746],{"class":38},[28,83380,51488],{"class":211},[28,83382,401],{"class":38},[28,83384,1370],{"class":211},[28,83386,83387,83389,83391,83393],{"class":30,"line":1690},[28,83388,54757],{"class":38},[28,83390,51488],{"class":211},[28,83392,401],{"class":38},[28,83394,1370],{"class":211},[28,83396,83397,83399,83401,83403],{"class":30,"line":1695},[28,83398,72647],{"class":38},[28,83400,51488],{"class":211},[28,83402,60556],{"class":38},[28,83404,1370],{"class":211},[28,83406,83407],{"class":30,"line":1701},[28,83408,2264],{"class":211},[28,83410,83411],{"class":30,"line":1706},[28,83412,2477],{"emptyLinePlaceholder":134},[28,83414,83415,83417],{"class":30,"line":1720},[28,83416,62174],{"class":34},[28,83418,15649],{"class":211},[28,83420,83421,83423,83425,83427,83429],{"class":30,"line":1725},[28,83422,54822],{"class":38},[28,83424,51488],{"class":211},[28,83426,78625],{"class":38},[28,83428,51543],{"class":207},[28,83430,1370],{"class":211},[28,83432,83433,83435,83437,83439,83441,83443],{"class":30,"line":1731},[28,83434,54757],{"class":38},[28,83436,51488],{"class":211},[28,83438,521],{"class":38},[28,83440,51543],{"class":207},[28,83442,51607],{"class":38},[28,83444,1370],{"class":211},[28,83446,83447],{"class":30,"line":1752},[28,83448,2264],{"class":211},[28,83450,83451],{"class":30,"line":1757},[28,83452,2477],{"emptyLinePlaceholder":134},[28,83454,83455,83457],{"class":30,"line":1771},[28,83456,78676],{"class":34},[28,83458,15649],{"class":211},[28,83460,83461,83463,83465,83467,83469],{"class":30,"line":1776},[28,83462,54746],{"class":38},[28,83464,51488],{"class":211},[28,83466,785],{"class":38},[28,83468,51543],{"class":207},[28,83470,1370],{"class":211},[28,83472,83473,83475,83477,83479,83481,83483,83485],{"class":30,"line":1805},[28,83474,61911],{"class":38},[28,83476,51488],{"class":211},[28,83478,28172],{"class":38},[28,83480,78731],{"class":38},[28,83482,78734],{"class":38},[28,83484,905],{"class":207},[28,83486,1370],{"class":211},[28,83488,83489,83491,83493,83495],{"class":30,"line":1810},[28,83490,55060],{"class":38},[28,83492,51488],{"class":211},[28,83494,51528],{"class":38},[28,83496,1370],{"class":211},[28,83498,83499,83501,83503,83505,83507,83509,83511],{"class":30,"line":1827},[28,83500,62028],{"class":38},[28,83502,51488],{"class":211},[28,83504,427],{"class":38},[28,83506,51543],{"class":207},[28,83508,51572],{"class":38},[28,83510,62295],{"class":38},[28,83512,1370],{"class":211},[28,83514,83515],{"class":30,"line":1832},[28,83516,2264],{"class":211},[28,83518,83519],{"class":30,"line":1837},[28,83520,2477],{"emptyLinePlaceholder":134},[28,83522,83523,83525],{"class":30,"line":1842},[28,83524,78794],{"class":34},[28,83526,15649],{"class":211},[28,83528,83529,83531,83533,83535],{"class":30,"line":1856},[28,83530,62076],{"class":38},[28,83532,51488],{"class":211},[28,83534,62081],{"class":38},[28,83536,1370],{"class":211},[28,83538,83539,83541,83543,83545],{"class":30,"line":1861},[28,83540,54935],{"class":38},[28,83542,51488],{"class":211},[28,83544,61869],{"class":38},[28,83546,1370],{"class":211},[28,83548,83549],{"class":30,"line":2654},[28,83550,2264],{"class":211},[28,83552,83553],{"class":30,"line":2668},[28,83554,2477],{"emptyLinePlaceholder":134},[28,83556,83557,83559,83561],{"class":30,"line":2676},[28,83558,78676],{"class":34},[28,83560,55666],{"class":51351},[28,83562,15649],{"class":211},[28,83564,83565,83567,83569,83571,83573],{"class":30,"line":2681},[28,83566,54822],{"class":38},[28,83568,51488],{"class":211},[28,83570,822],{"class":38},[28,83572,51543],{"class":207},[28,83574,1370],{"class":211},[28,83576,83577,83579,83581,83583,83585],{"class":30,"line":2687},[28,83578,54836],{"class":38},[28,83580,51488],{"class":211},[28,83582,822],{"class":38},[28,83584,51543],{"class":207},[28,83586,1370],{"class":211},[28,83588,83589,83591,83593,83595,83597],{"class":30,"line":2693},[28,83590,61801],{"class":38},[28,83592,51488],{"class":211},[28,83594,529],{"class":38},[28,83596,51543],{"class":207},[28,83598,1370],{"class":211},[28,83600,83601],{"class":30,"line":2698},[28,83602,2264],{"class":211},[28,83604,83605],{"class":30,"line":8025},[28,83606,2477],{"emptyLinePlaceholder":134},[28,83608,83609,83611,83613],{"class":30,"line":8049},[28,83610,78676],{"class":34},[28,83612,62355],{"class":34},[28,83614,15649],{"class":211},[28,83616,83617,83619,83621,83623,83625],{"class":30,"line":8054},[28,83618,54822],{"class":38},[28,83620,51488],{"class":211},[28,83622,1800],{"class":38},[28,83624,51543],{"class":207},[28,83626,1370],{"class":211},[28,83628,83629],{"class":30,"line":8060},[28,83630,2264],{"class":211},[28,83632,83633],{"class":30,"line":8087},[28,83634,2477],{"emptyLinePlaceholder":134},[28,83636,83637,83639,83641,83644],{"class":30,"line":8092},[28,83638,78676],{"class":34},[28,83640,62355],{"class":34},[28,83642,83643],{"class":34}," .tag",[28,83645,15649],{"class":211},[28,83647,83648,83650,83652,83654],{"class":30,"line":8098},[28,83649,55060],{"class":38},[28,83651,51488],{"class":211},[28,83653,60920],{"class":38},[28,83655,1370],{"class":211},[28,83657,83658,83660,83662,83664,83666],{"class":30,"line":8110},[28,83659,54746],{"class":38},[28,83661,51488],{"class":211},[28,83663,288],{"class":38},[28,83665,51543],{"class":207},[28,83667,1370],{"class":211},[28,83669,83670,83672,83674,83676,83678],{"class":30,"line":8122},[28,83671,54973],{"class":38},[28,83673,51488],{"class":211},[28,83675,708],{"class":38},[28,83677,51543],{"class":207},[28,83679,1370],{"class":211},[28,83681,83682,83684,83686,83688],{"class":30,"line":8134},[28,83683,57467],{"class":38},[28,83685,51488],{"class":211},[28,83687,62121],{"class":38},[28,83689,1370],{"class":211},[28,83691,83692],{"class":30,"line":9793},[28,83693,2264],{"class":211},[28,83695,83696],{"class":30,"line":9818},[28,83697,2477],{"emptyLinePlaceholder":134},[28,83699,83700,83702,83704],{"class":30,"line":9841},[28,83701,78676],{"class":34},[28,83703,78968],{"class":34},[28,83705,31517],{"class":211},[28,83707,83708,83710,83713],{"class":30,"line":9865},[28,83709,78676],{"class":34},[28,83711,83712],{"class":34}," .sub-total",[28,83714,15649],{"class":211},[28,83716,83717,83719,83721,83723,83725],{"class":30,"line":9870},[28,83718,54973],{"class":38},[28,83720,51488],{"class":211},[28,83722,860],{"class":38},[28,83724,51543],{"class":207},[28,83726,1370],{"class":211},[28,83728,83729,83731,83733,83735],{"class":30,"line":9875},[28,83730,57467],{"class":38},[28,83732,51488],{"class":211},[28,83734,78991],{"class":38},[28,83736,1370],{"class":211},[28,83738,83739,83741,83743,83745],{"class":30,"line":9880},[28,83740,61888],{"class":38},[28,83742,51488],{"class":211},[28,83744,427],{"class":38},[28,83746,1370],{"class":211},[28,83748,83749],{"class":30,"line":9889},[28,83750,2264],{"class":211},[28,83752,83753],{"class":30,"line":9894},[28,83754,2477],{"emptyLinePlaceholder":134},[28,83756,83757,83759,83761],{"class":30,"line":9900},[28,83758,78676],{"class":34},[28,83760,79008],{"class":34},[28,83762,31517],{"class":211},[28,83764,83765,83767,83770],{"class":30,"line":9921},[28,83766,78676],{"class":34},[28,83768,83769],{"class":34}," .sub-total::before",[28,83771,31517],{"class":211},[28,83773,83774,83777],{"class":30,"line":9927},[28,83775,83776],{"class":34},"    .amount::before",[28,83778,15649],{"class":211},[28,83780,83781,83783,83785,83787],{"class":30,"line":9941},[28,83782,79015],{"class":38},[28,83784,51488],{"class":211},[28,83786,79020],{"class":64},[28,83788,1370],{"class":211},[28,83790,83791,83793,83795,83797,83799],{"class":30,"line":9947},[28,83792,54973],{"class":38},[28,83794,51488],{"class":211},[28,83796,708],{"class":38},[28,83798,51543],{"class":207},[28,83800,1370],{"class":211},[28,83802,83803],{"class":30,"line":9974},[28,83804,2264],{"class":211},[28,83806,83807],{"class":30,"line":9983},[28,83808,2477],{"emptyLinePlaceholder":134},[28,83810,83811,83813,83816],{"class":30,"line":9989},[28,83812,78676],{"class":34},[28,83814,83815],{"class":34}," .spec",[28,83817,15649],{"class":211},[28,83819,83820,83822,83824,83826],{"class":30,"line":9997},[28,83821,61888],{"class":38},[28,83823,51488],{"class":211},[28,83825,288],{"class":38},[28,83827,1370],{"class":211},[28,83829,83830,83832,83834,83837],{"class":30,"line":10002},[28,83831,57467],{"class":38},[28,83833,51488],{"class":211},[28,83835,83836],{"class":38},"#888",[28,83838,1370],{"class":211},[28,83840,83841,83843,83845,83847,83849],{"class":30,"line":16681},[28,83842,54973],{"class":38},[28,83844,51488],{"class":211},[28,83846,759],{"class":38},[28,83848,51543],{"class":207},[28,83850,1370],{"class":211},[28,83852,83853,83855,83857,83859,83861],{"class":30,"line":16687},[28,83854,62051],{"class":38},[28,83856,51488],{"class":211},[28,83858,910],{"class":38},[28,83860,51543],{"class":207},[28,83862,1370],{"class":211},[28,83864,83865],{"class":30,"line":16710},[28,83866,2264],{"class":211},[28,83868,83869],{"class":30,"line":16716},[28,83870,2477],{"emptyLinePlaceholder":134},[28,83872,83873,83875,83878],{"class":30,"line":16739},[28,83874,78676],{"class":34},[28,83876,83877],{"class":34}," .count",[28,83879,15649],{"class":211},[28,83881,83882,83884,83886,83888],{"class":30,"line":16753},[28,83883,61888],{"class":38},[28,83885,51488],{"class":211},[28,83887,427],{"class":38},[28,83889,1370],{"class":211},[28,83891,83892,83894,83896,83899],{"class":30,"line":16773},[28,83893,57467],{"class":38},[28,83895,51488],{"class":211},[28,83897,83898],{"class":38},"#aaa",[28,83900,1370],{"class":211},[28,83902,83903],{"class":30,"line":16779},[28,83904,2264],{"class":211},[28,83906,83907],{"class":30,"line":16790},[28,83908,2477],{"emptyLinePlaceholder":134},[28,83910,83911,83913],{"class":30,"line":16813},[28,83912,72526],{"class":34},[28,83914,15649],{"class":211},[28,83916,83917,83919,83921,83923,83925],{"class":30,"line":16835},[28,83918,54822],{"class":38},[28,83920,51488],{"class":211},[28,83922,78625],{"class":38},[28,83924,51543],{"class":207},[28,83926,1370],{"class":211},[28,83928,83929,83931,83933,83935,83937],{"class":30,"line":16840},[28,83930,54757],{"class":38},[28,83932,51488],{"class":211},[28,83934,401],{"class":38},[28,83936,51607],{"class":38},[28,83938,1370],{"class":211},[28,83940,83941,83943,83945,83947],{"class":30,"line":16846},[28,83942,55060],{"class":38},[28,83944,51488],{"class":211},[28,83946,51528],{"class":38},[28,83948,1370],{"class":211},[28,83950,83951,83953,83955,83957],{"class":30,"line":16860},[28,83952,55071],{"class":38},[28,83954,51488],{"class":211},[28,83956,51631],{"class":38},[28,83958,1370],{"class":211},[28,83960,83961,83964,83966,83968,83970,83972,83975],{"class":30,"line":16873},[28,83962,83963],{"class":38},"      border-top",[28,83965,51488],{"class":211},[28,83967,427],{"class":38},[28,83969,51543],{"class":207},[28,83971,51572],{"class":38},[28,83973,83974],{"class":38}," #4e4e4e",[28,83976,1370],{"class":211},[28,83978,83979,83981,83983,83985,83987],{"class":30,"line":16878},[28,83980,54746],{"class":38},[28,83982,51488],{"class":211},[28,83984,910],{"class":38},[28,83986,51543],{"class":207},[28,83988,1370],{"class":211},[28,83990,83991],{"class":30,"line":16892},[28,83992,2264],{"class":211},[28,83994,83995],{"class":30,"line":16897},[28,83996,2477],{"emptyLinePlaceholder":134},[28,83998,83999,84001,84004],{"class":30,"line":16903},[28,84000,72526],{"class":34},[28,84002,84003],{"class":34}," .amount",[28,84005,15649],{"class":211},[28,84007,84008,84010,84012,84014,84016],{"class":30,"line":16908},[28,84009,54973],{"class":38},[28,84011,51488],{"class":211},[28,84013,860],{"class":38},[28,84015,51543],{"class":207},[28,84017,1370],{"class":211},[28,84019,84020,84022,84024,84026],{"class":30,"line":16922},[28,84021,57467],{"class":38},[28,84023,51488],{"class":211},[28,84025,78991],{"class":38},[28,84027,1370],{"class":211},[28,84029,84030,84032,84034,84036],{"class":30,"line":16927},[28,84031,62385],{"class":38},[28,84033,51488],{"class":211},[28,84035,51540],{"class":38},[28,84037,1370],{"class":211},[28,84039,84040,84042,84044,84046,84048],{"class":30,"line":16932},[28,84041,61801],{"class":38},[28,84043,51488],{"class":211},[28,84045,866],{"class":38},[28,84047,51543],{"class":207},[28,84049,1370],{"class":211},[28,84051,84052],{"class":30,"line":16946},[28,84053,2264],{"class":211},[28,84055,84056,84058,84060],{"class":30,"line":16958},[28,84057,52468],{"class":211},[28,84059,126],{"class":51351},[28,84061,51358],{"class":211},[28,84063,84064,84066,84068],{"class":30,"line":16963},[28,84065,51836],{"class":211},[28,84067,51385],{"class":51351},[28,84069,51358],{"class":211},[28,84071,84072],{"class":30,"line":16976},[28,84073,2477],{"emptyLinePlaceholder":134},[28,84075,84076,84078,84080],{"class":30,"line":16981},[28,84077,1120],{"class":211},[28,84079,51851],{"class":51351},[28,84081,51358],{"class":211},[28,84083,84084,84086,84088,84090,84092,84094],{"class":30,"line":16986},[28,84085,52195],{"class":211},[28,84087,51662],{"class":51351},[28,84089,53537],{"class":34},[28,84091,257],{"class":211},[28,84093,62659],{"class":64},[28,84095,51358],{"class":211},[28,84097,84098,84100,84102],{"class":30,"line":16991},[28,84099,52468],{"class":211},[28,84101,51662],{"class":51351},[28,84103,51358],{"class":211},[28,84105,84106,84108,84110,84112,84114,84116],{"class":30,"line":17004},[28,84107,52195],{"class":211},[28,84109,51662],{"class":51351},[28,84111,53537],{"class":34},[28,84113,257],{"class":211},[28,84115,62631],{"class":64},[28,84117,51358],{"class":211},[28,84119,84120,84122,84124,84127,84129,84131,84133,84136,84138,84140,84142,84144],{"class":30,"line":17009},[28,84121,51392],{"class":211},[28,84123,51662],{"class":51351},[28,84125,84126],{"class":211},">合计：\u003C",[28,84128,28],{"class":51351},[28,84130,53537],{"class":34},[28,84132,257],{"class":211},[28,84134,84135],{"class":64},"\"amount\"",[28,84137,55365],{"class":211},[28,84139,28],{"class":51351},[28,84141,55365],{"class":211},[28,84143,51662],{"class":51351},[28,84145,51358],{"class":211},[28,84147,84148,84150,84152],{"class":30,"line":32684},[28,84149,52468],{"class":211},[28,84151,51662],{"class":51351},[28,84153,51358],{"class":211},[28,84155,84156,84158,84160],{"class":30,"line":32690},[28,84157,52195],{"class":211},[28,84159,51864],{"class":51351},[28,84161,51358],{"class":211},[28,84163,84164,84166,84168,84170],{"class":30,"line":32696},[28,84165,11298],{"class":207},[28,84167,79428],{"class":38},[28,84169,13641],{"class":207},[28,84171,55498],{"class":211},[28,84173,84174],{"class":30,"line":32702},[28,84175,79437],{"class":211},[28,84177,84178,84180,84182],{"class":30,"line":32708},[28,84179,79442],{"class":211},[28,84181,79445],{"class":64},[28,84183,31517],{"class":211},[28,84185,84186,84188,84190],{"class":30,"line":32719},[28,84187,79452],{"class":211},[28,84189,79455],{"class":64},[28,84191,31517],{"class":211},[28,84193,84194,84196,84199],{"class":30,"line":32725},[28,84195,79462],{"class":211},[28,84197,84198],{"class":38},"289.9",[28,84200,31517],{"class":211},[28,84202,84203,84205,84207],{"class":30,"line":32745},[28,84204,79472],{"class":211},[28,84206,79475],{"class":64},[28,84208,31517],{"class":211},[28,84210,84211,84214,84216],{"class":30,"line":32751},[28,84212,84213],{"class":211},"        count: ",[28,84215,288],{"class":38},[28,84217,31517],{"class":211},[28,84219,84220,84223,84226],{"class":30,"line":32762},[28,84221,84222],{"class":211},"        spec: { color: ",[28,84224,84225],{"class":64},"'白色'",[28,84227,55655],{"class":211},[28,84229,84230],{"class":30,"line":32768},[28,84231,77943],{"class":211},[28,84233,84234],{"class":30,"line":32774},[28,84235,79437],{"class":211},[28,84237,84238,84240,84242],{"class":30,"line":32780},[28,84239,79442],{"class":211},[28,84241,79536],{"class":64},[28,84243,31517],{"class":211},[28,84245,84246,84248,84250],{"class":30,"line":32786},[28,84247,79452],{"class":211},[28,84249,79545],{"class":64},[28,84251,31517],{"class":211},[28,84253,84254,84256,84259],{"class":30,"line":32792},[28,84255,79462],{"class":211},[28,84257,84258],{"class":38},"109.8",[28,84260,31517],{"class":211},[28,84262,84263,84265,84267],{"class":30,"line":32798},[28,84264,79472],{"class":211},[28,84266,79563],{"class":64},[28,84268,31517],{"class":211},[28,84270,84271,84273,84275],{"class":30,"line":32804},[28,84272,84213],{"class":211},[28,84274,282],{"class":38},[28,84276,31517],{"class":211},[28,84278,84279,84282,84284,84286,84288],{"class":30,"line":32824},[28,84280,84281],{"class":211},"        spec: { size: ",[28,84283,81954],{"class":64},[28,84285,55515],{"class":211},[28,84287,81959],{"class":64},[28,84289,55655],{"class":211},[28,84291,84292],{"class":30,"line":32830},[28,84293,77943],{"class":211},[28,84295,84296],{"class":30,"line":32846},[28,84297,79437],{"class":211},[28,84299,84300,84302,84304],{"class":30,"line":32852},[28,84301,79442],{"class":211},[28,84303,79580],{"class":64},[28,84305,31517],{"class":211},[28,84307,84308,84310,84312],{"class":30,"line":32866},[28,84309,79452],{"class":211},[28,84311,79589],{"class":64},[28,84313,31517],{"class":211},[28,84315,84316,84318,84321],{"class":30,"line":32872},[28,84317,79462],{"class":211},[28,84319,84320],{"class":38},"488",[28,84322,31517],{"class":211},[28,84324,84325,84327,84329],{"class":30,"line":32887},[28,84326,79472],{"class":211},[28,84328,79607],{"class":64},[28,84330,31517],{"class":211},[28,84332,84333,84335,84337],{"class":30,"line":32893},[28,84334,84213],{"class":211},[28,84336,427],{"class":38},[28,84338,31517],{"class":211},[28,84340,84341,84343,84346,84349,84352],{"class":30,"line":32902},[28,84342,84222],{"class":211},[28,84344,84345],{"class":64},"'青色'",[28,84347,84348],{"class":211},", sum: ",[28,84350,84351],{"class":64},"'一大四小'",[28,84353,55655],{"class":211},[28,84355,84356],{"class":30,"line":32908},[28,84357,77943],{"class":211},[28,84359,84360],{"class":30,"line":32917},[28,84361,79437],{"class":211},[28,84363,84364,84366,84368],{"class":30,"line":32923},[28,84365,79442],{"class":211},[28,84367,79624],{"class":64},[28,84369,31517],{"class":211},[28,84371,84372,84374,84376],{"class":30,"line":32929},[28,84373,79452],{"class":211},[28,84375,79633],{"class":64},[28,84377,31517],{"class":211},[28,84379,84380,84382,84385],{"class":30,"line":32938},[28,84381,79462],{"class":211},[28,84383,84384],{"class":38},"139",[28,84386,31517],{"class":211},[28,84388,84389,84391,84393],{"class":30,"line":32944},[28,84390,79472],{"class":211},[28,84392,79651],{"class":64},[28,84394,31517],{"class":211},[28,84396,84397,84399,84401],{"class":30,"line":32955},[28,84398,84213],{"class":211},[28,84400,427],{"class":38},[28,84402,31517],{"class":211},[28,84404,84405,84407,84410,84412,84415],{"class":30,"line":32961},[28,84406,84281],{"class":211},[28,84408,84409],{"class":64},"'小号'",[28,84411,55515],{"class":211},[28,84413,84414],{"class":64},"'紫色'",[28,84416,55521],{"class":211},[28,84418,84419,84422],{"class":30,"line":32980},[28,84420,84421],{"class":211},"        gift: ",[28,84423,84424],{"class":64},"'50g茶叶,清洗球'\n",[28,84426,84427],{"class":30,"line":32986},[28,84428,52449],{"class":211},[28,84430,84431],{"class":30,"line":32997},[28,84432,53160],{"class":211},[28,84434,84435],{"class":30,"line":33003},[28,84436,84437],{"class":269},"    \u002F\u002F  1.根据数据渲染页面\n",[28,84439,84440,84442,84444,84446,84448,84450,84452,84454,84456,84458,84460,84462],{"class":30,"line":33023},[28,84441,52458],{"class":211},[28,84443,54450],{"class":34},[28,84445,212],{"class":211},[28,84447,79952],{"class":64},[28,84449,74300],{"class":211},[28,84451,257],{"class":207},[28,84453,80099],{"class":211},[28,84455,74095],{"class":34},[28,84457,212],{"class":211},[28,84459,79846],{"class":5293},[28,84461,79849],{"class":207},[28,84463,15649],{"class":211},[28,84465,84466],{"class":30,"line":33039},[28,84467,84468],{"class":269},"      \u002F\u002F 对象解构\n",[28,84470,84471,84473,84475,84477,84479,84481,84483,84486,84488,84490,84492,84495,84497,84500,84502,84504],{"class":30,"line":33045},[28,84472,58279],{"class":207},[28,84474,79858],{"class":211},[28,84476,79871],{"class":38},[28,84478,12512],{"class":211},[28,84480,79861],{"class":38},[28,84482,12512],{"class":211},[28,84484,84485],{"class":38},"count",[28,84487,12512],{"class":211},[28,84489,79866],{"class":38},[28,84491,12512],{"class":211},[28,84493,84494],{"class":38},"spec",[28,84496,12512],{"class":211},[28,84498,84499],{"class":38},"gift",[28,84501,79874],{"class":211},[28,84503,257],{"class":207},[28,84505,79879],{"class":211},[28,84507,84508],{"class":30,"line":33059},[28,84509,84510],{"class":269},"      \u002F\u002F 规格文字模块处理\n",[28,84512,84513,84515,84518,84520,84522,84524,84526,84528,84530,84532],{"class":30,"line":33065},[28,84514,58279],{"class":207},[28,84516,84517],{"class":38}," text",[28,84519,13641],{"class":207},[28,84521,81989],{"class":211},[28,84523,81992],{"class":34},[28,84525,81995],{"class":211},[28,84527,74274],{"class":34},[28,84529,212],{"class":211},[28,84531,82002],{"class":64},[28,84533,218],{"class":211},[28,84535,84536],{"class":30,"line":33071},[28,84537,84538],{"class":269},"      \u002F\u002F 处理赠品模块\n",[28,84540,84541,84543,84545,84547,84550,84552,84554,84556,84558,84561,84563,84565,84567,84569,84571,84574,84576,84579,84581,84583,84585,84587,84589,84591],{"class":30,"line":33082},[28,84542,58279],{"class":207},[28,84544,73970],{"class":38},[28,84546,13641],{"class":207},[28,84548,84549],{"class":211}," gift ",[28,84551,1196],{"class":207},[28,84553,83163],{"class":211},[28,84555,83166],{"class":34},[28,84557,212],{"class":211},[28,84559,84560],{"class":64},"','",[28,84562,30877],{"class":211},[28,84564,74095],{"class":34},[28,84566,212],{"class":211},[28,84568,79846],{"class":5293},[28,84570,79849],{"class":207},[28,84572,84573],{"class":64}," `\u003Cspan class=\"tag\">【赠品】${",[28,84575,79846],{"class":211},[28,84577,84578],{"class":64},"}\u003C\u002Fspan>`",[28,84580,30877],{"class":211},[28,84582,74274],{"class":34},[28,84584,212],{"class":211},[28,84586,74279],{"class":64},[28,84588,13791],{"class":211},[28,84590,1069],{"class":207},[28,84592,70155],{"class":64},[28,84594,84595],{"class":30,"line":33088},[28,84596,84597],{"class":269},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[28,84599,84600,84602,84605,84607,84610,84612,84614,84616,84619,84621,84623,84625,84628,84630,84632],{"class":30,"line":33094},[28,84601,58279],{"class":207},[28,84603,84604],{"class":38}," subtotal",[28,84606,13641],{"class":207},[28,84608,84609],{"class":211}," ((price ",[28,84611,665],{"class":207},[28,84613,5831],{"class":38},[28,84615,6595],{"class":207},[28,84617,84618],{"class":211}," count) ",[28,84620,794],{"class":207},[28,84622,5831],{"class":38},[28,84624,30877],{"class":211},[28,84626,84627],{"class":34},"toFixed",[28,84629,212],{"class":211},[28,84631,288],{"class":38},[28,84633,218],{"class":211},[28,84635,84636],{"class":30,"line":33104},[28,84637,2477],{"emptyLinePlaceholder":134},[28,84639,84640,84642],{"class":30,"line":33110},[28,84641,74033],{"class":207},[28,84643,70219],{"class":64},[28,84645,84646],{"class":30,"line":33121},[28,84647,84648],{"class":64},"        \u003Cdiv class=\"item\">\n",[28,84650,84651,84654,84656],{"class":30,"line":33127},[28,84652,84653],{"class":64},"          \u003Cimg src=\"${",[28,84655,79871],{"class":211},[28,84657,79903],{"class":64},[28,84659,84660,84663,84665,84668,84670],{"class":30,"line":33137},[28,84661,84662],{"class":64},"          \u003Cp class=\"name\">${",[28,84664,79861],{"class":211},[28,84666,84667],{"class":64},"}${",[28,84669,1379],{"class":211},[28,84671,79913],{"class":64},[28,84673,84674,84677,84679],{"class":30,"line":33142},[28,84675,84676],{"class":64},"          \u003Cp class=\"spec\">${",[28,84678,5264],{"class":211},[28,84680,79913],{"class":64},[28,84682,84683,84686,84688,84690,84692,84694,84696,84698],{"class":30,"line":33148},[28,84684,84685],{"class":64},"          \u003Cp class=\"price\">${",[28,84687,79866],{"class":211},[28,84689,768],{"class":64},[28,84691,84627],{"class":34},[28,84693,212],{"class":64},[28,84695,288],{"class":38},[28,84697,639],{"class":64},[28,84699,79913],{"class":64},[28,84701,84702,84705,84707],{"class":30,"line":33197},[28,84703,84704],{"class":64},"          \u003Cp class=\"count\">x${",[28,84706,84485],{"class":211},[28,84708,79913],{"class":64},[28,84710,84711,84714,84717],{"class":30,"line":33244},[28,84712,84713],{"class":64},"          \u003Cp class=\"sub-total\">${",[28,84715,84716],{"class":211},"subtotal",[28,84718,79913],{"class":64},[28,84720,84721],{"class":30,"line":33249},[28,84722,84723],{"class":64},"        \u003C\u002Fdiv> \n",[28,84725,84726],{"class":30,"line":33255},[28,84727,84728],{"class":64},"             `\n",[28,84730,84731,84734,84736,84738,84740],{"class":30,"line":33274},[28,84732,84733],{"class":211},"    }).",[28,84735,74274],{"class":34},[28,84737,212],{"class":211},[28,84739,74279],{"class":64},[28,84741,218],{"class":211},[28,84743,84744],{"class":30,"line":33280},[28,84745,84746],{"class":269},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[28,84748,84749,84751,84753,84755,84757,84760,84762,84765,84767,84769,84771,84774,84777,84779,84782,84784,84786,84788,84791,84793,84795,84797,84799],{"class":30,"line":33300},[28,84750,11298],{"class":207},[28,84752,62836],{"class":38},[28,84754,13641],{"class":207},[28,84756,80099],{"class":211},[28,84758,84759],{"class":34},"reduce",[28,84761,2453],{"class":211},[28,84763,84764],{"class":5293},"prev",[28,84766,12512],{"class":211},[28,84768,79846],{"class":5293},[28,84770,13791],{"class":211},[28,84772,84773],{"class":207},"=>",[28,84775,84776],{"class":211}," prev ",[28,84778,691],{"class":207},[28,84780,84781],{"class":211}," (item.price ",[28,84783,665],{"class":207},[28,84785,5831],{"class":38},[28,84787,6595],{"class":207},[28,84789,84790],{"class":211}," item.count) ",[28,84792,794],{"class":207},[28,84794,5831],{"class":38},[28,84796,12512],{"class":211},[28,84798,401],{"class":38},[28,84800,218],{"class":211},[28,84802,84803,84805,84807,84809,84812,84814,84816,84819,84821,84823,84825],{"class":30,"line":33306},[28,84804,52458],{"class":211},[28,84806,54450],{"class":34},[28,84808,212],{"class":211},[28,84810,84811],{"class":64},"'.amount'",[28,84813,74300],{"class":211},[28,84815,257],{"class":207},[28,84817,84818],{"class":211}," total.",[28,84820,84627],{"class":34},[28,84822,212],{"class":211},[28,84824,288],{"class":38},[28,84826,218],{"class":211},[28,84828,84829,84831,84833],{"class":30,"line":33312},[28,84830,52468],{"class":211},[28,84832,51864],{"class":51351},[28,84834,51358],{"class":211},[28,84836,84837,84839,84841],{"class":30,"line":33322},[28,84838,51836],{"class":211},[28,84840,51851],{"class":51351},[28,84842,51358],{"class":211},[28,84844,84845],{"class":30,"line":33327},[28,84846,2477],{"emptyLinePlaceholder":134},[28,84848,84849,84851,84853],{"class":30,"line":33333},[28,84850,51836],{"class":211},[28,84852,50686],{"class":51351},[28,84854,51358],{"class":211},[149,84856,84858],{"id":84857},"_411-编程思想","4.11 编程思想",[177,84860,84862],{"id":84861},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84864,84865,84868],{},[359,84866,84867],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84870,84871],{},"调用就可以了",[14,84873,84874],{},[1540,84875],{"alt":23,"src":84876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[177,84878,84880],{"id":84879},"_4112-面向对象","4.11.2 面向对象",[14,84882,84883],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84885,84886],{},[1540,84887],{"alt":23,"src":84888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84890,84891],{},"面向对象的特性：",[116,84893,84894,84897,84900],{},[119,84895,84896],{},"封装性",[119,84898,84899],{},"继承性",[119,84901,84902],{},"多态性",[177,84904,84906],{"id":84905},"_4113-两者比较","4.11.3 两者比较",[14,84908,84909],{},[1540,84910],{"alt":23,"src":84911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[149,84913,84915],{"id":84914},"_412-构造函数回顾","4.12 构造函数回顾",[14,84917,84918],{},[1540,84919],{"alt":23,"src":84920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84922,84923],{},[1540,84924],{"alt":23,"src":84925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84927,84928],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84930,84931],{},[1540,84932],{"alt":23,"src":84933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[149,84935,84937],{"id":84936},"_413-原型","4.13 原型",[177,84939,84941],{"id":84940},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84943,84944],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84946,84947],{},[1540,84948],{"alt":23,"src":84949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84951,84952],{},[1540,84953],{"alt":23,"src":84954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84956,84957],{},"原型是构造函数的属性，它也是一个对象",[14,84959,84960],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84962,84963],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[18,84965,84967],{"className":53118,"code":84966,"language":53120,"meta":23,"style":23},"\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",[25,84968,84969,84977,84982,84990,84995,85000,85005,85010,85015,85019,85023,85027,85032,85037,85041,85046,85051,85056,85061,85066,85070,85078],{"__ignoreMap":23},[28,84970,84971,84973,84975],{"class":30,"line":31},[28,84972,1120],{"class":211},[28,84974,51851],{"class":51351},[28,84976,51358],{"class":211},[28,84978,84979],{"class":30,"line":42},[28,84980,84981],{"class":269},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[28,84983,84984,84986,84988],{"class":30,"line":50},[28,84985,52195],{"class":211},[28,84987,51864],{"class":51351},[28,84989,51358],{"class":211},[28,84991,84992],{"class":30,"line":58},[28,84993,84994],{"class":211},"    function Star(uname, age) {\n",[28,84996,84997],{"class":30,"line":70},[28,84998,84999],{"class":211},"      this.uname = uname,\n",[28,85001,85002],{"class":30,"line":78},[28,85003,85004],{"class":211},"        this.age = age\n",[28,85006,85007],{"class":30,"line":86},[28,85008,85009],{"class":211},"      \u002F\u002F this.sing = function () {\n",[28,85011,85012],{"class":30,"line":97},[28,85013,85014],{"class":211},"      \u002F\u002F   console.log('唱歌')\n",[28,85016,85017],{"class":30,"line":108},[28,85018,2477],{"emptyLinePlaceholder":134},[28,85020,85021],{"class":30,"line":1407},[28,85022,60088],{"class":211},[28,85024,85025],{"class":30,"line":1690},[28,85026,2264],{"class":211},[28,85028,85029],{"class":30,"line":1695},[28,85030,85031],{"class":211},"    Star.prototype.sing = function () {\n",[28,85033,85034],{"class":30,"line":1701},[28,85035,85036],{"class":211},"      console.log('唱歌')\n",[28,85038,85039],{"class":30,"line":1706},[28,85040,2264],{"class":211},[28,85042,85043],{"class":30,"line":1720},[28,85044,85045],{"class":211},"    \u002F\u002F console.dir(Star.prototype)\n",[28,85047,85048],{"class":30,"line":1725},[28,85049,85050],{"class":211},"    const pink = new Star('pink', 18)\n",[28,85052,85053],{"class":30,"line":1731},[28,85054,85055],{"class":211},"    const red = new Star('red', 20)\n",[28,85057,85058],{"class":30,"line":1752},[28,85059,85060],{"class":211},"    pink.sing()\n",[28,85062,85063],{"class":30,"line":1757},[28,85064,85065],{"class":211},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[28,85067,85068],{"class":30,"line":1771},[28,85069,2477],{"emptyLinePlaceholder":134},[28,85071,85072,85074,85076],{"class":30,"line":1776},[28,85073,52468],{"class":211},[28,85075,51864],{"class":51351},[28,85077,51358],{"class":211},[28,85079,85080,85082,85084],{"class":30,"line":1805},[28,85081,51836],{"class":211},[28,85083,51851],{"class":51351},[28,85085,51358],{"class":211},[14,85087,85088],{},[1540,85089],{"alt":23,"src":85090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[18,85092,85094],{"className":53118,"code":85093,"language":53120,"meta":23,"style":23},"\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",[25,85095,85096,85104,85112,85117,85122,85127,85132,85136,85141,85146,85151,85155,85160,85164,85168,85173,85177,85185],{"__ignoreMap":23},[28,85097,85098,85100,85102],{"class":30,"line":31},[28,85099,1120],{"class":211},[28,85101,51851],{"class":51351},[28,85103,51358],{"class":211},[28,85105,85106,85108,85110],{"class":30,"line":42},[28,85107,52195],{"class":211},[28,85109,51864],{"class":51351},[28,85111,51358],{"class":211},[28,85113,85114],{"class":30,"line":50},[28,85115,85116],{"class":211},"    let that\n",[28,85118,85119],{"class":30,"line":58},[28,85120,85121],{"class":211},"    function Star(uname) {\n",[28,85123,85124],{"class":30,"line":70},[28,85125,85126],{"class":211},"      this.uname = uname\n",[28,85128,85129],{"class":30,"line":78},[28,85130,85131],{"class":211},"      that = this\n",[28,85133,85134],{"class":30,"line":86},[28,85135,2264],{"class":211},[28,85137,85138],{"class":30,"line":97},[28,85139,85140],{"class":211},"    \u002F\u002F 实例对象是 ldh\n",[28,85142,85143],{"class":30,"line":108},[28,85144,85145],{"class":211},"    const ldh = new Star('刘德华')\n",[28,85147,85148],{"class":30,"line":1407},[28,85149,85150],{"class":211},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[28,85152,85153],{"class":30,"line":1690},[28,85154,2477],{"emptyLinePlaceholder":134},[28,85156,85157],{"class":30,"line":1695},[28,85158,85159],{"class":211},"    Star.sing = function () {\n",[28,85161,85162],{"class":30,"line":1701},[28,85163,85036],{"class":211},[28,85165,85166],{"class":30,"line":1706},[28,85167,2264],{"class":211},[28,85169,85170],{"class":30,"line":1720},[28,85171,85172],{"class":211},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[28,85174,85175],{"class":30,"line":1725},[28,85176,2477],{"emptyLinePlaceholder":134},[28,85178,85179,85181,85183],{"class":30,"line":1731},[28,85180,52468],{"class":211},[28,85182,51864],{"class":51351},[28,85184,51358],{"class":211},[28,85186,85187,85189,85191],{"class":30,"line":1752},[28,85188,51836],{"class":211},[28,85190,51851],{"class":51351},[28,85192,51358],{"class":211},[14,85194,85195],{},"构造函数的this指向的是实例对象；",[14,85197,85198],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[177,85200,85202],{"id":85201},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85204,85205],{},[1540,85206],{"alt":23,"src":85207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[18,85209,85211],{"className":53118,"code":85210,"language":53120,"meta":23,"style":23},"\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",[25,85212,85213,85221,85229,85234,85239,85244,85249,85254,85259,85264,85269,85274,85279,85283,85288,85293,85298,85303,85307,85312,85317,85322,85327,85331,85336,85341,85346,85351,85355,85360,85364,85372],{"__ignoreMap":23},[28,85214,85215,85217,85219],{"class":30,"line":31},[28,85216,1120],{"class":211},[28,85218,51851],{"class":51351},[28,85220,51358],{"class":211},[28,85222,85223,85225,85227],{"class":30,"line":42},[28,85224,52195],{"class":211},[28,85226,51864],{"class":51351},[28,85228,51358],{"class":211},[28,85230,85231],{"class":30,"line":50},[28,85232,85233],{"class":211},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[28,85235,85236],{"class":30,"line":58},[28,85237,85238],{"class":211},"    const arr = [1, 2, 3]\n",[28,85240,85241],{"class":30,"line":70},[28,85242,85243],{"class":211},"    \u002F\u002F 自己定义数组的扩展方法\n",[28,85245,85246],{"class":30,"line":78},[28,85247,85248],{"class":211},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[28,85250,85251],{"class":30,"line":86},[28,85252,85253],{"class":211},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[28,85255,85256],{"class":30,"line":97},[28,85257,85258],{"class":211},"    \u002F\u002F ①.最大值\n",[28,85260,85261],{"class":30,"line":108},[28,85262,85263],{"class":211},"    Array.prototype.max = function () {\n",[28,85265,85266],{"class":30,"line":1407},[28,85267,85268],{"class":211},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[28,85270,85271],{"class":30,"line":1690},[28,85272,85273],{"class":211},"      return Math.max(...this)\n",[28,85275,85276],{"class":30,"line":1695},[28,85277,85278],{"class":211},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[28,85280,85281],{"class":30,"line":1701},[28,85282,2264],{"class":211},[28,85284,85285],{"class":30,"line":1706},[28,85286,85287],{"class":211},"    console.log(arr.max())\n",[28,85289,85290],{"class":30,"line":1720},[28,85291,85292],{"class":211},"    \u002F\u002F ②最小值\n",[28,85294,85295],{"class":30,"line":1725},[28,85296,85297],{"class":211},"    Array.prototype.min = function () {\n",[28,85299,85300],{"class":30,"line":1731},[28,85301,85302],{"class":211},"      return Math.min(...this)\n",[28,85304,85305],{"class":30,"line":1752},[28,85306,2264],{"class":211},[28,85308,85309],{"class":30,"line":1757},[28,85310,85311],{"class":211},"    console.log(arr.min())\n",[28,85313,85314],{"class":30,"line":1771},[28,85315,85316],{"class":211},"    \u002F\u002F③求和\n",[28,85318,85319],{"class":30,"line":1776},[28,85320,85321],{"class":211},"    Array.prototype.sum = function () {\n",[28,85323,85324],{"class":30,"line":1805},[28,85325,85326],{"class":211},"      return this.reduce((prev, current) => prev + current, 0)\n",[28,85328,85329],{"class":30,"line":1810},[28,85330,2264],{"class":211},[28,85332,85333],{"class":30,"line":1827},[28,85334,85335],{"class":211},"    console.log(arr.sum())\n",[28,85337,85338],{"class":30,"line":1832},[28,85339,85340],{"class":211},"    \u002F\u002F ③排序\n",[28,85342,85343],{"class":30,"line":1837},[28,85344,85345],{"class":211},"    Array.prototype.rever = function () {\n",[28,85347,85348],{"class":30,"line":1842},[28,85349,85350],{"class":211},"      return this.reverse()\n",[28,85352,85353],{"class":30,"line":1856},[28,85354,2264],{"class":211},[28,85356,85357],{"class":30,"line":1861},[28,85358,85359],{"class":211},"    console.log(arr.rever())\n",[28,85361,85362],{"class":30,"line":2654},[28,85363,2477],{"emptyLinePlaceholder":134},[28,85365,85366,85368,85370],{"class":30,"line":2668},[28,85367,52468],{"class":211},[28,85369,51864],{"class":51351},[28,85371,51358],{"class":211},[28,85373,85374,85376,85378],{"class":30,"line":2676},[28,85375,51836],{"class":211},[28,85377,51851],{"class":51351},[28,85379,51358],{"class":211},[14,85381,85382],{},[1540,85383],{"alt":23,"src":85384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[177,85386,85388],{"id":85387},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85390,85391],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85393,85394],{},[1540,85395],{"alt":23,"src":85396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[18,85398,85400],{"className":53118,"code":85399,"language":53120,"meta":23,"style":23},"\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",[25,85401,85402,85410,85418,85423,85428,85432,85437,85442,85447,85455],{"__ignoreMap":23},[28,85403,85404,85406,85408],{"class":30,"line":31},[28,85405,1120],{"class":211},[28,85407,51851],{"class":51351},[28,85409,51358],{"class":211},[28,85411,85412,85414,85416],{"class":30,"line":42},[28,85413,52195],{"class":211},[28,85415,51864],{"class":51351},[28,85417,51358],{"class":211},[28,85419,85420],{"class":30,"line":50},[28,85421,85422],{"class":211},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[28,85424,85425],{"class":30,"line":58},[28,85426,85427],{"class":211},"    function Star() {\n",[28,85429,85430],{"class":30,"line":70},[28,85431,2264],{"class":211},[28,85433,85434],{"class":30,"line":78},[28,85435,85436],{"class":211},"    const ldh = new Star()\n",[28,85438,85439],{"class":30,"line":86},[28,85440,85441],{"class":211},"    console.log(Star.prototype)\n",[28,85443,85444],{"class":30,"line":97},[28,85445,85446],{"class":211},"    console.log(Star.prototype.constructor === Star)\n",[28,85448,85449,85451,85453],{"class":30,"line":108},[28,85450,52468],{"class":211},[28,85452,51864],{"class":51351},[28,85454,51358],{"class":211},[28,85456,85457,85459,85461],{"class":30,"line":1407},[28,85458,51836],{"class":211},[28,85460,51851],{"class":51351},[28,85462,51358],{"class":211},[14,85464,85465],{},[1540,85466],{"alt":23,"src":85467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85469,85470],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[18,85472,85474],{"className":53118,"code":85473,"language":53120,"meta":23,"style":23},"  \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",[25,85475,85476,85484,85488,85492,85496,85501,85506,85511,85515,85520,85525,85530,85535,85540,85545,85549,85553,85558,85563,85568,85572,85577,85582,85586,85590,85594],{"__ignoreMap":23},[28,85477,85478,85480,85482],{"class":30,"line":31},[28,85479,52195],{"class":211},[28,85481,51864],{"class":51351},[28,85483,51358],{"class":211},[28,85485,85486],{"class":30,"line":42},[28,85487,85422],{"class":211},[28,85489,85490],{"class":30,"line":50},[28,85491,85427],{"class":211},[28,85493,85494],{"class":30,"line":58},[28,85495,2264],{"class":211},[28,85497,85498],{"class":30,"line":70},[28,85499,85500],{"class":211},"    \u002F\u002F const ldh = new Star()\n",[28,85502,85503],{"class":30,"line":78},[28,85504,85505],{"class":211},"    \u002F\u002F console.log(Star.prototype)\n",[28,85507,85508],{"class":30,"line":86},[28,85509,85510],{"class":211},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[28,85512,85513],{"class":30,"line":97},[28,85514,2477],{"emptyLinePlaceholder":134},[28,85516,85517],{"class":30,"line":108},[28,85518,85519],{"class":211},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[28,85521,85522],{"class":30,"line":1407},[28,85523,85524],{"class":211},"    \u002F\u002F Star.prototype.sing = function () {\n",[28,85526,85527],{"class":30,"line":1690},[28,85528,85529],{"class":211},"    \u002F\u002F   console.log('唱歌')\n",[28,85531,85532],{"class":30,"line":1695},[28,85533,85534],{"class":211},"    \u002F\u002F }\n",[28,85536,85537],{"class":30,"line":1701},[28,85538,85539],{"class":211},"    \u002F\u002F Star.prototype.dance = function () {\n",[28,85541,85542],{"class":30,"line":1706},[28,85543,85544],{"class":211},"    \u002F\u002F   console.log('跳舞')\n",[28,85546,85547],{"class":30,"line":1720},[28,85548,85534],{"class":211},[28,85550,85551],{"class":30,"line":1725},[28,85552,85441],{"class":211},[28,85554,85555],{"class":30,"line":1731},[28,85556,85557],{"class":211},"    Star.prototype = {\n",[28,85559,85560],{"class":30,"line":1752},[28,85561,85562],{"class":211},"      sing: function () {\n",[28,85564,85565],{"class":30,"line":1757},[28,85566,85567],{"class":211},"        console.log('唱歌')\n",[28,85569,85570],{"class":30,"line":1771},[28,85571,77943],{"class":211},[28,85573,85574],{"class":30,"line":1776},[28,85575,85576],{"class":211},"      dance: function () {\n",[28,85578,85579],{"class":30,"line":1805},[28,85580,85581],{"class":211},"        console.log('跳舞')\n",[28,85583,85584],{"class":30,"line":1810},[28,85585,52449],{"class":211},[28,85587,85588],{"class":30,"line":1827},[28,85589,2264],{"class":211},[28,85591,85592],{"class":30,"line":1832},[28,85593,85441],{"class":211},[28,85595,85596,85598,85600],{"class":30,"line":1837},[28,85597,52468],{"class":211},[28,85599,51864],{"class":51351},[28,85601,51358],{"class":211},[14,85603,85604],{},"进行输出结果后会发现：",[14,85606,85607],{},[1540,85608],{"alt":23,"src":85609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85611,85612],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85614,85615],{},"所以，要重新指回创造这个原型对象的构造函数",[18,85617,85619],{"className":71264,"code":85618,"language":71266,"meta":23,"style":23},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[25,85620,85621,85635,85640,85645,85656,85669,85674,85685,85699,85703],{"__ignoreMap":23},[28,85622,85623,85626,85628,85631,85633],{"class":30,"line":31},[28,85624,85625],{"class":38},"Star",[28,85627,768],{"class":211},[28,85629,85630],{"class":38},"prototype",[28,85632,13641],{"class":207},[28,85634,15649],{"class":211},[28,85636,85637],{"class":30,"line":42},[28,85638,85639],{"class":269},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[28,85641,85642],{"class":30,"line":50},[28,85643,85644],{"class":211},"  constructor: Star,\n",[28,85646,85647,85650,85652,85654],{"class":30,"line":58},[28,85648,85649],{"class":34},"  sing",[28,85651,51488],{"class":211},[28,85653,54500],{"class":207},[28,85655,54503],{"class":211},[28,85657,85658,85660,85662,85664,85667],{"class":30,"line":70},[28,85659,73804],{"class":211},[28,85661,58298],{"class":34},[28,85663,212],{"class":211},[28,85665,85666],{"class":64},"'唱歌'",[28,85668,218],{"class":211},[28,85670,85671],{"class":30,"line":78},[28,85672,85673],{"class":211},"   },\n",[28,85675,85676,85679,85681,85683],{"class":30,"line":86},[28,85677,85678],{"class":34},"   dance",[28,85680,51488],{"class":211},[28,85682,54500],{"class":207},[28,85684,54503],{"class":211},[28,85686,85687,85690,85692,85694,85697],{"class":30,"line":97},[28,85688,85689],{"class":211},"     console.",[28,85691,58298],{"class":34},[28,85693,212],{"class":211},[28,85695,85696],{"class":64},"'跳舞'",[28,85698,218],{"class":211},[28,85700,85701],{"class":30,"line":108},[28,85702,4386],{"class":211},[28,85704,85705],{"class":30,"line":1407},[28,85706,1643],{"class":211},[14,85708,85709],{},[1540,85710],{"alt":23,"src":85711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85713,85714],{},"总结1：",[14,85716,85717],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85719,85720],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85722,85723],{},"constructor指的是他的来源",[14,85725,85726],{},[1540,85727],{"alt":23,"src":85728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85730,85731],{},[1540,85732],{"alt":23,"src":85733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85735,85736],{},"总结2：",[14,85738,85739],{},[1540,85740],{"alt":23,"src":85741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85743,85744],{},[1540,85745],{"alt":23,"src":85746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85748,85749],{},[1540,85750],{"alt":23,"src":85751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[177,85753,85755],{"id":85754},"_4134-对象原型","4.13.4 对象原型",[14,85757,85758],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85760,85761],{},"对象原型就是__proto__这个属性",[14,85763,85764],{},[1540,85765],{"alt":23,"src":85766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85768,85769],{},[1540,85770],{"alt":23,"src":85771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85773,85774],{},[1540,85775],{"alt":23,"src":85776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85778,85779],{},[1540,85780],{"alt":23,"src":85781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[18,85783,85785],{"className":53118,"code":85784,"language":53120,"meta":23,"style":23},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[25,85786,85787,85795,85803,85807,85811,85815,85820,85828],{"__ignoreMap":23},[28,85788,85789,85791,85793],{"class":30,"line":31},[28,85790,1120],{"class":211},[28,85792,51851],{"class":51351},[28,85794,51358],{"class":211},[28,85796,85797,85799,85801],{"class":30,"line":42},[28,85798,52195],{"class":211},[28,85800,51864],{"class":51351},[28,85802,51358],{"class":211},[28,85804,85805],{"class":30,"line":50},[28,85806,85427],{"class":211},[28,85808,85809],{"class":30,"line":58},[28,85810,2264],{"class":211},[28,85812,85813],{"class":30,"line":70},[28,85814,85436],{"class":211},[28,85816,85817],{"class":30,"line":78},[28,85818,85819],{"class":211},"    console.log(ldh)\n",[28,85821,85822,85824,85826],{"class":30,"line":86},[28,85823,52468],{"class":211},[28,85825,51864],{"class":51351},[28,85827,51358],{"class":211},[28,85829,85830,85832,85834],{"class":30,"line":97},[28,85831,51836],{"class":211},[28,85833,51851],{"class":51351},[28,85835,51358],{"class":211},[14,85837,85838],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85840,85841],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85843,85844],{},[1540,85845],{"alt":23,"src":85846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85848,85849],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85851,85852],{},"对象原型指向原型对象",[14,85854,85855],{},[1540,85856],{"alt":23,"src":85857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85859,85860],{},[1540,85861],{"alt":23,"src":85862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85864,85865],{},[1540,85866],{"alt":23,"src":85867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[177,85869,85871],{"id":85870},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85873,85874],{},[1540,85875],{"alt":23,"src":85876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[161,85878,85879,85882,85885,85888],{},[119,85880,85881],{},"构造函数通过new的形式实例化得到实例对象",[119,85883,85884],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[119,85886,85887],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[119,85889,85890],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85892,85893],{},[1540,85894],{"alt":23,"src":85895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85897,85898],{},"题目梳理：",[14,85900,85901],{},[1540,85902],{"alt":23,"src":85903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[177,85905,85907],{"id":85906},"_4136-原型继承","4.13.6 原型继承",[14,85909,85910],{},[1540,85911],{"alt":23,"src":85912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85914,85915],{},[1540,85916],{"alt":23,"src":85917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85919,85920],{},[1540,85921],{"alt":23,"src":85922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85924,85925],{},[1540,85926],{"alt":23,"src":85927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85929,85930],{},[1540,85931],{"alt":23,"src":85932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85934,85935],{},[1540,85936],{"alt":23,"src":85937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85939,85940],{},[1540,85941],{"alt":23,"src":85942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85944,85945],{},[1540,85946],{"alt":23,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85949,85950],{},"回顾：构造函数每次new得到对象都是不同的",[177,85952,85954],{"id":85953},"_4137-原型链","4.13.7 原型链",[14,85956,85957],{},[1540,85958],{"alt":23,"src":85959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85961,85962],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85964,85965],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85967,85968],{},"大哥是Object",[14,85970,85971],{},[1540,85972],{"alt":23,"src":85973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85975,85976],{},[1540,85977],{"alt":23,"src":85978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85980,85981],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85983,85984],{},"万物皆对象",[177,85986,85988],{"id":85987},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85990,85991],{},"模态框",[14,85993,85994],{},"以后遇见这个效果直接使用这个就行",[14,85996,85997],{},[1540,85998],{"alt":23,"src":85999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,86001,86002],{},[1540,86003],{"alt":23,"src":86004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,86006,86007],{},[1540,86008],{"alt":23,"src":86009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,86011,86012],{},[1540,86013],{"alt":23,"src":86014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,86016,86017],{},"补充知识点：",[161,86019,86020],{},[119,86021,86022],{},"append()",[14,86024,86025],{},[1540,86026],{"alt":23,"src":86027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[18,86029,86031],{"className":50684,"code":86030,"language":50686,"meta":23,"style":23},"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",[25,86032,86033,86038,86043,86048,86052,86056,86060,86065,86070,86075,86079],{"__ignoreMap":23},[28,86034,86035],{"class":30,"line":31},[28,86036,86037],{"class":211},"append(param1)\n",[28,86039,86040],{"class":30,"line":42},[28,86041,86042],{"class":211},"append(param1, param2)\n",[28,86044,86045],{"class":30,"line":50},[28,86046,86047],{"class":211},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[28,86049,86050],{"class":30,"line":58},[28,86051,2477],{"emptyLinePlaceholder":134},[28,86053,86054],{"class":30,"line":70},[28,86055,2477],{"emptyLinePlaceholder":134},[28,86057,86058],{"class":30,"line":78},[28,86059,2477],{"emptyLinePlaceholder":134},[28,86061,86062],{"class":30,"line":86},[28,86063,86064],{"class":211},"let div = document.createElement(\"div\");\n",[28,86066,86067],{"class":30,"line":97},[28,86068,86069],{"class":211},"let p = document.createElement(\"p\");\n",[28,86071,86072],{"class":30,"line":108},[28,86073,86074],{"class":211},"div.append(p);\n",[28,86076,86077],{"class":30,"line":1407},[28,86078,2477],{"emptyLinePlaceholder":134},[28,86080,86081,86084,86086],{"class":30,"line":1690},[28,86082,86083],{"class":211},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[28,86085,14],{"class":51351},[28,86087,86088],{"class":211},"> ]\n",[161,86090,86091],{"start":42},[119,86092,86093],{},"remove()",[14,86095,86096],{},"自己删自己",[14,86098,86099],{},[1540,86100],{"alt":23,"src":86101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[18,86103,86105],{"className":50684,"code":86104,"language":50686,"meta":23,"style":23},"\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",[25,86106,86107,86117,86131,86135,86143,86157,86177,86189,86197,86204,86216,86229,86264,86276,86287,86299,86311,86323,86350,86360,86364,86368,86377,86389,86403,86413,86425,86429,86433,86443,86454,86464,86474,86487,86500,86510,86514,86518,86527,86537,86549,86553,86557,86566,86576,86586,86598,86602,86606,86616,86632,86643,86653,86663,86675,86687,86699,86703,86707,86720,86731,86735,86743,86751,86755,86763,86783,86803,86811,86816,86842,86847,86852,86871,86876,86888,86893,86904,86914,86924,86929,86934,86938,86943,86948,86953,86973,86978,86998,87003,87017,87022,87027,87032,87048,87052,87057,87086,87091,87096,87101,87112,87116,87120,87124,87129,87154,87159,87184,87189,87198,87202,87207,87232,87236,87261,87265,87274,87278,87283,87301,87311,87315,87323,87331,87335],{"__ignoreMap":23},[28,86108,86109,86111,86113,86115],{"class":30,"line":31},[28,86110,51348],{"class":211},[28,86112,51352],{"class":51351},[28,86114,51355],{"class":34},[28,86116,51358],{"class":211},[28,86118,86119,86121,86123,86125,86127,86129],{"class":30,"line":42},[28,86120,1120],{"class":211},[28,86122,50686],{"class":51351},[28,86124,51367],{"class":34},[28,86126,257],{"class":211},[28,86128,51372],{"class":64},[28,86130,51358],{"class":211},[28,86132,86133],{"class":30,"line":50},[28,86134,2477],{"emptyLinePlaceholder":134},[28,86136,86137,86139,86141],{"class":30,"line":58},[28,86138,1120],{"class":211},[28,86140,51385],{"class":51351},[28,86142,51358],{"class":211},[28,86144,86145,86147,86149,86151,86153,86155],{"class":30,"line":70},[28,86146,52195],{"class":211},[28,86148,51395],{"class":51351},[28,86150,51398],{"class":34},[28,86152,257],{"class":211},[28,86154,51403],{"class":64},[28,86156,51358],{"class":211},[28,86158,86159,86161,86163,86165,86167,86169,86171,86173,86175],{"class":30,"line":78},[28,86160,52195],{"class":211},[28,86162,51395],{"class":51351},[28,86164,14997],{"class":34},[28,86166,257],{"class":211},[28,86168,51442],{"class":64},[28,86170,51422],{"class":34},[28,86172,257],{"class":211},[28,86174,51449],{"class":64},[28,86176,51358],{"class":211},[28,86178,86179,86181,86183,86185,86187],{"class":30,"line":86},[28,86180,52195],{"class":211},[28,86182,51458],{"class":51351},[28,86184,51461],{"class":211},[28,86186,51458],{"class":51351},[28,86188,51358],{"class":211},[28,86190,86191,86193,86195],{"class":30,"line":97},[28,86192,52195],{"class":211},[28,86194,126],{"class":51351},[28,86196,51358],{"class":211},[28,86198,86199,86202],{"class":30,"line":108},[28,86200,86201],{"class":34},"    .modal",[28,86203,15649],{"class":211},[28,86205,86206,86208,86210,86212,86214],{"class":30,"line":1407},[28,86207,54822],{"class":38},[28,86209,51488],{"class":211},[28,86211,4050],{"class":38},[28,86213,51543],{"class":207},[28,86215,1370],{"class":211},[28,86217,86218,86221,86223,86225,86227],{"class":30,"line":1690},[28,86219,86220],{"class":38},"      min-height",[28,86222,51488],{"class":211},[28,86224,521],{"class":38},[28,86226,51543],{"class":207},[28,86228,1370],{"class":211},[28,86230,86231,86233,86235,86237,86239,86241,86243,86245,86247,86249,86251,86253,86255,86257,86259,86262],{"class":30,"line":1695},[28,86232,78801],{"class":38},[28,86234,51488],{"class":211},[28,86236,401],{"class":38},[28,86238,4170],{"class":38},[28,86240,2115],{"class":38},[28,86242,51543],{"class":207},[28,86244,78818],{"class":38},[28,86246,212],{"class":211},[28,86248,401],{"class":38},[28,86250,12512],{"class":211},[28,86252,401],{"class":38},[28,86254,12512],{"class":211},[28,86256,401],{"class":38},[28,86258,12512],{"class":211},[28,86260,86261],{"class":38},"0.1",[28,86263,2796],{"class":211},[28,86265,86266,86268,86270,86272,86274],{"class":30,"line":1701},[28,86267,55185],{"class":38},[28,86269,51488],{"class":211},[28,86271,503],{"class":38},[28,86273,51543],{"class":207},[28,86275,1370],{"class":211},[28,86277,86278,86280,86282,86285],{"class":30,"line":1706},[28,86279,54810],{"class":38},[28,86281,51488],{"class":211},[28,86283,86284],{"class":38},"fixed",[28,86286,1370],{"class":211},[28,86288,86289,86292,86294,86297],{"class":30,"line":1720},[28,86290,86291],{"class":38},"      z-index",[28,86293,51488],{"class":211},[28,86295,86296],{"class":38},"999",[28,86298,1370],{"class":211},[28,86300,86301,86303,86305,86307,86309],{"class":30,"line":1725},[28,86302,54889],{"class":38},[28,86304,51488],{"class":211},[28,86306,866],{"class":38},[28,86308,538],{"class":207},[28,86310,1370],{"class":211},[28,86312,86313,86315,86317,86319,86321],{"class":30,"line":1731},[28,86314,54998],{"class":38},[28,86316,51488],{"class":211},[28,86318,866],{"class":38},[28,86320,538],{"class":207},[28,86322,1370],{"class":211},[28,86324,86325,86327,86329,86331,86333,86336,86338,86340,86342,86344,86346,86348],{"class":30,"line":1752},[28,86326,78842],{"class":38},[28,86328,51488],{"class":211},[28,86330,78847],{"class":38},[28,86332,212],{"class":211},[28,86334,86335],{"class":38},"-50",[28,86337,538],{"class":207},[28,86339,12512],{"class":211},[28,86341,86335],{"class":38},[28,86343,538],{"class":207},[28,86345,12512],{"class":211},[28,86347,401],{"class":38},[28,86349,2796],{"class":211},[28,86351,86352,86354,86356,86358],{"class":30,"line":1757},[28,86353,54935],{"class":38},[28,86355,51488],{"class":211},[28,86357,60893],{"class":38},[28,86359,1370],{"class":211},[28,86361,86362],{"class":30,"line":1771},[28,86363,2264],{"class":211},[28,86365,86366],{"class":30,"line":1776},[28,86367,2477],{"emptyLinePlaceholder":134},[28,86369,86370,86372,86375],{"class":30,"line":1805},[28,86371,86201],{"class":34},[28,86373,86374],{"class":34}," .header",[28,86376,15649],{"class":211},[28,86378,86379,86381,86383,86385,86387],{"class":30,"line":1810},[28,86380,57410],{"class":38},[28,86382,51488],{"class":211},[28,86384,611],{"class":38},[28,86386,51543],{"class":207},[28,86388,1370],{"class":211},[28,86390,86391,86393,86395,86397,86399,86401],{"class":30,"line":1827},[28,86392,54746],{"class":38},[28,86394,51488],{"class":211},[28,86396,401],{"class":38},[28,86398,2115],{"class":38},[28,86400,51543],{"class":207},[28,86402,1370],{"class":211},[28,86404,86405,86407,86409,86411],{"class":30,"line":1832},[28,86406,54810],{"class":38},[28,86408,51488],{"class":211},[28,86410,54815],{"class":38},[28,86412,1370],{"class":211},[28,86414,86415,86417,86419,86421,86423],{"class":30,"line":1837},[28,86416,54973],{"class":38},[28,86418,51488],{"class":211},[28,86420,910],{"class":38},[28,86422,51543],{"class":207},[28,86424,1370],{"class":211},[28,86426,86427],{"class":30,"line":1842},[28,86428,2264],{"class":211},[28,86430,86431],{"class":30,"line":1856},[28,86432,2477],{"emptyLinePlaceholder":134},[28,86434,86435,86437,86439,86441],{"class":30,"line":1861},[28,86436,86201],{"class":34},[28,86438,86374],{"class":34},[28,86440,3109],{"class":51351},[28,86442,15649],{"class":211},[28,86444,86445,86448,86450,86452],{"class":30,"line":2654},[28,86446,86447],{"class":38},"      font-style",[28,86449,51488],{"class":211},[28,86451,63892],{"class":38},[28,86453,1370],{"class":211},[28,86455,86456,86458,86460,86462],{"class":30,"line":2668},[28,86457,57467],{"class":38},[28,86459,51488],{"class":211},[28,86461,62121],{"class":38},[28,86463,1370],{"class":211},[28,86465,86466,86468,86470,86472],{"class":30,"line":2676},[28,86467,54810],{"class":38},[28,86469,51488],{"class":211},[28,86471,54882],{"class":38},[28,86473,1370],{"class":211},[28,86475,86476,86479,86481,86483,86485],{"class":30,"line":2681},[28,86477,86478],{"class":38},"      right",[28,86480,51488],{"class":211},[28,86482,785],{"class":38},[28,86484,51543],{"class":207},[28,86486,1370],{"class":211},[28,86488,86489,86491,86493,86496,86498],{"class":30,"line":2687},[28,86490,54998],{"class":38},[28,86492,51488],{"class":211},[28,86494,86495],{"class":38},"-2",[28,86497,51543],{"class":207},[28,86499,1370],{"class":211},[28,86501,86502,86504,86506,86508],{"class":30,"line":2693},[28,86503,62076],{"class":38},[28,86505,51488],{"class":211},[28,86507,62081],{"class":38},[28,86509,1370],{"class":211},[28,86511,86512],{"class":30,"line":2698},[28,86513,2264],{"class":211},[28,86515,86516],{"class":30,"line":8025},[28,86517,2477],{"emptyLinePlaceholder":134},[28,86519,86520,86522,86525],{"class":30,"line":8049},[28,86521,86201],{"class":34},[28,86523,86524],{"class":34}," .body",[28,86526,15649],{"class":211},[28,86528,86529,86531,86533,86535],{"class":30,"line":8054},[28,86530,57337],{"class":38},[28,86532,51488],{"class":211},[28,86534,51643],{"class":38},[28,86536,1370],{"class":211},[28,86538,86539,86541,86543,86545,86547],{"class":30,"line":8060},[28,86540,54746],{"class":38},[28,86542,51488],{"class":211},[28,86544,656],{"class":38},[28,86546,51543],{"class":207},[28,86548,1370],{"class":211},[28,86550,86551],{"class":30,"line":8087},[28,86552,2264],{"class":211},[28,86554,86555],{"class":30,"line":8092},[28,86556,2477],{"emptyLinePlaceholder":134},[28,86558,86559,86561,86564],{"class":30,"line":8098},[28,86560,86201],{"class":34},[28,86562,86563],{"class":34}," .footer",[28,86565,15649],{"class":211},[28,86567,86568,86570,86572,86574],{"class":30,"line":8110},[28,86569,55060],{"class":38},[28,86571,51488],{"class":211},[28,86573,51528],{"class":38},[28,86575,1370],{"class":211},[28,86577,86578,86580,86582,86584],{"class":30,"line":8122},[28,86579,55071],{"class":38},[28,86581,51488],{"class":211},[28,86583,51631],{"class":38},[28,86585,1370],{"class":211},[28,86587,86588,86590,86592,86594,86596],{"class":30,"line":8134},[28,86589,54746],{"class":38},[28,86591,51488],{"class":211},[28,86593,656],{"class":38},[28,86595,51543],{"class":207},[28,86597,1370],{"class":211},[28,86599,86600],{"class":30,"line":9793},[28,86601,2264],{"class":211},[28,86603,86604],{"class":30,"line":9818},[28,86605,2477],{"emptyLinePlaceholder":134},[28,86607,86608,86610,86612,86614],{"class":30,"line":9841},[28,86609,86201],{"class":34},[28,86611,86563],{"class":34},[28,86613,1476],{"class":51351},[28,86615,15649],{"class":211},[28,86617,86618,86620,86622,86624,86626,86628,86630],{"class":30,"line":9865},[28,86619,54746],{"class":38},[28,86621,51488],{"class":211},[28,86623,282],{"class":38},[28,86625,51543],{"class":207},[28,86627,2160],{"class":38},[28,86629,51543],{"class":207},[28,86631,1370],{"class":211},[28,86633,86634,86636,86638,86641],{"class":30,"line":9870},[28,86635,61772],{"class":38},[28,86637,51488],{"class":211},[28,86639,86640],{"class":38},"#ccc",[28,86642,1370],{"class":211},[28,86644,86645,86647,86649,86651],{"class":30,"line":9875},[28,86646,64021],{"class":38},[28,86648,51488],{"class":211},[28,86650,54788],{"class":38},[28,86652,1370],{"class":211},[28,86654,86655,86657,86659,86661],{"class":30,"line":9880},[28,86656,57467],{"class":38},[28,86658,51488],{"class":211},[28,86660,60893],{"class":38},[28,86662,1370],{"class":211},[28,86664,86665,86667,86669,86671,86673],{"class":30,"line":9889},[28,86666,55185],{"class":38},[28,86668,51488],{"class":211},[28,86670,288],{"class":38},[28,86672,51543],{"class":207},[28,86674,1370],{"class":211},[28,86676,86677,86679,86681,86683,86685],{"class":30,"line":9894},[28,86678,61801],{"class":38},[28,86680,51488],{"class":211},[28,86682,656],{"class":38},[28,86684,51543],{"class":207},[28,86686,1370],{"class":211},[28,86688,86689,86691,86693,86695,86697],{"class":30,"line":9900},[28,86690,54973],{"class":38},[28,86692,51488],{"class":211},[28,86694,759],{"class":38},[28,86696,51543],{"class":207},[28,86698,1370],{"class":211},[28,86700,86701],{"class":30,"line":9921},[28,86702,2264],{"class":211},[28,86704,86705],{"class":30,"line":9927},[28,86706,2477],{"emptyLinePlaceholder":134},[28,86708,86709,86711,86713,86715,86718],{"class":30,"line":9941},[28,86710,86201],{"class":34},[28,86712,86563],{"class":34},[28,86714,1476],{"class":51351},[28,86716,86717],{"class":34},".submit",[28,86719,15649],{"class":211},[28,86721,86722,86724,86726,86729],{"class":30,"line":9947},[28,86723,54935],{"class":38},[28,86725,51488],{"class":211},[28,86727,86728],{"class":38},"#369",[28,86730,1370],{"class":211},[28,86732,86733],{"class":30,"line":9974},[28,86734,2264],{"class":211},[28,86736,86737,86739,86741],{"class":30,"line":9983},[28,86738,52468],{"class":211},[28,86740,126],{"class":51351},[28,86742,51358],{"class":211},[28,86744,86745,86747,86749],{"class":30,"line":9989},[28,86746,51836],{"class":211},[28,86748,51385],{"class":51351},[28,86750,51358],{"class":211},[28,86752,86753],{"class":30,"line":9997},[28,86754,2477],{"emptyLinePlaceholder":134},[28,86756,86757,86759,86761],{"class":30,"line":10002},[28,86758,1120],{"class":211},[28,86760,51851],{"class":51351},[28,86762,51358],{"class":211},[28,86764,86765,86767,86769,86771,86773,86776,86779,86781],{"class":30,"line":16681},[28,86766,52195],{"class":211},[28,86768,53938],{"class":51351},[28,86770,15036],{"class":34},[28,86772,257],{"class":211},[28,86774,86775],{"class":64},"\"delete\"",[28,86777,86778],{"class":211},">删除\u003C\u002F",[28,86780,53938],{"class":51351},[28,86782,51358],{"class":211},[28,86784,86785,86787,86789,86791,86793,86796,86799,86801],{"class":30,"line":16687},[28,86786,52195],{"class":211},[28,86788,53938],{"class":51351},[28,86790,15036],{"class":34},[28,86792,257],{"class":211},[28,86794,86795],{"class":64},"\"login\"",[28,86797,86798],{"class":211},">登录\u003C\u002F",[28,86800,53938],{"class":51351},[28,86802,51358],{"class":211},[28,86804,86805,86807,86809],{"class":30,"line":16710},[28,86806,52195],{"class":211},[28,86808,51864],{"class":51351},[28,86810,51358],{"class":211},[28,86812,86813],{"class":30,"line":16716},[28,86814,86815],{"class":269},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[28,86817,86818,86820,86823,86825,86827,86829,86831,86833,86836,86838,86840],{"class":30,"line":16739},[28,86819,70135],{"class":207},[28,86821,86822],{"class":34}," Modal",[28,86824,212],{"class":211},[28,86826,51458],{"class":5293},[28,86828,13641],{"class":207},[28,86830,69981],{"class":64},[28,86832,12512],{"class":211},[28,86834,86835],{"class":5293},"message",[28,86837,13641],{"class":207},[28,86839,69981],{"class":64},[28,86841,12519],{"class":211},[28,86843,86844],{"class":30,"line":16753},[28,86845,86846],{"class":269},"      \u002F\u002F 创建Model 模态框盒子\n",[28,86848,86849],{"class":30,"line":16773},[28,86850,86851],{"class":269},"      \u002F\u002F 1.1 创建div标签\n",[28,86853,86854,86856,86859,86861,86863,86865,86867,86869],{"class":30,"line":16779},[28,86855,70102],{"class":38},[28,86857,86858],{"class":211},".modalBox ",[28,86860,257],{"class":207},[28,86862,54447],{"class":211},[28,86864,70202],{"class":34},[28,86866,212],{"class":211},[28,86868,81982],{"class":64},[28,86870,218],{"class":211},[28,86872,86873],{"class":30,"line":16790},[28,86874,86875],{"class":269},"      \u002F\u002F 1.2 给div 添加类名为model\n",[28,86877,86878,86880,86883,86885],{"class":30,"line":16813},[28,86879,70102],{"class":38},[28,86881,86882],{"class":211},".modalBox.className ",[28,86884,257],{"class":207},[28,86886,86887],{"class":64}," 'modal'\n",[28,86889,86890],{"class":30,"line":16835},[28,86891,86892],{"class":269},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[28,86894,86895,86897,86900,86902],{"class":30,"line":16840},[28,86896,70102],{"class":38},[28,86898,86899],{"class":211},".modalBox.innerHTML ",[28,86901,257],{"class":207},[28,86903,70219],{"class":64},[28,86905,86906,86909,86911],{"class":30,"line":16846},[28,86907,86908],{"class":64},"        \u003Cdiv class=\"header\">${",[28,86910,51458],{"class":211},[28,86912,86913],{"class":64},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[28,86915,86916,86919,86921],{"class":30,"line":16860},[28,86917,86918],{"class":64},"        \u003Cdiv class=\"body\">${",[28,86920,86835],{"class":211},[28,86922,86923],{"class":64},"}\u003C\u002Fdiv>\n",[28,86925,86926],{"class":30,"line":16873},[28,86927,86928],{"class":64},"      `\n",[28,86930,86931],{"class":30,"line":16878},[28,86932,86933],{"class":269},"      \u002F\u002F console.log(this.modalBox)\n",[28,86935,86936],{"class":30,"line":16892},[28,86937,2264],{"class":211},[28,86939,86940],{"class":30,"line":16897},[28,86941,86942],{"class":269},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[28,86944,86945],{"class":30,"line":16903},[28,86946,86947],{"class":269},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[28,86949,86950],{"class":30,"line":16908},[28,86951,86952],{"class":269},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[28,86954,86955,86958,86960,86962,86964,86967,86969,86971],{"class":30,"line":16922},[28,86956,86957],{"class":38},"    Modal",[28,86959,768],{"class":211},[28,86961,85630],{"class":38},[28,86963,768],{"class":211},[28,86965,86966],{"class":34},"open",[28,86968,13641],{"class":207},[28,86970,58969],{"class":207},[28,86972,54503],{"class":211},[28,86974,86975],{"class":30,"line":16927},[28,86976,86977],{"class":269},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[28,86979,86980,86982,86985,86987,86989,86991,86993,86996],{"class":30,"line":16932},[28,86981,58279],{"class":207},[28,86983,86984],{"class":38}," box",[28,86986,13641],{"class":207},[28,86988,54447],{"class":211},[28,86990,54450],{"class":34},[28,86992,212],{"class":211},[28,86994,86995],{"class":64},"'.modal'",[28,86997,218],{"class":211},[28,86999,87000],{"class":30,"line":16946},[28,87001,87002],{"class":269},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[28,87004,87005,87008,87010,87013,87015],{"class":30,"line":16958},[28,87006,87007],{"class":211},"      box ",[28,87009,1793],{"class":207},[28,87011,87012],{"class":211}," box.",[28,87014,57057],{"class":34},[28,87016,2053],{"class":211},[28,87018,87019],{"class":30,"line":16963},[28,87020,87021],{"class":269},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[28,87023,87024],{"class":30,"line":16976},[28,87025,87026],{"class":269},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[28,87028,87029],{"class":30,"line":16981},[28,87030,87031],{"class":269},"      \u002F\u002F append可以增加对象\n",[28,87033,87034,87037,87040,87042,87045],{"class":30,"line":16986},[28,87035,87036],{"class":211},"      document.body.",[28,87038,87039],{"class":34},"append",[28,87041,212],{"class":211},[28,87043,87044],{"class":38},"this",[28,87046,87047],{"class":211},".modalBox)\n",[28,87049,87050],{"class":30,"line":16991},[28,87051,2477],{"emptyLinePlaceholder":134},[28,87053,87054],{"class":30,"line":17004},[28,87055,87056],{"class":269},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[28,87058,87059,87061,87064,87066,87068,87071,87073,87075,87077,87079,87082,87084],{"class":30,"line":17009},[28,87060,70102],{"class":38},[28,87062,87063],{"class":211},".modalBox.",[28,87065,54450],{"class":34},[28,87067,212],{"class":211},[28,87069,87070],{"class":64},"'i'",[28,87072,30877],{"class":211},[28,87074,57864],{"class":34},[28,87076,212],{"class":211},[28,87078,57869],{"class":64},[28,87080,87081],{"class":211},", () ",[28,87083,84773],{"class":207},[28,87085,15649],{"class":211},[28,87087,87088],{"class":30,"line":32684},[28,87089,87090],{"class":269},"        \u002F\u002F 这个地方需要用到箭头函数\n",[28,87092,87093],{"class":30,"line":32690},[28,87094,87095],{"class":269},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[28,87097,87098],{"class":30,"line":32696},[28,87099,87100],{"class":269},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[28,87102,87103,87105,87107,87110],{"class":30,"line":32702},[28,87104,64777],{"class":38},[28,87106,768],{"class":211},[28,87108,87109],{"class":34},"close",[28,87111,2053],{"class":211},[28,87113,87114],{"class":30,"line":32708},[28,87115,64866],{"class":211},[28,87117,87118],{"class":30,"line":32719},[28,87119,2264],{"class":211},[28,87121,87122],{"class":30,"line":32725},[28,87123,2477],{"emptyLinePlaceholder":134},[28,87125,87126],{"class":30,"line":32745},[28,87127,87128],{"class":269},"    \u002F\u002F 测试一下 点击 删除按钮\n",[28,87130,87131,87133,87135,87137,87140,87142,87144,87146,87148,87150,87152],{"class":30,"line":32751},[28,87132,52458],{"class":211},[28,87134,54450],{"class":34},[28,87136,212],{"class":211},[28,87138,87139],{"class":64},"'#delete'",[28,87141,30877],{"class":211},[28,87143,57864],{"class":34},[28,87145,212],{"class":211},[28,87147,57869],{"class":64},[28,87149,87081],{"class":211},[28,87151,84773],{"class":207},[28,87153,15649],{"class":211},[28,87155,87156],{"class":30,"line":32762},[28,87157,87158],{"class":269},"      \u002F\u002F 先调用Model构造函数\n",[28,87160,87161,87163,87166,87168,87170,87172,87174,87177,87179,87182],{"class":30,"line":32768},[28,87162,58279],{"class":207},[28,87164,87165],{"class":38}," del",[28,87167,13641],{"class":207},[28,87169,11655],{"class":207},[28,87171,86822],{"class":34},[28,87173,212],{"class":211},[28,87175,87176],{"class":64},"'温馨的提示'",[28,87178,12512],{"class":211},[28,87180,87181],{"class":64},"'您没有删除权限操作'",[28,87183,218],{"class":211},[28,87185,87186],{"class":30,"line":32774},[28,87187,87188],{"class":269},"      \u002F\u002F 实例对象调用open方法\n",[28,87190,87191,87194,87196],{"class":30,"line":32780},[28,87192,87193],{"class":211},"      del.",[28,87195,86966],{"class":34},[28,87197,2053],{"class":211},[28,87199,87200],{"class":30,"line":32786},[28,87201,33512],{"class":211},[28,87203,87204],{"class":30,"line":32792},[28,87205,87206],{"class":269},"    \u002F\u002F 测试一下 点击 登录按钮\n",[28,87208,87209,87211,87213,87215,87218,87220,87222,87224,87226,87228,87230],{"class":30,"line":32798},[28,87210,52458],{"class":211},[28,87212,54450],{"class":34},[28,87214,212],{"class":211},[28,87216,87217],{"class":64},"'#login'",[28,87219,30877],{"class":211},[28,87221,57864],{"class":34},[28,87223,212],{"class":211},[28,87225,57869],{"class":64},[28,87227,87081],{"class":211},[28,87229,84773],{"class":207},[28,87231,15649],{"class":211},[28,87233,87234],{"class":30,"line":32804},[28,87235,87158],{"class":269},[28,87237,87238,87240,87243,87245,87247,87249,87251,87254,87256,87259],{"class":30,"line":32824},[28,87239,58279],{"class":207},[28,87241,87242],{"class":38}," log",[28,87244,13641],{"class":207},[28,87246,11655],{"class":207},[28,87248,86822],{"class":34},[28,87250,212],{"class":211},[28,87252,87253],{"class":64},"'友情提示'",[28,87255,12512],{"class":211},[28,87257,87258],{"class":64},"'您还没有登录呢'",[28,87260,218],{"class":211},[28,87262,87263],{"class":30,"line":32830},[28,87264,87188],{"class":269},[28,87266,87267,87270,87272],{"class":30,"line":32846},[28,87268,87269],{"class":211},"      log.",[28,87271,86966],{"class":34},[28,87273,2053],{"class":211},[28,87275,87276],{"class":30,"line":32852},[28,87277,33512],{"class":211},[28,87279,87280],{"class":30,"line":32866},[28,87281,87282],{"class":269},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[28,87284,87285,87287,87289,87291,87293,87295,87297,87299],{"class":30,"line":32872},[28,87286,86957],{"class":38},[28,87288,768],{"class":211},[28,87290,85630],{"class":38},[28,87292,768],{"class":211},[28,87294,87109],{"class":34},[28,87296,13641],{"class":207},[28,87298,58969],{"class":207},[28,87300,54503],{"class":211},[28,87302,87303,87305,87307,87309],{"class":30,"line":32887},[28,87304,70102],{"class":38},[28,87306,87063],{"class":211},[28,87308,57057],{"class":34},[28,87310,2053],{"class":211},[28,87312,87313],{"class":30,"line":32893},[28,87314,2264],{"class":211},[28,87316,87317,87319,87321],{"class":30,"line":32902},[28,87318,52468],{"class":211},[28,87320,51864],{"class":51351},[28,87322,51358],{"class":211},[28,87324,87325,87327,87329],{"class":30,"line":32908},[28,87326,51836],{"class":211},[28,87328,51851],{"class":51351},[28,87330,51358],{"class":211},[28,87332,87333],{"class":30,"line":32917},[28,87334,2477],{"emptyLinePlaceholder":134},[28,87336,87337,87339,87341],{"class":30,"line":32923},[28,87338,51836],{"class":211},[28,87340,50686],{"class":51351},[28,87342,51358],{"class":211},[14,87344,87345],{},[1540,87346],{"alt":23,"src":87347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[149,87349,87351],{"id":87350},"_414-深浅拷贝","4.14 深浅拷贝",[177,87353,87355],{"id":87354},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87357,87358],{},[1540,87359],{"alt":23,"src":87360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87362,87363],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87365,87366],{},[1540,87367],{"alt":23,"src":87368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87370,87371],{},[1540,87372],{"alt":23,"src":87373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87375,87376],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87378,87379],{},[1540,87380],{"alt":23,"src":87381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87383,11409],{},[14,87385,87386],{},[1540,87387],{"alt":23,"src":87388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[177,87390,87392],{"id":87391},"_4142-深拷贝","4.14.2 深拷贝",[14,87394,87395],{},"深拷贝：拷贝的是对象，不是地址",[14,87397,87398],{},"常用的三种方法：",[161,87400,87401,87404,87407],{},[119,87402,87403],{},"通过递归实现深拷贝",[119,87405,87406],{},"lodash\u002FcloneDeep",[119,87408,87409],{},"通过JSON.stringify()实现",[22075,87411,87413],{"id":87412},"_41421-递归函数","4.14.2.1 递归函数",[14,87415,87416],{},[1540,87417],{"alt":23,"src":87418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[161,87420,87421],{},[119,87422,87423],{},"死递归占溢出：",[18,87425,87427],{"className":53118,"code":87426,"language":53120,"meta":23,"style":23},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[25,87428,87429,87437,87445,87449,87454,87458,87463,87471],{"__ignoreMap":23},[28,87430,87431,87433,87435],{"class":30,"line":31},[28,87432,1120],{"class":211},[28,87434,51851],{"class":51351},[28,87436,51358],{"class":211},[28,87438,87439,87441,87443],{"class":30,"line":42},[28,87440,52195],{"class":211},[28,87442,51864],{"class":51351},[28,87444,51358],{"class":211},[28,87446,87447],{"class":30,"line":50},[28,87448,77194],{"class":211},[28,87450,87451],{"class":30,"line":58},[28,87452,87453],{"class":211},"      fn()\n",[28,87455,87456],{"class":30,"line":70},[28,87457,2264],{"class":211},[28,87459,87460],{"class":30,"line":78},[28,87461,87462],{"class":211},"    fn()\n",[28,87464,87465,87467,87469],{"class":30,"line":86},[28,87466,52468],{"class":211},[28,87468,51864],{"class":51351},[28,87470,51358],{"class":211},[28,87472,87473,87475,87477],{"class":30,"line":97},[28,87474,51836],{"class":211},[28,87476,51851],{"class":51351},[28,87478,51358],{"class":211},[161,87480,87481],{"start":42},[119,87482,87483],{},"递归函数要加判断条件：",[14,87485,87486],{},[1540,87487],{"alt":23,"src":87488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[161,87490,87491],{"start":50},[119,87492,87493],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[18,87495,87497],{"className":50684,"code":87496,"language":50686,"meta":23,"style":23},"\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",[25,87498,87499,87509,87523,87527,87535,87549,87569,87581,87589,87593,87601,87613,87621,87629,87654,87666,87670,87677,87685,87693,87697],{"__ignoreMap":23},[28,87500,87501,87503,87505,87507],{"class":30,"line":31},[28,87502,51348],{"class":211},[28,87504,51352],{"class":51351},[28,87506,51355],{"class":34},[28,87508,51358],{"class":211},[28,87510,87511,87513,87515,87517,87519,87521],{"class":30,"line":42},[28,87512,1120],{"class":211},[28,87514,50686],{"class":51351},[28,87516,51367],{"class":34},[28,87518,257],{"class":211},[28,87520,51372],{"class":64},[28,87522,51358],{"class":211},[28,87524,87525],{"class":30,"line":50},[28,87526,2477],{"emptyLinePlaceholder":134},[28,87528,87529,87531,87533],{"class":30,"line":58},[28,87530,1120],{"class":211},[28,87532,51385],{"class":51351},[28,87534,51358],{"class":211},[28,87536,87537,87539,87541,87543,87545,87547],{"class":30,"line":70},[28,87538,52195],{"class":211},[28,87540,51395],{"class":51351},[28,87542,51398],{"class":34},[28,87544,257],{"class":211},[28,87546,51403],{"class":64},[28,87548,51358],{"class":211},[28,87550,87551,87553,87555,87557,87559,87561,87563,87565,87567],{"class":30,"line":78},[28,87552,52195],{"class":211},[28,87554,51395],{"class":51351},[28,87556,14997],{"class":34},[28,87558,257],{"class":211},[28,87560,51442],{"class":64},[28,87562,51422],{"class":34},[28,87564,257],{"class":211},[28,87566,51449],{"class":64},[28,87568,51358],{"class":211},[28,87570,87571,87573,87575,87577,87579],{"class":30,"line":86},[28,87572,52195],{"class":211},[28,87574,51458],{"class":51351},[28,87576,51461],{"class":211},[28,87578,51458],{"class":51351},[28,87580,51358],{"class":211},[28,87582,87583,87585,87587],{"class":30,"line":97},[28,87584,51836],{"class":211},[28,87586,51385],{"class":51351},[28,87588,51358],{"class":211},[28,87590,87591],{"class":30,"line":108},[28,87592,2477],{"emptyLinePlaceholder":134},[28,87594,87595,87597,87599],{"class":30,"line":1407},[28,87596,1120],{"class":211},[28,87598,51851],{"class":51351},[28,87600,51358],{"class":211},[28,87602,87603,87605,87607,87609,87611],{"class":30,"line":1690},[28,87604,52195],{"class":211},[28,87606,51662],{"class":51351},[28,87608,55365],{"class":211},[28,87610,51662],{"class":51351},[28,87612,51358],{"class":211},[28,87614,87615,87617,87619],{"class":30,"line":1695},[28,87616,52195],{"class":211},[28,87618,51864],{"class":51351},[28,87620,51358],{"class":211},[28,87622,87623,87625,87627],{"class":30,"line":1701},[28,87624,70135],{"class":207},[28,87626,73824],{"class":34},[28,87628,10930],{"class":211},[28,87630,87631,87633,87635,87637,87639,87641,87643,87645,87647,87649,87652],{"class":30,"line":1706},[28,87632,55822],{"class":211},[28,87634,54450],{"class":34},[28,87636,212],{"class":211},[28,87638,81982],{"class":64},[28,87640,74300],{"class":211},[28,87642,257],{"class":207},[28,87644,11655],{"class":207},[28,87646,73840],{"class":34},[28,87648,17338],{"class":211},[28,87650,87651],{"class":34},"toLocaleString",[28,87653,2053],{"class":211},[28,87655,87656,87659,87662,87664],{"class":30,"line":1720},[28,87657,87658],{"class":34},"      setTimeout",[28,87660,87661],{"class":211},"(getTime, ",[28,87663,6487],{"class":38},[28,87665,218],{"class":211},[28,87667,87668],{"class":30,"line":1725},[28,87669,2264],{"class":211},[28,87671,87672,87675],{"class":30,"line":1731},[28,87673,87674],{"class":34},"    getTime",[28,87676,2053],{"class":211},[28,87678,87679,87681,87683],{"class":30,"line":1752},[28,87680,52468],{"class":211},[28,87682,51864],{"class":51351},[28,87684,51358],{"class":211},[28,87686,87687,87689,87691],{"class":30,"line":1757},[28,87688,51836],{"class":211},[28,87690,51851],{"class":51351},[28,87692,51358],{"class":211},[28,87694,87695],{"class":30,"line":1771},[28,87696,2477],{"emptyLinePlaceholder":134},[28,87698,87699,87701,87703],{"class":30,"line":1776},[28,87700,51836],{"class":211},[28,87702,50686],{"class":51351},[28,87704,51358],{"class":211},[14,87706,87707],{},[1540,87708],{"alt":23,"src":87709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[161,87711,87712],{"start":58},[119,87713,87403],{},[14,87715,87716],{},[1540,87717],{"alt":23,"src":87718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87720,87721],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87723,39240],{},[14,87725,87726],{},"这个是简易版的递归函数深拷贝",[14,87728,87729],{},"一定要注意先数组再对象，因为万物皆可对象",[18,87731,87733],{"className":50684,"code":87732,"language":50686,"meta":23,"style":23},"\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",[25,87734,87735,87745,87759,87763,87771,87785,87805,87817,87825,87829,87837,87845,87855,87864,87872,87888,87892,87900,87904,87908,87920,87925,87944,87960,87965,87970,87975,87990,87995,88000,88009,88017,88034,88042,88048,88056,88061,88066,88075,88079,88083,88087,88098,88107,88117,88131,88141,88149,88157,88165,88169],{"__ignoreMap":23},[28,87736,87737,87739,87741,87743],{"class":30,"line":31},[28,87738,51348],{"class":211},[28,87740,51352],{"class":51351},[28,87742,51355],{"class":34},[28,87744,51358],{"class":211},[28,87746,87747,87749,87751,87753,87755,87757],{"class":30,"line":42},[28,87748,1120],{"class":211},[28,87750,50686],{"class":51351},[28,87752,51367],{"class":34},[28,87754,257],{"class":211},[28,87756,51372],{"class":64},[28,87758,51358],{"class":211},[28,87760,87761],{"class":30,"line":50},[28,87762,2477],{"emptyLinePlaceholder":134},[28,87764,87765,87767,87769],{"class":30,"line":58},[28,87766,1120],{"class":211},[28,87768,51385],{"class":51351},[28,87770,51358],{"class":211},[28,87772,87773,87775,87777,87779,87781,87783],{"class":30,"line":70},[28,87774,52195],{"class":211},[28,87776,51395],{"class":51351},[28,87778,51398],{"class":34},[28,87780,257],{"class":211},[28,87782,51403],{"class":64},[28,87784,51358],{"class":211},[28,87786,87787,87789,87791,87793,87795,87797,87799,87801,87803],{"class":30,"line":78},[28,87788,52195],{"class":211},[28,87790,51395],{"class":51351},[28,87792,14997],{"class":34},[28,87794,257],{"class":211},[28,87796,51442],{"class":64},[28,87798,51422],{"class":34},[28,87800,257],{"class":211},[28,87802,51449],{"class":64},[28,87804,51358],{"class":211},[28,87806,87807,87809,87811,87813,87815],{"class":30,"line":86},[28,87808,52195],{"class":211},[28,87810,51458],{"class":51351},[28,87812,51461],{"class":211},[28,87814,51458],{"class":51351},[28,87816,51358],{"class":211},[28,87818,87819,87821,87823],{"class":30,"line":97},[28,87820,51836],{"class":211},[28,87822,51385],{"class":51351},[28,87824,51358],{"class":211},[28,87826,87827],{"class":30,"line":108},[28,87828,2477],{"emptyLinePlaceholder":134},[28,87830,87831,87833,87835],{"class":30,"line":1407},[28,87832,1120],{"class":211},[28,87834,51851],{"class":51351},[28,87836,51358],{"class":211},[28,87838,87839,87841,87843],{"class":30,"line":1690},[28,87840,52195],{"class":211},[28,87842,51864],{"class":51351},[28,87844,51358],{"class":211},[28,87846,87847,87849,87851,87853],{"class":30,"line":1695},[28,87848,11298],{"class":207},[28,87850,70022],{"class":38},[28,87852,13641],{"class":207},[28,87854,15649],{"class":211},[28,87856,87857,87859,87862],{"class":30,"line":1701},[28,87858,71667],{"class":211},[28,87860,87861],{"class":64},"'pink'",[28,87863,31517],{"class":211},[28,87865,87866,87868,87870],{"class":30,"line":1706},[28,87867,71677],{"class":211},[28,87869,860],{"class":38},[28,87871,31517],{"class":211},[28,87873,87874,87877,87880,87882,87885],{"class":30,"line":1720},[28,87875,87876],{"class":211},"      hobby: [",[28,87878,87879],{"class":64},"'乒乓球'",[28,87881,12512],{"class":211},[28,87883,87884],{"class":64},"'足球'",[28,87886,87887],{"class":211},"],\n",[28,87889,87890],{"class":30,"line":1725},[28,87891,77923],{"class":211},[28,87893,87894,87897],{"class":30,"line":1731},[28,87895,87896],{"class":211},"        baby: ",[28,87898,87899],{"class":64},"'小pink'\n",[28,87901,87902],{"class":30,"line":1752},[28,87903,52449],{"class":211},[28,87905,87906],{"class":30,"line":1757},[28,87907,2264],{"class":211},[28,87909,87910,87912,87915,87917],{"class":30,"line":1771},[28,87911,11298],{"class":207},[28,87913,87914],{"class":38}," o",[28,87916,13641],{"class":207},[28,87918,87919],{"class":211}," {}\n",[28,87921,87922],{"class":30,"line":1776},[28,87923,87924],{"class":269},"    \u002F\u002F 拷贝函数\n",[28,87926,87927,87929,87932,87934,87937,87939,87942],{"class":30,"line":1805},[28,87928,70135],{"class":207},[28,87930,87931],{"class":34}," deepCopy",[28,87933,212],{"class":211},[28,87935,87936],{"class":5293},"newObj",[28,87938,12512],{"class":211},[28,87940,87941],{"class":5293},"oldObj",[28,87943,12519],{"class":211},[28,87945,87946,87948,87950,87952,87955,87957],{"class":30,"line":1810},[28,87947,52335],{"class":207},[28,87949,1736],{"class":211},[28,87951,51898],{"class":207},[28,87953,87954],{"class":211}," k ",[28,87956,26094],{"class":207},[28,87958,87959],{"class":211}," oldObj) {\n",[28,87961,87962],{"class":30,"line":1827},[28,87963,87964],{"class":269},"        \u002F\u002F 处理数组的问题\n",[28,87966,87967],{"class":30,"line":1832},[28,87968,87969],{"class":269},"        \u002F\u002F 判断是否属于数组\n",[28,87971,87972],{"class":30,"line":1837},[28,87973,87974],{"class":269},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[28,87976,87977,87979,87982,87985,87988],{"class":30,"line":1842},[28,87978,2574],{"class":207},[28,87980,87981],{"class":211}," (oldObj[k] ",[28,87983,87984],{"class":207},"instanceof",[28,87986,87987],{"class":34}," Array",[28,87989,12519],{"class":211},[28,87991,87992],{"class":30,"line":1856},[28,87993,87994],{"class":269},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[28,87996,87997],{"class":30,"line":1861},[28,87998,87999],{"class":269},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[28,88001,88002,88005,88007],{"class":30,"line":2654},[28,88003,88004],{"class":211},"          newObj[k] ",[28,88006,257],{"class":207},[28,88008,51889],{"class":211},[28,88010,88011,88014],{"class":30,"line":2668},[28,88012,88013],{"class":34},"          deepCopy",[28,88015,88016],{"class":211},"(newObj[k], oldObj[k])\n",[28,88018,88019,88021,88023,88025,88027,88029,88032],{"class":30,"line":2676},[28,88020,80131],{"class":211},[28,88022,1779],{"class":207},[28,88024,1782],{"class":207},[28,88026,87981],{"class":211},[28,88028,87984],{"class":207},[28,88030,88031],{"class":34}," Object",[28,88033,12519],{"class":211},[28,88035,88036,88038,88040],{"class":30,"line":2681},[28,88037,88004],{"class":211},[28,88039,257],{"class":207},[28,88041,87919],{"class":211},[28,88043,88044,88046],{"class":30,"line":2687},[28,88045,88013],{"class":34},[28,88047,88016],{"class":211},[28,88049,88050,88052,88054],{"class":30,"line":2693},[28,88051,80131],{"class":211},[28,88053,1779],{"class":207},[28,88055,15649],{"class":211},[28,88057,88058],{"class":30,"line":2698},[28,88059,88060],{"class":269},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[28,88062,88063],{"class":30,"line":8025},[28,88064,88065],{"class":269},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[28,88067,88068,88070,88072],{"class":30,"line":8049},[28,88069,88004],{"class":211},[28,88071,257],{"class":207},[28,88073,88074],{"class":211}," oldObj[k]\n",[28,88076,88077],{"class":30,"line":8054},[28,88078,2606],{"class":211},[28,88080,88081],{"class":30,"line":8060},[28,88082,52449],{"class":211},[28,88084,88085],{"class":30,"line":8087},[28,88086,2264],{"class":211},[28,88088,88089,88092,88095],{"class":30,"line":8092},[28,88090,88091],{"class":34},"    deepCopy",[28,88093,88094],{"class":211},"(o, obj) ",[28,88096,88097],{"class":269},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[28,88099,88100,88102,88104],{"class":30,"line":8098},[28,88101,73804],{"class":211},[28,88103,58298],{"class":34},[28,88105,88106],{"class":211},"(o)\n",[28,88108,88109,88112,88114],{"class":30,"line":8110},[28,88110,88111],{"class":211},"    o.age ",[28,88113,257],{"class":207},[28,88115,88116],{"class":38}," 20\n",[28,88118,88119,88122,88124,88126,88128],{"class":30,"line":8122},[28,88120,88121],{"class":211},"    o.hobby[",[28,88123,401],{"class":38},[28,88125,4520],{"class":211},[28,88127,257],{"class":207},[28,88129,88130],{"class":64}," '篮球'\n",[28,88132,88133,88136,88138],{"class":30,"line":8134},[28,88134,88135],{"class":211},"    o.family ",[28,88137,257],{"class":207},[28,88139,88140],{"class":64}," '老pink'\n",[28,88142,88143,88145,88147],{"class":30,"line":9793},[28,88144,73804],{"class":211},[28,88146,58298],{"class":34},[28,88148,70087],{"class":211},[28,88150,88151,88153,88155],{"class":30,"line":9818},[28,88152,52468],{"class":211},[28,88154,51864],{"class":51351},[28,88156,51358],{"class":211},[28,88158,88159,88161,88163],{"class":30,"line":9841},[28,88160,51836],{"class":211},[28,88162,51851],{"class":51351},[28,88164,51358],{"class":211},[28,88166,88167],{"class":30,"line":9865},[28,88168,2477],{"emptyLinePlaceholder":134},[28,88170,88171,88173,88175],{"class":30,"line":9870},[28,88172,51836],{"class":211},[28,88174,50686],{"class":51351},[28,88176,51358],{"class":211},[14,88178,88179],{},[1540,88180],{"alt":23,"src":88181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22075,88183,88185,88186],{"id":88184},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[359,88187,88188],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88190,88191],{},[448,88192,88193],{"href":88193,"rel":88194},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23940],[14,88196,88197],{},"lodash里边的方法都要加上一个下划线_",[14,88199,88200],{},"_.cloneDeep()",[18,88202,88204],{"className":50684,"code":88203,"language":50686,"meta":23,"style":23},"\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",[25,88205,88206,88216,88230,88234,88242,88256,88276,88288,88296,88300,88308,88313,88332,88340,88350,88358,88366,88378,88382,88388,88392,88396,88412,88420,88429,88437,88445,88453,88457],{"__ignoreMap":23},[28,88207,88208,88210,88212,88214],{"class":30,"line":31},[28,88209,51348],{"class":211},[28,88211,51352],{"class":51351},[28,88213,51355],{"class":34},[28,88215,51358],{"class":211},[28,88217,88218,88220,88222,88224,88226,88228],{"class":30,"line":42},[28,88219,1120],{"class":211},[28,88221,50686],{"class":51351},[28,88223,51367],{"class":34},[28,88225,257],{"class":211},[28,88227,51372],{"class":64},[28,88229,51358],{"class":211},[28,88231,88232],{"class":30,"line":50},[28,88233,2477],{"emptyLinePlaceholder":134},[28,88235,88236,88238,88240],{"class":30,"line":58},[28,88237,1120],{"class":211},[28,88239,51385],{"class":51351},[28,88241,51358],{"class":211},[28,88243,88244,88246,88248,88250,88252,88254],{"class":30,"line":70},[28,88245,52195],{"class":211},[28,88247,51395],{"class":51351},[28,88249,51398],{"class":34},[28,88251,257],{"class":211},[28,88253,51403],{"class":64},[28,88255,51358],{"class":211},[28,88257,88258,88260,88262,88264,88266,88268,88270,88272,88274],{"class":30,"line":78},[28,88259,52195],{"class":211},[28,88261,51395],{"class":51351},[28,88263,14997],{"class":34},[28,88265,257],{"class":211},[28,88267,51442],{"class":64},[28,88269,51422],{"class":34},[28,88271,257],{"class":211},[28,88273,51449],{"class":64},[28,88275,51358],{"class":211},[28,88277,88278,88280,88282,88284,88286],{"class":30,"line":86},[28,88279,52195],{"class":211},[28,88281,51458],{"class":51351},[28,88283,51461],{"class":211},[28,88285,51458],{"class":51351},[28,88287,51358],{"class":211},[28,88289,88290,88292,88294],{"class":30,"line":97},[28,88291,51836],{"class":211},[28,88293,51385],{"class":51351},[28,88295,51358],{"class":211},[28,88297,88298],{"class":30,"line":108},[28,88299,2477],{"emptyLinePlaceholder":134},[28,88301,88302,88304,88306],{"class":30,"line":1407},[28,88303,1120],{"class":211},[28,88305,51851],{"class":51351},[28,88307,51358],{"class":211},[28,88309,88310],{"class":30,"line":1690},[28,88311,88312],{"class":269},"  \u003C!-- 先引用这个库 -->\n",[28,88314,88315,88317,88319,88321,88323,88326,88328,88330],{"class":30,"line":1695},[28,88316,52195],{"class":211},[28,88318,51864],{"class":51351},[28,88320,55290],{"class":34},[28,88322,257],{"class":211},[28,88324,88325],{"class":64},"\"lodash.min.js\"",[28,88327,55365],{"class":211},[28,88329,51864],{"class":51351},[28,88331,51358],{"class":211},[28,88333,88334,88336,88338],{"class":30,"line":1701},[28,88335,52195],{"class":211},[28,88337,51864],{"class":51351},[28,88339,51358],{"class":211},[28,88341,88342,88344,88346,88348],{"class":30,"line":1706},[28,88343,11298],{"class":207},[28,88345,70022],{"class":38},[28,88347,13641],{"class":207},[28,88349,15649],{"class":211},[28,88351,88352,88354,88356],{"class":30,"line":1720},[28,88353,71667],{"class":211},[28,88355,87861],{"class":64},[28,88357,31517],{"class":211},[28,88359,88360,88362,88364],{"class":30,"line":1725},[28,88361,71677],{"class":211},[28,88363,860],{"class":38},[28,88365,31517],{"class":211},[28,88367,88368,88370,88372,88374,88376],{"class":30,"line":1731},[28,88369,87876],{"class":211},[28,88371,87879],{"class":64},[28,88373,12512],{"class":211},[28,88375,87884],{"class":64},[28,88377,87887],{"class":211},[28,88379,88380],{"class":30,"line":1752},[28,88381,77923],{"class":211},[28,88383,88384,88386],{"class":30,"line":1757},[28,88385,87896],{"class":211},[28,88387,87899],{"class":64},[28,88389,88390],{"class":30,"line":1771},[28,88391,52449],{"class":211},[28,88393,88394],{"class":30,"line":1776},[28,88395,2264],{"class":211},[28,88397,88398,88400,88402,88404,88407,88410],{"class":30,"line":1805},[28,88399,11298],{"class":207},[28,88401,87914],{"class":38},[28,88403,13641],{"class":207},[28,88405,88406],{"class":211}," _.",[28,88408,88409],{"class":34},"cloneDeep",[28,88411,70087],{"class":211},[28,88413,88414,88416,88418],{"class":30,"line":1810},[28,88415,73804],{"class":211},[28,88417,58298],{"class":34},[28,88419,88106],{"class":211},[28,88421,88422,88425,88427],{"class":30,"line":1827},[28,88423,88424],{"class":211},"    o.family.baby ",[28,88426,257],{"class":207},[28,88428,88140],{"class":64},[28,88430,88431,88433,88435],{"class":30,"line":1832},[28,88432,73804],{"class":211},[28,88434,58298],{"class":34},[28,88436,70087],{"class":211},[28,88438,88439,88441,88443],{"class":30,"line":1837},[28,88440,52468],{"class":211},[28,88442,51864],{"class":51351},[28,88444,51358],{"class":211},[28,88446,88447,88449,88451],{"class":30,"line":1842},[28,88448,51836],{"class":211},[28,88450,51851],{"class":51351},[28,88452,51358],{"class":211},[28,88454,88455],{"class":30,"line":1856},[28,88456,2477],{"emptyLinePlaceholder":134},[28,88458,88459,88461,88463],{"class":30,"line":1861},[28,88460,51836],{"class":211},[28,88462,50686],{"class":51351},[28,88464,51358],{"class":211},[14,88466,88467],{},[1540,88468],{"alt":23,"src":88469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22075,88471,88473],{"id":88472},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[18,88475,88477],{"className":50684,"code":88476,"language":50686,"meta":23,"style":23},"\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",[25,88478,88479,88489,88503,88507,88515,88529,88549,88561,88569,88573,88581,88589,88599,88607,88615,88627,88631,88637,88641,88645,88650,88655,88660,88686,88694,88703,88711,88719,88727,88731],{"__ignoreMap":23},[28,88480,88481,88483,88485,88487],{"class":30,"line":31},[28,88482,51348],{"class":211},[28,88484,51352],{"class":51351},[28,88486,51355],{"class":34},[28,88488,51358],{"class":211},[28,88490,88491,88493,88495,88497,88499,88501],{"class":30,"line":42},[28,88492,1120],{"class":211},[28,88494,50686],{"class":51351},[28,88496,51367],{"class":34},[28,88498,257],{"class":211},[28,88500,51372],{"class":64},[28,88502,51358],{"class":211},[28,88504,88505],{"class":30,"line":50},[28,88506,2477],{"emptyLinePlaceholder":134},[28,88508,88509,88511,88513],{"class":30,"line":58},[28,88510,1120],{"class":211},[28,88512,51385],{"class":51351},[28,88514,51358],{"class":211},[28,88516,88517,88519,88521,88523,88525,88527],{"class":30,"line":70},[28,88518,52195],{"class":211},[28,88520,51395],{"class":51351},[28,88522,51398],{"class":34},[28,88524,257],{"class":211},[28,88526,51403],{"class":64},[28,88528,51358],{"class":211},[28,88530,88531,88533,88535,88537,88539,88541,88543,88545,88547],{"class":30,"line":78},[28,88532,52195],{"class":211},[28,88534,51395],{"class":51351},[28,88536,14997],{"class":34},[28,88538,257],{"class":211},[28,88540,51442],{"class":64},[28,88542,51422],{"class":34},[28,88544,257],{"class":211},[28,88546,51449],{"class":64},[28,88548,51358],{"class":211},[28,88550,88551,88553,88555,88557,88559],{"class":30,"line":86},[28,88552,52195],{"class":211},[28,88554,51458],{"class":51351},[28,88556,51461],{"class":211},[28,88558,51458],{"class":51351},[28,88560,51358],{"class":211},[28,88562,88563,88565,88567],{"class":30,"line":97},[28,88564,51836],{"class":211},[28,88566,51385],{"class":51351},[28,88568,51358],{"class":211},[28,88570,88571],{"class":30,"line":108},[28,88572,2477],{"emptyLinePlaceholder":134},[28,88574,88575,88577,88579],{"class":30,"line":1407},[28,88576,1120],{"class":211},[28,88578,51851],{"class":51351},[28,88580,51358],{"class":211},[28,88582,88583,88585,88587],{"class":30,"line":1690},[28,88584,52195],{"class":211},[28,88586,51864],{"class":51351},[28,88588,51358],{"class":211},[28,88590,88591,88593,88595,88597],{"class":30,"line":1695},[28,88592,11298],{"class":207},[28,88594,70022],{"class":38},[28,88596,13641],{"class":207},[28,88598,15649],{"class":211},[28,88600,88601,88603,88605],{"class":30,"line":1701},[28,88602,71667],{"class":211},[28,88604,87861],{"class":64},[28,88606,31517],{"class":211},[28,88608,88609,88611,88613],{"class":30,"line":1706},[28,88610,71677],{"class":211},[28,88612,860],{"class":38},[28,88614,31517],{"class":211},[28,88616,88617,88619,88621,88623,88625],{"class":30,"line":1720},[28,88618,87876],{"class":211},[28,88620,87879],{"class":64},[28,88622,12512],{"class":211},[28,88624,87884],{"class":64},[28,88626,87887],{"class":211},[28,88628,88629],{"class":30,"line":1725},[28,88630,77923],{"class":211},[28,88632,88633,88635],{"class":30,"line":1731},[28,88634,87896],{"class":211},[28,88636,87899],{"class":64},[28,88638,88639],{"class":30,"line":1752},[28,88640,52449],{"class":211},[28,88642,88643],{"class":30,"line":1757},[28,88644,2264],{"class":211},[28,88646,88647],{"class":30,"line":1771},[28,88648,88649],{"class":269},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[28,88651,88652],{"class":30,"line":1776},[28,88653,88654],{"class":269},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[28,88656,88657],{"class":30,"line":1805},[28,88658,88659],{"class":269},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[28,88661,88662,88664,88666,88668,88671,88673,88676,88678,88680,88682,88684],{"class":30,"line":1810},[28,88663,11298],{"class":207},[28,88665,87914],{"class":38},[28,88667,13641],{"class":207},[28,88669,88670],{"class":38}," JSON",[28,88672,768],{"class":211},[28,88674,88675],{"class":34},"parse",[28,88677,212],{"class":211},[28,88679,71715],{"class":38},[28,88681,768],{"class":211},[28,88683,71720],{"class":34},[28,88685,71723],{"class":211},[28,88687,88688,88690,88692],{"class":30,"line":1827},[28,88689,73804],{"class":211},[28,88691,58298],{"class":34},[28,88693,88106],{"class":211},[28,88695,88696,88698,88700],{"class":30,"line":1832},[28,88697,88424],{"class":211},[28,88699,257],{"class":207},[28,88701,88702],{"class":64}," '123'\n",[28,88704,88705,88707,88709],{"class":30,"line":1837},[28,88706,73804],{"class":211},[28,88708,58298],{"class":34},[28,88710,70087],{"class":211},[28,88712,88713,88715,88717],{"class":30,"line":1842},[28,88714,52468],{"class":211},[28,88716,51864],{"class":51351},[28,88718,51358],{"class":211},[28,88720,88721,88723,88725],{"class":30,"line":1856},[28,88722,51836],{"class":211},[28,88724,51851],{"class":51351},[28,88726,51358],{"class":211},[28,88728,88729],{"class":30,"line":1861},[28,88730,2477],{"emptyLinePlaceholder":134},[28,88732,88733,88735,88737],{"class":30,"line":2654},[28,88734,51836],{"class":211},[28,88736,50686],{"class":51351},[28,88738,51358],{"class":211},[14,88740,88741],{},[1540,88742],{"alt":23,"src":88743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[149,88745,88747],{"id":88746},"_415-异常处理","4.15 异常处理",[161,88749,88750],{},[119,88751,88752],{},"throw抛异常",[14,88754,88755],{},[1540,88756],{"alt":23,"src":88757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[161,88759,88760],{"start":42},[119,88761,88762],{},"try\u002Fcatch 捕获错误信息",[14,88764,88765],{},[1540,88766],{"alt":23,"src":88767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[18,88769,88771],{"className":50684,"code":88770,"language":50686,"meta":23,"style":23},"\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",[25,88772,88773,88783,88797,88801,88809,88823,88843,88855,88863,88867,88875,88887,88895,88904,88911,88916,88935,88944,88955,88960,88970,88975,88980,88985,89002,89006,89011,89018,89030,89034,89046,89050,89054,89059,89064,89071,89079,89087,89091],{"__ignoreMap":23},[28,88774,88775,88777,88779,88781],{"class":30,"line":31},[28,88776,51348],{"class":211},[28,88778,51352],{"class":51351},[28,88780,51355],{"class":34},[28,88782,51358],{"class":211},[28,88784,88785,88787,88789,88791,88793,88795],{"class":30,"line":42},[28,88786,1120],{"class":211},[28,88788,50686],{"class":51351},[28,88790,51367],{"class":34},[28,88792,257],{"class":211},[28,88794,51372],{"class":64},[28,88796,51358],{"class":211},[28,88798,88799],{"class":30,"line":50},[28,88800,2477],{"emptyLinePlaceholder":134},[28,88802,88803,88805,88807],{"class":30,"line":58},[28,88804,1120],{"class":211},[28,88806,51385],{"class":51351},[28,88808,51358],{"class":211},[28,88810,88811,88813,88815,88817,88819,88821],{"class":30,"line":70},[28,88812,52195],{"class":211},[28,88814,51395],{"class":51351},[28,88816,51398],{"class":34},[28,88818,257],{"class":211},[28,88820,51403],{"class":64},[28,88822,51358],{"class":211},[28,88824,88825,88827,88829,88831,88833,88835,88837,88839,88841],{"class":30,"line":78},[28,88826,52195],{"class":211},[28,88828,51395],{"class":51351},[28,88830,14997],{"class":34},[28,88832,257],{"class":211},[28,88834,51442],{"class":64},[28,88836,51422],{"class":34},[28,88838,257],{"class":211},[28,88840,51449],{"class":64},[28,88842,51358],{"class":211},[28,88844,88845,88847,88849,88851,88853],{"class":30,"line":86},[28,88846,52195],{"class":211},[28,88848,51458],{"class":51351},[28,88850,51461],{"class":211},[28,88852,51458],{"class":51351},[28,88854,51358],{"class":211},[28,88856,88857,88859,88861],{"class":30,"line":97},[28,88858,51836],{"class":211},[28,88860,51385],{"class":51351},[28,88862,51358],{"class":211},[28,88864,88865],{"class":30,"line":108},[28,88866,2477],{"emptyLinePlaceholder":134},[28,88868,88869,88871,88873],{"class":30,"line":1407},[28,88870,1120],{"class":211},[28,88872,51851],{"class":51351},[28,88874,51358],{"class":211},[28,88876,88877,88879,88881,88883,88885],{"class":30,"line":1690},[28,88878,52195],{"class":211},[28,88880,14],{"class":51351},[28,88882,53545],{"class":211},[28,88884,14],{"class":51351},[28,88886,51358],{"class":211},[28,88888,88889,88891,88893],{"class":30,"line":1695},[28,88890,52195],{"class":211},[28,88892,51864],{"class":51351},[28,88894,51358],{"class":211},[28,88896,88897,88899,88902],{"class":30,"line":1701},[28,88898,70135],{"class":207},[28,88900,88901],{"class":34}," fn",[28,88903,10930],{"class":211},[28,88905,88906,88909],{"class":30,"line":1706},[28,88907,88908],{"class":207},"      try",[28,88910,15649],{"class":211},[28,88912,88913],{"class":30,"line":1720},[28,88914,88915],{"class":269},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[28,88917,88918,88920,88922,88924,88926,88928,88930,88933],{"class":30,"line":1725},[28,88919,61321],{"class":207},[28,88921,6902],{"class":38},[28,88923,13641],{"class":207},[28,88925,54447],{"class":211},[28,88927,54450],{"class":34},[28,88929,212],{"class":211},[28,88931,88932],{"class":64},"'.p'",[28,88934,218],{"class":211},[28,88936,88937,88940,88942],{"class":30,"line":1731},[28,88938,88939],{"class":211},"        p.style.color ",[28,88941,257],{"class":207},[28,88943,67102],{"class":64},[28,88945,88946,88949,88952],{"class":30,"line":1752},[28,88947,88948],{"class":211},"      } ",[28,88950,88951],{"class":207},"catch",[28,88953,88954],{"class":211}," (err) {\n",[28,88956,88957],{"class":30,"line":1757},[28,88958,88959],{"class":269},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[28,88961,88962,88965,88967],{"class":30,"line":1771},[28,88963,88964],{"class":211},"        console.",[28,88966,58298],{"class":34},[28,88968,88969],{"class":211},"(err.message)\n",[28,88971,88972],{"class":30,"line":1776},[28,88973,88974],{"class":269},"        \u002F\u002F 想要中断程序，需要加return\n",[28,88976,88977],{"class":30,"line":1805},[28,88978,88979],{"class":269},"        \u002F\u002F return\n",[28,88981,88982],{"class":30,"line":1810},[28,88983,88984],{"class":269},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[28,88986,88987,88990,88992,88995,88997,89000],{"class":30,"line":1827},[28,88988,88989],{"class":207},"        throw",[28,88991,11655],{"class":207},[28,88993,88994],{"class":34}," Error",[28,88996,212],{"class":211},[28,88998,88999],{"class":64},"'你看看，选择器错误了吧'",[28,89001,218],{"class":211},[28,89003,89004],{"class":30,"line":1832},[28,89005,52449],{"class":211},[28,89007,89008],{"class":30,"line":1837},[28,89009,89010],{"class":269},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[28,89012,89013,89016],{"class":30,"line":1842},[28,89014,89015],{"class":207},"      finally",[28,89017,15649],{"class":211},[28,89019,89020,89023,89025,89028],{"class":30,"line":1856},[28,89021,89022],{"class":34},"        alert",[28,89024,212],{"class":211},[28,89026,89027],{"class":64},"'弹出对话框'",[28,89029,218],{"class":211},[28,89031,89032],{"class":30,"line":1861},[28,89033,52449],{"class":211},[28,89035,89036,89038,89040,89042,89044],{"class":30,"line":2654},[28,89037,58295],{"class":211},[28,89039,58298],{"class":34},[28,89041,212],{"class":211},[28,89043,682],{"class":38},[28,89045,218],{"class":211},[28,89047,89048],{"class":30,"line":2668},[28,89049,2477],{"emptyLinePlaceholder":134},[28,89051,89052],{"class":30,"line":2676},[28,89053,2264],{"class":211},[28,89055,89056],{"class":30,"line":2681},[28,89057,89058],{"class":269},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[28,89060,89061],{"class":30,"line":2687},[28,89062,89063],{"class":269},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[28,89065,89066,89069],{"class":30,"line":2693},[28,89067,89068],{"class":34},"    fn",[28,89070,2053],{"class":211},[28,89072,89073,89075,89077],{"class":30,"line":2698},[28,89074,52468],{"class":211},[28,89076,51864],{"class":51351},[28,89078,51358],{"class":211},[28,89080,89081,89083,89085],{"class":30,"line":8025},[28,89082,51836],{"class":211},[28,89084,51851],{"class":51351},[28,89086,51358],{"class":211},[28,89088,89089],{"class":30,"line":8049},[28,89090,2477],{"emptyLinePlaceholder":134},[28,89092,89093,89095,89097],{"class":30,"line":8054},[28,89094,51836],{"class":211},[28,89096,50686],{"class":51351},[28,89098,51358],{"class":211},[14,89100,89101],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[161,89103,89104],{"start":50},[119,89105,89106],{},"debugger",[14,89108,89109],{},[1540,89110],{"alt":23,"src":89111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89113,89114],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[149,89116,89118],{"id":89117},"_416-处理this","4.16 处理this",[177,89120,89122],{"id":89121},"_4161-this的指向","4.16.1 this的指向",[161,89124,89125],{},[119,89126,89127],{},"普通函数的this",[14,89129,89130],{},[1540,89131],{"alt":23,"src":89132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[161,89134,89135],{"start":42},[119,89136,89137],{},"箭头函数的this",[14,89139,89140],{},[1540,89141],{"alt":23,"src":89142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89144,89145],{},[1540,89146],{"alt":23,"src":89147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89149,89150],{},[1540,89151],{"alt":23,"src":89152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[177,89154,89156],{"id":89155},"_4162-this的改变","4.16.2 this的改变",[14,89158,89159],{},"call() apply() bind()",[161,89161,89162],{},[119,89163,89164],{},"call()",[14,89166,89167],{},[1540,89168],{"alt":23,"src":89169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89171,89172],{},"两个作用：①调用函数；②改变this指向",[18,89174,89176],{"className":53118,"code":89175,"language":53120,"meta":23,"style":23},"\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",[25,89177,89178,89186,89194,89198,89203,89207,89212,89217,89222,89226,89231,89239],{"__ignoreMap":23},[28,89179,89180,89182,89184],{"class":30,"line":31},[28,89181,1120],{"class":211},[28,89183,51851],{"class":51351},[28,89185,51358],{"class":211},[28,89187,89188,89190,89192],{"class":30,"line":42},[28,89189,52195],{"class":211},[28,89191,51864],{"class":51351},[28,89193,51358],{"class":211},[28,89195,89196],{"class":30,"line":50},[28,89197,71574],{"class":211},[28,89199,89200],{"class":30,"line":58},[28,89201,89202],{"class":211},"      uname: 'pink'\n",[28,89204,89205],{"class":30,"line":70},[28,89206,2264],{"class":211},[28,89208,89209],{"class":30,"line":78},[28,89210,89211],{"class":211},"    function fn(x, y) {\n",[28,89213,89214],{"class":30,"line":86},[28,89215,89216],{"class":211},"      console.log(this)  \u002F\u002Fwindow\n",[28,89218,89219],{"class":30,"line":97},[28,89220,89221],{"class":211},"      console.log(x + y)\n",[28,89223,89224],{"class":30,"line":108},[28,89225,2264],{"class":211},[28,89227,89228],{"class":30,"line":1407},[28,89229,89230],{"class":211},"    fn.call(obj, 1, 2)\n",[28,89232,89233,89235,89237],{"class":30,"line":1690},[28,89234,52468],{"class":211},[28,89236,51864],{"class":51351},[28,89238,51358],{"class":211},[28,89240,89241,89243,89245],{"class":30,"line":1695},[28,89242,51836],{"class":211},[28,89244,51851],{"class":51351},[28,89246,51358],{"class":211},[14,89248,89249],{},[1540,89250],{"alt":23,"src":89251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[161,89253,89254],{"start":42},[119,89255,89256],{},"apply()",[14,89258,89259],{},[1540,89260],{"alt":23,"src":89261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89263,89172],{},[14,89265,89266],{},"call传递的是普通参数，而apply必须传递的是数组",[18,89268,89270],{"className":50684,"code":89269,"language":50686,"meta":23,"style":23},"\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",[25,89271,89272,89282,89296,89300,89308,89322,89342,89354,89362,89366,89374,89382,89392,89399,89403,89408,89424,89436,89450,89454,89459,89478,89483,89487,89492,89497,89505,89510,89532,89537,89553,89569,89581,89585,89590,89609,89617,89625,89629],{"__ignoreMap":23},[28,89273,89274,89276,89278,89280],{"class":30,"line":31},[28,89275,51348],{"class":211},[28,89277,51352],{"class":51351},[28,89279,51355],{"class":34},[28,89281,51358],{"class":211},[28,89283,89284,89286,89288,89290,89292,89294],{"class":30,"line":42},[28,89285,1120],{"class":211},[28,89287,50686],{"class":51351},[28,89289,51367],{"class":34},[28,89291,257],{"class":211},[28,89293,51372],{"class":64},[28,89295,51358],{"class":211},[28,89297,89298],{"class":30,"line":50},[28,89299,2477],{"emptyLinePlaceholder":134},[28,89301,89302,89304,89306],{"class":30,"line":58},[28,89303,1120],{"class":211},[28,89305,51385],{"class":51351},[28,89307,51358],{"class":211},[28,89309,89310,89312,89314,89316,89318,89320],{"class":30,"line":70},[28,89311,52195],{"class":211},[28,89313,51395],{"class":51351},[28,89315,51398],{"class":34},[28,89317,257],{"class":211},[28,89319,51403],{"class":64},[28,89321,51358],{"class":211},[28,89323,89324,89326,89328,89330,89332,89334,89336,89338,89340],{"class":30,"line":78},[28,89325,52195],{"class":211},[28,89327,51395],{"class":51351},[28,89329,14997],{"class":34},[28,89331,257],{"class":211},[28,89333,51442],{"class":64},[28,89335,51422],{"class":34},[28,89337,257],{"class":211},[28,89339,51449],{"class":64},[28,89341,51358],{"class":211},[28,89343,89344,89346,89348,89350,89352],{"class":30,"line":86},[28,89345,52195],{"class":211},[28,89347,51458],{"class":51351},[28,89349,51461],{"class":211},[28,89351,51458],{"class":51351},[28,89353,51358],{"class":211},[28,89355,89356,89358,89360],{"class":30,"line":97},[28,89357,51836],{"class":211},[28,89359,51385],{"class":51351},[28,89361,51358],{"class":211},[28,89363,89364],{"class":30,"line":108},[28,89365,2477],{"emptyLinePlaceholder":134},[28,89367,89368,89370,89372],{"class":30,"line":1407},[28,89369,1120],{"class":211},[28,89371,51851],{"class":51351},[28,89373,51358],{"class":211},[28,89375,89376,89378,89380],{"class":30,"line":1690},[28,89377,52195],{"class":211},[28,89379,51864],{"class":51351},[28,89381,51358],{"class":211},[28,89383,89384,89386,89388,89390],{"class":30,"line":1695},[28,89385,11298],{"class":207},[28,89387,70022],{"class":38},[28,89389,13641],{"class":207},[28,89391,15649],{"class":211},[28,89393,89394,89396],{"class":30,"line":1701},[28,89395,71677],{"class":211},[28,89397,89398],{"class":38},"18\n",[28,89400,89401],{"class":30,"line":1706},[28,89402,2264],{"class":211},[28,89404,89405],{"class":30,"line":1720},[28,89406,89407],{"class":269},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[28,89409,89410,89412,89414,89416,89418,89420,89422],{"class":30,"line":1725},[28,89411,70135],{"class":207},[28,89413,88901],{"class":34},[28,89415,212],{"class":211},[28,89417,1030],{"class":5293},[28,89419,12512],{"class":211},[28,89421,1055],{"class":5293},[28,89423,12519],{"class":211},[28,89425,89426,89428,89430,89432,89434],{"class":30,"line":1731},[28,89427,58295],{"class":211},[28,89429,58298],{"class":34},[28,89431,212],{"class":211},[28,89433,87044],{"class":38},[28,89435,218],{"class":211},[28,89437,89438,89440,89442,89445,89447],{"class":30,"line":1752},[28,89439,58295],{"class":211},[28,89441,58298],{"class":34},[28,89443,89444],{"class":211},"(x ",[28,89446,691],{"class":207},[28,89448,89449],{"class":211}," y)\n",[28,89451,89452],{"class":30,"line":1757},[28,89453,2264],{"class":211},[28,89455,89456],{"class":30,"line":1771},[28,89457,89458],{"class":269},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[28,89460,89461,89464,89467,89470,89472,89474,89476],{"class":30,"line":1776},[28,89462,89463],{"class":211},"    fn.",[28,89465,89466],{"class":34},"apply",[28,89468,89469],{"class":211},"(obj, [",[28,89471,427],{"class":38},[28,89473,12512],{"class":211},[28,89475,288],{"class":38},[28,89477,4734],{"class":211},[28,89479,89480],{"class":30,"line":1805},[28,89481,89482],{"class":269},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[28,89484,89485],{"class":30,"line":1810},[28,89486,2477],{"emptyLinePlaceholder":134},[28,89488,89489],{"class":30,"line":1827},[28,89490,89491],{"class":269},"    \u002F\u002F 使用场景：求数组最大值\n",[28,89493,89494],{"class":30,"line":1832},[28,89495,89496],{"class":269},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[28,89498,89499,89502],{"class":30,"line":1837},[28,89500,89501],{"class":269},"    \u002F\u002F console.log(max)",[28,89503,89504],{"class":269},"   \u002F\u002F3\n",[28,89506,89507],{"class":30,"line":1842},[28,89508,89509],{"class":269},"    \u002F\u002F 指向空或者Math都是可以的\n",[28,89511,89512,89514,89516,89518,89520,89522,89524,89526,89528,89530],{"class":30,"line":1856},[28,89513,11298],{"class":207},[28,89515,57746],{"class":38},[28,89517,13641],{"class":207},[28,89519,52277],{"class":211},[28,89521,521],{"class":38},[28,89523,12512],{"class":211},[28,89525,714],{"class":38},[28,89527,12512],{"class":211},[28,89529,745],{"class":38},[28,89531,33297],{"class":211},[28,89533,89534],{"class":30,"line":1861},[28,89535,89536],{"class":269},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[28,89538,89539,89541,89543,89545,89548,89550],{"class":30,"line":2654},[28,89540,11298],{"class":207},[28,89542,6028],{"class":38},[28,89544,13641],{"class":207},[28,89546,89547],{"class":211}," Math.max.",[28,89549,89466],{"class":34},[28,89551,89552],{"class":211},"(Math, arr)\n",[28,89554,89555,89557,89560,89562,89565,89567],{"class":30,"line":2668},[28,89556,11298],{"class":207},[28,89558,89559],{"class":38}," min",[28,89561,13641],{"class":207},[28,89563,89564],{"class":211}," Math.min.",[28,89566,89466],{"class":34},[28,89568,89552],{"class":211},[28,89570,89571,89573,89575,89578],{"class":30,"line":2676},[28,89572,73804],{"class":211},[28,89574,58298],{"class":34},[28,89576,89577],{"class":211},"(max, min)     ",[28,89579,89580],{"class":269},"\u002F\u002F100,4\n",[28,89582,89583],{"class":30,"line":2681},[28,89584,2477],{"emptyLinePlaceholder":134},[28,89586,89587],{"class":30,"line":2687},[28,89588,89589],{"class":269},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[28,89591,89592,89594,89596,89599,89601,89603,89606],{"class":30,"line":2693},[28,89593,73804],{"class":211},[28,89595,58298],{"class":34},[28,89597,89598],{"class":211},"(Max.",[28,89600,6092],{"class":34},[28,89602,212],{"class":211},[28,89604,89605],{"class":207},"...",[28,89607,89608],{"class":211},"arr))\n",[28,89610,89611,89613,89615],{"class":30,"line":2698},[28,89612,52468],{"class":211},[28,89614,51864],{"class":51351},[28,89616,51358],{"class":211},[28,89618,89619,89621,89623],{"class":30,"line":8025},[28,89620,51836],{"class":211},[28,89622,51851],{"class":51351},[28,89624,51358],{"class":211},[28,89626,89627],{"class":30,"line":8049},[28,89628,2477],{"emptyLinePlaceholder":134},[28,89630,89631,89633,89635],{"class":30,"line":8054},[28,89632,51836],{"class":211},[28,89634,50686],{"class":51351},[28,89636,51358],{"class":211},[14,89638,89639],{},[1540,89640],{"alt":23,"src":89641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[161,89643,89644],{"start":50},[119,89645,89646],{},"bind()",[14,89648,89649],{},[1540,89650],{"alt":23,"src":89651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89653,89654],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89656,89657],{},"bind的语法跟call很相似",[18,89659,89661],{"className":53118,"code":89660,"language":53120,"meta":23,"style":23},"\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",[25,89662,89663,89671,89679,89683,89688,89692,89696,89701,89705,89710,89715,89720,89725,89730,89735,89740,89744,89752],{"__ignoreMap":23},[28,89664,89665,89667,89669],{"class":30,"line":31},[28,89666,1120],{"class":211},[28,89668,51851],{"class":51351},[28,89670,51358],{"class":211},[28,89672,89673,89675,89677],{"class":30,"line":42},[28,89674,52195],{"class":211},[28,89676,51864],{"class":51351},[28,89678,51358],{"class":211},[28,89680,89681],{"class":30,"line":50},[28,89682,71574],{"class":211},[28,89684,89685],{"class":30,"line":58},[28,89686,89687],{"class":211},"      age: 18\n",[28,89689,89690],{"class":30,"line":70},[28,89691,2264],{"class":211},[28,89693,89694],{"class":30,"line":78},[28,89695,77194],{"class":211},[28,89697,89698],{"class":30,"line":86},[28,89699,89700],{"class":211},"      console.log(this)\n",[28,89702,89703],{"class":30,"line":97},[28,89704,2264],{"class":211},[28,89706,89707],{"class":30,"line":108},[28,89708,89709],{"class":211},"    \u002F\u002F 1.bind 不会调用函数\n",[28,89711,89712],{"class":30,"line":1407},[28,89713,89714],{"class":211},"    \u002F\u002F 2.bind能改变this的指向\n",[28,89716,89717],{"class":30,"line":1690},[28,89718,89719],{"class":211},"    fn.bind()\n",[28,89721,89722],{"class":30,"line":1695},[28,89723,89724],{"class":211},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[28,89726,89727],{"class":30,"line":1701},[28,89728,89729],{"class":211},"    const fun = fn.bind(obj)\n",[28,89731,89732],{"class":30,"line":1706},[28,89733,89734],{"class":211},"    \u002F\u002F console.log(fun)\n",[28,89736,89737],{"class":30,"line":1720},[28,89738,89739],{"class":211},"    \u002F\u002F 调用,查看this的指向\n",[28,89741,89742],{"class":30,"line":1725},[28,89743,52702],{"class":211},[28,89745,89746,89748,89750],{"class":30,"line":1731},[28,89747,52468],{"class":211},[28,89749,51864],{"class":51351},[28,89751,51358],{"class":211},[28,89753,89754,89756,89758],{"class":30,"line":1752},[28,89755,51836],{"class":211},[28,89757,51851],{"class":51351},[28,89759,51358],{"class":211},[14,89761,89762],{},[1540,89763],{"alt":23,"src":89764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[161,89766,89767],{"start":58},[119,89768,89769],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[18,89771,89773],{"className":53118,"code":89772,"language":53120,"meta":23,"style":23},"\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",[25,89774,89775,89783,89796,89804,89809,89813,89818,89823,89828,89833,89838,89843,89848,89853,89857,89865],{"__ignoreMap":23},[28,89776,89777,89779,89781],{"class":30,"line":31},[28,89778,1120],{"class":211},[28,89780,51851],{"class":51351},[28,89782,51358],{"class":211},[28,89784,89785,89787,89789,89792,89794],{"class":30,"line":42},[28,89786,52195],{"class":211},[28,89788,53938],{"class":51351},[28,89790,89791],{"class":211},">禁用\u003C\u002F",[28,89793,53938],{"class":51351},[28,89795,51358],{"class":211},[28,89797,89798,89800,89802],{"class":30,"line":50},[28,89799,52195],{"class":211},[28,89801,51864],{"class":51351},[28,89803,51358],{"class":211},[28,89805,89806],{"class":30,"line":58},[28,89807,89808],{"class":211},"    const btn = document.querySelector('button')\n",[28,89810,89811],{"class":30,"line":70},[28,89812,59067],{"class":211},[28,89814,89815],{"class":30,"line":78},[28,89816,89817],{"class":211},"      this.disabled = true\n",[28,89819,89820],{"class":30,"line":86},[28,89821,89822],{"class":211},"      \u002F\u002F 定时器是window进行调用的\n",[28,89824,89825],{"class":30,"line":97},[28,89826,89827],{"class":211},"      setTimeout(function () {\n",[28,89829,89830],{"class":30,"line":108},[28,89831,89832],{"class":211},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[28,89834,89835],{"class":30,"line":1407},[28,89836,89837],{"class":211},"        this.disabled = false\n",[28,89839,89840],{"class":30,"line":1690},[28,89841,89842],{"class":211},"      }.bind(this), 2000)\n",[28,89844,89845],{"class":30,"line":1695},[28,89846,89847],{"class":211},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[28,89849,89850],{"class":30,"line":1701},[28,89851,89852],{"class":211},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[28,89854,89855],{"class":30,"line":1706},[28,89856,33512],{"class":211},[28,89858,89859,89861,89863],{"class":30,"line":1720},[28,89860,52468],{"class":211},[28,89862,51864],{"class":51351},[28,89864,51358],{"class":211},[28,89866,89867,89869,89871],{"class":30,"line":1725},[28,89868,51836],{"class":211},[28,89870,51851],{"class":51351},[28,89872,51358],{"class":211},[161,89874,89875],{"start":70},[119,89876,22030],{},[14,89878,89879],{},[1540,89880],{"alt":23,"src":89881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[149,89883,89885],{"id":89884},"_417-性能优化","4.17 性能优化",[177,89887,89889],{"id":89888},"_4171-防抖","4.17.1 防抖",[14,89891,89892],{},[1540,89893],{"alt":23,"src":89894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89896,89897],{},[359,89898,89899],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89901,89902],{},"防抖实现方式：",[116,89904,89905],{},[119,89906,89907],{},"lodash 提供了防抖处理",[14,89909,89910],{},"_.debounce(func,[wait=0],[options={}])",[14,89912,89913],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[18,89915,89917],{"className":50684,"code":89916,"language":50686,"meta":23,"style":23},"\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",[25,89918,89919,89929,89943,89947,89955,89969,89989,90001,90009,90015,90025,90037,90049,90060,90072,90082,90092,90105,90109,90117,90125,90129,90137,90155,90173,90181,90200,90210,90219,90230,90235,90239,90244,90249,90254,90279,90287,90295,90299],{"__ignoreMap":23},[28,89920,89921,89923,89925,89927],{"class":30,"line":31},[28,89922,51348],{"class":211},[28,89924,51352],{"class":51351},[28,89926,51355],{"class":34},[28,89928,51358],{"class":211},[28,89930,89931,89933,89935,89937,89939,89941],{"class":30,"line":42},[28,89932,1120],{"class":211},[28,89934,50686],{"class":51351},[28,89936,51367],{"class":34},[28,89938,257],{"class":211},[28,89940,51372],{"class":64},[28,89942,51358],{"class":211},[28,89944,89945],{"class":30,"line":50},[28,89946,2477],{"emptyLinePlaceholder":134},[28,89948,89949,89951,89953],{"class":30,"line":58},[28,89950,1120],{"class":211},[28,89952,51385],{"class":51351},[28,89954,51358],{"class":211},[28,89956,89957,89959,89961,89963,89965,89967],{"class":30,"line":70},[28,89958,52195],{"class":211},[28,89960,51395],{"class":51351},[28,89962,51398],{"class":34},[28,89964,257],{"class":211},[28,89966,51403],{"class":64},[28,89968,51358],{"class":211},[28,89970,89971,89973,89975,89977,89979,89981,89983,89985,89987],{"class":30,"line":78},[28,89972,52195],{"class":211},[28,89974,51395],{"class":51351},[28,89976,14997],{"class":34},[28,89978,257],{"class":211},[28,89980,51442],{"class":64},[28,89982,51422],{"class":34},[28,89984,257],{"class":211},[28,89986,51449],{"class":64},[28,89988,51358],{"class":211},[28,89990,89991,89993,89995,89997,89999],{"class":30,"line":86},[28,89992,52195],{"class":211},[28,89994,51458],{"class":51351},[28,89996,51461],{"class":211},[28,89998,51458],{"class":51351},[28,90000,51358],{"class":211},[28,90002,90003,90005,90007],{"class":30,"line":97},[28,90004,52195],{"class":211},[28,90006,126],{"class":51351},[28,90008,51358],{"class":211},[28,90010,90011,90013],{"class":30,"line":108},[28,90012,54803],{"class":34},[28,90014,15649],{"class":211},[28,90016,90017,90019,90021,90023],{"class":30,"line":1407},[28,90018,72647],{"class":38},[28,90020,51488],{"class":211},[28,90022,60556],{"class":38},[28,90024,1370],{"class":211},[28,90026,90027,90029,90031,90033,90035],{"class":30,"line":1690},[28,90028,54822],{"class":38},[28,90030,51488],{"class":211},[28,90032,1800],{"class":38},[28,90034,51543],{"class":207},[28,90036,1370],{"class":211},[28,90038,90039,90041,90043,90045,90047],{"class":30,"line":1695},[28,90040,54836],{"class":38},[28,90042,51488],{"class":211},[28,90044,1800],{"class":38},[28,90046,51543],{"class":207},[28,90048,1370],{"class":211},[28,90050,90051,90053,90055,90058],{"class":30,"line":1701},[28,90052,54935],{"class":38},[28,90054,51488],{"class":211},[28,90056,90057],{"class":38},"gray",[28,90059,1370],{"class":211},[28,90061,90062,90064,90066,90068,90070],{"class":30,"line":1706},[28,90063,54973],{"class":38},[28,90065,51488],{"class":211},[28,90067,1035],{"class":38},[28,90069,51543],{"class":207},[28,90071,1370],{"class":211},[28,90073,90074,90076,90078,90080],{"class":30,"line":1720},[28,90075,57467],{"class":38},[28,90077,51488],{"class":211},[28,90079,60893],{"class":38},[28,90081,1370],{"class":211},[28,90083,90084,90086,90088,90090],{"class":30,"line":1725},[28,90085,57337],{"class":38},[28,90087,51488],{"class":211},[28,90089,51643],{"class":38},[28,90091,1370],{"class":211},[28,90093,90094,90097,90099,90101,90103],{"class":30,"line":1731},[28,90095,90096],{"class":38},"      padding-top",[28,90098,51488],{"class":211},[28,90100,529],{"class":38},[28,90102,51543],{"class":207},[28,90104,1370],{"class":211},[28,90106,90107],{"class":30,"line":1752},[28,90108,2264],{"class":211},[28,90110,90111,90113,90115],{"class":30,"line":1757},[28,90112,52468],{"class":211},[28,90114,126],{"class":51351},[28,90116,51358],{"class":211},[28,90118,90119,90121,90123],{"class":30,"line":1771},[28,90120,51836],{"class":211},[28,90122,51385],{"class":51351},[28,90124,51358],{"class":211},[28,90126,90127],{"class":30,"line":1776},[28,90128,2477],{"emptyLinePlaceholder":134},[28,90130,90131,90133,90135],{"class":30,"line":1805},[28,90132,1120],{"class":211},[28,90134,51851],{"class":51351},[28,90136,51358],{"class":211},[28,90138,90139,90141,90143,90145,90147,90149,90151,90153],{"class":30,"line":1810},[28,90140,52195],{"class":211},[28,90142,51662],{"class":51351},[28,90144,53537],{"class":34},[28,90146,257],{"class":211},[28,90148,53542],{"class":64},[28,90150,55365],{"class":211},[28,90152,51662],{"class":51351},[28,90154,51358],{"class":211},[28,90156,90157,90159,90161,90163,90165,90167,90169,90171],{"class":30,"line":1827},[28,90158,52195],{"class":211},[28,90160,51864],{"class":51351},[28,90162,55290],{"class":34},[28,90164,257],{"class":211},[28,90166,88325],{"class":64},[28,90168,55365],{"class":211},[28,90170,51864],{"class":51351},[28,90172,51358],{"class":211},[28,90174,90175,90177,90179],{"class":30,"line":1832},[28,90176,52195],{"class":211},[28,90178,51864],{"class":51351},[28,90180,51358],{"class":211},[28,90182,90183,90185,90187,90189,90191,90193,90195,90198],{"class":30,"line":1837},[28,90184,11298],{"class":207},[28,90186,86984],{"class":38},[28,90188,13641],{"class":207},[28,90190,54447],{"class":211},[28,90192,54450],{"class":34},[28,90194,212],{"class":211},[28,90196,90197],{"class":64},"'.box'",[28,90199,218],{"class":211},[28,90201,90202,90204,90206,90208],{"class":30,"line":1842},[28,90203,52270],{"class":207},[28,90205,9515],{"class":211},[28,90207,257],{"class":207},[28,90209,47384],{"class":38},[28,90211,90212,90214,90217],{"class":30,"line":1856},[28,90213,70135],{"class":207},[28,90215,90216],{"class":34}," mouseMove",[28,90218,10930],{"class":211},[28,90220,90221,90224,90226,90228],{"class":30,"line":1861},[28,90222,90223],{"class":211},"      box.innerHTML ",[28,90225,257],{"class":207},[28,90227,3109],{"class":211},[28,90229,2779],{"class":207},[28,90231,90232],{"class":30,"line":2654},[28,90233,90234],{"class":269},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[28,90236,90237],{"class":30,"line":2668},[28,90238,2264],{"class":211},[28,90240,90241],{"class":30,"line":2676},[28,90242,90243],{"class":269},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[28,90245,90246],{"class":30,"line":2681},[28,90247,90248],{"class":269},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[28,90250,90251],{"class":30,"line":2687},[28,90252,90253],{"class":269},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[28,90255,90256,90259,90261,90263,90266,90269,90272,90275,90277],{"class":30,"line":2693},[28,90257,90258],{"class":211},"    box.",[28,90260,57864],{"class":34},[28,90262,212],{"class":211},[28,90264,90265],{"class":64},"'mousemove'",[28,90267,90268],{"class":211},", _.",[28,90270,90271],{"class":34},"debounce",[28,90273,90274],{"class":211},"(mouseMove, ",[28,90276,65125],{"class":38},[28,90278,30548],{"class":211},[28,90280,90281,90283,90285],{"class":30,"line":2698},[28,90282,52468],{"class":211},[28,90284,51864],{"class":51351},[28,90286,51358],{"class":211},[28,90288,90289,90291,90293],{"class":30,"line":8025},[28,90290,51836],{"class":211},[28,90292,51851],{"class":51351},[28,90294,51358],{"class":211},[28,90296,90297],{"class":30,"line":8049},[28,90298,2477],{"emptyLinePlaceholder":134},[28,90300,90301,90303,90305],{"class":30,"line":8054},[28,90302,51836],{"class":211},[28,90304,50686],{"class":51351},[28,90306,51358],{"class":211},[116,90308,90309],{},[119,90310,90311],{},"手写一个防抖函数来处理",[14,90313,90314],{},"防抖的核心就是利用定时器来实现的：",[14,90316,90317],{},"①声明一个定时器变量",[14,90319,90320],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90322,90323],{},"③如果没有定时器则开启定时器，记得存到变量里面",[18,90325,90327],{"className":50684,"code":90326,"language":50686,"meta":23,"style":23},"\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",[25,90328,90329,90339,90353,90357,90365,90379,90399,90411,90419,90425,90435,90447,90459,90469,90481,90491,90501,90513,90517,90525,90533,90537,90545,90563,90581,90589,90607,90617,90625,90635,90639,90643,90647,90652,90657,90662,90667,90672,90677,90695,90702,90707,90715,90720,90733,90749,90759,90764,90768,90772,90792,90796,90801,90806,90811,90816,90824,90832,90836],{"__ignoreMap":23},[28,90330,90331,90333,90335,90337],{"class":30,"line":31},[28,90332,51348],{"class":211},[28,90334,51352],{"class":51351},[28,90336,51355],{"class":34},[28,90338,51358],{"class":211},[28,90340,90341,90343,90345,90347,90349,90351],{"class":30,"line":42},[28,90342,1120],{"class":211},[28,90344,50686],{"class":51351},[28,90346,51367],{"class":34},[28,90348,257],{"class":211},[28,90350,51372],{"class":64},[28,90352,51358],{"class":211},[28,90354,90355],{"class":30,"line":50},[28,90356,2477],{"emptyLinePlaceholder":134},[28,90358,90359,90361,90363],{"class":30,"line":58},[28,90360,1120],{"class":211},[28,90362,51385],{"class":51351},[28,90364,51358],{"class":211},[28,90366,90367,90369,90371,90373,90375,90377],{"class":30,"line":70},[28,90368,52195],{"class":211},[28,90370,51395],{"class":51351},[28,90372,51398],{"class":34},[28,90374,257],{"class":211},[28,90376,51403],{"class":64},[28,90378,51358],{"class":211},[28,90380,90381,90383,90385,90387,90389,90391,90393,90395,90397],{"class":30,"line":78},[28,90382,52195],{"class":211},[28,90384,51395],{"class":51351},[28,90386,14997],{"class":34},[28,90388,257],{"class":211},[28,90390,51442],{"class":64},[28,90392,51422],{"class":34},[28,90394,257],{"class":211},[28,90396,51449],{"class":64},[28,90398,51358],{"class":211},[28,90400,90401,90403,90405,90407,90409],{"class":30,"line":86},[28,90402,52195],{"class":211},[28,90404,51458],{"class":51351},[28,90406,51461],{"class":211},[28,90408,51458],{"class":51351},[28,90410,51358],{"class":211},[28,90412,90413,90415,90417],{"class":30,"line":97},[28,90414,52195],{"class":211},[28,90416,126],{"class":51351},[28,90418,51358],{"class":211},[28,90420,90421,90423],{"class":30,"line":108},[28,90422,54803],{"class":34},[28,90424,15649],{"class":211},[28,90426,90427,90429,90431,90433],{"class":30,"line":1407},[28,90428,72647],{"class":38},[28,90430,51488],{"class":211},[28,90432,60556],{"class":38},[28,90434,1370],{"class":211},[28,90436,90437,90439,90441,90443,90445],{"class":30,"line":1690},[28,90438,54822],{"class":38},[28,90440,51488],{"class":211},[28,90442,1800],{"class":38},[28,90444,51543],{"class":207},[28,90446,1370],{"class":211},[28,90448,90449,90451,90453,90455,90457],{"class":30,"line":1695},[28,90450,54836],{"class":38},[28,90452,51488],{"class":211},[28,90454,1800],{"class":38},[28,90456,51543],{"class":207},[28,90458,1370],{"class":211},[28,90460,90461,90463,90465,90467],{"class":30,"line":1701},[28,90462,54935],{"class":38},[28,90464,51488],{"class":211},[28,90466,90057],{"class":38},[28,90468,1370],{"class":211},[28,90470,90471,90473,90475,90477,90479],{"class":30,"line":1706},[28,90472,54973],{"class":38},[28,90474,51488],{"class":211},[28,90476,1035],{"class":38},[28,90478,51543],{"class":207},[28,90480,1370],{"class":211},[28,90482,90483,90485,90487,90489],{"class":30,"line":1720},[28,90484,57467],{"class":38},[28,90486,51488],{"class":211},[28,90488,60893],{"class":38},[28,90490,1370],{"class":211},[28,90492,90493,90495,90497,90499],{"class":30,"line":1725},[28,90494,57337],{"class":38},[28,90496,51488],{"class":211},[28,90498,51643],{"class":38},[28,90500,1370],{"class":211},[28,90502,90503,90505,90507,90509,90511],{"class":30,"line":1731},[28,90504,90096],{"class":38},[28,90506,51488],{"class":211},[28,90508,529],{"class":38},[28,90510,51543],{"class":207},[28,90512,1370],{"class":211},[28,90514,90515],{"class":30,"line":1752},[28,90516,2264],{"class":211},[28,90518,90519,90521,90523],{"class":30,"line":1757},[28,90520,52468],{"class":211},[28,90522,126],{"class":51351},[28,90524,51358],{"class":211},[28,90526,90527,90529,90531],{"class":30,"line":1771},[28,90528,51836],{"class":211},[28,90530,51385],{"class":51351},[28,90532,51358],{"class":211},[28,90534,90535],{"class":30,"line":1776},[28,90536,2477],{"emptyLinePlaceholder":134},[28,90538,90539,90541,90543],{"class":30,"line":1805},[28,90540,1120],{"class":211},[28,90542,51851],{"class":51351},[28,90544,51358],{"class":211},[28,90546,90547,90549,90551,90553,90555,90557,90559,90561],{"class":30,"line":1810},[28,90548,52195],{"class":211},[28,90550,51662],{"class":51351},[28,90552,53537],{"class":34},[28,90554,257],{"class":211},[28,90556,53542],{"class":64},[28,90558,55365],{"class":211},[28,90560,51662],{"class":51351},[28,90562,51358],{"class":211},[28,90564,90565,90567,90569,90571,90573,90575,90577,90579],{"class":30,"line":1827},[28,90566,52195],{"class":211},[28,90568,51864],{"class":51351},[28,90570,55290],{"class":34},[28,90572,257],{"class":211},[28,90574,88325],{"class":64},[28,90576,55365],{"class":211},[28,90578,51864],{"class":51351},[28,90580,51358],{"class":211},[28,90582,90583,90585,90587],{"class":30,"line":1832},[28,90584,52195],{"class":211},[28,90586,51864],{"class":51351},[28,90588,51358],{"class":211},[28,90590,90591,90593,90595,90597,90599,90601,90603,90605],{"class":30,"line":1837},[28,90592,11298],{"class":207},[28,90594,86984],{"class":38},[28,90596,13641],{"class":207},[28,90598,54447],{"class":211},[28,90600,54450],{"class":34},[28,90602,212],{"class":211},[28,90604,90197],{"class":64},[28,90606,218],{"class":211},[28,90608,90609,90611,90613,90615],{"class":30,"line":1842},[28,90610,52270],{"class":207},[28,90612,9515],{"class":211},[28,90614,257],{"class":207},[28,90616,47384],{"class":38},[28,90618,90619,90621,90623],{"class":30,"line":1856},[28,90620,70135],{"class":207},[28,90622,90216],{"class":34},[28,90624,10930],{"class":211},[28,90626,90627,90629,90631,90633],{"class":30,"line":1861},[28,90628,90223],{"class":211},[28,90630,257],{"class":207},[28,90632,3109],{"class":211},[28,90634,2779],{"class":207},[28,90636,90637],{"class":30,"line":2654},[28,90638,90234],{"class":269},[28,90640,90641],{"class":30,"line":2668},[28,90642,2264],{"class":211},[28,90644,90645],{"class":30,"line":2676},[28,90646,90243],{"class":269},[28,90648,90649],{"class":30,"line":2681},[28,90650,90651],{"class":269},"    \u002F\u002F 手写防抖函数\n",[28,90653,90654],{"class":30,"line":2687},[28,90655,90656],{"class":269},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[28,90658,90659],{"class":30,"line":2693},[28,90660,90661],{"class":269},"    \u002F\u002F 1.声明定时器变量\n",[28,90663,90664],{"class":30,"line":2698},[28,90665,90666],{"class":269},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[28,90668,90669],{"class":30,"line":8025},[28,90670,90671],{"class":269},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[28,90673,90674],{"class":30,"line":8049},[28,90675,90676],{"class":269},"    \u002F\u002F 4.定时器里面写函数调用\n",[28,90678,90679,90681,90684,90686,90689,90691,90693],{"class":30,"line":8054},[28,90680,70135],{"class":207},[28,90682,90683],{"class":34}," debounce",[28,90685,212],{"class":211},[28,90687,90688],{"class":5293},"fn",[28,90690,12512],{"class":211},[28,90692,930],{"class":5293},[28,90694,12519],{"class":211},[28,90696,90697,90699],{"class":30,"line":8060},[28,90698,79823],{"class":207},[28,90700,90701],{"class":211}," timer\n",[28,90703,90704],{"class":30,"line":8087},[28,90705,90706],{"class":269},"      \u002F\u002F return 返回一个匿名函数\n",[28,90708,90709,90711,90713],{"class":30,"line":8092},[28,90710,74033],{"class":207},[28,90712,58969],{"class":207},[28,90714,54503],{"class":211},[28,90716,90717],{"class":30,"line":8098},[28,90718,90719],{"class":269},"        \u002F\u002F 这里边写第二三四步\n",[28,90721,90722,90724,90727,90730],{"class":30,"line":8110},[28,90723,2574],{"class":207},[28,90725,90726],{"class":211}," (timer) ",[28,90728,90729],{"class":34},"clearTimeout",[28,90731,90732],{"class":211},"(timer)\n",[28,90734,90735,90738,90740,90743,90745,90747],{"class":30,"line":8122},[28,90736,90737],{"class":211},"        timer ",[28,90739,257],{"class":207},[28,90741,90742],{"class":34}," setTimeout",[28,90744,212],{"class":211},[28,90746,54500],{"class":207},[28,90748,54503],{"class":211},[28,90750,90751,90754,90756],{"class":30,"line":8134},[28,90752,90753],{"class":34},"          fn",[28,90755,13127],{"class":211},[28,90757,90758],{"class":269},"\u002F\u002F加小括号调用fn }, t)\n",[28,90760,90761],{"class":30,"line":9793},[28,90762,90763],{"class":211},"        }, t)\n",[28,90765,90766],{"class":30,"line":9818},[28,90767,52449],{"class":211},[28,90769,90770],{"class":30,"line":9841},[28,90771,2264],{"class":211},[28,90773,90774,90776,90778,90780,90782,90784,90786,90788,90790],{"class":30,"line":9865},[28,90775,90258],{"class":211},[28,90777,57864],{"class":34},[28,90779,212],{"class":211},[28,90781,90265],{"class":64},[28,90783,12512],{"class":211},[28,90785,90271],{"class":34},[28,90787,90274],{"class":211},[28,90789,65125],{"class":38},[28,90791,30548],{"class":211},[28,90793,90794],{"class":30,"line":9870},[28,90795,2477],{"emptyLinePlaceholder":134},[28,90797,90798],{"class":30,"line":9875},[28,90799,90800],{"class":269},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[28,90802,90803],{"class":30,"line":9880},[28,90804,90805],{"class":269},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[28,90807,90808],{"class":30,"line":9889},[28,90809,90810],{"class":269},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[28,90812,90813],{"class":30,"line":9894},[28,90814,90815],{"class":269},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[28,90817,90818,90820,90822],{"class":30,"line":9900},[28,90819,52468],{"class":211},[28,90821,51864],{"class":51351},[28,90823,51358],{"class":211},[28,90825,90826,90828,90830],{"class":30,"line":9921},[28,90827,51836],{"class":211},[28,90829,51851],{"class":51351},[28,90831,51358],{"class":211},[28,90833,90834],{"class":30,"line":9927},[28,90835,2477],{"emptyLinePlaceholder":134},[28,90837,90838,90840,90842],{"class":30,"line":9941},[28,90839,51836],{"class":211},[28,90841,50686],{"class":51351},[28,90843,51358],{"class":211},[177,90845,90847],{"id":90846},"_4172-节流","4.17.2 节流",[14,90849,90850],{},[1540,90851],{"alt":23,"src":90852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90854,90855],{},[1540,90856],{"alt":23,"src":90857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90859,90860],{},[359,90861,90862],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90864,90865],{},"实现方式：",[116,90867,90868],{},[119,90869,90870],{},"lodash 提供的节流函数来处理",[14,90872,90873],{},"_.throttle(func,[wait=0],[options=])",[14,90875,90876],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[18,90878,90880],{"className":50684,"code":90879,"language":50686,"meta":23,"style":23},"\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",[25,90881,90882,90892,90906,90910,90918,90932,90952,90964,90972,90978,90988,91000,91012,91022,91034,91044,91054,91066,91070,91078,91086,91090,91098,91116,91134,91142,91160,91170,91178,91188,91192,91196,91200,91205,91210,91231,91239,91247,91251],{"__ignoreMap":23},[28,90883,90884,90886,90888,90890],{"class":30,"line":31},[28,90885,51348],{"class":211},[28,90887,51352],{"class":51351},[28,90889,51355],{"class":34},[28,90891,51358],{"class":211},[28,90893,90894,90896,90898,90900,90902,90904],{"class":30,"line":42},[28,90895,1120],{"class":211},[28,90897,50686],{"class":51351},[28,90899,51367],{"class":34},[28,90901,257],{"class":211},[28,90903,51372],{"class":64},[28,90905,51358],{"class":211},[28,90907,90908],{"class":30,"line":50},[28,90909,2477],{"emptyLinePlaceholder":134},[28,90911,90912,90914,90916],{"class":30,"line":58},[28,90913,1120],{"class":211},[28,90915,51385],{"class":51351},[28,90917,51358],{"class":211},[28,90919,90920,90922,90924,90926,90928,90930],{"class":30,"line":70},[28,90921,52195],{"class":211},[28,90923,51395],{"class":51351},[28,90925,51398],{"class":34},[28,90927,257],{"class":211},[28,90929,51403],{"class":64},[28,90931,51358],{"class":211},[28,90933,90934,90936,90938,90940,90942,90944,90946,90948,90950],{"class":30,"line":78},[28,90935,52195],{"class":211},[28,90937,51395],{"class":51351},[28,90939,14997],{"class":34},[28,90941,257],{"class":211},[28,90943,51442],{"class":64},[28,90945,51422],{"class":34},[28,90947,257],{"class":211},[28,90949,51449],{"class":64},[28,90951,51358],{"class":211},[28,90953,90954,90956,90958,90960,90962],{"class":30,"line":86},[28,90955,52195],{"class":211},[28,90957,51458],{"class":51351},[28,90959,51461],{"class":211},[28,90961,51458],{"class":51351},[28,90963,51358],{"class":211},[28,90965,90966,90968,90970],{"class":30,"line":97},[28,90967,52195],{"class":211},[28,90969,126],{"class":51351},[28,90971,51358],{"class":211},[28,90973,90974,90976],{"class":30,"line":108},[28,90975,54803],{"class":34},[28,90977,15649],{"class":211},[28,90979,90980,90982,90984,90986],{"class":30,"line":1407},[28,90981,72647],{"class":38},[28,90983,51488],{"class":211},[28,90985,60556],{"class":38},[28,90987,1370],{"class":211},[28,90989,90990,90992,90994,90996,90998],{"class":30,"line":1690},[28,90991,54822],{"class":38},[28,90993,51488],{"class":211},[28,90995,1800],{"class":38},[28,90997,51543],{"class":207},[28,90999,1370],{"class":211},[28,91001,91002,91004,91006,91008,91010],{"class":30,"line":1695},[28,91003,54836],{"class":38},[28,91005,51488],{"class":211},[28,91007,1800],{"class":38},[28,91009,51543],{"class":207},[28,91011,1370],{"class":211},[28,91013,91014,91016,91018,91020],{"class":30,"line":1701},[28,91015,54935],{"class":38},[28,91017,51488],{"class":211},[28,91019,90057],{"class":38},[28,91021,1370],{"class":211},[28,91023,91024,91026,91028,91030,91032],{"class":30,"line":1706},[28,91025,54973],{"class":38},[28,91027,51488],{"class":211},[28,91029,1035],{"class":38},[28,91031,51543],{"class":207},[28,91033,1370],{"class":211},[28,91035,91036,91038,91040,91042],{"class":30,"line":1720},[28,91037,57467],{"class":38},[28,91039,51488],{"class":211},[28,91041,60893],{"class":38},[28,91043,1370],{"class":211},[28,91045,91046,91048,91050,91052],{"class":30,"line":1725},[28,91047,57337],{"class":38},[28,91049,51488],{"class":211},[28,91051,51643],{"class":38},[28,91053,1370],{"class":211},[28,91055,91056,91058,91060,91062,91064],{"class":30,"line":1731},[28,91057,90096],{"class":38},[28,91059,51488],{"class":211},[28,91061,529],{"class":38},[28,91063,51543],{"class":207},[28,91065,1370],{"class":211},[28,91067,91068],{"class":30,"line":1752},[28,91069,2264],{"class":211},[28,91071,91072,91074,91076],{"class":30,"line":1757},[28,91073,52468],{"class":211},[28,91075,126],{"class":51351},[28,91077,51358],{"class":211},[28,91079,91080,91082,91084],{"class":30,"line":1771},[28,91081,51836],{"class":211},[28,91083,51385],{"class":51351},[28,91085,51358],{"class":211},[28,91087,91088],{"class":30,"line":1776},[28,91089,2477],{"emptyLinePlaceholder":134},[28,91091,91092,91094,91096],{"class":30,"line":1805},[28,91093,1120],{"class":211},[28,91095,51851],{"class":51351},[28,91097,51358],{"class":211},[28,91099,91100,91102,91104,91106,91108,91110,91112,91114],{"class":30,"line":1810},[28,91101,52195],{"class":211},[28,91103,51662],{"class":51351},[28,91105,53537],{"class":34},[28,91107,257],{"class":211},[28,91109,53542],{"class":64},[28,91111,55365],{"class":211},[28,91113,51662],{"class":51351},[28,91115,51358],{"class":211},[28,91117,91118,91120,91122,91124,91126,91128,91130,91132],{"class":30,"line":1827},[28,91119,52195],{"class":211},[28,91121,51864],{"class":51351},[28,91123,55290],{"class":34},[28,91125,257],{"class":211},[28,91127,88325],{"class":64},[28,91129,55365],{"class":211},[28,91131,51864],{"class":51351},[28,91133,51358],{"class":211},[28,91135,91136,91138,91140],{"class":30,"line":1832},[28,91137,52195],{"class":211},[28,91139,51864],{"class":51351},[28,91141,51358],{"class":211},[28,91143,91144,91146,91148,91150,91152,91154,91156,91158],{"class":30,"line":1837},[28,91145,11298],{"class":207},[28,91147,86984],{"class":38},[28,91149,13641],{"class":207},[28,91151,54447],{"class":211},[28,91153,54450],{"class":34},[28,91155,212],{"class":211},[28,91157,90197],{"class":64},[28,91159,218],{"class":211},[28,91161,91162,91164,91166,91168],{"class":30,"line":1842},[28,91163,52270],{"class":207},[28,91165,9515],{"class":211},[28,91167,257],{"class":207},[28,91169,47384],{"class":38},[28,91171,91172,91174,91176],{"class":30,"line":1856},[28,91173,70135],{"class":207},[28,91175,90216],{"class":34},[28,91177,10930],{"class":211},[28,91179,91180,91182,91184,91186],{"class":30,"line":1861},[28,91181,90223],{"class":211},[28,91183,257],{"class":207},[28,91185,3109],{"class":211},[28,91187,2779],{"class":207},[28,91189,91190],{"class":30,"line":2654},[28,91191,90234],{"class":269},[28,91193,91194],{"class":30,"line":2668},[28,91195,2264],{"class":211},[28,91197,91198],{"class":30,"line":2676},[28,91199,90243],{"class":269},[28,91201,91202],{"class":30,"line":2681},[28,91203,91204],{"class":269},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[28,91206,91207],{"class":30,"line":2687},[28,91208,91209],{"class":269},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[28,91211,91212,91214,91216,91218,91220,91222,91225,91227,91229],{"class":30,"line":2693},[28,91213,90258],{"class":211},[28,91215,57864],{"class":34},[28,91217,212],{"class":211},[28,91219,90265],{"class":64},[28,91221,90268],{"class":211},[28,91223,91224],{"class":34},"throttle",[28,91226,90274],{"class":211},[28,91228,65125],{"class":38},[28,91230,30548],{"class":211},[28,91232,91233,91235,91237],{"class":30,"line":2698},[28,91234,52468],{"class":211},[28,91236,51864],{"class":51351},[28,91238,51358],{"class":211},[28,91240,91241,91243,91245],{"class":30,"line":8025},[28,91242,51836],{"class":211},[28,91244,51851],{"class":51351},[28,91246,51358],{"class":211},[28,91248,91249],{"class":30,"line":8049},[28,91250,2477],{"emptyLinePlaceholder":134},[28,91252,91253,91255,91257],{"class":30,"line":8054},[28,91254,51836],{"class":211},[28,91256,50686],{"class":51351},[28,91258,51358],{"class":211},[116,91260,91261],{},[119,91262,91263],{},"手写一个节流函数来处理",[14,91265,71003],{},[14,91267,90317],{},[14,91269,91270],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91272,91273],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[18,91275,91277],{"className":50684,"code":91276,"language":50686,"meta":23,"style":23},"\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",[25,91278,91279,91289,91303,91307,91315,91329,91349,91361,91369,91375,91385,91397,91409,91419,91431,91441,91451,91463,91467,91475,91483,91487,91495,91513,91531,91539,91557,91567,91575,91585,91589,91593,91597,91602,91607,91612,91617,91622,91627,91644,91650,91658,91669,91684,91691,91696,91701,91711,91716,91721,91726,91730,91734,91738,91758,91766,91774,91778],{"__ignoreMap":23},[28,91280,91281,91283,91285,91287],{"class":30,"line":31},[28,91282,51348],{"class":211},[28,91284,51352],{"class":51351},[28,91286,51355],{"class":34},[28,91288,51358],{"class":211},[28,91290,91291,91293,91295,91297,91299,91301],{"class":30,"line":42},[28,91292,1120],{"class":211},[28,91294,50686],{"class":51351},[28,91296,51367],{"class":34},[28,91298,257],{"class":211},[28,91300,51372],{"class":64},[28,91302,51358],{"class":211},[28,91304,91305],{"class":30,"line":50},[28,91306,2477],{"emptyLinePlaceholder":134},[28,91308,91309,91311,91313],{"class":30,"line":58},[28,91310,1120],{"class":211},[28,91312,51385],{"class":51351},[28,91314,51358],{"class":211},[28,91316,91317,91319,91321,91323,91325,91327],{"class":30,"line":70},[28,91318,52195],{"class":211},[28,91320,51395],{"class":51351},[28,91322,51398],{"class":34},[28,91324,257],{"class":211},[28,91326,51403],{"class":64},[28,91328,51358],{"class":211},[28,91330,91331,91333,91335,91337,91339,91341,91343,91345,91347],{"class":30,"line":78},[28,91332,52195],{"class":211},[28,91334,51395],{"class":51351},[28,91336,14997],{"class":34},[28,91338,257],{"class":211},[28,91340,51442],{"class":64},[28,91342,51422],{"class":34},[28,91344,257],{"class":211},[28,91346,51449],{"class":64},[28,91348,51358],{"class":211},[28,91350,91351,91353,91355,91357,91359],{"class":30,"line":86},[28,91352,52195],{"class":211},[28,91354,51458],{"class":51351},[28,91356,51461],{"class":211},[28,91358,51458],{"class":51351},[28,91360,51358],{"class":211},[28,91362,91363,91365,91367],{"class":30,"line":97},[28,91364,52195],{"class":211},[28,91366,126],{"class":51351},[28,91368,51358],{"class":211},[28,91370,91371,91373],{"class":30,"line":108},[28,91372,54803],{"class":34},[28,91374,15649],{"class":211},[28,91376,91377,91379,91381,91383],{"class":30,"line":1407},[28,91378,72647],{"class":38},[28,91380,51488],{"class":211},[28,91382,60556],{"class":38},[28,91384,1370],{"class":211},[28,91386,91387,91389,91391,91393,91395],{"class":30,"line":1690},[28,91388,54822],{"class":38},[28,91390,51488],{"class":211},[28,91392,1800],{"class":38},[28,91394,51543],{"class":207},[28,91396,1370],{"class":211},[28,91398,91399,91401,91403,91405,91407],{"class":30,"line":1695},[28,91400,54836],{"class":38},[28,91402,51488],{"class":211},[28,91404,1800],{"class":38},[28,91406,51543],{"class":207},[28,91408,1370],{"class":211},[28,91410,91411,91413,91415,91417],{"class":30,"line":1701},[28,91412,54935],{"class":38},[28,91414,51488],{"class":211},[28,91416,90057],{"class":38},[28,91418,1370],{"class":211},[28,91420,91421,91423,91425,91427,91429],{"class":30,"line":1706},[28,91422,54973],{"class":38},[28,91424,51488],{"class":211},[28,91426,1035],{"class":38},[28,91428,51543],{"class":207},[28,91430,1370],{"class":211},[28,91432,91433,91435,91437,91439],{"class":30,"line":1720},[28,91434,57467],{"class":38},[28,91436,51488],{"class":211},[28,91438,60893],{"class":38},[28,91440,1370],{"class":211},[28,91442,91443,91445,91447,91449],{"class":30,"line":1725},[28,91444,57337],{"class":38},[28,91446,51488],{"class":211},[28,91448,51643],{"class":38},[28,91450,1370],{"class":211},[28,91452,91453,91455,91457,91459,91461],{"class":30,"line":1731},[28,91454,90096],{"class":38},[28,91456,51488],{"class":211},[28,91458,529],{"class":38},[28,91460,51543],{"class":207},[28,91462,1370],{"class":211},[28,91464,91465],{"class":30,"line":1752},[28,91466,2264],{"class":211},[28,91468,91469,91471,91473],{"class":30,"line":1757},[28,91470,52468],{"class":211},[28,91472,126],{"class":51351},[28,91474,51358],{"class":211},[28,91476,91477,91479,91481],{"class":30,"line":1771},[28,91478,51836],{"class":211},[28,91480,51385],{"class":51351},[28,91482,51358],{"class":211},[28,91484,91485],{"class":30,"line":1776},[28,91486,2477],{"emptyLinePlaceholder":134},[28,91488,91489,91491,91493],{"class":30,"line":1805},[28,91490,1120],{"class":211},[28,91492,51851],{"class":51351},[28,91494,51358],{"class":211},[28,91496,91497,91499,91501,91503,91505,91507,91509,91511],{"class":30,"line":1810},[28,91498,52195],{"class":211},[28,91500,51662],{"class":51351},[28,91502,53537],{"class":34},[28,91504,257],{"class":211},[28,91506,53542],{"class":64},[28,91508,55365],{"class":211},[28,91510,51662],{"class":51351},[28,91512,51358],{"class":211},[28,91514,91515,91517,91519,91521,91523,91525,91527,91529],{"class":30,"line":1827},[28,91516,52195],{"class":211},[28,91518,51864],{"class":51351},[28,91520,55290],{"class":34},[28,91522,257],{"class":211},[28,91524,88325],{"class":64},[28,91526,55365],{"class":211},[28,91528,51864],{"class":51351},[28,91530,51358],{"class":211},[28,91532,91533,91535,91537],{"class":30,"line":1832},[28,91534,52195],{"class":211},[28,91536,51864],{"class":51351},[28,91538,51358],{"class":211},[28,91540,91541,91543,91545,91547,91549,91551,91553,91555],{"class":30,"line":1837},[28,91542,11298],{"class":207},[28,91544,86984],{"class":38},[28,91546,13641],{"class":207},[28,91548,54447],{"class":211},[28,91550,54450],{"class":34},[28,91552,212],{"class":211},[28,91554,90197],{"class":64},[28,91556,218],{"class":211},[28,91558,91559,91561,91563,91565],{"class":30,"line":1842},[28,91560,52270],{"class":207},[28,91562,9515],{"class":211},[28,91564,257],{"class":207},[28,91566,47384],{"class":38},[28,91568,91569,91571,91573],{"class":30,"line":1856},[28,91570,70135],{"class":207},[28,91572,90216],{"class":34},[28,91574,10930],{"class":211},[28,91576,91577,91579,91581,91583],{"class":30,"line":1861},[28,91578,90223],{"class":211},[28,91580,257],{"class":207},[28,91582,3109],{"class":211},[28,91584,2779],{"class":207},[28,91586,91587],{"class":30,"line":2654},[28,91588,90234],{"class":269},[28,91590,91591],{"class":30,"line":2668},[28,91592,2264],{"class":211},[28,91594,91595],{"class":30,"line":2676},[28,91596,90243],{"class":269},[28,91598,91599],{"class":30,"line":2681},[28,91600,91601],{"class":269},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[28,91603,91604],{"class":30,"line":2687},[28,91605,91606],{"class":269},"    \u002F\u002F 1.声明一个定时器变量\n",[28,91608,91609],{"class":30,"line":2693},[28,91610,91611],{"class":269},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[28,91613,91614],{"class":30,"line":2698},[28,91615,91616],{"class":269},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[28,91618,91619],{"class":30,"line":8025},[28,91620,91621],{"class":269},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[28,91623,91624],{"class":30,"line":8049},[28,91625,91626],{"class":269},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[28,91628,91629,91631,91634,91636,91638,91640,91642],{"class":30,"line":8054},[28,91630,70135],{"class":207},[28,91632,91633],{"class":34}," throttle",[28,91635,212],{"class":211},[28,91637,90688],{"class":5293},[28,91639,12512],{"class":211},[28,91641,930],{"class":5293},[28,91643,12519],{"class":211},[28,91645,91646,91648],{"class":30,"line":8060},[28,91647,79823],{"class":207},[28,91649,90701],{"class":211},[28,91651,91652,91654,91656],{"class":30,"line":8087},[28,91653,74033],{"class":207},[28,91655,58969],{"class":207},[28,91657,54503],{"class":211},[28,91659,91660,91662,91664,91666],{"class":30,"line":8092},[28,91661,2574],{"class":207},[28,91663,1736],{"class":211},[28,91665,436],{"class":207},[28,91667,91668],{"class":211},"timer) {\n",[28,91670,91671,91674,91676,91678,91680,91682],{"class":30,"line":8098},[28,91672,91673],{"class":211},"          timer ",[28,91675,257],{"class":207},[28,91677,90742],{"class":34},[28,91679,212],{"class":211},[28,91681,54500],{"class":207},[28,91683,54503],{"class":211},[28,91685,91686,91689],{"class":30,"line":8110},[28,91687,91688],{"class":34},"            fn",[28,91690,2053],{"class":211},[28,91692,91693],{"class":30,"line":8122},[28,91694,91695],{"class":269},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[28,91697,91698],{"class":30,"line":8134},[28,91699,91700],{"class":269},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[28,91702,91703,91706,91708],{"class":30,"line":9793},[28,91704,91705],{"class":211},"            timer ",[28,91707,257],{"class":207},[28,91709,91710],{"class":38}," null\n",[28,91712,91713],{"class":30,"line":9818},[28,91714,91715],{"class":269},"            \u002F\u002F 不能用clearTimeout(timer)\n",[28,91717,91718],{"class":30,"line":9841},[28,91719,91720],{"class":269},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[28,91722,91723],{"class":30,"line":9865},[28,91724,91725],{"class":211},"          }, t)\n",[28,91727,91728],{"class":30,"line":9870},[28,91729,2606],{"class":211},[28,91731,91732],{"class":30,"line":9875},[28,91733,52449],{"class":211},[28,91735,91736],{"class":30,"line":9880},[28,91737,2264],{"class":211},[28,91739,91740,91742,91744,91746,91748,91750,91752,91754,91756],{"class":30,"line":9889},[28,91741,90258],{"class":211},[28,91743,57864],{"class":34},[28,91745,212],{"class":211},[28,91747,90265],{"class":64},[28,91749,12512],{"class":211},[28,91751,91224],{"class":34},[28,91753,90274],{"class":211},[28,91755,65125],{"class":38},[28,91757,30548],{"class":211},[28,91759,91760,91762,91764],{"class":30,"line":9894},[28,91761,52468],{"class":211},[28,91763,51864],{"class":51351},[28,91765,51358],{"class":211},[28,91767,91768,91770,91772],{"class":30,"line":9900},[28,91769,51836],{"class":211},[28,91771,51851],{"class":51351},[28,91773,51358],{"class":211},[28,91775,91776],{"class":30,"line":9921},[28,91777,2477],{"emptyLinePlaceholder":134},[28,91779,91780,91782,91784],{"class":30,"line":9927},[28,91781,51836],{"class":211},[28,91783,50686],{"class":51351},[28,91785,51358],{"class":211},[177,91787,91789],{"id":91788},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[18,91791,91793],{"className":53118,"code":91792,"language":53120,"meta":23,"style":23},"\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",[25,91794,91795,91803,91811,91816,91821,91826,91831,91835,91843],{"__ignoreMap":23},[28,91796,91797,91799,91801],{"class":30,"line":31},[28,91798,1120],{"class":211},[28,91800,51851],{"class":51351},[28,91802,51358],{"class":211},[28,91804,91805,91807,91809],{"class":30,"line":42},[28,91806,52195],{"class":211},[28,91808,51864],{"class":51351},[28,91810,51358],{"class":211},[28,91812,91813],{"class":30,"line":50},[28,91814,91815],{"class":211},"    let timer = null\n",[28,91817,91818],{"class":30,"line":58},[28,91819,91820],{"class":211},"    timer = setTimeout(() => {\n",[28,91822,91823],{"class":30,"line":70},[28,91824,91825],{"class":211},"      clearTimeout(timer)\n",[28,91827,91828],{"class":30,"line":78},[28,91829,91830],{"class":211},"      console.log(timer)\n",[28,91832,91833],{"class":30,"line":86},[28,91834,60276],{"class":211},[28,91836,91837,91839,91841],{"class":30,"line":97},[28,91838,52468],{"class":211},[28,91840,51864],{"class":51351},[28,91842,51358],{"class":211},[28,91844,91845,91847,91849],{"class":30,"line":108},[28,91846,51836],{"class":211},[28,91848,51851],{"class":51351},[28,91850,51358],{"class":211},[14,91852,91853],{},"输出为1",[14,91855,91856],{},"在开启的定时器里边写清除定时器",[14,91858,91859],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[177,91861,91863],{"id":91862},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91865,91866],{},"页面打开，可以记录上一次的视频播放位置",[14,91868,91869],{},[1540,91870],{"alt":23,"src":91871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91873,91874],{},[1540,91875],{"alt":23,"src":91876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[18,91878,91880],{"className":50684,"code":91879,"language":50686,"meta":23,"style":23},"\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",[25,91881,91882,91892,91906,91910,91918,91932,91952,91972,91994,92007,92015,92021,92031,92041,92051,92055,92059,92066,92079,92091,92095,92099,92109,92121,92135,92139,92143,92150,92160,92173,92185,92195,92205,92221,92233,92237,92241,92249,92259,92271,92281,92291,92301,92305,92309,92319,92330,92334,92342,92350,92354,92362,92377,92392,92407,92428,92436,92444,92459,92481,92489,92504,92530,92556,92582,92590,92598,92617,92625,92630,92649,92654,92672,92677,92682,92690,92695,92709,92717,92722,92739,92743,92748,92770,92774,92782,92790,92794],{"__ignoreMap":23},[28,91883,91884,91886,91888,91890],{"class":30,"line":31},[28,91885,51348],{"class":211},[28,91887,51352],{"class":51351},[28,91889,51355],{"class":34},[28,91891,51358],{"class":211},[28,91893,91894,91896,91898,91900,91902,91904],{"class":30,"line":42},[28,91895,1120],{"class":211},[28,91897,50686],{"class":51351},[28,91899,51367],{"class":34},[28,91901,257],{"class":211},[28,91903,51372],{"class":64},[28,91905,51358],{"class":211},[28,91907,91908],{"class":30,"line":50},[28,91909,2477],{"emptyLinePlaceholder":134},[28,91911,91912,91914,91916],{"class":30,"line":58},[28,91913,1120],{"class":211},[28,91915,51385],{"class":51351},[28,91917,51358],{"class":211},[28,91919,91920,91922,91924,91926,91928,91930],{"class":30,"line":70},[28,91921,52195],{"class":211},[28,91923,51395],{"class":51351},[28,91925,51398],{"class":34},[28,91927,257],{"class":211},[28,91929,51403],{"class":64},[28,91931,59178],{"class":211},[28,91933,91934,91936,91938,91940,91942,91944,91946,91948,91950],{"class":30,"line":78},[28,91935,52195],{"class":211},[28,91937,51395],{"class":51351},[28,91939,51414],{"class":34},[28,91941,257],{"class":211},[28,91943,51419],{"class":64},[28,91945,51422],{"class":34},[28,91947,257],{"class":211},[28,91949,51427],{"class":64},[28,91951,59178],{"class":211},[28,91953,91954,91956,91958,91960,91962,91964,91966,91968,91970],{"class":30,"line":86},[28,91955,52195],{"class":211},[28,91957,51395],{"class":51351},[28,91959,14997],{"class":34},[28,91961,257],{"class":211},[28,91963,51442],{"class":64},[28,91965,51422],{"class":34},[28,91967,257],{"class":211},[28,91969,51449],{"class":64},[28,91971,59178],{"class":211},[28,91973,91974,91976,91978,91980,91982,91985,91987,91989,91992],{"class":30,"line":97},[28,91975,52195],{"class":211},[28,91977,51395],{"class":51351},[28,91979,14997],{"class":34},[28,91981,257],{"class":211},[28,91983,91984],{"class":64},"\"referrer\"",[28,91986,51422],{"class":34},[28,91988,257],{"class":211},[28,91990,91991],{"class":64},"\"never\"",[28,91993,59178],{"class":211},[28,91995,91996,91998,92000,92003,92005],{"class":30,"line":108},[28,91997,52195],{"class":211},[28,91999,51458],{"class":51351},[28,92001,92002],{"class":211},">综合案例\u003C\u002F",[28,92004,51458],{"class":51351},[28,92006,51358],{"class":211},[28,92008,92009,92011,92013],{"class":30,"line":1407},[28,92010,52195],{"class":211},[28,92012,126],{"class":51351},[28,92014,51358],{"class":211},[28,92016,92017,92019],{"class":30,"line":1690},[28,92018,6480],{"class":51351},[28,92020,15649],{"class":211},[28,92022,92023,92025,92027,92029],{"class":30,"line":1695},[28,92024,54746],{"class":38},[28,92026,51488],{"class":211},[28,92028,401],{"class":38},[28,92030,1370],{"class":211},[28,92032,92033,92035,92037,92039],{"class":30,"line":1701},[28,92034,54757],{"class":38},[28,92036,51488],{"class":211},[28,92038,401],{"class":38},[28,92040,1370],{"class":211},[28,92042,92043,92045,92047,92049],{"class":30,"line":1706},[28,92044,72647],{"class":38},[28,92046,51488],{"class":211},[28,92048,60556],{"class":38},[28,92050,1370],{"class":211},[28,92052,92053],{"class":30,"line":1720},[28,92054,2264],{"class":211},[28,92056,92057],{"class":30,"line":1725},[28,92058,2477],{"emptyLinePlaceholder":134},[28,92060,92061,92064],{"class":30,"line":1731},[28,92062,92063],{"class":34},"    .container",[28,92065,15649],{"class":211},[28,92067,92068,92070,92072,92075,92077],{"class":30,"line":1752},[28,92069,54822],{"class":38},[28,92071,51488],{"class":211},[28,92073,92074],{"class":38},"1200",[28,92076,51543],{"class":207},[28,92078,1370],{"class":211},[28,92080,92081,92083,92085,92087,92089],{"class":30,"line":1757},[28,92082,54757],{"class":38},[28,92084,51488],{"class":211},[28,92086,401],{"class":38},[28,92088,51607],{"class":38},[28,92090,1370],{"class":211},[28,92092,92093],{"class":30,"line":1771},[28,92094,2264],{"class":211},[28,92096,92097],{"class":30,"line":1776},[28,92098,2477],{"emptyLinePlaceholder":134},[28,92100,92101,92104,92107],{"class":30,"line":1805},[28,92102,92103],{"class":34},"    .video",[28,92105,92106],{"class":51351}," video",[28,92108,15649],{"class":211},[28,92110,92111,92113,92115,92117,92119],{"class":30,"line":1810},[28,92112,54822],{"class":38},[28,92114,51488],{"class":211},[28,92116,521],{"class":38},[28,92118,538],{"class":207},[28,92120,1370],{"class":211},[28,92122,92123,92125,92127,92129,92131,92133],{"class":30,"line":1827},[28,92124,54746],{"class":38},[28,92126,51488],{"class":211},[28,92128,910],{"class":38},[28,92130,51543],{"class":207},[28,92132,4170],{"class":38},[28,92134,1370],{"class":211},[28,92136,92137],{"class":30,"line":1832},[28,92138,2264],{"class":211},[28,92140,92141],{"class":30,"line":1837},[28,92142,2477],{"emptyLinePlaceholder":134},[28,92144,92145,92148],{"class":30,"line":1842},[28,92146,92147],{"class":34},"    .elevator",[28,92149,15649],{"class":211},[28,92151,92152,92154,92156,92158],{"class":30,"line":1856},[28,92153,54810],{"class":38},[28,92155,51488],{"class":211},[28,92157,86284],{"class":38},[28,92159,1370],{"class":211},[28,92161,92162,92164,92166,92169,92171],{"class":30,"line":1861},[28,92163,54998],{"class":38},[28,92165,51488],{"class":211},[28,92167,92168],{"class":38},"280",[28,92170,51543],{"class":207},[28,92172,1370],{"class":211},[28,92174,92175,92177,92179,92181,92183],{"class":30,"line":2654},[28,92176,86478],{"class":38},[28,92178,51488],{"class":211},[28,92180,910],{"class":38},[28,92182,51543],{"class":207},[28,92184,1370],{"class":211},[28,92186,92187,92189,92191,92193],{"class":30,"line":2668},[28,92188,86291],{"class":38},[28,92190,51488],{"class":211},[28,92192,86296],{"class":38},[28,92194,1370],{"class":211},[28,92196,92197,92199,92201,92203],{"class":30,"line":2676},[28,92198,61772],{"class":38},[28,92200,51488],{"class":211},[28,92202,60893],{"class":38},[28,92204,1370],{"class":211},[28,92206,92207,92209,92211,92213,92215,92217,92219],{"class":30,"line":2681},[28,92208,62028],{"class":38},[28,92210,51488],{"class":211},[28,92212,427],{"class":38},[28,92214,51543],{"class":207},[28,92216,51572],{"class":38},[28,92218,62295],{"class":38},[28,92220,1370],{"class":211},[28,92222,92223,92225,92227,92229,92231],{"class":30,"line":2687},[28,92224,54822],{"class":38},[28,92226,51488],{"class":211},[28,92228,1117],{"class":38},[28,92230,51543],{"class":207},[28,92232,1370],{"class":211},[28,92234,92235],{"class":30,"line":2693},[28,92236,2264],{"class":211},[28,92238,92239],{"class":30,"line":2698},[28,92240,2477],{"emptyLinePlaceholder":134},[28,92242,92243,92245,92247],{"class":30,"line":8025},[28,92244,92147],{"class":34},[28,92246,1476],{"class":51351},[28,92248,15649],{"class":211},[28,92250,92251,92253,92255,92257],{"class":30,"line":8049},[28,92252,55060],{"class":38},[28,92254,51488],{"class":211},[28,92256,60920],{"class":38},[28,92258,1370],{"class":211},[28,92260,92261,92263,92265,92267,92269],{"class":30,"line":8054},[28,92262,54746],{"class":38},[28,92264,51488],{"class":211},[28,92266,656],{"class":38},[28,92268,51543],{"class":207},[28,92270,1370],{"class":211},[28,92272,92273,92275,92277,92279],{"class":30,"line":8060},[28,92274,64021],{"class":38},[28,92276,51488],{"class":211},[28,92278,54788],{"class":38},[28,92280,1370],{"class":211},[28,92282,92283,92285,92287,92289],{"class":30,"line":8087},[28,92284,57337],{"class":38},[28,92286,51488],{"class":211},[28,92288,51643],{"class":38},[28,92290,1370],{"class":211},[28,92292,92293,92295,92297,92299],{"class":30,"line":8092},[28,92294,57467],{"class":38},[28,92296,51488],{"class":211},[28,92298,62121],{"class":38},[28,92300,1370],{"class":211},[28,92302,92303],{"class":30,"line":8098},[28,92304,2264],{"class":211},[28,92306,92307],{"class":30,"line":8110},[28,92308,2477],{"emptyLinePlaceholder":134},[28,92310,92311,92313,92315,92317],{"class":30,"line":8122},[28,92312,92147],{"class":34},[28,92314,1476],{"class":51351},[28,92316,64075],{"class":34},[28,92318,15649],{"class":211},[28,92320,92321,92323,92325,92328],{"class":30,"line":8134},[28,92322,57467],{"class":38},[28,92324,51488],{"class":211},[28,92326,92327],{"class":38},"#1286ff",[28,92329,1370],{"class":211},[28,92331,92332],{"class":30,"line":9793},[28,92333,2264],{"class":211},[28,92335,92336,92338,92340],{"class":30,"line":9818},[28,92337,52468],{"class":211},[28,92339,126],{"class":51351},[28,92341,51358],{"class":211},[28,92343,92344,92346,92348],{"class":30,"line":9841},[28,92345,51836],{"class":211},[28,92347,51385],{"class":51351},[28,92349,51358],{"class":211},[28,92351,92352],{"class":30,"line":9865},[28,92353,2477],{"emptyLinePlaceholder":134},[28,92355,92356,92358,92360],{"class":30,"line":9870},[28,92357,1120],{"class":211},[28,92359,51851],{"class":51351},[28,92361,51358],{"class":211},[28,92363,92364,92366,92368,92370,92372,92375],{"class":30,"line":9875},[28,92365,52195],{"class":211},[28,92367,51662],{"class":51351},[28,92369,53537],{"class":34},[28,92371,257],{"class":211},[28,92373,92374],{"class":64},"\"container\"",[28,92376,51358],{"class":211},[28,92378,92379,92381,92383,92385,92387,92390],{"class":30,"line":9880},[28,92380,51392],{"class":211},[28,92382,51662],{"class":51351},[28,92384,53537],{"class":34},[28,92386,257],{"class":211},[28,92388,92389],{"class":64},"\"header\"",[28,92391,51358],{"class":211},[28,92393,92394,92396,92398,92400,92402,92405],{"class":30,"line":9889},[28,92395,55285],{"class":211},[28,92397,448],{"class":51351},[28,92399,61108],{"class":34},[28,92401,257],{"class":211},[28,92403,92404],{"class":64},"\"http:\u002F\u002Fpip.itcast.cn\"",[28,92406,51358],{"class":211},[28,92408,92409,92411,92413,92415,92417,92420,92422,92424,92426],{"class":30,"line":9894},[28,92410,55353],{"class":211},[28,92412,1540],{"class":51351},[28,92414,55290],{"class":34},[28,92416,257],{"class":211},[28,92418,92419],{"class":64},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[28,92421,55298],{"class":34},[28,92423,257],{"class":211},[28,92425,7729],{"class":64},[28,92427,59178],{"class":211},[28,92429,92430,92432,92434],{"class":30,"line":9900},[28,92431,55458],{"class":211},[28,92433,448],{"class":51351},[28,92435,51358],{"class":211},[28,92437,92438,92440,92442],{"class":30,"line":9921},[28,92439,51827],{"class":211},[28,92441,51662],{"class":51351},[28,92443,51358],{"class":211},[28,92445,92446,92448,92450,92452,92454,92457],{"class":30,"line":9927},[28,92447,51392],{"class":211},[28,92449,51662],{"class":51351},[28,92451,53537],{"class":34},[28,92453,257],{"class":211},[28,92455,92456],{"class":64},"\"video\"",[28,92458,51358],{"class":211},[28,92460,92461,92463,92465,92467,92469,92472,92475,92477,92479],{"class":30,"line":9941},[28,92462,55285],{"class":211},[28,92464,28234],{"class":51351},[28,92466,55290],{"class":34},[28,92468,257],{"class":211},[28,92470,92471],{"class":64},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[28,92473,92474],{"class":34}," controls",[28,92476,55365],{"class":211},[28,92478,28234],{"class":51351},[28,92480,51358],{"class":211},[28,92482,92483,92485,92487],{"class":30,"line":9947},[28,92484,51827],{"class":211},[28,92486,51662],{"class":51351},[28,92488,51358],{"class":211},[28,92490,92491,92493,92495,92497,92499,92502],{"class":30,"line":9974},[28,92492,51392],{"class":211},[28,92494,51662],{"class":51351},[28,92496,53537],{"class":34},[28,92498,257],{"class":211},[28,92500,92501],{"class":64},"\"elevator\"",[28,92503,51358],{"class":211},[28,92505,92506,92508,92510,92512,92514,92516,92519,92521,92523,92526,92528],{"class":30,"line":9983},[28,92507,55285],{"class":211},[28,92509,448],{"class":51351},[28,92511,61108],{"class":34},[28,92513,257],{"class":211},[28,92515,64287],{"class":64},[28,92517,92518],{"class":34}," data-ref",[28,92520,257],{"class":211},[28,92522,92456],{"class":64},[28,92524,92525],{"class":211},">视频介绍\u003C\u002F",[28,92527,448],{"class":51351},[28,92529,51358],{"class":211},[28,92531,92532,92534,92536,92538,92540,92542,92544,92546,92549,92552,92554],{"class":30,"line":9989},[28,92533,55285],{"class":211},[28,92535,448],{"class":51351},[28,92537,61108],{"class":34},[28,92539,257],{"class":211},[28,92541,64287],{"class":64},[28,92543,92518],{"class":34},[28,92545,257],{"class":211},[28,92547,92548],{"class":64},"\"intro\"",[28,92550,92551],{"class":211},">课程简介\u003C\u002F",[28,92553,448],{"class":51351},[28,92555,51358],{"class":211},[28,92557,92558,92560,92562,92564,92566,92568,92570,92572,92575,92578,92580],{"class":30,"line":9997},[28,92559,55285],{"class":211},[28,92561,448],{"class":51351},[28,92563,61108],{"class":34},[28,92565,257],{"class":211},[28,92567,64287],{"class":64},[28,92569,92518],{"class":34},[28,92571,257],{"class":211},[28,92573,92574],{"class":64},"\"outline\"",[28,92576,92577],{"class":211},">评论列表\u003C\u002F",[28,92579,448],{"class":51351},[28,92581,51358],{"class":211},[28,92583,92584,92586,92588],{"class":30,"line":10002},[28,92585,51827],{"class":211},[28,92587,51662],{"class":51351},[28,92589,51358],{"class":211},[28,92591,92592,92594,92596],{"class":30,"line":16681},[28,92593,52468],{"class":211},[28,92595,51662],{"class":51351},[28,92597,51358],{"class":211},[28,92599,92600,92602,92604,92606,92608,92611,92613,92615],{"class":30,"line":16687},[28,92601,52195],{"class":211},[28,92603,51864],{"class":51351},[28,92605,55290],{"class":34},[28,92607,257],{"class":211},[28,92609,92610],{"class":64},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[28,92612,55365],{"class":211},[28,92614,51864],{"class":51351},[28,92616,51358],{"class":211},[28,92618,92619,92621,92623],{"class":30,"line":16710},[28,92620,52195],{"class":211},[28,92622,51864],{"class":51351},[28,92624,51358],{"class":211},[28,92626,92627],{"class":30,"line":16716},[28,92628,92629],{"class":269},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[28,92631,92632,92634,92636,92638,92640,92642,92644,92647],{"class":30,"line":16739},[28,92633,11298],{"class":207},[28,92635,92106],{"class":38},[28,92637,13641],{"class":207},[28,92639,54447],{"class":211},[28,92641,54450],{"class":34},[28,92643,212],{"class":211},[28,92645,92646],{"class":64},"'video'",[28,92648,218],{"class":211},[28,92650,92651],{"class":30,"line":16753},[28,92652,92653],{"class":269},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[28,92655,92656,92659,92661,92663,92665,92668,92670],{"class":30,"line":16773},[28,92657,92658],{"class":211},"    video.ontimeupdate ",[28,92660,257],{"class":207},[28,92662,88406],{"class":211},[28,92664,91224],{"class":34},[28,92666,92667],{"class":211},"(() ",[28,92669,84773],{"class":207},[28,92671,15649],{"class":211},[28,92673,92674],{"class":30,"line":16779},[28,92675,92676],{"class":269},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[28,92678,92679],{"class":30,"line":16790},[28,92680,92681],{"class":269},"      \u002F\u002F 控制台输出当前的时间\n",[28,92683,92684,92687],{"class":30,"line":16813},[28,92685,92686],{"class":269},"      \u002F\u002F console.log(video.currentTime)",[28,92688,92689],{"class":269},"  \u002F\u002F获得当前的视频时间\n",[28,92691,92692],{"class":30,"line":16835},[28,92693,92694],{"class":269},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[28,92696,92697,92699,92701,92703,92706],{"class":30,"line":16840},[28,92698,74734],{"class":211},[28,92700,71705],{"class":34},[28,92702,212],{"class":211},[28,92704,92705],{"class":64},"'currentTime'",[28,92707,92708],{"class":211},", video.currentTime)\n",[28,92710,92711,92713,92715],{"class":30,"line":16846},[28,92712,54586],{"class":211},[28,92714,6487],{"class":38},[28,92716,218],{"class":211},[28,92718,92719],{"class":30,"line":16860},[28,92720,92721],{"class":269},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[28,92723,92724,92727,92730,92732,92735,92737],{"class":30,"line":16873},[28,92725,92726],{"class":211},"    video.",[28,92728,92729],{"class":34},"onloadeddata",[28,92731,13641],{"class":207},[28,92733,92734],{"class":211}," () ",[28,92736,84773],{"class":207},[28,92738,15649],{"class":211},[28,92740,92741],{"class":30,"line":16878},[28,92742,60063],{"class":269},[28,92744,92745],{"class":30,"line":16892},[28,92746,92747],{"class":269},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[28,92749,92750,92753,92755,92758,92760,92762,92764,92766,92768],{"class":30,"line":16897},[28,92751,92752],{"class":211},"      video.currentTime ",[28,92754,257],{"class":207},[28,92756,92757],{"class":211}," localStorage.",[28,92759,71736],{"class":34},[28,92761,212],{"class":211},[28,92763,92705],{"class":64},[28,92765,13791],{"class":211},[28,92767,71408],{"class":207},[28,92769,47384],{"class":38},[28,92771,92772],{"class":30,"line":16903},[28,92773,2264],{"class":211},[28,92775,92776,92778,92780],{"class":30,"line":16908},[28,92777,52468],{"class":211},[28,92779,51864],{"class":51351},[28,92781,51358],{"class":211},[28,92783,92784,92786,92788],{"class":30,"line":16922},[28,92785,51836],{"class":211},[28,92787,51851],{"class":51351},[28,92789,51358],{"class":211},[28,92791,92792],{"class":30,"line":16927},[28,92793,2477],{"emptyLinePlaceholder":134},[28,92795,92796,92798,92800],{"class":30,"line":16932},[28,92797,51836],{"class":211},[28,92799,50686],{"class":51351},[28,92801,51358],{"class":211},[126,92803,92804],{},"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":23,"searchDepth":42,"depth":42,"links":92806},[92807,92812,92816,92817,92818,92823,92828,92829,92830,92831,92838,92843,92844,92854,92858,92859,92863],{"id":76742,"depth":42,"text":76743,"children":92808},[92809,92810,92811],{"id":76746,"depth":50,"text":76747},{"id":76771,"depth":50,"text":76772},{"id":76783,"depth":50,"text":76784},{"id":76795,"depth":42,"text":76796,"children":92813},[92814,92815],{"id":76799,"depth":50,"text":76800},{"id":76814,"depth":50,"text":76815},{"id":76866,"depth":42,"text":76867},{"id":76910,"depth":42,"text":76911},{"id":76927,"depth":42,"text":76928,"children":92819},[92820,92821,92822],{"id":76931,"depth":50,"text":76932},{"id":76944,"depth":50,"text":76945},{"id":77049,"depth":50,"text":77050},{"id":77338,"depth":42,"text":77339,"children":92824},[92825,92826,92827],{"id":77342,"depth":50,"text":77343},{"id":77785,"depth":50,"text":77786},{"id":78196,"depth":50,"text":78197},{"id":78259,"depth":42,"text":78260},{"id":78338,"depth":42,"text":78339},{"id":78431,"depth":42,"text":78432},{"id":80276,"depth":42,"text":80277,"children":92832},[92833,92834,92835,92836,92837],{"id":80280,"depth":50,"text":80281},{"id":80292,"depth":50,"text":80293},{"id":80511,"depth":50,"text":80512},{"id":80529,"depth":50,"text":80530},{"id":80589,"depth":50,"text":80590},{"id":84857,"depth":42,"text":84858,"children":92839},[92840,92841,92842],{"id":84861,"depth":50,"text":84862},{"id":84879,"depth":50,"text":84880},{"id":84905,"depth":50,"text":84906},{"id":84914,"depth":42,"text":84915},{"id":84936,"depth":42,"text":84937,"children":92845},[92846,92847,92848,92849,92850,92851,92852,92853],{"id":84940,"depth":50,"text":84941},{"id":85201,"depth":50,"text":85202},{"id":85387,"depth":50,"text":85388},{"id":85754,"depth":50,"text":85755},{"id":85870,"depth":50,"text":85871},{"id":85906,"depth":50,"text":85907},{"id":85953,"depth":50,"text":85954},{"id":85987,"depth":50,"text":85988},{"id":87350,"depth":42,"text":87351,"children":92855},[92856,92857],{"id":87354,"depth":50,"text":87355},{"id":87391,"depth":50,"text":87392},{"id":88746,"depth":42,"text":88747},{"id":89117,"depth":42,"text":89118,"children":92860},[92861,92862],{"id":89121,"depth":50,"text":89122},{"id":89155,"depth":50,"text":89156},{"id":89884,"depth":42,"text":89885,"children":92864},[92865,92866,92867,92868],{"id":89888,"depth":50,"text":89889},{"id":90846,"depth":50,"text":90847},{"id":91788,"depth":50,"text":91789},{"id":91862,"depth":50,"text":91863},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76731,"description":131},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92875,"title":92876,"body":92877,"description":92888,"extension":132,"meta":92889,"navigation":134,"path":92891,"seo":92892,"stem":92893,"__hash__":92894},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92878,"toc":92886},[92879],[14,92880,92881,92882],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[448,92883,92884],{"href":92884,"rel":92885},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23940],{"title":23,"searchDepth":42,"depth":42,"links":92887},[],"三件套第三套学习",{"category":92890},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92876,"description":92888},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92896,"title":92897,"body":92898,"description":131,"extension":132,"meta":93003,"navigation":134,"path":93004,"seo":93005,"stem":93006,"__hash__":93007},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92899,"toc":92998},[92900,92907,92910,92913,92916,92920,92929,92932,92935,92939,92948,92951,92955,92958,92978,92981,92995],[14,92901,92902],{},[448,92903,92906],{"href":92904,"rel":92905},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23940],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92908,92897],{"id":92909},"_1安装",[14,92911,92912],{},"numpy是科学计算基础库,底层是C语言",[14,92914,92915],{},"三种方式：",[149,92917,92919],{"id":92918},"_11-通过pip安装","1.1 通过pip安装",[18,92921,92923],{"className":30429,"code":92922,"language":30431,"meta":23,"style":23},"pip install numpy\n",[25,92924,92925],{"__ignoreMap":23},[28,92926,92927],{"class":30,"line":31},[28,92928,92922],{"class":211},[14,92930,92931],{},"首选方式，自动处理依赖项",[14,92933,92934],{},"在提示系统命令符中使用cmd",[149,92936,92938],{"id":92937},"_12-通过anaconda安装","1.2 通过Anaconda安装",[18,92940,92942],{"className":30429,"code":92941,"language":30431,"meta":23,"style":23},"conda install numpy\n",[25,92943,92944],{"__ignoreMap":23},[28,92945,92946],{"class":30,"line":31},[28,92947,92941],{"class":211},[14,92949,92950],{},"自动解决环境依赖",[149,92952,92954],{"id":92953},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92956,92957],{},"对于Debian\u002FUbuntu",[18,92959,92961],{"className":30429,"code":92960,"language":30431,"meta":23,"style":23},"sudo apt-get install python3-numpy\n",[25,92962,92963],{"__ignoreMap":23},[28,92964,92965,92968,92970,92973,92975],{"class":30,"line":31},[28,92966,92967],{"class":211},"sudo apt",[28,92969,742],{"class":207},[28,92971,92972],{"class":211},"get install python3",[28,92974,742],{"class":207},[28,92976,92977],{"class":211},"numpy\n",[14,92979,92980],{},"对于Fedora:",[18,92982,92984],{"className":30429,"code":92983,"language":30431,"meta":23,"style":23},"sudo dnf install python3-numpy\n",[25,92985,92986],{"__ignoreMap":23},[28,92987,92988,92991,92993],{"class":30,"line":31},[28,92989,92990],{"class":211},"sudo dnf install python3",[28,92992,742],{"class":207},[28,92994,92977],{"class":211},[126,92996,92997],{},"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":23,"searchDepth":42,"depth":42,"links":92999},[93000,93001,93002],{"id":92918,"depth":42,"text":92919},{"id":92937,"depth":42,"text":92938},{"id":92953,"depth":42,"text":92954},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92897,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93009,"title":93010,"body":93011,"description":131,"extension":132,"meta":93124,"navigation":134,"path":93125,"seo":93126,"stem":93127,"__hash__":93128},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93012,"toc":93122},[93013,93016,93019,93022,93025,93028,93031,93034,93037,93040,93116,93119],[10,93014,93010],{"id":93015},"_10算数函数",[14,93017,93018],{},"加减乘除运算跟python基础语法没区别",[14,93020,93021],{},"除了python那种方法外还可以使用函数",[14,93023,93024],{},"加：np.add(a,b)",[14,93026,93027],{},"减：np.subtract(a,b)",[14,93029,93030],{},"乘：np.multiply(a,b)",[14,93032,93033],{},"除：np.divide(a,b) == a\u002Fb",[14,93035,93036],{},"取余：np.mod(a,b) == a%b",[14,93038,93039],{},"必须会的用法：",[18,93041,93043],{"className":30429,"code":93042,"language":30431,"meta":23,"style":23},"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",[25,93044,93045,93067,93088,93098,93111],{"__ignoreMap":23},[28,93046,93047,93049,93051,93054,93056,93059,93061,93063,93065],{"class":30,"line":31},[28,93048,448],{"class":211},[28,93050,257],{"class":207},[28,93052,93053],{"class":211},"np.arange(",[28,93055,630],{"class":38},[28,93057,93058],{"class":211},").reshape(",[28,93060,282],{"class":38},[28,93062,588],{"class":211},[28,93064,282],{"class":38},[28,93066,218],{"class":211},[28,93068,93069,93071,93073,93076,93078,93080,93082,93084,93086],{"class":30,"line":42},[28,93070,473],{"class":211},[28,93072,257],{"class":207},[28,93074,93075],{"class":211},"np.array([",[28,93077,656],{"class":38},[28,93079,588],{"class":211},[28,93081,656],{"class":38},[28,93083,588],{"class":211},[28,93085,656],{"class":38},[28,93087,4734],{"class":211},[28,93089,93090,93093,93095],{"class":30,"line":50},[28,93091,93092],{"class":211},"result",[28,93094,257],{"class":207},[28,93096,93097],{"class":211},"np.empty_like(a)\n",[28,93099,93100,93103,93106,93108],{"class":30,"line":58},[28,93101,93102],{"class":211},"np.add(a,b,",[28,93104,93105],{"class":5293},"out",[28,93107,257],{"class":207},[28,93109,93110],{"class":211},"result)\n",[28,93112,93113],{"class":30,"line":70},[28,93114,93115],{"class":211},"result\n",[14,93117,93118],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[126,93120,93121],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":42,"depth":42,"links":93123},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93010,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93130,"title":93131,"body":93132,"description":131,"extension":132,"meta":93894,"navigation":134,"path":93895,"seo":93896,"stem":93897,"__hash__":93898},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93133,"toc":93881},[93134,93137,93140,93143,93147,93186,93190,93234,93294,93298,93301,93340,93343,93388,93392,93428,93432,93501,93505,93569,93573,93576,93579,93582,93585,93621,93625,93665,93669,93741,93744,93748,93811,93815,93878],[10,93135,93131],{"id":93136},"_11统计函数",[14,93138,93139],{},"sum max min mean",[14,93141,93142],{},"这些有axis参数，可以指定方向",[149,93144,93146],{"id":93145},"_111-sum求和函数","11.1 sum()求和函数",[18,93148,93150],{"className":30429,"code":93149,"language":30431,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[25,93151,93152,93157,93178],{"__ignoreMap":23},[28,93153,93154],{"class":30,"line":31},[28,93155,93156],{"class":269},"#创建一维数组\n",[28,93158,93159,93161,93163,93166,93168,93170,93172,93174,93176],{"class":30,"line":42},[28,93160,448],{"class":211},[28,93162,257],{"class":207},[28,93164,93165],{"class":211},"np.random.randint(",[28,93167,427],{"class":38},[28,93169,588],{"class":211},[28,93171,521],{"class":38},[28,93173,588],{"class":211},[28,93175,910],{"class":38},[28,93177,218],{"class":211},[28,93179,93180,93183],{"class":30,"line":50},[28,93181,93182],{"class":211},"np.sum(a)",[28,93184,93185],{"class":269},"#求和\n",[149,93187,93189],{"id":93188},"_112-max求最大值函数","11.2 max()求最大值函数",[18,93191,93193],{"className":30429,"code":93192,"language":30431,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[25,93194,93195,93199,93219,93224,93229],{"__ignoreMap":23},[28,93196,93197],{"class":30,"line":31},[28,93198,93156],{"class":269},[28,93200,93201,93203,93205,93207,93209,93211,93213,93215,93217],{"class":30,"line":42},[28,93202,448],{"class":211},[28,93204,257],{"class":207},[28,93206,93165],{"class":211},[28,93208,427],{"class":38},[28,93210,588],{"class":211},[28,93212,521],{"class":38},[28,93214,588],{"class":211},[28,93216,910],{"class":38},[28,93218,218],{"class":211},[28,93220,93221],{"class":30,"line":50},[28,93222,93223],{"class":211},"np.max(a)\n",[28,93225,93226],{"class":30,"line":58},[28,93227,93228],{"class":269},"#最大索引(求最大元素的索引)arg\n",[28,93230,93231],{"class":30,"line":70},[28,93232,93233],{"class":211},"np.argmax(a)\n",[18,93235,93237],{"className":30429,"code":93236,"language":30431,"meta":23,"style":23},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[25,93238,93239,93260,93280,93284],{"__ignoreMap":23},[28,93240,93241,93243,93245,93248,93250,93252,93254,93256,93258],{"class":30,"line":31},[28,93242,10996],{"class":211},[28,93244,257],{"class":207},[28,93246,93247],{"class":211}," np.array([",[28,93249,427],{"class":38},[28,93251,12512],{"class":211},[28,93253,529],{"class":38},[28,93255,12512],{"class":211},[28,93257,282],{"class":38},[28,93259,4734],{"class":211},[28,93261,93262,93264,93266,93268,93270,93272,93274,93276,93278],{"class":30,"line":42},[28,93263,11022],{"class":211},[28,93265,257],{"class":207},[28,93267,93247],{"class":211},[28,93269,282],{"class":38},[28,93271,12512],{"class":211},[28,93273,288],{"class":38},[28,93275,12512],{"class":211},[28,93277,503],{"class":38},[28,93279,4734],{"class":211},[28,93281,93282],{"class":30,"line":50},[28,93283,2477],{"emptyLinePlaceholder":134},[28,93285,93286,93288,93291],{"class":30,"line":58},[28,93287,30466],{"class":38},[28,93289,93290],{"class":211},"(np.maximum(a, b))   ",[28,93292,93293],{"class":269},"# [3 5 4]，每个位置上取较大值\n",[149,93295,93297],{"id":93296},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93299,93300],{},"①一维数组：",[18,93302,93304],{"className":30429,"code":93303,"language":30431,"meta":23,"style":23},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[25,93305,93306,93310,93330,93335],{"__ignoreMap":23},[28,93307,93308],{"class":30,"line":31},[28,93309,93156],{"class":269},[28,93311,93312,93314,93316,93318,93320,93322,93324,93326,93328],{"class":30,"line":42},[28,93313,448],{"class":211},[28,93315,257],{"class":207},[28,93317,93165],{"class":211},[28,93319,427],{"class":38},[28,93321,588],{"class":211},[28,93323,521],{"class":38},[28,93325,588],{"class":211},[28,93327,910],{"class":38},[28,93329,218],{"class":211},[28,93331,93332],{"class":30,"line":50},[28,93333,93334],{"class":269},"#求平均值\n",[28,93336,93337],{"class":30,"line":58},[28,93338,93339],{"class":211},"np.mean(a)\n",[14,93341,93342],{},"②二维数组",[18,93344,93346],{"className":30429,"code":93345,"language":30431,"meta":23,"style":23},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[25,93347,93348,93353,93378,93383],{"__ignoreMap":23},[28,93349,93350],{"class":30,"line":31},[28,93351,93352],{"class":269},"#二维数组\n",[28,93354,93355,93358,93360,93362,93364,93366,93368,93370,93372,93374,93376],{"class":30,"line":42},[28,93356,93357],{"class":211},"aa",[28,93359,257],{"class":207},[28,93361,93053],{"class":211},[28,93363,427],{"class":38},[28,93365,588],{"class":211},[28,93367,733],{"class":38},[28,93369,93058],{"class":211},[28,93371,282],{"class":38},[28,93373,588],{"class":211},[28,93375,503],{"class":38},[28,93377,218],{"class":211},[28,93379,93380],{"class":30,"line":50},[28,93381,93382],{"class":269},"#对数组中的所有数求平均\n",[28,93384,93385],{"class":30,"line":58},[28,93386,93387],{"class":211},"np.mean(aa)\n",[149,93389,93391],{"id":93390},"_114-median求中位数函数","11.4 median()求中位数函数",[18,93393,93395],{"className":30429,"code":93394,"language":30431,"meta":23,"style":23},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[25,93396,93397,93402,93418,93423],{"__ignoreMap":23},[28,93398,93399],{"class":30,"line":31},[28,93400,93401],{"class":269},"#求中位数\n",[28,93403,93404,93406,93408,93410,93412,93414,93416],{"class":30,"line":42},[28,93405,473],{"class":211},[28,93407,257],{"class":207},[28,93409,93053],{"class":211},[28,93411,427],{"class":38},[28,93413,588],{"class":211},[28,93415,656],{"class":38},[28,93417,218],{"class":211},[28,93419,93420],{"class":30,"line":50},[28,93421,93422],{"class":211},"np.median(b)\n",[28,93424,93425],{"class":30,"line":58},[28,93426,93427],{"class":269},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[149,93429,93431],{"id":93430},"_115-power求幂运算函数","11.5 power()求幂运算函数",[18,93433,93435],{"className":30429,"code":93434,"language":30431,"meta":23,"style":23},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[25,93436,93437,93453,93458,93463,93472,93477,93486],{"__ignoreMap":23},[28,93438,93439,93441,93443,93445,93447,93449,93451],{"class":30,"line":31},[28,93440,473],{"class":211},[28,93442,257],{"class":207},[28,93444,93053],{"class":211},[28,93446,427],{"class":38},[28,93448,588],{"class":211},[28,93450,656],{"class":38},[28,93452,218],{"class":211},[28,93454,93455],{"class":30,"line":42},[28,93456,93457],{"class":269},"#幂运算\n",[28,93459,93460],{"class":30,"line":50},[28,93461,93462],{"class":269},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[28,93464,93465,93468,93470],{"class":30,"line":58},[28,93466,93467],{"class":211},"np.power(b,",[28,93469,288],{"class":38},[28,93471,218],{"class":211},[28,93473,93474],{"class":30,"line":70},[28,93475,93476],{"class":269},"#或者以下代码，将数据存储起来\n",[28,93478,93479,93481,93483],{"class":30,"line":78},[28,93480,1055],{"class":211},[28,93482,257],{"class":207},[28,93484,93485],{"class":211},"np.empty_like(b)\n",[28,93487,93488,93490,93492,93494,93496,93498],{"class":30,"line":86},[28,93489,93467],{"class":211},[28,93491,288],{"class":38},[28,93493,588],{"class":211},[28,93495,93105],{"class":5293},[28,93497,257],{"class":207},[28,93499,93500],{"class":211},"y)\n",[149,93502,93504],{"id":93503},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[18,93506,93508],{"className":30429,"code":93507,"language":30431,"meta":23,"style":23},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[25,93509,93510,93526,93531,93536,93540,93558],{"__ignoreMap":23},[28,93511,93512,93514,93516,93518,93520,93522,93524],{"class":30,"line":31},[28,93513,473],{"class":211},[28,93515,257],{"class":207},[28,93517,93053],{"class":211},[28,93519,427],{"class":38},[28,93521,588],{"class":211},[28,93523,656],{"class":38},[28,93525,218],{"class":211},[28,93527,93528],{"class":30,"line":42},[28,93529,93530],{"class":269},"#开方\n",[28,93532,93533],{"class":30,"line":50},[28,93534,93535],{"class":211},"np.sqrt(b)\n",[28,93537,93538],{"class":30,"line":58},[28,93539,93476],{"class":269},[28,93541,93542,93544,93546,93549,93552,93554,93556],{"class":30,"line":70},[28,93543,1055],{"class":211},[28,93545,257],{"class":207},[28,93547,93548],{"class":211},"np.empty_like(b,",[28,93550,93551],{"class":5293},"dtype",[28,93553,257],{"class":207},[28,93555,251],{"class":38},[28,93557,218],{"class":211},[28,93559,93560,93563,93565,93567],{"class":30,"line":78},[28,93561,93562],{"class":211},"np.sqrt(b,",[28,93564,93105],{"class":5293},[28,93566,257],{"class":207},[28,93568,93500],{"class":211},[149,93570,93572],{"id":93571},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93574,93575],{},"对数组中的元素累计求和，可指定轴",[14,93577,93578],{},"#累计求和的意思是：",[14,93580,93581],{},"a = np.array([1, 2, 3, 4])",[14,93583,93584],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[18,93586,93588],{"className":30429,"code":93587,"language":30431,"meta":23,"style":23},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[25,93589,93590,93606,93611,93616],{"__ignoreMap":23},[28,93591,93592,93594,93596,93598,93600,93602,93604],{"class":30,"line":31},[28,93593,473],{"class":211},[28,93595,257],{"class":207},[28,93597,93053],{"class":211},[28,93599,427],{"class":38},[28,93601,588],{"class":211},[28,93603,656],{"class":38},[28,93605,218],{"class":211},[28,93607,93608],{"class":30,"line":42},[28,93609,93610],{"class":211},"np.cumsum(b)\n",[28,93612,93613],{"class":30,"line":50},[28,93614,93615],{"class":269},"#结果：\n",[28,93617,93618],{"class":30,"line":58},[28,93619,93620],{"class":269},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[149,93622,93624],{"id":93623},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[18,93626,93628],{"className":30429,"code":93627,"language":30431,"meta":23,"style":23},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[25,93629,93630,93646,93651,93656,93660],{"__ignoreMap":23},[28,93631,93632,93634,93636,93638,93640,93642,93644],{"class":30,"line":31},[28,93633,473],{"class":211},[28,93635,257],{"class":207},[28,93637,93053],{"class":211},[28,93639,427],{"class":38},[28,93641,588],{"class":211},[28,93643,656],{"class":38},[28,93645,218],{"class":211},[28,93647,93648],{"class":30,"line":42},[28,93649,93650],{"class":269},"#对数组中的元素累计求积，可指定轴\n",[28,93652,93653],{"class":30,"line":50},[28,93654,93655],{"class":211},"np.cumprod(b)\n",[28,93657,93658],{"class":30,"line":58},[28,93659,93615],{"class":269},[28,93661,93662],{"class":30,"line":70},[28,93663,93664],{"class":269},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[149,93666,93668],{"id":93667},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[18,93670,93672],{"className":30429,"code":93671,"language":30431,"meta":23,"style":23},"#删除数组中的重复数据，并对数据进行排序\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",[25,93673,93674,93679,93727,93732,93736],{"__ignoreMap":23},[28,93675,93676],{"class":30,"line":31},[28,93677,93678],{"class":269},"#删除数组中的重复数据，并对数据进行排序\n",[28,93680,93681,93683,93685,93687,93689,93691,93693,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725],{"class":30,"line":42},[28,93682,448],{"class":211},[28,93684,257],{"class":207},[28,93686,93075],{"class":211},[28,93688,427],{"class":38},[28,93690,588],{"class":211},[28,93692,288],{"class":38},[28,93694,588],{"class":211},[28,93696,282],{"class":38},[28,93698,588],{"class":211},[28,93700,708],{"class":38},[28,93702,588],{"class":211},[28,93704,282],{"class":38},[28,93706,588],{"class":211},[28,93708,656],{"class":38},[28,93710,588],{"class":211},[28,93712,407],{"class":38},[28,93714,588],{"class":211},[28,93716,401],{"class":38},[28,93718,588],{"class":211},[28,93720,985],{"class":38},[28,93722,588],{"class":211},[28,93724,503],{"class":38},[28,93726,4734],{"class":211},[28,93728,93729],{"class":30,"line":50},[28,93730,93731],{"class":211},"np.unique(a)\n",[28,93733,93734],{"class":30,"line":58},[28,93735,93615],{"class":269},[28,93737,93738],{"class":30,"line":70},[28,93739,93740],{"class":269},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93742,93743],{},"升序形式排序",[149,93745,93747],{"id":93746},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[18,93749,93751],{"className":30429,"code":93750,"language":30431,"meta":23,"style":23},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[25,93752,93753,93801,93806],{"__ignoreMap":23},[28,93754,93755,93757,93759,93761,93763,93765,93767,93769,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799],{"class":30,"line":31},[28,93756,448],{"class":211},[28,93758,257],{"class":207},[28,93760,93075],{"class":211},[28,93762,427],{"class":38},[28,93764,588],{"class":211},[28,93766,288],{"class":38},[28,93768,588],{"class":211},[28,93770,282],{"class":38},[28,93772,588],{"class":211},[28,93774,708],{"class":38},[28,93776,588],{"class":211},[28,93778,282],{"class":38},[28,93780,588],{"class":211},[28,93782,656],{"class":38},[28,93784,588],{"class":211},[28,93786,407],{"class":38},[28,93788,588],{"class":211},[28,93790,401],{"class":38},[28,93792,588],{"class":211},[28,93794,985],{"class":38},[28,93796,588],{"class":211},[28,93798,503],{"class":38},[28,93800,4734],{"class":211},[28,93802,93803],{"class":30,"line":42},[28,93804,93805],{"class":269},"#返回数组中非零元素的索引\n",[28,93807,93808],{"class":30,"line":50},[28,93809,93810],{"class":211},"np.nonzero(a)\n",[149,93812,93814],{"id":93813},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[18,93816,93818],{"className":30429,"code":93817,"language":30431,"meta":23,"style":23},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[25,93819,93820,93868,93873],{"__ignoreMap":23},[28,93821,93822,93824,93826,93828,93830,93832,93834,93836,93838,93840,93842,93844,93846,93848,93850,93852,93854,93856,93858,93860,93862,93864,93866],{"class":30,"line":31},[28,93823,448],{"class":211},[28,93825,257],{"class":207},[28,93827,93075],{"class":211},[28,93829,427],{"class":38},[28,93831,588],{"class":211},[28,93833,288],{"class":38},[28,93835,588],{"class":211},[28,93837,282],{"class":38},[28,93839,588],{"class":211},[28,93841,708],{"class":38},[28,93843,588],{"class":211},[28,93845,282],{"class":38},[28,93847,588],{"class":211},[28,93849,656],{"class":38},[28,93851,588],{"class":211},[28,93853,407],{"class":38},[28,93855,588],{"class":211},[28,93857,401],{"class":38},[28,93859,588],{"class":211},[28,93861,985],{"class":38},[28,93863,588],{"class":211},[28,93865,503],{"class":38},[28,93867,4734],{"class":211},[28,93869,93870],{"class":30,"line":42},[28,93871,93872],{"class":269},"#计算一组数中最大值与最小值的差，可指定轴\n",[28,93874,93875],{"class":30,"line":50},[28,93876,93877],{"class":211},"np.ptp(a)\n",[126,93879,93880],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":93882},[93883,93884,93885,93886,93887,93888,93889,93890,93891,93892,93893],{"id":93145,"depth":42,"text":93146},{"id":93188,"depth":42,"text":93189},{"id":93296,"depth":42,"text":93297},{"id":93390,"depth":42,"text":93391},{"id":93430,"depth":42,"text":93431},{"id":93503,"depth":42,"text":93504},{"id":93571,"depth":42,"text":93572},{"id":93623,"depth":42,"text":93624},{"id":93667,"depth":42,"text":93668},{"id":93746,"depth":42,"text":93747},{"id":93813,"depth":42,"text":93814},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93131,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93900,"title":93901,"body":93902,"description":131,"extension":132,"meta":94557,"navigation":134,"path":94558,"seo":94559,"stem":94560,"__hash__":94561},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93903,"toc":94545},[93904,93907,93911,93914,94130,94134,94137,94346,94350,94416,94421,94425,94428,94431,94469,94473,94476,94481,94485,94488,94491,94496,94500,94503,94507,94510,94513,94518,94522,94525,94528,94533,94537,94542],[10,93905,93901],{"id":93906},"_12其他常用函数",[149,93908,93910],{"id":93909},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93912,93913],{},"将数组的数据按照行列复制扩展",[18,93915,93917],{"className":30429,"code":93916,"language":30431,"meta":23,"style":23},"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",[25,93918,93919,93935,93944,93948,93953,93958,93971,93975,93980,93985,93990,93994,93999,94023,94035,94039,94043,94048,94053,94058,94063,94067,94080,94084,94088,94093,94098,94103,94108,94113,94117,94121,94126],{"__ignoreMap":23},[28,93920,93921,93923,93925,93927,93929,93931,93933],{"class":30,"line":31},[28,93922,448],{"class":211},[28,93924,257],{"class":207},[28,93926,93053],{"class":211},[28,93928,427],{"class":38},[28,93930,588],{"class":211},[28,93932,529],{"class":38},[28,93934,218],{"class":211},[28,93936,93937,93940,93942],{"class":30,"line":42},[28,93938,93939],{"class":211},"np.tile(a,",[28,93941,288],{"class":38},[28,93943,218],{"class":211},[28,93945,93946],{"class":30,"line":50},[28,93947,93615],{"class":269},[28,93949,93950],{"class":30,"line":58},[28,93951,93952],{"class":269},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[28,93954,93955],{"class":30,"line":70},[28,93956,93957],{"class":269},"#行复制两次，列复制三次\n",[28,93959,93960,93963,93965,93967,93969],{"class":30,"line":78},[28,93961,93962],{"class":211},"np.tile(a,(",[28,93964,288],{"class":38},[28,93966,588],{"class":211},[28,93968,282],{"class":38},[28,93970,30548],{"class":211},[28,93972,93973],{"class":30,"line":86},[28,93974,93615],{"class":269},[28,93976,93977],{"class":30,"line":97},[28,93978,93979],{"class":64},"'''\n",[28,93981,93982],{"class":30,"line":108},[28,93983,93984],{"class":64},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[28,93986,93987],{"class":30,"line":1407},[28,93988,93989],{"class":64},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[28,93991,93992],{"class":30,"line":1690},[28,93993,93979],{"class":64},[28,93995,93996],{"class":30,"line":1695},[28,93997,93998],{"class":269},"#创建二维数组\n",[28,94000,94001,94003,94005,94007,94009,94011,94013,94015,94017,94019,94021],{"class":30,"line":1701},[28,94002,93357],{"class":211},[28,94004,257],{"class":207},[28,94006,93053],{"class":211},[28,94008,427],{"class":38},[28,94010,588],{"class":211},[28,94012,733],{"class":38},[28,94014,93058],{"class":211},[28,94016,503],{"class":38},[28,94018,588],{"class":211},[28,94020,282],{"class":38},[28,94022,218],{"class":211},[28,94024,94025,94028,94030,94032],{"class":30,"line":1706},[28,94026,94027],{"class":211},"np.tile(aa,",[28,94029,288],{"class":38},[28,94031,639],{"class":211},[28,94033,94034],{"class":269},"#一个数的时候就是行\n",[28,94036,94037],{"class":30,"line":1720},[28,94038,93615],{"class":269},[28,94040,94041],{"class":30,"line":1725},[28,94042,93979],{"class":64},[28,94044,94045],{"class":30,"line":1731},[28,94046,94047],{"class":64},"array([[ 1,  2,  3,  1,  2,  3],\n",[28,94049,94050],{"class":30,"line":1752},[28,94051,94052],{"class":64},"       [ 4,  5,  6,  4,  5,  6],\n",[28,94054,94055],{"class":30,"line":1757},[28,94056,94057],{"class":64},"       [ 7,  8,  9,  7,  8,  9],\n",[28,94059,94060],{"class":30,"line":1771},[28,94061,94062],{"class":64},"       [10, 11, 12, 10, 11, 12]])\n",[28,94064,94065],{"class":30,"line":1776},[28,94066,93979],{"class":64},[28,94068,94069,94072,94074,94076,94078],{"class":30,"line":1805},[28,94070,94071],{"class":211},"np.tile(aa,(",[28,94073,288],{"class":38},[28,94075,588],{"class":211},[28,94077,282],{"class":38},[28,94079,30548],{"class":211},[28,94081,94082],{"class":30,"line":1810},[28,94083,93615],{"class":269},[28,94085,94086],{"class":30,"line":1827},[28,94087,93979],{"class":64},[28,94089,94090],{"class":30,"line":1832},[28,94091,94092],{"class":64},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[28,94094,94095],{"class":30,"line":1837},[28,94096,94097],{"class":64},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[28,94099,94100],{"class":30,"line":1842},[28,94101,94102],{"class":64},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[28,94104,94105],{"class":30,"line":1856},[28,94106,94107],{"class":64},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[28,94109,94110],{"class":30,"line":1861},[28,94111,94112],{"class":64},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[28,94114,94115],{"class":30,"line":2654},[28,94116,94097],{"class":64},[28,94118,94119],{"class":30,"line":2668},[28,94120,94102],{"class":64},[28,94122,94123],{"class":30,"line":2676},[28,94124,94125],{"class":64},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[28,94127,94128],{"class":30,"line":2681},[28,94129,93979],{"class":64},[149,94131,94133],{"id":94132},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94135,94136],{},"repeat()将数组中的每个元素重复若干次",[18,94138,94140],{"className":30429,"code":94139,"language":30431,"meta":23,"style":23},"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",[25,94141,94142,94158,94167,94171,94176,94200,94205,94214,94218,94223,94227,94232,94248,94252,94256,94261,94266,94271,94275,94280,94284,94289,94294,94298,94314,94318,94322,94327,94332,94337,94342],{"__ignoreMap":23},[28,94143,94144,94146,94148,94150,94152,94154,94156],{"class":30,"line":31},[28,94145,448],{"class":211},[28,94147,257],{"class":207},[28,94149,93053],{"class":211},[28,94151,427],{"class":38},[28,94153,588],{"class":211},[28,94155,529],{"class":38},[28,94157,218],{"class":211},[28,94159,94160,94163,94165],{"class":30,"line":42},[28,94161,94162],{"class":211},"np.repeat(a,",[28,94164,282],{"class":38},[28,94166,218],{"class":211},[28,94168,94169],{"class":30,"line":50},[28,94170,93615],{"class":269},[28,94172,94173],{"class":30,"line":58},[28,94174,94175],{"class":269},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[28,94177,94178,94180,94182,94184,94186,94188,94190,94192,94194,94196,94198],{"class":30,"line":70},[28,94179,93357],{"class":211},[28,94181,257],{"class":207},[28,94183,93053],{"class":211},[28,94185,427],{"class":38},[28,94187,588],{"class":211},[28,94189,733],{"class":38},[28,94191,93058],{"class":211},[28,94193,503],{"class":38},[28,94195,588],{"class":211},[28,94197,282],{"class":38},[28,94199,218],{"class":211},[28,94201,94202],{"class":30,"line":78},[28,94203,94204],{"class":269},"#这个重复之后二维变成一维\n",[28,94206,94207,94210,94212],{"class":30,"line":86},[28,94208,94209],{"class":211},"np.repeat(aa,",[28,94211,288],{"class":38},[28,94213,218],{"class":211},[28,94215,94216],{"class":30,"line":97},[28,94217,93979],{"class":64},[28,94219,94220],{"class":30,"line":108},[28,94221,94222],{"class":64},"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",[28,94224,94225],{"class":30,"line":1407},[28,94226,93979],{"class":64},[28,94228,94229],{"class":30,"line":1690},[28,94230,94231],{"class":269},"#指定axis\n",[28,94233,94234,94236,94238,94240,94242,94244,94246],{"class":30,"line":1695},[28,94235,94209],{"class":211},[28,94237,288],{"class":38},[28,94239,588],{"class":211},[28,94241,47565],{"class":5293},[28,94243,257],{"class":207},[28,94245,401],{"class":38},[28,94247,218],{"class":211},[28,94249,94250],{"class":30,"line":1701},[28,94251,93615],{"class":269},[28,94253,94254],{"class":30,"line":1706},[28,94255,93979],{"class":64},[28,94257,94258],{"class":30,"line":1720},[28,94259,94260],{"class":64},"array([[ 1,  2,  3],\n",[28,94262,94263],{"class":30,"line":1725},[28,94264,94265],{"class":64},"       [ 1,  2,  3],\n",[28,94267,94268],{"class":30,"line":1731},[28,94269,94270],{"class":64},"       [ 4,  5,  6],\n",[28,94272,94273],{"class":30,"line":1752},[28,94274,94270],{"class":64},[28,94276,94277],{"class":30,"line":1757},[28,94278,94279],{"class":64},"       [ 7,  8,  9],\n",[28,94281,94282],{"class":30,"line":1771},[28,94283,94279],{"class":64},[28,94285,94286],{"class":30,"line":1776},[28,94287,94288],{"class":64},"       [10, 11, 12],\n",[28,94290,94291],{"class":30,"line":1805},[28,94292,94293],{"class":64},"       [10, 11, 12]])\n",[28,94295,94296],{"class":30,"line":1810},[28,94297,93979],{"class":64},[28,94299,94300,94302,94304,94306,94308,94310,94312],{"class":30,"line":1827},[28,94301,94209],{"class":211},[28,94303,288],{"class":38},[28,94305,588],{"class":211},[28,94307,47565],{"class":5293},[28,94309,257],{"class":207},[28,94311,427],{"class":38},[28,94313,218],{"class":211},[28,94315,94316],{"class":30,"line":1832},[28,94317,93615],{"class":269},[28,94319,94320],{"class":30,"line":1837},[28,94321,93979],{"class":64},[28,94323,94324],{"class":30,"line":1842},[28,94325,94326],{"class":64},"array([[ 1,  1,  2,  2,  3,  3],\n",[28,94328,94329],{"class":30,"line":1856},[28,94330,94331],{"class":64},"       [ 4,  4,  5,  5,  6,  6],\n",[28,94333,94334],{"class":30,"line":1861},[28,94335,94336],{"class":64},"       [ 7,  7,  8,  8,  9,  9],\n",[28,94338,94339],{"class":30,"line":2654},[28,94340,94341],{"class":64},"       [10, 10, 11, 11, 12, 12]])\n",[28,94343,94344],{"class":30,"line":2668},[28,94345,93979],{"class":64},[149,94347,94349],{"id":94348},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[18,94351,94353],{"className":30429,"code":94352,"language":30431,"meta":23,"style":23},"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",[25,94354,94355,94371,94376,94388,94392,94397,94407,94411],{"__ignoreMap":23},[28,94356,94357,94359,94361,94363,94365,94367,94369],{"class":30,"line":31},[28,94358,448],{"class":211},[28,94360,257],{"class":207},[28,94362,93053],{"class":211},[28,94364,427],{"class":38},[28,94366,588],{"class":211},[28,94368,529],{"class":38},[28,94370,218],{"class":211},[28,94372,94373],{"class":30,"line":42},[28,94374,94375],{"class":269},"#array([，2，3，4])\n",[28,94377,94378,94381,94383,94385],{"class":30,"line":50},[28,94379,94380],{"class":211},"np.roll(a,",[28,94382,288],{"class":38},[28,94384,639],{"class":211},[28,94386,94387],{"class":269},"#传正数向后调多少位，传负数向前调多少位\n",[28,94389,94390],{"class":30,"line":58},[28,94391,93615],{"class":269},[28,94393,94394],{"class":30,"line":70},[28,94395,94396],{"class":269},"#array([3, 4, 1, 2])\n",[28,94398,94399,94401,94403,94405],{"class":30,"line":78},[28,94400,94380],{"class":211},[28,94402,742],{"class":207},[28,94404,427],{"class":38},[28,94406,218],{"class":211},[28,94408,94409],{"class":30,"line":86},[28,94410,93615],{"class":269},[28,94412,94413],{"class":30,"line":97},[28,94414,94415],{"class":269},"#array([2, 3, 4, 1])\n",[14,94417,94418],{},[1540,94419],{"alt":23,"src":94420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[149,94422,94424],{"id":94423},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94426,94427],{},"resize()重新调整数组的大小",[14,94429,94430],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[18,94432,94434],{"className":30429,"code":94433,"language":30431,"meta":23,"style":23},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[25,94435,94436,94441,94454],{"__ignoreMap":23},[28,94437,94438],{"class":30,"line":31},[28,94439,94440],{"class":269},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[28,94442,94443,94446,94448,94450,94452],{"class":30,"line":42},[28,94444,94445],{"class":211},"np.resize(aa,(",[28,94447,288],{"class":38},[28,94449,588],{"class":211},[28,94451,554],{"class":38},[28,94453,30548],{"class":211},[28,94455,94456,94458,94460,94462,94464,94466],{"class":30,"line":50},[28,94457,94445],{"class":211},[28,94459,288],{"class":38},[28,94461,588],{"class":211},[28,94463,630],{"class":38},[28,94465,82822],{"class":211},[28,94467,94468],{"class":269},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[149,94470,94472],{"id":94471},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94474,94475],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94477,94478],{},[1540,94479],{"alt":23,"src":94480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[149,94482,94484],{"id":94483},"_126-保存加载文件","12.6 保存加载文件",[14,94486,94487],{},"savetxt():将数据保存到txt文件中",[14,94489,94490],{},"loadtxt():从文件加载数据",[14,94492,94493],{},[1540,94494],{"alt":23,"src":94495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[149,94497,94499],{"id":94498},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94501,94502],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[149,94504,94506],{"id":94505},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94508,94509],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94511,94512],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94514,94515],{},[1540,94516],{"alt":23,"src":94517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[149,94519,94521],{"id":94520},"_129-where语句","12.9 where语句",[14,94523,94524],{},"np.where(条件,x,y)",[14,94526,94527],{},"如果条件为True,对应值为x,否则对应值为y",[14,94529,94530],{},[1540,94531],{"alt":23,"src":94532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[149,94534,94536],{"id":94535},"_1210-dot矩阵","12.10 dot()矩阵",[14,94538,94539],{},[1540,94540],{"alt":23,"src":94541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[126,94543,94544],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":94546},[94547,94548,94549,94550,94551,94552,94553,94554,94555,94556],{"id":93909,"depth":42,"text":93910},{"id":94132,"depth":42,"text":94133},{"id":94348,"depth":42,"text":94349},{"id":94423,"depth":42,"text":94424},{"id":94471,"depth":42,"text":94472},{"id":94483,"depth":42,"text":94484},{"id":94498,"depth":42,"text":94499},{"id":94505,"depth":42,"text":94506},{"id":94520,"depth":42,"text":94521},{"id":94535,"depth":42,"text":94536},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93901,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94563,"title":94564,"body":94565,"description":131,"extension":132,"meta":94918,"navigation":134,"path":94919,"seo":94920,"stem":94921,"__hash__":94922},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94566,"toc":94916},[94567,94570,94573,94576,94579,94582,94647,94649,94913],[10,94568,94564],{"id":94569},"_13数组排序",[14,94571,94572],{},"排序主要用到的方法是np.sort和np.argsort",[14,94574,94575],{},"其中np.sort()对数组直接排序",[14,94577,94578],{},"而np.argsort()是返回排序后的原始索引",[14,94580,94581],{},"①一维数组",[18,94583,94585],{"className":30429,"code":94584,"language":30431,"meta":23,"style":23},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[25,94586,94587,94591,94631,94639],{"__ignoreMap":23},[28,94588,94589],{"class":30,"line":31},[28,94590,93156],{"class":269},[28,94592,94593,94595,94597,94599,94601,94603,94605,94607,94609,94611,94613,94615,94617,94619,94621,94623,94625,94627,94629],{"class":30,"line":42},[28,94594,448],{"class":211},[28,94596,257],{"class":207},[28,94598,93075],{"class":211},[28,94600,282],{"class":38},[28,94602,588],{"class":211},[28,94604,708],{"class":38},[28,94606,588],{"class":211},[28,94608,605],{"class":38},[28,94610,588],{"class":211},[28,94612,985],{"class":38},[28,94614,588],{"class":211},[28,94616,489],{"class":38},[28,94618,588],{"class":211},[28,94620,1103],{"class":38},[28,94622,588],{"class":211},[28,94624,554],{"class":38},[28,94626,588],{"class":211},[28,94628,656],{"class":38},[28,94630,4734],{"class":211},[28,94632,94633,94636],{"class":30,"line":50},[28,94634,94635],{"class":211},"np.sort(a)",[28,94637,94638],{"class":269},"#升序排序\n",[28,94640,94641,94644],{"class":30,"line":58},[28,94642,94643],{"class":211},"np.argsort(a)",[28,94645,94646],{"class":269},"#按照元素大小来索引排序\n",[14,94648,93342],{},[18,94650,94652],{"className":30429,"code":94651,"language":30431,"meta":23,"style":23},"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",[25,94653,94654,94666,94692,94697,94701,94706,94711,94716,94721,94725,94733,94737,94742,94747,94752,94757,94761,94766,94779,94783,94788,94793,94798,94803,94807,94812,94824,94828,94832,94836,94840,94844,94848,94853,94868,94873,94882,94887,94891,94895,94900,94904,94909],{"__ignoreMap":23},[28,94655,94656,94659,94661,94663],{"class":30,"line":31},[28,94657,94658],{"class":211},"np.random.seed(",[28,94660,401],{"class":38},[28,94662,639],{"class":211},[28,94664,94665],{"class":269},"#保证每次值一样\n",[28,94667,94668,94670,94672,94674,94676,94678,94680,94682,94684,94686,94688,94690],{"class":30,"line":42},[28,94669,93357],{"class":211},[28,94671,257],{"class":207},[28,94673,93165],{"class":211},[28,94675,521],{"class":38},[28,94677,588],{"class":211},[28,94679,31547],{"class":5293},[28,94681,257],{"class":207},[28,94683,212],{"class":211},[28,94685,503],{"class":38},[28,94687,588],{"class":211},[28,94689,554],{"class":38},[28,94691,30548],{"class":211},[28,94693,94694],{"class":30,"line":50},[28,94695,94696],{"class":269},"#原数组：\n",[28,94698,94699],{"class":30,"line":58},[28,94700,93979],{"class":64},[28,94702,94703],{"class":30,"line":70},[28,94704,94705],{"class":64},"array([[44, 47, 64, 67, 67,  9],\n",[28,94707,94708],{"class":30,"line":78},[28,94709,94710],{"class":64},"       [83, 21, 36, 87, 70, 88],\n",[28,94712,94713],{"class":30,"line":86},[28,94714,94715],{"class":64},"       [88, 12, 58, 65, 39, 87],\n",[28,94717,94718],{"class":30,"line":97},[28,94719,94720],{"class":64},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[28,94722,94723],{"class":30,"line":108},[28,94724,93979],{"class":64},[28,94726,94727,94730],{"class":30,"line":1407},[28,94728,94729],{"class":211},"np.sort(aa)",[28,94731,94732],{"class":269},"#每行进行了排序\n",[28,94734,94735],{"class":30,"line":1690},[28,94736,93979],{"class":64},[28,94738,94739],{"class":30,"line":1695},[28,94740,94741],{"class":64},"array([[ 9, 44, 47, 64, 67, 67],\n",[28,94743,94744],{"class":30,"line":1701},[28,94745,94746],{"class":64},"       [21, 36, 70, 83, 87, 88],\n",[28,94748,94749],{"class":30,"line":1706},[28,94750,94751],{"class":64},"       [12, 39, 58, 65, 87, 88],\n",[28,94753,94754],{"class":30,"line":1720},[28,94755,94756],{"class":64},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[28,94758,94759],{"class":30,"line":1725},[28,94760,93979],{"class":64},[28,94762,94763],{"class":30,"line":1731},[28,94764,94765],{"class":269},"#axis=0时\n",[28,94767,94768,94771,94773,94775,94777],{"class":30,"line":1752},[28,94769,94770],{"class":211},"np.sort(aa,",[28,94772,47565],{"class":5293},[28,94774,257],{"class":207},[28,94776,401],{"class":38},[28,94778,218],{"class":211},[28,94780,94781],{"class":30,"line":1757},[28,94782,93979],{"class":64},[28,94784,94785],{"class":30,"line":1771},[28,94786,94787],{"class":64},"array([[44, 12, 36, 37, 25,  9],\n",[28,94789,94790],{"class":30,"line":1776},[28,94791,94792],{"class":64},"       [46, 21, 58, 65, 39, 77],\n",[28,94794,94795],{"class":30,"line":1805},[28,94796,94797],{"class":64},"       [83, 47, 64, 67, 67, 87],\n",[28,94799,94800],{"class":30,"line":1810},[28,94801,94802],{"class":64},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[28,94804,94805],{"class":30,"line":1827},[28,94806,93979],{"class":64},[28,94808,94809],{"class":30,"line":1832},[28,94810,94811],{"class":269},"#axis=1时,为默认值\n",[28,94813,94814,94816,94818,94820,94822],{"class":30,"line":1837},[28,94815,94770],{"class":211},[28,94817,47565],{"class":5293},[28,94819,257],{"class":207},[28,94821,427],{"class":38},[28,94823,218],{"class":211},[28,94825,94826],{"class":30,"line":1842},[28,94827,93979],{"class":64},[28,94829,94830],{"class":30,"line":1856},[28,94831,94741],{"class":64},[28,94833,94834],{"class":30,"line":1861},[28,94835,94746],{"class":64},[28,94837,94838],{"class":30,"line":2654},[28,94839,94751],{"class":64},[28,94841,94842],{"class":30,"line":2668},[28,94843,94756],{"class":64},[28,94845,94846],{"class":30,"line":2676},[28,94847,93979],{"class":64},[28,94849,94850],{"class":30,"line":2681},[28,94851,94852],{"class":269},"#按最后一列排序\n",[28,94854,94855,94857,94859,94862,94864,94866],{"class":30,"line":2687},[28,94856,473],{"class":211},[28,94858,257],{"class":207},[28,94860,94861],{"class":211},"aa[:,",[28,94863,742],{"class":207},[28,94865,427],{"class":38},[28,94867,33297],{"class":211},[28,94869,94870],{"class":30,"line":2693},[28,94871,94872],{"class":269},"#获取最后一列排好序的索引\n",[28,94874,94875,94877,94879],{"class":30,"line":2698},[28,94876,74109],{"class":211},[28,94878,257],{"class":207},[28,94880,94881],{"class":211},"np.argsort(b)\n",[28,94883,94884],{"class":30,"line":8025},[28,94885,94886],{"class":211},"aa[index]\n",[28,94888,94889],{"class":30,"line":8049},[28,94890,93979],{"class":64},[28,94892,94893],{"class":30,"line":8054},[28,94894,94705],{"class":64},[28,94896,94897],{"class":30,"line":8060},[28,94898,94899],{"class":64},"       [46, 88, 81, 37, 25, 77],\n",[28,94901,94902],{"class":30,"line":8087},[28,94903,94715],{"class":64},[28,94905,94906],{"class":30,"line":8092},[28,94907,94908],{"class":64},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[28,94910,94911],{"class":30,"line":8098},[28,94912,93979],{"class":64},[126,94914,94915],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":23,"searchDepth":42,"depth":42,"links":94917},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94564,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94924,"title":94925,"body":94926,"description":131,"extension":132,"meta":94956,"navigation":134,"path":94957,"seo":94958,"stem":94959,"__hash__":94960},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94927,"toc":94954},[94928,94931,94934,94937,94940,94943,94946,94949],[10,94929,94925],{"id":94930},"_14广播机制",[14,94932,94933],{},"广播的规则：",[14,94935,94936],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94938,94939],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94941,94942],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94944,94945],{},"3.如果没有维度形状为1，则会引发异常",[14,94947,94948],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94950,94951],{},[1540,94952],{"alt":23,"src":94953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":23,"searchDepth":42,"depth":42,"links":94955},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94925,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94962,"title":94963,"body":94964,"description":131,"extension":132,"meta":95062,"navigation":134,"path":95063,"seo":95064,"stem":95065,"__hash__":95066},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94965,"toc":95060},[94966,94969,94972,95057],[10,94967,94963],{"id":94968},"_15比较掩码",[14,94970,94971],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[18,94973,94975],{"className":30429,"code":94974,"language":30431,"meta":23,"style":23},"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",[25,94976,94977,95023,95034,95048,95052],{"__ignoreMap":23},[28,94978,94979,94981,94983,94986,94988,94990,94992,94994,94996,94998,95000,95002,95004,95006,95008,95010,95012,95014,95016,95018,95020],{"class":30,"line":31},[28,94980,448],{"class":211},[28,94982,257],{"class":207},[28,94984,94985],{"class":211},"np.array([[",[28,94987,427],{"class":38},[28,94989,588],{"class":211},[28,94991,288],{"class":38},[28,94993,588],{"class":211},[28,94995,282],{"class":38},[28,94997,48081],{"class":211},[28,94999,682],{"class":38},[28,95001,588],{"class":211},[28,95003,708],{"class":38},[28,95005,588],{"class":211},[28,95007,733],{"class":38},[28,95009,48081],{"class":211},[28,95011,935],{"class":38},[28,95013,588],{"class":211},[28,95015,960],{"class":38},[28,95017,588],{"class":211},[28,95019,985],{"class":38},[28,95021,95022],{"class":211},"]])\n",[28,95024,95025,95027,95029,95031],{"class":30,"line":42},[28,95026,448],{"class":211},[28,95028,1120],{"class":207},[28,95030,910],{"class":38},[28,95032,95033],{"class":269},"#结果是一个由True,False组成的数组\n",[28,95035,95036,95039,95041,95043,95045],{"class":30,"line":50},[28,95037,95038],{"class":211},"a[a",[28,95040,1120],{"class":207},[28,95042,910],{"class":38},[28,95044,1150],{"class":211},[28,95046,95047],{"class":269},"#小于20的元素会存到这个数组中\n",[28,95049,95050],{"class":30,"line":58},[28,95051,93615],{"class":269},[28,95053,95054],{"class":30,"line":70},[28,95055,95056],{"class":269},"#array([ 1,  2,  3, 11, 12, 13])\n",[126,95058,95059],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":42,"depth":42,"links":95061},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94963,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95068,"title":95069,"body":95070,"description":131,"extension":132,"meta":95162,"navigation":134,"path":95163,"seo":95164,"stem":95165,"__hash__":95166},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95071,"toc":95160},[95072,95075,95078,95081,95084,95087,95152,95157],[10,95073,95069],{"id":95074},"_16魔法命令time",[14,95076,95077],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95079,95080],{},"%:行模式",[14,95082,95083],{},"%%:单元格模式",[14,95085,95086],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[18,95088,95090],{"className":30429,"code":95089,"language":30431,"meta":23,"style":23},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[25,95091,95092,95097,95104,95109,95118,95131,95135,95143],{"__ignoreMap":23},[28,95093,95094],{"class":30,"line":31},[28,95095,95096],{"class":269},"#程序执行时间\n",[28,95098,95099,95101],{"class":30,"line":42},[28,95100,30443],{"class":207},[28,95102,95103],{"class":211}," time \n",[28,95105,95106],{"class":30,"line":50},[28,95107,95108],{"class":269},"#获取时间\n",[28,95110,95111,95114,95116],{"class":30,"line":58},[28,95112,95113],{"class":211},"start",[28,95115,257],{"class":207},[28,95117,32469],{"class":211},[28,95119,95120,95123,95126,95128],{"class":30,"line":70},[28,95121,95122],{"class":211},"time.sleep(",[28,95124,95125],{"class":38},"0.4",[28,95127,639],{"class":211},[28,95129,95130],{"class":269},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[28,95132,95133],{"class":30,"line":78},[28,95134,95108],{"class":269},[28,95136,95137,95139,95141],{"class":30,"line":86},[28,95138,45852],{"class":211},[28,95140,257],{"class":207},[28,95142,32469],{"class":211},[28,95144,95145,95147,95149],{"class":30,"line":97},[28,95146,45852],{"class":211},[28,95148,742],{"class":207},[28,95150,95151],{"class":211},"start\n",[14,95153,95154],{},[1540,95155],{"alt":23,"src":95156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[126,95158,95159],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":42,"depth":42,"links":95161},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95069,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95168,"title":95169,"body":95170,"description":131,"extension":132,"meta":95205,"navigation":134,"path":95206,"seo":95207,"stem":95208,"__hash__":95209},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95171,"toc":95203},[95172,95175,95178,95181,95184,95187,95190,95193,95198],[10,95173,95169],{"id":95174},"_17魔法命令timeit",[14,95176,95177],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95179,95180],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95182,95183],{},"单元格模式：",[14,95185,95186],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95188,95189],{},"初始化语句执行次数由轮数来决定",[14,95191,95192],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95194,95195],{},[1540,95196],{"alt":23,"src":95197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95199,95200],{},[1540,95201],{"alt":23,"src":95202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":23,"searchDepth":42,"depth":42,"links":95204},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95169,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95211,"title":95212,"body":95213,"description":131,"extension":132,"meta":95231,"navigation":134,"path":95232,"seo":95233,"stem":95234,"__hash__":95235},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95214,"toc":95229},[95215,95218,95221,95224],[10,95216,95212],{"id":95217},"_18魔法命令writefile和run",[14,95219,95220],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95222,95223],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95225,95226],{},[1540,95227],{"alt":23,"src":95228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":23,"searchDepth":42,"depth":42,"links":95230},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95212,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95237,"title":95238,"body":95239,"description":131,"extension":132,"meta":95292,"navigation":134,"path":95293,"seo":95294,"stem":95295,"__hash__":95296},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95240,"toc":95290},[95241,95244,95247,95249,95252,95255,95260,95263,95266,95269,95272,95275,95278,95281,95284,95287],[10,95242,95238],{"id":95243},"_19魔法命令memit",[14,95245,95246],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95248,24675],{},[14,95250,95251],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95253,95254],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95256,95257],{},[1540,95258],{"alt":23,"src":95259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95261,95262],{},"补充：",[14,95264,95265],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95267,95268],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95270,95271],{},"解决方法：",[14,95273,95274],{},"1.cmd",[14,95276,95277],{},"2.依次输入以下代码：",[14,95279,95280],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95282,95283],{},"pip install --upgrade ipython",[14,95285,95286],{},"#升级 memory_profiler 和 setuptools",[14,95288,95289],{},"pip install --upgrade memory_profiler setuptools",{"title":23,"searchDepth":42,"depth":42,"links":95291},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95238,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95298,"title":95299,"body":95300,"description":131,"extension":132,"meta":96946,"navigation":134,"path":96947,"seo":96948,"stem":96949,"__hash__":96950},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95301,"toc":96916},[95302,95305,95309,95313,95374,95377,95382,95386,95391,95396,95401,95406,95409,95414,95418,95422,95455,95458,95461,95464,95516,95519,95555,95558,95600,95604,95625,95627,95664,95666,95671,95673,95678,95682,95685,95713,95717,95721,95774,95778,95870,95874,95878,95881,95886,95890,95915,95920,95924,95927,95930,95933,95936,95939,95942,95945,95957,95961,95965,95968,96000,96003,96026,96029,96055,96058,96084,96087,96121,96124,96186,96190,96193,96197,96200,96226,96229,96232,96237,96240,96309,96311,96316,96377,96380,96391,96397,96402,96406,96409,96422,96426,96441,96443,96466,96468,96494,96497,96500,96503,96551,96553,96558,96562,96566,96593,96597,96624,96627,96632,96637,96727,96731,96789,96794,96797,96800,96842,96846,96902,96907,96910,96913],[10,95303,95299],{"id":95304},"_2创建数组",[149,95306,95308],{"id":95307},"_21-array函数创建数组","2.1 array()函数创建数组",[177,95310,95312],{"id":95311},"_221-函数语句","2.2.1 函数语句",[18,95314,95316],{"className":30429,"code":95315,"language":30431,"meta":23,"style":23},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[25,95317,95318],{"__ignoreMap":23},[28,95319,95320,95323,95326,95328,95330,95332,95334,95336,95339,95341,95344,95346,95349,95351,95353,95355,95358,95360,95363,95365,95368,95370,95372],{"class":30,"line":31},[28,95321,95322],{"class":211},"numpy.array(",[28,95324,95325],{"class":38},"object",[28,95327,12512],{"class":211},[28,95329,93551],{"class":5293},[28,95331,13641],{"class":207},[28,95333,38984],{"class":38},[28,95335,12512],{"class":211},[28,95337,95338],{"class":5293},"copy",[28,95340,13641],{"class":207},[28,95342,95343],{"class":38}," True",[28,95345,12512],{"class":211},[28,95347,95348],{"class":5293},"order",[28,95350,13641],{"class":207},[28,95352,38984],{"class":38},[28,95354,12512],{"class":211},[28,95356,95357],{"class":5293},"subok",[28,95359,13641],{"class":207},[28,95361,95362],{"class":38}," False",[28,95364,12512],{"class":211},[28,95366,95367],{"class":5293},"ndmin",[28,95369,13641],{"class":207},[28,95371,4170],{"class":38},[28,95373,218],{"class":211},[14,95375,95376],{},"参数：",[14,95378,95379],{},[1540,95380],{"alt":23,"src":95381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[177,95383,95385],{"id":95384},"_222-实例","2.2.2 实例",[14,95387,95388],{},[1540,95389],{"alt":23,"src":95390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95392,95393],{},[1540,95394],{"alt":23,"src":95395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95397,95398],{},[1540,95399],{"alt":23,"src":95400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95402,95403],{},[1540,95404],{"alt":23,"src":95405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95407,95408],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95410,95411],{},[1540,95412],{"alt":23,"src":95413},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[149,95415,95417],{"id":95416},"_22-随机数创建数组","2.2 随机数创建数组",[177,95419,95421],{"id":95420},"_221-random语句","2.2.1 random语句",[18,95423,95425],{"className":30429,"code":95424,"language":30431,"meta":23,"style":23},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[25,95426,95427,95432,95437,95445,95450],{"__ignoreMap":23},[28,95428,95429],{"class":30,"line":31},[28,95430,95431],{"class":269},"#random.random()\n",[28,95433,95434],{"class":30,"line":42},[28,95435,95436],{"class":269},"#确定随机种子,就是每次运行结果是相同的\n",[28,95438,95439,95441,95443],{"class":30,"line":50},[28,95440,94658],{"class":211},[28,95442,401],{"class":38},[28,95444,218],{"class":211},[28,95446,95447],{"class":30,"line":58},[28,95448,95449],{"class":211},"np.random.random()\n",[28,95451,95452],{"class":30,"line":70},[28,95453,95454],{"class":269},"#生成一个随机的数目\n",[14,95456,95457],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95459,95460],{},"可以指定数组形状 size",[14,95462,95463],{},"①生成一维数组",[18,95465,95467],{"className":30429,"code":95466,"language":30431,"meta":23,"style":23},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[25,95468,95469,95474,95487,95492,95508],{"__ignoreMap":23},[28,95470,95471],{"class":30,"line":31},[28,95472,95473],{"class":269},"#random.random(size())\n",[28,95475,95476,95479,95481,95483,95485],{"class":30,"line":42},[28,95477,95478],{"class":211},"np.random.random(",[28,95480,31547],{"class":5293},[28,95482,257],{"class":207},[28,95484,529],{"class":38},[28,95486,218],{"class":211},[28,95488,95489],{"class":30,"line":50},[28,95490,95491],{"class":269},"#生成一位的五个元素\n",[28,95493,95494,95496,95498,95500,95502,95504,95506],{"class":30,"line":58},[28,95495,448],{"class":211},[28,95497,257],{"class":207},[28,95499,95478],{"class":211},[28,95501,31547],{"class":5293},[28,95503,257],{"class":207},[28,95505,503],{"class":38},[28,95507,218],{"class":211},[28,95509,95510,95513],{"class":30,"line":70},[28,95511,95512],{"class":211},"a.shape ",[28,95514,95515],{"class":269},"#输出数组形状\n",[14,95517,95518],{},"②生成二维数组",[18,95520,95522],{"className":30429,"code":95521,"language":30431,"meta":23,"style":23},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[25,95523,95524,95528,95550],{"__ignoreMap":23},[28,95525,95526],{"class":30,"line":31},[28,95527,93352],{"class":269},[28,95529,95530,95532,95534,95536,95538,95540,95542,95544,95546,95548],{"class":30,"line":42},[28,95531,93357],{"class":211},[28,95533,257],{"class":207},[28,95535,95478],{"class":211},[28,95537,31547],{"class":5293},[28,95539,257],{"class":207},[28,95541,212],{"class":211},[28,95543,503],{"class":38},[28,95545,588],{"class":211},[28,95547,529],{"class":38},[28,95549,30548],{"class":211},[28,95551,95552],{"class":30,"line":50},[28,95553,95554],{"class":269},"#生成四行五列的数组\n",[14,95556,95557],{},"③生成三维数组",[18,95559,95561],{"className":30429,"code":95560,"language":30431,"meta":23,"style":23},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[25,95562,95563,95568,95595],{"__ignoreMap":23},[28,95564,95565],{"class":30,"line":31},[28,95566,95567],{"class":269},"#三维数组\n",[28,95569,95570,95573,95575,95577,95579,95581,95583,95585,95587,95589,95591,95593],{"class":30,"line":42},[28,95571,95572],{"class":211},"aaa",[28,95574,257],{"class":207},[28,95576,95478],{"class":211},[28,95578,31547],{"class":5293},[28,95580,257],{"class":207},[28,95582,212],{"class":211},[28,95584,288],{"class":38},[28,95586,588],{"class":211},[28,95588,282],{"class":38},[28,95590,588],{"class":211},[28,95592,503],{"class":38},[28,95594,30548],{"class":211},[28,95596,95597],{"class":30,"line":50},[28,95598,95599],{"class":211},"aaa.shape\n",[177,95601,95603],{"id":95602},"_222-randint语句","2.2.2 randint语句",[18,95605,95607],{"className":30429,"code":95606,"language":30431,"meta":23,"style":23},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[25,95608,95609,95614],{"__ignoreMap":23},[28,95610,95611],{"class":30,"line":31},[28,95612,95613],{"class":269},"#生成随机的整数 random.randint(low,high,size)\n",[28,95615,95616,95618,95620,95622],{"class":30,"line":42},[28,95617,93165],{"class":211},[28,95619,529],{"class":38},[28,95621,13791],{"class":211},[28,95623,95624],{"class":269},"#0~5中的随机一个数\n",[14,95626,95463],{},[18,95628,95630],{"className":30429,"code":95629,"language":30431,"meta":23,"style":23},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[25,95631,95632,95637,95659],{"__ignoreMap":23},[28,95633,95634],{"class":30,"line":31},[28,95635,95636],{"class":269},"#一维\n",[28,95638,95639,95641,95643,95645,95647,95649,95651,95653,95655,95657],{"class":30,"line":42},[28,95640,93165],{"class":211},[28,95642,427],{"class":38},[28,95644,588],{"class":211},[28,95646,682],{"class":38},[28,95648,588],{"class":211},[28,95650,31547],{"class":5293},[28,95652,257],{"class":207},[28,95654,212],{"class":211},[28,95656,656],{"class":38},[28,95658,30548],{"class":211},[28,95660,95661],{"class":30,"line":50},[28,95662,95663],{"class":269},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95665,95518],{},[14,95667,95668],{},[1540,95669],{"alt":23,"src":95670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95672,95557],{},[14,95674,95675],{},[1540,95676],{"alt":23,"src":95677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[177,95679,95681],{"id":95680},"_222-rand语句","2.2.2 rand语句",[14,95683,95684],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[18,95686,95688],{"className":30429,"code":95687,"language":30431,"meta":23,"style":23},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[25,95689,95690,95703,95708],{"__ignoreMap":23},[28,95691,95692,95695,95697,95699,95701],{"class":30,"line":31},[28,95693,95694],{"class":211},"np.random.rand(",[28,95696,521],{"class":38},[28,95698,588],{"class":211},[28,95700,656],{"class":38},[28,95702,218],{"class":211},[28,95704,95705],{"class":30,"line":42},[28,95706,95707],{"class":269},"#第一个参数100：行数，表示有100个样本\n",[28,95709,95710],{"class":30,"line":50},[28,95711,95712],{"class":269},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[149,95714,95716],{"id":95715},"_23-arange创建数组","2.3 arange()创建数组",[177,95718,95720],{"id":95719},"_231-函数语句","2.3.1 函数语句",[18,95722,95724],{"className":30429,"code":95723,"language":30431,"meta":23,"style":23},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[25,95725,95726,95740,95745,95750,95755,95760,95765,95770],{"__ignoreMap":23},[28,95727,95728,95731,95733,95735,95738],{"class":30,"line":31},[28,95729,95730],{"class":211},"numpy.arange([start,] stop[, step], ",[28,95732,93551],{"class":5293},[28,95734,257],{"class":207},[28,95736,95737],{"class":38},"None",[28,95739,218],{"class":211},[28,95741,95742],{"class":30,"line":42},[28,95743,95744],{"class":269},"#参数\n",[28,95746,95747],{"class":30,"line":50},[28,95748,95749],{"class":64},"\"\"\"\n",[28,95751,95752],{"class":30,"line":58},[28,95753,95754],{"class":64},"start:起始值，可选，默认从 0 开始。\n",[28,95756,95757],{"class":30,"line":70},[28,95758,95759],{"class":64},"stop:结束值（不包含该值）。\n",[28,95761,95762],{"class":30,"line":78},[28,95763,95764],{"class":64},"step:步长，可选，默认是 1。可以为浮点数。\n",[28,95766,95767],{"class":30,"line":86},[28,95768,95769],{"class":64},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[28,95771,95772],{"class":30,"line":97},[28,95773,95749],{"class":64},[177,95775,95777],{"id":95776},"_232-实例","2.3.2 实例",[18,95779,95781],{"className":30429,"code":95780,"language":30431,"meta":23,"style":23},"#创建一维数组\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",[25,95782,95783,95787,95811,95816,95821,95825,95848,95852,95856,95861,95866],{"__ignoreMap":23},[28,95784,95785],{"class":30,"line":31},[28,95786,93156],{"class":269},[28,95788,95789,95791,95793,95795,95797,95799,95801,95803,95805,95807,95809],{"class":30,"line":42},[28,95790,93053],{"class":211},[28,95792,427],{"class":38},[28,95794,588],{"class":211},[28,95796,935],{"class":38},[28,95798,588],{"class":211},[28,95800,427],{"class":38},[28,95802,588],{"class":211},[28,95804,93551],{"class":5293},[28,95806,257],{"class":207},[28,95808,215],{"class":38},[28,95810,218],{"class":211},[28,95812,95813],{"class":30,"line":50},[28,95814,95815],{"class":269},"#输出结果：\n",[28,95817,95818],{"class":30,"line":58},[28,95819,95820],{"class":269},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[28,95822,95823],{"class":30,"line":70},[28,95824,93998],{"class":269},[28,95826,95827,95830,95832,95834,95836,95839,95841,95843,95845],{"class":30,"line":78},[28,95828,95829],{"class":211},"np.array([np.arange(",[28,95831,427],{"class":38},[28,95833,588],{"class":211},[28,95835,503],{"class":38},[28,95837,95838],{"class":211},"),np.arange(",[28,95840,503],{"class":38},[28,95842,588],{"class":211},[28,95844,579],{"class":38},[28,95846,95847],{"class":211},")])\n",[28,95849,95850],{"class":30,"line":86},[28,95851,93615],{"class":269},[28,95853,95854],{"class":30,"line":97},[28,95855,95749],{"class":64},[28,95857,95858],{"class":30,"line":108},[28,95859,95860],{"class":64},"array([[1, 2, 3],\n",[28,95862,95863],{"class":30,"line":1407},[28,95864,95865],{"class":64},"       [4, 5, 6]])\n",[28,95867,95868],{"class":30,"line":1690},[28,95869,95749],{"class":64},[149,95871,95873],{"id":95872},"_24-生态分布","2.4 生态分布",[177,95875,95877],{"id":95876},"_241-标准正态分布","2.4.1 标准正态分布",[14,95879,95880],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95882,95883],{},[1540,95884],{"alt":23,"src":95885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[177,95887,95889],{"id":95888},"_242-常规正态分布","2.4.2 常规正态分布",[18,95891,95893],{"className":30429,"code":95892,"language":30431,"meta":23,"style":23},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[25,95894,95895,95900,95905,95910],{"__ignoreMap":23},[28,95896,95897],{"class":30,"line":31},[28,95898,95899],{"class":211},"random.normal(loc,scale,size)也可以生成正态分布\n",[28,95901,95902],{"class":30,"line":42},[28,95903,95904],{"class":269},"#loc:期望\n",[28,95906,95907],{"class":30,"line":50},[28,95908,95909],{"class":269},"#scale:方差\n",[28,95911,95912],{"class":30,"line":58},[28,95913,95914],{"class":269},"#size:用于确定是几维的数列\n",[14,95916,95917],{},[1540,95918],{"alt":23,"src":95919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[149,95921,95923],{"id":95922},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95925,95926],{},"ndim:秩，维度个数",[14,95928,95929],{},"size:数组元素的个数",[14,95931,95932],{},"shape:数组的形状",[14,95934,95935],{},"dtype:数组元素的类型",[14,95937,95938],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95940,95941],{},"他们都是属性，通过数组.属性的形式来确定",[14,95943,95944],{},"如果需要输出多个可以通过以下方式：",[18,95946,95948],{"className":30429,"code":95947,"language":30431,"meta":23,"style":23},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[25,95949,95950],{"__ignoreMap":23},[28,95951,95952,95954],{"class":30,"line":31},[28,95953,30466],{"class":38},[28,95955,95956],{"class":211},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[149,95958,95960],{"id":95959},"_26-其他方式创建数组","2.6 其他方式创建数组",[177,95962,95964],{"id":95963},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95966,95967],{},"①创建一维数组",[18,95969,95971],{"className":30429,"code":95970,"language":30431,"meta":23,"style":23},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[25,95972,95973,95982,95986,95991,95996],{"__ignoreMap":23},[28,95974,95975,95978,95980],{"class":30,"line":31},[28,95976,95977],{"class":211},"np.zeros(",[28,95979,656],{"class":38},[28,95981,218],{"class":211},[28,95983,95984],{"class":30,"line":42},[28,95985,95749],{"class":64},[28,95987,95988],{"class":30,"line":50},[28,95989,95990],{"class":64},"输出结果：\n",[28,95992,95993],{"class":30,"line":58},[28,95994,95995],{"class":64},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[28,95997,95998],{"class":30,"line":70},[28,95999,95749],{"class":64},[14,96001,96002],{},"上方代码等价于：",[18,96004,96006],{"className":30429,"code":96005,"language":30431,"meta":23,"style":23},"np.zeros(shape=(10))#创建10个元素的0数组\n",[25,96007,96008],{"__ignoreMap":23},[28,96009,96010,96012,96015,96017,96019,96021,96023],{"class":30,"line":31},[28,96011,95977],{"class":211},[28,96013,96014],{"class":5293},"shape",[28,96016,257],{"class":207},[28,96018,212],{"class":211},[28,96020,656],{"class":38},[28,96022,82822],{"class":211},[28,96024,96025],{"class":269},"#创建10个元素的0数组\n",[14,96027,96028],{},"也可以指定类型",[18,96030,96032],{"className":30429,"code":96031,"language":30431,"meta":23,"style":23},"#指定类型\nnp.zeros(5,dtype=int)\n",[25,96033,96034,96039],{"__ignoreMap":23},[28,96035,96036],{"class":30,"line":31},[28,96037,96038],{"class":269},"#指定类型\n",[28,96040,96041,96043,96045,96047,96049,96051,96053],{"class":30,"line":42},[28,96042,95977],{"class":211},[28,96044,529],{"class":38},[28,96046,588],{"class":211},[28,96048,93551],{"class":5293},[28,96050,257],{"class":207},[28,96052,215],{"class":38},[28,96054,218],{"class":211},[14,96056,96057],{},"②创建二维数组",[18,96059,96061],{"className":30429,"code":96060,"language":30431,"meta":23,"style":23},"np.zeros((3,4),dtype=int)\n",[25,96062,96063],{"__ignoreMap":23},[28,96064,96065,96068,96070,96072,96074,96076,96078,96080,96082],{"class":30,"line":31},[28,96066,96067],{"class":211},"np.zeros((",[28,96069,282],{"class":38},[28,96071,588],{"class":211},[28,96073,503],{"class":38},[28,96075,42307],{"class":211},[28,96077,93551],{"class":5293},[28,96079,257],{"class":207},[28,96081,215],{"class":38},[28,96083,218],{"class":211},[14,96085,96086],{},"③创建三维数组",[18,96088,96090],{"className":30429,"code":96089,"language":30431,"meta":23,"style":23},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[25,96091,96092,96097],{"__ignoreMap":23},[28,96093,96094],{"class":30,"line":31},[28,96095,96096],{"class":269},"#创建三维数组\n",[28,96098,96099,96101,96103,96105,96107,96109,96111,96113,96115,96117,96119],{"class":30,"line":42},[28,96100,96067],{"class":211},[28,96102,282],{"class":38},[28,96104,588],{"class":211},[28,96106,503],{"class":38},[28,96108,588],{"class":211},[28,96110,529],{"class":38},[28,96112,42307],{"class":211},[28,96114,93551],{"class":5293},[28,96116,257],{"class":207},[28,96118,215],{"class":38},[28,96120,218],{"class":211},[14,96122,96123],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[18,96125,96127],{"className":30429,"code":96126,"language":30431,"meta":23,"style":23},"#使用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",[25,96128,96129,96134,96149,96154,96159,96181],{"__ignoreMap":23},[28,96130,96131],{"class":30,"line":31},[28,96132,96133],{"class":269},"#使用zeros_like将创建的一维数组变成全0的数组\n",[28,96135,96136,96138,96140,96142,96144,96146],{"class":30,"line":42},[28,96137,448],{"class":211},[28,96139,257],{"class":207},[28,96141,93053],{"class":211},[28,96143,503],{"class":38},[28,96145,639],{"class":211},[28,96147,96148],{"class":269},"#这个得到的结果：一维数组0，1，2，3\n",[28,96150,96151],{"class":30,"line":50},[28,96152,96153],{"class":211},"np.zeros_like(a)\n",[28,96155,96156],{"class":30,"line":58},[28,96157,96158],{"class":269},"#使用zeros_like将创建的二维数组变成全0的数组\n",[28,96160,96161,96163,96165,96167,96169,96171,96173,96175,96177,96179],{"class":30,"line":70},[28,96162,93357],{"class":211},[28,96164,257],{"class":207},[28,96166,95478],{"class":211},[28,96168,31547],{"class":5293},[28,96170,257],{"class":207},[28,96172,212],{"class":211},[28,96174,503],{"class":38},[28,96176,588],{"class":211},[28,96178,529],{"class":38},[28,96180,30548],{"class":211},[28,96182,96183],{"class":30,"line":78},[28,96184,96185],{"class":211},"np.zeros_like(aa)\n",[177,96187,96189],{"id":96188},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96191,96192],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[177,96194,96196],{"id":96195},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96198,96199],{},"①empty()用法",[18,96201,96203],{"className":30429,"code":96202,"language":30431,"meta":23,"style":23},"numpy.empty(shape,dtype=float,order='c')\n",[25,96204,96205],{"__ignoreMap":23},[28,96206,96207,96210,96212,96214,96216,96218,96220,96222,96224],{"class":30,"line":31},[28,96208,96209],{"class":211},"numpy.empty(shape,",[28,96211,93551],{"class":5293},[28,96213,257],{"class":207},[28,96215,251],{"class":38},[28,96217,588],{"class":211},[28,96219,95348],{"class":5293},[28,96221,257],{"class":207},[28,96223,76079],{"class":64},[28,96225,218],{"class":211},[14,96227,96228],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96230,96231],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96233,96234],{},[1540,96235],{"alt":23,"src":96236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96238,96239],{},"②empty()用法",[18,96241,96243],{"className":30429,"code":96242,"language":30431,"meta":23,"style":23},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[25,96244,96245,96266,96278,96299,96304],{"__ignoreMap":23},[28,96246,96247,96249,96251,96254,96256,96258,96260,96262,96264],{"class":30,"line":31},[28,96248,1055],{"class":211},[28,96250,257],{"class":207},[28,96252,96253],{"class":211},"np.empty(",[28,96255,656],{"class":38},[28,96257,588],{"class":211},[28,96259,93551],{"class":5293},[28,96261,257],{"class":207},[28,96263,215],{"class":38},[28,96265,218],{"class":211},[28,96267,96268,96270,96272,96274,96276],{"class":30,"line":42},[28,96269,1030],{"class":211},[28,96271,257],{"class":207},[28,96273,93053],{"class":211},[28,96275,529],{"class":38},[28,96277,218],{"class":211},[28,96279,96280,96283,96285,96288,96290,96292,96295,96297],{"class":30,"line":50},[28,96281,96282],{"class":211},"np.add(",[28,96284,288],{"class":38},[28,96286,96287],{"class":211},",x,",[28,96289,93105],{"class":5293},[28,96291,257],{"class":207},[28,96293,96294],{"class":211},"y[:",[28,96296,529],{"class":38},[28,96298,4734],{"class":211},[28,96300,96301],{"class":30,"line":58},[28,96302,96303],{"class":269},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[28,96305,96306],{"class":30,"line":70},[28,96307,96308],{"class":211},"y\n",[14,96310,11591],{},[14,96312,96313],{},[1540,96314],{"alt":23,"src":96315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[18,96317,96319],{"className":30429,"code":96318,"language":30431,"meta":23,"style":23},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[25,96320,96321,96337,96357,96372],{"__ignoreMap":23},[28,96322,96323,96325,96327,96329,96331,96333,96335],{"class":30,"line":31},[28,96324,1030],{"class":211},[28,96326,257],{"class":207},[28,96328,93053],{"class":211},[28,96330,427],{"class":38},[28,96332,588],{"class":211},[28,96334,554],{"class":38},[28,96336,218],{"class":211},[28,96338,96339,96341,96343,96345,96347,96349,96351,96353,96355],{"class":30,"line":42},[28,96340,1055],{"class":211},[28,96342,257],{"class":207},[28,96344,96253],{"class":211},[28,96346,529],{"class":38},[28,96348,588],{"class":211},[28,96350,93551],{"class":5293},[28,96352,257],{"class":207},[28,96354,215],{"class":38},[28,96356,218],{"class":211},[28,96358,96359,96362,96364,96366,96368,96370],{"class":30,"line":50},[28,96360,96361],{"class":211},"np.add(x,",[28,96363,288],{"class":38},[28,96365,588],{"class":211},[28,96367,93105],{"class":5293},[28,96369,257],{"class":207},[28,96371,93500],{"class":211},[28,96373,96374],{"class":30,"line":58},[28,96375,96376],{"class":269},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96378,96379],{},"③empty_like()",[14,96381,96382],{},[359,96383,96384,96385,96390],{},"创建一个",[359,96386,96387],{},[359,96388,96389],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96392,96393,96396],{},[25,96394,96395],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96398,96399],{},[1540,96400],{"alt":23,"src":96401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[177,96403,96405],{"id":96404},"_264-用法","2.6.4 ？？用法",[14,96407,96408],{},"当想查看一个函数的参数时，可以通过？？来实现",[18,96410,96412],{"className":30429,"code":96411,"language":30431,"meta":23,"style":23},"np.full??\n",[25,96413,96414],{"__ignoreMap":23},[28,96415,96416,96419],{"class":30,"line":31},[28,96417,96418],{"class":211},"np.full",[28,96420,96421],{"class":77454},"??\n",[177,96423,96425],{"id":96424},"_265-full创建数组","2.6.5 full()创建数组",[18,96427,96429],{"className":30429,"code":96428,"language":30431,"meta":23,"style":23},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[25,96430,96431,96436],{"__ignoreMap":23},[28,96432,96433],{"class":30,"line":31},[28,96434,96435],{"class":211},"full(shape,fill_value)\n",[28,96437,96438],{"class":30,"line":42},[28,96439,96440],{"class":211},"创建全为某个指定值的数组\n",[14,96442,94581],{},[18,96444,96446],{"className":30429,"code":96445,"language":30431,"meta":23,"style":23},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[25,96447,96448,96453],{"__ignoreMap":23},[28,96449,96450],{"class":30,"line":31},[28,96451,96452],{"class":269},"#创建一个一维数组,以20进行填充\n",[28,96454,96455,96458,96460,96462,96464],{"class":30,"line":42},[28,96456,96457],{"class":211},"np.full(",[28,96459,656],{"class":38},[28,96461,588],{"class":211},[28,96463,910],{"class":38},[28,96465,218],{"class":211},[14,96467,93342],{},[18,96469,96471],{"className":30429,"code":96470,"language":30431,"meta":23,"style":23},"#创建二维数组\nnp.full((3,5),11)\n",[25,96472,96473,96477],{"__ignoreMap":23},[28,96474,96475],{"class":30,"line":31},[28,96476,93998],{"class":269},[28,96478,96479,96482,96484,96486,96488,96490,96492],{"class":30,"line":42},[28,96480,96481],{"class":211},"np.full((",[28,96483,282],{"class":38},[28,96485,588],{"class":211},[28,96487,529],{"class":38},[28,96489,42307],{"class":211},[28,96491,682],{"class":38},[28,96493,218],{"class":211},[14,96495,96496],{},"③full_like用法",[14,96498,96499],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96501,96502],{},"这里是指定填充而已",[18,96504,96506],{"className":30429,"code":96505,"language":30431,"meta":23,"style":23},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[25,96507,96508,96513,96537,96542],{"__ignoreMap":23},[28,96509,96510],{"class":30,"line":31},[28,96511,96512],{"class":269},"#创建一个指定形状数组\n",[28,96514,96515,96517,96519,96521,96523,96525,96527,96529,96531,96533,96535],{"class":30,"line":42},[28,96516,448],{"class":211},[28,96518,257],{"class":207},[28,96520,93053],{"class":211},[28,96522,427],{"class":38},[28,96524,588],{"class":211},[28,96526,535],{"class":38},[28,96528,93058],{"class":211},[28,96530,503],{"class":38},[28,96532,588],{"class":211},[28,96534,630],{"class":38},[28,96536,218],{"class":211},[28,96538,96539],{"class":30,"line":50},[28,96540,96541],{"class":269},"#进行指定填充\n",[28,96543,96544,96547,96549],{"class":30,"line":58},[28,96545,96546],{"class":211},"np.full_like(a,",[28,96548,656],{"class":38},[28,96550,218],{"class":211},[14,96552,11591],{},[14,96554,96555],{},[1540,96556],{"alt":23,"src":96557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[177,96559,96561],{"id":96560},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22075,96563,96565],{"id":96564},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[18,96567,96569],{"className":30429,"code":96568,"language":30431,"meta":23,"style":23},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[25,96570,96571,96588],{"__ignoreMap":23},[28,96572,96573,96576,96578,96580,96582,96584,96586],{"class":30,"line":31},[28,96574,96575],{"class":211},"np.eye(",[28,96577,503],{"class":38},[28,96579,588],{"class":211},[28,96581,93551],{"class":5293},[28,96583,257],{"class":207},[28,96585,215],{"class":38},[28,96587,218],{"class":211},[28,96589,96590],{"class":30,"line":42},[28,96591,96592],{"class":269},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22075,96594,96596],{"id":96595},"_2662-法2identity","2.6.6.2 法2：identity()",[18,96598,96600],{"className":30429,"code":96599,"language":30431,"meta":23,"style":23},"#identity()\nnp.identity(5,dtype=int)\n",[25,96601,96602,96607],{"__ignoreMap":23},[28,96603,96604],{"class":30,"line":31},[28,96605,96606],{"class":269},"#identity()\n",[28,96608,96609,96612,96614,96616,96618,96620,96622],{"class":30,"line":42},[28,96610,96611],{"class":211},"np.identity(",[28,96613,529],{"class":38},[28,96615,588],{"class":211},[28,96617,93551],{"class":5293},[28,96619,257],{"class":207},[28,96621,215],{"class":38},[28,96623,218],{"class":211},[14,96625,96626],{},"两个函数是有区别的",[14,96628,96629],{},[1540,96630],{"alt":23,"src":96631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96633,96634],{},[1540,96635],{"alt":23,"src":96636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[18,96638,96640],{"className":30429,"code":96639,"language":30431,"meta":23,"style":23},"# 创建一个 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",[25,96641,96642,96647,96659,96664,96669,96674,96679,96683,96688,96708,96712,96717,96722],{"__ignoreMap":23},[28,96643,96644],{"class":30,"line":31},[28,96645,96646],{"class":269},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[28,96648,96649,96651,96653,96655,96657],{"class":30,"line":42},[28,96650,96575],{"class":211},[28,96652,282],{"class":38},[28,96654,12512],{"class":211},[28,96656,503],{"class":38},[28,96658,218],{"class":211},[28,96660,96661],{"class":30,"line":50},[28,96662,96663],{"class":269},"# 输出:\n",[28,96665,96666],{"class":30,"line":58},[28,96667,96668],{"class":269},"# [[1. 0. 0. 0.]\n",[28,96670,96671],{"class":30,"line":70},[28,96672,96673],{"class":269},"#  [0. 1. 0. 0.]\n",[28,96675,96676],{"class":30,"line":78},[28,96677,96678],{"class":269},"#  [0. 0. 1. 0.]]\n",[28,96680,96681],{"class":30,"line":86},[28,96682,2477],{"emptyLinePlaceholder":134},[28,96684,96685],{"class":30,"line":97},[28,96686,96687],{"class":269},"# 对角线向上偏移1\n",[28,96689,96690,96692,96694,96696,96698,96700,96702,96704,96706],{"class":30,"line":108},[28,96691,96575],{"class":211},[28,96693,282],{"class":38},[28,96695,12512],{"class":211},[28,96697,503],{"class":38},[28,96699,12512],{"class":211},[28,96701,703],{"class":5293},[28,96703,257],{"class":207},[28,96705,427],{"class":38},[28,96707,218],{"class":211},[28,96709,96710],{"class":30,"line":1407},[28,96711,96663],{"class":269},[28,96713,96714],{"class":30,"line":1690},[28,96715,96716],{"class":269},"# [[0. 1. 0. 0.]\n",[28,96718,96719],{"class":30,"line":1695},[28,96720,96721],{"class":269},"#  [0. 0. 1. 0.]\n",[28,96723,96724],{"class":30,"line":1701},[28,96725,96726],{"class":269},"#  [0. 0. 0. 1.]]\n",[177,96728,96730],{"id":96729},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[18,96732,96734],{"className":30429,"code":96733,"language":30431,"meta":23,"style":23},"#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",[25,96735,96736,96741,96745,96750,96755,96760,96765,96770,96775,96780,96785],{"__ignoreMap":23},[28,96737,96738],{"class":30,"line":31},[28,96739,96740],{"class":269},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[28,96742,96743],{"class":30,"line":42},[28,96744,95749],{"class":64},[28,96746,96747],{"class":30,"line":50},[28,96748,96749],{"class":64},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[28,96751,96752],{"class":30,"line":58},[28,96753,96754],{"class":64},"参数介绍：\n",[28,96756,96757],{"class":30,"line":70},[28,96758,96759],{"class":64},"start：序列的起始值\n",[28,96761,96762],{"class":30,"line":78},[28,96763,96764],{"class":64},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[28,96766,96767],{"class":30,"line":86},[28,96768,96769],{"class":64},"num：要生长的等步长的样本数量，默认为50\n",[28,96771,96772],{"class":30,"line":97},[28,96773,96774],{"class":64},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[28,96776,96777],{"class":30,"line":108},[28,96778,96779],{"class":64},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[28,96781,96782],{"class":30,"line":1407},[28,96783,96784],{"class":64},"dtype：ndarry的数据类型\n",[28,96786,96787],{"class":30,"line":1690},[28,96788,95749],{"class":64},[14,96790,96791],{},[1540,96792],{"alt":23,"src":96793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96795,96796],{},"这里num=是可以省略的",[14,96798,96799],{},"也就是下方两行代码结果是一模一样的",[18,96801,96803],{"className":30429,"code":96802,"language":30431,"meta":23,"style":23},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[25,96804,96805,96822],{"__ignoreMap":23},[28,96806,96807,96810,96812,96814,96816,96818,96820],{"class":30,"line":31},[28,96808,96809],{"class":211},"np.linspace(",[28,96811,427],{"class":38},[28,96813,588],{"class":211},[28,96815,529],{"class":38},[28,96817,588],{"class":211},[28,96819,529],{"class":38},[28,96821,218],{"class":211},[28,96823,96824,96826,96828,96830,96832,96834,96836,96838,96840],{"class":30,"line":42},[28,96825,96809],{"class":211},[28,96827,427],{"class":38},[28,96829,588],{"class":211},[28,96831,529],{"class":38},[28,96833,588],{"class":211},[28,96835,1743],{"class":5293},[28,96837,257],{"class":207},[28,96839,529],{"class":38},[28,96841,218],{"class":211},[177,96843,96845],{"id":96844},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[18,96847,96849],{"className":30429,"code":96848,"language":30431,"meta":23,"style":23},"#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",[25,96850,96851,96856,96860,96865,96870,96875,96880,96884,96889,96894,96898],{"__ignoreMap":23},[28,96852,96853],{"class":30,"line":31},[28,96854,96855],{"class":269},"#logspace函数用于创建一个等比数列，格式如下：\n",[28,96857,96858],{"class":30,"line":42},[28,96859,95749],{"class":64},[28,96861,96862],{"class":30,"line":50},[28,96863,96864],{"class":64},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[28,96866,96867],{"class":30,"line":58},[28,96868,96869],{"class":64},"参数为：\n",[28,96871,96872],{"class":30,"line":70},[28,96873,96874],{"class":64},"start:序列的起始位置为：base**start\n",[28,96876,96877],{"class":30,"line":78},[28,96878,96879],{"class":64},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[28,96881,96882],{"class":30,"line":86},[28,96883,96769],{"class":64},[28,96885,96886],{"class":30,"line":97},[28,96887,96888],{"class":64},"endpoint：是否包含 stop 这个值，默认是 True\n",[28,96890,96891],{"class":30,"line":108},[28,96892,96893],{"class":64},"base：对数的底数，默认是 10（常见对数）\n",[28,96895,96896],{"class":30,"line":1407},[28,96897,96784],{"class":64},[28,96899,96900],{"class":30,"line":1690},[28,96901,95749],{"class":64},[14,96903,96904],{},[1540,96905],{"alt":23,"src":96906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96908,96909],{},"logspace()函数中的num参数也是可以不写num=的",[14,96911,96912],{},"endpoint是不可以省略的",[126,96914,96915],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":23,"searchDepth":42,"depth":42,"links":96917},[96918,96922,96927,96931,96935,96936],{"id":95307,"depth":42,"text":95308,"children":96919},[96920,96921],{"id":95311,"depth":50,"text":95312},{"id":95384,"depth":50,"text":95385},{"id":95416,"depth":42,"text":95417,"children":96923},[96924,96925,96926],{"id":95420,"depth":50,"text":95421},{"id":95602,"depth":50,"text":95603},{"id":95680,"depth":50,"text":95681},{"id":95715,"depth":42,"text":95716,"children":96928},[96929,96930],{"id":95719,"depth":50,"text":95720},{"id":95776,"depth":50,"text":95777},{"id":95872,"depth":42,"text":95873,"children":96932},[96933,96934],{"id":95876,"depth":50,"text":95877},{"id":95888,"depth":50,"text":95889},{"id":95922,"depth":42,"text":95923},{"id":95959,"depth":42,"text":95960,"children":96937},[96938,96939,96940,96941,96942,96943,96944,96945],{"id":95963,"depth":50,"text":95964},{"id":96188,"depth":50,"text":96189},{"id":96195,"depth":50,"text":96196},{"id":96404,"depth":50,"text":96405},{"id":96424,"depth":50,"text":96425},{"id":96560,"depth":50,"text":96561},{"id":96729,"depth":50,"text":96730},{"id":96844,"depth":50,"text":96845},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95299,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96952,"title":96953,"body":96954,"description":131,"extension":132,"meta":97047,"navigation":134,"path":97048,"seo":97049,"stem":97050,"__hash__":97051},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96955,"toc":97045},[96956,96959,96962,96965,96968,96971,96974,96977,96980,96983,96986,96989,96991,96994,96997,97002,97005,97008,97042],[10,96957,96953],{"id":96958},"_20魔法命令mprun",[14,96960,96961],{},"逐行分析数据内存的使用情况",[14,96963,96964],{},"语法格式：",[14,96966,96967],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96969,96970],{},"分析结果列如下：",[14,96972,96973],{},"Line行号",[14,96975,96976],{},"Mem usage内存使用大小",[14,96978,96979],{},"increment内存增量",[14,96981,96982],{},"Line content代码内容",[14,96984,96985],{},"补充说明：",[14,96987,96988],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96990,95254],{},[14,96992,96993],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96995,96996],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96998,96999],{},[1540,97000],{"alt":23,"src":97001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,97003,97004],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,97006,97007],{},"这时候需要重新加载模块",[18,97009,97011],{"className":30429,"code":97010,"language":30431,"meta":23,"style":23},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[25,97012,97013,97018,97025,97030],{"__ignoreMap":23},[28,97014,97015],{"class":30,"line":31},[28,97016,97017],{"class":269},"#重新加载模块\n",[28,97019,97020,97022],{"class":30,"line":42},[28,97021,30443],{"class":207},[28,97023,97024],{"class":211}," importlib\n",[28,97026,97027],{"class":30,"line":50},[28,97028,97029],{"class":211},"importlib.reload(mprun_test)\n",[28,97031,97032,97034,97037,97039],{"class":30,"line":58},[28,97033,538],{"class":207},[28,97035,97036],{"class":211},"mprun ",[28,97038,742],{"class":207},[28,97040,97041],{"class":211},"f mprun_test.fun_test mprun_test.fun_test()\n",[126,97043,97044],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":42,"depth":42,"links":97046},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96953,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97053,"title":97054,"body":97055,"description":131,"extension":132,"meta":97072,"navigation":134,"path":97073,"seo":97074,"stem":97075,"__hash__":97076},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97056,"toc":97070},[97057,97060,97065],[10,97058,97054],{"id":97059},"_3一维数组的索引和切片",[14,97061,97062],{},[1540,97063],{"alt":23,"src":97064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97066,97067],{},[1540,97068],{"alt":23,"src":97069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":23,"searchDepth":42,"depth":42,"links":97071},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97054,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97078,"title":97079,"body":97080,"description":131,"extension":132,"meta":97563,"navigation":134,"path":97564,"seo":97565,"stem":97566,"__hash__":97567},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97081,"toc":97561},[97082,97085,97088,97093,97126,97129,97167,97170,97204,97207,97312,97315,97352,97355,97456,97459,97510,97513,97555,97558],[10,97083,97079],{"id":97084},"_4二维数组的索引与切片",[14,97086,97087],{},"①获取指定单个元素",[14,97089,97090],{},[1540,97091],{"alt":23,"src":97092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[18,97094,97096],{"className":30429,"code":97095,"language":30431,"meta":23,"style":23},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[25,97097,97098,97103,97108,97113],{"__ignoreMap":23},[28,97099,97100],{"class":30,"line":31},[28,97101,97102],{"class":269},"#获取元素9\n",[28,97104,97105],{"class":30,"line":42},[28,97106,97107],{"class":269},"#先获取所在行，再获取所在列\n",[28,97109,97110],{"class":30,"line":50},[28,97111,97112],{"class":269},"#数组[行索引号，列索引号]\n",[28,97114,97115,97118,97120,97122,97124],{"class":30,"line":58},[28,97116,97117],{"class":211},"a[",[28,97119,427],{"class":38},[28,97121,588],{"class":211},[28,97123,288],{"class":38},[28,97125,33297],{"class":211},[14,97127,97128],{},"②获取整行元素",[18,97130,97132],{"className":30429,"code":97131,"language":30431,"meta":23,"style":23},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[25,97133,97134,97139,97144,97152,97157],{"__ignoreMap":23},[28,97135,97136],{"class":30,"line":31},[28,97137,97138],{"class":269},"#获取整行 数组[行索引号]\n",[28,97140,97141],{"class":30,"line":42},[28,97142,97143],{"class":269},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[28,97145,97146,97148,97150],{"class":30,"line":50},[28,97147,97117],{"class":211},[28,97149,288],{"class":38},[28,97151,33297],{"class":211},[28,97153,97154],{"class":30,"line":58},[28,97155,97156],{"class":269},"#也可以负索引获取一行\n",[28,97158,97159,97161,97163,97165],{"class":30,"line":70},[28,97160,97117],{"class":211},[28,97162,742],{"class":207},[28,97164,427],{"class":38},[28,97166,33297],{"class":211},[14,97168,97169],{},"③获取整列元素",[18,97171,97173],{"className":30429,"code":97172,"language":30431,"meta":23,"style":23},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[25,97174,97175,97180,97189,97194],{"__ignoreMap":23},[28,97176,97177],{"class":30,"line":31},[28,97178,97179],{"class":269},"#获取整列 数组名[:,列索引]\n",[28,97181,97182,97185,97187],{"class":30,"line":42},[28,97183,97184],{"class":211},"a[:,",[28,97186,288],{"class":38},[28,97188,33297],{"class":211},[28,97190,97191],{"class":30,"line":50},[28,97192,97193],{"class":269},"#也可以负索引获取一列\n",[28,97195,97196,97198,97200,97202],{"class":30,"line":58},[28,97197,97184],{"class":211},[28,97199,742],{"class":207},[28,97201,427],{"class":38},[28,97203,33297],{"class":211},[14,97205,97206],{},"④部分行部分列的元素",[18,97208,97210],{"className":30429,"code":97209,"language":30431,"meta":23,"style":23},"#部分行部分列 数组名[行切片，列切片]\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",[25,97211,97212,97217,97227,97231,97235,97240,97245,97249,97261,97265,97269,97274,97279,97284,97289,97293,97298],{"__ignoreMap":23},[28,97213,97214],{"class":30,"line":31},[28,97215,97216],{"class":269},"#部分行部分列 数组名[行切片，列切片]\n",[28,97218,97219,97222,97224],{"class":30,"line":42},[28,97220,97221],{"class":211},"a[:",[28,97223,288],{"class":38},[28,97225,97226],{"class":211},",:]\n",[28,97228,97229],{"class":30,"line":50},[28,97230,93615],{"class":269},[28,97232,97233],{"class":30,"line":58},[28,97234,93979],{"class":64},[28,97236,97237],{"class":30,"line":70},[28,97238,97239],{"class":64},"array([[ 1,  2,  3,  4,  5,  6],\n",[28,97241,97242],{"class":30,"line":78},[28,97243,97244],{"class":64},"       [ 7,  8,  9, 10, 11, 12]])\n",[28,97246,97247],{"class":30,"line":86},[28,97248,93979],{"class":64},[28,97250,97251,97253,97255,97257,97259],{"class":30,"line":97},[28,97252,97184],{"class":211},[28,97254,427],{"class":38},[28,97256,1069],{"class":211},[28,97258,503],{"class":38},[28,97260,33297],{"class":211},[28,97262,97263],{"class":30,"line":108},[28,97264,93615],{"class":269},[28,97266,97267],{"class":30,"line":1407},[28,97268,93979],{"class":64},[28,97270,97271],{"class":30,"line":1690},[28,97272,97273],{"class":64},"array([[ 2,  3,  4],\n",[28,97275,97276],{"class":30,"line":1695},[28,97277,97278],{"class":64},"       [ 8,  9, 10],\n",[28,97280,97281],{"class":30,"line":1701},[28,97282,97283],{"class":64},"       [14, 15, 16],\n",[28,97285,97286],{"class":30,"line":1706},[28,97287,97288],{"class":64},"       [20, 21, 22]])\n",[28,97290,97291],{"class":30,"line":1720},[28,97292,93979],{"class":64},[28,97294,97295],{"class":30,"line":1725},[28,97296,97297],{"class":269},"#对列行同时进行切片，使用了step参数\n",[28,97299,97300,97303,97305,97308,97310],{"class":30,"line":1731},[28,97301,97302],{"class":211},"a[::",[28,97304,288],{"class":38},[28,97306,97307],{"class":211},",::",[28,97309,288],{"class":38},[28,97311,33297],{"class":211},[14,97313,97314],{},"⑤同时获取两个元素",[18,97316,97318],{"className":30429,"code":97317,"language":30431,"meta":23,"style":23},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[25,97319,97320,97325,97330],{"__ignoreMap":23},[28,97321,97322],{"class":30,"line":31},[28,97323,97324],{"class":269},"#同时获取第三行第二列，第四行第一列\n",[28,97326,97327],{"class":30,"line":42},[28,97328,97329],{"class":269},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[28,97331,97332,97335,97337,97339,97341,97343,97345,97347,97349],{"class":30,"line":50},[28,97333,97334],{"class":211},"a[(",[28,97336,288],{"class":38},[28,97338,588],{"class":211},[28,97340,282],{"class":38},[28,97342,42298],{"class":211},[28,97344,427],{"class":38},[28,97346,588],{"class":211},[28,97348,401],{"class":38},[28,97350,97351],{"class":211},")]\n",[14,97353,97354],{},"⑥切片，对行进行反向获取",[18,97356,97358],{"className":30429,"code":97357,"language":30431,"meta":23,"style":23},"#切片 对所有行进行反向获取\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",[25,97359,97360,97365,97375,97379,97383,97388,97393,97398,97403,97407,97412,97428,97432,97437,97442,97447,97452],{"__ignoreMap":23},[28,97361,97362],{"class":30,"line":31},[28,97363,97364],{"class":269},"#切片 对所有行进行反向获取\n",[28,97366,97367,97369,97371,97373],{"class":30,"line":42},[28,97368,97302],{"class":211},[28,97370,742],{"class":207},[28,97372,427],{"class":38},[28,97374,33297],{"class":211},[28,97376,97377],{"class":30,"line":50},[28,97378,93615],{"class":269},[28,97380,97381],{"class":30,"line":58},[28,97382,93979],{"class":64},[28,97384,97385],{"class":30,"line":70},[28,97386,97387],{"class":64},"array([[19, 20, 21, 22, 23, 24],\n",[28,97389,97390],{"class":30,"line":78},[28,97391,97392],{"class":64},"       [13, 14, 15, 16, 17, 18],\n",[28,97394,97395],{"class":30,"line":86},[28,97396,97397],{"class":64},"       [ 7,  8,  9, 10, 11, 12],\n",[28,97399,97400],{"class":30,"line":97},[28,97401,97402],{"class":64},"       [ 1,  2,  3,  4,  5,  6]])\n",[28,97404,97405],{"class":30,"line":108},[28,97406,93979],{"class":64},[28,97408,97409],{"class":30,"line":1407},[28,97410,97411],{"class":269},"#对行列都进行反向切片获取\n",[28,97413,97414,97416,97418,97420,97422,97424,97426],{"class":30,"line":1690},[28,97415,97302],{"class":211},[28,97417,742],{"class":207},[28,97419,427],{"class":38},[28,97421,97307],{"class":211},[28,97423,742],{"class":207},[28,97425,427],{"class":38},[28,97427,33297],{"class":211},[28,97429,97430],{"class":30,"line":1695},[28,97431,93979],{"class":64},[28,97433,97434],{"class":30,"line":1701},[28,97435,97436],{"class":64},"array([[24, 23, 22, 21, 20, 19],\n",[28,97438,97439],{"class":30,"line":1706},[28,97440,97441],{"class":64},"       [18, 17, 16, 15, 14, 13],\n",[28,97443,97444],{"class":30,"line":1720},[28,97445,97446],{"class":64},"       [12, 11, 10,  9,  8,  7],\n",[28,97448,97449],{"class":30,"line":1725},[28,97450,97451],{"class":64},"       [ 6,  5,  4,  3,  2,  1]])\n",[28,97453,97454],{"class":30,"line":1731},[28,97455,93979],{"class":64},[14,97457,97458],{},"⑦修改元素",[18,97460,97462],{"className":30429,"code":97461,"language":30431,"meta":23,"style":23},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[25,97463,97464,97469,97487,97492],{"__ignoreMap":23},[28,97465,97466],{"class":30,"line":31},[28,97467,97468],{"class":269},"#获取前两行和前两列\n",[28,97470,97471,97474,97476,97478,97480,97483,97485],{"class":30,"line":42},[28,97472,97473],{"class":211},"sub_a",[28,97475,257],{"class":207},[28,97477,97221],{"class":211},[28,97479,288],{"class":38},[28,97481,97482],{"class":211},",:",[28,97484,288],{"class":38},[28,97486,33297],{"class":211},[28,97488,97489],{"class":30,"line":50},[28,97490,97491],{"class":269},"#修改sub_a第一个元素的值\n",[28,97493,97494,97497,97499,97501,97503,97505,97507],{"class":30,"line":58},[28,97495,97496],{"class":211},"sub_a[",[28,97498,401],{"class":38},[28,97500,588],{"class":211},[28,97502,401],{"class":38},[28,97504,1150],{"class":211},[28,97506,257],{"class":207},[28,97508,97509],{"class":38},"100\n",[14,97511,97512],{},"⑧数组复制copy()",[18,97514,97516],{"className":30429,"code":97515,"language":30431,"meta":23,"style":23},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[25,97517,97518,97523,97533,97538],{"__ignoreMap":23},[28,97519,97520],{"class":30,"line":31},[28,97521,97522],{"class":269},"#数组复制\n",[28,97524,97525,97528,97530],{"class":30,"line":42},[28,97526,97527],{"class":211},"copy_a",[28,97529,257],{"class":207},[28,97531,97532],{"class":211},"np.copy(sub_a)\n",[28,97534,97535],{"class":30,"line":50},[28,97536,97537],{"class":269},"#修改copy_a后不影响原数组\n",[28,97539,97540,97543,97545,97547,97549,97551,97553],{"class":30,"line":58},[28,97541,97542],{"class":211},"copy_a[",[28,97544,401],{"class":38},[28,97546,588],{"class":211},[28,97548,401],{"class":38},[28,97550,1150],{"class":211},[28,97552,257],{"class":207},[28,97554,97509],{"class":38},[14,97556,97557],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[126,97559,97560],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":23,"searchDepth":42,"depth":42,"links":97562},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97079,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97569,"title":97570,"body":97571,"description":131,"extension":132,"meta":98063,"navigation":134,"path":98064,"seo":98065,"stem":98066,"__hash__":98067},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97572,"toc":98055},[97573,97576,97580,97583,97586,97639,97642,97667,97670,97689,97709,97712,97728,97732,97778,97782,97824,97828,97831,97834,97837,97840,97843,97905,97965,97969,97972,98029,98033,98038,98047,98052],[10,97574,97570],{"id":97575},"_5改变数组的维度",[149,97577,97579],{"id":97578},"_51-使用reshape","5.1 使用reshape()",[14,97581,97582],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97584,97585],{},"①一维数组转换为二维数组",[18,97587,97589],{"className":30429,"code":97588,"language":30431,"meta":23,"style":23},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[25,97590,97591,97607,97612,97617,97622],{"__ignoreMap":23},[28,97592,97593,97595,97597,97599,97601,97603,97605],{"class":30,"line":31},[28,97594,448],{"class":211},[28,97596,257],{"class":207},[28,97598,93053],{"class":211},[28,97600,427],{"class":38},[28,97602,588],{"class":211},[28,97604,733],{"class":38},[28,97606,218],{"class":211},[28,97608,97609],{"class":30,"line":42},[28,97610,97611],{"class":269},"#将一维数组进行转换\n",[28,97613,97614],{"class":30,"line":50},[28,97615,97616],{"class":269},"#注意点：元素个数不可以变\n",[28,97618,97619],{"class":30,"line":58},[28,97620,97621],{"class":269},"#转换维度要保持一致，不一致就异常！！！\n",[28,97623,97624,97626,97628,97631,97633,97635,97637],{"class":30,"line":70},[28,97625,93357],{"class":211},[28,97627,257],{"class":207},[28,97629,97630],{"class":211},"a.reshape(",[28,97632,288],{"class":38},[28,97634,588],{"class":211},[28,97636,554],{"class":38},[28,97638,218],{"class":211},[14,97640,97641],{},"②一维数组转换为三维数组",[18,97643,97645],{"className":30429,"code":97644,"language":30431,"meta":23,"style":23},"aaa=a.reshape(2,3,2)\n",[25,97646,97647],{"__ignoreMap":23},[28,97648,97649,97651,97653,97655,97657,97659,97661,97663,97665],{"class":30,"line":31},[28,97650,95572],{"class":211},[28,97652,257],{"class":207},[28,97654,97630],{"class":211},[28,97656,288],{"class":38},[28,97658,588],{"class":211},[28,97660,282],{"class":38},[28,97662,588],{"class":211},[28,97664,288],{"class":38},[28,97666,218],{"class":211},[14,97668,97669],{},"③二维数组转化为一维数组",[18,97671,97673],{"className":30429,"code":97672,"language":30431,"meta":23,"style":23},"#知道元素个数：\naa.reshape(12)\n",[25,97674,97675,97680],{"__ignoreMap":23},[28,97676,97677],{"class":30,"line":31},[28,97678,97679],{"class":269},"#知道元素个数：\n",[28,97681,97682,97685,97687],{"class":30,"line":42},[28,97683,97684],{"class":211},"aa.reshape(",[28,97686,708],{"class":38},[28,97688,218],{"class":211},[18,97690,97692],{"className":30429,"code":97691,"language":30431,"meta":23,"style":23},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[25,97693,97694,97699],{"__ignoreMap":23},[28,97695,97696],{"class":30,"line":31},[28,97697,97698],{"class":269},"#不知道元素个数，参数传递-1\n",[28,97700,97701,97703,97705,97707],{"class":30,"line":42},[28,97702,97684],{"class":211},[28,97704,742],{"class":207},[28,97706,427],{"class":38},[28,97708,218],{"class":211},[14,97710,97711],{},"④三维数组转换为一维数组",[18,97713,97715],{"className":30429,"code":97714,"language":30431,"meta":23,"style":23},"aaa.reshape(-1)\n",[25,97716,97717],{"__ignoreMap":23},[28,97718,97719,97722,97724,97726],{"class":30,"line":31},[28,97720,97721],{"class":211},"aaa.reshape(",[28,97723,742],{"class":207},[28,97725,427],{"class":38},[28,97727,218],{"class":211},[149,97729,97731],{"id":97730},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[18,97733,97735],{"className":30429,"code":97734,"language":30431,"meta":23,"style":23},"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",[25,97736,97737,97764,97769,97773],{"__ignoreMap":23},[28,97738,97739,97741,97743,97745,97747,97749,97751,97753,97755,97757,97759,97761],{"class":30,"line":31},[28,97740,93357],{"class":211},[28,97742,257],{"class":207},[28,97744,93053],{"class":211},[28,97746,427],{"class":38},[28,97748,588],{"class":211},[28,97750,733],{"class":38},[28,97752,93058],{"class":211},[28,97754,288],{"class":38},[28,97756,588],{"class":211},[28,97758,554],{"class":38},[28,97760,639],{"class":211},[28,97762,97763],{"class":269},"#转换为2行6列的数组\n",[28,97765,97766],{"class":30,"line":42},[28,97767,97768],{"class":211},"aa.revel()\n",[28,97770,97771],{"class":30,"line":50},[28,97772,93615],{"class":269},[28,97774,97775],{"class":30,"line":58},[28,97776,97777],{"class":269},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[149,97779,97781],{"id":97780},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[18,97783,97785],{"className":30429,"code":97784,"language":30431,"meta":23,"style":23},"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",[25,97786,97787,97811,97816,97820],{"__ignoreMap":23},[28,97788,97789,97791,97793,97795,97797,97799,97801,97803,97805,97807,97809],{"class":30,"line":31},[28,97790,93357],{"class":211},[28,97792,257],{"class":207},[28,97794,93053],{"class":211},[28,97796,427],{"class":38},[28,97798,588],{"class":211},[28,97800,733],{"class":38},[28,97802,93058],{"class":211},[28,97804,288],{"class":38},[28,97806,588],{"class":211},[28,97808,554],{"class":38},[28,97810,218],{"class":211},[28,97812,97813],{"class":30,"line":42},[28,97814,97815],{"class":211},"aa.flatten()\n",[28,97817,97818],{"class":30,"line":50},[28,97819,93615],{"class":269},[28,97821,97822],{"class":30,"line":58},[28,97823,97777],{"class":269},[149,97825,97827],{"id":97826},"_54-使用resize","5.4 使用resize()",[14,97829,97830],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97832,97833],{},"通过resize方法可以改变数组的维度",[14,97835,97836],{},"#resize修改数组维度",[14,97838,97839],{},"#以元组的形式指定形状",[14,97841,97842],{},"#改变的是原数组",[18,97844,97846],{"className":30429,"code":97845,"language":30431,"meta":23,"style":23},"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",[25,97847,97848,97864,97884,97897,97901],{"__ignoreMap":23},[28,97849,97850,97852,97854,97856,97858,97860,97862],{"class":30,"line":31},[28,97851,448],{"class":211},[28,97853,257],{"class":207},[28,97855,93053],{"class":211},[28,97857,427],{"class":38},[28,97859,588],{"class":211},[28,97861,733],{"class":38},[28,97863,218],{"class":211},[28,97865,97866,97869,97871,97873,97875,97877,97879,97881],{"class":30,"line":42},[28,97867,97868],{"class":211},"a.shape",[28,97870,257],{"class":207},[28,97872,212],{"class":211},[28,97874,288],{"class":38},[28,97876,588],{"class":211},[28,97878,554],{"class":38},[28,97880,639],{"class":211},[28,97882,97883],{"class":269},"#改变了原数组\n",[28,97885,97886,97888,97890,97893,97895],{"class":30,"line":50},[28,97887,448],{"class":211},[28,97889,257],{"class":207},[28,97891,97892],{"class":211},"resize((",[28,97894,708],{"class":38},[28,97896,30548],{"class":211},[28,97898,97899],{"class":30,"line":58},[28,97900,93615],{"class":269},[28,97902,97903],{"class":30,"line":70},[28,97904,97777],{"class":269},[18,97906,97908],{"className":30429,"code":97907,"language":30431,"meta":23,"style":23},"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",[25,97909,97910,97923,97927,97931,97936,97941,97946,97951,97956,97961],{"__ignoreMap":23},[28,97911,97912,97915,97917,97919,97921],{"class":30,"line":31},[28,97913,97914],{"class":211},"a.resize((",[28,97916,554],{"class":38},[28,97918,588],{"class":211},[28,97920,288],{"class":38},[28,97922,30548],{"class":211},[28,97924,97925],{"class":30,"line":42},[28,97926,93615],{"class":269},[28,97928,97929],{"class":30,"line":50},[28,97930,93979],{"class":64},[28,97932,97933],{"class":30,"line":58},[28,97934,97935],{"class":64},"array([[ 1,  2],\n",[28,97937,97938],{"class":30,"line":70},[28,97939,97940],{"class":64},"       [ 3,  4],\n",[28,97942,97943],{"class":30,"line":78},[28,97944,97945],{"class":64},"       [ 5,  6],\n",[28,97947,97948],{"class":30,"line":86},[28,97949,97950],{"class":64},"       [ 7,  8],\n",[28,97952,97953],{"class":30,"line":97},[28,97954,97955],{"class":64},"       [ 9, 10],\n",[28,97957,97958],{"class":30,"line":108},[28,97959,97960],{"class":64},"       [11, 12]])\n",[28,97962,97963],{"class":30,"line":1407},[28,97964,93979],{"class":64},[149,97966,97968],{"id":97967},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97970,97971],{},"改变了原数组",[18,97973,97975],{"className":30429,"code":97974,"language":30431,"meta":23,"style":23},"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",[25,97976,97977,97993,98009,98013,98017,98021,98025],{"__ignoreMap":23},[28,97978,97979,97981,97983,97985,97987,97989,97991],{"class":30,"line":31},[28,97980,448],{"class":211},[28,97982,257],{"class":207},[28,97984,93053],{"class":211},[28,97986,427],{"class":38},[28,97988,588],{"class":211},[28,97990,733],{"class":38},[28,97992,218],{"class":211},[28,97994,97995,97997,97999,98001,98003,98005,98007],{"class":30,"line":42},[28,97996,97868],{"class":211},[28,97998,257],{"class":207},[28,98000,212],{"class":211},[28,98002,288],{"class":38},[28,98004,588],{"class":211},[28,98006,554],{"class":38},[28,98008,218],{"class":211},[28,98010,98011],{"class":30,"line":50},[28,98012,93615],{"class":269},[28,98014,98015],{"class":30,"line":58},[28,98016,93979],{"class":64},[28,98018,98019],{"class":30,"line":70},[28,98020,97239],{"class":64},[28,98022,98023],{"class":30,"line":78},[28,98024,97244],{"class":64},[28,98026,98027],{"class":30,"line":86},[28,98028,93979],{"class":64},[149,98030,98032],{"id":98031},"_56-重要比较","5.6 重要比较：",[14,98034,98035],{},[1540,98036],{"alt":23,"src":98037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,98039,98040,98041,98043,98044,98046],{},"口诀：NumPy 函数要么用 ",[25,98042,96014],{},"，要么用 ",[25,98045,31547],{},"，创建结构用 shape，造数据用 size",[14,98048,98049],{},[1540,98050],{"alt":23,"src":98051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[126,98053,98054],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":23,"searchDepth":42,"depth":42,"links":98056},[98057,98058,98059,98060,98061,98062],{"id":97578,"depth":42,"text":97579},{"id":97730,"depth":42,"text":97731},{"id":97780,"depth":42,"text":97781},{"id":97826,"depth":42,"text":97827},{"id":97967,"depth":42,"text":97968},{"id":98031,"depth":42,"text":98032},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97570,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98069,"title":98070,"body":98071,"description":131,"extension":132,"meta":99143,"navigation":134,"path":99144,"seo":99145,"stem":99146,"__hash__":99147},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98072,"toc":99137},[98073,98076,98080,98083,98086,98089,98154,98157,98197,98200,98282,98285,98290,98312,98314,98319,98324,98327,98330,98485,98488,98690,98694,98697,98700,98768,98770,98775,98778,98781,98861,98865,98868,98870,98943,98945,98950,98952,99032,99036,99039,99042,99045,99048,99051,99054,99134],[10,98074,98070],{"id":98075},"_6数组的拼接",[149,98077,98079],{"id":98078},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98081,98082],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98084,98085],{},"函数内部传两个数列构成的数列或者元组",[14,98087,98088],{},"①一维数组的拼接",[18,98090,98092],{"className":30429,"code":98091,"language":30431,"meta":23,"style":23},"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",[25,98093,98094,98114,98134,98139,98144,98149],{"__ignoreMap":23},[28,98095,98096,98098,98100,98102,98104,98106,98108,98110,98112],{"class":30,"line":31},[28,98097,448],{"class":211},[28,98099,257],{"class":207},[28,98101,93075],{"class":211},[28,98103,427],{"class":38},[28,98105,588],{"class":211},[28,98107,288],{"class":38},[28,98109,588],{"class":211},[28,98111,282],{"class":38},[28,98113,4734],{"class":211},[28,98115,98116,98118,98120,98122,98124,98126,98128,98130,98132],{"class":30,"line":42},[28,98117,473],{"class":211},[28,98119,257],{"class":207},[28,98121,93075],{"class":211},[28,98123,503],{"class":38},[28,98125,588],{"class":211},[28,98127,529],{"class":38},[28,98129,588],{"class":211},[28,98131,554],{"class":38},[28,98133,4734],{"class":211},[28,98135,98136],{"class":30,"line":50},[28,98137,98138],{"class":269},"#调用concatenate进行数组拼接\n",[28,98140,98141],{"class":30,"line":58},[28,98142,98143],{"class":211},"np.concatenate((a,b))\n",[28,98145,98146],{"class":30,"line":70},[28,98147,98148],{"class":269},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[28,98150,98151],{"class":30,"line":78},[28,98152,98153],{"class":269},"#np.concatenate([a,b])\n",[14,98155,98156],{},"②一维多个数组拼接",[18,98158,98160],{"className":30429,"code":98159,"language":30431,"meta":23,"style":23},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[25,98161,98162,98167,98187,98192],{"__ignoreMap":23},[28,98163,98164],{"class":30,"line":31},[28,98165,98166],{"class":269},"#也可以多个数组进行拼接\n",[28,98168,98169,98171,98173,98175,98177,98179,98181,98183,98185],{"class":30,"line":42},[28,98170,498],{"class":211},[28,98172,257],{"class":207},[28,98174,93075],{"class":211},[28,98176,656],{"class":38},[28,98178,588],{"class":211},[28,98180,682],{"class":38},[28,98182,588],{"class":211},[28,98184,733],{"class":38},[28,98186,4734],{"class":211},[28,98188,98189],{"class":30,"line":50},[28,98190,98191],{"class":211},"c\n",[28,98193,98194],{"class":30,"line":58},[28,98195,98196],{"class":211},"np.concatenate((a,b,c))\n",[14,98198,98199],{},"③二维数组拼接",[18,98201,98203],{"className":30429,"code":98202,"language":30431,"meta":23,"style":23},"#二维数组使用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",[25,98204,98205,98210,98234,98259,98264,98269],{"__ignoreMap":23},[28,98206,98207],{"class":30,"line":31},[28,98208,98209],{"class":269},"#二维数组使用concatenate进行拼接\n",[28,98211,98212,98214,98216,98218,98220,98222,98224,98226,98228,98230,98232],{"class":30,"line":42},[28,98213,93357],{"class":211},[28,98215,257],{"class":207},[28,98217,93053],{"class":211},[28,98219,427],{"class":38},[28,98221,588],{"class":211},[28,98223,733],{"class":38},[28,98225,93058],{"class":211},[28,98227,282],{"class":38},[28,98229,588],{"class":211},[28,98231,503],{"class":38},[28,98233,218],{"class":211},[28,98235,98236,98239,98241,98243,98245,98247,98249,98251,98253,98255,98257],{"class":30,"line":50},[28,98237,98238],{"class":211},"bb",[28,98240,257],{"class":207},[28,98242,93053],{"class":211},[28,98244,547],{"class":38},[28,98246,588],{"class":211},[28,98248,852],{"class":38},[28,98250,93058],{"class":211},[28,98252,282],{"class":38},[28,98254,588],{"class":211},[28,98256,503],{"class":38},[28,98258,218],{"class":211},[28,98260,98261],{"class":30,"line":58},[28,98262,98263],{"class":269},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[28,98265,98266],{"class":30,"line":70},[28,98267,98268],{"class":269},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[28,98270,98271,98274,98276,98278,98280],{"class":30,"line":78},[28,98272,98273],{"class":211},"np.concatenate((aa,bb),",[28,98275,47565],{"class":5293},[28,98277,257],{"class":207},[28,98279,401],{"class":38},[28,98281,218],{"class":211},[14,98283,98284],{},"结果：",[14,98286,98287],{},[1540,98288],{"alt":23,"src":98289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[18,98291,98293],{"className":30429,"code":98292,"language":30431,"meta":23,"style":23},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[25,98294,98295,98300],{"__ignoreMap":23},[28,98296,98297],{"class":30,"line":31},[28,98298,98299],{"class":269},"#指定axis为1进行拼接\n",[28,98301,98302,98304,98306,98308,98310],{"class":30,"line":42},[28,98303,98273],{"class":211},[28,98305,47565],{"class":5293},[28,98307,257],{"class":207},[28,98309,427],{"class":38},[28,98311,218],{"class":211},[14,98313,98284],{},[14,98315,98316],{},[1540,98317],{"alt":23,"src":98318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98320,98321],{},[359,98322,98323],{},"二维数组总结：0竖着方向，1横着方向",[14,98325,98326],{},"④三维数组拼接",[14,98328,98329],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[18,98331,98333],{"className":30429,"code":98332,"language":30431,"meta":23,"style":23},"#两个三行六列\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",[25,98334,98335,98340,98368,98398,98403,98420,98425,98430,98435,98452,98457,98462,98467,98480],{"__ignoreMap":23},[28,98336,98337],{"class":30,"line":31},[28,98338,98339],{"class":269},"#两个三行六列\n",[28,98341,98342,98344,98346,98348,98350,98352,98354,98356,98358,98360,98362,98364,98366],{"class":30,"line":42},[28,98343,95572],{"class":211},[28,98345,257],{"class":207},[28,98347,93053],{"class":211},[28,98349,427],{"class":38},[28,98351,588],{"class":211},[28,98353,535],{"class":38},[28,98355,93058],{"class":211},[28,98357,288],{"class":38},[28,98359,588],{"class":211},[28,98361,282],{"class":38},[28,98363,588],{"class":211},[28,98365,554],{"class":38},[28,98367,218],{"class":211},[28,98369,98370,98373,98375,98377,98379,98381,98384,98386,98388,98390,98392,98394,98396],{"class":30,"line":50},[28,98371,98372],{"class":211},"bbb",[28,98374,257],{"class":207},[28,98376,93053],{"class":211},[28,98378,547],{"class":38},[28,98380,588],{"class":211},[28,98382,98383],{"class":38},"137",[28,98385,93058],{"class":211},[28,98387,288],{"class":38},[28,98389,588],{"class":211},[28,98391,282],{"class":38},[28,98393,588],{"class":211},[28,98395,554],{"class":38},[28,98397,218],{"class":211},[28,98399,98400],{"class":30,"line":58},[28,98401,98402],{"class":269},"#axis=0\n",[28,98404,98405,98407,98409,98412,98414,98416,98418],{"class":30,"line":70},[28,98406,905],{"class":211},[28,98408,257],{"class":207},[28,98410,98411],{"class":211},"np.concatenate((aaa,bbb),",[28,98413,47565],{"class":5293},[28,98415,257],{"class":207},[28,98417,401],{"class":38},[28,98419,218],{"class":211},[28,98421,98422],{"class":30,"line":78},[28,98423,98424],{"class":211},"s.shape\n",[28,98426,98427],{"class":30,"line":86},[28,98428,98429],{"class":269},"#输出：(4,3,6)\n",[28,98431,98432],{"class":30,"line":97},[28,98433,98434],{"class":269},"#axis=1\n",[28,98436,98437,98440,98442,98444,98446,98448,98450],{"class":30,"line":108},[28,98438,98439],{"class":211},"ss",[28,98441,257],{"class":207},[28,98443,98411],{"class":211},[28,98445,47565],{"class":5293},[28,98447,257],{"class":207},[28,98449,427],{"class":38},[28,98451,218],{"class":211},[28,98453,98454],{"class":30,"line":1407},[28,98455,98456],{"class":211},"ss.shape\n",[28,98458,98459],{"class":30,"line":1690},[28,98460,98461],{"class":269},"#输出：(2,6,6)\n",[28,98463,98464],{"class":30,"line":1695},[28,98465,98466],{"class":269},"#axis=2\n",[28,98468,98469,98471,98473,98475,98477],{"class":30,"line":1701},[28,98470,98411],{"class":211},[28,98472,47565],{"class":5293},[28,98474,257],{"class":207},[28,98476,288],{"class":38},[28,98478,98479],{"class":211},").shape\n",[28,98481,98482],{"class":30,"line":1706},[28,98483,98484],{"class":269},"#输出：（2，3，12）\n",[14,98486,98487],{},"⑤四维数组拼接",[18,98489,98491],{"className":30429,"code":98490,"language":30431,"meta":23,"style":23},"#两个三行六列\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",[25,98492,98493,98497,98525,98553,98578,98604,98608,98621,98626,98630,98642,98647,98651,98663,98668,98673,98685],{"__ignoreMap":23},[28,98494,98495],{"class":30,"line":31},[28,98496,98339],{"class":269},[28,98498,98499,98501,98503,98505,98507,98509,98511,98513,98515,98517,98519,98521,98523],{"class":30,"line":42},[28,98500,95572],{"class":211},[28,98502,257],{"class":207},[28,98504,93053],{"class":211},[28,98506,427],{"class":38},[28,98508,588],{"class":211},[28,98510,535],{"class":38},[28,98512,93058],{"class":211},[28,98514,288],{"class":38},[28,98516,588],{"class":211},[28,98518,282],{"class":38},[28,98520,588],{"class":211},[28,98522,554],{"class":38},[28,98524,218],{"class":211},[28,98526,98527,98529,98531,98533,98535,98537,98539,98541,98543,98545,98547,98549,98551],{"class":30,"line":50},[28,98528,98372],{"class":211},[28,98530,257],{"class":207},[28,98532,93053],{"class":211},[28,98534,547],{"class":38},[28,98536,588],{"class":211},[28,98538,98383],{"class":38},[28,98540,93058],{"class":211},[28,98542,288],{"class":38},[28,98544,588],{"class":211},[28,98546,282],{"class":38},[28,98548,588],{"class":211},[28,98550,554],{"class":38},[28,98552,218],{"class":211},[28,98554,98555,98558,98560,98562,98564,98566,98568,98570,98572,98574,98576],{"class":30,"line":58},[28,98556,98557],{"class":211},"aaaa",[28,98559,257],{"class":207},[28,98561,97721],{"class":211},[28,98563,288],{"class":38},[28,98565,588],{"class":211},[28,98567,282],{"class":38},[28,98569,588],{"class":211},[28,98571,282],{"class":38},[28,98573,588],{"class":211},[28,98575,288],{"class":38},[28,98577,218],{"class":211},[28,98579,98580,98583,98585,98588,98590,98592,98594,98596,98598,98600,98602],{"class":30,"line":70},[28,98581,98582],{"class":211},"bbbb",[28,98584,257],{"class":207},[28,98586,98587],{"class":211},"bbb.reshape(",[28,98589,288],{"class":38},[28,98591,588],{"class":211},[28,98593,282],{"class":38},[28,98595,588],{"class":211},[28,98597,282],{"class":38},[28,98599,588],{"class":211},[28,98601,288],{"class":38},[28,98603,218],{"class":211},[28,98605,98606],{"class":30,"line":78},[28,98607,98402],{"class":269},[28,98609,98610,98613,98615,98617,98619],{"class":30,"line":86},[28,98611,98612],{"class":211},"np.concatenate((aaaa,bbbb),",[28,98614,47565],{"class":5293},[28,98616,257],{"class":207},[28,98618,401],{"class":38},[28,98620,98479],{"class":211},[28,98622,98623],{"class":30,"line":97},[28,98624,98625],{"class":269},"#结果：（4，3，3，2）\n",[28,98627,98628],{"class":30,"line":108},[28,98629,98434],{"class":269},[28,98631,98632,98634,98636,98638,98640],{"class":30,"line":1407},[28,98633,98612],{"class":211},[28,98635,47565],{"class":5293},[28,98637,257],{"class":207},[28,98639,427],{"class":38},[28,98641,98479],{"class":211},[28,98643,98644],{"class":30,"line":1690},[28,98645,98646],{"class":269},"#结果：（2，6，3，2）\n",[28,98648,98649],{"class":30,"line":1695},[28,98650,98466],{"class":269},[28,98652,98653,98655,98657,98659,98661],{"class":30,"line":1701},[28,98654,98612],{"class":211},[28,98656,47565],{"class":5293},[28,98658,257],{"class":207},[28,98660,288],{"class":38},[28,98662,98479],{"class":211},[28,98664,98665],{"class":30,"line":1706},[28,98666,98667],{"class":269},"#结果：（2，3，6，2）\n",[28,98669,98670],{"class":30,"line":1720},[28,98671,98672],{"class":269},"#axis=3\n",[28,98674,98675,98677,98679,98681,98683],{"class":30,"line":1725},[28,98676,98612],{"class":211},[28,98678,47565],{"class":5293},[28,98680,257],{"class":207},[28,98682,282],{"class":38},[28,98684,98479],{"class":211},[28,98686,98687],{"class":30,"line":1731},[28,98688,98689],{"class":269},"#结果：（2，3，3，4）\n",[149,98691,98693],{"id":98692},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98695,98696],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98698,98699],{},"①二维数组",[18,98701,98703],{"className":30429,"code":98702,"language":30431,"meta":23,"style":23},"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",[25,98704,98705,98729,98753,98758,98763],{"__ignoreMap":23},[28,98706,98707,98709,98711,98713,98715,98717,98719,98721,98723,98725,98727],{"class":30,"line":31},[28,98708,93357],{"class":211},[28,98710,257],{"class":207},[28,98712,93053],{"class":211},[28,98714,427],{"class":38},[28,98716,588],{"class":211},[28,98718,733],{"class":38},[28,98720,93058],{"class":211},[28,98722,282],{"class":38},[28,98724,588],{"class":211},[28,98726,503],{"class":38},[28,98728,218],{"class":211},[28,98730,98731,98733,98735,98737,98739,98741,98743,98745,98747,98749,98751],{"class":30,"line":42},[28,98732,98238],{"class":211},[28,98734,257],{"class":207},[28,98736,93053],{"class":211},[28,98738,547],{"class":38},[28,98740,588],{"class":211},[28,98742,852],{"class":38},[28,98744,93058],{"class":211},[28,98746,282],{"class":38},[28,98748,588],{"class":211},[28,98750,503],{"class":38},[28,98752,218],{"class":211},[28,98754,98755],{"class":30,"line":50},[28,98756,98757],{"class":211},"np.hstack((aa,bb))\n",[28,98759,98760],{"class":30,"line":58},[28,98761,98762],{"class":269},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[28,98764,98765],{"class":30,"line":70},[28,98766,98767],{"class":269},"#np.hstack([aa,bb])\n",[14,98769,98284],{},[14,98771,98772],{},[1540,98773],{"alt":23,"src":98774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98776,98777],{},"等效于concatenate()函数中axis=1时的情况",[14,98779,98780],{},"②三维数组",[18,98782,98784],{"className":30429,"code":98783,"language":30431,"meta":23,"style":23},"#两个三行六列\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",[25,98785,98786,98790,98818,98846,98851,98856],{"__ignoreMap":23},[28,98787,98788],{"class":30,"line":31},[28,98789,98339],{"class":269},[28,98791,98792,98794,98796,98798,98800,98802,98804,98806,98808,98810,98812,98814,98816],{"class":30,"line":42},[28,98793,95572],{"class":211},[28,98795,257],{"class":207},[28,98797,93053],{"class":211},[28,98799,427],{"class":38},[28,98801,588],{"class":211},[28,98803,535],{"class":38},[28,98805,93058],{"class":211},[28,98807,288],{"class":38},[28,98809,588],{"class":211},[28,98811,282],{"class":38},[28,98813,588],{"class":211},[28,98815,554],{"class":38},[28,98817,218],{"class":211},[28,98819,98820,98822,98824,98826,98828,98830,98832,98834,98836,98838,98840,98842,98844],{"class":30,"line":50},[28,98821,98372],{"class":211},[28,98823,257],{"class":207},[28,98825,93053],{"class":211},[28,98827,547],{"class":38},[28,98829,588],{"class":211},[28,98831,98383],{"class":38},[28,98833,93058],{"class":211},[28,98835,288],{"class":38},[28,98837,588],{"class":211},[28,98839,282],{"class":38},[28,98841,588],{"class":211},[28,98843,554],{"class":38},[28,98845,218],{"class":211},[28,98847,98848],{"class":30,"line":58},[28,98849,98850],{"class":269},"#使用hstack\n",[28,98852,98853],{"class":30,"line":70},[28,98854,98855],{"class":211},"np.hstack((aaa,bbb)).shape\n",[28,98857,98858],{"class":30,"line":78},[28,98859,98860],{"class":269},"#输出：（2，6，6）\n",[149,98862,98864],{"id":98863},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98866,98867],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98869,98699],{},[18,98871,98873],{"className":30429,"code":98872,"language":30431,"meta":23,"style":23},"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",[25,98874,98875,98899,98923,98928,98933,98938],{"__ignoreMap":23},[28,98876,98877,98879,98881,98883,98885,98887,98889,98891,98893,98895,98897],{"class":30,"line":31},[28,98878,93357],{"class":211},[28,98880,257],{"class":207},[28,98882,93053],{"class":211},[28,98884,427],{"class":38},[28,98886,588],{"class":211},[28,98888,733],{"class":38},[28,98890,93058],{"class":211},[28,98892,282],{"class":38},[28,98894,588],{"class":211},[28,98896,503],{"class":38},[28,98898,218],{"class":211},[28,98900,98901,98903,98905,98907,98909,98911,98913,98915,98917,98919,98921],{"class":30,"line":42},[28,98902,98238],{"class":211},[28,98904,257],{"class":207},[28,98906,93053],{"class":211},[28,98908,547],{"class":38},[28,98910,588],{"class":211},[28,98912,852],{"class":38},[28,98914,93058],{"class":211},[28,98916,282],{"class":38},[28,98918,588],{"class":211},[28,98920,503],{"class":38},[28,98922,218],{"class":211},[28,98924,98925],{"class":30,"line":50},[28,98926,98927],{"class":269},"#vstack 垂直方向进行堆叠\n",[28,98929,98930],{"class":30,"line":58},[28,98931,98932],{"class":211},"np.vstack((aa,bb))\n",[28,98934,98935],{"class":30,"line":70},[28,98936,98937],{"class":269},"#与hstack传的参数类似，等价于：\n",[28,98939,98940],{"class":30,"line":78},[28,98941,98942],{"class":211},"np.vstack([aa,bb])\n",[14,98944,98284],{},[14,98946,98947],{},[1540,98948],{"alt":23,"src":98949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98951,98780],{},[18,98953,98955],{"className":30429,"code":98954,"language":30431,"meta":23,"style":23},"#两个三行六列\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",[25,98956,98957,98961,98989,99017,99022,99027],{"__ignoreMap":23},[28,98958,98959],{"class":30,"line":31},[28,98960,98339],{"class":269},[28,98962,98963,98965,98967,98969,98971,98973,98975,98977,98979,98981,98983,98985,98987],{"class":30,"line":42},[28,98964,95572],{"class":211},[28,98966,257],{"class":207},[28,98968,93053],{"class":211},[28,98970,427],{"class":38},[28,98972,588],{"class":211},[28,98974,535],{"class":38},[28,98976,93058],{"class":211},[28,98978,288],{"class":38},[28,98980,588],{"class":211},[28,98982,282],{"class":38},[28,98984,588],{"class":211},[28,98986,554],{"class":38},[28,98988,218],{"class":211},[28,98990,98991,98993,98995,98997,98999,99001,99003,99005,99007,99009,99011,99013,99015],{"class":30,"line":50},[28,98992,98372],{"class":211},[28,98994,257],{"class":207},[28,98996,93053],{"class":211},[28,98998,547],{"class":38},[28,99000,588],{"class":211},[28,99002,98383],{"class":38},[28,99004,93058],{"class":211},[28,99006,288],{"class":38},[28,99008,588],{"class":211},[28,99010,282],{"class":38},[28,99012,588],{"class":211},[28,99014,554],{"class":38},[28,99016,218],{"class":211},[28,99018,99019],{"class":30,"line":58},[28,99020,99021],{"class":269},"#使用vstack\n",[28,99023,99024],{"class":30,"line":70},[28,99025,99026],{"class":211},"np.vstack((aaa,bbb)).shape\n",[28,99028,99029],{"class":30,"line":78},[28,99030,99031],{"class":269},"#输出：（4，3，6）\n",[149,99033,99035],{"id":99034},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,99037,99038],{},"该方法是三维数组特有的方法",[14,99040,99041],{},"也就是说",[14,99043,99044],{},"一维数组拼接方法用：concatenate()",[14,99046,99047],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,99049,99050],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,99052,99053],{},"四维数组及多维数组只能用concatenate进行拼接",[18,99055,99057],{"className":30429,"code":99056,"language":30431,"meta":23,"style":23},"#两个三行六列\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",[25,99058,99059,99063,99091,99119,99124,99129],{"__ignoreMap":23},[28,99060,99061],{"class":30,"line":31},[28,99062,98339],{"class":269},[28,99064,99065,99067,99069,99071,99073,99075,99077,99079,99081,99083,99085,99087,99089],{"class":30,"line":42},[28,99066,95572],{"class":211},[28,99068,257],{"class":207},[28,99070,93053],{"class":211},[28,99072,427],{"class":38},[28,99074,588],{"class":211},[28,99076,535],{"class":38},[28,99078,93058],{"class":211},[28,99080,288],{"class":38},[28,99082,588],{"class":211},[28,99084,282],{"class":38},[28,99086,588],{"class":211},[28,99088,554],{"class":38},[28,99090,218],{"class":211},[28,99092,99093,99095,99097,99099,99101,99103,99105,99107,99109,99111,99113,99115,99117],{"class":30,"line":50},[28,99094,98372],{"class":211},[28,99096,257],{"class":207},[28,99098,93053],{"class":211},[28,99100,547],{"class":38},[28,99102,588],{"class":211},[28,99104,98383],{"class":38},[28,99106,93058],{"class":211},[28,99108,288],{"class":38},[28,99110,588],{"class":211},[28,99112,282],{"class":38},[28,99114,588],{"class":211},[28,99116,554],{"class":38},[28,99118,218],{"class":211},[28,99120,99121],{"class":30,"line":58},[28,99122,99123],{"class":269},"#使用dstack\n",[28,99125,99126],{"class":30,"line":70},[28,99127,99128],{"class":211},"np.dstack((aaa,bbb)).shape\n",[28,99130,99131],{"class":30,"line":78},[28,99132,99133],{"class":269},"#结果：（2，3，12）\n",[126,99135,99136],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":99138},[99139,99140,99141,99142],{"id":98078,"depth":42,"text":98079},{"id":98692,"depth":42,"text":98693},{"id":98863,"depth":42,"text":98864},{"id":99034,"depth":42,"text":99035},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98070,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99149,"title":99150,"body":99151,"description":131,"extension":132,"meta":99426,"navigation":134,"path":99427,"seo":99428,"stem":99429,"__hash__":99430},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99152,"toc":99424},[99153,99156,99159,99253,99256,99259,99262,99265,99268,99271,99274,99277,99421],[10,99154,99150],{"id":99155},"_7数组转置",[14,99157,99158],{},"使用transpose()函数",[18,99160,99162],{"className":30429,"code":99161,"language":30431,"meta":23,"style":23},"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",[25,99163,99164,99174,99198,99203,99208,99213,99218,99226,99230,99234,99239,99244,99249],{"__ignoreMap":23},[28,99165,99166,99168,99170,99172],{"class":30,"line":31},[28,99167,30443],{"class":207},[28,99169,31431],{"class":211},[28,99171,31434],{"class":207},[28,99173,31437],{"class":211},[28,99175,99176,99178,99180,99182,99184,99186,99188,99190,99192,99194,99196],{"class":30,"line":42},[28,99177,448],{"class":211},[28,99179,257],{"class":207},[28,99181,31768],{"class":211},[28,99183,427],{"class":38},[28,99185,588],{"class":211},[28,99187,733],{"class":38},[28,99189,93058],{"class":211},[28,99191,503],{"class":38},[28,99193,588],{"class":211},[28,99195,282],{"class":38},[28,99197,218],{"class":211},[28,99199,99200],{"class":30,"line":50},[28,99201,99202],{"class":269},"#二维数组转置\n",[28,99204,99205],{"class":30,"line":58},[28,99206,99207],{"class":269},"#调用transpose()函数\n",[28,99209,99210],{"class":30,"line":70},[28,99211,99212],{"class":211},"a.transpose()\n",[28,99214,99215],{"class":30,"line":78},[28,99216,99217],{"class":269},"#对于二维数组也可以采用.T来实现\n",[28,99219,99220,99223],{"class":30,"line":86},[28,99221,99222],{"class":211},"a.T",[28,99224,99225],{"class":269},"#与上述代码一样\n",[28,99227,99228],{"class":30,"line":97},[28,99229,93615],{"class":269},[28,99231,99232],{"class":30,"line":108},[28,99233,93979],{"class":64},[28,99235,99236],{"class":30,"line":1407},[28,99237,99238],{"class":64},"array([[ 1,  4,  7, 10],\n",[28,99240,99241],{"class":30,"line":1690},[28,99242,99243],{"class":64},"       [ 2,  5,  8, 11],\n",[28,99245,99246],{"class":30,"line":1695},[28,99247,99248],{"class":64},"       [ 3,  6,  9, 12]])\n",[28,99250,99251],{"class":30,"line":1701},[28,99252,93979],{"class":64},[14,99254,99255],{},"也可以使用np.transpose()的形式",[14,99257,99258],{},"#多维数组进行转置 np.transpose()",[14,99260,99261],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99263,99264],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99266,99267],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99269,99270],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99272,99273],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99275,99276],{},"四维及以上的数组也是一样的道理",[18,99278,99280],{"className":30429,"code":99279,"language":30431,"meta":23,"style":23},"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",[25,99281,99282,99310,99315,99320,99325,99343,99348,99380,99385,99390,99395,99416],{"__ignoreMap":23},[28,99283,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306,99308],{"class":30,"line":31},[28,99285,1030],{"class":211},[28,99287,257],{"class":207},[28,99289,93053],{"class":211},[28,99291,427],{"class":38},[28,99293,588],{"class":211},[28,99295,535],{"class":38},[28,99297,93058],{"class":211},[28,99299,282],{"class":38},[28,99301,588],{"class":211},[28,99303,554],{"class":38},[28,99305,588],{"class":211},[28,99307,288],{"class":38},[28,99309,218],{"class":211},[28,99311,99312],{"class":30,"line":42},[28,99313,99314],{"class":211},"x.shape\n",[28,99316,99317],{"class":30,"line":50},[28,99318,99319],{"class":269},"#结果：（3,6,2）\n",[28,99321,99322],{"class":30,"line":58},[28,99323,99324],{"class":269},"#使用np.transpose()进行转置 变为(2,6,3)\n",[28,99326,99327,99330,99332,99334,99336,99338,99340],{"class":30,"line":70},[28,99328,99329],{"class":211},"np.transpose(x,(",[28,99331,288],{"class":38},[28,99333,588],{"class":211},[28,99335,427],{"class":38},[28,99337,588],{"class":211},[28,99339,401],{"class":38},[28,99341,99342],{"class":211},")).shape\n",[28,99344,99345],{"class":30,"line":78},[28,99346,99347],{"class":269},"#结果：(2,6,3)\n",[28,99349,99350,99352,99354,99356,99358,99360,99362,99364,99366,99368,99370,99372,99374,99376,99378],{"class":30,"line":86},[28,99351,98557],{"class":211},[28,99353,257],{"class":207},[28,99355,93053],{"class":211},[28,99357,427],{"class":38},[28,99359,588],{"class":211},[28,99361,535],{"class":38},[28,99363,93058],{"class":211},[28,99365,282],{"class":38},[28,99367,588],{"class":211},[28,99369,288],{"class":38},[28,99371,588],{"class":211},[28,99373,427],{"class":38},[28,99375,588],{"class":211},[28,99377,554],{"class":38},[28,99379,218],{"class":211},[28,99381,99382],{"class":30,"line":97},[28,99383,99384],{"class":211},"aaaa.shape\n",[28,99386,99387],{"class":30,"line":108},[28,99388,99389],{"class":269},"#结果：（3，2，1，6）\n",[28,99391,99392],{"class":30,"line":1407},[28,99393,99394],{"class":269},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[28,99396,99397,99400,99402,99404,99406,99408,99410,99412,99414],{"class":30,"line":1690},[28,99398,99399],{"class":211},"np.transpose(aaaa,(",[28,99401,427],{"class":38},[28,99403,588],{"class":211},[28,99405,288],{"class":38},[28,99407,588],{"class":211},[28,99409,401],{"class":38},[28,99411,588],{"class":211},[28,99413,282],{"class":38},[28,99415,99342],{"class":211},[28,99417,99418],{"class":30,"line":1695},[28,99419,99420],{"class":269},"#结果：(2,1,3,6)\n",[126,99422,99423],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":42,"depth":42,"links":99425},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99150,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99432,"title":99433,"body":99434,"description":131,"extension":132,"meta":100168,"navigation":134,"path":100169,"seo":100170,"stem":100171,"__hash__":100172},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99435,"toc":100166},[99436,99439,99442,99445,99448,99451,99454,99457,99460,99569,99572,99575,100163],[10,99437,99433],{"id":99438},"_8数组分割",[14,99440,99441],{},"split分割",[14,99443,99444],{},"numpy.split(ary,indics_or_sections,axis)",[14,99446,99447],{},"解释：",[14,99449,99450],{},"ary:被分割的数组",[14,99452,99453],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99455,99456],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99458,99459],{},"①一维数组的分割",[18,99461,99463],{"className":30429,"code":99462,"language":30431,"meta":23,"style":23},"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",[25,99464,99465,99481,99486,99495,99499,99504,99512,99516,99521,99526,99539,99543,99548,99560,99564],{"__ignoreMap":23},[28,99466,99467,99469,99471,99473,99475,99477,99479],{"class":30,"line":31},[28,99468,448],{"class":211},[28,99470,257],{"class":207},[28,99472,93053],{"class":211},[28,99474,427],{"class":38},[28,99476,588],{"class":211},[28,99478,630],{"class":38},[28,99480,218],{"class":211},[28,99482,99483],{"class":30,"line":42},[28,99484,99485],{"class":269},"#如果传入整数，必须能够平分，否则会报错\n",[28,99487,99488,99491,99493],{"class":30,"line":50},[28,99489,99490],{"class":211},"np.split(a,",[28,99492,288],{"class":38},[28,99494,218],{"class":211},[28,99496,99497],{"class":30,"line":58},[28,99498,93615],{"class":269},[28,99500,99501],{"class":30,"line":70},[28,99502,99503],{"class":269},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[28,99505,99506,99508,99510],{"class":30,"line":78},[28,99507,99490],{"class":211},[28,99509,503],{"class":38},[28,99511,218],{"class":211},[28,99513,99514],{"class":30,"line":86},[28,99515,93615],{"class":269},[28,99517,99518],{"class":30,"line":97},[28,99519,99520],{"class":269},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[28,99522,99523],{"class":30,"line":108},[28,99524,99525],{"class":269},"#传入数组\n",[28,99527,99528,99531,99533,99535,99537],{"class":30,"line":1407},[28,99529,99530],{"class":211},"np.split(a,[",[28,99532,282],{"class":38},[28,99534,588],{"class":211},[28,99536,529],{"class":38},[28,99538,4734],{"class":211},[28,99540,99541],{"class":30,"line":1690},[28,99542,93615],{"class":269},[28,99544,99545],{"class":30,"line":1695},[28,99546,99547],{"class":269},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[28,99549,99550,99552,99554,99556,99558],{"class":30,"line":1701},[28,99551,99530],{"class":211},[28,99553,529],{"class":38},[28,99555,588],{"class":211},[28,99557,579],{"class":38},[28,99559,4734],{"class":211},[28,99561,99562],{"class":30,"line":1706},[28,99563,93615],{"class":269},[28,99565,99566],{"class":30,"line":1720},[28,99567,99568],{"class":269},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99570,99571],{},"②二维数组的分割",[14,99573,99574],{},"使用split()",[18,99576,99578],{"className":30429,"code":99577,"language":30431,"meta":23,"style":23},"#二维数组分割\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",[25,99579,99580,99585,99609,99614,99623,99627,99631,99636,99641,99646,99651,99656,99661,99666,99670,99683,99687,99691,99695,99699,99703,99708,99713,99718,99722,99727,99743,99747,99751,99756,99761,99766,99771,99776,99781,99786,99791,99796,99801,99806,99811,99816,99821,99826,99831,99836,99841,99845,99849,99869,99873,99877,99882,99887,99892,99897,99902,99907,99912,99917,99922,99927,99932,99937,99942,99947,99952,99957,99962,99967,99971,99976,99985,99989,99993,99997,100001,100005,100009,100013,100017,100021,100030,100034,100038,100042,100046,100050,100054,100058,100062,100066,100070,100074,100078,100082,100086,100090,100094,100098,100102,100106,100110,100114,100127,100131,100135,100139,100143,100147,100151,100155,100159],{"__ignoreMap":23},[28,99581,99582],{"class":30,"line":31},[28,99583,99584],{"class":269},"#二维数组分割\n",[28,99586,99587,99589,99591,99593,99595,99597,99599,99601,99603,99605,99607],{"class":30,"line":42},[28,99588,93357],{"class":211},[28,99590,257],{"class":207},[28,99592,93053],{"class":211},[28,99594,427],{"class":38},[28,99596,588],{"class":211},[28,99598,535],{"class":38},[28,99600,93058],{"class":211},[28,99602,554],{"class":38},[28,99604,588],{"class":211},[28,99606,554],{"class":38},[28,99608,218],{"class":211},[28,99610,99611],{"class":30,"line":50},[28,99612,99613],{"class":269},"#默认axis=0  传入整数平均分,按行来的\n",[28,99615,99616,99619,99621],{"class":30,"line":58},[28,99617,99618],{"class":211},"np.split(aa,",[28,99620,282],{"class":38},[28,99622,218],{"class":211},[28,99624,99625],{"class":30,"line":70},[28,99626,95815],{"class":269},[28,99628,99629],{"class":30,"line":78},[28,99630,93979],{"class":64},[28,99632,99633],{"class":30,"line":86},[28,99634,99635],{"class":64},"[array([[ 1,  2,  3,  4,  5,  6],\n",[28,99637,99638],{"class":30,"line":97},[28,99639,99640],{"class":64},"        [ 7,  8,  9, 10, 11, 12]]),\n",[28,99642,99643],{"class":30,"line":108},[28,99644,99645],{"class":64}," array([[13, 14, 15, 16, 17, 18],\n",[28,99647,99648],{"class":30,"line":1407},[28,99649,99650],{"class":64},"        [19, 20, 21, 22, 23, 24]]),\n",[28,99652,99653],{"class":30,"line":1690},[28,99654,99655],{"class":64}," array([[25, 26, 27, 28, 29, 30],\n",[28,99657,99658],{"class":30,"line":1695},[28,99659,99660],{"class":64},"        [31, 32, 33, 34, 35, 36]])]\n",[28,99662,99663],{"class":30,"line":1701},[28,99664,99665],{"class":64}," '''\n",[28,99667,99668],{"class":30,"line":1706},[28,99669,99525],{"class":269},[28,99671,99672,99675,99677,99679,99681],{"class":30,"line":1720},[28,99673,99674],{"class":211},"np.split(aa,[",[28,99676,288],{"class":38},[28,99678,588],{"class":211},[28,99680,529],{"class":38},[28,99682,4734],{"class":211},[28,99684,99685],{"class":30,"line":1725},[28,99686,95815],{"class":269},[28,99688,99689],{"class":30,"line":1731},[28,99690,93979],{"class":64},[28,99692,99693],{"class":30,"line":1752},[28,99694,99635],{"class":64},[28,99696,99697],{"class":30,"line":1757},[28,99698,99640],{"class":64},[28,99700,99701],{"class":30,"line":1771},[28,99702,99645],{"class":64},[28,99704,99705],{"class":30,"line":1776},[28,99706,99707],{"class":64},"        [19, 20, 21, 22, 23, 24],\n",[28,99709,99710],{"class":30,"line":1805},[28,99711,99712],{"class":64},"        [25, 26, 27, 28, 29, 30]]),\n",[28,99714,99715],{"class":30,"line":1810},[28,99716,99717],{"class":64}," array([[31, 32, 33, 34, 35, 36]])]\n",[28,99719,99720],{"class":30,"line":1827},[28,99721,93979],{"class":64},[28,99723,99724],{"class":30,"line":1832},[28,99725,99726],{"class":269},"#axis=1 按照列来分\n",[28,99728,99729,99731,99733,99735,99737,99739,99741],{"class":30,"line":1837},[28,99730,99618],{"class":211},[28,99732,282],{"class":38},[28,99734,588],{"class":211},[28,99736,47565],{"class":5293},[28,99738,257],{"class":207},[28,99740,427],{"class":38},[28,99742,218],{"class":211},[28,99744,99745],{"class":30,"line":1842},[28,99746,95815],{"class":269},[28,99748,99749],{"class":30,"line":1856},[28,99750,93979],{"class":64},[28,99752,99753],{"class":30,"line":1861},[28,99754,99755],{"class":64},"[array([[ 1,  2],\n",[28,99757,99758],{"class":30,"line":2654},[28,99759,99760],{"class":64},"        [ 7,  8],\n",[28,99762,99763],{"class":30,"line":2668},[28,99764,99765],{"class":64},"        [13, 14],\n",[28,99767,99768],{"class":30,"line":2676},[28,99769,99770],{"class":64},"        [19, 20],\n",[28,99772,99773],{"class":30,"line":2681},[28,99774,99775],{"class":64},"        [25, 26],\n",[28,99777,99778],{"class":30,"line":2687},[28,99779,99780],{"class":64},"        [31, 32]]),\n",[28,99782,99783],{"class":30,"line":2693},[28,99784,99785],{"class":64}," array([[ 3,  4],\n",[28,99787,99788],{"class":30,"line":2698},[28,99789,99790],{"class":64},"        [ 9, 10],\n",[28,99792,99793],{"class":30,"line":8025},[28,99794,99795],{"class":64},"        [15, 16],\n",[28,99797,99798],{"class":30,"line":8049},[28,99799,99800],{"class":64},"        [21, 22],\n",[28,99802,99803],{"class":30,"line":8054},[28,99804,99805],{"class":64},"        [27, 28],\n",[28,99807,99808],{"class":30,"line":8060},[28,99809,99810],{"class":64},"        [33, 34]]),\n",[28,99812,99813],{"class":30,"line":8087},[28,99814,99815],{"class":64}," array([[ 5,  6],\n",[28,99817,99818],{"class":30,"line":8092},[28,99819,99820],{"class":64},"        [11, 12],\n",[28,99822,99823],{"class":30,"line":8098},[28,99824,99825],{"class":64},"        [17, 18],\n",[28,99827,99828],{"class":30,"line":8110},[28,99829,99830],{"class":64},"        [23, 24],\n",[28,99832,99833],{"class":30,"line":8122},[28,99834,99835],{"class":64},"        [29, 30],\n",[28,99837,99838],{"class":30,"line":8134},[28,99839,99840],{"class":64},"        [35, 36]])]\n",[28,99842,99843],{"class":30,"line":9793},[28,99844,99665],{"class":64},[28,99846,99847],{"class":30,"line":9818},[28,99848,99525],{"class":269},[28,99850,99851,99853,99855,99857,99859,99861,99863,99865,99867],{"class":30,"line":9841},[28,99852,99674],{"class":211},[28,99854,427],{"class":38},[28,99856,588],{"class":211},[28,99858,288],{"class":38},[28,99860,41660],{"class":211},[28,99862,47565],{"class":5293},[28,99864,257],{"class":207},[28,99866,427],{"class":38},[28,99868,218],{"class":211},[28,99870,99871],{"class":30,"line":9865},[28,99872,93615],{"class":269},[28,99874,99875],{"class":30,"line":9870},[28,99876,93979],{"class":64},[28,99878,99879],{"class":30,"line":9875},[28,99880,99881],{"class":64},"[array([[ 1],\n",[28,99883,99884],{"class":30,"line":9880},[28,99885,99886],{"class":64},"        [ 7],\n",[28,99888,99889],{"class":30,"line":9889},[28,99890,99891],{"class":64},"        [13],\n",[28,99893,99894],{"class":30,"line":9894},[28,99895,99896],{"class":64},"        [19],\n",[28,99898,99899],{"class":30,"line":9900},[28,99900,99901],{"class":64},"        [25],\n",[28,99903,99904],{"class":30,"line":9921},[28,99905,99906],{"class":64},"        [31]]),\n",[28,99908,99909],{"class":30,"line":9927},[28,99910,99911],{"class":64}," array([[ 2],\n",[28,99913,99914],{"class":30,"line":9941},[28,99915,99916],{"class":64},"        [ 8],\n",[28,99918,99919],{"class":30,"line":9947},[28,99920,99921],{"class":64},"        [14],\n",[28,99923,99924],{"class":30,"line":9974},[28,99925,99926],{"class":64},"        [20],\n",[28,99928,99929],{"class":30,"line":9983},[28,99930,99931],{"class":64},"        [26],\n",[28,99933,99934],{"class":30,"line":9989},[28,99935,99936],{"class":64},"        [32]]),\n",[28,99938,99939],{"class":30,"line":9997},[28,99940,99941],{"class":64}," array([[ 3,  4,  5,  6],\n",[28,99943,99944],{"class":30,"line":10002},[28,99945,99946],{"class":64},"        [ 9, 10, 11, 12],\n",[28,99948,99949],{"class":30,"line":16681},[28,99950,99951],{"class":64},"        [15, 16, 17, 18],\n",[28,99953,99954],{"class":30,"line":16687},[28,99955,99956],{"class":64},"        [21, 22, 23, 24],\n",[28,99958,99959],{"class":30,"line":16710},[28,99960,99961],{"class":64},"        [27, 28, 29, 30],\n",[28,99963,99964],{"class":30,"line":16716},[28,99965,99966],{"class":64},"        [33, 34, 35, 36]])]\n",[28,99968,99969],{"class":30,"line":16739},[28,99970,93979],{"class":64},[28,99972,99973],{"class":30,"line":16753},[28,99974,99975],{"class":269},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[28,99977,99978,99981,99983],{"class":30,"line":16773},[28,99979,99980],{"class":211},"np.vsplit(aa,",[28,99982,282],{"class":38},[28,99984,218],{"class":211},[28,99986,99987],{"class":30,"line":16779},[28,99988,93615],{"class":269},[28,99990,99991],{"class":30,"line":16790},[28,99992,93979],{"class":64},[28,99994,99995],{"class":30,"line":16813},[28,99996,99635],{"class":64},[28,99998,99999],{"class":30,"line":16835},[28,100000,99640],{"class":64},[28,100002,100003],{"class":30,"line":16840},[28,100004,99645],{"class":64},[28,100006,100007],{"class":30,"line":16846},[28,100008,99650],{"class":64},[28,100010,100011],{"class":30,"line":16860},[28,100012,99655],{"class":64},[28,100014,100015],{"class":30,"line":16873},[28,100016,99660],{"class":64},[28,100018,100019],{"class":30,"line":16878},[28,100020,93979],{"class":64},[28,100022,100023,100026,100028],{"class":30,"line":16892},[28,100024,100025],{"class":211},"np.hsplit(aa,",[28,100027,282],{"class":38},[28,100029,218],{"class":211},[28,100031,100032],{"class":30,"line":16897},[28,100033,93615],{"class":269},[28,100035,100036],{"class":30,"line":16903},[28,100037,93979],{"class":64},[28,100039,100040],{"class":30,"line":16908},[28,100041,99755],{"class":64},[28,100043,100044],{"class":30,"line":16922},[28,100045,99760],{"class":64},[28,100047,100048],{"class":30,"line":16927},[28,100049,99765],{"class":64},[28,100051,100052],{"class":30,"line":16932},[28,100053,99770],{"class":64},[28,100055,100056],{"class":30,"line":16946},[28,100057,99775],{"class":64},[28,100059,100060],{"class":30,"line":16958},[28,100061,99780],{"class":64},[28,100063,100064],{"class":30,"line":16963},[28,100065,99785],{"class":64},[28,100067,100068],{"class":30,"line":16976},[28,100069,99790],{"class":64},[28,100071,100072],{"class":30,"line":16981},[28,100073,99795],{"class":64},[28,100075,100076],{"class":30,"line":16986},[28,100077,99800],{"class":64},[28,100079,100080],{"class":30,"line":16991},[28,100081,99805],{"class":64},[28,100083,100084],{"class":30,"line":17004},[28,100085,99810],{"class":64},[28,100087,100088],{"class":30,"line":17009},[28,100089,99815],{"class":64},[28,100091,100092],{"class":30,"line":32684},[28,100093,99820],{"class":64},[28,100095,100096],{"class":30,"line":32690},[28,100097,99825],{"class":64},[28,100099,100100],{"class":30,"line":32696},[28,100101,99830],{"class":64},[28,100103,100104],{"class":30,"line":32702},[28,100105,99835],{"class":64},[28,100107,100108],{"class":30,"line":32708},[28,100109,99840],{"class":64},[28,100111,100112],{"class":30,"line":32719},[28,100113,93979],{"class":64},[28,100115,100116,100119,100121,100123,100125],{"class":30,"line":32725},[28,100117,100118],{"class":211},"np.vsplit(aa,[",[28,100120,288],{"class":38},[28,100122,588],{"class":211},[28,100124,529],{"class":38},[28,100126,4734],{"class":211},[28,100128,100129],{"class":30,"line":32745},[28,100130,93615],{"class":269},[28,100132,100133],{"class":30,"line":32751},[28,100134,93979],{"class":64},[28,100136,100137],{"class":30,"line":32762},[28,100138,99635],{"class":64},[28,100140,100141],{"class":30,"line":32768},[28,100142,99640],{"class":64},[28,100144,100145],{"class":30,"line":32774},[28,100146,99645],{"class":64},[28,100148,100149],{"class":30,"line":32780},[28,100150,99707],{"class":64},[28,100152,100153],{"class":30,"line":32786},[28,100154,99712],{"class":64},[28,100156,100157],{"class":30,"line":32792},[28,100158,99717],{"class":64},[28,100160,100161],{"class":30,"line":32798},[28,100162,99665],{"class":64},[126,100164,100165],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":100167},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99433,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100174,"title":100175,"body":100176,"description":131,"extension":132,"meta":100670,"navigation":134,"path":100671,"seo":100672,"stem":100673,"__hash__":100674},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100177,"toc":100661},[100178,100181,100184,100209,100213,100272,100324,100328,100330,100366,100420,100422,100460,100531,100535,100540,100544,100547,100580,100583,100587,100590,100593,100596,100599,100604,100608,100611,100614,100617,100620,100625,100629,100634,100637,100658],[10,100179,100175],{"id":100180},"_9数学函数",[14,100182,100183],{},"补充回顾：python的列表推导式",[18,100185,100187],{"className":30429,"code":100186,"language":30431,"meta":23,"style":23},"[1\u002Fi for i in a]\n",[25,100188,100189],{"__ignoreMap":23},[28,100190,100191,100193,100195,100197,100200,100202,100204,100206],{"class":30,"line":31},[28,100192,1100],{"class":211},[28,100194,427],{"class":38},[28,100196,794],{"class":207},[28,100198,100199],{"class":211},"i ",[28,100201,3102],{"class":207},[28,100203,9515],{"class":211},[28,100205,26094],{"class":207},[28,100207,100208],{"class":211}," a]\n",[149,100210,100212],{"id":100211},"_91-求倒数","9.1 求倒数",[18,100214,100216],{"className":30429,"code":100215,"language":30431,"meta":23,"style":23},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[25,100217,100218,100223,100251,100263],{"__ignoreMap":23},[28,100219,100220],{"class":30,"line":31},[28,100221,100222],{"class":269},"#数组求倒数\n",[28,100224,100225,100227,100229,100231,100233,100235,100237,100239,100241,100243,100245,100247,100249],{"class":30,"line":42},[28,100226,448],{"class":211},[28,100228,257],{"class":207},[28,100230,1100],{"class":211},[28,100232,427],{"class":38},[28,100234,588],{"class":211},[28,100236,288],{"class":38},[28,100238,588],{"class":211},[28,100240,282],{"class":38},[28,100242,588],{"class":211},[28,100244,503],{"class":38},[28,100246,588],{"class":211},[28,100248,529],{"class":38},[28,100250,33297],{"class":211},[28,100252,100253,100255,100257,100260],{"class":30,"line":50},[28,100254,473],{"class":211},[28,100256,257],{"class":207},[28,100258,100259],{"class":211},"np.array(a)",[28,100261,100262],{"class":269},"#将列表转换为数组\n",[28,100264,100265,100267,100269],{"class":30,"line":58},[28,100266,427],{"class":38},[28,100268,794],{"class":207},[28,100270,100271],{"class":211},"b\n",[18,100273,100275],{"className":30429,"code":100274,"language":30431,"meta":23,"style":23},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[25,100276,100277,100305,100314,100319],{"__ignoreMap":23},[28,100278,100279,100281,100283,100285,100287,100289,100291,100293,100295,100297,100299,100301,100303],{"class":30,"line":31},[28,100280,448],{"class":211},[28,100282,257],{"class":207},[28,100284,1100],{"class":211},[28,100286,427],{"class":38},[28,100288,588],{"class":211},[28,100290,288],{"class":38},[28,100292,588],{"class":211},[28,100294,282],{"class":38},[28,100296,588],{"class":211},[28,100298,503],{"class":38},[28,100300,588],{"class":211},[28,100302,529],{"class":38},[28,100304,33297],{"class":211},[28,100306,100307,100309,100311],{"class":30,"line":42},[28,100308,473],{"class":211},[28,100310,257],{"class":207},[28,100312,100313],{"class":211},"np.array(a)\n",[28,100315,100316],{"class":30,"line":50},[28,100317,100318],{"class":269},"#调用numpy中的函数reciprocal()\n",[28,100320,100321],{"class":30,"line":58},[28,100322,100323],{"class":211},"np.reciprocal(b)\n",[149,100325,100327],{"id":100326},"_92-求平方","9.2 求平方",[14,100329,94581],{},[18,100331,100333],{"className":30429,"code":100332,"language":30431,"meta":23,"style":23},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[25,100334,100335,100340,100345,100361],{"__ignoreMap":23},[28,100336,100337],{"class":30,"line":31},[28,100338,100339],{"class":269},"#square()，求平方\n",[28,100341,100342],{"class":30,"line":42},[28,100343,100344],{"class":269},"#一维数组\n",[28,100346,100347,100349,100351,100353,100355,100357,100359],{"class":30,"line":50},[28,100348,448],{"class":211},[28,100350,257],{"class":207},[28,100352,93053],{"class":211},[28,100354,427],{"class":38},[28,100356,588],{"class":211},[28,100358,656],{"class":38},[28,100360,218],{"class":211},[28,100362,100363],{"class":30,"line":58},[28,100364,100365],{"class":211},"np.square(a)\n",[18,100367,100369],{"className":30429,"code":100368,"language":30431,"meta":23,"style":23},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[25,100370,100371,100376,100381,100402],{"__ignoreMap":23},[28,100372,100373],{"class":30,"line":31},[28,100374,100375],{"class":269},"#或者通过循环遍历的形式来计算\n",[28,100377,100378],{"class":30,"line":42},[28,100379,100380],{"class":269},"#这是一个列表\n",[28,100382,100383,100386,100388,100390,100392,100394,100396,100399],{"class":30,"line":50},[28,100384,100385],{"class":211},"[i",[28,100387,665],{"class":207},[28,100389,100199],{"class":211},[28,100391,3102],{"class":207},[28,100393,9515],{"class":211},[28,100395,26094],{"class":207},[28,100397,100398],{"class":211}," a]",[28,100400,100401],{"class":269},"#这个求完之后在数列当中\n",[28,100403,100404,100407,100409,100411,100413,100415,100417],{"class":30,"line":58},[28,100405,100406],{"class":211},"np.array([i",[28,100408,665],{"class":207},[28,100410,100199],{"class":211},[28,100412,3102],{"class":207},[28,100414,9515],{"class":211},[28,100416,26094],{"class":207},[28,100418,100419],{"class":211}," a])\n",[14,100421,93342],{},[18,100423,100425],{"className":30429,"code":100424,"language":30431,"meta":23,"style":23},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[25,100426,100427,100431,100455],{"__ignoreMap":23},[28,100428,100429],{"class":30,"line":31},[28,100430,93352],{"class":269},[28,100432,100433,100435,100437,100439,100441,100443,100445,100447,100449,100451,100453],{"class":30,"line":42},[28,100434,93357],{"class":211},[28,100436,257],{"class":207},[28,100438,93053],{"class":211},[28,100440,427],{"class":38},[28,100442,588],{"class":211},[28,100444,733],{"class":38},[28,100446,93058],{"class":211},[28,100448,503],{"class":38},[28,100450,588],{"class":211},[28,100452,282],{"class":38},[28,100454,218],{"class":211},[28,100456,100457],{"class":30,"line":50},[28,100458,100459],{"class":211},"np.square(aa)\n",[18,100461,100463],{"className":30429,"code":100462,"language":30431,"meta":23,"style":23},"#传统的方式\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",[25,100464,100465,100470,100479,100495,100511,100526],{"__ignoreMap":23},[28,100466,100467],{"class":30,"line":31},[28,100468,100469],{"class":269},"#传统的方式\n",[28,100471,100472,100474,100476],{"class":30,"line":42},[28,100473,98238],{"class":211},[28,100475,257],{"class":207},[28,100477,100478],{"class":211},"np.empty_like(aa)\n",[28,100480,100481,100483,100485,100487,100489,100491,100493],{"class":30,"line":50},[28,100482,3102],{"class":207},[28,100484,9515],{"class":211},[28,100486,26094],{"class":207},[28,100488,32494],{"class":38},[28,100490,212],{"class":211},[28,100492,503],{"class":38},[28,100494,30837],{"class":211},[28,100496,100497,100499,100501,100503,100505,100507,100509],{"class":30,"line":58},[28,100498,3278],{"class":207},[28,100500,9577],{"class":211},[28,100502,26094],{"class":207},[28,100504,32494],{"class":38},[28,100506,212],{"class":211},[28,100508,282],{"class":38},[28,100510,30837],{"class":211},[28,100512,100513,100516,100518,100521,100523],{"class":30,"line":70},[28,100514,100515],{"class":211},"        bb[i,j]",[28,100517,257],{"class":207},[28,100519,100520],{"class":211},"aa[i,j]",[28,100522,665],{"class":207},[28,100524,100525],{"class":211},"aa[i,j]\n",[28,100527,100528],{"class":30,"line":78},[28,100529,100530],{"class":211},"bb\n",[149,100532,100534],{"id":100533},"_93-求各元素的符号","9.3 求各元素的符号",[14,100536,100537],{},[1540,100538],{"alt":23,"src":100539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[149,100541,100543],{"id":100542},"_94-modf函数","9.4 modf函数",[14,100545,100546],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[18,100548,100550],{"className":30429,"code":100549,"language":30431,"meta":23,"style":23},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[25,100551,100552,100575],{"__ignoreMap":23},[28,100553,100554,100556,100558,100560,100562,100564,100566,100568,100570,100573],{"class":30,"line":31},[28,100555,448],{"class":211},[28,100557,257],{"class":207},[28,100559,93053],{"class":211},[28,100561,742],{"class":207},[28,100563,656],{"class":38},[28,100565,588],{"class":211},[28,100567,656],{"class":38},[28,100569,588],{"class":211},[28,100571,100572],{"class":38},"0.3",[28,100574,218],{"class":211},[28,100576,100577],{"class":30,"line":42},[28,100578,100579],{"class":211},"np.modf(a)\n",[14,100581,100582],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[149,100584,100586],{"id":100585},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100588,100589],{},"np.cell()",[14,100591,100592],{},"np.floor()",[14,100594,100595],{},"np.rint()",[14,100597,100598],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100600,100601],{},[1540,100602],{"alt":23,"src":100603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[149,100605,100607],{"id":100606},"_96-around函数","9.6 around()函数",[14,100609,100610],{},"around()函数也可以实现对数的小数位数进行操作",[14,100612,100613],{},"其中的参数：",[14,100615,100616],{},"1.要传的数组",[14,100618,100619],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100621,100622],{},[1540,100623],{"alt":23,"src":100624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[149,100626,100628],{"id":100627},"_97-三角函数","9.7 三角函数",[14,100630,100631],{},[1540,100632],{"alt":23,"src":100633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100635,100636],{},"引入图像模块非常重要",[18,100638,100640],{"className":30429,"code":100639,"language":30431,"meta":23,"style":23},"from matplotlib import pyplot as plt\n",[25,100641,100642],{"__ignoreMap":23},[28,100643,100644,100646,100649,100651,100654,100656],{"class":30,"line":31},[28,100645,30788],{"class":207},[28,100647,100648],{"class":211}," matplotlib ",[28,100650,30443],{"class":207},[28,100652,100653],{"class":211}," pyplot ",[28,100655,31434],{"class":207},[28,100657,31488],{"class":211},[126,100659,100660],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":23,"searchDepth":42,"depth":42,"links":100662},[100663,100664,100665,100666,100667,100668,100669],{"id":100211,"depth":42,"text":100212},{"id":100326,"depth":42,"text":100327},{"id":100533,"depth":42,"text":100534},{"id":100542,"depth":42,"text":100543},{"id":100585,"depth":42,"text":100586},{"id":100606,"depth":42,"text":100607},{"id":100627,"depth":42,"text":100628},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100175,"description":131},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100676,"title":100677,"body":100678,"description":131,"extension":132,"meta":100682,"navigation":134,"path":100683,"seo":100684,"stem":100685,"__hash__":100686},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100679,"toc":100680},[],{"title":23,"searchDepth":42,"depth":42,"links":100681},[],{"category":50471},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100677,"description":131},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100688,"title":100689,"body":100690,"description":23,"extension":132,"meta":102698,"navigation":134,"path":102699,"seo":102700,"stem":102701,"__hash__":102702},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100691,"toc":102674},[100692,100695,100699,100702,100705,100711,100714,100737,100740,100774,100777,100818,100822,100825,100918,100921,100965,100968,100985,100988,101002,101005,101008,101053,101056,101093,101097,101100,101106,101111,101131,101135,101138,101204,101207,101225,101229,101232,101261,101271,101277,101281,101284,101290,101301,101305,101308,101338,101341,101621,101624,101627,101638,101641,101644,101666,101673,101676,101694,101697,101700,101714,101722,101725,101751,101757,101760,101763,101773,101785,101805,101814,101834,101844,101868,101881,101895,101900,101941,101958,101983,101995,102015,102021,102066,102085,102102,102115,102131,102138,102150,102159,102194,102215,102240,102253,102277,102292,102317,102320,102341,102350,102353,102364,102368,102371,102377,102389,102396,102400,102403,102415,102418,102432,102435,102445,102455,102458,102498,102501,102505,102511,102514,102528,102532,102535,102568,102572,102575,102598,102606,102609,102615,102621,102624,102627,102655,102659,102662,102668,102671],[10,100693,100689],{"id":100694},"_1环境安装与第一个-mujoco-程序",[149,100696,100698],{"id":100697},"_1目标说明","1.目标说明",[14,100700,100701],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100703,100704],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[18,100706,100709],{"className":100707,"code":100708,"language":5264,"meta":23},[5262],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[25,100710,100708],{"__ignoreMap":23},[14,100712,100713],{},"需要掌握:",[161,100715,100716,100719,100722,100727,100732],{},[119,100717,100718],{},"Fedora 44 下 MuJoCo 的系统依赖",[119,100720,100721],{},"Python 虚拟环境创建",[119,100723,100724],{},[25,100725,100726],{},"mujoco.MjModel",[119,100728,100729],{},[25,100730,100731],{},"mujoco.MjData",[119,100733,100734],{},[25,100735,100736],{},"mujoco.mj_step(model, data)",[14,100738,100739],{},"MuJoCo 中最重要的两个对象:",[347,100741,100742,100752],{},[350,100743,100744],{},[353,100745,100746,100749],{},[356,100747,100748],{"align":23813},"对象",[356,100750,100751],{"align":23813},"含义",[394,100753,100754,100764],{},[353,100755,100756,100761],{},[399,100757,100758],{"align":23813},[25,100759,100760],{},"MjModel",[399,100762,100763],{"align":23813},"模型结构，来自 XML，基本不随时间变化",[353,100765,100766,100771],{},[399,100767,100768],{"align":23813},[25,100769,100770],{},"MjData",[399,100772,100773],{"align":23813},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100775,100776],{},"可以先用一个类比理解：",[347,100778,100779,100789],{},[350,100780,100781],{},[353,100782,100783,100786],{},[356,100784,100785],{"align":23813},"类比",[356,100787,100788],{"align":23813},"MuJoCo 对象",[394,100790,100791,100800,100809],{},[353,100792,100793,100796],{},[399,100794,100795],{"align":23813},"游戏地图和角色配置",[399,100797,100798],{"align":23813},[25,100799,100760],{},[353,100801,100802,100805],{},[399,100803,100804],{"align":23813},"游戏运行到当前帧的状态",[399,100806,100807],{"align":23813},[25,100808,100770],{},[353,100810,100811,100814],{},[399,100812,100813],{"align":23813},"前进一帧",[399,100815,100816],{"align":23813},[25,100817,100736],{},[149,100819,100821],{"id":100820},"_2环境与依赖安装","2.环境与依赖安装",[14,100823,100824],{},"Fedora 44 系统依赖:",[18,100826,100828],{"className":20,"code":100827,"language":22,"meta":23,"style":23},"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",[25,100829,100830,100842,100855,100868,100878,100888,100907],{"__ignoreMap":23},[28,100831,100832,100834,100836,100838,100840],{"class":30,"line":31},[28,100833,24652],{"class":34},[28,100835,26366],{"class":64},[28,100837,23909],{"class":64},[28,100839,26451],{"class":38},[28,100841,39],{"class":38},[28,100843,100844,100847,100850,100853],{"class":30,"line":42},[28,100845,100846],{"class":64},"  python3",[28,100848,100849],{"class":64}," python3-pip",[28,100851,100852],{"class":64}," python3-virtualenv",[28,100854,39],{"class":38},[28,100856,100857,100860,100863,100866],{"class":30,"line":50},[28,100858,100859],{"class":64},"  mesa-libGL",[28,100861,100862],{"class":64}," mesa-libGLU",[28,100864,100865],{"class":64}," mesa-dri-drivers",[28,100867,39],{"class":38},[28,100869,100870,100873,100876],{"class":30,"line":58},[28,100871,100872],{"class":64},"  libglvnd-glx",[28,100874,100875],{"class":64}," libglvnd-opengl",[28,100877,39],{"class":38},[28,100879,100880,100883,100886],{"class":30,"line":70},[28,100881,100882],{"class":64},"  glfw",[28,100884,100885],{"class":64}," glfw-devel",[28,100887,39],{"class":38},[28,100889,100890,100893,100896,100899,100902,100905],{"class":30,"line":78},[28,100891,100892],{"class":64},"  libX11",[28,100894,100895],{"class":64}," libXcursor",[28,100897,100898],{"class":64}," libXi",[28,100900,100901],{"class":64}," libXinerama",[28,100903,100904],{"class":64}," libXrandr",[28,100906,39],{"class":38},[28,100908,100909,100912,100915],{"class":30,"line":86},[28,100910,100911],{"class":64},"  gcc",[28,100913,100914],{"class":64}," gcc-c++",[28,100916,100917],{"class":64}," make\n",[14,100919,100920],{},"创建 Python 环境:",[18,100922,100924],{"className":20,"code":100923,"language":22,"meta":23,"style":23},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[25,100925,100926,100940,100948],{"__ignoreMap":23},[28,100927,100928,100931,100934,100937],{"class":30,"line":31},[28,100929,100930],{"class":34},"python3",[28,100932,100933],{"class":38}," -m",[28,100935,100936],{"class":64}," venv",[28,100938,100939],{"class":64}," .venv\n",[28,100941,100942,100945],{"class":30,"line":42},[28,100943,100944],{"class":38},"source",[28,100946,100947],{"class":64}," .venv\u002Fbin\u002Factivate\n",[28,100949,100950,100952,100954,100957,100959,100962],{"class":30,"line":50},[28,100951,30431],{"class":34},[28,100953,100933],{"class":38},[28,100955,100956],{"class":64}," pip",[28,100958,23909],{"class":64},[28,100960,100961],{"class":38}," --upgrade",[28,100963,100964],{"class":64}," pip\n",[14,100966,100967],{},"pip 安装:",[18,100969,100971],{"className":20,"code":100970,"language":22,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy\n",[25,100972,100973],{"__ignoreMap":23},[28,100974,100975,100977,100979,100982],{"class":30,"line":31},[28,100976,23906],{"class":34},[28,100978,23909],{"class":64},[28,100980,100981],{"class":64}," \"mujoco>=2.3\"",[28,100983,100984],{"class":64}," numpy\n",[14,100986,100987],{},"安装完成后，先做最小检查：",[18,100989,100991],{"className":20,"code":100990,"language":22,"meta":23,"style":23},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[25,100992,100993],{"__ignoreMap":23},[28,100994,100995,100997,100999],{"class":30,"line":31},[28,100996,30431],{"class":34},[28,100998,30409],{"class":38},[28,101000,101001],{"class":64}," \"import mujoco; print(mujoco.__version__)\"\n",[14,101003,101004],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,101006,101007],{},"conda 安装:",[18,101009,101011],{"className":20,"code":101010,"language":22,"meta":23,"style":23},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[25,101012,101013,101033,101043],{"__ignoreMap":23},[28,101014,101015,101017,101019,101021,101024,101027,101030],{"class":30,"line":31},[28,101016,30381],{"class":34},[28,101018,29227],{"class":64},[28,101020,25186],{"class":38},[28,101022,101023],{"class":64}," mujoco-study",[28,101025,101026],{"class":64}," python=",[28,101028,101029],{"class":38},"3.10",[28,101031,101032],{"class":38}," -y\n",[28,101034,101035,101037,101040],{"class":30,"line":42},[28,101036,30381],{"class":34},[28,101038,101039],{"class":64}," activate",[28,101041,101042],{"class":64}," mujoco-study\n",[28,101044,101045,101047,101049,101051],{"class":30,"line":50},[28,101046,23906],{"class":34},[28,101048,23909],{"class":64},[28,101050,100981],{"class":64},[28,101052,100984],{"class":64},[14,101054,101055],{},"版本冲突说明:",[161,101057,101058,101064,101074,101083],{},[119,101059,101060,101061,28436],{},"不要安装 ",[25,101062,101063],{},"mujoco-py",[119,101065,101066,101067,101069,101070,101073],{},"如果旧项目里同时安装了 ",[25,101068,101063],{}," 和 ",[25,101071,101072],{},"mujoco","，建议新建干净虚拟环境。",[119,101075,101076,101079,101080,28436],{},[25,101077,101078],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[25,101081,101082],{},"~\u002F.mujoco\u002Fmujoco210",[119,101084,101085,101086,82590,101089,101092],{},"离屏渲染可能涉及 OpenGL 后端，",[25,101087,101088],{},"MUJOCO_GL=egl",[25,101090,101091],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[149,101094,101096],{"id":101095},"_3核心概念解释","3.核心概念解释",[14,101098,101099],{},"MuJoCo 的基本执行流程:",[18,101101,101104],{"className":101102,"code":101103,"language":5264,"meta":23},[5262],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[25,101105,101103],{"__ignoreMap":23},[14,101107,101108,101110],{},[25,101109,100760],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101112,101113,101115,101116,422,101119,422,101122,422,101125,422,101128,28436],{},[25,101114,100770],{}," 存放仿真运行时状态，例如 ",[25,101117,101118],{},"data.time",[25,101120,101121],{},"data.qpos",[25,101123,101124],{},"data.qvel",[25,101126,101127],{},"data.ctrl",[25,101129,101130],{},"data.xpos",[177,101132,101134],{"id":101133},"xml-是什么","XML 是什么",[14,101136,101137],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[18,101139,101141],{"className":53118,"code":101140,"language":53120,"meta":23,"style":23},"\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",[25,101142,101143,101165,101196],{"__ignoreMap":23},[28,101144,101145,101147,101149,101151,101153,101155,101158,101160,101163],{"class":30,"line":31},[28,101146,1120],{"class":211},[28,101148,51851],{"class":51351},[28,101150,14997],{"class":34},[28,101152,257],{"class":211},[28,101154,53542],{"class":64},[28,101156,101157],{"class":34}," pos",[28,101159,257],{"class":211},[28,101161,101162],{"class":64},"\"0 0 1\"",[28,101164,51358],{"class":211},[28,101166,101167,101169,101172,101174,101176,101179,101181,101183,101185,101188,101190,101193],{"class":30,"line":42},[28,101168,52195],{"class":211},[28,101170,101171],{"class":51351},"geom",[28,101173,14997],{"class":34},[28,101175,257],{"class":211},[28,101177,101178],{"class":64},"\"box_geom\"",[28,101180,53875],{"class":34},[28,101182,257],{"class":211},[28,101184,53542],{"class":64},[28,101186,101187],{"class":34}," size",[28,101189,257],{"class":211},[28,101191,101192],{"class":64},"\"0.1 0.1 0.1\"",[28,101194,101195],{"class":211},"\u002F>\n",[28,101197,101198,101200,101202],{"class":30,"line":50},[28,101199,51836],{"class":211},[28,101201,51851],{"class":51351},[28,101203,51358],{"class":211},[14,101205,101206],{},"这段意思是：",[161,101208,101209,101215,101222],{},[119,101210,101211,101212,101214],{},"创建一个叫 ",[25,101213,53765],{}," 的刚体。",[119,101216,101217,101218,101221],{},"它初始放在 ",[25,101219,101220],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[119,101223,101224],{},"它里面有一个盒子形状的几何体。",[177,101226,101228],{"id":101227},"timestep-是什么","timestep 是什么",[14,101230,101231],{},"XML 里的：",[18,101233,101235],{"className":53118,"code":101234,"language":53120,"meta":23,"style":23},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[25,101236,101237],{"__ignoreMap":23},[28,101238,101239,101241,101243,101246,101248,101251,101254,101256,101259],{"class":30,"line":31},[28,101240,1120],{"class":211},[28,101242,69217],{"class":51351},[28,101244,101245],{"class":34}," timestep",[28,101247,257],{"class":211},[28,101249,101250],{"class":64},"\"0.01\"",[28,101252,101253],{"class":34}," gravity",[28,101255,257],{"class":211},[28,101257,101258],{"class":64},"\"0 0 -9.81\"",[28,101260,101195],{"class":211},[14,101262,101263,101264,101267,101268,101270],{},"表示每调用一次 ",[25,101265,101266],{},"mj_step","，仿真时间前进 ",[25,101269,39037],{}," 秒。循环 100 次，大约就是 1 秒：",[18,101272,101275],{"className":101273,"code":101274,"language":5264,"meta":23},[5262],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[25,101276,101274],{"__ignoreMap":23},[177,101278,101280],{"id":101279},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101282,101283],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[18,101285,101288],{"className":101286,"code":101287,"language":5264,"meta":23},[5262],"x y z qw qx qy qz\n",[25,101289,101287],{"__ignoreMap":23},[14,101291,101292,101293,101296,101297,101300],{},"表示一个自由刚体的位置和姿态。其中 ",[25,101294,101295],{},"x y z"," 是位置，",[25,101298,101299],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[149,101302,101304],{"id":101303},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101306,101307],{},"新建文件:",[18,101309,101311],{"className":20,"code":101310,"language":22,"meta":23,"style":23},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[25,101312,101313,101323,101330],{"__ignoreMap":23},[28,101314,101315,101318,101320],{"class":30,"line":31},[28,101316,101317],{"class":34},"mkdir",[28,101319,29267],{"class":38},[28,101321,101322],{"class":64}," mujoco_tutorial\n",[28,101324,101325,101328],{"class":30,"line":42},[28,101326,101327],{"class":38},"cd",[28,101329,101322],{"class":64},[28,101331,101332,101335],{"class":30,"line":50},[28,101333,101334],{"class":34},"touch",[28,101336,101337],{"class":64}," ch1_first_sim.py\n",[14,101339,101340],{},"写入:",[18,101342,101344],{"className":30429,"code":101343,"language":30431,"meta":23,"style":23},"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",[25,101345,101346,101353,101357,101361,101371,101376,101381,101385,101390,101395,101399,101404,101409,101414,101419,101424,101429,101433,101437,101441,101454,101468,101478,101482,101494,101506,101518,101530,101542,101546,101563,101568,101572,101583,101594,101598,101602,101616],{"__ignoreMap":23},[28,101347,101348,101350],{"class":30,"line":31},[28,101349,30443],{"class":207},[28,101351,101352],{"class":211}," mujoco\n",[28,101354,101355],{"class":30,"line":42},[28,101356,2477],{"emptyLinePlaceholder":134},[28,101358,101359],{"class":30,"line":50},[28,101360,2477],{"emptyLinePlaceholder":134},[28,101362,101363,101366,101368],{"class":30,"line":58},[28,101364,101365],{"class":38},"XML",[28,101367,13641],{"class":207},[28,101369,101370],{"class":64}," \"\"\"\n",[28,101372,101373],{"class":30,"line":70},[28,101374,101375],{"class":64},"\u003Cmujoco model=\"first_sim\">\n",[28,101377,101378],{"class":30,"line":78},[28,101379,101380],{"class":64},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[28,101382,101383],{"class":30,"line":86},[28,101384,2477],{"emptyLinePlaceholder":134},[28,101386,101387],{"class":30,"line":97},[28,101388,101389],{"class":64},"  \u003Cworldbody>\n",[28,101391,101392],{"class":30,"line":108},[28,101393,101394],{"class":64},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,101396,101397],{"class":30,"line":1407},[28,101398,2477],{"emptyLinePlaceholder":134},[28,101400,101401],{"class":30,"line":1690},[28,101402,101403],{"class":64},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[28,101405,101406],{"class":30,"line":1695},[28,101407,101408],{"class":64},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[28,101410,101411],{"class":30,"line":1701},[28,101412,101413],{"class":64},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,101415,101416],{"class":30,"line":1706},[28,101417,101418],{"class":64},"    \u003C\u002Fbody>\n",[28,101420,101421],{"class":30,"line":1720},[28,101422,101423],{"class":64},"  \u003C\u002Fworldbody>\n",[28,101425,101426],{"class":30,"line":1725},[28,101427,101428],{"class":64},"\u003C\u002Fmujoco>\n",[28,101430,101431],{"class":30,"line":1731},[28,101432,95749],{"class":64},[28,101434,101435],{"class":30,"line":1752},[28,101436,2477],{"emptyLinePlaceholder":134},[28,101438,101439],{"class":30,"line":1757},[28,101440,2477],{"emptyLinePlaceholder":134},[28,101442,101443,101445,101447,101450,101452],{"class":30,"line":1771},[28,101444,31998],{"class":207},[28,101446,2050],{"class":34},[28,101448,101449],{"class":211},"() -> ",[28,101451,95737],{"class":38},[28,101453,3816],{"class":211},[28,101455,101456,101459,101461,101464,101466],{"class":30,"line":1776},[28,101457,101458],{"class":211},"    model ",[28,101460,257],{"class":207},[28,101462,101463],{"class":211}," mujoco.MjModel.from_xml_string(",[28,101465,101365],{"class":38},[28,101467,218],{"class":211},[28,101469,101470,101473,101475],{"class":30,"line":1805},[28,101471,101472],{"class":211},"    data ",[28,101474,257],{"class":207},[28,101476,101477],{"class":211}," mujoco.MjData(model)\n",[28,101479,101480],{"class":30,"line":1810},[28,101481,2477],{"emptyLinePlaceholder":134},[28,101483,101484,101486,101488,101491],{"class":30,"line":1827},[28,101485,31350],{"class":38},[28,101487,212],{"class":211},[28,101489,101490],{"class":64},"\"nq:\"",[28,101492,101493],{"class":211},", model.nq)\n",[28,101495,101496,101498,101500,101503],{"class":30,"line":1832},[28,101497,31350],{"class":38},[28,101499,212],{"class":211},[28,101501,101502],{"class":64},"\"nv:\"",[28,101504,101505],{"class":211},", model.nv)\n",[28,101507,101508,101510,101512,101515],{"class":30,"line":1837},[28,101509,31350],{"class":38},[28,101511,212],{"class":211},[28,101513,101514],{"class":64},"\"nu:\"",[28,101516,101517],{"class":211},", model.nu)\n",[28,101519,101520,101522,101524,101527],{"class":30,"line":1842},[28,101521,31350],{"class":38},[28,101523,212],{"class":211},[28,101525,101526],{"class":64},"\"initial time:\"",[28,101528,101529],{"class":211},", data.time)\n",[28,101531,101532,101534,101536,101539],{"class":30,"line":1856},[28,101533,31350],{"class":38},[28,101535,212],{"class":211},[28,101537,101538],{"class":64},"\"initial qpos:\"",[28,101540,101541],{"class":211},", data.qpos.copy())\n",[28,101543,101544],{"class":30,"line":1861},[28,101545,2477],{"emptyLinePlaceholder":134},[28,101547,101548,101550,101553,101555,101557,101559,101561],{"class":30,"line":2654},[28,101549,3278],{"class":207},[28,101551,101552],{"class":211}," _ ",[28,101554,26094],{"class":207},[28,101556,32494],{"class":38},[28,101558,212],{"class":211},[28,101560,521],{"class":38},[28,101562,30837],{"class":211},[28,101564,101565],{"class":30,"line":2668},[28,101566,101567],{"class":211},"        mujoco.mj_step(model, data)\n",[28,101569,101570],{"class":30,"line":2676},[28,101571,2477],{"emptyLinePlaceholder":134},[28,101573,101574,101576,101578,101581],{"class":30,"line":2681},[28,101575,31350],{"class":38},[28,101577,212],{"class":211},[28,101579,101580],{"class":64},"\"final time:\"",[28,101582,101529],{"class":211},[28,101584,101585,101587,101589,101592],{"class":30,"line":2687},[28,101586,31350],{"class":38},[28,101588,212],{"class":211},[28,101590,101591],{"class":64},"\"final qpos:\"",[28,101593,101541],{"class":211},[28,101595,101596],{"class":30,"line":2693},[28,101597,2477],{"emptyLinePlaceholder":134},[28,101599,101600],{"class":30,"line":2698},[28,101601,2477],{"emptyLinePlaceholder":134},[28,101603,101604,101606,101608,101611,101614],{"class":30,"line":8025},[28,101605,1609],{"class":207},[28,101607,31271],{"class":38},[28,101609,101610],{"class":207}," ==",[28,101612,101613],{"class":64}," \"__main__\"",[28,101615,3816],{"class":211},[28,101617,101618],{"class":30,"line":8049},[28,101619,101620],{"class":211},"    main()\n",[177,101622,101623],{"id":101623},"代码逐段解释",[14,101625,101626],{},"导入库：",[18,101628,101630],{"className":30429,"code":101629,"language":30431,"meta":23,"style":23},"import mujoco\n",[25,101631,101632],{"__ignoreMap":23},[28,101633,101634,101636],{"class":30,"line":31},[28,101635,30443],{"class":207},[28,101637,101352],{"class":211},[14,101639,101640],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101642,101643],{},"定义 XML：",[18,101645,101647],{"className":30429,"code":101646,"language":30431,"meta":23,"style":23},"XML = \"\"\"\n...\n\"\"\"\n",[25,101648,101649,101657,101662],{"__ignoreMap":23},[28,101650,101651,101653,101655],{"class":30,"line":31},[28,101652,101365],{"class":38},[28,101654,13641],{"class":207},[28,101656,101370],{"class":64},[28,101658,101659],{"class":30,"line":42},[28,101660,101661],{"class":64},"...\n",[28,101663,101664],{"class":30,"line":50},[28,101665,95749],{"class":64},[14,101667,101668,101669,101672],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[25,101670,101671],{},"freejoint"," 的方块。",[14,101674,101675],{},"编译模型：",[18,101677,101679],{"className":30429,"code":101678,"language":30431,"meta":23,"style":23},"model = mujoco.MjModel.from_xml_string(XML)\n",[25,101680,101681],{"__ignoreMap":23},[28,101682,101683,101686,101688,101690,101692],{"class":30,"line":31},[28,101684,101685],{"class":211},"model ",[28,101687,257],{"class":207},[28,101689,101463],{"class":211},[28,101691,101365],{"class":38},[28,101693,218],{"class":211},[14,101695,101696],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101698,101699],{},"创建数据：",[18,101701,101703],{"className":30429,"code":101702,"language":30431,"meta":23,"style":23},"data = mujoco.MjData(model)\n",[25,101704,101705],{"__ignoreMap":23},[28,101706,101707,101710,101712],{"class":30,"line":31},[28,101708,101709],{"class":211},"data ",[28,101711,257],{"class":207},[28,101713,101477],{"class":211},[14,101715,101716,101718,101719,101721],{},[25,101717,33452],{}," 会保存仿真当前状态。刚创建时，时间是 ",[25,101720,401],{},"，方块还在初始位置。",[14,101723,101724],{},"推进仿真：",[18,101726,101728],{"className":30429,"code":101727,"language":30431,"meta":23,"style":23},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[25,101729,101730,101746],{"__ignoreMap":23},[28,101731,101732,101734,101736,101738,101740,101742,101744],{"class":30,"line":31},[28,101733,3102],{"class":207},[28,101735,101552],{"class":211},[28,101737,26094],{"class":207},[28,101739,32494],{"class":38},[28,101741,212],{"class":211},[28,101743,521],{"class":38},[28,101745,30837],{"class":211},[28,101747,101748],{"class":30,"line":42},[28,101749,101750],{"class":211},"    mujoco.mj_step(model, data)\n",[14,101752,101753,101754,101756],{},"每次 ",[25,101755,101266],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[177,101758,101759],{"id":101759},"代码逐行细讲",[14,101761,101762],{},"下面把完整代码按新手视角拆开讲。",[18,101764,101765],{"className":30429,"code":101629,"language":30431,"meta":23,"style":23},[25,101766,101767],{"__ignoreMap":23},[28,101768,101769,101771],{"class":30,"line":31},[28,101770,30443],{"class":207},[28,101772,101352],{"class":211},[14,101774,101775,101777,101778,422,101780,422,101782,28436],{},[25,101776,30443],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[25,101779,100726],{},[25,101781,100731],{},[25,101783,101784],{},"mujoco.mj_step",[18,101786,101787],{"className":30429,"code":101646,"language":30431,"meta":23,"style":23},[25,101788,101789,101797,101801],{"__ignoreMap":23},[28,101790,101791,101793,101795],{"class":30,"line":31},[28,101792,101365],{"class":38},[28,101794,13641],{"class":207},[28,101796,101370],{"class":64},[28,101798,101799],{"class":30,"line":42},[28,101800,101661],{"class":64},[28,101802,101803],{"class":30,"line":50},[28,101804,95749],{"class":64},[14,101806,101807,101809,101810,101813],{},[25,101808,101365],{}," 是一个变量名。右边的三引号 ",[25,101811,101812],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[18,101815,101816],{"className":53118,"code":101375,"language":53120,"meta":23,"style":23},[25,101817,101818],{"__ignoreMap":23},[28,101819,101820,101822,101824,101827,101829,101832],{"class":30,"line":31},[28,101821,1120],{"class":211},[28,101823,101072],{"class":51351},[28,101825,101826],{"class":34}," model",[28,101828,257],{"class":211},[28,101830,101831],{"class":64},"\"first_sim\"",[28,101833,51358],{"class":211},[14,101835,101836,101837,101840,101841,28436],{},"这是 XML 的根标签。",[25,101838,101839],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[25,101842,101843],{},"first_sim",[18,101845,101846],{"className":53118,"code":101234,"language":53120,"meta":23,"style":23},[25,101847,101848],{"__ignoreMap":23},[28,101849,101850,101852,101854,101856,101858,101860,101862,101864,101866],{"class":30,"line":31},[28,101851,1120],{"class":211},[28,101853,69217],{"class":51351},[28,101855,101245],{"class":34},[28,101857,257],{"class":211},[28,101859,101250],{"class":64},[28,101861,101253],{"class":34},[28,101863,257],{"class":211},[28,101865,101258],{"class":64},[28,101867,101195],{"class":211},[14,101869,101870,101872,101873,101876,101877,101880],{},[25,101871,69217],{}," 用来设置仿真参数。",[25,101874,101875],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[25,101878,101879],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[18,101882,101884],{"className":53118,"code":101883,"language":53120,"meta":23,"style":23},"\u003Cworldbody>\n",[25,101885,101886],{"__ignoreMap":23},[28,101887,101888,101890,101893],{"class":30,"line":31},[28,101889,1120],{"class":211},[28,101891,101892],{"class":51351},"worldbody",[28,101894,51358],{"class":211},[14,101896,101897,101899],{},[25,101898,101892],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[18,101901,101903],{"className":53118,"code":101902,"language":53120,"meta":23,"style":23},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[25,101904,101905],{"__ignoreMap":23},[28,101906,101907,101909,101911,101913,101915,101918,101920,101922,101925,101927,101929,101932,101934,101936,101939],{"class":30,"line":31},[28,101908,1120],{"class":211},[28,101910,101171],{"class":51351},[28,101912,14997],{"class":34},[28,101914,257],{"class":211},[28,101916,101917],{"class":64},"\"floor\"",[28,101919,53875],{"class":34},[28,101921,257],{"class":211},[28,101923,101924],{"class":64},"\"plane\"",[28,101926,101187],{"class":34},[28,101928,257],{"class":211},[28,101930,101931],{"class":64},"\"2 2 0.1\"",[28,101933,78818],{"class":34},[28,101935,257],{"class":211},[28,101937,101938],{"class":64},"\"0.8 0.8 0.8 1\"",[28,101940,101195],{"class":211},[14,101942,101943,101944,101946,101947,101950,101951,101954,101955,101957],{},"这行创建地面。",[25,101945,101171],{}," 是几何体。",[25,101948,101949],{},"name=\"floor\""," 是名字。",[25,101952,101953],{},"type=\"plane\""," 表示平面。",[25,101956,55161],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[18,101959,101961],{"className":53118,"code":101960,"language":53120,"meta":23,"style":23},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[25,101962,101963],{"__ignoreMap":23},[28,101964,101965,101967,101969,101971,101973,101975,101977,101979,101981],{"class":30,"line":31},[28,101966,1120],{"class":211},[28,101968,51851],{"class":51351},[28,101970,14997],{"class":34},[28,101972,257],{"class":211},[28,101974,53542],{"class":64},[28,101976,101157],{"class":34},[28,101978,257],{"class":211},[28,101980,101162],{"class":64},[28,101982,51358],{"class":211},[14,101984,101985,101986,28436,101988,101991,101992,101994],{},"这行创建一个刚体，名字叫 ",[25,101987,53765],{},[25,101989,101990],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[25,101993,101220],{},"，也就是离地面 1 米高。",[18,101996,101998],{"className":53118,"code":101997,"language":53120,"meta":23,"style":23},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[25,101999,102000],{"__ignoreMap":23},[28,102001,102002,102004,102006,102008,102010,102013],{"class":30,"line":31},[28,102003,1120],{"class":211},[28,102005,101671],{"class":51351},[28,102007,14997],{"class":34},[28,102009,257],{"class":211},[28,102011,102012],{"class":64},"\"box_free\"",[28,102014,101195],{"class":211},[14,102016,102017,102018,102020],{},"这行很重要。",[25,102019,101671],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[18,102022,102024],{"className":53118,"code":102023,"language":53120,"meta":23,"style":23},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[25,102025,102026],{"__ignoreMap":23},[28,102027,102028,102030,102032,102034,102036,102038,102040,102042,102044,102046,102048,102050,102053,102055,102057,102059,102061,102064],{"class":30,"line":31},[28,102029,1120],{"class":211},[28,102031,101171],{"class":51351},[28,102033,14997],{"class":34},[28,102035,257],{"class":211},[28,102037,101178],{"class":64},[28,102039,53875],{"class":34},[28,102041,257],{"class":211},[28,102043,53542],{"class":64},[28,102045,101187],{"class":34},[28,102047,257],{"class":211},[28,102049,101192],{"class":64},[28,102051,102052],{"class":34}," mass",[28,102054,257],{"class":211},[28,102056,3755],{"class":64},[28,102058,78818],{"class":34},[28,102060,257],{"class":211},[28,102062,102063],{"class":64},"\"1 0 0 1\"",[28,102065,101195],{"class":211},[14,102067,102068,102069,102072,102073,102076,102077,102080,102081,102084],{},"这行给 box body 添加一个盒子形状。",[25,102070,102071],{},"type=\"box\""," 表示形状是盒子。",[25,102074,102075],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[25,102078,102079],{},"mass=\"1\""," 表示质量是 1。",[25,102082,102083],{},"rgba=\"1 0 0 1\""," 表示红色。",[18,102086,102088],{"className":30429,"code":102087,"language":30431,"meta":23,"style":23},"def main() -> None:\n",[25,102089,102090],{"__ignoreMap":23},[28,102091,102092,102094,102096,102098,102100],{"class":30,"line":31},[28,102093,31998],{"class":207},[28,102095,2050],{"class":34},[28,102097,101449],{"class":211},[28,102099,95737],{"class":38},[28,102101,3816],{"class":211},[14,102103,102104,102106,102107,102110,102111,102114],{},[25,102105,31998],{}," 用来定义函数。这里定义了一个叫 ",[25,102108,102109],{},"main"," 的函数。",[25,102112,102113],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[18,102116,102117],{"className":30429,"code":101678,"language":30431,"meta":23,"style":23},[25,102118,102119],{"__ignoreMap":23},[28,102120,102121,102123,102125,102127,102129],{"class":30,"line":31},[28,102122,101685],{"class":211},[28,102124,257],{"class":207},[28,102126,101463],{"class":211},[28,102128,101365],{"class":38},[28,102130,218],{"class":211},[14,102132,102133,102134,102137],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[25,102135,102136],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[18,102139,102140],{"className":30429,"code":101702,"language":30431,"meta":23,"style":23},[25,102141,102142],{"__ignoreMap":23},[28,102143,102144,102146,102148],{"class":30,"line":31},[28,102145,101709],{"class":211},[28,102147,257],{"class":207},[28,102149,101477],{"class":211},[14,102151,102152,102153,102155,102156,102158],{},"这行创建仿真数据。",[25,102154,33452],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[25,102157,33452],{}," 都会变化。",[18,102160,102162],{"className":30429,"code":102161,"language":30431,"meta":23,"style":23},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[25,102163,102164,102174,102184],{"__ignoreMap":23},[28,102165,102166,102168,102170,102172],{"class":30,"line":31},[28,102167,30466],{"class":38},[28,102169,212],{"class":211},[28,102171,101490],{"class":64},[28,102173,101493],{"class":211},[28,102175,102176,102178,102180,102182],{"class":30,"line":42},[28,102177,30466],{"class":38},[28,102179,212],{"class":211},[28,102181,101502],{"class":64},[28,102183,101505],{"class":211},[28,102185,102186,102188,102190,102192],{"class":30,"line":50},[28,102187,30466],{"class":38},[28,102189,212],{"class":211},[28,102191,101514],{"class":64},[28,102193,101517],{"class":211},[14,102195,102196,102198,102199,102202,102203,102206,102207,102210,102211,102214],{},[25,102197,30466],{}," 用来输出信息。",[25,102200,102201],{},"model.nq"," 是位置变量数量，",[25,102204,102205],{},"model.nv"," 是速度变量数量，",[25,102208,102209],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[25,102212,102213],{},"nu"," 是 0。",[18,102216,102218],{"className":30429,"code":102217,"language":30431,"meta":23,"style":23},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[25,102219,102220,102230],{"__ignoreMap":23},[28,102221,102222,102224,102226,102228],{"class":30,"line":31},[28,102223,30466],{"class":38},[28,102225,212],{"class":211},[28,102227,101526],{"class":64},[28,102229,101529],{"class":211},[28,102231,102232,102234,102236,102238],{"class":30,"line":42},[28,102233,30466],{"class":38},[28,102235,212],{"class":211},[28,102237,101538],{"class":64},[28,102239,101541],{"class":211},[14,102241,102242,102243,102245,102246,102248,102249,102252],{},"这里打印初始时间和初始位置。",[25,102244,101118],{}," 一开始是 0。",[25,102247,101121],{}," 是位置数组。",[25,102250,102251],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[18,102254,102255],{"className":30429,"code":101727,"language":30431,"meta":23,"style":23},[25,102256,102257,102273],{"__ignoreMap":23},[28,102258,102259,102261,102263,102265,102267,102269,102271],{"class":30,"line":31},[28,102260,3102],{"class":207},[28,102262,101552],{"class":211},[28,102264,26094],{"class":207},[28,102266,32494],{"class":38},[28,102268,212],{"class":211},[28,102270,521],{"class":38},[28,102272,30837],{"class":211},[28,102274,102275],{"class":30,"line":42},[28,102276,101750],{"class":211},[14,102278,102279,102281,102282,102285,102286,102288,102289,102291],{},[25,102280,3102],{}," 是循环。",[25,102283,102284],{},"range(100)"," 表示循环 100 次。",[25,102287,1202],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[25,102290,101266],{},"，仿真就前进一步。",[18,102293,102295],{"className":30429,"code":102294,"language":30431,"meta":23,"style":23},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[25,102296,102297,102307],{"__ignoreMap":23},[28,102298,102299,102301,102303,102305],{"class":30,"line":31},[28,102300,30466],{"class":38},[28,102302,212],{"class":211},[28,102304,101580],{"class":64},[28,102306,101529],{"class":211},[28,102308,102309,102311,102313,102315],{"class":30,"line":42},[28,102310,30466],{"class":38},[28,102312,212],{"class":211},[28,102314,101591],{"class":64},[28,102316,101541],{"class":211},[14,102318,102319],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[18,102321,102323],{"className":30429,"code":102322,"language":30431,"meta":23,"style":23},"if __name__ == \"__main__\":\n    main()\n",[25,102324,102325,102337],{"__ignoreMap":23},[28,102326,102327,102329,102331,102333,102335],{"class":30,"line":31},[28,102328,1609],{"class":207},[28,102330,31271],{"class":38},[28,102332,101610],{"class":207},[28,102334,101613],{"class":64},[28,102336,3816],{"class":211},[28,102338,102339],{"class":30,"line":42},[28,102340,101620],{"class":211},[14,102342,102343,102344,102347,102348,28436],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[25,102345,102346],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[25,102349,102346],{},[14,102351,102352],{},"运行:",[18,102354,102356],{"className":20,"code":102355,"language":22,"meta":23,"style":23},"python ch1_first_sim.py\n",[25,102357,102358],{"__ignoreMap":23},[28,102359,102360,102362],{"class":30,"line":31},[28,102361,30431],{"class":34},[28,102363,101337],{"class":64},[149,102365,102367],{"id":102366},"_5运行结果说明","5.运行结果说明",[14,102369,102370],{},"你应该看到类似输出:",[18,102372,102375],{"className":102373,"code":102374,"language":5264,"meta":23},[5262],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[25,102376,102374],{"__ignoreMap":23},[14,102378,102379,102381,102382,102385,102386,28436],{},[25,102380,101671],{}," 有 7 个位置变量: ",[25,102383,102384],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[25,102387,102388],{},"vx vy vz wx wy wz",[14,102390,102391,102392,102395],{},"你还会看到 ",[25,102393,102394],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[149,102397,102399],{"id":102398},"_6验证步骤","6.验证步骤",[14,102401,102402],{},"确认版本:",[18,102404,102405],{"className":20,"code":100990,"language":22,"meta":23,"style":23},[25,102406,102407],{"__ignoreMap":23},[28,102408,102409,102411,102413],{"class":30,"line":31},[28,102410,30431],{"class":34},[28,102412,30409],{"class":38},[28,102414,101001],{"class":64},[14,102416,102417],{},"确认导入的是官方 bindings:",[18,102419,102421],{"className":20,"code":102420,"language":22,"meta":23,"style":23},"python -c \"import mujoco; print(mujoco)\"\n",[25,102422,102423],{"__ignoreMap":23},[28,102424,102425,102427,102429],{"class":30,"line":31},[28,102426,30431],{"class":34},[28,102428,30409],{"class":38},[28,102430,102431],{"class":64}," \"import mujoco; print(mujoco)\"\n",[14,102433,102434],{},"运行程序:",[18,102436,102437],{"className":20,"code":102355,"language":22,"meta":23,"style":23},[25,102438,102439],{"__ignoreMap":23},[28,102440,102441,102443],{"class":30,"line":31},[28,102442,30431],{"class":34},[28,102444,101337],{"class":64},[14,102446,102447,102448,102451,102452,28436],{},"检查 ",[25,102449,102450],{},"final time"," 是否约等于 ",[25,102453,102454],{},"1.0",[14,102456,102457],{},"再做几个小实验：",[161,102459,102460,102470,102478,102491],{},[119,102461,102462,102463,102465,102466,102469],{},"把 ",[25,102464,101990],{}," 改成 ",[25,102467,102468],{},"pos=\"0 0 2\"","，观察初始高度变化。",[119,102471,102462,102472,102465,102474,102477],{},[25,102473,101879],{},[25,102475,102476],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[119,102479,102462,102480,102465,102482,102485,102486,102488,102489,28436],{},[25,102481,101875],{},[25,102483,102484],{},"timestep=\"0.005\"","，观察 100 步后的 ",[25,102487,102450],{}," 是否变成约 ",[25,102490,35380],{},[119,102492,102493,102494,102497],{},"删除 ",[25,102495,102496],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102499,102500],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[149,102502,102504],{"id":102503},"_7常见错误与解决方案","7.常见错误与解决方案",[177,102506,102508],{"id":102507},"modulenotfounderror-no-module-named-mujoco",[25,102509,102510],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102512,102513],{},"解决:",[18,102515,102517],{"className":20,"code":102516,"language":22,"meta":23,"style":23},"pip install \"mujoco>=2.3\"\n",[25,102518,102519],{"__ignoreMap":23},[28,102520,102521,102523,102525],{"class":30,"line":31},[28,102522,23906],{"class":34},[28,102524,23909],{"class":64},[28,102526,102527],{"class":64}," \"mujoco>=2.3\"\n",[177,102529,102531],{"id":102530},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102533,102534],{},"先安装系统依赖:",[18,102536,102538],{"className":20,"code":102537,"language":22,"meta":23,"style":23},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[25,102539,102540],{"__ignoreMap":23},[28,102541,102542,102544,102546,102548,102550,102553,102555,102558,102560,102563,102565],{"class":30,"line":31},[28,102543,24652],{"class":34},[28,102545,26366],{"class":64},[28,102547,23909],{"class":64},[28,102549,26451],{"class":38},[28,102551,102552],{"class":64}," mesa-libGL",[28,102554,100865],{"class":64},[28,102556,102557],{"class":64}," glfw",[28,102559,100885],{"class":64},[28,102561,102562],{"class":64}," libX11",[28,102564,100898],{"class":64},[28,102566,102567],{"class":64}," libXrandr\n",[177,102569,102571],{"id":102570},"xml-解析失败","XML 解析失败",[14,102573,102574],{},"检查:",[161,102576,102577,102580,102583,102589],{},[119,102578,102579],{},"标签是否闭合",[119,102581,102582],{},"属性是否带引号",[119,102584,102585,102586],{},"根节点是否是 ",[25,102587,102588],{},"\u003Cmujoco>",[119,102590,102591,102593,102594,102597],{},[25,102592,51851],{}," 是否放在 ",[25,102595,102596],{},"\u003Cworldbody>"," 内部",[177,102599,102601,102603,102604],{"id":102600},"final-time-不是严格等于-10",[25,102602,102450],{}," 不是严格等于 ",[25,102605,102454],{},[14,102607,102608],{},"这通常不是错误。浮点数计算可能得到：",[18,102610,102613],{"className":102611,"code":102612,"language":5264,"meta":23},[5262],"1.0000000000000007\n",[25,102614,102612],{"__ignoreMap":23},[14,102616,102617,102618,102620],{},"只要接近 ",[25,102619,102454],{}," 就正常。",[177,102622,102623],{"id":102623},"方块没有掉下来",[14,102625,102626],{},"检查：",[161,102628,102629,102635,102641,102646],{},[119,102630,102631,102632],{},"方块 body 里是否有 ",[25,102633,102634],{},"\u003Cfreejoint\u002F>",[119,102636,102637,102638],{},"重力是否是 ",[25,102639,102640],{},"0 0 -9.81",[119,102642,102643,102644],{},"是否真的调用了 ",[25,102645,100736],{},[119,102647,102648,102649,102651,102652],{},"你看的是否是 ",[25,102650,102394],{},"，不是 ",[25,102653,102654],{},"initial qpos",[149,102656,102658],{"id":102657},"_8本章小结","8.本章小结",[14,102660,102661],{},"本章你已经完成了 MuJoCo 的最小闭环：",[18,102663,102666],{"className":102664,"code":102665,"language":5264,"meta":23},[5262],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[25,102667,102665],{"__ignoreMap":23},[14,102669,102670],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[126,102672,102673],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":23,"searchDepth":42,"depth":42,"links":102675},[102676,102677,102678,102683,102687,102688,102689,102697],{"id":100697,"depth":42,"text":100698},{"id":100820,"depth":42,"text":100821},{"id":101095,"depth":42,"text":101096,"children":102679},[102680,102681,102682],{"id":101133,"depth":50,"text":101134},{"id":101227,"depth":50,"text":101228},{"id":101279,"depth":50,"text":101280},{"id":101303,"depth":42,"text":101304,"children":102684},[102685,102686],{"id":101623,"depth":50,"text":101623},{"id":101759,"depth":50,"text":101759},{"id":102366,"depth":42,"text":102367},{"id":102398,"depth":42,"text":102399},{"id":102503,"depth":42,"text":102504,"children":102690},[102691,102692,102693,102694,102696],{"id":102507,"depth":50,"text":102510},{"id":102530,"depth":50,"text":102531},{"id":102570,"depth":50,"text":102571},{"id":102600,"depth":50,"text":102695},"final time 不是严格等于 1.0",{"id":102623,"depth":50,"text":102623},{"id":102657,"depth":42,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100689,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102704,"title":102705,"body":102706,"description":23,"extension":132,"meta":104362,"navigation":134,"path":104363,"seo":104364,"stem":104365,"__hash__":104366},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102707,"toc":104338},[102708,102711,102713,102716,102719,102736,102831,102834,102840,102842,102844,102868,102871,102885,102888,102929,102931,102944,102946,102949,102997,103009,103012,103015,103021,103034,103101,103104,103123,103126,103129,103135,103137,103146,103149,103153,103162,103244,103253,103257,103263,103277,103287,103289,103619,103622,103634,103636,103647,103649,103652,103670,103673,103676,103694,103705,103708,103723,103733,103735,103756,103773,103793,103799,103839,103855,103871,103877,103880,103904,103920,103925,103955,103972,103997,104000,104015,104024,104039,104048,104063,104070,104072,104082,104095,104102,104105,104144,104151,104153,104205,104207,104213,104216,104223,104230,104233,104235,104253,104256,104259,104293,104305,104307,104310,104332,104335],[10,102709,102705],{"id":102710},"_2xml-与-mjcf-物理建模基础",[149,102712,100698],{"id":100697},[14,102714,102715],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102717,102718],{},"本章结束后，你应该能看懂一个简单模型里：",[161,102720,102721,102724,102727,102730,102733],{},[119,102722,102723],{},"地面在哪里。",[119,102725,102726],{},"物体初始位置在哪里。",[119,102728,102729],{},"几何体是什么形状。",[119,102731,102732],{},"哪些 body 可以自由运动。",[119,102734,102735],{},"如何用名字在 Python 里找到 XML 中的对象。",[347,102737,102738,102748],{},[350,102739,102740],{},[353,102741,102742,102745],{},[356,102743,102744],{"align":23813},"标签",[356,102746,102747],{"align":23813},"作用",[394,102749,102750,102759,102769,102778,102788,102798,102811,102821],{},[353,102751,102752,102756],{},[399,102753,102754],{"align":23813},[25,102755,102588],{},[399,102757,102758],{"align":23813},"根节点",[353,102760,102761,102766],{},[399,102762,102763],{"align":23813},[25,102764,102765],{},"\u003Coption>",[399,102767,102768],{"align":23813},"仿真参数",[353,102770,102771,102775],{},[399,102772,102773],{"align":23813},[25,102774,102596],{},[399,102776,102777],{"align":23813},"世界中的物体",[353,102779,102780,102785],{},[399,102781,102782],{"align":23813},[25,102783,102784],{},"\u003Cbody>",[399,102786,102787],{"align":23813},"刚体",[353,102789,102790,102795],{},[399,102791,102792],{"align":23813},[25,102793,102794],{},"\u003Cgeom>",[399,102796,102797],{"align":23813},"几何体、碰撞体、可视体",[353,102799,102800,102808],{},[399,102801,102802,25049,102805],{"align":23813},[25,102803,102804],{},"\u003Cjoint>",[25,102806,102807],{},"\u003Cfreejoint>",[399,102809,102810],{"align":23813},"关节",[353,102812,102813,102818],{},[399,102814,102815],{"align":23813},[25,102816,102817],{},"\u003Csite>",[399,102819,102820],{"align":23813},"标记点",[353,102822,102823,102828],{},[399,102824,102825],{"align":23813},[25,102826,102827],{},"\u003Cactuator>",[399,102829,102830],{"align":23813},"控制器",[14,102832,102833],{},"初学时可以先记住：",[18,102835,102838],{"className":102836,"code":102837,"language":5264,"meta":23},[5262],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[25,102839,102837],{"__ignoreMap":23},[149,102841,100821],{"id":100820},[14,102843,100824],{},[18,102845,102847],{"className":20,"code":102846,"language":22,"meta":23,"style":23},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[25,102848,102849],{"__ignoreMap":23},[28,102850,102851,102853,102855,102857,102859,102861,102863,102865],{"class":30,"line":31},[28,102852,24652],{"class":34},[28,102854,26366],{"class":64},[28,102856,23909],{"class":64},[28,102858,26451],{"class":38},[28,102860,102552],{"class":64},[28,102862,100865],{"class":64},[28,102864,102557],{"class":64},[28,102866,102867],{"class":64}," glfw-devel\n",[14,102869,102870],{},"pip:",[18,102872,102873],{"className":20,"code":100970,"language":22,"meta":23,"style":23},[25,102874,102875],{"__ignoreMap":23},[28,102876,102877,102879,102881,102883],{"class":30,"line":31},[28,102878,23906],{"class":34},[28,102880,23909],{"class":64},[28,102882,100981],{"class":64},[28,102884,100984],{"class":64},[14,102886,102887],{},"conda:",[18,102889,102891],{"className":20,"code":102890,"language":22,"meta":23,"style":23},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[25,102892,102893,102910,102919],{"__ignoreMap":23},[28,102894,102895,102897,102899,102901,102904,102906,102908],{"class":30,"line":31},[28,102896,30381],{"class":34},[28,102898,29227],{"class":64},[28,102900,25186],{"class":38},[28,102902,102903],{"class":64}," mujoco-xml",[28,102905,101026],{"class":64},[28,102907,101029],{"class":38},[28,102909,101032],{"class":38},[28,102911,102912,102914,102916],{"class":30,"line":42},[28,102913,30381],{"class":34},[28,102915,101039],{"class":64},[28,102917,102918],{"class":64}," mujoco-xml\n",[28,102920,102921,102923,102925,102927],{"class":30,"line":50},[28,102922,23906],{"class":34},[28,102924,23909],{"class":64},[28,102926,100981],{"class":64},[28,102928,100984],{"class":64},[14,102930,101055],{},[161,102932,102933,102936,102941],{},[119,102934,102935],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[119,102937,102938,102939,28436],{},"本章使用基础标签，适用于 ",[25,102940,101078],{},[119,102942,102943],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[149,102945,101096],{"id":101095},[14,102947,102948],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[18,102950,102952],{"className":53118,"code":102951,"language":53120,"meta":23,"style":23},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[25,102953,102954,102968,102976,102981,102989],{"__ignoreMap":23},[28,102955,102956,102958,102960,102962,102964,102966],{"class":30,"line":31},[28,102957,1120],{"class":211},[28,102959,101072],{"class":51351},[28,102961,101826],{"class":34},[28,102963,257],{"class":211},[28,102965,62730],{"class":64},[28,102967,51358],{"class":211},[28,102969,102970,102972,102974],{"class":30,"line":42},[28,102971,52195],{"class":211},[28,102973,101892],{"class":51351},[28,102975,51358],{"class":211},[28,102977,102978],{"class":30,"line":50},[28,102979,102980],{"class":211},"    ...\n",[28,102982,102983,102985,102987],{"class":30,"line":58},[28,102984,52468],{"class":211},[28,102986,101892],{"class":51351},[28,102988,51358],{"class":211},[28,102990,102991,102993,102995],{"class":30,"line":70},[28,102992,51836],{"class":211},[28,102994,101072],{"class":51351},[28,102996,51358],{"class":211},[14,102998,102999,103001,103002,103004,103005,103008],{},[25,103000,51851],{}," 表示刚体。",[25,103003,101171],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[25,103006,103007],{},"joint"," 表示刚体相对父刚体如何运动。",[177,103010,103011],{"id":103011},"层级结构非常重要",[14,103013,103014],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[18,103016,103019],{"className":103017,"code":103018,"language":5264,"meta":23},[5262],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[25,103020,103018],{"__ignoreMap":23},[14,103022,103023,101069,103026,103029,103030,103033],{},[25,103024,103025],{},"red_box_geom",[25,103027,103028],{},"box_center"," 都属于 ",[25,103031,103032],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[18,103035,103037],{"className":53118,"code":103036,"language":53120,"meta":23,"style":23},"\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",[25,103038,103039,103059,103073,103093],{"__ignoreMap":23},[28,103040,103041,103043,103045,103047,103049,103051,103053,103055,103057],{"class":30,"line":31},[28,103042,1120],{"class":211},[28,103044,51851],{"class":51351},[28,103046,14997],{"class":34},[28,103048,257],{"class":211},[28,103050,53542],{"class":64},[28,103052,101157],{"class":34},[28,103054,257],{"class":211},[28,103056,101162],{"class":64},[28,103058,51358],{"class":211},[28,103060,103061,103063,103065,103067,103069,103071],{"class":30,"line":42},[28,103062,52195],{"class":211},[28,103064,101671],{"class":51351},[28,103066,14997],{"class":34},[28,103068,257],{"class":211},[28,103070,102012],{"class":64},[28,103072,101195],{"class":211},[28,103074,103075,103077,103079,103081,103083,103085,103087,103089,103091],{"class":30,"line":50},[28,103076,52195],{"class":211},[28,103078,101171],{"class":51351},[28,103080,53875],{"class":34},[28,103082,257],{"class":211},[28,103084,53542],{"class":64},[28,103086,101187],{"class":34},[28,103088,257],{"class":211},[28,103090,101192],{"class":64},[28,103092,101195],{"class":211},[28,103094,103095,103097,103099],{"class":30,"line":58},[28,103096,51836],{"class":211},[28,103098,51851],{"class":51351},[28,103100,51358],{"class":211},[14,103102,103103],{},"含义:",[161,103105,103106,103112,103117,103120],{},[119,103107,103108,103109,103111],{},"创建名为 ",[25,103110,53765],{}," 的刚体",[119,103113,103114,103115],{},"初始位置在世界坐标 ",[25,103116,101220],{},[119,103118,103119],{},"它有一个自由关节",[119,103121,103122],{},"它有一个盒子几何体",[177,103124,103125],{"id":103125},"坐标怎么理解",[14,103127,103128],{},"MuJoCo 默认使用三维坐标：",[18,103130,103133],{"className":103131,"code":103132,"language":5264,"meta":23},[5262],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[25,103134,103132],{"__ignoreMap":23},[14,103136,14710],{},[18,103138,103140],{"className":53118,"code":103139,"language":53120,"meta":23,"style":23},"pos=\"0 0 1\"\n",[25,103141,103142],{"__ignoreMap":23},[28,103143,103144],{"class":30,"line":31},[28,103145,103139],{"class":211},[14,103147,103148],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[177,103150,103152],{"id":103151},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103154,103155,103156,82581,103159,103161],{},"不同 ",[25,103157,103158],{},"type",[25,103160,31547],{}," 含义不同：",[347,103163,103164,103179],{},[350,103165,103166],{},[353,103167,103168,103172,103177],{},[356,103169,103170],{"align":23813},[25,103171,103158],{},[356,103173,103174,103176],{"align":23813},[25,103175,31547],{}," 示例",[356,103178,100751],{"align":23813},[394,103180,103181,103195,103210,103229],{},[353,103182,103183,103187,103192],{},[399,103184,103185],{"align":23813},[25,103186,53765],{},[399,103188,103189],{"align":23813},[25,103190,103191],{},"size=\"0.1 0.2 0.3\"",[399,103193,103194],{"align":23813},"x\u002Fy\u002Fz 半边长，不是完整长度",[353,103196,103197,103202,103207],{},[399,103198,103199],{"align":23813},[25,103200,103201],{},"sphere",[399,103203,103204],{"align":23813},[25,103205,103206],{},"size=\"0.1\"",[399,103208,103209],{"align":23813},"球半径",[353,103211,103212,103217,103222],{},[399,103213,103214],{"align":23813},[25,103215,103216],{},"capsule",[399,103218,103219],{"align":23813},[25,103220,103221],{},"size=\"0.03\"",[399,103223,103224,103225,103228],{"align":23813},"胶囊半径，长度常用 ",[25,103226,103227],{},"fromto"," 指定",[353,103230,103231,103236,103241],{},[399,103232,103233],{"align":23813},[25,103234,103235],{},"plane",[399,103237,103238],{"align":23813},[25,103239,103240],{},"size=\"3 3 0.1\"",[399,103242,103243],{"align":23813},"可视平面大小，通常当地面",[14,103245,103246,103247,103249,103250,103252],{},"最容易踩坑的是 box：",[25,103248,102075],{}," 表示边长大约是 ",[25,103251,32088],{},"，因为 MuJoCo 用的是半边长。",[177,103254,103256],{"id":103255},"site-是什么","site 是什么",[14,103258,103259,103262],{},[25,103260,103261],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[161,103264,103265,103268,103271,103274],{},[119,103266,103267],{},"标记机械臂末端。",[119,103269,103270],{},"标记目标位置。",[119,103272,103273],{},"放传感器或相机参考点。",[119,103275,103276],{},"在 Python 中读取某个关键点的世界坐标。",[14,103278,103279,103280,101069,103283,103286],{},"在后面的 Reacher 任务中，",[25,103281,103282],{},"tip",[25,103284,103285],{},"target"," 就会用 site 表示。",[149,103288,101304],{"id":101303},[18,103290,103292],{"className":30429,"code":103291,"language":30431,"meta":23,"style":23},"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",[25,103293,103294,103300,103310,103314,103318,103326,103331,103335,103339,103343,103348,103352,103357,103362,103367,103372,103376,103380,103384,103388,103392,103396,103408,103420,103428,103432,103447,103462,103466,103479,103494,103507,103520,103524,103540,103544,103548,103559,103571,103583,103595,103599,103603,103615],{"__ignoreMap":23},[28,103295,103296,103298],{"class":30,"line":31},[28,103297,30443],{"class":207},[28,103299,101352],{"class":211},[28,103301,103302,103304,103306,103308],{"class":30,"line":42},[28,103303,30443],{"class":207},[28,103305,31431],{"class":211},[28,103307,31434],{"class":207},[28,103309,31437],{"class":211},[28,103311,103312],{"class":30,"line":50},[28,103313,2477],{"emptyLinePlaceholder":134},[28,103315,103316],{"class":30,"line":58},[28,103317,2477],{"emptyLinePlaceholder":134},[28,103319,103320,103322,103324],{"class":30,"line":70},[28,103321,101365],{"class":38},[28,103323,13641],{"class":207},[28,103325,101370],{"class":64},[28,103327,103328],{"class":30,"line":78},[28,103329,103330],{"class":64},"\u003Cmujoco model=\"xml_basic\">\n",[28,103332,103333],{"class":30,"line":86},[28,103334,101380],{"class":64},[28,103336,103337],{"class":30,"line":97},[28,103338,2477],{"emptyLinePlaceholder":134},[28,103340,103341],{"class":30,"line":108},[28,103342,101389],{"class":64},[28,103344,103345],{"class":30,"line":1407},[28,103346,103347],{"class":64},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[28,103349,103350],{"class":30,"line":1690},[28,103351,2477],{"emptyLinePlaceholder":134},[28,103353,103354],{"class":30,"line":1695},[28,103355,103356],{"class":64},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[28,103358,103359],{"class":30,"line":1701},[28,103360,103361],{"class":64},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[28,103363,103364],{"class":30,"line":1706},[28,103365,103366],{"class":64},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,103368,103369],{"class":30,"line":1720},[28,103370,103371],{"class":64},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[28,103373,103374],{"class":30,"line":1725},[28,103375,101418],{"class":64},[28,103377,103378],{"class":30,"line":1731},[28,103379,101423],{"class":64},[28,103381,103382],{"class":30,"line":1752},[28,103383,101428],{"class":64},[28,103385,103386],{"class":30,"line":1757},[28,103387,95749],{"class":64},[28,103389,103390],{"class":30,"line":1771},[28,103391,2477],{"emptyLinePlaceholder":134},[28,103393,103394],{"class":30,"line":1776},[28,103395,2477],{"emptyLinePlaceholder":134},[28,103397,103398,103400,103402,103404,103406],{"class":30,"line":1805},[28,103399,31998],{"class":207},[28,103401,2050],{"class":34},[28,103403,101449],{"class":211},[28,103405,95737],{"class":38},[28,103407,3816],{"class":211},[28,103409,103410,103412,103414,103416,103418],{"class":30,"line":1810},[28,103411,101458],{"class":211},[28,103413,257],{"class":207},[28,103415,101463],{"class":211},[28,103417,101365],{"class":38},[28,103419,218],{"class":211},[28,103421,103422,103424,103426],{"class":30,"line":1827},[28,103423,101472],{"class":211},[28,103425,257],{"class":207},[28,103427,101477],{"class":211},[28,103429,103430],{"class":30,"line":1832},[28,103431,2477],{"emptyLinePlaceholder":134},[28,103433,103434,103437,103439,103442,103445],{"class":30,"line":1837},[28,103435,103436],{"class":211},"    box_body_id ",[28,103438,257],{"class":207},[28,103440,103441],{"class":211}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[28,103443,103444],{"class":64},"\"red_box\"",[28,103446,218],{"class":211},[28,103448,103449,103452,103454,103457,103460],{"class":30,"line":1842},[28,103450,103451],{"class":211},"    site_id ",[28,103453,257],{"class":207},[28,103455,103456],{"class":211}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[28,103458,103459],{"class":64},"\"box_center\"",[28,103461,218],{"class":211},[28,103463,103464],{"class":30,"line":1856},[28,103465,2477],{"emptyLinePlaceholder":134},[28,103467,103468,103470,103473,103475,103477],{"class":30,"line":1861},[28,103469,3178],{"class":207},[28,103471,103472],{"class":211}," box_body_id ",[28,103474,1120],{"class":207},[28,103476,4170],{"class":38},[28,103478,3816],{"class":211},[28,103480,103481,103484,103487,103489,103492],{"class":30,"line":2654},[28,103482,103483],{"class":207},"        raise",[28,103485,103486],{"class":38}," RuntimeError",[28,103488,212],{"class":211},[28,103490,103491],{"class":64},"\"body red_box not found\"",[28,103493,218],{"class":211},[28,103495,103496,103498,103501,103503,103505],{"class":30,"line":2668},[28,103497,3178],{"class":207},[28,103499,103500],{"class":211}," site_id ",[28,103502,1120],{"class":207},[28,103504,4170],{"class":38},[28,103506,3816],{"class":211},[28,103508,103509,103511,103513,103515,103518],{"class":30,"line":2676},[28,103510,103483],{"class":207},[28,103512,103486],{"class":38},[28,103514,212],{"class":211},[28,103516,103517],{"class":64},"\"site box_center not found\"",[28,103519,218],{"class":211},[28,103521,103522],{"class":30,"line":2681},[28,103523,2477],{"emptyLinePlaceholder":134},[28,103525,103526,103528,103530,103532,103534,103536,103538],{"class":30,"line":2687},[28,103527,3278],{"class":207},[28,103529,101552],{"class":211},[28,103531,26094],{"class":207},[28,103533,32494],{"class":38},[28,103535,212],{"class":211},[28,103537,1800],{"class":38},[28,103539,30837],{"class":211},[28,103541,103542],{"class":30,"line":2693},[28,103543,101567],{"class":211},[28,103545,103546],{"class":30,"line":2698},[28,103547,2477],{"emptyLinePlaceholder":134},[28,103549,103550,103552,103554,103557],{"class":30,"line":8025},[28,103551,31350],{"class":38},[28,103553,212],{"class":211},[28,103555,103556],{"class":64},"\"simulation time:\"",[28,103558,101529],{"class":211},[28,103560,103561,103563,103565,103568],{"class":30,"line":8049},[28,103562,31350],{"class":38},[28,103564,212],{"class":211},[28,103566,103567],{"class":64},"\"box body position:\"",[28,103569,103570],{"class":211},", data.xpos[box_body_id].copy())\n",[28,103572,103573,103575,103577,103580],{"class":30,"line":8054},[28,103574,31350],{"class":38},[28,103576,212],{"class":211},[28,103578,103579],{"class":64},"\"site position:\"",[28,103581,103582],{"class":211},", data.site_xpos[site_id].copy())\n",[28,103584,103585,103587,103589,103592],{"class":30,"line":8060},[28,103586,31350],{"class":38},[28,103588,212],{"class":211},[28,103590,103591],{"class":64},"\"box qpos:\"",[28,103593,103594],{"class":211},", np.array(data.qpos))\n",[28,103596,103597],{"class":30,"line":8087},[28,103598,2477],{"emptyLinePlaceholder":134},[28,103600,103601],{"class":30,"line":8092},[28,103602,2477],{"emptyLinePlaceholder":134},[28,103604,103605,103607,103609,103611,103613],{"class":30,"line":8098},[28,103606,1609],{"class":207},[28,103608,31271],{"class":38},[28,103610,101610],{"class":207},[28,103612,101613],{"class":64},[28,103614,3816],{"class":211},[28,103616,103617],{"class":30,"line":8110},[28,103618,101620],{"class":211},[14,103620,103621],{},"保存为：",[18,103623,103625],{"className":20,"code":103624,"language":22,"meta":23,"style":23},"touch ch2_xml_basic.py\n",[25,103626,103627],{"__ignoreMap":23},[28,103628,103629,103631],{"class":30,"line":31},[28,103630,101334],{"class":34},[28,103632,103633],{"class":64}," ch2_xml_basic.py\n",[14,103635,102352],{},[18,103637,103639],{"className":20,"code":103638,"language":22,"meta":23,"style":23},"python ch2_xml_basic.py\n",[25,103640,103641],{"__ignoreMap":23},[28,103642,103643,103645],{"class":30,"line":31},[28,103644,30431],{"class":34},[28,103646,103633],{"class":64},[177,103648,101623],{"id":101623},[14,103650,103651],{},"用名字查找 body：",[18,103653,103655],{"className":30429,"code":103654,"language":30431,"meta":23,"style":23},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[25,103656,103657],{"__ignoreMap":23},[28,103658,103659,103662,103664,103666,103668],{"class":30,"line":31},[28,103660,103661],{"class":211},"box_body_id ",[28,103663,257],{"class":207},[28,103665,103441],{"class":211},[28,103667,103444],{"class":64},[28,103669,218],{"class":211},[14,103671,103672],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103674,103675],{},"用名字查找 site：",[18,103677,103679],{"className":30429,"code":103678,"language":30431,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[25,103680,103681],{"__ignoreMap":23},[28,103682,103683,103686,103688,103690,103692],{"class":30,"line":31},[28,103684,103685],{"class":211},"site_id ",[28,103687,257],{"class":207},[28,103689,103456],{"class":211},[28,103691,103459],{"class":64},[28,103693,218],{"class":211},[14,103695,103696,103697,103700,103701,103704],{},"注意第二个参数是对象类型。查 body 就用 ",[25,103698,103699],{},"mjOBJ_BODY","，查 site 就用 ",[25,103702,103703],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103706,103707],{},"读取世界坐标：",[18,103709,103711],{"className":30429,"code":103710,"language":30431,"meta":23,"style":23},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[25,103712,103713,103718],{"__ignoreMap":23},[28,103714,103715],{"class":30,"line":31},[28,103716,103717],{"class":211},"data.xpos[box_body_id]\n",[28,103719,103720],{"class":30,"line":42},[28,103721,103722],{"class":211},"data.site_xpos[site_id]\n",[14,103724,103725,103728,103729,103732],{},[25,103726,103727],{},"xpos"," 是 body 的世界坐标，",[25,103730,103731],{},"site_xpos"," 是 site 的世界坐标。",[177,103734,101759],{"id":101759},[18,103736,103738],{"className":30429,"code":103737,"language":30431,"meta":23,"style":23},"import mujoco\nimport numpy as np\n",[25,103739,103740,103746],{"__ignoreMap":23},[28,103741,103742,103744],{"class":30,"line":31},[28,103743,30443],{"class":207},[28,103745,101352],{"class":211},[28,103747,103748,103750,103752,103754],{"class":30,"line":42},[28,103749,30443],{"class":207},[28,103751,31431],{"class":211},[28,103753,31434],{"class":207},[28,103755,31437],{"class":211},[14,103757,103758,103759,103762,103763,103766,103767,422,103770,28436],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[25,103760,103761],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[25,103764,103765],{},"as np"," 是习惯写法，后面就可以写 ",[25,103768,103769],{},"np.array(...)",[25,103771,103772],{},"np.round(...)",[18,103774,103775],{"className":30429,"code":101646,"language":30431,"meta":23,"style":23},[25,103776,103777,103785,103789],{"__ignoreMap":23},[28,103778,103779,103781,103783],{"class":30,"line":31},[28,103780,101365],{"class":38},[28,103782,13641],{"class":207},[28,103784,101370],{"class":64},[28,103786,103787],{"class":30,"line":42},[28,103788,101661],{"class":64},[28,103790,103791],{"class":30,"line":50},[28,103792,95749],{"class":64},[14,103794,103795,103796,28436],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[25,103797,103798],{},"mujoco.MjModel.from_xml_string(XML)",[18,103800,103802],{"className":53118,"code":103801,"language":53120,"meta":23,"style":23},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,103803,103804],{"__ignoreMap":23},[28,103805,103806,103808,103810,103812,103814,103816,103818,103820,103823,103825,103827,103830,103832,103834,103837],{"class":30,"line":31},[28,103807,1120],{"class":211},[28,103809,103261],{"class":51351},[28,103811,14997],{"class":34},[28,103813,257],{"class":211},[28,103815,103459],{"class":64},[28,103817,101157],{"class":34},[28,103819,257],{"class":211},[28,103821,103822],{"class":64},"\"0 0 0\"",[28,103824,101187],{"class":34},[28,103826,257],{"class":211},[28,103828,103829],{"class":64},"\"0.03\"",[28,103831,78818],{"class":34},[28,103833,257],{"class":211},[28,103835,103836],{"class":64},"\"0 1 0 1\"",[28,103838,101195],{"class":211},[14,103840,103841,103843,103844,103847,103848,103850,103851,103854],{},[25,103842,103261],{}," 是标记点。",[25,103845,103846],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[25,103849,103221],{}," 表示显示出来的小球大小。",[25,103852,103853],{},"rgba=\"0 1 0 1\""," 表示绿色。",[18,103856,103857],{"className":30429,"code":103654,"language":30431,"meta":23,"style":23},[25,103858,103859],{"__ignoreMap":23},[28,103860,103861,103863,103865,103867,103869],{"class":30,"line":31},[28,103862,103661],{"class":211},[28,103864,257],{"class":207},[28,103866,103441],{"class":211},[28,103868,103444],{"class":64},[28,103870,218],{"class":211},[14,103872,103873,103874,103876],{},"这行的作用是：根据名字 ",[25,103875,103444],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103878,103879],{},"拆开看：",[161,103881,103882,103888,103893,103899],{},[119,103883,103884,103887],{},[25,103885,103886],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[119,103889,103890,103892],{},[25,103891,102136],{}," 是被查询的模型。",[119,103894,103895,103898],{},[25,103896,103897],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[119,103900,103901,103903],{},[25,103902,103444],{}," 是 XML 里写的名字。",[18,103905,103906],{"className":30429,"code":103678,"language":30431,"meta":23,"style":23},[25,103907,103908],{"__ignoreMap":23},[28,103909,103910,103912,103914,103916,103918],{"class":30,"line":31},[28,103911,103685],{"class":211},[28,103913,257],{"class":207},[28,103915,103456],{"class":211},[28,103917,103459],{"class":64},[28,103919,218],{"class":211},[14,103921,103922,103923,28436],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[25,103924,103459],{},[18,103926,103928],{"className":30429,"code":103927,"language":30431,"meta":23,"style":23},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[25,103929,103930,103942],{"__ignoreMap":23},[28,103931,103932,103934,103936,103938,103940],{"class":30,"line":31},[28,103933,1609],{"class":207},[28,103935,103472],{"class":211},[28,103937,1120],{"class":207},[28,103939,4170],{"class":38},[28,103941,3816],{"class":211},[28,103943,103944,103947,103949,103951,103953],{"class":30,"line":42},[28,103945,103946],{"class":207},"    raise",[28,103948,103486],{"class":38},[28,103950,212],{"class":211},[28,103952,103491],{"class":64},[28,103954,218],{"class":211},[14,103956,103957,103959,103960,103963,103964,103967,103968,103971],{},[25,103958,1609],{}," 是条件判断。",[25,103961,103962],{},"mj_name2id"," 找不到对象时会返回 ",[25,103965,103966],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[25,103969,103970],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[18,103973,103975],{"className":30429,"code":103974,"language":30431,"meta":23,"style":23},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[25,103976,103977,103993],{"__ignoreMap":23},[28,103978,103979,103981,103983,103985,103987,103989,103991],{"class":30,"line":31},[28,103980,3102],{"class":207},[28,103982,101552],{"class":211},[28,103984,26094],{"class":207},[28,103986,32494],{"class":38},[28,103988,212],{"class":211},[28,103990,1800],{"class":38},[28,103992,30837],{"class":211},[28,103994,103995],{"class":30,"line":42},[28,103996,101750],{"class":211},[14,103998,103999],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[18,104001,104003],{"className":30429,"code":104002,"language":30431,"meta":23,"style":23},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[25,104004,104005],{"__ignoreMap":23},[28,104006,104007,104009,104011,104013],{"class":30,"line":31},[28,104008,30466],{"class":38},[28,104010,212],{"class":211},[28,104012,103567],{"class":64},[28,104014,103570],{"class":211},[14,104016,104017,104019,104020,104023],{},[25,104018,101130],{}," 保存所有 body 的世界坐标。",[25,104021,104022],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[18,104025,104027],{"className":30429,"code":104026,"language":30431,"meta":23,"style":23},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[25,104028,104029],{"__ignoreMap":23},[28,104030,104031,104033,104035,104037],{"class":30,"line":31},[28,104032,30466],{"class":38},[28,104034,212],{"class":211},[28,104036,103579],{"class":64},[28,104038,103582],{"class":211},[14,104040,104041,104044,104045,104047],{},[25,104042,104043],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[25,104046,103028],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[18,104049,104051],{"className":30429,"code":104050,"language":30431,"meta":23,"style":23},"print(\"box qpos:\", np.array(data.qpos))\n",[25,104052,104053],{"__ignoreMap":23},[28,104054,104055,104057,104059,104061],{"class":30,"line":31},[28,104056,30466],{"class":38},[28,104058,212],{"class":211},[28,104060,103591],{"class":64},[28,104062,103594],{"class":211},[14,104064,104065,104066,104069],{},"这里打印广义位置数组。",[25,104067,104068],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[149,104071,102367],{"id":102366},[14,104073,104074,104075,104078,104079,28436],{},"程序会输出 ",[25,104076,104077],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[25,104080,104081],{},"qpos",[14,104083,104084,104086,104087,104090,104091,104094],{},[25,104085,104022],{}," 是 body 的世界坐标位置。",[25,104088,104089],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[25,104092,104093],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104096,82273,104097,82581,104099,104101],{},[25,104098,103028],{},[25,104100,103846],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104103,104104],{},"如果你把 site 改成：",[18,104106,104108],{"className":53118,"code":104107,"language":53120,"meta":23,"style":23},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[25,104109,104110],{"__ignoreMap":23},[28,104111,104112,104114,104116,104118,104120,104123,104125,104127,104130,104132,104134,104136,104138,104140,104142],{"class":30,"line":31},[28,104113,1120],{"class":211},[28,104115,103261],{"class":51351},[28,104117,14997],{"class":34},[28,104119,257],{"class":211},[28,104121,104122],{"class":64},"\"box_top\"",[28,104124,101157],{"class":34},[28,104126,257],{"class":211},[28,104128,104129],{"class":64},"\"0 0 0.15\"",[28,104131,101187],{"class":34},[28,104133,257],{"class":211},[28,104135,103829],{"class":64},[28,104137,78818],{"class":34},[28,104139,257],{"class":211},[28,104141,103836],{"class":64},[28,104143,101195],{"class":211},[14,104145,104146,104147,104150],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[25,104148,104149],{},"site position"," 就会比 body position 的 z 坐标更高。",[149,104152,102399],{"id":102398},[161,104154,104155,104164,104167,104174,104180,104191],{},[119,104156,102462,104157,104159,104160,102465,104162,28436],{},[25,104158,103032],{}," 的初始高度从 ",[25,104161,427],{},[25,104163,288],{},[119,104165,104166],{},"重新运行程序。",[119,104168,104169,104170,104173],{},"观察 ",[25,104171,104172],{},"box qpos"," 和最终位置是否变化。",[119,104175,104176,104177,104179],{},"故意把 ",[25,104178,103261],{}," 名称改错，确认程序能报错。",[119,104181,102462,104182,104184,104185,102465,104187,104190],{},[25,104183,101171],{}," 的颜色 ",[25,104186,102083],{},[25,104188,104189],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[119,104192,102462,104193,82581,104195,102465,104198,104201,104202,104204],{},[25,104194,103028],{},[25,104196,104197],{},"pos",[25,104199,104200],{},"0 0 0.2","，观察 ",[25,104203,104149],{}," 如何变化。",[149,104206,102504],{"id":102503},[177,104208,104210],{"id":104209},"xml-error-schema-violation",[25,104211,104212],{},"XML Error: Schema violation",[14,104214,104215],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[177,104217,104219,81341,104221],{"id":104218},"mj_name2id-返回-1",[25,104220,103962],{},[25,104222,103966],{},[14,104224,104225,104226,104229],{},"说明名字没有找到。检查 XML 中 ",[25,104227,104228],{},"name=\"...\"","，并确认对象类型正确。",[177,104231,104232],{"id":104232},"物体不下落",[14,104234,102574],{},[161,104236,104237,104242,104247],{},[119,104238,104239,104240],{},"body 是否有 ",[25,104241,101671],{},[119,104243,104244,104245],{},"gravity 是否为 ",[25,104246,102640],{},[119,104248,104249,104250,104252],{},"body 是否被固定在 ",[25,104251,101892],{}," 中",[177,104254,104255],{"id":104255},"坐标看起来不符合预期",[14,104257,104258],{},"先区分两种坐标：",[347,104260,104261,104270],{},[350,104262,104263],{},[353,104264,104265,104268],{},[356,104266,104267],{"align":23813},"坐标",[356,104269,100751],{"align":23813},[394,104271,104272,104282],{},[353,104273,104274,104279],{},[399,104275,104276,104277],{"align":23813},"XML 里的 ",[25,104278,104197],{},[399,104280,104281],{"align":23813},"相对父 body 的局部坐标",[353,104283,104284,104290],{},[399,104285,104286,25049,104288],{"align":23813},[25,104287,101130],{},[25,104289,104043],{},[399,104291,104292],{"align":23813},"仿真更新后的世界坐标",[14,104294,104295,104296,104298,104299,82590,104302,104304],{},"如果你修改了 ",[25,104297,101121],{},"，但还没调用 ",[25,104300,104301],{},"mj_forward",[25,104303,101266],{},"，世界坐标可能还没有更新。",[149,104306,102658],{"id":102657},[14,104308,104309],{},"MJCF 建模先掌握四件事：",[161,104311,104312,104317,104322,104327],{},[119,104313,104314,104316],{},[25,104315,51851],{}," 表示刚体层级。",[119,104318,104319,104321],{},[25,104320,101171],{}," 表示形状、碰撞和质量。",[119,104323,104324,104326],{},[25,104325,103007],{}," 决定 body 能不能动、怎么动。",[119,104328,104329,104331],{},[25,104330,103261],{}," 用来标记关键点，方便 Python 读取位置。",[14,104333,104334],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[126,104336,104337],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":23,"searchDepth":42,"depth":42,"links":104339},[104340,104341,104342,104348,104352,104353,104354,104361],{"id":100697,"depth":42,"text":100698},{"id":100820,"depth":42,"text":100821},{"id":101095,"depth":42,"text":101096,"children":104343},[104344,104345,104346,104347],{"id":103011,"depth":50,"text":103011},{"id":103125,"depth":50,"text":103125},{"id":103151,"depth":50,"text":103152},{"id":103255,"depth":50,"text":103256},{"id":101303,"depth":42,"text":101304,"children":104349},[104350,104351],{"id":101623,"depth":50,"text":101623},{"id":101759,"depth":50,"text":101759},{"id":102366,"depth":42,"text":102367},{"id":102398,"depth":42,"text":102399},{"id":102503,"depth":42,"text":102504,"children":104355},[104356,104357,104359,104360],{"id":104209,"depth":50,"text":104212},{"id":104218,"depth":50,"text":104358},"mj_name2id 返回 -1",{"id":104232,"depth":50,"text":104232},{"id":104255,"depth":50,"text":104255},{"id":102657,"depth":42,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102705,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104368,"title":104369,"body":104370,"description":23,"extension":132,"meta":105865,"navigation":134,"path":105866,"seo":105867,"stem":105868,"__hash__":105869},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104371,"toc":105837},[104372,104375,104377,104380,104383,104421,104424,104430,104433,104435,104437,104464,104466,104480,104482,104523,104525,104549,104551,104554,104563,104572,104575,104584,104592,104601,104604,104614,104617,104669,104676,104682,104690,104738,104741,104760,104763,104771,104775,104784,104817,104819,105167,105169,105181,105183,105194,105196,105199,105220,105226,105229,105254,105264,105267,105275,105278,105281,105302,105313,105315,105335,105338,105359,105368,105387,105393,105418,105421,105435,105442,105466,105469,105477,105486,105502,105514,105522,105531,105533,105536,105560,105565,105568,105590,105592,105631,105633,105640,105642,105650,105653,105656,105668,105709,105716,105727,105734,105737,105786,105789,105792,105798,105800,105805,105831,105834],[10,104373,104369],{"id":104374},"_3python-控制接口读取状态与推进仿真",[149,104376,100698],{"id":100697},[14,104378,104379],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104381,104382],{},"你将学习:",[161,104384,104385,104390,104395,104399,104404,104415],{},[119,104386,104387],{},[25,104388,104389],{},"MjModel.from_xml_string",[119,104391,104392],{},[25,104393,104394],{},"MjData(model)",[119,104396,104397],{},[25,104398,101266],{},[119,104400,104401],{},[25,104402,104403],{},"mj_resetData",[119,104405,104406,104407,422,104409,422,104412],{},"读取 ",[25,104408,104081],{},[25,104410,104411],{},"qvel",[25,104413,104414],{},"ctrl",[119,104416,104417,104418],{},"使用 ",[25,104419,104420],{},"model.opt.timestep",[14,104422,104423],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[18,104425,104428],{"className":104426,"code":104427,"language":5264,"meta":23},[5262],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[25,104429,104427],{"__ignoreMap":23},[14,104431,104432],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[149,104434,100821],{"id":100820},[14,104436,100824],{},[18,104438,104440],{"className":20,"code":104439,"language":22,"meta":23,"style":23},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[25,104441,104442],{"__ignoreMap":23},[28,104443,104444,104446,104448,104450,104452,104455,104457,104459,104461],{"class":30,"line":31},[28,104445,24652],{"class":34},[28,104447,26366],{"class":64},[28,104449,23909],{"class":64},[28,104451,26451],{"class":38},[28,104453,104454],{"class":64}," python3",[28,104456,100849],{"class":64},[28,104458,102552],{"class":64},[28,104460,100865],{"class":64},[28,104462,104463],{"class":64}," glfw\n",[14,104465,102870],{},[18,104467,104468],{"className":20,"code":100970,"language":22,"meta":23,"style":23},[25,104469,104470],{"__ignoreMap":23},[28,104471,104472,104474,104476,104478],{"class":30,"line":31},[28,104473,23906],{"class":34},[28,104475,23909],{"class":64},[28,104477,100981],{"class":64},[28,104479,100984],{"class":64},[14,104481,102887],{},[18,104483,104485],{"className":20,"code":104484,"language":22,"meta":23,"style":23},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[25,104486,104487,104504,104513],{"__ignoreMap":23},[28,104488,104489,104491,104493,104495,104498,104500,104502],{"class":30,"line":31},[28,104490,30381],{"class":34},[28,104492,29227],{"class":64},[28,104494,25186],{"class":38},[28,104496,104497],{"class":64}," mujoco-python-api",[28,104499,101026],{"class":64},[28,104501,101029],{"class":38},[28,104503,101032],{"class":38},[28,104505,104506,104508,104510],{"class":30,"line":42},[28,104507,30381],{"class":34},[28,104509,101039],{"class":64},[28,104511,104512],{"class":64}," mujoco-python-api\n",[28,104514,104515,104517,104519,104521],{"class":30,"line":50},[28,104516,23906],{"class":34},[28,104518,23909],{"class":64},[28,104520,100981],{"class":64},[28,104522,100984],{"class":64},[14,104524,101055],{},[161,104526,104527,104534,104543],{},[119,104528,104529,101069,104531,104533],{},[25,104530,100726],{},[25,104532,100731],{}," 是官方 Python bindings 的类名。",[119,104535,104536,104537,104540,104541,28436],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[25,104538,104539],{},"mjModel"," 在 Python 中是 ",[25,104542,100760],{},[119,104544,104545,104546,28436],{},"不要使用 ",[25,104547,104548],{},"sim = mujoco_py.MjSim(...)",[149,104550,101096],{"id":101095},[14,104552,104553],{},"仿真推进核心代码:",[18,104555,104557],{"className":30429,"code":104556,"language":30431,"meta":23,"style":23},"mujoco.mj_step(model, data)\n",[25,104558,104559],{"__ignoreMap":23},[28,104560,104561],{"class":30,"line":31},[28,104562,104556],{"class":211},[14,104564,104565,104566,422,104568,422,104570,28436],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[25,104567,101121],{},[25,104569,101124],{},[25,104571,101118],{},[14,104573,104574],{},"重置仿真:",[18,104576,104578],{"className":30429,"code":104577,"language":30431,"meta":23,"style":23},"mujoco.mj_resetData(model, data)\n",[25,104579,104580],{"__ignoreMap":23},[28,104581,104582],{"class":30,"line":31},[28,104583,104577],{"class":211},[14,104585,104586,104587,82590,104589,104591],{},"如果手动修改了 ",[25,104588,101121],{},[25,104590,101124],{},"，通常应调用:",[18,104593,104595],{"className":30429,"code":104594,"language":30431,"meta":23,"style":23},"mujoco.mj_forward(model, data)\n",[25,104596,104597],{"__ignoreMap":23},[28,104598,104599],{"class":30,"line":31},[28,104600,104594],{"class":211},[14,104602,104603],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[177,104605,104607,422,104609,422,104611,104613],{"id":104606},"qposqvelctrl-是什么",[25,104608,104081],{},[25,104610,104411],{},[25,104612,104414],{}," 是什么",[14,104615,104616],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[347,104618,104619,104631],{},[350,104620,104621],{},[353,104622,104623,104626,104628],{},[356,104624,104625],{"align":23813},"字段",[356,104627,100751],{"align":23813},[356,104629,104630],{"align":23813},"谁来修改",[394,104632,104633,104645,104657],{},[353,104634,104635,104639,104642],{},[399,104636,104637],{"align":23813},[25,104638,101121],{},[399,104640,104641],{"align":23813},"广义位置，例如小车位置、关节角、自由物体位置姿态",[399,104643,104644],{"align":23813},"MuJoCo 更新，也可以手动设置初始状态",[353,104646,104647,104651,104654],{},[399,104648,104649],{"align":23813},[25,104650,101124],{},[399,104652,104653],{"align":23813},"广义速度，例如小车速度、关节角速度",[399,104655,104656],{"align":23813},"MuJoCo 更新，也可以手动清零",[353,104658,104659,104663,104666],{},[399,104660,104661],{"align":23813},[25,104662,101127],{},[399,104664,104665],{"align":23813},"actuator 的控制输入",[399,104667,104668],{"align":23813},"主要由你的控制代码写入",[14,104670,9102,104671,101069,104673,104675],{},[25,104672,104081],{},[25,104674,104411],{}," 不一定同维。自由刚体就是典型例子：",[18,104677,104680],{"className":104678,"code":104679,"language":5264,"meta":23},[5262],"freejoint: qpos 7 维，qvel 6 维\n",[25,104681,104679],{"__ignoreMap":23},[177,104683,104685,101069,104687,104689],{"id":104684},"mj_step-和-mj_forward-的区别",[25,104686,101266],{},[25,104688,104301],{}," 的区别",[347,104691,104692,104705],{},[350,104693,104694],{},[353,104695,104696,104699,104702],{},[356,104697,104698],{"align":23813},"函数",[356,104700,104701],{"align":23813},"是否推进时间",[356,104703,104704],{"align":23813},"什么时候用",[394,104706,104707,104720],{},[353,104708,104709,104714,104717],{},[399,104710,104711],{"align":23813},[25,104712,104713],{},"mj_step(model, data)",[399,104715,104716],{"align":23813},"是",[399,104718,104719],{"align":23813},"正常仿真循环，每调用一次前进一步",[353,104721,104722,104727,104730],{},[399,104723,104724],{"align":23813},[25,104725,104726],{},"mj_forward(model, data)",[399,104728,104729],{"align":23813},"否",[399,104731,104732,104733,422,104735,104737],{"align":23813},"手动改了 ",[25,104734,104081],{},[25,104736,104411],{}," 后，刷新派生量",[14,104739,104740],{},"例如你写：",[18,104742,104744],{"className":30429,"code":104743,"language":30431,"meta":23,"style":23},"data.qpos[2] = 2.0\n",[25,104745,104746],{"__ignoreMap":23},[28,104747,104748,104751,104753,104755,104757],{"class":30,"line":31},[28,104749,104750],{"class":211},"data.qpos[",[28,104752,288],{"class":38},[28,104754,4520],{"class":211},[28,104756,257],{"class":207},[28,104758,104759],{"class":38}," 2.0\n",[14,104761,104762],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[18,104764,104765],{"className":30429,"code":104594,"language":30431,"meta":23,"style":23},[25,104766,104767],{"__ignoreMap":23},[28,104768,104769],{"class":30,"line":31},[28,104770,104594],{"class":211},[177,104772,104774],{"id":104773},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104776,104777,104780,104781,104783],{},[25,104778,104779],{},"mujoco.mj_resetData(model, data)"," 会把 ",[25,104782,33452],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[18,104785,104787],{"className":30429,"code":104786,"language":30431,"meta":23,"style":23},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[25,104788,104789,104793,104803,104813],{"__ignoreMap":23},[28,104790,104791],{"class":30,"line":31},[28,104792,104577],{"class":211},[28,104794,104795,104798,104800],{"class":30,"line":42},[28,104796,104797],{"class":211},"data.qpos[:] ",[28,104799,257],{"class":207},[28,104801,104802],{"class":211}," random_qpos\n",[28,104804,104805,104808,104810],{"class":30,"line":50},[28,104806,104807],{"class":211},"data.qvel[:] ",[28,104809,257],{"class":207},[28,104811,104812],{"class":38}," 0.0\n",[28,104814,104815],{"class":30,"line":58},[28,104816,104594],{"class":211},[149,104818,101304],{"id":101303},[18,104820,104822],{"className":30429,"code":104821,"language":30431,"meta":23,"style":23},"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",[25,104823,104824,104830,104840,104844,104848,104856,104861,104865,104869,104873,104878,104882,104887,104892,104897,104901,104905,104909,104913,104917,104921,104940,104947,104959,104970,104986,105002,105006,105010,105022,105034,105042,105046,105057,105061,105077,105081,105085,105094,105098,105103,105112,105116,105129,105134,105143,105147,105151,105163],{"__ignoreMap":23},[28,104825,104826,104828],{"class":30,"line":31},[28,104827,30443],{"class":207},[28,104829,101352],{"class":211},[28,104831,104832,104834,104836,104838],{"class":30,"line":42},[28,104833,30443],{"class":207},[28,104835,31431],{"class":211},[28,104837,31434],{"class":207},[28,104839,31437],{"class":211},[28,104841,104842],{"class":30,"line":50},[28,104843,2477],{"emptyLinePlaceholder":134},[28,104845,104846],{"class":30,"line":58},[28,104847,2477],{"emptyLinePlaceholder":134},[28,104849,104850,104852,104854],{"class":30,"line":70},[28,104851,101365],{"class":38},[28,104853,13641],{"class":207},[28,104855,101370],{"class":64},[28,104857,104858],{"class":30,"line":78},[28,104859,104860],{"class":64},"\u003Cmujoco model=\"state_api\">\n",[28,104862,104863],{"class":30,"line":86},[28,104864,101380],{"class":64},[28,104866,104867],{"class":30,"line":97},[28,104868,2477],{"emptyLinePlaceholder":134},[28,104870,104871],{"class":30,"line":108},[28,104872,101389],{"class":64},[28,104874,104875],{"class":30,"line":1407},[28,104876,104877],{"class":64},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[28,104879,104880],{"class":30,"line":1690},[28,104881,2477],{"emptyLinePlaceholder":134},[28,104883,104884],{"class":30,"line":1695},[28,104885,104886],{"class":64},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[28,104888,104889],{"class":30,"line":1701},[28,104890,104891],{"class":64},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[28,104893,104894],{"class":30,"line":1706},[28,104895,104896],{"class":64},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[28,104898,104899],{"class":30,"line":1720},[28,104900,101418],{"class":64},[28,104902,104903],{"class":30,"line":1725},[28,104904,101423],{"class":64},[28,104906,104907],{"class":30,"line":1731},[28,104908,101428],{"class":64},[28,104910,104911],{"class":30,"line":1752},[28,104912,95749],{"class":64},[28,104914,104915],{"class":30,"line":1757},[28,104916,2477],{"emptyLinePlaceholder":134},[28,104918,104919],{"class":30,"line":1771},[28,104920,2477],{"emptyLinePlaceholder":134},[28,104922,104923,104925,104928,104931,104933,104936,104938],{"class":30,"line":1776},[28,104924,31998],{"class":207},[28,104926,104927],{"class":34}," print_state",[28,104929,104930],{"class":211},"(prefix: ",[28,104932,1379],{"class":38},[28,104934,104935],{"class":211},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[28,104937,95737],{"class":38},[28,104939,3816],{"class":211},[28,104941,104942,104944],{"class":30,"line":1805},[28,104943,31350],{"class":38},[28,104945,104946],{"class":211},"(prefix)\n",[28,104948,104949,104951,104953,104956],{"class":30,"line":1810},[28,104950,31350],{"class":38},[28,104952,212],{"class":211},[28,104954,104955],{"class":64},"\"  timestep:\"",[28,104957,104958],{"class":211},", model.opt.timestep)\n",[28,104960,104961,104963,104965,104968],{"class":30,"line":1827},[28,104962,31350],{"class":38},[28,104964,212],{"class":211},[28,104966,104967],{"class":64},"\"  time:\"",[28,104969,101529],{"class":211},[28,104971,104972,104974,104976,104979,104982,104984],{"class":30,"line":1832},[28,104973,31350],{"class":38},[28,104975,212],{"class":211},[28,104977,104978],{"class":64},"\"  qpos:\"",[28,104980,104981],{"class":211},", np.round(data.qpos.copy(), ",[28,104983,503],{"class":38},[28,104985,30548],{"class":211},[28,104987,104988,104990,104992,104995,104998,105000],{"class":30,"line":1837},[28,104989,31350],{"class":38},[28,104991,212],{"class":211},[28,104993,104994],{"class":64},"\"  qvel:\"",[28,104996,104997],{"class":211},", np.round(data.qvel.copy(), ",[28,104999,503],{"class":38},[28,105001,30548],{"class":211},[28,105003,105004],{"class":30,"line":1842},[28,105005,2477],{"emptyLinePlaceholder":134},[28,105007,105008],{"class":30,"line":1856},[28,105009,2477],{"emptyLinePlaceholder":134},[28,105011,105012,105014,105016,105018,105020],{"class":30,"line":1861},[28,105013,31998],{"class":207},[28,105015,2050],{"class":34},[28,105017,101449],{"class":211},[28,105019,95737],{"class":38},[28,105021,3816],{"class":211},[28,105023,105024,105026,105028,105030,105032],{"class":30,"line":2654},[28,105025,101458],{"class":211},[28,105027,257],{"class":207},[28,105029,101463],{"class":211},[28,105031,101365],{"class":38},[28,105033,218],{"class":211},[28,105035,105036,105038,105040],{"class":30,"line":2668},[28,105037,101472],{"class":211},[28,105039,257],{"class":207},[28,105041,101477],{"class":211},[28,105043,105044],{"class":30,"line":2676},[28,105045,2477],{"emptyLinePlaceholder":134},[28,105047,105048,105051,105054],{"class":30,"line":2681},[28,105049,105050],{"class":211},"    print_state(",[28,105052,105053],{"class":64},"\"initial\"",[28,105055,105056],{"class":211},", model, data)\n",[28,105058,105059],{"class":30,"line":2687},[28,105060,2477],{"emptyLinePlaceholder":134},[28,105062,105063,105065,105067,105069,105071,105073,105075],{"class":30,"line":2693},[28,105064,3278],{"class":207},[28,105066,101552],{"class":211},[28,105068,26094],{"class":207},[28,105070,32494],{"class":38},[28,105072,212],{"class":211},[28,105074,866],{"class":38},[28,105076,30837],{"class":211},[28,105078,105079],{"class":30,"line":2698},[28,105080,101567],{"class":211},[28,105082,105083],{"class":30,"line":8025},[28,105084,2477],{"emptyLinePlaceholder":134},[28,105086,105087,105089,105092],{"class":30,"line":8049},[28,105088,105050],{"class":211},[28,105090,105091],{"class":64},"\"after 50 steps\"",[28,105093,105056],{"class":211},[28,105095,105096],{"class":30,"line":8054},[28,105097,2477],{"emptyLinePlaceholder":134},[28,105099,105100],{"class":30,"line":8060},[28,105101,105102],{"class":211},"    mujoco.mj_resetData(model, data)\n",[28,105104,105105,105107,105110],{"class":30,"line":8087},[28,105106,105050],{"class":211},[28,105108,105109],{"class":64},"\"after reset\"",[28,105111,105056],{"class":211},[28,105113,105114],{"class":30,"line":8092},[28,105115,2477],{"emptyLinePlaceholder":134},[28,105117,105118,105121,105123,105125,105127],{"class":30,"line":8098},[28,105119,105120],{"class":211},"    data.qpos[",[28,105122,288],{"class":38},[28,105124,4520],{"class":211},[28,105126,257],{"class":207},[28,105128,104759],{"class":38},[28,105130,105131],{"class":30,"line":8110},[28,105132,105133],{"class":211},"    mujoco.mj_forward(model, data)\n",[28,105135,105136,105138,105141],{"class":30,"line":8122},[28,105137,105050],{"class":211},[28,105139,105140],{"class":64},"\"after manual qpos edit\"",[28,105142,105056],{"class":211},[28,105144,105145],{"class":30,"line":8134},[28,105146,2477],{"emptyLinePlaceholder":134},[28,105148,105149],{"class":30,"line":9793},[28,105150,2477],{"emptyLinePlaceholder":134},[28,105152,105153,105155,105157,105159,105161],{"class":30,"line":9818},[28,105154,1609],{"class":207},[28,105156,31271],{"class":38},[28,105158,101610],{"class":207},[28,105160,101613],{"class":64},[28,105162,3816],{"class":211},[28,105164,105165],{"class":30,"line":9841},[28,105166,101620],{"class":211},[14,105168,103621],{},[18,105170,105172],{"className":20,"code":105171,"language":22,"meta":23,"style":23},"touch ch3_python_state.py\n",[25,105173,105174],{"__ignoreMap":23},[28,105175,105176,105178],{"class":30,"line":31},[28,105177,101334],{"class":34},[28,105179,105180],{"class":64}," ch3_python_state.py\n",[14,105182,102352],{},[18,105184,105186],{"className":20,"code":105185,"language":22,"meta":23,"style":23},"python ch3_python_state.py\n",[25,105187,105188],{"__ignoreMap":23},[28,105189,105190,105192],{"class":30,"line":31},[28,105191,30431],{"class":34},[28,105193,105180],{"class":64},[177,105195,101623],{"id":101623},[14,105197,105198],{},"打印状态的函数：",[18,105200,105202],{"className":30429,"code":105201,"language":30431,"meta":23,"style":23},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[25,105203,105204],{"__ignoreMap":23},[28,105205,105206,105208,105210,105212,105214,105216,105218],{"class":30,"line":31},[28,105207,31998],{"class":207},[28,105209,104927],{"class":34},[28,105211,104930],{"class":211},[28,105213,1379],{"class":38},[28,105215,104935],{"class":211},[28,105217,95737],{"class":38},[28,105219,3816],{"class":211},[14,105221,105222,105223,105225],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[25,105224,33452],{}," 里发生了什么。",[14,105227,105228],{},"推进 50 步：",[18,105230,105232],{"className":30429,"code":105231,"language":30431,"meta":23,"style":23},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[25,105233,105234,105250],{"__ignoreMap":23},[28,105235,105236,105238,105240,105242,105244,105246,105248],{"class":30,"line":31},[28,105237,3102],{"class":207},[28,105239,101552],{"class":211},[28,105241,26094],{"class":207},[28,105243,32494],{"class":38},[28,105245,212],{"class":211},[28,105247,866],{"class":38},[28,105249,30837],{"class":211},[28,105251,105252],{"class":30,"line":42},[28,105253,101750],{"class":211},[14,105255,105256,105257,105260,105261,105263],{},"由于 ",[25,105258,105259],{},"timestep=0.01","，所以 50 步后时间约为 ",[25,105262,35380],{}," 秒。",[14,105265,105266],{},"重置：",[18,105268,105269],{"className":30429,"code":104577,"language":30431,"meta":23,"style":23},[25,105270,105271],{"__ignoreMap":23},[28,105272,105273],{"class":30,"line":31},[28,105274,104577],{"class":211},[14,105276,105277],{},"这会把时间、位置、速度恢复到初始状态。",[14,105279,105280],{},"手动改高度：",[18,105282,105284],{"className":30429,"code":105283,"language":30431,"meta":23,"style":23},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[25,105285,105286,105298],{"__ignoreMap":23},[28,105287,105288,105290,105292,105294,105296],{"class":30,"line":31},[28,105289,104750],{"class":211},[28,105291,288],{"class":38},[28,105293,4520],{"class":211},[28,105295,257],{"class":207},[28,105297,104759],{"class":38},[28,105299,105300],{"class":30,"line":42},[28,105301,104594],{"class":211},[14,105303,105304,105305,105308,105309,105312],{},"这个例子里 ",[25,105306,105307],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[25,105310,105311],{},"2.0"," 表示把小球放到更高的位置。",[177,105314,101759],{"id":101759},[18,105316,105317],{"className":30429,"code":105201,"language":30431,"meta":23,"style":23},[25,105318,105319],{"__ignoreMap":23},[28,105320,105321,105323,105325,105327,105329,105331,105333],{"class":30,"line":31},[28,105322,31998],{"class":207},[28,105324,104927],{"class":34},[28,105326,104930],{"class":211},[28,105328,1379],{"class":38},[28,105330,104935],{"class":211},[28,105332,95737],{"class":38},[28,105334,3816],{"class":211},[14,105336,105337],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[161,105339,105340,105349,105354],{},[119,105341,105342,105345,105346,105348],{},[25,105343,105344],{},"prefix","：一段文字，比如 ",[25,105347,105053],{},"，用来说明现在打印的是哪个阶段。",[119,105350,105351,105353],{},[25,105352,102136],{},"：MuJoCo 模型。",[119,105355,105356,105358],{},[25,105357,33452],{},"：MuJoCo 当前状态。",[14,105360,105361,422,105364,105367],{},[25,105362,105363],{},"prefix: str",[25,105365,105366],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[18,105369,105371],{"className":30429,"code":105370,"language":30431,"meta":23,"style":23},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[25,105372,105373],{"__ignoreMap":23},[28,105374,105375,105377,105379,105381,105383,105385],{"class":30,"line":31},[28,105376,30466],{"class":38},[28,105378,212],{"class":211},[28,105380,104978],{"class":64},[28,105382,104981],{"class":211},[28,105384,503],{"class":38},[28,105386,30548],{"class":211},[14,105388,105389,105392],{},[25,105390,105391],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[18,105394,105396],{"className":30429,"code":105395,"language":30431,"meta":23,"style":23},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[25,105397,105398,105410],{"__ignoreMap":23},[28,105399,105400,105402,105404,105406,105408],{"class":30,"line":31},[28,105401,101685],{"class":211},[28,105403,257],{"class":207},[28,105405,101463],{"class":211},[28,105407,101365],{"class":38},[28,105409,218],{"class":211},[28,105411,105412,105414,105416],{"class":30,"line":42},[28,105413,101709],{"class":211},[28,105415,257],{"class":207},[28,105417,101477],{"class":211},[14,105419,105420],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[18,105422,105424],{"className":30429,"code":105423,"language":30431,"meta":23,"style":23},"print_state(\"initial\", model, data)\n",[25,105425,105426],{"__ignoreMap":23},[28,105427,105428,105431,105433],{"class":30,"line":31},[28,105429,105430],{"class":211},"print_state(",[28,105432,105053],{"class":64},[28,105434,105056],{"class":211},[14,105436,105437,105438,105441],{},"调用刚才定义的 ",[25,105439,105440],{},"print_state"," 函数，打印初始状态。",[18,105443,105444],{"className":30429,"code":105231,"language":30431,"meta":23,"style":23},[25,105445,105446,105462],{"__ignoreMap":23},[28,105447,105448,105450,105452,105454,105456,105458,105460],{"class":30,"line":31},[28,105449,3102],{"class":207},[28,105451,101552],{"class":211},[28,105453,26094],{"class":207},[28,105455,32494],{"class":38},[28,105457,212],{"class":211},[28,105459,866],{"class":38},[28,105461,30837],{"class":211},[28,105463,105464],{"class":30,"line":42},[28,105465,101750],{"class":211},[14,105467,105468],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[18,105470,105471],{"className":30429,"code":104577,"language":30431,"meta":23,"style":23},[25,105472,105473],{"__ignoreMap":23},[28,105474,105475],{"class":30,"line":31},[28,105476,104577],{"class":211},[14,105478,105479,105480,105482,105483,105485],{},"重置 ",[25,105481,33452],{},"。注意它不会重新创建 ",[25,105484,102136],{},"，因为模型结构没有变，只是状态回到初始值。",[18,105487,105488],{"className":30429,"code":104743,"language":30431,"meta":23,"style":23},[25,105489,105490],{"__ignoreMap":23},[28,105491,105492,105494,105496,105498,105500],{"class":30,"line":31},[28,105493,104750],{"class":211},[28,105495,288],{"class":38},[28,105497,4520],{"class":211},[28,105499,257],{"class":207},[28,105501,104759],{"class":38},[14,105503,105504,105505,422,105508,422,105511,105513],{},"这行是“手动改状态”。在 freejoint 中，",[25,105506,105507],{},"qpos[0]",[25,105509,105510],{},"qpos[1]",[25,105512,105307],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[18,105515,105516],{"className":30429,"code":104594,"language":30431,"meta":23,"style":23},[25,105517,105518],{"__ignoreMap":23},[28,105519,105520],{"class":30,"line":31},[28,105521,104594],{"class":211},[14,105523,105524,105525,105527,105528,105530],{},"手动改完 ",[25,105526,104081],{}," 后，调用 ",[25,105529,104301],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[149,105532,102367],{"id":102366},[14,105534,105535],{},"你会看到:",[161,105537,105538,105543,105548,105551],{},[119,105539,105540,105541],{},"初始时间为 ",[25,105542,401],{},[119,105544,105545,105546],{},"50 步后时间约为 ",[25,105547,35380],{},[119,105549,105550],{},"reset 后状态恢复",[119,105552,105553,105554,105557,105558],{},"手动修改 ",[25,105555,105556],{},"data.qpos[2]"," 后，小球高度变为 ",[25,105559,105311],{},[14,105561,105562,105564],{},[25,105563,105307],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105566,105567],{},"输出里可以重点看三件事：",[161,105569,105570,105578,105583],{},[119,105571,105572,105574,105575,105577],{},[25,105573,2464],{}," 是否随着 ",[25,105576,101266],{}," 增加。",[119,105579,105580,105582],{},[25,105581,104081],{}," 的 z 坐标是否因为下落而变化。",[119,105584,105585,105587,105588,28436],{},[25,105586,104403],{}," 后时间是否回到 ",[25,105589,401],{},[149,105591,102399],{"id":102398},[161,105593,105594,105600,105606,105612,105615,105624],{},[119,105595,105596,105597,28436],{},"修改 timestep 为 ",[25,105598,105599],{},"0.005",[119,105601,105602,105603,28436],{},"重新运行，检查 50 步后时间是否约为 ",[25,105604,105605],{},"0.25",[119,105607,105608,105609,28436],{},"修改重力为 ",[25,105610,105611],{},"0 0 -1.0",[119,105613,105614],{},"观察小球下降速度是否变慢。",[119,105616,102462,105617,102465,105620,105623],{},[25,105618,105619],{},"data.qpos[2] = 2.0",[25,105621,105622],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[119,105625,105626,105627,105630],{},"注释掉 ",[25,105628,105629],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[149,105632,102504],{"id":102503},[177,105634,105636,105637,105639],{"id":105635},"修改-dataqpos-后位置没有更新","修改 ",[25,105638,101121],{}," 后位置没有更新",[14,105641,102513],{},[18,105643,105644],{"className":30429,"code":104594,"language":30431,"meta":23,"style":23},[25,105645,105646],{"__ignoreMap":23},[28,105647,105648],{"class":30,"line":31},[28,105649,104594],{"class":211},[177,105651,105652],{"id":105652},"数组维度看不懂",[14,105654,105655],{},"打印模型维度:",[18,105657,105659],{"className":30429,"code":105658,"language":30431,"meta":23,"style":23},"print(model.nq, model.nv, model.nu)\n",[25,105660,105661],{"__ignoreMap":23},[28,105662,105663,105665],{"class":30,"line":31},[28,105664,30466],{"class":38},[28,105666,105667],{"class":211},"(model.nq, model.nv, model.nu)\n",[347,105669,105670,105678],{},[350,105671,105672],{},[353,105673,105674,105676],{},[356,105675,104625],{"align":23813},[356,105677,100751],{"align":23813},[394,105679,105680,105690,105700],{},[353,105681,105682,105687],{},[399,105683,105684],{"align":23813},[25,105685,105686],{},"nq",[399,105688,105689],{"align":23813},"位置变量数量",[353,105691,105692,105697],{},[399,105693,105694],{"align":23813},[25,105695,105696],{},"nv",[399,105698,105699],{"align":23813},"速度变量数量",[353,105701,105702,105706],{},[399,105703,105704],{"align":23813},[25,105705,102213],{},[399,105707,105708],{"align":23813},"控制输入数量",[177,105710,105712,105713,105715],{"id":105711},"误以为-qpos-一定等于关节数","误以为 ",[25,105714,104081],{}," 一定等于关节数",[14,105717,105718,105719,82581,105721,105723,105724,105726],{},"不是。例如 ",[25,105720,101671],{},[25,105722,104081],{}," 是 7 维，但 ",[25,105725,104411],{}," 是 6 维。",[177,105728,105730,105731,105733],{"id":105729},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[25,105732,104081],{}," 的第几位",[14,105735,105736],{},"初学时可以先打印：",[18,105738,105740],{"className":30429,"code":105739,"language":30431,"meta":23,"style":23},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[25,105741,105742,105752,105762,105774],{"__ignoreMap":23},[28,105743,105744,105746,105748,105750],{"class":30,"line":31},[28,105745,30466],{"class":38},[28,105747,212],{"class":211},[28,105749,101490],{"class":64},[28,105751,101493],{"class":211},[28,105753,105754,105756,105758,105760],{"class":30,"line":42},[28,105755,30466],{"class":38},[28,105757,212],{"class":211},[28,105759,101502],{"class":64},[28,105761,101505],{"class":211},[28,105763,105764,105766,105768,105771],{"class":30,"line":50},[28,105765,30466],{"class":38},[28,105767,212],{"class":211},[28,105769,105770],{"class":64},"\"qpos:\"",[28,105772,105773],{"class":211},", data.qpos)\n",[28,105775,105776,105778,105780,105783],{"class":30,"line":58},[28,105777,30466],{"class":38},[28,105779,212],{"class":211},[28,105781,105782],{"class":64},"\"qvel:\"",[28,105784,105785],{"class":211},", data.qvel)\n",[14,105787,105788],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[177,105790,105791],{"id":105791},"仿真结果每次都一样",[14,105793,105794,105795,105797],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[25,105796,104081],{},"、目标点或控制输入。",[149,105799,102658],{"id":102657},[14,105801,105802,105803,24694],{},"Python 控制 MuJoCo 的核心就是读写 ",[25,105804,33452],{},[161,105806,105807,105815,105820,105825],{},[119,105808,105809,105810,101069,105812,105814],{},"用 ",[25,105811,101121],{},[25,105813,101124],{}," 读取状态。",[119,105816,105809,105817,105819],{},[25,105818,101127],{}," 写入控制。",[119,105821,105809,105822,105824],{},[25,105823,101266],{}," 推进时间。",[119,105826,105827,105828,105830],{},"手动改状态后用 ",[25,105829,104301],{}," 刷新派生量。",[14,105832,105833],{},"理解这一章后，就可以进入关节和 actuator 控制。",[126,105835,105836],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":23,"searchDepth":42,"depth":42,"links":105838},[105839,105840,105841,105848,105852,105853,105854,105864],{"id":100697,"depth":42,"text":100698},{"id":100820,"depth":42,"text":100821},{"id":101095,"depth":42,"text":101096,"children":105842},[105843,105845,105847],{"id":104606,"depth":50,"text":105844},"qpos、qvel、ctrl 是什么",{"id":104684,"depth":50,"text":105846},"mj_step 和 mj_forward 的区别",{"id":104773,"depth":50,"text":104774},{"id":101303,"depth":42,"text":101304,"children":105849},[105850,105851],{"id":101623,"depth":50,"text":101623},{"id":101759,"depth":50,"text":101759},{"id":102366,"depth":42,"text":102367},{"id":102398,"depth":42,"text":102399},{"id":102503,"depth":42,"text":102504,"children":105855},[105856,105858,105859,105861,105863],{"id":105635,"depth":50,"text":105857},"修改 data.qpos 后位置没有更新",{"id":105652,"depth":50,"text":105652},{"id":105711,"depth":50,"text":105860},"误以为 qpos 一定等于关节数",{"id":105729,"depth":50,"text":105862},"不知道某个元素在 qpos 的第几位",{"id":105791,"depth":50,"text":105791},{"id":102657,"depth":42,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104369,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105871,"title":105872,"body":105873,"description":23,"extension":132,"meta":107563,"navigation":134,"path":107564,"seo":107565,"stem":107566,"__hash__":107567},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105874,"toc":107539},[105875,105878,105880,105883,105885,105910,105913,105932,105935,105937,105939,105963,105965,105979,105981,106022,106024,106048,106050,106053,106087,106089,106102,106105,106173,106182,106186,106189,106223,106229,106232,106236,106275,106278,106298,106302,106345,106347,106376,106379,106385,106388,106390,106784,106786,106798,106800,106811,106813,106816,106845,106853,106856,106891,106894,106896,106904,106907,106909,106920,106930,106950,106953,106989,107001,107049,107068,107110,107123,107151,107156,107177,107187,107205,107208,107242,107245,107265,107268,107287,107293,107295,107298,107304,107310,107320,107323,107329,107338,107340,107386,107388,107394,107400,107403,107406,107426,107429,107435,107441,107443,107466,107469,107472,107481,107484,107522,107524,107527,107533,107536],[10,105876,105872],{"id":105877},"_4关节actuator-与力控制",[149,105879,100698],{"id":100697},[14,105881,105882],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105884,104382],{},[161,105886,105887,105893,105898,105902,105907],{},[119,105888,105889,105892],{},[25,105890,105891],{},"hinge"," 关节",[119,105894,105895],{},[25,105896,105897],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[119,105899,105900],{},[25,105901,101127],{},[119,105903,105904],{},[25,105905,105906],{},"ctrlrange",[119,105908,105909],{},"读取关节角和角速度",[14,105911,105912],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[18,105914,105916],{"className":30429,"code":105915,"language":30431,"meta":23,"style":23},"data.ctrl[0] = ...\n",[25,105917,105918],{"__ignoreMap":23},[28,105919,105920,105923,105925,105927,105929],{"class":30,"line":31},[28,105921,105922],{"class":211},"data.ctrl[",[28,105924,401],{"class":38},[28,105926,4520],{"class":211},[28,105928,257],{"class":207},[28,105930,105931],{"class":38}," ...\n",[14,105933,105934],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[149,105936,100821],{"id":100820},[14,105938,100824],{},[18,105940,105941],{"className":20,"code":104439,"language":22,"meta":23,"style":23},[25,105942,105943],{"__ignoreMap":23},[28,105944,105945,105947,105949,105951,105953,105955,105957,105959,105961],{"class":30,"line":31},[28,105946,24652],{"class":34},[28,105948,26366],{"class":64},[28,105950,23909],{"class":64},[28,105952,26451],{"class":38},[28,105954,104454],{"class":64},[28,105956,100849],{"class":64},[28,105958,102552],{"class":64},[28,105960,100865],{"class":64},[28,105962,104463],{"class":64},[14,105964,102870],{},[18,105966,105967],{"className":20,"code":100970,"language":22,"meta":23,"style":23},[25,105968,105969],{"__ignoreMap":23},[28,105970,105971,105973,105975,105977],{"class":30,"line":31},[28,105972,23906],{"class":34},[28,105974,23909],{"class":64},[28,105976,100981],{"class":64},[28,105978,100984],{"class":64},[14,105980,102887],{},[18,105982,105984],{"className":20,"code":105983,"language":22,"meta":23,"style":23},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[25,105985,105986,106003,106012],{"__ignoreMap":23},[28,105987,105988,105990,105992,105994,105997,105999,106001],{"class":30,"line":31},[28,105989,30381],{"class":34},[28,105991,29227],{"class":64},[28,105993,25186],{"class":38},[28,105995,105996],{"class":64}," mujoco-control",[28,105998,101026],{"class":64},[28,106000,101029],{"class":38},[28,106002,101032],{"class":38},[28,106004,106005,106007,106009],{"class":30,"line":42},[28,106006,30381],{"class":34},[28,106008,101039],{"class":64},[28,106010,106011],{"class":64}," mujoco-control\n",[28,106013,106014,106016,106018,106020],{"class":30,"line":50},[28,106015,23906],{"class":34},[28,106017,23909],{"class":64},[28,106019,100981],{"class":64},[28,106021,100984],{"class":64},[14,106023,101055],{},[161,106025,106026,106032,106039,106045],{},[119,106027,106028,106031],{},[25,106029,106030],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[119,106033,106034,106036,106037,28436],{},[25,106035,101127],{}," 长度等于 ",[25,106038,102209],{},[119,106040,82273,106041,106044],{},[25,106042,106043],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[119,106046,106047],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[149,106049,101096],{"id":101095},[14,106051,106052],{},"关节决定 body 如何运动:",[18,106054,106056],{"className":53118,"code":106055,"language":53120,"meta":23,"style":23},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[25,106057,106058],{"__ignoreMap":23},[28,106059,106060,106062,106064,106066,106068,106071,106073,106075,106077,106080,106082,106085],{"class":30,"line":31},[28,106061,1120],{"class":211},[28,106063,103007],{"class":51351},[28,106065,14997],{"class":34},[28,106067,257],{"class":211},[28,106069,106070],{"class":64},"\"hinge\"",[28,106072,53875],{"class":34},[28,106074,257],{"class":211},[28,106076,106070],{"class":64},[28,106078,106079],{"class":34}," axis",[28,106081,257],{"class":211},[28,106083,106084],{"class":64},"\"0 1 0\"",[28,106086,101195],{"class":211},[14,106088,103103],{},[161,106090,106091,106096,106099],{},[119,106092,106093,106094],{},"名字是 ",[25,106095,105891],{},[119,106097,106098],{},"类型是旋转关节",[119,106100,106101],{},"绕 y 轴旋转",[14,106103,106104],{},"actuator 决定如何施加控制:",[18,106106,106108],{"className":53118,"code":106107,"language":53120,"meta":23,"style":23},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[25,106109,106110,106119,106165],{"__ignoreMap":23},[28,106111,106112,106114,106117],{"class":30,"line":31},[28,106113,1120],{"class":211},[28,106115,106116],{"class":51351},"actuator",[28,106118,51358],{"class":211},[28,106120,106121,106123,106126,106128,106130,106133,106136,106138,106140,106143,106145,106147,106150,106152,106155,106158,106160,106163],{"class":30,"line":42},[28,106122,52195],{"class":211},[28,106124,106125],{"class":51351},"motor",[28,106127,14997],{"class":34},[28,106129,257],{"class":211},[28,106131,106132],{"class":64},"\"hinge_motor\"",[28,106134,106135],{"class":34}," joint",[28,106137,257],{"class":211},[28,106139,106070],{"class":64},[28,106141,106142],{"class":34}," gear",[28,106144,257],{"class":211},[28,106146,3755],{"class":64},[28,106148,106149],{"class":34}," ctrlrange",[28,106151,257],{"class":211},[28,106153,106154],{"class":64},"\"-2 2\"",[28,106156,106157],{"class":34}," ctrllimited",[28,106159,257],{"class":211},[28,106161,106162],{"class":64},"\"true\"",[28,106164,101195],{"class":211},[28,106166,106167,106169,106171],{"class":30,"line":50},[28,106168,51836],{"class":211},[28,106170,106116],{"class":51351},[28,106172,51358],{"class":211},[14,106174,106175,106178,106179,28436],{},[25,106176,106177],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[25,106180,106181],{},"[-2, 2]",[177,106183,106185],{"id":106184},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106187,106188],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[347,106190,106191,106201],{},[350,106192,106193],{},[353,106194,106195,106197,106199],{},[356,106196,25804],{"align":23813},[356,106198,102747],{"align":23813},[356,106200,100785],{"align":23813},[394,106202,106203,106213],{},[353,106204,106205,106207,106210],{},[399,106206,103007],{"align":23813},[399,106208,106209],{"align":23813},"定义能怎么动",[399,106211,106212],{"align":23813},"门轴允许门旋转",[353,106214,106215,106217,106220],{},[399,106216,106116],{"align":23813},[399,106218,106219],{"align":23813},"定义怎么施力或控制",[399,106221,106222],{"align":23813},"人推门、马达带动门",[14,106224,106225,106226,106228],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[25,106227,101127],{}," 主动控制它。",[14,106230,106231],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[177,106233,106235],{"id":106234},"hinge-joint","hinge joint",[18,106237,106239],{"className":53118,"code":106238,"language":53120,"meta":23,"style":23},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[25,106240,106241],{"__ignoreMap":23},[28,106242,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106268,106270,106273],{"class":30,"line":31},[28,106244,1120],{"class":211},[28,106246,103007],{"class":51351},[28,106248,14997],{"class":34},[28,106250,257],{"class":211},[28,106252,106070],{"class":64},[28,106254,53875],{"class":34},[28,106256,257],{"class":211},[28,106258,106070],{"class":64},[28,106260,106079],{"class":34},[28,106262,257],{"class":211},[28,106264,106084],{"class":64},[28,106266,106267],{"class":34}," damping",[28,106269,257],{"class":211},[28,106271,106272],{"class":64},"\"0.1\"",[28,106274,101195],{"class":211},[14,106276,106277],{},"含义：",[161,106279,106280,106286,106292],{},[119,106281,106282,106285],{},[25,106283,106284],{},"type=\"hinge\"","：只能绕一个轴旋转。",[119,106287,106288,106291],{},[25,106289,106290],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[119,106293,106294,106297],{},[25,106295,106296],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[177,106299,106301],{"id":106300},"motor-actuator","motor actuator",[18,106303,106305],{"className":53118,"code":106304,"language":53120,"meta":23,"style":23},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[25,106306,106307],{"__ignoreMap":23},[28,106308,106309,106311,106313,106315,106317,106319,106321,106323,106325,106327,106329,106331,106333,106335,106337,106339,106341,106343],{"class":30,"line":31},[28,106310,1120],{"class":211},[28,106312,106125],{"class":51351},[28,106314,14997],{"class":34},[28,106316,257],{"class":211},[28,106318,106132],{"class":64},[28,106320,106135],{"class":34},[28,106322,257],{"class":211},[28,106324,106070],{"class":64},[28,106326,106142],{"class":34},[28,106328,257],{"class":211},[28,106330,3755],{"class":64},[28,106332,106149],{"class":34},[28,106334,257],{"class":211},[28,106336,106154],{"class":64},[28,106338,106157],{"class":34},[28,106340,257],{"class":211},[28,106342,106162],{"class":64},[28,106344,101195],{"class":211},[14,106346,106277],{},[161,106348,106349,106358,106364,106370],{},[119,106350,106351,106354,106355,106357],{},[25,106352,106353],{},"joint=\"hinge\"","：这个电机作用在名为 ",[25,106356,105891],{}," 的关节上。",[119,106359,106360,106363],{},[25,106361,106362],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[119,106365,106366,106369],{},[25,106367,106368],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[119,106371,106372,106375],{},[25,106373,106374],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106377,106378],{},"简单理解：",[18,106380,106383],{"className":106381,"code":106382,"language":5264,"meta":23},[5262],"实际施加效果 ≈ data.ctrl[0] * gear\n",[25,106384,106382],{"__ignoreMap":23},[14,106386,106387],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[149,106389,101304],{"id":101303},[18,106391,106393],{"className":30429,"code":106392,"language":30431,"meta":23,"style":23},"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",[25,106394,106395,106402,106406,106412,106422,106426,106430,106438,106443,106448,106452,106456,106461,106466,106470,106475,106480,106485,106490,106494,106498,106502,106507,106512,106517,106521,106525,106529,106533,106545,106557,106565,106569,106579,106589,106599,106603,106616,106629,106633,106650,106664,106699,106703,106707,106718,106733,106748,106760,106764,106768,106780],{"__ignoreMap":23},[28,106396,106397,106399],{"class":30,"line":31},[28,106398,30443],{"class":207},[28,106400,106401],{"class":211}," math\n",[28,106403,106404],{"class":30,"line":42},[28,106405,2477],{"emptyLinePlaceholder":134},[28,106407,106408,106410],{"class":30,"line":50},[28,106409,30443],{"class":207},[28,106411,101352],{"class":211},[28,106413,106414,106416,106418,106420],{"class":30,"line":58},[28,106415,30443],{"class":207},[28,106417,31431],{"class":211},[28,106419,31434],{"class":207},[28,106421,31437],{"class":211},[28,106423,106424],{"class":30,"line":70},[28,106425,2477],{"emptyLinePlaceholder":134},[28,106427,106428],{"class":30,"line":78},[28,106429,2477],{"emptyLinePlaceholder":134},[28,106431,106432,106434,106436],{"class":30,"line":86},[28,106433,101365],{"class":38},[28,106435,13641],{"class":207},[28,106437,101370],{"class":64},[28,106439,106440],{"class":30,"line":97},[28,106441,106442],{"class":64},"\u003Cmujoco model=\"one_link_motor\">\n",[28,106444,106445],{"class":30,"line":108},[28,106446,106447],{"class":64},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[28,106449,106450],{"class":30,"line":1407},[28,106451,2477],{"emptyLinePlaceholder":134},[28,106453,106454],{"class":30,"line":1690},[28,106455,101389],{"class":64},[28,106457,106458],{"class":30,"line":1695},[28,106459,106460],{"class":64},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[28,106462,106463],{"class":30,"line":1701},[28,106464,106465],{"class":64},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[28,106467,106468],{"class":30,"line":1706},[28,106469,2477],{"emptyLinePlaceholder":134},[28,106471,106472],{"class":30,"line":1720},[28,106473,106474],{"class":64},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[28,106476,106477],{"class":30,"line":1725},[28,106478,106479],{"class":64},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,106481,106482],{"class":30,"line":1731},[28,106483,106484],{"class":64},"        \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",[28,106486,106487],{"class":30,"line":1752},[28,106488,106489],{"class":64},"      \u003C\u002Fbody>\n",[28,106491,106492],{"class":30,"line":1757},[28,106493,101418],{"class":64},[28,106495,106496],{"class":30,"line":1771},[28,106497,101423],{"class":64},[28,106499,106500],{"class":30,"line":1776},[28,106501,2477],{"emptyLinePlaceholder":134},[28,106503,106504],{"class":30,"line":1805},[28,106505,106506],{"class":64},"  \u003Cactuator>\n",[28,106508,106509],{"class":30,"line":1810},[28,106510,106511],{"class":64},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[28,106513,106514],{"class":30,"line":1827},[28,106515,106516],{"class":64},"  \u003C\u002Factuator>\n",[28,106518,106519],{"class":30,"line":1832},[28,106520,101428],{"class":64},[28,106522,106523],{"class":30,"line":1837},[28,106524,95749],{"class":64},[28,106526,106527],{"class":30,"line":1842},[28,106528,2477],{"emptyLinePlaceholder":134},[28,106530,106531],{"class":30,"line":1856},[28,106532,2477],{"emptyLinePlaceholder":134},[28,106534,106535,106537,106539,106541,106543],{"class":30,"line":1861},[28,106536,31998],{"class":207},[28,106538,2050],{"class":34},[28,106540,101449],{"class":211},[28,106542,95737],{"class":38},[28,106544,3816],{"class":211},[28,106546,106547,106549,106551,106553,106555],{"class":30,"line":2654},[28,106548,101458],{"class":211},[28,106550,257],{"class":207},[28,106552,101463],{"class":211},[28,106554,101365],{"class":38},[28,106556,218],{"class":211},[28,106558,106559,106561,106563],{"class":30,"line":2668},[28,106560,101472],{"class":211},[28,106562,257],{"class":207},[28,106564,101477],{"class":211},[28,106566,106567],{"class":30,"line":2676},[28,106568,2477],{"emptyLinePlaceholder":134},[28,106570,106571,106573,106575,106577],{"class":30,"line":2681},[28,106572,31350],{"class":38},[28,106574,212],{"class":211},[28,106576,101490],{"class":64},[28,106578,101493],{"class":211},[28,106580,106581,106583,106585,106587],{"class":30,"line":2687},[28,106582,31350],{"class":38},[28,106584,212],{"class":211},[28,106586,101502],{"class":64},[28,106588,101505],{"class":211},[28,106590,106591,106593,106595,106597],{"class":30,"line":2693},[28,106592,31350],{"class":38},[28,106594,212],{"class":211},[28,106596,101514],{"class":64},[28,106598,101517],{"class":211},[28,106600,106601],{"class":30,"line":2698},[28,106602,2477],{"emptyLinePlaceholder":134},[28,106604,106605,106607,106610,106612,106614],{"class":30,"line":8025},[28,106606,3178],{"class":207},[28,106608,106609],{"class":211}," model.nu ",[28,106611,21025],{"class":207},[28,106613,25189],{"class":38},[28,106615,3816],{"class":211},[28,106617,106618,106620,106622,106624,106627],{"class":30,"line":8049},[28,106619,103483],{"class":207},[28,106621,103486],{"class":38},[28,106623,212],{"class":211},[28,106625,106626],{"class":64},"\"expected exactly one actuator\"",[28,106628,218],{"class":211},[28,106630,106631],{"class":30,"line":8054},[28,106632,2477],{"emptyLinePlaceholder":134},[28,106634,106635,106637,106639,106641,106643,106645,106648],{"class":30,"line":8060},[28,106636,3278],{"class":207},[28,106638,31667],{"class":211},[28,106640,26094],{"class":207},[28,106642,32494],{"class":38},[28,106644,212],{"class":211},[28,106646,106647],{"class":38},"2000",[28,106649,30837],{"class":211},[28,106651,106652,106655,106657,106659,106661],{"class":30,"line":8087},[28,106653,106654],{"class":211},"        t ",[28,106656,257],{"class":207},[28,106658,31667],{"class":211},[28,106660,665],{"class":207},[28,106662,106663],{"class":211}," model.opt.timestep\n",[28,106665,106666,106669,106671,106673,106675,106678,106680,106683,106685,106687,106690,106692,106694,106696],{"class":30,"line":8092},[28,106667,106668],{"class":211},"        data.ctrl[",[28,106670,401],{"class":38},[28,106672,4520],{"class":211},[28,106674,257],{"class":207},[28,106676,106677],{"class":38}," 1.5",[28,106679,6595],{"class":207},[28,106681,106682],{"class":211}," math.sin(",[28,106684,105311],{"class":38},[28,106686,6595],{"class":207},[28,106688,106689],{"class":211}," math.pi ",[28,106691,665],{"class":207},[28,106693,61918],{"class":38},[28,106695,6595],{"class":207},[28,106697,106698],{"class":211}," t)\n",[28,106700,106701],{"class":30,"line":8098},[28,106702,101567],{"class":211},[28,106704,106705],{"class":30,"line":8110},[28,106706,2477],{"emptyLinePlaceholder":134},[28,106708,106709,106711,106713,106716],{"class":30,"line":8122},[28,106710,31350],{"class":38},[28,106712,212],{"class":211},[28,106714,106715],{"class":64},"\"time:\"",[28,106717,101529],{"class":211},[28,106719,106720,106722,106724,106727,106729,106731],{"class":30,"line":8134},[28,106721,31350],{"class":38},[28,106723,212],{"class":211},[28,106725,106726],{"class":64},"\"joint qpos:\"",[28,106728,104981],{"class":211},[28,106730,503],{"class":38},[28,106732,30548],{"class":211},[28,106734,106735,106737,106739,106742,106744,106746],{"class":30,"line":9793},[28,106736,31350],{"class":38},[28,106738,212],{"class":211},[28,106740,106741],{"class":64},"\"joint qvel:\"",[28,106743,104997],{"class":211},[28,106745,503],{"class":38},[28,106747,30548],{"class":211},[28,106749,106750,106752,106754,106757],{"class":30,"line":9818},[28,106751,31350],{"class":38},[28,106753,212],{"class":211},[28,106755,106756],{"class":64},"\"last ctrl:\"",[28,106758,106759],{"class":211},", data.ctrl.copy())\n",[28,106761,106762],{"class":30,"line":9841},[28,106763,2477],{"emptyLinePlaceholder":134},[28,106765,106766],{"class":30,"line":9865},[28,106767,2477],{"emptyLinePlaceholder":134},[28,106769,106770,106772,106774,106776,106778],{"class":30,"line":9870},[28,106771,1609],{"class":207},[28,106773,31271],{"class":38},[28,106775,101610],{"class":207},[28,106777,101613],{"class":64},[28,106779,3816],{"class":211},[28,106781,106782],{"class":30,"line":9875},[28,106783,101620],{"class":211},[14,106785,103621],{},[18,106787,106789],{"className":20,"code":106788,"language":22,"meta":23,"style":23},"touch ch4_joint_motor.py\n",[25,106790,106791],{"__ignoreMap":23},[28,106792,106793,106795],{"class":30,"line":31},[28,106794,101334],{"class":34},[28,106796,106797],{"class":64}," ch4_joint_motor.py\n",[14,106799,102352],{},[18,106801,106803],{"className":20,"code":106802,"language":22,"meta":23,"style":23},"python ch4_joint_motor.py\n",[25,106804,106805],{"__ignoreMap":23},[28,106806,106807,106809],{"class":30,"line":31},[28,106808,30431],{"class":34},[28,106810,106797],{"class":64},[177,106812,101623],{"id":101623},[14,106814,106815],{},"检查 actuator 数量：",[18,106817,106819],{"className":30429,"code":106818,"language":30431,"meta":23,"style":23},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[25,106820,106821,106833],{"__ignoreMap":23},[28,106822,106823,106825,106827,106829,106831],{"class":30,"line":31},[28,106824,1609],{"class":207},[28,106826,106609],{"class":211},[28,106828,21025],{"class":207},[28,106830,25189],{"class":38},[28,106832,3816],{"class":211},[28,106834,106835,106837,106839,106841,106843],{"class":30,"line":42},[28,106836,103946],{"class":207},[28,106838,103486],{"class":38},[28,106840,212],{"class":211},[28,106842,106626],{"class":64},[28,106844,218],{"class":211},[14,106846,106847,106849,106850,106852],{},[25,106848,102209],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[25,106851,101127],{}," 长度应该是 1。",[14,106854,106855],{},"产生正弦控制信号：",[18,106857,106859],{"className":30429,"code":106858,"language":30431,"meta":23,"style":23},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[25,106860,106861],{"__ignoreMap":23},[28,106862,106863,106865,106867,106869,106871,106873,106875,106877,106879,106881,106883,106885,106887,106889],{"class":30,"line":31},[28,106864,105922],{"class":211},[28,106866,401],{"class":38},[28,106868,4520],{"class":211},[28,106870,257],{"class":207},[28,106872,106677],{"class":38},[28,106874,6595],{"class":207},[28,106876,106682],{"class":211},[28,106878,105311],{"class":38},[28,106880,6595],{"class":207},[28,106882,106689],{"class":211},[28,106884,665],{"class":207},[28,106886,61918],{"class":38},[28,106888,6595],{"class":207},[28,106890,106698],{"class":211},[14,106892,106893],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106895,101724],{},[18,106897,106898],{"className":30429,"code":104556,"language":30431,"meta":23,"style":23},[25,106899,106900],{"__ignoreMap":23},[28,106901,106902],{"class":30,"line":31},[28,106903,104556],{"class":211},[14,106905,106906],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[177,106908,101759],{"id":101759},[18,106910,106912],{"className":30429,"code":106911,"language":30431,"meta":23,"style":23},"import math\n",[25,106913,106914],{"__ignoreMap":23},[28,106915,106916,106918],{"class":30,"line":31},[28,106917,30443],{"class":207},[28,106919,106401],{"class":211},[14,106921,106922,106923,101069,106926,106929],{},"导入 Python 标准库里的数学模块。后面要用 ",[25,106924,106925],{},"math.sin",[25,106927,106928],{},"math.pi"," 生成周期变化的控制信号。",[18,106931,106932],{"className":30429,"code":103737,"language":30431,"meta":23,"style":23},[25,106933,106934,106940],{"__ignoreMap":23},[28,106935,106936,106938],{"class":30,"line":31},[28,106937,30443],{"class":207},[28,106939,101352],{"class":211},[28,106941,106942,106944,106946,106948],{"class":30,"line":42},[28,106943,30443],{"class":207},[28,106945,31431],{"class":211},[28,106947,31434],{"class":207},[28,106949,31437],{"class":211},[14,106951,106952],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[18,106954,106955],{"className":53118,"code":106238,"language":53120,"meta":23,"style":23},[25,106956,106957],{"__ignoreMap":23},[28,106958,106959,106961,106963,106965,106967,106969,106971,106973,106975,106977,106979,106981,106983,106985,106987],{"class":30,"line":31},[28,106960,1120],{"class":211},[28,106962,103007],{"class":51351},[28,106964,14997],{"class":34},[28,106966,257],{"class":211},[28,106968,106070],{"class":64},[28,106970,53875],{"class":34},[28,106972,257],{"class":211},[28,106974,106070],{"class":64},[28,106976,106079],{"class":34},[28,106978,257],{"class":211},[28,106980,106084],{"class":64},[28,106982,106267],{"class":34},[28,106984,257],{"class":211},[28,106986,106272],{"class":64},[28,106988,101195],{"class":211},[14,106990,106991,106992,106994,106995,106997,106998,107000],{},"这行定义关节。",[25,106993,105891],{}," 表示旋转关节。",[25,106996,106290],{}," 表示绕 y 轴旋转。",[25,106999,106296],{}," 表示有一点阻尼，运动不会完全无损耗。",[18,107002,107004],{"className":53118,"code":107003,"language":53120,"meta":23,"style":23},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[25,107005,107006],{"__ignoreMap":23},[28,107007,107008,107010,107012,107014,107016,107019,107021,107023,107026,107029,107031,107034,107036,107038,107040,107042,107044,107047],{"class":30,"line":31},[28,107009,1120],{"class":211},[28,107011,101171],{"class":51351},[28,107013,14997],{"class":34},[28,107015,257],{"class":211},[28,107017,107018],{"class":64},"\"link_geom\"",[28,107020,53875],{"class":34},[28,107022,257],{"class":211},[28,107024,107025],{"class":64},"\"capsule\"",[28,107027,107028],{"class":34}," fromto",[28,107030,257],{"class":211},[28,107032,107033],{"class":64},"\"0 0 0 0 0 0.5\"",[28,107035,101187],{"class":34},[28,107037,257],{"class":211},[28,107039,103829],{"class":64},[28,107041,102052],{"class":34},[28,107043,257],{"class":211},[28,107045,107046],{"class":64},"\"0.5\"",[28,107048,101195],{"class":211},[14,107050,107051,107052,107054,107055,107057,107058,107061,107062,28436,107065,107067],{},"这行定义摆杆的形状。",[25,107053,103216],{}," 是胶囊体，适合表示杆子。",[25,107056,103227],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[25,107059,107060],{},"(0,0,0)"," 延伸到 ",[25,107063,107064],{},"(0,0,0.5)",[25,107066,103221],{}," 是半径。",[18,107069,107070],{"className":53118,"code":106304,"language":53120,"meta":23,"style":23},[25,107071,107072],{"__ignoreMap":23},[28,107073,107074,107076,107078,107080,107082,107084,107086,107088,107090,107092,107094,107096,107098,107100,107102,107104,107106,107108],{"class":30,"line":31},[28,107075,1120],{"class":211},[28,107077,106125],{"class":51351},[28,107079,14997],{"class":34},[28,107081,257],{"class":211},[28,107083,106132],{"class":64},[28,107085,106135],{"class":34},[28,107087,257],{"class":211},[28,107089,106070],{"class":64},[28,107091,106142],{"class":34},[28,107093,257],{"class":211},[28,107095,3755],{"class":64},[28,107097,106149],{"class":34},[28,107099,257],{"class":211},[28,107101,106154],{"class":64},[28,107103,106157],{"class":34},[28,107105,257],{"class":211},[28,107107,106162],{"class":64},[28,107109,101195],{"class":211},[14,107111,107112,107113,107115,107116,107119,107120,107122],{},"这行定义电机。它作用在 ",[25,107114,105891],{}," 关节上。",[25,107117,107118],{},"gear"," 可以理解成放大倍数。",[25,107121,105906],{}," 限制控制输入范围。",[18,107124,107125],{"className":30429,"code":106818,"language":30431,"meta":23,"style":23},[25,107126,107127,107139],{"__ignoreMap":23},[28,107128,107129,107131,107133,107135,107137],{"class":30,"line":31},[28,107130,1609],{"class":207},[28,107132,106609],{"class":211},[28,107134,21025],{"class":207},[28,107136,25189],{"class":38},[28,107138,3816],{"class":211},[28,107140,107141,107143,107145,107147,107149],{"class":30,"line":42},[28,107142,103946],{"class":207},[28,107144,103486],{"class":38},[28,107146,212],{"class":211},[28,107148,106626],{"class":64},[28,107150,218],{"class":211},[14,107152,107153,107155],{},[25,107154,102209],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[18,107157,107159],{"className":30429,"code":107158,"language":30431,"meta":23,"style":23},"for step in range(2000):\n",[25,107160,107161],{"__ignoreMap":23},[28,107162,107163,107165,107167,107169,107171,107173,107175],{"class":30,"line":31},[28,107164,3102],{"class":207},[28,107166,31667],{"class":211},[28,107168,26094],{"class":207},[28,107170,32494],{"class":38},[28,107172,212],{"class":211},[28,107174,106647],{"class":38},[28,107176,30837],{"class":211},[14,107178,107179,107180,107182,107183,107186],{},"循环 2000 步。这里没有用 ",[25,107181,1202],{},"，而是用 ",[25,107184,107185],{},"step","，因为后面要用当前步数计算时间。",[18,107188,107190],{"className":30429,"code":107189,"language":30431,"meta":23,"style":23},"t = step * model.opt.timestep\n",[25,107191,107192],{"__ignoreMap":23},[28,107193,107194,107197,107199,107201,107203],{"class":30,"line":31},[28,107195,107196],{"class":211},"t ",[28,107198,257],{"class":207},[28,107200,31667],{"class":211},[28,107202,665],{"class":207},[28,107204,106663],{"class":211},[14,107206,107207],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[18,107209,107210],{"className":30429,"code":106858,"language":30431,"meta":23,"style":23},[25,107211,107212],{"__ignoreMap":23},[28,107213,107214,107216,107218,107220,107222,107224,107226,107228,107230,107232,107234,107236,107238,107240],{"class":30,"line":31},[28,107215,105922],{"class":211},[28,107217,401],{"class":38},[28,107219,4520],{"class":211},[28,107221,257],{"class":207},[28,107223,106677],{"class":38},[28,107225,6595],{"class":207},[28,107227,106682],{"class":211},[28,107229,105311],{"class":38},[28,107231,6595],{"class":207},[28,107233,106689],{"class":211},[28,107235,665],{"class":207},[28,107237,61918],{"class":38},[28,107239,6595],{"class":207},[28,107241,106698],{"class":211},[14,107243,107244],{},"这行给电机输入一个正弦波。拆开看：",[161,107246,107247,107253,107259],{},[119,107248,107249,107252],{},[25,107250,107251],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[119,107254,107255,107258],{},[25,107256,107257],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[119,107260,107261,107264],{},[25,107262,107263],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107266,107267],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[18,107269,107271],{"className":30429,"code":107270,"language":30431,"meta":23,"style":23},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[25,107272,107273],{"__ignoreMap":23},[28,107274,107275,107277,107279,107281,107283,107285],{"class":30,"line":31},[28,107276,30466],{"class":38},[28,107278,212],{"class":211},[28,107280,106726],{"class":64},[28,107282,104981],{"class":211},[28,107284,503],{"class":38},[28,107286,30548],{"class":211},[14,107288,107289,107290,107292],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[25,107291,101121],{}," 只有一个数。",[149,107294,102367],{"id":102366},[14,107296,107297],{},"输出类似:",[18,107299,107302],{"className":107300,"code":107301,"language":5264,"meta":23},[5262],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[25,107303,107301],{"__ignoreMap":23},[14,107305,107306,107307,107309],{},"这里 ",[25,107308,106177],{}," 是电机输入。",[14,107311,107312,107315,107316,107319],{},[25,107313,107314],{},"joint qpos"," 是关节角度，单位通常是弧度。",[25,107317,107318],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107321,107322],{},"角度单位提示：",[18,107324,107327],{"className":107325,"code":107326,"language":5264,"meta":23},[5262],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[25,107328,107326],{"__ignoreMap":23},[14,107330,107331,107332,107334,107335,107337],{},"如果你看到 ",[25,107333,104081],{}," 是 ",[25,107336,35380],{},"，大约就是 28.6 度。",[149,107339,102399],{"id":102398},[161,107341,107342,107349,107352,107359,107362,107370,107378],{},[119,107343,102462,107344,102465,107346,28436],{},[25,107345,106362],{},[25,107347,107348],{},"gear=\"5\"",[119,107350,107351],{},"重新运行，观察关节运动是否更剧烈。",[119,107353,102462,107354,102465,107356,28436],{},[25,107355,105906],{},[25,107357,107358],{},"-0.2 0.2",[119,107360,107361],{},"重新运行，观察控制能力是否变弱。",[119,107363,107364,107365,107367,107368,28436],{},"去掉 actuator，确认 ",[25,107366,102209],{}," 变成 ",[25,107369,401],{},[119,107371,102462,107372,102465,107374,107377],{},[25,107373,106296],{},[25,107375,107376],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[119,107379,102462,107380,102465,107382,107385],{},[25,107381,106290],{},[25,107383,107384],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[149,107387,102504],{"id":102503},[177,107389,107391],{"id":107390},"indexerror-index-0-is-out-of-bounds",[25,107392,107393],{},"IndexError: index 0 is out of bounds",[14,107395,107396,107397,107399],{},"原因是 ",[25,107398,106043],{},"，没有 actuator。",[177,107401,107402],{"id":107402},"关节几乎不动",[14,107404,107405],{},"可能原因:",[161,107407,107408,107413,107417,107423],{},[119,107409,107410,107412],{},[25,107411,107118],{}," 太小",[119,107414,107415,107412],{},[25,107416,105906],{},[119,107418,107419,107422],{},[25,107420,107421],{},"damping"," 太大",[119,107424,107425],{},"重力方向导致运动不明显",[177,107427,107428],{"id":107428},"模型编译失败",[14,107430,107431,107432,107434],{},"检查 actuator 引用的 ",[25,107433,106353],{}," 是否存在，joint 名称是否拼写一致。",[177,107436,107438,107440],{"id":107437},"datactrl0-写了但没有效果",[25,107439,106177],{}," 写了但没有效果",[14,107442,102626],{},[161,107444,107445,107450,107453,107458,107463],{},[119,107446,107447,107449],{},[25,107448,102209],{}," 是否大于 0。",[119,107451,107452],{},"motor 是否引用了正确 joint。",[119,107454,107455,107457],{},[25,107456,107118],{}," 是否太小。",[119,107459,107460,107462],{},[25,107461,105906],{}," 是否把输入限制得太小。",[119,107464,107465],{},"body 是否真的有可动 joint。",[177,107467,107468],{"id":107468},"控制输入超过范围会怎样",[14,107470,107471],{},"如果设置了：",[18,107473,107475],{"className":53118,"code":107474,"language":53120,"meta":23,"style":23},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[25,107476,107477],{"__ignoreMap":23},[28,107478,107479],{"class":30,"line":31},[28,107480,107474],{"class":211},[14,107482,107483],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[18,107485,107487],{"className":30429,"code":107486,"language":30431,"meta":23,"style":23},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[25,107488,107489,107509],{"__ignoreMap":23},[28,107490,107491,107494,107496,107499,107501,107503,107505,107507],{"class":30,"line":31},[28,107492,107493],{"class":211},"action ",[28,107495,257],{"class":207},[28,107497,107498],{"class":211}," np.clip(action, ",[28,107500,742],{"class":207},[28,107502,105311],{"class":38},[28,107504,12512],{"class":211},[28,107506,105311],{"class":38},[28,107508,218],{"class":211},[28,107510,107511,107513,107515,107517,107519],{"class":30,"line":42},[28,107512,105922],{"class":211},[28,107514,401],{"class":38},[28,107516,4520],{"class":211},[28,107518,257],{"class":207},[28,107520,107521],{"class":211}," action\n",[149,107523,102658],{"id":102657},[14,107525,107526],{},"这一章建立了控制任务的基本形式：",[18,107528,107531],{"className":107529,"code":107530,"language":5264,"meta":23},[5262],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[25,107532,107530],{"__ignoreMap":23},[14,107534,107535],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[126,107537,107538],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":23,"searchDepth":42,"depth":42,"links":107540},[107541,107542,107543,107548,107552,107553,107554,107562],{"id":100697,"depth":42,"text":100698},{"id":100820,"depth":42,"text":100821},{"id":101095,"depth":42,"text":101096,"children":107544},[107545,107546,107547],{"id":106184,"depth":50,"text":106185},{"id":106234,"depth":50,"text":106235},{"id":106300,"depth":50,"text":106301},{"id":101303,"depth":42,"text":101304,"children":107549},[107550,107551],{"id":101623,"depth":50,"text":101623},{"id":101759,"depth":50,"text":101759},{"id":102366,"depth":42,"text":102367},{"id":102398,"depth":42,"text":102399},{"id":102503,"depth":42,"text":102504,"children":107555},[107556,107557,107558,107559,107561],{"id":107390,"depth":50,"text":107393},{"id":107402,"depth":50,"text":107402},{"id":107428,"depth":50,"text":107428},{"id":107437,"depth":50,"text":107560},"data.ctrl[0] 写了但没有效果",{"id":107468,"depth":50,"text":107468},{"id":102657,"depth":42,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105872,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107569,"title":107570,"body":107571,"description":23,"extension":132,"meta":109480,"navigation":134,"path":109481,"seo":109482,"stem":109483,"__hash__":109484},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107572,"toc":109456},[107573,107576,107578,107581,107589,107592,107609,107612,107637,107640,107686,107688,107690,107745,107747,107766,107768,107811,107814,107831,107834,107850,107860,107867,107869,107872,107875,107909,107912,107960,107964,107967,107981,107990,107994,107997,108022,108025,108029,108042,108045,108051,108054,108069,108071,108074,108334,108336,108348,108351,108663,108665,108677,108679,108682,108697,108702,108705,108727,108730,108733,108767,108770,108774,108785,108788,108805,108808,108822,108829,108849,108856,108870,108873,108885,108900,108920,108923,108945,108948,108952,108967,108978,108993,108996,109026,109042,109071,109079,109103,109106,109124,109134,109146,109153,109162,109168,109177,109180,109182,109191,109194,109209,109211,109214,109225,109228,109239,109242,109260,109262,109279,109282,109310,109312,109316,109319,109349,109355,109358,109362,109370,109373,109375,109396,109399,109402,109418,109421,109437,109439,109442,109453],[10,107574,107570],{"id":107575},"_5viewer-可视化与-renderer-离屏渲染",[149,107577,100698],{"id":100697},[14,107579,107580],{},"本章掌握两类可视化方式:",[161,107582,107583,107586],{},[119,107584,107585],{},"交互式 viewer: 适合人工观察仿真",[119,107587,107588],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107590,107591],{},"使用官方接口:",[18,107593,107595],{"className":30429,"code":107594,"language":30431,"meta":23,"style":23},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[25,107596,107597,107604],{"__ignoreMap":23},[28,107598,107599,107601],{"class":30,"line":31},[28,107600,30443],{"class":207},[28,107602,107603],{"class":211}," mujoco.viewer\n",[28,107605,107606],{"class":30,"line":42},[28,107607,107608],{"class":211},"mujoco.viewer.launch_passive(model, data)\n",[14,107610,107611],{},"以及:",[18,107613,107615],{"className":30429,"code":107614,"language":30431,"meta":23,"style":23},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[25,107616,107617,107627],{"__ignoreMap":23},[28,107618,107619,107622,107624],{"class":30,"line":31},[28,107620,107621],{"class":211},"renderer ",[28,107623,257],{"class":207},[28,107625,107626],{"class":211}," mujoco.Renderer(model)\n",[28,107628,107629,107632,107634],{"class":30,"line":42},[28,107630,107631],{"class":211},"image ",[28,107633,257],{"class":207},[28,107635,107636],{"class":211}," renderer.render()\n",[14,107638,107639],{},"新手建议先理解二者区别：",[347,107641,107642,107658],{},[350,107643,107644],{},[353,107645,107646,107649,107652,107655],{},[356,107647,107648],{"align":23813},"工具",[356,107650,107651],{"align":23813},"用途",[356,107653,107654],{"align":23813},"是否打开窗口",[356,107656,107657],{"align":23813},"常见场景",[394,107659,107660,107673],{},[353,107661,107662,107665,107668,107670],{},[399,107663,107664],{"align":23813},"Viewer",[399,107666,107667],{"align":23813},"人眼实时观察仿真",[399,107669,104716],{"align":23813},[399,107671,107672],{"align":23813},"调试模型、看控制效果",[353,107674,107675,107678,107681,107683],{},[399,107676,107677],{"align":23813},"Renderer",[399,107679,107680],{"align":23813},"生成图像数组",[399,107682,104729],{"align":23813},[399,107684,107685],{"align":23813},"保存图片、训练视觉策略、服务器批量采集",[149,107687,100821],{"id":100820},[14,107689,100824],{},[18,107691,107693],{"className":20,"code":107692,"language":22,"meta":23,"style":23},"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",[25,107694,107695,107707,107717,107725,107733],{"__ignoreMap":23},[28,107696,107697,107699,107701,107703,107705],{"class":30,"line":31},[28,107698,24652],{"class":34},[28,107700,26366],{"class":64},[28,107702,23909],{"class":64},[28,107704,26451],{"class":38},[28,107706,39],{"class":38},[28,107708,107709,107711,107713,107715],{"class":30,"line":42},[28,107710,100859],{"class":64},[28,107712,100862],{"class":64},[28,107714,100865],{"class":64},[28,107716,39],{"class":38},[28,107718,107719,107721,107723],{"class":30,"line":50},[28,107720,100872],{"class":64},[28,107722,100875],{"class":64},[28,107724,39],{"class":38},[28,107726,107727,107729,107731],{"class":30,"line":58},[28,107728,100882],{"class":64},[28,107730,100885],{"class":64},[28,107732,39],{"class":38},[28,107734,107735,107737,107739,107741,107743],{"class":30,"line":70},[28,107736,100892],{"class":64},[28,107738,100895],{"class":64},[28,107740,100898],{"class":64},[28,107742,100901],{"class":64},[28,107744,102567],{"class":64},[14,107746,102870],{},[18,107748,107750],{"className":20,"code":107749,"language":22,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy pillow\n",[25,107751,107752],{"__ignoreMap":23},[28,107753,107754,107756,107758,107760,107763],{"class":30,"line":31},[28,107755,23906],{"class":34},[28,107757,23909],{"class":64},[28,107759,100981],{"class":64},[28,107761,107762],{"class":64}," numpy",[28,107764,107765],{"class":64}," pillow\n",[14,107767,102887],{},[18,107769,107771],{"className":20,"code":107770,"language":22,"meta":23,"style":23},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[25,107772,107773,107790,107799],{"__ignoreMap":23},[28,107774,107775,107777,107779,107781,107784,107786,107788],{"class":30,"line":31},[28,107776,30381],{"class":34},[28,107778,29227],{"class":64},[28,107780,25186],{"class":38},[28,107782,107783],{"class":64}," mujoco-render",[28,107785,101026],{"class":64},[28,107787,101029],{"class":38},[28,107789,101032],{"class":38},[28,107791,107792,107794,107796],{"class":30,"line":42},[28,107793,30381],{"class":34},[28,107795,101039],{"class":64},[28,107797,107798],{"class":64}," mujoco-render\n",[28,107800,107801,107803,107805,107807,107809],{"class":30,"line":50},[28,107802,23906],{"class":34},[28,107804,23909],{"class":64},[28,107806,100981],{"class":64},[28,107808,107762],{"class":64},[28,107810,107765],{"class":64},[14,107812,107813],{},"离屏渲染后端:",[18,107815,107817],{"className":20,"code":107816,"language":22,"meta":23,"style":23},"export MUJOCO_GL=egl\n",[25,107818,107819],{"__ignoreMap":23},[28,107820,107821,107823,107826,107828],{"class":30,"line":31},[28,107822,25113],{"class":207},[28,107824,107825],{"class":211}," MUJOCO_GL",[28,107827,257],{"class":207},[28,107829,107830],{"class":211},"egl\n",[14,107832,107833],{},"或:",[18,107835,107837],{"className":20,"code":107836,"language":22,"meta":23,"style":23},"export MUJOCO_GL=osmesa\n",[25,107838,107839],{"__ignoreMap":23},[28,107840,107841,107843,107845,107847],{"class":30,"line":31},[28,107842,25113],{"class":207},[28,107844,107825],{"class":211},[28,107846,257],{"class":207},[28,107848,107849],{"class":211},"osmesa\n",[14,107851,107852,107853,107856,107857,28436],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[25,107854,107855],{},"egl"," 失败，再尝试 ",[25,107858,107859],{},"osmesa",[14,107861,107862,107863,107866],{},"如果你在本机桌面环境运行，通常先不要设置 ",[25,107864,107865],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[149,107868,101096],{"id":101095},[14,107870,107871],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107873,107874],{},"典型 viewer 流程:",[18,107876,107878],{"className":30429,"code":107877,"language":30431,"meta":23,"style":23},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[25,107879,107880,107893,107900,107904],{"__ignoreMap":23},[28,107881,107882,107885,107888,107890],{"class":30,"line":31},[28,107883,107884],{"class":207},"with",[28,107886,107887],{"class":211}," mujoco.viewer.launch_passive(model, data) ",[28,107889,31434],{"class":207},[28,107891,107892],{"class":211}," viewer:\n",[28,107894,107895,107897],{"class":30,"line":42},[28,107896,2328],{"class":207},[28,107898,107899],{"class":211}," viewer.is_running():\n",[28,107901,107902],{"class":30,"line":50},[28,107903,101567],{"class":211},[28,107905,107906],{"class":30,"line":58},[28,107907,107908],{"class":211},"        viewer.sync()\n",[14,107910,107911],{},"典型 renderer 流程:",[18,107913,107915],{"className":30429,"code":107914,"language":30431,"meta":23,"style":23},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[25,107916,107917,107943,107947,107952],{"__ignoreMap":23},[28,107918,107919,107921,107923,107926,107928,107930,107932,107934,107936,107938,107941],{"class":30,"line":31},[28,107920,107621],{"class":211},[28,107922,257],{"class":207},[28,107924,107925],{"class":211}," mujoco.Renderer(model, ",[28,107927,25052],{"class":5293},[28,107929,257],{"class":207},[28,107931,42393],{"class":38},[28,107933,12512],{"class":211},[28,107935,25048],{"class":5293},[28,107937,257],{"class":207},[28,107939,107940],{"class":38},"640",[28,107942,218],{"class":211},[28,107944,107945],{"class":30,"line":42},[28,107946,104556],{"class":211},[28,107948,107949],{"class":30,"line":50},[28,107950,107951],{"class":211},"renderer.update_scene(data)\n",[28,107953,107954,107956,107958],{"class":30,"line":58},[28,107955,107631],{"class":211},[28,107957,257],{"class":207},[28,107959,107636],{"class":211},[177,107961,107963],{"id":107962},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107965,107966],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[18,107968,107970],{"className":30429,"code":107969,"language":30431,"meta":23,"style":23},"mujoco.mj_step(model, data)\nviewer.sync()\n",[25,107971,107972,107976],{"__ignoreMap":23},[28,107973,107974],{"class":30,"line":31},[28,107975,104556],{"class":211},[28,107977,107978],{"class":30,"line":42},[28,107979,107980],{"class":211},"viewer.sync()\n",[14,107982,107983,107985,107986,107989],{},[25,107984,101266],{}," 负责算物理，",[25,107987,107988],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[177,107991,107993],{"id":107992},"为什么要-sleep","为什么要 sleep",[14,107995,107996],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[18,107998,108000],{"className":30429,"code":107999,"language":30431,"meta":23,"style":23},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[25,108001,108002],{"__ignoreMap":23},[28,108003,108004,108007,108009,108012,108014,108017,108019],{"class":30,"line":31},[28,108005,108006],{"class":211},"sleep_time ",[28,108008,257],{"class":207},[28,108010,108011],{"class":211}," model.opt.timestep ",[28,108013,742],{"class":207},[28,108015,108016],{"class":211}," (time.time() ",[28,108018,742],{"class":207},[28,108020,108021],{"class":211}," step_start)\n",[14,108023,108024],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[177,108026,108028],{"id":108027},"renderer-输出是什么","renderer 输出是什么",[18,108030,108032],{"className":30429,"code":108031,"language":30431,"meta":23,"style":23},"image = renderer.render()\n",[25,108033,108034],{"__ignoreMap":23},[28,108035,108036,108038,108040],{"class":30,"line":31},[28,108037,107631],{"class":211},[28,108039,257],{"class":207},[28,108041,107636],{"class":211},[14,108043,108044],{},"得到的是 NumPy 数组，形状通常是：",[18,108046,108049],{"className":108047,"code":108048,"language":5264,"meta":23},[5262],"(height, width, 3)\n",[25,108050,108048],{"__ignoreMap":23},[14,108052,108053],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[18,108055,108057],{"className":30429,"code":108056,"language":30431,"meta":23,"style":23},"Image.fromarray(image).save(\"render_output.png\")\n",[25,108058,108059],{"__ignoreMap":23},[28,108060,108061,108064,108067],{"class":30,"line":31},[28,108062,108063],{"class":211},"Image.fromarray(image).save(",[28,108065,108066],{"class":64},"\"render_output.png\"",[28,108068,218],{"class":211},[149,108070,101304],{"id":101303},[14,108072,108073],{},"交互式 Viewer:",[18,108075,108077],{"className":30429,"code":108076,"language":30431,"meta":23,"style":23},"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",[25,108078,108079,108085,108089,108095,108101,108105,108109,108117,108122,108126,108130,108134,108139,108144,108148,108152,108156,108161,108165,108169,108173,108177,108181,108185,108197,108209,108217,108221,108231,108251,108261,108266,108271,108275,108292,108305,108310,108314,108318,108330],{"__ignoreMap":23},[28,108080,108081,108083],{"class":30,"line":31},[28,108082,30443],{"class":207},[28,108084,31880],{"class":211},[28,108086,108087],{"class":30,"line":42},[28,108088,2477],{"emptyLinePlaceholder":134},[28,108090,108091,108093],{"class":30,"line":50},[28,108092,30443],{"class":207},[28,108094,101352],{"class":211},[28,108096,108097,108099],{"class":30,"line":58},[28,108098,30443],{"class":207},[28,108100,107603],{"class":211},[28,108102,108103],{"class":30,"line":70},[28,108104,2477],{"emptyLinePlaceholder":134},[28,108106,108107],{"class":30,"line":78},[28,108108,2477],{"emptyLinePlaceholder":134},[28,108110,108111,108113,108115],{"class":30,"line":86},[28,108112,101365],{"class":38},[28,108114,13641],{"class":207},[28,108116,101370],{"class":64},[28,108118,108119],{"class":30,"line":97},[28,108120,108121],{"class":64},"\u003Cmujoco model=\"viewer_demo\">\n",[28,108123,108124],{"class":30,"line":108},[28,108125,101380],{"class":64},[28,108127,108128],{"class":30,"line":1407},[28,108129,2477],{"emptyLinePlaceholder":134},[28,108131,108132],{"class":30,"line":1690},[28,108133,101389],{"class":64},[28,108135,108136],{"class":30,"line":1695},[28,108137,108138],{"class":64},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[28,108140,108141],{"class":30,"line":1701},[28,108142,108143],{"class":64},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,108145,108146],{"class":30,"line":1706},[28,108147,2477],{"emptyLinePlaceholder":134},[28,108149,108150],{"class":30,"line":1720},[28,108151,101403],{"class":64},[28,108153,108154],{"class":30,"line":1725},[28,108155,101408],{"class":64},[28,108157,108158],{"class":30,"line":1731},[28,108159,108160],{"class":64},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[28,108162,108163],{"class":30,"line":1752},[28,108164,101418],{"class":64},[28,108166,108167],{"class":30,"line":1757},[28,108168,101423],{"class":64},[28,108170,108171],{"class":30,"line":1771},[28,108172,101428],{"class":64},[28,108174,108175],{"class":30,"line":1776},[28,108176,95749],{"class":64},[28,108178,108179],{"class":30,"line":1805},[28,108180,2477],{"emptyLinePlaceholder":134},[28,108182,108183],{"class":30,"line":1810},[28,108184,2477],{"emptyLinePlaceholder":134},[28,108186,108187,108189,108191,108193,108195],{"class":30,"line":1827},[28,108188,31998],{"class":207},[28,108190,2050],{"class":34},[28,108192,101449],{"class":211},[28,108194,95737],{"class":38},[28,108196,3816],{"class":211},[28,108198,108199,108201,108203,108205,108207],{"class":30,"line":1832},[28,108200,101458],{"class":211},[28,108202,257],{"class":207},[28,108204,101463],{"class":211},[28,108206,101365],{"class":38},[28,108208,218],{"class":211},[28,108210,108211,108213,108215],{"class":30,"line":1837},[28,108212,101472],{"class":211},[28,108214,257],{"class":207},[28,108216,101477],{"class":211},[28,108218,108219],{"class":30,"line":1842},[28,108220,2477],{"emptyLinePlaceholder":134},[28,108222,108223,108225,108227,108229],{"class":30,"line":1856},[28,108224,34229],{"class":207},[28,108226,107887],{"class":211},[28,108228,31434],{"class":207},[28,108230,107892],{"class":211},[28,108232,108233,108236,108239,108241,108244,108246,108249],{"class":30,"line":1861},[28,108234,108235],{"class":207},"        while",[28,108237,108238],{"class":211}," viewer.is_running() ",[28,108240,30513],{"class":207},[28,108242,108243],{"class":211}," data.time ",[28,108245,1120],{"class":207},[28,108247,108248],{"class":38}," 5.0",[28,108250,3816],{"class":211},[28,108252,108253,108256,108258],{"class":30,"line":2654},[28,108254,108255],{"class":211},"            step_start ",[28,108257,257],{"class":207},[28,108259,108260],{"class":211}," time.time()\n",[28,108262,108263],{"class":30,"line":2668},[28,108264,108265],{"class":211},"            mujoco.mj_step(model, data)\n",[28,108267,108268],{"class":30,"line":2676},[28,108269,108270],{"class":211},"            viewer.sync()\n",[28,108272,108273],{"class":30,"line":2681},[28,108274,2477],{"emptyLinePlaceholder":134},[28,108276,108277,108280,108282,108284,108286,108288,108290],{"class":30,"line":2687},[28,108278,108279],{"class":211},"            sleep_time ",[28,108281,257],{"class":207},[28,108283,108011],{"class":211},[28,108285,742],{"class":207},[28,108287,108016],{"class":211},[28,108289,742],{"class":207},[28,108291,108021],{"class":211},[28,108293,108294,108296,108299,108301,108303],{"class":30,"line":2693},[28,108295,4719],{"class":207},[28,108297,108298],{"class":211}," sleep_time ",[28,108300,1170],{"class":207},[28,108302,4170],{"class":38},[28,108304,3816],{"class":211},[28,108306,108307],{"class":30,"line":2698},[28,108308,108309],{"class":211},"                time.sleep(sleep_time)\n",[28,108311,108312],{"class":30,"line":8025},[28,108313,2477],{"emptyLinePlaceholder":134},[28,108315,108316],{"class":30,"line":8049},[28,108317,2477],{"emptyLinePlaceholder":134},[28,108319,108320,108322,108324,108326,108328],{"class":30,"line":8054},[28,108321,1609],{"class":207},[28,108323,31271],{"class":38},[28,108325,101610],{"class":207},[28,108327,101613],{"class":64},[28,108329,3816],{"class":211},[28,108331,108332],{"class":30,"line":8060},[28,108333,101620],{"class":211},[14,108335,103621],{},[18,108337,108339],{"className":20,"code":108338,"language":22,"meta":23,"style":23},"touch ch5_viewer.py\n",[25,108340,108341],{"__ignoreMap":23},[28,108342,108343,108345],{"class":30,"line":31},[28,108344,101334],{"class":34},[28,108346,108347],{"class":64}," ch5_viewer.py\n",[14,108349,108350],{},"离屏 Renderer 保存图片:",[18,108352,108354],{"className":30429,"code":108353,"language":30431,"meta":23,"style":23},"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",[25,108355,108356,108368,108372,108378,108388,108392,108396,108404,108409,108413,108417,108421,108425,108430,108434,108438,108442,108446,108450,108454,108458,108462,108466,108470,108474,108486,108498,108506,108531,108535,108551,108555,108559,108574,108583,108587,108601,108606,108611,108615,108627,108639,108643,108647,108659],{"__ignoreMap":23},[28,108357,108358,108360,108363,108365],{"class":30,"line":31},[28,108359,30788],{"class":207},[28,108361,108362],{"class":211}," pathlib ",[28,108364,30443],{"class":207},[28,108366,108367],{"class":211}," Path\n",[28,108369,108370],{"class":30,"line":42},[28,108371,2477],{"emptyLinePlaceholder":134},[28,108373,108374,108376],{"class":30,"line":50},[28,108375,30443],{"class":207},[28,108377,101352],{"class":211},[28,108379,108380,108382,108384,108386],{"class":30,"line":58},[28,108381,30788],{"class":207},[28,108383,47314],{"class":38},[28,108385,47317],{"class":207},[28,108387,47320],{"class":211},[28,108389,108390],{"class":30,"line":70},[28,108391,2477],{"emptyLinePlaceholder":134},[28,108393,108394],{"class":30,"line":78},[28,108395,2477],{"emptyLinePlaceholder":134},[28,108397,108398,108400,108402],{"class":30,"line":86},[28,108399,101365],{"class":38},[28,108401,13641],{"class":207},[28,108403,101370],{"class":64},[28,108405,108406],{"class":30,"line":97},[28,108407,108408],{"class":64},"\u003Cmujoco model=\"renderer_demo\">\n",[28,108410,108411],{"class":30,"line":108},[28,108412,101380],{"class":64},[28,108414,108415],{"class":30,"line":1407},[28,108416,2477],{"emptyLinePlaceholder":134},[28,108418,108419],{"class":30,"line":1690},[28,108420,101389],{"class":64},[28,108422,108423],{"class":30,"line":1695},[28,108424,108138],{"class":64},[28,108426,108427],{"class":30,"line":1701},[28,108428,108429],{"class":64},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[28,108431,108432],{"class":30,"line":1706},[28,108433,108143],{"class":64},[28,108435,108436],{"class":30,"line":1720},[28,108437,2477],{"emptyLinePlaceholder":134},[28,108439,108440],{"class":30,"line":1725},[28,108441,101403],{"class":64},[28,108443,108444],{"class":30,"line":1731},[28,108445,101408],{"class":64},[28,108447,108448],{"class":30,"line":1752},[28,108449,108160],{"class":64},[28,108451,108452],{"class":30,"line":1757},[28,108453,101418],{"class":64},[28,108455,108456],{"class":30,"line":1771},[28,108457,101423],{"class":64},[28,108459,108460],{"class":30,"line":1776},[28,108461,101428],{"class":64},[28,108463,108464],{"class":30,"line":1805},[28,108465,95749],{"class":64},[28,108467,108468],{"class":30,"line":1810},[28,108469,2477],{"emptyLinePlaceholder":134},[28,108471,108472],{"class":30,"line":1827},[28,108473,2477],{"emptyLinePlaceholder":134},[28,108475,108476,108478,108480,108482,108484],{"class":30,"line":1832},[28,108477,31998],{"class":207},[28,108479,2050],{"class":34},[28,108481,101449],{"class":211},[28,108483,95737],{"class":38},[28,108485,3816],{"class":211},[28,108487,108488,108490,108492,108494,108496],{"class":30,"line":1837},[28,108489,101458],{"class":211},[28,108491,257],{"class":207},[28,108493,101463],{"class":211},[28,108495,101365],{"class":38},[28,108497,218],{"class":211},[28,108499,108500,108502,108504],{"class":30,"line":1842},[28,108501,101472],{"class":211},[28,108503,257],{"class":207},[28,108505,101477],{"class":211},[28,108507,108508,108511,108513,108515,108517,108519,108521,108523,108525,108527,108529],{"class":30,"line":1856},[28,108509,108510],{"class":211},"    renderer ",[28,108512,257],{"class":207},[28,108514,107925],{"class":211},[28,108516,25052],{"class":5293},[28,108518,257],{"class":207},[28,108520,42393],{"class":38},[28,108522,12512],{"class":211},[28,108524,25048],{"class":5293},[28,108526,257],{"class":207},[28,108528,107940],{"class":38},[28,108530,218],{"class":211},[28,108532,108533],{"class":30,"line":1861},[28,108534,2477],{"emptyLinePlaceholder":134},[28,108536,108537,108539,108541,108543,108545,108547,108549],{"class":30,"line":2654},[28,108538,3278],{"class":207},[28,108540,101552],{"class":211},[28,108542,26094],{"class":207},[28,108544,32494],{"class":38},[28,108546,212],{"class":211},[28,108548,521],{"class":38},[28,108550,30837],{"class":211},[28,108552,108553],{"class":30,"line":2668},[28,108554,101567],{"class":211},[28,108556,108557],{"class":30,"line":2676},[28,108558,2477],{"emptyLinePlaceholder":134},[28,108560,108561,108564,108567,108569,108572],{"class":30,"line":2681},[28,108562,108563],{"class":211},"    renderer.update_scene(data, ",[28,108565,108566],{"class":5293},"camera",[28,108568,257],{"class":207},[28,108570,108571],{"class":64},"\"fixed_camera\"",[28,108573,218],{"class":211},[28,108575,108576,108579,108581],{"class":30,"line":2687},[28,108577,108578],{"class":211},"    image ",[28,108580,257],{"class":207},[28,108582,107636],{"class":211},[28,108584,108585],{"class":30,"line":2693},[28,108586,2477],{"emptyLinePlaceholder":134},[28,108588,108589,108592,108594,108597,108599],{"class":30,"line":2698},[28,108590,108591],{"class":211},"    output_path ",[28,108593,257],{"class":207},[28,108595,108596],{"class":211}," Path(",[28,108598,108066],{"class":64},[28,108600,218],{"class":211},[28,108602,108603],{"class":30,"line":8025},[28,108604,108605],{"class":211},"    Image.fromarray(image).save(output_path)\n",[28,108607,108608],{"class":30,"line":8049},[28,108609,108610],{"class":211},"    renderer.close()\n",[28,108612,108613],{"class":30,"line":8054},[28,108614,2477],{"emptyLinePlaceholder":134},[28,108616,108617,108619,108621,108624],{"class":30,"line":8060},[28,108618,31350],{"class":38},[28,108620,212],{"class":211},[28,108622,108623],{"class":64},"\"saved:\"",[28,108625,108626],{"class":211},", output_path.resolve())\n",[28,108628,108629,108631,108633,108636],{"class":30,"line":8087},[28,108630,31350],{"class":38},[28,108632,212],{"class":211},[28,108634,108635],{"class":64},"\"image shape:\"",[28,108637,108638],{"class":211},", image.shape)\n",[28,108640,108641],{"class":30,"line":8092},[28,108642,2477],{"emptyLinePlaceholder":134},[28,108644,108645],{"class":30,"line":8098},[28,108646,2477],{"emptyLinePlaceholder":134},[28,108648,108649,108651,108653,108655,108657],{"class":30,"line":8110},[28,108650,1609],{"class":207},[28,108652,31271],{"class":38},[28,108654,101610],{"class":207},[28,108656,101613],{"class":64},[28,108658,3816],{"class":211},[28,108660,108661],{"class":30,"line":8122},[28,108662,101620],{"class":211},[14,108664,103621],{},[18,108666,108668],{"className":20,"code":108667,"language":22,"meta":23,"style":23},"touch ch5_renderer.py\n",[25,108669,108670],{"__ignoreMap":23},[28,108671,108672,108674],{"class":30,"line":31},[28,108673,101334],{"class":34},[28,108675,108676],{"class":64}," ch5_renderer.py\n",[177,108678,101623],{"id":101623},[14,108680,108681],{},"viewer 上下文：",[18,108683,108685],{"className":30429,"code":108684,"language":30431,"meta":23,"style":23},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[25,108686,108687],{"__ignoreMap":23},[28,108688,108689,108691,108693,108695],{"class":30,"line":31},[28,108690,107884],{"class":207},[28,108692,107887],{"class":211},[28,108694,31434],{"class":207},[28,108696,107892],{"class":211},[14,108698,108699,108701],{},[25,108700,107884],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108703,108704],{},"窗口循环：",[18,108706,108708],{"className":30429,"code":108707,"language":30431,"meta":23,"style":23},"while viewer.is_running() and data.time \u003C 5.0:\n",[25,108709,108710],{"__ignoreMap":23},[28,108711,108712,108715,108717,108719,108721,108723,108725],{"class":30,"line":31},[28,108713,108714],{"class":207},"while",[28,108716,108238],{"class":211},[28,108718,30513],{"class":207},[28,108720,108243],{"class":211},[28,108722,1120],{"class":207},[28,108724,108248],{"class":38},[28,108726,3816],{"class":211},[14,108728,108729],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108731,108732],{},"固定相机：",[18,108734,108736],{"className":53118,"code":108735,"language":53120,"meta":23,"style":23},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[25,108737,108738],{"__ignoreMap":23},[28,108739,108740,108742,108744,108746,108748,108750,108752,108754,108757,108760,108762,108765],{"class":30,"line":31},[28,108741,1120],{"class":211},[28,108743,108566],{"class":51351},[28,108745,14997],{"class":34},[28,108747,257],{"class":211},[28,108749,108571],{"class":64},[28,108751,101157],{"class":34},[28,108753,257],{"class":211},[28,108755,108756],{"class":64},"\"1.5 -2.0 1.2\"",[28,108758,108759],{"class":34}," xyaxes",[28,108761,257],{"class":211},[28,108763,108764],{"class":64},"\"1 0.75 0 0 0 1\"",[28,108766,101195],{"class":211},[14,108768,108769],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[177,108771,108773],{"id":108772},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[18,108775,108777],{"className":30429,"code":108776,"language":30431,"meta":23,"style":23},"import time\n",[25,108778,108779],{"__ignoreMap":23},[28,108780,108781,108783],{"class":30,"line":31},[28,108782,30443],{"class":207},[28,108784,31880],{"class":211},[14,108786,108787],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[18,108789,108791],{"className":30429,"code":108790,"language":30431,"meta":23,"style":23},"import mujoco\nimport mujoco.viewer\n",[25,108792,108793,108799],{"__ignoreMap":23},[28,108794,108795,108797],{"class":30,"line":31},[28,108796,30443],{"class":207},[28,108798,101352],{"class":211},[28,108800,108801,108803],{"class":30,"line":42},[28,108802,30443],{"class":207},[28,108804,107603],{"class":211},[14,108806,108807],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[18,108809,108810],{"className":30429,"code":108684,"language":30431,"meta":23,"style":23},[25,108811,108812],{"__ignoreMap":23},[28,108813,108814,108816,108818,108820],{"class":30,"line":31},[28,108815,107884],{"class":207},[28,108817,107887],{"class":211},[28,108819,31434],{"class":207},[28,108821,107892],{"class":211},[14,108823,108824,108825,108828],{},"打开一个 viewer 窗口。",[25,108826,108827],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[18,108830,108831],{"className":30429,"code":108707,"language":30431,"meta":23,"style":23},[25,108832,108833],{"__ignoreMap":23},[28,108834,108835,108837,108839,108841,108843,108845,108847],{"class":30,"line":31},[28,108836,108714],{"class":207},[28,108838,108238],{"class":211},[28,108840,30513],{"class":207},[28,108842,108243],{"class":211},[28,108844,1120],{"class":207},[28,108846,108248],{"class":38},[28,108848,3816],{"class":211},[14,108850,108851,108852,108855],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[25,108853,108854],{},"viewer.is_running()"," 会变成 false，循环结束。",[18,108857,108859],{"className":30429,"code":108858,"language":30431,"meta":23,"style":23},"step_start = time.time()\n",[25,108860,108861],{"__ignoreMap":23},[28,108862,108863,108866,108868],{"class":30,"line":31},[28,108864,108865],{"class":211},"step_start ",[28,108867,257],{"class":207},[28,108869,108260],{"class":211},[14,108871,108872],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[18,108874,108875],{"className":30429,"code":107969,"language":30431,"meta":23,"style":23},[25,108876,108877,108881],{"__ignoreMap":23},[28,108878,108879],{"class":30,"line":31},[28,108880,104556],{"class":211},[28,108882,108883],{"class":30,"line":42},[28,108884,107980],{"class":211},[14,108886,108887,108889,108890,108892,108893,108895,108896,108899],{},[25,108888,101266],{}," 推进物理仿真。",[25,108891,107988],{}," 把最新的 ",[25,108894,33452],{}," 同步到窗口里显示。没有 ",[25,108897,108898],{},"sync()","，窗口可能看不到最新状态。",[18,108901,108902],{"className":30429,"code":107999,"language":30431,"meta":23,"style":23},[25,108903,108904],{"__ignoreMap":23},[28,108905,108906,108908,108910,108912,108914,108916,108918],{"class":30,"line":31},[28,108907,108006],{"class":211},[28,108909,257],{"class":207},[28,108911,108011],{"class":211},[28,108913,742],{"class":207},[28,108915,108016],{"class":211},[28,108917,742],{"class":207},[28,108919,108021],{"class":211},[14,108921,108922],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[18,108924,108926],{"className":30429,"code":108925,"language":30431,"meta":23,"style":23},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[25,108927,108928,108940],{"__ignoreMap":23},[28,108929,108930,108932,108934,108936,108938],{"class":30,"line":31},[28,108931,1609],{"class":207},[28,108933,108298],{"class":211},[28,108935,1170],{"class":207},[28,108937,4170],{"class":38},[28,108939,3816],{"class":211},[28,108941,108942],{"class":30,"line":42},[28,108943,108944],{"class":211},"    time.sleep(sleep_time)\n",[14,108946,108947],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[177,108949,108951],{"id":108950},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[18,108953,108955],{"className":30429,"code":108954,"language":30431,"meta":23,"style":23},"from pathlib import Path\n",[25,108956,108957],{"__ignoreMap":23},[28,108958,108959,108961,108963,108965],{"class":30,"line":31},[28,108960,30788],{"class":207},[28,108962,108362],{"class":211},[28,108964,30443],{"class":207},[28,108966,108367],{"class":211},[14,108968,108969,108970,108973,108974,108977],{},"导入 ",[25,108971,108972],{},"Path","，用来处理文件路径。相比直接写字符串，",[25,108975,108976],{},"Path(\"render_output.png\")"," 更清晰。",[18,108979,108981],{"className":30429,"code":108980,"language":30431,"meta":23,"style":23},"from PIL import Image\n",[25,108982,108983],{"__ignoreMap":23},[28,108984,108985,108987,108989,108991],{"class":30,"line":31},[28,108986,30788],{"class":207},[28,108988,47314],{"class":38},[28,108990,47317],{"class":207},[28,108992,47320],{"class":211},[14,108994,108995],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[18,108997,108998],{"className":53118,"code":108735,"language":53120,"meta":23,"style":23},[25,108999,109000],{"__ignoreMap":23},[28,109001,109002,109004,109006,109008,109010,109012,109014,109016,109018,109020,109022,109024],{"class":30,"line":31},[28,109003,1120],{"class":211},[28,109005,108566],{"class":51351},[28,109007,14997],{"class":34},[28,109009,257],{"class":211},[28,109011,108571],{"class":64},[28,109013,101157],{"class":34},[28,109015,257],{"class":211},[28,109017,108756],{"class":64},[28,109019,108759],{"class":34},[28,109021,257],{"class":211},[28,109023,108764],{"class":64},[28,109025,101195],{"class":211},[14,109027,109028,109029,109031,109032,109034,109035,109038,109039,109041],{},"定义一个相机。",[25,109030,79861],{}," 是相机名字。",[25,109033,104197],{}," 是相机在世界里的位置。",[25,109036,109037],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[25,109040,104197],{}," 来调视角。",[18,109043,109045],{"className":30429,"code":109044,"language":30431,"meta":23,"style":23},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[25,109046,109047],{"__ignoreMap":23},[28,109048,109049,109051,109053,109055,109057,109059,109061,109063,109065,109067,109069],{"class":30,"line":31},[28,109050,107621],{"class":211},[28,109052,257],{"class":207},[28,109054,107925],{"class":211},[28,109056,25052],{"class":5293},[28,109058,257],{"class":207},[28,109060,42393],{"class":38},[28,109062,12512],{"class":211},[28,109064,25048],{"class":5293},[28,109066,257],{"class":207},[28,109068,107940],{"class":38},[28,109070,218],{"class":211},[14,109072,109073,109074,101069,109076,109078],{},"创建离屏渲染器。",[25,109075,25052],{},[25,109077,25048],{}," 决定输出图片大小。",[18,109080,109081],{"className":30429,"code":101727,"language":30431,"meta":23,"style":23},[25,109082,109083,109099],{"__ignoreMap":23},[28,109084,109085,109087,109089,109091,109093,109095,109097],{"class":30,"line":31},[28,109086,3102],{"class":207},[28,109088,101552],{"class":211},[28,109090,26094],{"class":207},[28,109092,32494],{"class":38},[28,109094,212],{"class":211},[28,109096,521],{"class":38},[28,109098,30837],{"class":211},[28,109100,109101],{"class":30,"line":42},[28,109102,101750],{"class":211},[14,109104,109105],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[18,109107,109109],{"className":30429,"code":109108,"language":30431,"meta":23,"style":23},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[25,109110,109111],{"__ignoreMap":23},[28,109112,109113,109116,109118,109120,109122],{"class":30,"line":31},[28,109114,109115],{"class":211},"renderer.update_scene(data, ",[28,109117,108566],{"class":5293},[28,109119,257],{"class":207},[28,109121,108571],{"class":64},[28,109123,218],{"class":211},[14,109125,109126,109127,109129,109130,109133],{},"告诉 renderer：用当前 ",[25,109128,33452],{}," 的状态更新画面，并使用名为 ",[25,109131,109132],{},"fixed_camera"," 的相机视角。",[18,109135,109136],{"className":30429,"code":108031,"language":30431,"meta":23,"style":23},[25,109137,109138],{"__ignoreMap":23},[28,109139,109140,109142,109144],{"class":30,"line":31},[28,109141,107631],{"class":211},[28,109143,257],{"class":207},[28,109145,107636],{"class":211},[14,109147,109148,109149,109152],{},"真正渲染出图像。",[25,109150,109151],{},"image"," 是一个 NumPy 数组，不是文件。",[18,109154,109156],{"className":30429,"code":109155,"language":30431,"meta":23,"style":23},"Image.fromarray(image).save(output_path)\n",[25,109157,109158],{"__ignoreMap":23},[28,109159,109160],{"class":30,"line":31},[28,109161,109155],{"class":211},[14,109163,109164,109165,28436],{},"把数组转换成图片，并保存到 ",[25,109166,109167],{},"render_output.png",[18,109169,109171],{"className":30429,"code":109170,"language":30431,"meta":23,"style":23},"renderer.close()\n",[25,109172,109173],{"__ignoreMap":23},[28,109174,109175],{"class":30,"line":31},[28,109176,109170],{"class":211},[14,109178,109179],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[149,109181,102367],{"id":102366},[14,109183,109184,109185,109187,109188,28436],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[25,109186,109167],{},"，并输出图像数组形状，例如 ",[25,109189,109190],{},"(480, 640, 3)",[14,109192,109193],{},"如果图片里看不到方块，先检查：",[161,109195,109196,109199,109202],{},[119,109197,109198],{},"方块是否掉到相机视野外。",[119,109200,109201],{},"camera 位置是否合理。",[119,109203,109204,109205,109208],{},"是否在 ",[25,109206,109207],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[149,109210,102399],{"id":102398},[14,109212,109213],{},"运行 viewer:",[18,109215,109217],{"className":20,"code":109216,"language":22,"meta":23,"style":23},"python ch5_viewer.py\n",[25,109218,109219],{"__ignoreMap":23},[28,109220,109221,109223],{"class":30,"line":31},[28,109222,30431],{"class":34},[28,109224,108347],{"class":64},[14,109226,109227],{},"运行 renderer:",[18,109229,109231],{"className":20,"code":109230,"language":22,"meta":23,"style":23},"python ch5_renderer.py\n",[25,109232,109233],{"__ignoreMap":23},[28,109234,109235,109237],{"class":30,"line":31},[28,109236,30431],{"class":34},[28,109238,108676],{"class":64},[14,109240,109241],{},"如果在服务器上运行:",[18,109243,109245],{"className":20,"code":109244,"language":22,"meta":23,"style":23},"MUJOCO_GL=egl python ch5_renderer.py\n",[25,109246,109247],{"__ignoreMap":23},[28,109248,109249,109251,109253,109255,109258],{"class":30,"line":31},[28,109250,107865],{"class":211},[28,109252,257],{"class":207},[28,109254,107855],{"class":64},[28,109256,109257],{"class":34}," python",[28,109259,108676],{"class":64},[14,109261,107833],{},[18,109263,109265],{"className":20,"code":109264,"language":22,"meta":23,"style":23},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[25,109266,109267],{"__ignoreMap":23},[28,109268,109269,109271,109273,109275,109277],{"class":30,"line":31},[28,109270,107865],{"class":211},[28,109272,257],{"class":207},[28,109274,107859],{"class":64},[28,109276,109257],{"class":34},[28,109278,108676],{"class":64},[14,109280,109281],{},"再做几个练习：",[161,109283,109284,109291,109294,109300],{},[119,109285,109286,109287,109290],{},"把 renderer 分辨率改成 ",[25,109288,109289],{},"height=240, width=320","，观察输出 shape。",[119,109292,109293],{},"把方块颜色改成蓝色，重新保存图片。",[119,109295,109296,109297,109299],{},"把相机 ",[25,109298,104197],{}," 改远一点，观察画面中物体是否变小。",[119,109301,109302,109303,102465,109306,109309],{},"把 viewer 示例中的 ",[25,109304,109305],{},"data.time \u003C 5.0",[25,109307,109308],{},"data.time \u003C 20.0","，观察更长时间。",[149,109311,102504],{"id":102503},[177,109313,109315],{"id":109314},"viewer-窗口打不开","viewer 窗口打不开",[14,109317,109318],{},"安装:",[18,109320,109322],{"className":20,"code":109321,"language":22,"meta":23,"style":23},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[25,109323,109324],{"__ignoreMap":23},[28,109325,109326,109328,109330,109332,109334,109336,109338,109340,109342,109344,109346],{"class":30,"line":31},[28,109327,24652],{"class":34},[28,109329,26366],{"class":64},[28,109331,23909],{"class":64},[28,109333,26451],{"class":38},[28,109335,102557],{"class":64},[28,109337,100885],{"class":64},[28,109339,102562],{"class":64},[28,109341,100898],{"class":64},[28,109343,100904],{"class":64},[28,109345,100895],{"class":64},[28,109347,109348],{"class":64}," libXinerama\n",[177,109350,109352],{"id":109351},"glfwerror",[25,109353,109354],{},"GLFWError",[14,109356,109357],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[177,109359,109361],{"id":109360},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109363,109364,109365,82590,109367,109369],{},"尝试 ",[25,109366,101088],{},[25,109368,101091],{},"。可能存在版本差异。",[177,109371,109372],{"id":109372},"保存图片是黑的",[14,109374,102626],{},[161,109376,109377,109380,109383,109393],{},[119,109378,109379],{},"XML 里是否有 light。",[119,109381,109382],{},"相机是否对着模型。",[119,109384,109385,109386,109389,109390,28436],{},"是否先 ",[25,109387,109388],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[25,109391,109392],{},"renderer.render()",[119,109394,109395],{},"物体是否已经掉出视野。",[177,109397,109398],{"id":109398},"远程服务器没有显示器",[14,109400,109401],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[18,109403,109404],{"className":20,"code":109244,"language":22,"meta":23,"style":23},[25,109405,109406],{"__ignoreMap":23},[28,109407,109408,109410,109412,109414,109416],{"class":30,"line":31},[28,109409,107865],{"class":211},[28,109411,257],{"class":207},[28,109413,107855],{"class":64},[28,109415,109257],{"class":34},[28,109417,108676],{"class":64},[14,109419,109420],{},"如果 EGL 不可用，再尝试：",[18,109422,109423],{"className":20,"code":109264,"language":22,"meta":23,"style":23},[25,109424,109425],{"__ignoreMap":23},[28,109426,109427,109429,109431,109433,109435],{"class":30,"line":31},[28,109428,107865],{"class":211},[28,109430,257],{"class":207},[28,109432,107859],{"class":64},[28,109434,109257],{"class":34},[28,109436,108676],{"class":64},[149,109438,102658],{"id":102657},[14,109440,109441],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[161,109443,109444,109447,109450],{},[119,109445,109446],{},"先用 viewer 看模型和控制是否正常。",[119,109448,109449],{},"再用 renderer 保存图片或构造视觉观测。",[119,109451,109452],{},"最后把状态、动作、图像、奖励组织成训练数据。",[126,109454,109455],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":23,"searchDepth":42,"depth":42,"links":109457},[109458,109459,109460,109465,109470,109471,109472,109479],{"id":100697,"depth":42,"text":100698},{"id":100820,"depth":42,"text":100821},{"id":101095,"depth":42,"text":101096,"children":109461},[109462,109463,109464],{"id":107962,"depth":50,"text":107963},{"id":107992,"depth":50,"text":107993},{"id":108027,"depth":50,"text":108028},{"id":101303,"depth":42,"text":101304,"children":109466},[109467,109468,109469],{"id":101623,"depth":50,"text":101623},{"id":108772,"depth":50,"text":108773},{"id":108950,"depth":50,"text":108951},{"id":102366,"depth":42,"text":102367},{"id":102398,"depth":42,"text":102399},{"id":102503,"depth":42,"text":102504,"children":109473},[109474,109475,109476,109477,109478],{"id":109314,"depth":50,"text":109315},{"id":109351,"depth":50,"text":109354},{"id":109360,"depth":50,"text":109361},{"id":109372,"depth":50,"text":109372},{"id":109398,"depth":50,"text":109398},{"id":102657,"depth":42,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107570,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109486,"title":109487,"body":109488,"description":23,"extension":132,"meta":111399,"navigation":134,"path":111400,"seo":111401,"stem":111402,"__hash__":111403},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109489,"toc":111375},[109490,109493,109495,109498,109500,109519,109522,109528,109531,109533,109535,109559,109561,109575,109577,109618,109620,109631,109633,109636,109642,109645,109679,109682,109714,109717,109749,109753,109756,109796,109799,109805,109808,109814,109818,109821,109827,109830,109834,109837,109877,109879,109892,109895,109897,110479,110481,110493,110496,110507,110509,110512,110531,110543,110546,110567,110570,110573,110616,110619,110622,110642,110649,110651,110669,110684,110687,110693,110696,110702,110719,110726,110757,110768,110802,110813,110830,110839,110847,110852,110866,110869,110890,110896,110910,110915,110945,110955,110980,110988,111011,111014,111030,111033,111041,111047,111069,111082,111103,111112,111151,111162,111164,111167,111173,111176,111179,111185,111188,111208,111211,111213,111252,111254,111257,111265,111268,111271,111298,111301,111311,111317,111320,111326,111328,111334,111338,111341,111343,111346,111370,111373],[10,109491,109487],{"id":109492},"_6控制任务cartpole",[149,109494,100698],{"id":100697},[14,109496,109497],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109499,104382],{},[161,109501,109502,109505,109507,109510,109513,109516],{},[119,109503,109504],{},"slide joint",[119,109506,106235],{},[119,109508,109509],{},"cart force actuator",[119,109511,109512],{},"状态观测",[119,109514,109515],{},"简单控制循环",[119,109517,109518],{},"reward 设计雏形",[14,109520,109521],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[18,109523,109526],{"className":109524,"code":109525,"language":5264,"meta":23},[5262],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[25,109527,109525],{"__ignoreMap":23},[14,109529,109530],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[149,109532,100821],{"id":100820},[14,109534,100824],{},[18,109536,109537],{"className":20,"code":104439,"language":22,"meta":23,"style":23},[25,109538,109539],{"__ignoreMap":23},[28,109540,109541,109543,109545,109547,109549,109551,109553,109555,109557],{"class":30,"line":31},[28,109542,24652],{"class":34},[28,109544,26366],{"class":64},[28,109546,23909],{"class":64},[28,109548,26451],{"class":38},[28,109550,104454],{"class":64},[28,109552,100849],{"class":64},[28,109554,102552],{"class":64},[28,109556,100865],{"class":64},[28,109558,104463],{"class":64},[14,109560,102870],{},[18,109562,109563],{"className":20,"code":100970,"language":22,"meta":23,"style":23},[25,109564,109565],{"__ignoreMap":23},[28,109566,109567,109569,109571,109573],{"class":30,"line":31},[28,109568,23906],{"class":34},[28,109570,23909],{"class":64},[28,109572,100981],{"class":64},[28,109574,100984],{"class":64},[14,109576,102887],{},[18,109578,109580],{"className":20,"code":109579,"language":22,"meta":23,"style":23},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[25,109581,109582,109599,109608],{"__ignoreMap":23},[28,109583,109584,109586,109588,109590,109593,109595,109597],{"class":30,"line":31},[28,109585,30381],{"class":34},[28,109587,29227],{"class":64},[28,109589,25186],{"class":38},[28,109591,109592],{"class":64}," mujoco-cartpole",[28,109594,101026],{"class":64},[28,109596,101029],{"class":38},[28,109598,101032],{"class":38},[28,109600,109601,109603,109605],{"class":30,"line":42},[28,109602,30381],{"class":34},[28,109604,101039],{"class":64},[28,109606,109607],{"class":64}," mujoco-cartpole\n",[28,109609,109610,109612,109614,109616],{"class":30,"line":50},[28,109611,23906],{"class":34},[28,109613,23909],{"class":64},[28,109615,100981],{"class":64},[28,109617,100984],{"class":64},[14,109619,101055],{},[161,109621,109622,109625,109628],{},[119,109623,109624],{},"本章不依赖 Gymnasium。",[119,109626,109627],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[119,109629,109630],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[149,109632,101096],{"id":101095},[14,109634,109635],{},"Cartpole 的模型结构:",[18,109637,109640],{"className":109638,"code":109639,"language":5264,"meta":23},[5262],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[25,109641,109639],{"__ignoreMap":23},[14,109643,109644],{},"小车通过 slide joint 左右移动:",[18,109646,109648],{"className":53118,"code":109647,"language":53120,"meta":23,"style":23},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[25,109649,109650],{"__ignoreMap":23},[28,109651,109652,109654,109656,109658,109660,109663,109665,109667,109670,109672,109674,109677],{"class":30,"line":31},[28,109653,1120],{"class":211},[28,109655,103007],{"class":51351},[28,109657,14997],{"class":34},[28,109659,257],{"class":211},[28,109661,109662],{"class":64},"\"cart_x\"",[28,109664,53875],{"class":34},[28,109666,257],{"class":211},[28,109668,109669],{"class":64},"\"slide\"",[28,109671,106079],{"class":34},[28,109673,257],{"class":211},[28,109675,109676],{"class":64},"\"1 0 0\"",[28,109678,101195],{"class":211},[14,109680,109681],{},"杆子通过 hinge joint 旋转:",[18,109683,109685],{"className":53118,"code":109684,"language":53120,"meta":23,"style":23},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[25,109686,109687],{"__ignoreMap":23},[28,109688,109689,109691,109693,109695,109697,109700,109702,109704,109706,109708,109710,109712],{"class":30,"line":31},[28,109690,1120],{"class":211},[28,109692,103007],{"class":51351},[28,109694,14997],{"class":34},[28,109696,257],{"class":211},[28,109698,109699],{"class":64},"\"pole_hinge\"",[28,109701,53875],{"class":34},[28,109703,257],{"class":211},[28,109705,106070],{"class":64},[28,109707,106079],{"class":34},[28,109709,257],{"class":211},[28,109711,106084],{"class":64},[28,109713,101195],{"class":211},[14,109715,109716],{},"控制力作用在小车 slide joint 上:",[18,109718,109720],{"className":53118,"code":109719,"language":53120,"meta":23,"style":23},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[25,109721,109722],{"__ignoreMap":23},[28,109723,109724,109726,109728,109730,109732,109735,109737,109739,109741,109743,109745,109747],{"class":30,"line":31},[28,109725,1120],{"class":211},[28,109727,106125],{"class":51351},[28,109729,14997],{"class":34},[28,109731,257],{"class":211},[28,109733,109734],{"class":64},"\"cart_motor\"",[28,109736,106135],{"class":34},[28,109738,257],{"class":211},[28,109740,109662],{"class":64},[28,109742,106142],{"class":34},[28,109744,257],{"class":211},[28,109746,54367],{"class":64},[28,109748,101195],{"class":211},[177,109750,109752],{"id":109751},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109754,109755],{},"这个简化模型有两个关节：",[347,109757,109758,109769],{},[350,109759,109760],{},[353,109761,109762,109764,109766],{},[356,109763,102810],{"align":23813},[356,109765,23814],{"align":23813},[356,109767,109768],{"align":23813},"对应状态",[394,109770,109771,109784],{},[353,109772,109773,109778,109781],{},[399,109774,109775],{"align":23813},[25,109776,109777],{},"cart_x",[399,109779,109780],{"align":23813},"slide",[399,109782,109783],{"align":23813},"小车 x 位置",[353,109785,109786,109791,109793],{},[399,109787,109788],{"align":23813},[25,109789,109790],{},"pole_hinge",[399,109792,105891],{"align":23813},[399,109794,109795],{"align":23813},"杆子角度",[14,109797,109798],{},"所以：",[18,109800,109803],{"className":109801,"code":109802,"language":5264,"meta":23},[5262],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[25,109804,109802],{"__ignoreMap":23},[14,109806,109807],{},"把它们拼起来就是观测：",[18,109809,109812],{"className":109810,"code":109811,"language":5264,"meta":23},[5262],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[25,109813,109811],{"__ignoreMap":23},[177,109815,109817],{"id":109816},"action-是什么","action 是什么",[14,109819,109820],{},"本章只有一个 actuator：",[18,109822,109825],{"className":109823,"code":109824,"language":5264,"meta":23},[5262],"data.ctrl[0] = action\n",[25,109826,109824],{"__ignoreMap":23},[14,109828,109829],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[177,109831,109833],{"id":109832},"reward-是什么","reward 是什么",[14,109835,109836],{},"奖励函数：",[18,109838,109840],{"className":30429,"code":109839,"language":30431,"meta":23,"style":23},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[25,109841,109842],{"__ignoreMap":23},[28,109843,109844,109846,109849,109851,109853,109855,109858,109860,109863,109865,109867,109869,109872,109874],{"class":30,"line":31},[28,109845,17123],{"class":207},[28,109847,109848],{"class":38}," float",[28,109850,212],{"class":211},[28,109852,102454],{"class":38},[28,109854,52322],{"class":207},[28,109856,109857],{"class":38}," 0.1",[28,109859,6595],{"class":207},[28,109861,109862],{"class":211}," cart_x ",[28,109864,665],{"class":207},[28,109866,109862],{"class":211},[28,109868,742],{"class":207},[28,109870,109871],{"class":211}," pole_angle ",[28,109873,665],{"class":207},[28,109875,109876],{"class":211}," pole_angle)\n",[14,109878,106277],{},[161,109880,109881,109886,109889],{},[119,109882,109883,109884,28436],{},"基础奖励是 ",[25,109885,102454],{},[119,109887,109888],{},"小车离中心越远，扣分越多。",[119,109890,109891],{},"杆子角度越大，扣分越多。",[14,109893,109894],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[149,109896,101304],{"id":101303},[18,109898,109900],{"className":30429,"code":109899,"language":30431,"meta":23,"style":23},"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",[25,109901,109902,109908,109918,109922,109926,109934,109939,109943,109947,109951,109956,109960,109965,109970,109975,109979,109984,109989,109994,109998,110002,110006,110010,110014,110019,110023,110027,110031,110035,110039,110049,110056,110060,110064,110078,110092,110105,110135,110139,110143,110155,110167,110175,110179,110192,110196,110200,110209,110213,110229,110239,110252,110265,110269,110292,110310,110314,110326,110330,110334,110344,110354,110358,110374,110415,110419,110439,110455,110459,110463,110475],{"__ignoreMap":23},[28,109903,109904,109906],{"class":30,"line":31},[28,109905,30443],{"class":207},[28,109907,101352],{"class":211},[28,109909,109910,109912,109914,109916],{"class":30,"line":42},[28,109911,30443],{"class":207},[28,109913,31431],{"class":211},[28,109915,31434],{"class":207},[28,109917,31437],{"class":211},[28,109919,109920],{"class":30,"line":50},[28,109921,2477],{"emptyLinePlaceholder":134},[28,109923,109924],{"class":30,"line":58},[28,109925,2477],{"emptyLinePlaceholder":134},[28,109927,109928,109930,109932],{"class":30,"line":70},[28,109929,101365],{"class":38},[28,109931,13641],{"class":207},[28,109933,101370],{"class":64},[28,109935,109936],{"class":30,"line":78},[28,109937,109938],{"class":64},"\u003Cmujoco model=\"cartpole\">\n",[28,109940,109941],{"class":30,"line":86},[28,109942,101380],{"class":64},[28,109944,109945],{"class":30,"line":97},[28,109946,2477],{"emptyLinePlaceholder":134},[28,109948,109949],{"class":30,"line":108},[28,109950,101389],{"class":64},[28,109952,109953],{"class":30,"line":1407},[28,109954,109955],{"class":64},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[28,109957,109958],{"class":30,"line":1690},[28,109959,2477],{"emptyLinePlaceholder":134},[28,109961,109962],{"class":30,"line":1695},[28,109963,109964],{"class":64},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[28,109966,109967],{"class":30,"line":1701},[28,109968,109969],{"class":64},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[28,109971,109972],{"class":30,"line":1706},[28,109973,109974],{"class":64},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[28,109976,109977],{"class":30,"line":1720},[28,109978,2477],{"emptyLinePlaceholder":134},[28,109980,109981],{"class":30,"line":1725},[28,109982,109983],{"class":64},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[28,109985,109986],{"class":30,"line":1731},[28,109987,109988],{"class":64},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[28,109990,109991],{"class":30,"line":1752},[28,109992,109993],{"class":64},"        \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",[28,109995,109996],{"class":30,"line":1757},[28,109997,106489],{"class":64},[28,109999,110000],{"class":30,"line":1771},[28,110001,101418],{"class":64},[28,110003,110004],{"class":30,"line":1776},[28,110005,101423],{"class":64},[28,110007,110008],{"class":30,"line":1805},[28,110009,2477],{"emptyLinePlaceholder":134},[28,110011,110012],{"class":30,"line":1810},[28,110013,106506],{"class":64},[28,110015,110016],{"class":30,"line":1827},[28,110017,110018],{"class":64},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,110020,110021],{"class":30,"line":1832},[28,110022,106516],{"class":64},[28,110024,110025],{"class":30,"line":1837},[28,110026,101428],{"class":64},[28,110028,110029],{"class":30,"line":1842},[28,110030,95749],{"class":64},[28,110032,110033],{"class":30,"line":1856},[28,110034,2477],{"emptyLinePlaceholder":134},[28,110036,110037],{"class":30,"line":1861},[28,110038,2477],{"emptyLinePlaceholder":134},[28,110040,110041,110043,110046],{"class":30,"line":2654},[28,110042,31998],{"class":207},[28,110044,110045],{"class":34}," get_observation",[28,110047,110048],{"class":211},"(data: mujoco.MjData) -> np.ndarray:\n",[28,110050,110051,110053],{"class":30,"line":2668},[28,110052,4167],{"class":207},[28,110054,110055],{"class":211}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[28,110057,110058],{"class":30,"line":2676},[28,110059,2477],{"emptyLinePlaceholder":134},[28,110061,110062],{"class":30,"line":2681},[28,110063,2477],{"emptyLinePlaceholder":134},[28,110065,110066,110068,110071,110074,110076],{"class":30,"line":2687},[28,110067,31998],{"class":207},[28,110069,110070],{"class":34}," compute_reward",[28,110072,110073],{"class":211},"(obs: np.ndarray) -> ",[28,110075,251],{"class":38},[28,110077,3816],{"class":211},[28,110079,110080,110083,110085,110088,110090],{"class":30,"line":2693},[28,110081,110082],{"class":211},"    cart_x ",[28,110084,257],{"class":207},[28,110086,110087],{"class":211}," obs[",[28,110089,401],{"class":38},[28,110091,33297],{"class":211},[28,110093,110094,110097,110099,110101,110103],{"class":30,"line":2698},[28,110095,110096],{"class":211},"    pole_angle ",[28,110098,257],{"class":207},[28,110100,110087],{"class":211},[28,110102,427],{"class":38},[28,110104,33297],{"class":211},[28,110106,110107,110109,110111,110113,110115,110117,110119,110121,110123,110125,110127,110129,110131,110133],{"class":30,"line":8025},[28,110108,4167],{"class":207},[28,110110,109848],{"class":38},[28,110112,212],{"class":211},[28,110114,102454],{"class":38},[28,110116,52322],{"class":207},[28,110118,109857],{"class":38},[28,110120,6595],{"class":207},[28,110122,109862],{"class":211},[28,110124,665],{"class":207},[28,110126,109862],{"class":211},[28,110128,742],{"class":207},[28,110130,109871],{"class":211},[28,110132,665],{"class":207},[28,110134,109876],{"class":211},[28,110136,110137],{"class":30,"line":8049},[28,110138,2477],{"emptyLinePlaceholder":134},[28,110140,110141],{"class":30,"line":8054},[28,110142,2477],{"emptyLinePlaceholder":134},[28,110144,110145,110147,110149,110151,110153],{"class":30,"line":8060},[28,110146,31998],{"class":207},[28,110148,2050],{"class":34},[28,110150,101449],{"class":211},[28,110152,95737],{"class":38},[28,110154,3816],{"class":211},[28,110156,110157,110159,110161,110163,110165],{"class":30,"line":8087},[28,110158,101458],{"class":211},[28,110160,257],{"class":207},[28,110162,101463],{"class":211},[28,110164,101365],{"class":38},[28,110166,218],{"class":211},[28,110168,110169,110171,110173],{"class":30,"line":8092},[28,110170,101472],{"class":211},[28,110172,257],{"class":207},[28,110174,101477],{"class":211},[28,110176,110177],{"class":30,"line":8098},[28,110178,2477],{"emptyLinePlaceholder":134},[28,110180,110181,110183,110185,110187,110189],{"class":30,"line":8110},[28,110182,105120],{"class":211},[28,110184,427],{"class":38},[28,110186,4520],{"class":211},[28,110188,257],{"class":207},[28,110190,110191],{"class":38}," 0.1\n",[28,110193,110194],{"class":30,"line":8122},[28,110195,105133],{"class":211},[28,110197,110198],{"class":30,"line":8134},[28,110199,2477],{"emptyLinePlaceholder":134},[28,110201,110202,110205,110207],{"class":30,"line":9793},[28,110203,110204],{"class":211},"    total_reward ",[28,110206,257],{"class":207},[28,110208,104812],{"class":38},[28,110210,110211],{"class":30,"line":9818},[28,110212,2477],{"emptyLinePlaceholder":134},[28,110214,110215,110217,110219,110221,110223,110225,110227],{"class":30,"line":9841},[28,110216,3278],{"class":207},[28,110218,31667],{"class":211},[28,110220,26094],{"class":207},[28,110222,32494],{"class":38},[28,110224,212],{"class":211},[28,110226,6487],{"class":38},[28,110228,30837],{"class":211},[28,110230,110231,110234,110236],{"class":30,"line":9865},[28,110232,110233],{"class":211},"        obs ",[28,110235,257],{"class":207},[28,110237,110238],{"class":211}," get_observation(data)\n",[28,110240,110241,110244,110246,110248,110250],{"class":30,"line":9870},[28,110242,110243],{"class":211},"        pole_angle ",[28,110245,257],{"class":207},[28,110247,110087],{"class":211},[28,110249,427],{"class":38},[28,110251,33297],{"class":211},[28,110253,110254,110257,110259,110261,110263],{"class":30,"line":9875},[28,110255,110256],{"class":211},"        pole_angular_velocity ",[28,110258,257],{"class":207},[28,110260,110087],{"class":211},[28,110262,282],{"class":38},[28,110264,33297],{"class":211},[28,110266,110267],{"class":30,"line":9880},[28,110268,2477],{"emptyLinePlaceholder":134},[28,110270,110271,110274,110276,110279,110281,110283,110285,110287,110289],{"class":30,"line":9889},[28,110272,110273],{"class":211},"        action ",[28,110275,257],{"class":207},[28,110277,110278],{"class":38}," 2.0",[28,110280,6595],{"class":207},[28,110282,109871],{"class":211},[28,110284,691],{"class":207},[28,110286,61918],{"class":38},[28,110288,6595],{"class":207},[28,110290,110291],{"class":211}," pole_angular_velocity\n",[28,110293,110294,110296,110298,110300,110302,110304,110306,110308],{"class":30,"line":9894},[28,110295,110273],{"class":211},[28,110297,257],{"class":207},[28,110299,107498],{"class":211},[28,110301,742],{"class":207},[28,110303,102454],{"class":38},[28,110305,12512],{"class":211},[28,110307,102454],{"class":38},[28,110309,218],{"class":211},[28,110311,110312],{"class":30,"line":9900},[28,110313,2477],{"emptyLinePlaceholder":134},[28,110315,110316,110318,110320,110322,110324],{"class":30,"line":9921},[28,110317,106668],{"class":211},[28,110319,401],{"class":38},[28,110321,4520],{"class":211},[28,110323,257],{"class":207},[28,110325,107521],{"class":211},[28,110327,110328],{"class":30,"line":9927},[28,110329,101567],{"class":211},[28,110331,110332],{"class":30,"line":9941},[28,110333,2477],{"emptyLinePlaceholder":134},[28,110335,110336,110339,110341],{"class":30,"line":9947},[28,110337,110338],{"class":211},"        reward ",[28,110340,257],{"class":207},[28,110342,110343],{"class":211}," compute_reward(get_observation(data))\n",[28,110345,110346,110349,110351],{"class":30,"line":9974},[28,110347,110348],{"class":211},"        total_reward ",[28,110350,9554],{"class":207},[28,110352,110353],{"class":211}," reward\n",[28,110355,110356],{"class":30,"line":9983},[28,110357,2477],{"emptyLinePlaceholder":134},[28,110359,110360,110362,110364,110366,110368,110370,110372],{"class":30,"line":9989},[28,110361,2574],{"class":207},[28,110363,31667],{"class":211},[28,110365,538],{"class":207},[28,110367,5831],{"class":38},[28,110369,101610],{"class":207},[28,110371,4170],{"class":38},[28,110373,3816],{"class":211},[28,110375,110376,110378,110380,110383,110386,110389,110392,110394,110397,110400,110402,110404,110406,110408,110411,110413],{"class":30,"line":9997},[28,110377,34701],{"class":38},[28,110379,212],{"class":211},[28,110381,110382],{"class":64},"\"step:\"",[28,110384,110385],{"class":211},", step, ",[28,110387,110388],{"class":64},"\"obs:\"",[28,110390,110391],{"class":211},", np.round(obs, ",[28,110393,282],{"class":38},[28,110395,110396],{"class":211},"), ",[28,110398,110399],{"class":64},"\"action:\"",[28,110401,12512],{"class":211},[28,110403,32069],{"class":38},[28,110405,212],{"class":211},[28,110407,251],{"class":38},[28,110409,110410],{"class":211},"(action), ",[28,110412,282],{"class":38},[28,110414,30548],{"class":211},[28,110416,110417],{"class":30,"line":10002},[28,110418,2477],{"emptyLinePlaceholder":134},[28,110420,110421,110423,110425,110428,110430,110432,110435,110437],{"class":30,"line":16681},[28,110422,31350],{"class":38},[28,110424,212],{"class":211},[28,110426,110427],{"class":64},"\"total_reward:\"",[28,110429,12512],{"class":211},[28,110431,32069],{"class":38},[28,110433,110434],{"class":211},"(total_reward, ",[28,110436,282],{"class":38},[28,110438,30548],{"class":211},[28,110440,110441,110443,110445,110448,110451,110453],{"class":30,"line":16687},[28,110442,31350],{"class":38},[28,110444,212],{"class":211},[28,110446,110447],{"class":64},"\"final obs:\"",[28,110449,110450],{"class":211},", np.round(get_observation(data), ",[28,110452,282],{"class":38},[28,110454,30548],{"class":211},[28,110456,110457],{"class":30,"line":16710},[28,110458,2477],{"emptyLinePlaceholder":134},[28,110460,110461],{"class":30,"line":16716},[28,110462,2477],{"emptyLinePlaceholder":134},[28,110464,110465,110467,110469,110471,110473],{"class":30,"line":16739},[28,110466,1609],{"class":207},[28,110468,31271],{"class":38},[28,110470,101610],{"class":207},[28,110472,101613],{"class":64},[28,110474,3816],{"class":211},[28,110476,110477],{"class":30,"line":16753},[28,110478,101620],{"class":211},[14,110480,103621],{},[18,110482,110484],{"className":20,"code":110483,"language":22,"meta":23,"style":23},"touch ch6_cartpole.py\n",[25,110485,110486],{"__ignoreMap":23},[28,110487,110488,110490],{"class":30,"line":31},[28,110489,101334],{"class":34},[28,110491,110492],{"class":64}," ch6_cartpole.py\n",[14,110494,110495],{},"运行：",[18,110497,110499],{"className":20,"code":110498,"language":22,"meta":23,"style":23},"python ch6_cartpole.py\n",[25,110500,110501],{"__ignoreMap":23},[28,110502,110503,110505],{"class":30,"line":31},[28,110504,30431],{"class":34},[28,110506,110492],{"class":64},[177,110508,101623],{"id":101623},[14,110510,110511],{},"构造观测：",[18,110513,110515],{"className":30429,"code":110514,"language":30431,"meta":23,"style":23},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[25,110516,110517,110525],{"__ignoreMap":23},[28,110518,110519,110521,110523],{"class":30,"line":31},[28,110520,31998],{"class":207},[28,110522,110045],{"class":34},[28,110524,110048],{"class":211},[28,110526,110527,110529],{"class":30,"line":42},[28,110528,4167],{"class":207},[28,110530,110055],{"class":211},[14,110532,110533,110536,110537,110539,110540,110542],{},[25,110534,110535],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[25,110538,104081],{}," 2 维，",[25,110541,104411],{}," 2 维，所以 obs 是 4 维。",[14,110544,110545],{},"设置初始角度：",[18,110547,110549],{"className":30429,"code":110548,"language":30431,"meta":23,"style":23},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[25,110550,110551,110563],{"__ignoreMap":23},[28,110552,110553,110555,110557,110559,110561],{"class":30,"line":31},[28,110554,104750],{"class":211},[28,110556,427],{"class":38},[28,110558,4520],{"class":211},[28,110560,257],{"class":207},[28,110562,110191],{"class":38},[28,110564,110565],{"class":30,"line":42},[28,110566,104594],{"class":211},[14,110568,110569],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110571,110572],{},"简单反馈控制：",[18,110574,110576],{"className":30429,"code":110575,"language":30431,"meta":23,"style":23},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[25,110577,110578,110598],{"__ignoreMap":23},[28,110579,110580,110582,110584,110586,110588,110590,110592,110594,110596],{"class":30,"line":31},[28,110581,107493],{"class":211},[28,110583,257],{"class":207},[28,110585,110278],{"class":38},[28,110587,6595],{"class":207},[28,110589,109871],{"class":211},[28,110591,691],{"class":207},[28,110593,61918],{"class":38},[28,110595,6595],{"class":207},[28,110597,110291],{"class":211},[28,110599,110600,110602,110604,110606,110608,110610,110612,110614],{"class":30,"line":42},[28,110601,107493],{"class":211},[28,110603,257],{"class":207},[28,110605,107498],{"class":211},[28,110607,742],{"class":207},[28,110609,102454],{"class":38},[28,110611,12512],{"class":211},[28,110613,102454],{"class":38},[28,110615,218],{"class":211},[14,110617,110618],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110620,110621],{},"限制动作：",[18,110623,110625],{"className":30429,"code":110624,"language":30431,"meta":23,"style":23},"np.clip(action, -1.0, 1.0)\n",[25,110626,110627],{"__ignoreMap":23},[28,110628,110629,110632,110634,110636,110638,110640],{"class":30,"line":31},[28,110630,110631],{"class":211},"np.clip(action, ",[28,110633,742],{"class":207},[28,110635,102454],{"class":38},[28,110637,12512],{"class":211},[28,110639,102454],{"class":38},[28,110641,218],{"class":211},[14,110643,110644,110645,110648],{},"因为 XML 里 ",[25,110646,110647],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[177,110650,101759],{"id":101759},[18,110652,110653],{"className":30429,"code":110514,"language":30431,"meta":23,"style":23},[25,110654,110655,110663],{"__ignoreMap":23},[28,110656,110657,110659,110661],{"class":30,"line":31},[28,110658,31998],{"class":207},[28,110660,110045],{"class":34},[28,110662,110048],{"class":211},[28,110664,110665,110667],{"class":30,"line":42},[28,110666,4167],{"class":207},[28,110668,110055],{"class":211},[14,110670,110671,110672,110675,110676,110679,110680,110683],{},"这段定义了一个函数，用来获取当前观测。",[25,110673,110674],{},"data.qpos.copy()"," 是位置数组副本，",[25,110677,110678],{},"data.qvel.copy()"," 是速度数组副本。",[25,110681,110682],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110685,110686],{},"在本章模型里：",[18,110688,110691],{"className":110689,"code":110690,"language":5264,"meta":23},[5262],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[25,110692,110690],{"__ignoreMap":23},[14,110694,110695],{},"所以返回的 obs 是：",[18,110697,110700],{"className":110698,"code":110699,"language":5264,"meta":23},[5262],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[25,110701,110699],{"__ignoreMap":23},[18,110703,110705],{"className":30429,"code":110704,"language":30431,"meta":23,"style":23},"def compute_reward(obs: np.ndarray) -> float:\n",[25,110706,110707],{"__ignoreMap":23},[28,110708,110709,110711,110713,110715,110717],{"class":30,"line":31},[28,110710,31998],{"class":207},[28,110712,110070],{"class":34},[28,110714,110073],{"class":211},[28,110716,251],{"class":38},[28,110718,3816],{"class":211},[14,110720,110721,110722,110725],{},"这行定义奖励函数。输入是观测 ",[25,110723,110724],{},"obs","，输出是一个浮点数奖励。",[18,110727,110729],{"className":30429,"code":110728,"language":30431,"meta":23,"style":23},"cart_x = obs[0]\npole_angle = obs[1]\n",[25,110730,110731,110744],{"__ignoreMap":23},[28,110732,110733,110736,110738,110740,110742],{"class":30,"line":31},[28,110734,110735],{"class":211},"cart_x ",[28,110737,257],{"class":207},[28,110739,110087],{"class":211},[28,110741,401],{"class":38},[28,110743,33297],{"class":211},[28,110745,110746,110749,110751,110753,110755],{"class":30,"line":42},[28,110747,110748],{"class":211},"pole_angle ",[28,110750,257],{"class":207},[28,110752,110087],{"class":211},[28,110754,427],{"class":38},[28,110756,33297],{"class":211},[14,110758,110759,110760,110763,110764,110767],{},"数组索引从 0 开始。",[25,110761,110762],{},"obs[0]"," 是第一个元素，也就是小车位置。",[25,110765,110766],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[18,110769,110770],{"className":30429,"code":109839,"language":30431,"meta":23,"style":23},[25,110771,110772],{"__ignoreMap":23},[28,110773,110774,110776,110778,110780,110782,110784,110786,110788,110790,110792,110794,110796,110798,110800],{"class":30,"line":31},[28,110775,17123],{"class":207},[28,110777,109848],{"class":38},[28,110779,212],{"class":211},[28,110781,102454],{"class":38},[28,110783,52322],{"class":207},[28,110785,109857],{"class":38},[28,110787,6595],{"class":207},[28,110789,109862],{"class":211},[28,110791,665],{"class":207},[28,110793,109862],{"class":211},[28,110795,742],{"class":207},[28,110797,109871],{"class":211},[28,110799,665],{"class":207},[28,110801,109876],{"class":211},[14,110803,110804,110805,110808,110809,110812],{},"这行计算奖励。",[25,110806,110807],{},"cart_x * cart_x"," 是小车位置的平方，",[25,110810,110811],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[18,110814,110816],{"className":30429,"code":110815,"language":30431,"meta":23,"style":23},"data.qpos[1] = 0.1\n",[25,110817,110818],{"__ignoreMap":23},[28,110819,110820,110822,110824,110826,110828],{"class":30,"line":31},[28,110821,104750],{"class":211},[28,110823,427],{"class":38},[28,110825,4520],{"class":211},[28,110827,257],{"class":207},[28,110829,110191],{"class":38},[14,110831,110832,110833,110835,110836,110838],{},"手动设置杆子的初始角度。因为 ",[25,110834,105507],{}," 是小车位置，",[25,110837,105510],{}," 是杆子角度，所以这里改的是杆子。",[18,110840,110841],{"className":30429,"code":104594,"language":30431,"meta":23,"style":23},[25,110842,110843],{"__ignoreMap":23},[28,110844,110845],{"class":30,"line":31},[28,110846,104594],{"class":211},[14,110848,105553,110849,110851],{},[25,110850,104081],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[18,110853,110855],{"className":30429,"code":110854,"language":30431,"meta":23,"style":23},"total_reward = 0.0\n",[25,110856,110857],{"__ignoreMap":23},[28,110858,110859,110862,110864],{"class":30,"line":31},[28,110860,110861],{"class":211},"total_reward ",[28,110863,257],{"class":207},[28,110865,104812],{"class":38},[14,110867,110868],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[18,110870,110872],{"className":30429,"code":110871,"language":30431,"meta":23,"style":23},"for step in range(1000):\n",[25,110873,110874],{"__ignoreMap":23},[28,110875,110876,110878,110880,110882,110884,110886,110888],{"class":30,"line":31},[28,110877,3102],{"class":207},[28,110879,31667],{"class":211},[28,110881,26094],{"class":207},[28,110883,32494],{"class":38},[28,110885,212],{"class":211},[28,110887,6487],{"class":38},[28,110889,30837],{"class":211},[14,110891,110892,110893,110895],{},"循环 1000 步。",[25,110894,107185],{}," 是当前步数，从 0 到 999。",[18,110897,110899],{"className":30429,"code":110898,"language":30431,"meta":23,"style":23},"obs = get_observation(data)\n",[25,110900,110901],{"__ignoreMap":23},[28,110902,110903,110906,110908],{"class":30,"line":31},[28,110904,110905],{"class":211},"obs ",[28,110907,257],{"class":207},[28,110909,110238],{"class":211},[14,110911,110912,110913,28436],{},"读取当前状态，保存到 ",[25,110914,110724],{},[18,110916,110918],{"className":30429,"code":110917,"language":30431,"meta":23,"style":23},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[25,110919,110920,110932],{"__ignoreMap":23},[28,110921,110922,110924,110926,110928,110930],{"class":30,"line":31},[28,110923,110748],{"class":211},[28,110925,257],{"class":207},[28,110927,110087],{"class":211},[28,110929,427],{"class":38},[28,110931,33297],{"class":211},[28,110933,110934,110937,110939,110941,110943],{"class":30,"line":42},[28,110935,110936],{"class":211},"pole_angular_velocity ",[28,110938,257],{"class":207},[28,110940,110087],{"class":211},[28,110942,282],{"class":38},[28,110944,33297],{"class":211},[14,110946,110947,110948,110951,110952,28436],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[25,110949,110950],{},"obs[3]","？因为 obs 的顺序是 ",[25,110953,110954],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[18,110956,110958],{"className":30429,"code":110957,"language":30431,"meta":23,"style":23},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[25,110959,110960],{"__ignoreMap":23},[28,110961,110962,110964,110966,110968,110970,110972,110974,110976,110978],{"class":30,"line":31},[28,110963,107493],{"class":211},[28,110965,257],{"class":207},[28,110967,110278],{"class":38},[28,110969,6595],{"class":207},[28,110971,109871],{"class":211},[28,110973,691],{"class":207},[28,110975,61918],{"class":38},[28,110977,6595],{"class":207},[28,110979,110291],{"class":211},[14,110981,110982,110983,101069,110985,110987],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[25,110984,105311],{},[25,110986,35380],{}," 是人为设置的系数，不是固定公式。",[18,110989,110991],{"className":30429,"code":110990,"language":30431,"meta":23,"style":23},"action = np.clip(action, -1.0, 1.0)\n",[25,110992,110993],{"__ignoreMap":23},[28,110994,110995,110997,110999,111001,111003,111005,111007,111009],{"class":30,"line":31},[28,110996,107493],{"class":211},[28,110998,257],{"class":207},[28,111000,107498],{"class":211},[28,111002,742],{"class":207},[28,111004,102454],{"class":38},[28,111006,12512],{"class":211},[28,111008,102454],{"class":38},[28,111010,218],{"class":211},[14,111012,111013],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[18,111015,111016],{"className":30429,"code":109824,"language":30431,"meta":23,"style":23},[25,111017,111018],{"__ignoreMap":23},[28,111019,111020,111022,111024,111026,111028],{"class":30,"line":31},[28,111021,105922],{"class":211},[28,111023,401],{"class":38},[28,111025,4520],{"class":211},[28,111027,257],{"class":207},[28,111029,107521],{"class":211},[14,111031,111032],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[18,111034,111035],{"className":30429,"code":104556,"language":30431,"meta":23,"style":23},[25,111036,111037],{"__ignoreMap":23},[28,111038,111039],{"class":30,"line":31},[28,111040,104556],{"class":211},[14,111042,111043,111044,111046],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[25,111045,106177],{}," 计算小车和杆子的下一刻状态。",[18,111048,111050],{"className":30429,"code":111049,"language":30431,"meta":23,"style":23},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[25,111051,111052,111061],{"__ignoreMap":23},[28,111053,111054,111057,111059],{"class":30,"line":31},[28,111055,111056],{"class":211},"reward ",[28,111058,257],{"class":207},[28,111060,110343],{"class":211},[28,111062,111063,111065,111067],{"class":30,"line":42},[28,111064,110861],{"class":211},[28,111066,9554],{"class":207},[28,111068,110353],{"class":211},[14,111070,111071,111072,111074,111075,111078,111079,28436],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[25,111073,9554],{}," 是简写，",[25,111076,111077],{},"total_reward += reward"," 等价于 ",[25,111080,111081],{},"total_reward = total_reward + reward",[18,111083,111085],{"className":30429,"code":111084,"language":30431,"meta":23,"style":23},"if step % 100 == 0:\n",[25,111086,111087],{"__ignoreMap":23},[28,111088,111089,111091,111093,111095,111097,111099,111101],{"class":30,"line":31},[28,111090,1609],{"class":207},[28,111092,31667],{"class":211},[28,111094,538],{"class":207},[28,111096,5831],{"class":38},[28,111098,101610],{"class":207},[28,111100,4170],{"class":38},[28,111102,3816],{"class":211},[14,111104,111105,111107,111108,111111],{},[25,111106,538],{}," 是取余数。",[25,111109,111110],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[18,111113,111115],{"className":30429,"code":111114,"language":30431,"meta":23,"style":23},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[25,111116,111117],{"__ignoreMap":23},[28,111118,111119,111121,111123,111125,111127,111129,111131,111133,111135,111137,111139,111141,111143,111145,111147,111149],{"class":30,"line":31},[28,111120,30466],{"class":38},[28,111122,212],{"class":211},[28,111124,110382],{"class":64},[28,111126,110385],{"class":211},[28,111128,110388],{"class":64},[28,111130,110391],{"class":211},[28,111132,282],{"class":38},[28,111134,110396],{"class":211},[28,111136,110399],{"class":64},[28,111138,12512],{"class":211},[28,111140,32069],{"class":38},[28,111142,212],{"class":211},[28,111144,251],{"class":38},[28,111146,110410],{"class":211},[28,111148,282],{"class":38},[28,111150,30548],{"class":211},[14,111152,111153,111154,111157,111158,111161],{},"打印当前步数、观测和动作。",[25,111155,111156],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[25,111159,111160],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[149,111163,102367],{"id":102366},[14,111165,111166],{},"观测向量:",[18,111168,111171],{"className":111169,"code":111170,"language":5264,"meta":23},[5262],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[25,111172,111170],{"__ignoreMap":23},[14,111174,111175],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111177,111178],{},"每隔 100 步会打印一次：",[18,111180,111183],{"className":111181,"code":111182,"language":5264,"meta":23},[5262],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[25,111184,111182],{"__ignoreMap":23},[14,111186,111187],{},"重点观察：",[161,111189,111190,111196,111201],{},[119,111191,111192,111195],{},[25,111193,111194],{},"pole_angle"," 是否越来越大。",[119,111197,111198,111200],{},[25,111199,109777],{}," 是否跑得太远。",[119,111202,111203,111204,82590,111206,28436],{},"action 是否经常被 clip 到 ",[25,111205,103966],{},[25,111207,427],{},[14,111209,111210],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[149,111212,102399],{"id":102398},[161,111214,111215,111221,111224,111230,111240,111246,111249],{},[119,111216,111217,111218,28436],{},"把初始角度改为 ",[25,111219,111220],{},"data.qpos[1] = 0.3",[119,111222,111223],{},"重新运行，观察控制是否变差。",[119,111225,111226,111227,111229],{},"把 actuator ",[25,111228,107118],{}," 改小。",[119,111231,111232,111233,111236,111237,28436],{},"打印 ",[25,111234,111235],{},"model.nq, model.nv, model.nu","，应为 ",[25,111238,111239],{},"2 2 1",[119,111241,111242,111243,111245],{},"把 reward 里的 ",[25,111244,110811],{}," 系数改大，观察总奖励变化。",[119,111247,111248],{},"把控制器改成反号，观察杆子是否更容易倒。",[119,111250,111251],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[149,111253,102504],{"id":102503},[177,111255,111256],{"id":111256},"杆子方向和预期不一致",[14,111258,102447,111259,111261,111262,111264],{},[25,111260,106290],{}," 和 capsule 的 ",[25,111263,103227],{},"，必要时用 viewer 可视化确认。",[177,111266,111267],{"id":111267},"控制器越控越倒",[14,111269,111270],{},"说明反馈符号可能反了，尝试:",[18,111272,111274],{"className":30429,"code":111273,"language":30431,"meta":23,"style":23},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[25,111275,111276],{"__ignoreMap":23},[28,111277,111278,111280,111282,111284,111286,111288,111290,111292,111294,111296],{"class":30,"line":31},[28,111279,107493],{"class":211},[28,111281,257],{"class":207},[28,111283,52322],{"class":207},[28,111285,105311],{"class":38},[28,111287,6595],{"class":207},[28,111289,109871],{"class":211},[28,111291,742],{"class":207},[28,111293,61918],{"class":38},[28,111295,6595],{"class":207},[28,111297,110291],{"class":211},[177,111299,111300],{"id":111300},"小车飞走",[14,111302,111303,111304,111306,111307,111310],{},"降低 ",[25,111305,107118],{}," 或缩小 ",[25,111308,111309],{},"action"," 的 clip 范围。",[177,111312,111314,111316],{"id":111313},"obs3-为什么是杆子角速度",[25,111315,110950],{}," 为什么是杆子角速度",[14,111318,111319],{},"因为这个模型里：",[18,111321,111324],{"className":111322,"code":111323,"language":5264,"meta":23},[5262],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[25,111325,111323],{"__ignoreMap":23},[14,111327,109798],{},[18,111329,111332],{"className":111330,"code":111331,"language":5264,"meta":23},[5262],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[25,111333,111331],{"__ignoreMap":23},[177,111335,111337],{"id":111336},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111339,111340],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[149,111342,102658],{"id":102657},[14,111344,111345],{},"一个控制任务通常包含：",[161,111347,111348,111351,111359,111364,111367],{},[119,111349,111350],{},"模型：Cartpole 的 body、joint、actuator。",[119,111352,111353,111354,422,111356,111358],{},"观测：从 ",[25,111355,104081],{},[25,111357,104411],{}," 里取状态。",[119,111360,111361,111362,28436],{},"动作：写入 ",[25,111363,101127],{},[119,111365,111366],{},"奖励：根据任务目标打分。",[119,111368,111369],{},"循环：obs -> action -> step -> reward。",[14,111371,111372],{},"这就是后面 Gymnasium 环境的基本骨架。",[126,111374,104337],{},{"title":23,"searchDepth":42,"depth":42,"links":111376},[111377,111378,111379,111384,111388,111389,111390,111398],{"id":100697,"depth":42,"text":100698},{"id":100820,"depth":42,"text":100821},{"id":101095,"depth":42,"text":101096,"children":111380},[111381,111382,111383],{"id":109751,"depth":50,"text":109752},{"id":109816,"depth":50,"text":109817},{"id":109832,"depth":50,"text":109833},{"id":101303,"depth":42,"text":101304,"children":111385},[111386,111387],{"id":101623,"depth":50,"text":101623},{"id":101759,"depth":50,"text":101759},{"id":102366,"depth":42,"text":102367},{"id":102398,"depth":42,"text":102399},{"id":102503,"depth":42,"text":102504,"children":111391},[111392,111393,111394,111395,111397],{"id":111256,"depth":50,"text":111256},{"id":111267,"depth":50,"text":111267},{"id":111300,"depth":50,"text":111300},{"id":111313,"depth":50,"text":111396},"obs[3] 为什么是杆子角速度",{"id":111336,"depth":50,"text":111337},{"id":102657,"depth":42,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109487,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111405,"title":111406,"body":111407,"description":23,"extension":132,"meta":113421,"navigation":134,"path":113422,"seo":113423,"stem":113424,"__hash__":113425},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111408,"toc":113397},[111409,111412,111414,111417,111419,111436,111439,111442,111448,111451,111453,111455,111479,111481,111495,111497,111538,111540,111558,111560,111563,111569,111572,111600,111604,111610,111635,111638,111669,111676,111679,111682,111688,111691,111697,111700,111706,111710,111713,111738,111741,111743,112503,112505,112517,112519,112530,112532,112535,112552,112555,112557,112568,112571,112573,112619,112622,112635,112638,112720,112723,112725,112741,112751,112764,112767,112806,112816,112827,112837,112850,112853,112882,112885,112895,112898,112904,112921,112932,112934,112940,112957,112968,112989,112992,113004,113007,113028,113031,113039,113047,113064,113067,113136,113143,113151,113154,113167,113174,113176,113179,113185,113188,113191,113197,113203,113205,113245,113247,113253,113262,113265,113267,113287,113290,113293,113299,113303,113305,113332,113335,113338,113365,113371,113374,113377,113379,113382,113385,113391,113394],[10,111410,111406],{"id":111411},"_7控制任务reacher-机械臂到达目标",[149,111413,100698],{"id":100697},[14,111415,111416],{},"本章搭建一个二维两关节 reacher 任务。",[14,111418,104382],{},[161,111420,111421,111424,111427,111430,111433],{},[119,111422,111423],{},"两个 hinge joint",[119,111425,111426],{},"两个 motor actuator",[119,111428,111429],{},"site 作为末端点和目标点",[119,111431,111432],{},"根据末端和目标距离设计 reward",[119,111434,111435],{},"构造机械臂任务的基本形式",[14,111437,111438],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111440,111441],{},"Reacher 任务可以理解为：",[18,111443,111446],{"className":111444,"code":111445,"language":5264,"meta":23},[5262],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[25,111447,111445],{"__ignoreMap":23},[14,111449,111450],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[149,111452,100821],{"id":100820},[14,111454,100824],{},[18,111456,111457],{"className":20,"code":104439,"language":22,"meta":23,"style":23},[25,111458,111459],{"__ignoreMap":23},[28,111460,111461,111463,111465,111467,111469,111471,111473,111475,111477],{"class":30,"line":31},[28,111462,24652],{"class":34},[28,111464,26366],{"class":64},[28,111466,23909],{"class":64},[28,111468,26451],{"class":38},[28,111470,104454],{"class":64},[28,111472,100849],{"class":64},[28,111474,102552],{"class":64},[28,111476,100865],{"class":64},[28,111478,104463],{"class":64},[14,111480,102870],{},[18,111482,111483],{"className":20,"code":100970,"language":22,"meta":23,"style":23},[25,111484,111485],{"__ignoreMap":23},[28,111486,111487,111489,111491,111493],{"class":30,"line":31},[28,111488,23906],{"class":34},[28,111490,23909],{"class":64},[28,111492,100981],{"class":64},[28,111494,100984],{"class":64},[14,111496,102887],{},[18,111498,111500],{"className":20,"code":111499,"language":22,"meta":23,"style":23},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[25,111501,111502,111519,111528],{"__ignoreMap":23},[28,111503,111504,111506,111508,111510,111513,111515,111517],{"class":30,"line":31},[28,111505,30381],{"class":34},[28,111507,29227],{"class":64},[28,111509,25186],{"class":38},[28,111511,111512],{"class":64}," mujoco-reacher",[28,111514,101026],{"class":64},[28,111516,101029],{"class":38},[28,111518,101032],{"class":38},[28,111520,111521,111523,111525],{"class":30,"line":42},[28,111522,30381],{"class":34},[28,111524,101039],{"class":64},[28,111526,111527],{"class":64}," mujoco-reacher\n",[28,111529,111530,111532,111534,111536],{"class":30,"line":50},[28,111531,23906],{"class":34},[28,111533,23909],{"class":64},[28,111535,100981],{"class":64},[28,111537,100984],{"class":64},[14,111539,101055],{},[161,111541,111542,111545,111548],{},[119,111543,111544],{},"本章使用低维状态，不使用图像输入。",[119,111546,111547],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[119,111549,111550,111551,422,111553,422,111555,111557],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[25,111552,104081],{},[25,111554,104411],{},[25,111556,103731],{}," 的方法一致。",[149,111559,101096],{"id":101095},[14,111561,111562],{},"Reacher 任务核心:",[18,111564,111567],{"className":111565,"code":111566,"language":5264,"meta":23},[5262],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[25,111568,111566],{"__ignoreMap":23},[14,111570,111571],{},"读取 site 世界坐标:",[18,111573,111575],{"className":30429,"code":111574,"language":30431,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[25,111576,111577,111590],{"__ignoreMap":23},[28,111578,111579,111581,111583,111585,111588],{"class":30,"line":31},[28,111580,103685],{"class":211},[28,111582,257],{"class":207},[28,111584,103456],{"class":211},[28,111586,111587],{"class":64},"\"tip\"",[28,111589,218],{"class":211},[28,111591,111592,111595,111597],{"class":30,"line":42},[28,111593,111594],{"class":211},"tip_pos ",[28,111596,257],{"class":207},[28,111598,111599],{"class":211}," data.site_xpos[site_id]\n",[177,111601,111603],{"id":111602},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111605,111606,111607,111609],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[25,111608,104081],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[18,111611,111613],{"className":30429,"code":111612,"language":30431,"meta":23,"style":23},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[25,111614,111615,111625],{"__ignoreMap":23},[28,111616,111617,111620,111622],{"class":30,"line":31},[28,111618,111619],{"class":211},"tip ",[28,111621,257],{"class":207},[28,111623,111624],{"class":211}," data.site_xpos[tip_site_id]\n",[28,111626,111627,111630,111632],{"class":30,"line":42},[28,111628,111629],{"class":211},"target ",[28,111631,257],{"class":207},[28,111633,111634],{"class":211}," data.site_xpos[target_site_id]\n",[14,111636,111637],{},"这样 reward 就很容易写：",[18,111639,111641],{"className":30429,"code":111640,"language":30431,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[25,111642,111643,111658],{"__ignoreMap":23},[28,111644,111645,111648,111650,111653,111655],{"class":30,"line":31},[28,111646,111647],{"class":211},"dist ",[28,111649,257],{"class":207},[28,111651,111652],{"class":211}," np.linalg.norm(tip ",[28,111654,742],{"class":207},[28,111656,111657],{"class":211}," target)\n",[28,111659,111660,111662,111664,111666],{"class":30,"line":42},[28,111661,111056],{"class":211},[28,111663,257],{"class":207},[28,111665,52322],{"class":207},[28,111667,111668],{"class":211},"dist\n",[14,111670,111671,111672,111675],{},"距离越小，",[25,111673,111674],{},"-dist"," 越接近 0，奖励越高。",[177,111677,111678],{"id":111678},"两关节机械臂的状态",[14,111680,111681],{},"这个模型有两个 hinge joint：",[18,111683,111686],{"className":111684,"code":111685,"language":5264,"meta":23},[5262],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[25,111687,111685],{"__ignoreMap":23},[14,111689,111690],{},"再加上末端和目标位置：",[18,111692,111695],{"className":111693,"code":111694,"language":5264,"meta":23},[5262],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[25,111696,111694],{"__ignoreMap":23},[14,111698,111699],{},"总维度：",[18,111701,111704],{"className":111702,"code":111703,"language":5264,"meta":23},[5262],"2 + 2 + 3 + 3 = 10\n",[25,111705,111703],{"__ignoreMap":23},[177,111707,111709],{"id":111708},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111711,111712],{},"本章把重力设为：",[18,111714,111716],{"className":53118,"code":111715,"language":53120,"meta":23,"style":23},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[25,111717,111718],{"__ignoreMap":23},[28,111719,111720,111722,111724,111726,111728,111730,111732,111734,111736],{"class":30,"line":31},[28,111721,1120],{"class":211},[28,111723,69217],{"class":51351},[28,111725,101245],{"class":34},[28,111727,257],{"class":211},[28,111729,101250],{"class":64},[28,111731,101253],{"class":34},[28,111733,257],{"class":211},[28,111735,103822],{"class":64},[28,111737,101195],{"class":211},[14,111739,111740],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[149,111742,101304],{"id":101303},[18,111744,111746],{"className":30429,"code":111745,"language":30431,"meta":23,"style":23},"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",[25,111747,111748,111754,111764,111768,111772,111780,111785,111790,111794,111798,111803,111808,111812,111817,111822,111827,111831,111836,111841,111846,111851,111855,111859,111863,111867,111871,111876,111881,111885,111889,111893,111897,111901,111916,111925,111937,111960,111967,111971,111975,111985,111999,112013,112020,112024,112028,112042,112054,112066,112079,112094,112111,112115,112119,112131,112143,112151,112159,112163,112179,112184,112197,112210,112225,112229,112264,112296,112300,112304,112313,112317,112333,112343,112354,112370,112386,112402,112418,112422,112440,112460,112479,112483,112487,112499],{"__ignoreMap":23},[28,111749,111750,111752],{"class":30,"line":31},[28,111751,30443],{"class":207},[28,111753,101352],{"class":211},[28,111755,111756,111758,111760,111762],{"class":30,"line":42},[28,111757,30443],{"class":207},[28,111759,31431],{"class":211},[28,111761,31434],{"class":207},[28,111763,31437],{"class":211},[28,111765,111766],{"class":30,"line":50},[28,111767,2477],{"emptyLinePlaceholder":134},[28,111769,111770],{"class":30,"line":58},[28,111771,2477],{"emptyLinePlaceholder":134},[28,111773,111774,111776,111778],{"class":30,"line":70},[28,111775,101365],{"class":38},[28,111777,13641],{"class":207},[28,111779,101370],{"class":64},[28,111781,111782],{"class":30,"line":78},[28,111783,111784],{"class":64},"\u003Cmujoco model=\"two_link_reacher\">\n",[28,111786,111787],{"class":30,"line":86},[28,111788,111789],{"class":64},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[28,111791,111792],{"class":30,"line":97},[28,111793,2477],{"emptyLinePlaceholder":134},[28,111795,111796],{"class":30,"line":108},[28,111797,101389],{"class":64},[28,111799,111800],{"class":30,"line":1407},[28,111801,111802],{"class":64},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[28,111804,111805],{"class":30,"line":1690},[28,111806,111807],{"class":64},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[28,111809,111810],{"class":30,"line":1695},[28,111811,2477],{"emptyLinePlaceholder":134},[28,111813,111814],{"class":30,"line":1701},[28,111815,111816],{"class":64},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[28,111818,111819],{"class":30,"line":1706},[28,111820,111821],{"class":64},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,111823,111824],{"class":30,"line":1720},[28,111825,111826],{"class":64},"      \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",[28,111828,111829],{"class":30,"line":1725},[28,111830,2477],{"emptyLinePlaceholder":134},[28,111832,111833],{"class":30,"line":1731},[28,111834,111835],{"class":64},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[28,111837,111838],{"class":30,"line":1752},[28,111839,111840],{"class":64},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[28,111842,111843],{"class":30,"line":1757},[28,111844,111845],{"class":64},"        \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",[28,111847,111848],{"class":30,"line":1771},[28,111849,111850],{"class":64},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[28,111852,111853],{"class":30,"line":1776},[28,111854,106489],{"class":64},[28,111856,111857],{"class":30,"line":1805},[28,111858,101418],{"class":64},[28,111860,111861],{"class":30,"line":1810},[28,111862,101423],{"class":64},[28,111864,111865],{"class":30,"line":1827},[28,111866,2477],{"emptyLinePlaceholder":134},[28,111868,111869],{"class":30,"line":1832},[28,111870,106506],{"class":64},[28,111872,111873],{"class":30,"line":1837},[28,111874,111875],{"class":64},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,111877,111878],{"class":30,"line":1842},[28,111879,111880],{"class":64},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[28,111882,111883],{"class":30,"line":1856},[28,111884,106516],{"class":64},[28,111886,111887],{"class":30,"line":1861},[28,111888,101428],{"class":64},[28,111890,111891],{"class":30,"line":2654},[28,111892,95749],{"class":64},[28,111894,111895],{"class":30,"line":2668},[28,111896,2477],{"emptyLinePlaceholder":134},[28,111898,111899],{"class":30,"line":2676},[28,111900,2477],{"emptyLinePlaceholder":134},[28,111902,111903,111905,111908,111911,111913],{"class":30,"line":2681},[28,111904,31998],{"class":207},[28,111906,111907],{"class":34}," site_position",[28,111909,111910],{"class":211},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[28,111912,1379],{"class":38},[28,111914,111915],{"class":211},") -> np.ndarray:\n",[28,111917,111918,111920,111922],{"class":30,"line":2687},[28,111919,103451],{"class":211},[28,111921,257],{"class":207},[28,111923,111924],{"class":211}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[28,111926,111927,111929,111931,111933,111935],{"class":30,"line":2693},[28,111928,3178],{"class":207},[28,111930,103500],{"class":211},[28,111932,1120],{"class":207},[28,111934,4170],{"class":38},[28,111936,3816],{"class":211},[28,111938,111939,111941,111943,111945,111947,111950,111952,111954,111956,111958],{"class":30,"line":2698},[28,111940,103483],{"class":207},[28,111942,103486],{"class":38},[28,111944,212],{"class":211},[28,111946,263],{"class":207},[28,111948,111949],{"class":64},"\"site not found: ",[28,111951,1106],{"class":38},[28,111953,79861],{"class":211},[28,111955,1156],{"class":38},[28,111957,461],{"class":64},[28,111959,218],{"class":211},[28,111961,111962,111964],{"class":30,"line":8025},[28,111963,4167],{"class":207},[28,111965,111966],{"class":211}," data.site_xpos[site_id].copy()\n",[28,111968,111969],{"class":30,"line":8049},[28,111970,2477],{"emptyLinePlaceholder":134},[28,111972,111973],{"class":30,"line":8054},[28,111974,2477],{"emptyLinePlaceholder":134},[28,111976,111977,111979,111982],{"class":30,"line":8060},[28,111978,31998],{"class":207},[28,111980,111981],{"class":34}," get_obs",[28,111983,111984],{"class":211},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[28,111986,111987,111990,111992,111995,111997],{"class":30,"line":8087},[28,111988,111989],{"class":211},"    tip ",[28,111991,257],{"class":207},[28,111993,111994],{"class":211}," site_position(model, data, ",[28,111996,111587],{"class":64},[28,111998,218],{"class":211},[28,112000,112001,112004,112006,112008,112011],{"class":30,"line":8092},[28,112002,112003],{"class":211},"    target ",[28,112005,257],{"class":207},[28,112007,111994],{"class":211},[28,112009,112010],{"class":64},"\"target\"",[28,112012,218],{"class":211},[28,112014,112015,112017],{"class":30,"line":8098},[28,112016,4167],{"class":207},[28,112018,112019],{"class":211}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[28,112021,112022],{"class":30,"line":8110},[28,112023,2477],{"emptyLinePlaceholder":134},[28,112025,112026],{"class":30,"line":8122},[28,112027,2477],{"emptyLinePlaceholder":134},[28,112029,112030,112032,112035,112038,112040],{"class":30,"line":8134},[28,112031,31998],{"class":207},[28,112033,112034],{"class":34}," reward",[28,112036,112037],{"class":211},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[28,112039,251],{"class":38},[28,112041,3816],{"class":211},[28,112043,112044,112046,112048,112050,112052],{"class":30,"line":9793},[28,112045,111989],{"class":211},[28,112047,257],{"class":207},[28,112049,111994],{"class":211},[28,112051,111587],{"class":64},[28,112053,218],{"class":211},[28,112055,112056,112058,112060,112062,112064],{"class":30,"line":9818},[28,112057,112003],{"class":211},[28,112059,257],{"class":207},[28,112061,111994],{"class":211},[28,112063,112010],{"class":64},[28,112065,218],{"class":211},[28,112067,112068,112071,112073,112075,112077],{"class":30,"line":9841},[28,112069,112070],{"class":211},"    dist ",[28,112072,257],{"class":207},[28,112074,111652],{"class":211},[28,112076,742],{"class":207},[28,112078,111657],{"class":211},[28,112080,112081,112084,112086,112089,112091],{"class":30,"line":9865},[28,112082,112083],{"class":211},"    control_cost ",[28,112085,257],{"class":207},[28,112087,112088],{"class":38}," 0.01",[28,112090,6595],{"class":207},[28,112092,112093],{"class":211}," np.sum(np.square(data.ctrl))\n",[28,112095,112096,112098,112100,112102,112104,112106,112108],{"class":30,"line":9870},[28,112097,4167],{"class":207},[28,112099,109848],{"class":38},[28,112101,212],{"class":211},[28,112103,742],{"class":207},[28,112105,111647],{"class":211},[28,112107,742],{"class":207},[28,112109,112110],{"class":211}," control_cost)\n",[28,112112,112113],{"class":30,"line":9875},[28,112114,2477],{"emptyLinePlaceholder":134},[28,112116,112117],{"class":30,"line":9880},[28,112118,2477],{"emptyLinePlaceholder":134},[28,112120,112121,112123,112125,112127,112129],{"class":30,"line":9889},[28,112122,31998],{"class":207},[28,112124,2050],{"class":34},[28,112126,101449],{"class":211},[28,112128,95737],{"class":38},[28,112130,3816],{"class":211},[28,112132,112133,112135,112137,112139,112141],{"class":30,"line":9894},[28,112134,101458],{"class":211},[28,112136,257],{"class":207},[28,112138,101463],{"class":211},[28,112140,101365],{"class":38},[28,112142,218],{"class":211},[28,112144,112145,112147,112149],{"class":30,"line":9900},[28,112146,101472],{"class":211},[28,112148,257],{"class":207},[28,112150,101477],{"class":211},[28,112152,112153,112155,112157],{"class":30,"line":9921},[28,112154,110204],{"class":211},[28,112156,257],{"class":207},[28,112158,104812],{"class":38},[28,112160,112161],{"class":30,"line":9927},[28,112162,2477],{"emptyLinePlaceholder":134},[28,112164,112165,112167,112169,112171,112173,112175,112177],{"class":30,"line":9941},[28,112166,3278],{"class":207},[28,112168,31667],{"class":211},[28,112170,26094],{"class":207},[28,112172,32494],{"class":38},[28,112174,212],{"class":211},[28,112176,65125],{"class":38},[28,112178,30837],{"class":211},[28,112180,112181],{"class":30,"line":9947},[28,112182,112183],{"class":211},"        mujoco.mj_forward(model, data)\n",[28,112185,112186,112189,112191,112193,112195],{"class":30,"line":9974},[28,112187,112188],{"class":211},"        tip ",[28,112190,257],{"class":207},[28,112192,111994],{"class":211},[28,112194,111587],{"class":64},[28,112196,218],{"class":211},[28,112198,112199,112202,112204,112206,112208],{"class":30,"line":9983},[28,112200,112201],{"class":211},"        target ",[28,112203,257],{"class":207},[28,112205,111994],{"class":211},[28,112207,112010],{"class":64},[28,112209,218],{"class":211},[28,112211,112212,112215,112217,112220,112222],{"class":30,"line":9989},[28,112213,112214],{"class":211},"        error ",[28,112216,257],{"class":207},[28,112218,112219],{"class":211}," target ",[28,112221,742],{"class":207},[28,112223,112224],{"class":211}," tip\n",[28,112226,112227],{"class":30,"line":9997},[28,112228,2477],{"emptyLinePlaceholder":134},[28,112230,112231,112233,112235,112237,112239,112242,112244,112246,112249,112251,112254,112256,112258,112260,112262],{"class":30,"line":10002},[28,112232,106668],{"class":211},[28,112234,401],{"class":38},[28,112236,4520],{"class":211},[28,112238,257],{"class":207},[28,112240,112241],{"class":211}," np.clip(",[28,112243,105311],{"class":38},[28,112245,6595],{"class":207},[28,112247,112248],{"class":211}," error[",[28,112250,288],{"class":38},[28,112252,112253],{"class":211},"], ",[28,112255,742],{"class":207},[28,112257,102454],{"class":38},[28,112259,12512],{"class":211},[28,112261,102454],{"class":38},[28,112263,218],{"class":211},[28,112265,112266,112268,112270,112272,112274,112276,112278,112280,112282,112284,112286,112288,112290,112292,112294],{"class":30,"line":16681},[28,112267,106668],{"class":211},[28,112269,427],{"class":38},[28,112271,4520],{"class":211},[28,112273,257],{"class":207},[28,112275,112241],{"class":211},[28,112277,105311],{"class":38},[28,112279,6595],{"class":207},[28,112281,112248],{"class":211},[28,112283,401],{"class":38},[28,112285,112253],{"class":211},[28,112287,742],{"class":207},[28,112289,102454],{"class":38},[28,112291,12512],{"class":211},[28,112293,102454],{"class":38},[28,112295,218],{"class":211},[28,112297,112298],{"class":30,"line":16687},[28,112299,2477],{"emptyLinePlaceholder":134},[28,112301,112302],{"class":30,"line":16710},[28,112303,101567],{"class":211},[28,112305,112306,112308,112310],{"class":30,"line":16716},[28,112307,110348],{"class":211},[28,112309,9554],{"class":207},[28,112311,112312],{"class":211}," reward(model, data)\n",[28,112314,112315],{"class":30,"line":16739},[28,112316,2477],{"emptyLinePlaceholder":134},[28,112318,112319,112321,112323,112325,112327,112329,112331],{"class":30,"line":16753},[28,112320,2574],{"class":207},[28,112322,31667],{"class":211},[28,112324,538],{"class":207},[28,112326,5831],{"class":38},[28,112328,101610],{"class":207},[28,112330,4170],{"class":38},[28,112332,3816],{"class":211},[28,112334,112335,112338,112340],{"class":30,"line":16773},[28,112336,112337],{"class":211},"            obs ",[28,112339,257],{"class":207},[28,112341,112342],{"class":211}," get_obs(model, data)\n",[28,112344,112345,112347,112349,112351],{"class":30,"line":16779},[28,112346,34701],{"class":38},[28,112348,212],{"class":211},[28,112350,110382],{"class":64},[28,112352,112353],{"class":211},", step)\n",[28,112355,112356,112358,112360,112363,112366,112368],{"class":30,"line":16790},[28,112357,34701],{"class":38},[28,112359,212],{"class":211},[28,112361,112362],{"class":64},"\"  tip:\"",[28,112364,112365],{"class":211},", np.round(tip, ",[28,112367,282],{"class":38},[28,112369,30548],{"class":211},[28,112371,112372,112374,112376,112379,112382,112384],{"class":30,"line":16813},[28,112373,34701],{"class":38},[28,112375,212],{"class":211},[28,112377,112378],{"class":64},"\"  target:\"",[28,112380,112381],{"class":211},", np.round(target, ",[28,112383,282],{"class":38},[28,112385,30548],{"class":211},[28,112387,112388,112390,112392,112395,112398,112400],{"class":30,"line":16835},[28,112389,34701],{"class":38},[28,112391,212],{"class":211},[28,112393,112394],{"class":64},"\"  ctrl:\"",[28,112396,112397],{"class":211},", np.round(data.ctrl.copy(), ",[28,112399,282],{"class":38},[28,112401,30548],{"class":211},[28,112403,112404,112406,112408,112411,112414,112416],{"class":30,"line":16840},[28,112405,34701],{"class":38},[28,112407,212],{"class":211},[28,112409,112410],{"class":64},"\"  obs_dim:\"",[28,112412,112413],{"class":211},", obs.shape[",[28,112415,401],{"class":38},[28,112417,4734],{"class":211},[28,112419,112420],{"class":30,"line":16846},[28,112421,2477],{"emptyLinePlaceholder":134},[28,112423,112424,112426,112428,112430,112432,112434,112436,112438],{"class":30,"line":16860},[28,112425,31350],{"class":38},[28,112427,212],{"class":211},[28,112429,110427],{"class":64},[28,112431,12512],{"class":211},[28,112433,32069],{"class":38},[28,112435,110434],{"class":211},[28,112437,282],{"class":38},[28,112439,30548],{"class":211},[28,112441,112442,112444,112446,112449,112452,112454,112456,112458],{"class":30,"line":16873},[28,112443,31350],{"class":38},[28,112445,212],{"class":211},[28,112447,112448],{"class":64},"\"final tip:\"",[28,112450,112451],{"class":211},", np.round(site_position(model, data, ",[28,112453,111587],{"class":64},[28,112455,110396],{"class":211},[28,112457,282],{"class":38},[28,112459,30548],{"class":211},[28,112461,112462,112464,112466,112469,112471,112473,112475,112477],{"class":30,"line":16878},[28,112463,31350],{"class":38},[28,112465,212],{"class":211},[28,112467,112468],{"class":64},"\"target:\"",[28,112470,112451],{"class":211},[28,112472,112010],{"class":64},[28,112474,110396],{"class":211},[28,112476,282],{"class":38},[28,112478,30548],{"class":211},[28,112480,112481],{"class":30,"line":16892},[28,112482,2477],{"emptyLinePlaceholder":134},[28,112484,112485],{"class":30,"line":16897},[28,112486,2477],{"emptyLinePlaceholder":134},[28,112488,112489,112491,112493,112495,112497],{"class":30,"line":16903},[28,112490,1609],{"class":207},[28,112492,31271],{"class":38},[28,112494,101610],{"class":207},[28,112496,101613],{"class":64},[28,112498,3816],{"class":211},[28,112500,112501],{"class":30,"line":16908},[28,112502,101620],{"class":211},[14,112504,103621],{},[18,112506,112508],{"className":20,"code":112507,"language":22,"meta":23,"style":23},"touch ch7_reacher.py\n",[25,112509,112510],{"__ignoreMap":23},[28,112511,112512,112514],{"class":30,"line":31},[28,112513,101334],{"class":34},[28,112515,112516],{"class":64}," ch7_reacher.py\n",[14,112518,110495],{},[18,112520,112522],{"className":20,"code":112521,"language":22,"meta":23,"style":23},"python ch7_reacher.py\n",[25,112523,112524],{"__ignoreMap":23},[28,112525,112526,112528],{"class":30,"line":31},[28,112527,30431],{"class":34},[28,112529,112516],{"class":64},[177,112531,101623],{"id":101623},[14,112533,112534],{},"读取 site 坐标：",[18,112536,112538],{"className":30429,"code":112537,"language":30431,"meta":23,"style":23},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[25,112539,112540],{"__ignoreMap":23},[28,112541,112542,112544,112546,112548,112550],{"class":30,"line":31},[28,112543,31998],{"class":207},[28,112545,111907],{"class":34},[28,112547,111910],{"class":211},[28,112549,1379],{"class":38},[28,112551,111915],{"class":211},[14,112553,112554],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112556,110511],{},[18,112558,112560],{"className":30429,"code":112559,"language":30431,"meta":23,"style":23},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[25,112561,112562],{"__ignoreMap":23},[28,112563,112564,112566],{"class":30,"line":31},[28,112565,17123],{"class":207},[28,112567,112019],{"class":211},[14,112569,112570],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112572,109836],{},[18,112574,112576],{"className":30429,"code":112575,"language":30431,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[25,112577,112578,112590,112603],{"__ignoreMap":23},[28,112579,112580,112582,112584,112586,112588],{"class":30,"line":31},[28,112581,111647],{"class":211},[28,112583,257],{"class":207},[28,112585,111652],{"class":211},[28,112587,742],{"class":207},[28,112589,111657],{"class":211},[28,112591,112592,112595,112597,112599,112601],{"class":30,"line":42},[28,112593,112594],{"class":211},"control_cost ",[28,112596,257],{"class":207},[28,112598,112088],{"class":38},[28,112600,6595],{"class":207},[28,112602,112093],{"class":211},[28,112604,112605,112607,112609,112611,112613,112615,112617],{"class":30,"line":50},[28,112606,17123],{"class":207},[28,112608,109848],{"class":38},[28,112610,212],{"class":211},[28,112612,742],{"class":207},[28,112614,111647],{"class":211},[28,112616,742],{"class":207},[28,112618,112110],{"class":211},[14,112620,112621],{},"奖励由两部分组成：",[161,112623,112624,112629],{},[119,112625,112626,112628],{},[25,112627,111674],{},"：末端离目标越远，奖励越低。",[119,112630,112631,112634],{},[25,112632,112633],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112636,112637],{},"简单控制器：",[18,112639,112641],{"className":30429,"code":112640,"language":30431,"meta":23,"style":23},"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",[25,112642,112643,112656,112688],{"__ignoreMap":23},[28,112644,112645,112648,112650,112652,112654],{"class":30,"line":31},[28,112646,112647],{"class":211},"error ",[28,112649,257],{"class":207},[28,112651,112219],{"class":211},[28,112653,742],{"class":207},[28,112655,112224],{"class":211},[28,112657,112658,112660,112662,112664,112666,112668,112670,112672,112674,112676,112678,112680,112682,112684,112686],{"class":30,"line":42},[28,112659,105922],{"class":211},[28,112661,401],{"class":38},[28,112663,4520],{"class":211},[28,112665,257],{"class":207},[28,112667,112241],{"class":211},[28,112669,105311],{"class":38},[28,112671,6595],{"class":207},[28,112673,112248],{"class":211},[28,112675,288],{"class":38},[28,112677,112253],{"class":211},[28,112679,742],{"class":207},[28,112681,102454],{"class":38},[28,112683,12512],{"class":211},[28,112685,102454],{"class":38},[28,112687,218],{"class":211},[28,112689,112690,112692,112694,112696,112698,112700,112702,112704,112706,112708,112710,112712,112714,112716,112718],{"class":30,"line":50},[28,112691,105922],{"class":211},[28,112693,427],{"class":38},[28,112695,4520],{"class":211},[28,112697,257],{"class":207},[28,112699,112241],{"class":211},[28,112701,105311],{"class":38},[28,112703,6595],{"class":207},[28,112705,112248],{"class":211},[28,112707,401],{"class":38},[28,112709,112253],{"class":211},[28,112711,742],{"class":207},[28,112713,102454],{"class":38},[28,112715,12512],{"class":211},[28,112717,102454],{"class":38},[28,112719,218],{"class":211},[14,112721,112722],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[177,112724,101759],{"id":101759},[18,112726,112727],{"className":30429,"code":112537,"language":30431,"meta":23,"style":23},[25,112728,112729],{"__ignoreMap":23},[28,112730,112731,112733,112735,112737,112739],{"class":30,"line":31},[28,112732,31998],{"class":207},[28,112734,111907],{"class":34},[28,112736,111910],{"class":211},[28,112738,1379],{"class":38},[28,112740,111915],{"class":211},[14,112742,112743,112744,112746,112747,82590,112749,28436],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[25,112745,79861],{}," 是 site 的名字，比如 ",[25,112748,111587],{},[25,112750,112010],{},[18,112752,112754],{"className":30429,"code":112753,"language":30431,"meta":23,"style":23},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[25,112755,112756],{"__ignoreMap":23},[28,112757,112758,112760,112762],{"class":30,"line":31},[28,112759,103685],{"class":211},[28,112761,257],{"class":207},[28,112763,111924],{"class":211},[14,112765,112766],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[18,112768,112770],{"className":30429,"code":112769,"language":30431,"meta":23,"style":23},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[25,112771,112772,112784],{"__ignoreMap":23},[28,112773,112774,112776,112778,112780,112782],{"class":30,"line":31},[28,112775,1609],{"class":207},[28,112777,103500],{"class":211},[28,112779,1120],{"class":207},[28,112781,4170],{"class":38},[28,112783,3816],{"class":211},[28,112785,112786,112788,112790,112792,112794,112796,112798,112800,112802,112804],{"class":30,"line":42},[28,112787,103946],{"class":207},[28,112789,103486],{"class":38},[28,112791,212],{"class":211},[28,112793,263],{"class":207},[28,112795,111949],{"class":64},[28,112797,1106],{"class":38},[28,112799,79861],{"class":211},[28,112801,1156],{"class":38},[28,112803,461],{"class":64},[28,112805,218],{"class":211},[14,112807,112808,112809,112812,112813,112815],{},"如果 site 没找到，就主动报错。",[25,112810,112811],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[25,112814,79861],{}," 的值放进字符串里。",[18,112817,112819],{"className":30429,"code":112818,"language":30431,"meta":23,"style":23},"return data.site_xpos[site_id].copy()\n",[25,112820,112821],{"__ignoreMap":23},[28,112822,112823,112825],{"class":30,"line":31},[28,112824,17123],{"class":207},[28,112826,111966],{"class":211},[14,112828,112829,112830,112832,112833,112836],{},"返回这个 site 的世界坐标。",[25,112831,103731],{}," 里的每一行都是一个 site 的 ",[25,112834,112835],{},"(x, y, z)"," 坐标。",[18,112838,112840],{"className":30429,"code":112839,"language":30431,"meta":23,"style":23},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[25,112841,112842],{"__ignoreMap":23},[28,112843,112844,112846,112848],{"class":30,"line":31},[28,112845,31998],{"class":207},[28,112847,111981],{"class":34},[28,112849,111984],{"class":211},[14,112851,112852],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[18,112854,112856],{"className":30429,"code":112855,"language":30431,"meta":23,"style":23},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[25,112857,112858,112870],{"__ignoreMap":23},[28,112859,112860,112862,112864,112866,112868],{"class":30,"line":31},[28,112861,111619],{"class":211},[28,112863,257],{"class":207},[28,112865,111994],{"class":211},[28,112867,111587],{"class":64},[28,112869,218],{"class":211},[28,112871,112872,112874,112876,112878,112880],{"class":30,"line":42},[28,112873,111629],{"class":211},[28,112875,257],{"class":207},[28,112877,111994],{"class":211},[28,112879,112010],{"class":64},[28,112881,218],{"class":211},[14,112883,112884],{},"分别读取末端点和目标点的世界坐标。",[18,112886,112887],{"className":30429,"code":112559,"language":30431,"meta":23,"style":23},[25,112888,112889],{"__ignoreMap":23},[28,112890,112891,112893],{"class":30,"line":31},[28,112892,17123],{"class":207},[28,112894,112019],{"class":211},[14,112896,112897],{},"把四部分拼成一个观测数组：",[18,112899,112902],{"className":112900,"code":112901,"language":5264,"meta":23},[5262],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[25,112903,112901],{"__ignoreMap":23},[18,112905,112907],{"className":30429,"code":112906,"language":30431,"meta":23,"style":23},"dist = np.linalg.norm(tip - target)\n",[25,112908,112909],{"__ignoreMap":23},[28,112910,112911,112913,112915,112917,112919],{"class":30,"line":31},[28,112912,111647],{"class":211},[28,112914,257],{"class":207},[28,112916,111652],{"class":211},[28,112918,742],{"class":207},[28,112920,111657],{"class":211},[14,112922,112923,112924,112927,112928,112931],{},"计算 tip 到 target 的距离。",[25,112925,112926],{},"tip - target"," 得到一个三维向量，",[25,112929,112930],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112933,14710],{},[18,112935,112938],{"className":112936,"code":112937,"language":5264,"meta":23},[5262],"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",[25,112939,112937],{"__ignoreMap":23},[18,112941,112943],{"className":30429,"code":112942,"language":30431,"meta":23,"style":23},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[25,112944,112945],{"__ignoreMap":23},[28,112946,112947,112949,112951,112953,112955],{"class":30,"line":31},[28,112948,112594],{"class":211},[28,112950,257],{"class":207},[28,112952,112088],{"class":38},[28,112954,6595],{"class":207},[28,112956,112093],{"class":211},[14,112958,112959,112960,112963,112964,112967],{},"计算动作惩罚。",[25,112961,112962],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[25,112965,112966],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[18,112969,112971],{"className":30429,"code":112970,"language":30431,"meta":23,"style":23},"return float(-dist - control_cost)\n",[25,112972,112973],{"__ignoreMap":23},[28,112974,112975,112977,112979,112981,112983,112985,112987],{"class":30,"line":31},[28,112976,17123],{"class":207},[28,112978,109848],{"class":38},[28,112980,212],{"class":211},[28,112982,742],{"class":207},[28,112984,111647],{"class":211},[28,112986,742],{"class":207},[28,112988,112110],{"class":211},[14,112990,112991],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[18,112993,112994],{"className":30429,"code":110854,"language":30431,"meta":23,"style":23},[25,112995,112996],{"__ignoreMap":23},[28,112997,112998,113000,113002],{"class":30,"line":31},[28,112999,110861],{"class":211},[28,113001,257],{"class":207},[28,113003,104812],{"class":38},[14,113005,113006],{},"累计奖励变量，记录整个运行过程的总分。",[18,113008,113010],{"className":30429,"code":113009,"language":30431,"meta":23,"style":23},"for step in range(500):\n",[25,113011,113012],{"__ignoreMap":23},[28,113013,113014,113016,113018,113020,113022,113024,113026],{"class":30,"line":31},[28,113015,3102],{"class":207},[28,113017,31667],{"class":211},[28,113019,26094],{"class":207},[28,113021,32494],{"class":38},[28,113023,212],{"class":211},[28,113025,65125],{"class":38},[28,113027,30837],{"class":211},[14,113029,113030],{},"运行 500 个控制步。",[18,113032,113033],{"className":30429,"code":104594,"language":30431,"meta":23,"style":23},[25,113034,113035],{"__ignoreMap":23},[28,113036,113037],{"class":30,"line":31},[28,113038,104594],{"class":211},[14,113040,113041,113042,101069,113044,113046],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[25,113043,103282],{},[25,113045,103285],{}," 是当前状态下的坐标。",[18,113048,113050],{"className":30429,"code":113049,"language":30431,"meta":23,"style":23},"error = target - tip\n",[25,113051,113052],{"__ignoreMap":23},[28,113053,113054,113056,113058,113060,113062],{"class":30,"line":31},[28,113055,112647],{"class":211},[28,113057,257],{"class":207},[28,113059,112219],{"class":211},[28,113061,742],{"class":207},[28,113063,112224],{"class":211},[14,113065,113066],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[18,113068,113070],{"className":30429,"code":113069,"language":30431,"meta":23,"style":23},"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",[25,113071,113072,113104],{"__ignoreMap":23},[28,113073,113074,113076,113078,113080,113082,113084,113086,113088,113090,113092,113094,113096,113098,113100,113102],{"class":30,"line":31},[28,113075,105922],{"class":211},[28,113077,401],{"class":38},[28,113079,4520],{"class":211},[28,113081,257],{"class":207},[28,113083,112241],{"class":211},[28,113085,105311],{"class":38},[28,113087,6595],{"class":207},[28,113089,112248],{"class":211},[28,113091,288],{"class":38},[28,113093,112253],{"class":211},[28,113095,742],{"class":207},[28,113097,102454],{"class":38},[28,113099,12512],{"class":211},[28,113101,102454],{"class":38},[28,113103,218],{"class":211},[28,113105,113106,113108,113110,113112,113114,113116,113118,113120,113122,113124,113126,113128,113130,113132,113134],{"class":30,"line":42},[28,113107,105922],{"class":211},[28,113109,427],{"class":38},[28,113111,4520],{"class":211},[28,113113,257],{"class":207},[28,113115,112241],{"class":211},[28,113117,105311],{"class":38},[28,113119,6595],{"class":207},[28,113121,112248],{"class":211},[28,113123,401],{"class":38},[28,113125,112253],{"class":211},[28,113127,742],{"class":207},[28,113129,102454],{"class":38},[28,113131,12512],{"class":211},[28,113133,102454],{"class":38},[28,113135,218],{"class":211},[14,113137,113138,113139,113142],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[25,113140,113141],{},"error -> ctrl -> step"," 的流程。",[18,113144,113145],{"className":30429,"code":104556,"language":30431,"meta":23,"style":23},[25,113146,113147],{"__ignoreMap":23},[28,113148,113149],{"class":30,"line":31},[28,113150,104556],{"class":211},[14,113152,113153],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[18,113155,113157],{"className":30429,"code":113156,"language":30431,"meta":23,"style":23},"obs = get_obs(model, data)\n",[25,113158,113159],{"__ignoreMap":23},[28,113160,113161,113163,113165],{"class":30,"line":31},[28,113162,110905],{"class":211},[28,113164,257],{"class":207},[28,113166,112342],{"class":211},[14,113168,113169,113170,113173],{},"读取最新观测。后面打印 ",[25,113171,113172],{},"obs.shape[0]","，用来确认观测维度是 10。",[149,113175,102367],{"id":102366},[14,113177,113178],{},"观测维度为:",[18,113180,113183],{"className":113181,"code":113182,"language":5264,"meta":23},[5262],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[25,113184,113182],{"__ignoreMap":23},[14,113186,113187],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113189,113190],{},"程序每 100 步打印：",[18,113192,113195],{"className":113193,"code":113194,"language":5264,"meta":23},[5262],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[25,113196,113194],{"__ignoreMap":23},[14,113198,113199,113200,113202],{},"如果控制有效，你应该看到最终 ",[25,113201,103282],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[149,113204,102399],{"id":102398},[161,113206,113207,113210,113213,113219,113225,113232,113242],{},[119,113208,113209],{},"修改目标点位置。",[119,113211,113212],{},"重新运行，观察最终 tip 是否变化。",[119,113214,113215,113216,113218],{},"把 gravity 改成 ",[25,113217,102640],{},"，观察控制是否变差。",[119,113220,111232,113221,111236,113223,28436],{},[25,113222,102209],{},[25,113224,288],{},[119,113226,102462,113227,102465,113229,113231],{},[25,113228,110647],{},[25,113230,107358],{},"，观察机械臂是否更难移动。",[119,113233,102462,113234,82581,113236,102465,113238,113241],{},[25,113235,103285],{},[25,113237,104197],{},[25,113239,113240],{},"0.2 0 0.6","，观察 reward 和 final tip。",[119,113243,113244],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[149,113246,102504],{"id":102503},[177,113248,113250],{"id":113249},"site-not-found",[25,113251,113252],{},"site not found",[14,113254,113255,113256,101069,113259,28436],{},"检查 XML 中是否有 ",[25,113257,113258],{},"site name=\"tip\"",[25,113260,113261],{},"site name=\"target\"",[177,113263,113264],{"id":113264},"机械臂完全不动",[14,113266,102574],{},[161,113268,113269,113274,113277,113282],{},[119,113270,113271,113273],{},[25,113272,102209],{}," 是否为 2",[119,113275,113276],{},"actuator 是否引用正确 joint",[119,113278,113279,113281],{},[25,113280,101127],{}," 是否被赋值",[119,113283,113284,113285],{},"是否执行了 ",[25,113286,100736],{},[177,113288,113289],{"id":113289},"控制效果不好",[14,113291,113292],{},"正常。本章重点不是控制器最优，而是任务结构:",[18,113294,113297],{"className":113295,"code":113296,"language":5264,"meta":23},[5262],"obs → action → mj_step → reward → next_obs\n",[25,113298,113296],{"__ignoreMap":23},[177,113300,113302],{"id":113301},"tip-坐标不变化","tip 坐标不变化",[14,113304,102626],{},[161,113306,113307,113312,113320,113329],{},[119,113308,113309,113310,28436],{},"是否每步调用了 ",[25,113311,100736],{},[119,113313,113314,113315,101069,113317,28436],{},"是否写入了 ",[25,113316,106177],{},[25,113318,113319],{},"data.ctrl[1]",[119,113321,113322,113323,422,113326,28436],{},"actuator 是否正确引用 ",[25,113324,113325],{},"joint1",[25,113327,113328],{},"joint2",[119,113330,113331],{},"控制输入是否太小。",[177,113333,113334],{"id":113334},"目标点不会动",[14,113336,113337],{},"本章的 target 是固定 site：",[18,113339,113341],{"className":53118,"code":113340,"language":53120,"meta":23,"style":23},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[25,113342,113343],{"__ignoreMap":23},[28,113344,113345,113347,113349,113351,113353,113355,113357,113359,113362],{"class":30,"line":31},[28,113346,1120],{"class":211},[28,113348,103261],{"class":51351},[28,113350,14997],{"class":34},[28,113352,257],{"class":211},[28,113354,112010],{"class":64},[28,113356,101157],{"class":34},[28,113358,257],{"class":211},[28,113360,113361],{"class":64},"\"0.5 0 0.4\"",[28,113363,113364],{"class":211}," ...\u002F>\n",[14,113366,113367,113368,113370],{},"它直接挂在 ",[25,113369,101892],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[177,113372,113373],{"id":113373},"机械臂不像真实机械臂",[14,113375,113376],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[149,113378,102658],{"id":102657},[14,113380,113381],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113383,113384],{},"核心公式：",[18,113386,113389],{"className":113387,"code":113388,"language":5264,"meta":23},[5262],"distance = ||tip - target||\nreward = -distance - action_cost\n",[25,113390,113388],{"__ignoreMap":23},[14,113392,113393],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[126,113395,113396],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":23,"searchDepth":42,"depth":42,"links":113398},[113399,113400,113401,113406,113410,113411,113412,113420],{"id":100697,"depth":42,"text":100698},{"id":100820,"depth":42,"text":100821},{"id":101095,"depth":42,"text":101096,"children":113402},[113403,113404,113405],{"id":111602,"depth":50,"text":111603},{"id":111678,"depth":50,"text":111678},{"id":111708,"depth":50,"text":111709},{"id":101303,"depth":42,"text":101304,"children":113407},[113408,113409],{"id":101623,"depth":50,"text":101623},{"id":101759,"depth":50,"text":101759},{"id":102366,"depth":42,"text":102367},{"id":102398,"depth":42,"text":102399},{"id":102503,"depth":42,"text":102504,"children":113413},[113414,113415,113416,113417,113418,113419],{"id":113249,"depth":50,"text":113252},{"id":113264,"depth":50,"text":113264},{"id":113289,"depth":50,"text":113289},{"id":113301,"depth":50,"text":113302},{"id":113334,"depth":50,"text":113334},{"id":113373,"depth":50,"text":113373},{"id":102657,"depth":42,"text":102658},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111406,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113427,"title":113428,"body":113429,"description":23,"extension":132,"meta":116891,"navigation":134,"path":116892,"seo":116893,"stem":116894,"__hash__":116895},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113430,"toc":116862},[113431,113434,113436,113439,113442,113467,113470,113476,113479,113485,113487,113489,113513,113515,113533,113535,113578,113580,113607,113609,113612,113664,113667,113673,113682,113685,113723,113726,113765,113768,113776,113783,113786,113792,113794,113848,113855,113900,113903,113907,113923,113933,113935,115196,115198,115210,115212,115223,115225,115228,115249,115252,115255,115288,115294,115297,115330,115333,115336,115377,115382,115396,115399,115412,115417,115440,115442,115457,115467,115482,115489,115509,115524,115542,115545,115562,115570,115586,115592,115624,115637,115669,115679,115714,115728,115774,115788,115830,115841,115854,115860,115893,115896,115923,115933,115973,115983,116000,116007,116025,116028,116069,116082,116097,116100,116123,116126,116138,116141,116160,116165,116186,116189,116204,116207,116241,116253,116268,116271,116296,116299,116318,116321,116353,116356,116380,116386,116416,116423,116436,116439,116441,116443,116449,116452,116455,116467,116470,116472,116526,116528,116532,116538,116547,116550,116557,116559,116582,116585,116589,116591,116609,116615,116617,116650,116653,116659,116663,116666,116686,116691,116695,116702,116722,116727,116731,116734,116754,116757,116843,116847,116850,116856,116859],[10,113432,113428],{"id":113433},"_8gymnasium-风格强化学习接口基础",[149,113435,100698],{"id":100697},[14,113437,113438],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113440,113441],{},"你将实现:",[18,113443,113445],{"className":30429,"code":113444,"language":30431,"meta":23,"style":23},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[25,113446,113447,113457],{"__ignoreMap":23},[28,113448,113449,113452,113454],{"class":30,"line":31},[28,113450,113451],{"class":211},"obs, info ",[28,113453,257],{"class":207},[28,113455,113456],{"class":211}," env.reset()\n",[28,113458,113459,113462,113464],{"class":30,"line":42},[28,113460,113461],{"class":211},"obs, reward, terminated, truncated, info ",[28,113463,257],{"class":207},[28,113465,113466],{"class":211}," env.step(action)\n",[14,113468,113469],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113471,113472,113473,113475],{},"前面章节的代码都是“脚本式”的：在 ",[25,113474,102346],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113477,113478],{},"可以先记住 Gymnasium 环境的核心交互：",[18,113480,113483],{"className":113481,"code":113482,"language":5264,"meta":23},[5262],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[25,113484,113482],{"__ignoreMap":23},[149,113486,100821],{"id":100820},[14,113488,100824],{},[18,113490,113491],{"className":20,"code":104439,"language":22,"meta":23,"style":23},[25,113492,113493],{"__ignoreMap":23},[28,113494,113495,113497,113499,113501,113503,113505,113507,113509,113511],{"class":30,"line":31},[28,113496,24652],{"class":34},[28,113498,26366],{"class":64},[28,113500,23909],{"class":64},[28,113502,26451],{"class":38},[28,113504,104454],{"class":64},[28,113506,100849],{"class":64},[28,113508,102552],{"class":64},[28,113510,100865],{"class":64},[28,113512,104463],{"class":64},[14,113514,102870],{},[18,113516,113518],{"className":20,"code":113517,"language":22,"meta":23,"style":23},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[25,113519,113520],{"__ignoreMap":23},[28,113521,113522,113524,113526,113528,113530],{"class":30,"line":31},[28,113523,23906],{"class":34},[28,113525,23909],{"class":64},[28,113527,100981],{"class":64},[28,113529,107762],{"class":64},[28,113531,113532],{"class":64}," gymnasium\n",[14,113534,102887],{},[18,113536,113538],{"className":20,"code":113537,"language":22,"meta":23,"style":23},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[25,113539,113540,113557,113566],{"__ignoreMap":23},[28,113541,113542,113544,113546,113548,113551,113553,113555],{"class":30,"line":31},[28,113543,30381],{"class":34},[28,113545,29227],{"class":64},[28,113547,25186],{"class":38},[28,113549,113550],{"class":64}," mujoco-gym-api",[28,113552,101026],{"class":64},[28,113554,101029],{"class":38},[28,113556,101032],{"class":38},[28,113558,113559,113561,113563],{"class":30,"line":42},[28,113560,30381],{"class":34},[28,113562,101039],{"class":64},[28,113564,113565],{"class":64}," mujoco-gym-api\n",[28,113567,113568,113570,113572,113574,113576],{"class":30,"line":50},[28,113569,23906],{"class":34},[28,113571,23909],{"class":64},[28,113573,100981],{"class":64},[28,113575,107762],{"class":64},[28,113577,113532],{"class":64},[14,113579,101055],{},[161,113581,113582,113592,113595,113601],{},[119,113583,113584,113585,113588,113589,28436],{},"本章使用 ",[25,113586,113587],{},"gymnasium","，不是旧版 ",[25,113590,113591],{},"gym",[119,113593,113594],{},"Gymnasium API 与旧 Gym API 有差异。",[119,113596,113597,113598,28436],{},"旧 Gym 常见返回值是 4 个: ",[25,113599,113600],{},"obs, reward, done, info",[119,113602,113603,113604,28436],{},"Gymnasium 返回值是 5 个: ",[25,113605,113606],{},"obs, reward, terminated, truncated, info",[149,113608,101096],{"id":101095},[14,113610,113611],{},"强化学习环境接口包含:",[347,113613,113614,113623],{},[350,113615,113616],{},[353,113617,113618,113621],{},[356,113619,113620],{"align":23813},"方法",[356,113622,102747],{"align":23813},[394,113624,113625,113635,113645,113655],{},[353,113626,113627,113632],{},[399,113628,113629],{"align":23813},[25,113630,113631],{},"reset()",[399,113633,113634],{"align":23813},"重置环境",[353,113636,113637,113642],{},[399,113638,113639],{"align":23813},[25,113640,113641],{},"step(action)",[399,113643,113644],{"align":23813},"执行动作",[353,113646,113647,113652],{},[399,113648,113649],{"align":23813},[25,113650,113651],{},"observation_space",[399,113653,113654],{"align":23813},"观测空间",[353,113656,113657,113662],{},[399,113658,113659],{"align":23813},[25,113660,113661],{},"action_space",[399,113663,23731],{"align":23813},[14,113665,113666],{},"一个最小环境需要完成:",[18,113668,113671],{"className":113669,"code":113670,"language":5264,"meta":23},[5262],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[25,113672,113670],{"__ignoreMap":23},[177,113674,113676,101069,113679,104689],{"id":113675},"terminated-和-truncated-的区别",[25,113677,113678],{},"terminated",[25,113680,113681],{},"truncated",[14,113683,113684],{},"Gymnasium 把“结束”拆成两个概念：",[347,113686,113687,113697],{},[350,113688,113689],{},[353,113690,113691,113693,113695],{},[356,113692,104625],{"align":23813},[356,113694,100751],{"align":23813},[356,113696,21264],{"align":23813},[394,113698,113699,113711],{},[353,113700,113701,113705,113708],{},[399,113702,113703],{"align":23813},[25,113704,113678],{},[399,113706,113707],{"align":23813},"任务自然结束",[399,113709,113710],{"align":23813},"机械臂到达目标、机器人摔倒",[353,113712,113713,113717,113720],{},[399,113714,113715],{"align":23813},[25,113716,113681],{},[399,113718,113719],{"align":23813},"因外部限制截断",[399,113721,113722],{"align":23813},"达到最大步数、时间限制",[14,113724,113725],{},"本章中：",[18,113727,113729],{"className":30429,"code":113728,"language":30431,"meta":23,"style":23},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[25,113730,113731,113746],{"__ignoreMap":23},[28,113732,113733,113736,113738,113741,113743],{"class":30,"line":31},[28,113734,113735],{"class":211},"terminated ",[28,113737,257],{"class":207},[28,113739,113740],{"class":211}," dist ",[28,113742,1120],{"class":207},[28,113744,113745],{"class":38}," 0.05\n",[28,113747,113748,113751,113753,113755,113758,113760,113762],{"class":30,"line":42},[28,113749,113750],{"class":211},"truncated ",[28,113752,257],{"class":207},[28,113754,38924],{"class":38},[28,113756,113757],{"class":211},".steps ",[28,113759,1788],{"class":207},[28,113761,38924],{"class":38},[28,113763,113764],{"class":211},".max_steps\n",[14,113766,113767],{},"也就是：",[161,113769,113770,113773],{},[119,113771,113772],{},"末端距离目标小于 0.05，任务成功结束。",[119,113774,113775],{},"步数超过上限，episode 被截断。",[177,113777,113779,101069,113781],{"id":113778},"observation_space-和-action_space",[25,113780,113651],{},[25,113782,113661],{},[14,113784,113785],{},"这两个对象告诉算法：",[18,113787,113790],{"className":113788,"code":113789,"language":5264,"meta":23},[5262],"观测长什么样\n动作允许多大\n",[25,113791,113789],{"__ignoreMap":23},[14,113793,14710],{},[18,113795,113797],{"className":30429,"code":113796,"language":30431,"meta":23,"style":23},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[25,113798,113799],{"__ignoreMap":23},[28,113800,113801,113803,113806,113808,113811,113814,113817,113819,113821,113824,113826,113828,113830,113832,113834,113836,113838,113841,113843,113845],{"class":30,"line":31},[28,113802,30874],{"class":38},[28,113804,113805],{"class":211},".action_space ",[28,113807,257],{"class":207},[28,113809,113810],{"class":211}," spaces.Box(",[28,113812,113813],{"class":5293},"low",[28,113815,113816],{"class":207},"=-",[28,113818,102454],{"class":38},[28,113820,12512],{"class":211},[28,113822,113823],{"class":5293},"high",[28,113825,257],{"class":207},[28,113827,102454],{"class":38},[28,113829,12512],{"class":211},[28,113831,96014],{"class":5293},[28,113833,257],{"class":207},[28,113835,212],{"class":211},[28,113837,288],{"class":38},[28,113839,113840],{"class":211},",), ",[28,113842,93551],{"class":5293},[28,113844,257],{"class":207},[28,113846,113847],{"class":211},"np.float32)\n",[14,113849,113850,113851,113854],{},"表示动作是 2 维数组，每个值都在 ",[25,113852,113853],{},"[-1, 1]"," 范围内。",[18,113856,113858],{"className":30429,"code":113857,"language":30431,"meta":23,"style":23},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[25,113859,113860],{"__ignoreMap":23},[28,113861,113862,113864,113867,113869,113871,113873,113875,113878,113880,113882,113884,113886,113888,113890,113892,113894,113896,113898],{"class":30,"line":31},[28,113863,30874],{"class":38},[28,113865,113866],{"class":211},".observation_space ",[28,113868,257],{"class":207},[28,113870,113810],{"class":211},[28,113872,113813],{"class":5293},[28,113874,113816],{"class":207},[28,113876,113877],{"class":211},"np.inf, ",[28,113879,113823],{"class":5293},[28,113881,257],{"class":207},[28,113883,113877],{"class":211},[28,113885,96014],{"class":5293},[28,113887,257],{"class":207},[28,113889,212],{"class":211},[28,113891,656],{"class":38},[28,113893,113840],{"class":211},[28,113895,93551],{"class":5293},[28,113897,257],{"class":207},[28,113899,113847],{"class":211},[14,113901,113902],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[177,113904,113906],{"id":113905},"frame_skip-是什么","frame_skip 是什么",[18,113908,113910],{"className":30429,"code":113909,"language":30431,"meta":23,"style":23},"self.frame_skip = 5\n",[25,113911,113912],{"__ignoreMap":23},[28,113913,113914,113916,113919,113921],{"class":30,"line":31},[28,113915,30874],{"class":38},[28,113917,113918],{"class":211},".frame_skip ",[28,113920,257],{"class":207},[28,113922,54478],{"class":38},[14,113924,113925,113926,113929,113930,113932],{},"表示外部调用一次 ",[25,113927,113928],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[25,113931,101266],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[149,113934,101304],{"id":101303},[18,113936,113938],{"className":30429,"code":113937,"language":30431,"meta":23,"style":23},"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",[25,113939,113940,113952,113958,113968,113979,113983,113987,113995,114000,114004,114008,114012,114016,114020,114024,114028,114033,114037,114041,114045,114050,114054,114058,114062,114066,114070,114074,114078,114082,114086,114090,114094,114098,114102,114120,114135,114139,114152,114162,114177,114194,114198,114219,114238,114263,114277,114281,114291,114303,114313,114317,114359,114397,114401,114411,114427,114442,114461,114468,114472,114485,114500,114515,114528,114547,114563,114567,114608,114623,114638,114642,114681,114692,114705,114709,114719,114728,114732,114742,114757,114775,114779,114790,114807,114820,114824,114834,114838,114849,114860,114864,114878,114892,114908,114912,114925,114942,114957,114964,114968,114972,114984,114994,115012,115024,115036,115040,115048,115064,115073,115082,115090,115132,115145,115150,115154,115172,115176,115180,115192],{"__ignoreMap":23},[28,113941,113942,113944,113947,113949],{"class":30,"line":31},[28,113943,30443],{"class":207},[28,113945,113946],{"class":211}," gymnasium ",[28,113948,31434],{"class":207},[28,113950,113951],{"class":211}," gym\n",[28,113953,113954,113956],{"class":30,"line":42},[28,113955,30443],{"class":207},[28,113957,101352],{"class":211},[28,113959,113960,113962,113964,113966],{"class":30,"line":50},[28,113961,30443],{"class":207},[28,113963,31431],{"class":211},[28,113965,31434],{"class":207},[28,113967,31437],{"class":211},[28,113969,113970,113972,113974,113976],{"class":30,"line":58},[28,113971,30788],{"class":207},[28,113973,113946],{"class":211},[28,113975,30443],{"class":207},[28,113977,113978],{"class":211}," spaces\n",[28,113980,113981],{"class":30,"line":70},[28,113982,2477],{"emptyLinePlaceholder":134},[28,113984,113985],{"class":30,"line":78},[28,113986,2477],{"emptyLinePlaceholder":134},[28,113988,113989,113991,113993],{"class":30,"line":86},[28,113990,101365],{"class":38},[28,113992,13641],{"class":207},[28,113994,101370],{"class":64},[28,113996,113997],{"class":30,"line":97},[28,113998,113999],{"class":64},"\u003Cmujoco model=\"gym_reacher\">\n",[28,114001,114002],{"class":30,"line":108},[28,114003,111789],{"class":64},[28,114005,114006],{"class":30,"line":1407},[28,114007,2477],{"emptyLinePlaceholder":134},[28,114009,114010],{"class":30,"line":1690},[28,114011,101389],{"class":64},[28,114013,114014],{"class":30,"line":1695},[28,114015,111807],{"class":64},[28,114017,114018],{"class":30,"line":1701},[28,114019,2477],{"emptyLinePlaceholder":134},[28,114021,114022],{"class":30,"line":1706},[28,114023,111816],{"class":64},[28,114025,114026],{"class":30,"line":1720},[28,114027,111821],{"class":64},[28,114029,114030],{"class":30,"line":1725},[28,114031,114032],{"class":64},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[28,114034,114035],{"class":30,"line":1731},[28,114036,2477],{"emptyLinePlaceholder":134},[28,114038,114039],{"class":30,"line":1752},[28,114040,111835],{"class":64},[28,114042,114043],{"class":30,"line":1757},[28,114044,111840],{"class":64},[28,114046,114047],{"class":30,"line":1771},[28,114048,114049],{"class":64},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[28,114051,114052],{"class":30,"line":1776},[28,114053,111850],{"class":64},[28,114055,114056],{"class":30,"line":1805},[28,114057,106489],{"class":64},[28,114059,114060],{"class":30,"line":1810},[28,114061,101418],{"class":64},[28,114063,114064],{"class":30,"line":1827},[28,114065,101423],{"class":64},[28,114067,114068],{"class":30,"line":1832},[28,114069,2477],{"emptyLinePlaceholder":134},[28,114071,114072],{"class":30,"line":1837},[28,114073,106506],{"class":64},[28,114075,114076],{"class":30,"line":1842},[28,114077,111875],{"class":64},[28,114079,114080],{"class":30,"line":1856},[28,114081,111880],{"class":64},[28,114083,114084],{"class":30,"line":1861},[28,114085,106516],{"class":64},[28,114087,114088],{"class":30,"line":2654},[28,114089,101428],{"class":64},[28,114091,114092],{"class":30,"line":2668},[28,114093,95749],{"class":64},[28,114095,114096],{"class":30,"line":2676},[28,114097,2477],{"emptyLinePlaceholder":134},[28,114099,114100],{"class":30,"line":2681},[28,114101,2477],{"emptyLinePlaceholder":134},[28,114103,114104,114106,114109,114111,114113,114115,114118],{"class":30,"line":2687},[28,114105,14771],{"class":207},[28,114107,114108],{"class":34}," ReacherEnv",[28,114110,212],{"class":211},[28,114112,113591],{"class":34},[28,114114,768],{"class":211},[28,114116,114117],{"class":34},"Env",[28,114119,30837],{"class":211},[28,114121,114122,114125,114127,114129,114132],{"class":30,"line":2693},[28,114123,114124],{"class":211},"    metadata ",[28,114126,257],{"class":207},[28,114128,4525],{"class":211},[28,114130,114131],{"class":64},"\"render_modes\"",[28,114133,114134],{"class":211},": []}\n",[28,114136,114137],{"class":30,"line":2698},[28,114138,2477],{"emptyLinePlaceholder":134},[28,114140,114141,114143,114145,114148,114150],{"class":30,"line":8025},[28,114142,30852],{"class":207},[28,114144,30855],{"class":38},[28,114146,114147],{"class":211},"(self) -> ",[28,114149,95737],{"class":38},[28,114151,3816],{"class":211},[28,114153,114154,114156,114158,114160],{"class":30,"line":8049},[28,114155,30868],{"class":38},[28,114157,17338],{"class":211},[28,114159,30880],{"class":38},[28,114161,2053],{"class":211},[28,114163,114164,114166,114169,114171,114173,114175],{"class":30,"line":8054},[28,114165,30896],{"class":38},[28,114167,114168],{"class":211},".model ",[28,114170,257],{"class":207},[28,114172,101463],{"class":211},[28,114174,101365],{"class":38},[28,114176,218],{"class":211},[28,114178,114179,114181,114184,114186,114189,114191],{"class":30,"line":8060},[28,114180,30896],{"class":38},[28,114182,114183],{"class":211},".data ",[28,114185,257],{"class":207},[28,114187,114188],{"class":211}," mujoco.MjData(",[28,114190,30874],{"class":38},[28,114192,114193],{"class":211},".model)\n",[28,114195,114196],{"class":30,"line":8087},[28,114197,2477],{"emptyLinePlaceholder":134},[28,114199,114200,114202,114205,114207,114210,114212,114215,114217],{"class":30,"line":8092},[28,114201,30896],{"class":38},[28,114203,114204],{"class":211},".tip_site_id ",[28,114206,257],{"class":207},[28,114208,114209],{"class":211}," mujoco.mj_name2id(",[28,114211,30874],{"class":38},[28,114213,114214],{"class":211},".model, mujoco.mjtObj.mjOBJ_SITE, ",[28,114216,111587],{"class":64},[28,114218,218],{"class":211},[28,114220,114221,114223,114226,114228,114230,114232,114234,114236],{"class":30,"line":8098},[28,114222,30896],{"class":38},[28,114224,114225],{"class":211},".target_site_id ",[28,114227,257],{"class":207},[28,114229,114209],{"class":211},[28,114231,30874],{"class":38},[28,114233,114214],{"class":211},[28,114235,112010],{"class":64},[28,114237,218],{"class":211},[28,114239,114240,114242,114244,114246,114248,114250,114253,114255,114257,114259,114261],{"class":30,"line":8110},[28,114241,2574],{"class":207},[28,114243,38924],{"class":38},[28,114245,114204],{"class":211},[28,114247,1120],{"class":207},[28,114249,4170],{"class":38},[28,114251,114252],{"class":207}," or",[28,114254,38924],{"class":38},[28,114256,114225],{"class":211},[28,114258,1120],{"class":207},[28,114260,4170],{"class":38},[28,114262,3816],{"class":211},[28,114264,114265,114268,114270,114272,114275],{"class":30,"line":8122},[28,114266,114267],{"class":207},"            raise",[28,114269,103486],{"class":38},[28,114271,212],{"class":211},[28,114273,114274],{"class":64},"\"required sites not found\"",[28,114276,218],{"class":211},[28,114278,114279],{"class":30,"line":8134},[28,114280,2477],{"emptyLinePlaceholder":134},[28,114282,114283,114285,114287,114289],{"class":30,"line":9793},[28,114284,30896],{"class":38},[28,114286,113918],{"class":211},[28,114288,257],{"class":207},[28,114290,54478],{"class":38},[28,114292,114293,114295,114298,114300],{"class":30,"line":9818},[28,114294,30896],{"class":38},[28,114296,114297],{"class":211},".max_steps ",[28,114299,257],{"class":207},[28,114301,114302],{"class":38}," 200\n",[28,114304,114305,114307,114309,114311],{"class":30,"line":9841},[28,114306,30896],{"class":38},[28,114308,113757],{"class":211},[28,114310,257],{"class":207},[28,114312,47384],{"class":38},[28,114314,114315],{"class":30,"line":9865},[28,114316,2477],{"emptyLinePlaceholder":134},[28,114318,114319,114321,114323,114325,114327,114329,114331,114333,114335,114337,114339,114341,114343,114345,114347,114349,114351,114353,114355,114357],{"class":30,"line":9870},[28,114320,30896],{"class":38},[28,114322,113805],{"class":211},[28,114324,257],{"class":207},[28,114326,113810],{"class":211},[28,114328,113813],{"class":5293},[28,114330,113816],{"class":207},[28,114332,102454],{"class":38},[28,114334,12512],{"class":211},[28,114336,113823],{"class":5293},[28,114338,257],{"class":207},[28,114340,102454],{"class":38},[28,114342,12512],{"class":211},[28,114344,96014],{"class":5293},[28,114346,257],{"class":207},[28,114348,212],{"class":211},[28,114350,288],{"class":38},[28,114352,113840],{"class":211},[28,114354,93551],{"class":5293},[28,114356,257],{"class":207},[28,114358,113847],{"class":211},[28,114360,114361,114363,114365,114367,114369,114371,114373,114375,114377,114379,114381,114383,114385,114387,114389,114391,114393,114395],{"class":30,"line":9875},[28,114362,30896],{"class":38},[28,114364,113866],{"class":211},[28,114366,257],{"class":207},[28,114368,113810],{"class":211},[28,114370,113813],{"class":5293},[28,114372,113816],{"class":207},[28,114374,113877],{"class":211},[28,114376,113823],{"class":5293},[28,114378,257],{"class":207},[28,114380,113877],{"class":211},[28,114382,96014],{"class":5293},[28,114384,257],{"class":207},[28,114386,212],{"class":211},[28,114388,656],{"class":38},[28,114390,113840],{"class":211},[28,114392,93551],{"class":5293},[28,114394,257],{"class":207},[28,114396,113847],{"class":211},[28,114398,114399],{"class":30,"line":9880},[28,114400,2477],{"emptyLinePlaceholder":134},[28,114402,114403,114405,114408],{"class":30,"line":9889},[28,114404,30852],{"class":207},[28,114406,114407],{"class":34}," _get_obs",[28,114409,114410],{"class":211},"(self) -> np.ndarray:\n",[28,114412,114413,114415,114417,114419,114422,114424],{"class":30,"line":9894},[28,114414,112188],{"class":211},[28,114416,257],{"class":207},[28,114418,38924],{"class":38},[28,114420,114421],{"class":211},".data.site_xpos[",[28,114423,30874],{"class":38},[28,114425,114426],{"class":211},".tip_site_id].copy()\n",[28,114428,114429,114431,114433,114435,114437,114439],{"class":30,"line":9900},[28,114430,112201],{"class":211},[28,114432,257],{"class":207},[28,114434,38924],{"class":38},[28,114436,114421],{"class":211},[28,114438,30874],{"class":38},[28,114440,114441],{"class":211},".target_site_id].copy()\n",[28,114443,114444,114446,114448,114451,114453,114456,114458],{"class":30,"line":9921},[28,114445,110233],{"class":211},[28,114447,257],{"class":207},[28,114449,114450],{"class":211}," np.concatenate([",[28,114452,30874],{"class":38},[28,114454,114455],{"class":211},".data.qpos.copy(), ",[28,114457,30874],{"class":38},[28,114459,114460],{"class":211},".data.qvel.copy(), tip, target])\n",[28,114462,114463,114465],{"class":30,"line":9927},[28,114464,14829],{"class":207},[28,114466,114467],{"class":211}," obs.astype(np.float32)\n",[28,114469,114470],{"class":30,"line":9941},[28,114471,2477],{"emptyLinePlaceholder":134},[28,114473,114474,114476,114479,114481,114483],{"class":30,"line":9947},[28,114475,30852],{"class":207},[28,114477,114478],{"class":34}," _get_reward",[28,114480,114147],{"class":211},[28,114482,251],{"class":38},[28,114484,3816],{"class":211},[28,114486,114487,114489,114491,114493,114495,114497],{"class":30,"line":9974},[28,114488,112188],{"class":211},[28,114490,257],{"class":207},[28,114492,38924],{"class":38},[28,114494,114421],{"class":211},[28,114496,30874],{"class":38},[28,114498,114499],{"class":211},".tip_site_id]\n",[28,114501,114502,114504,114506,114508,114510,114512],{"class":30,"line":9983},[28,114503,112201],{"class":211},[28,114505,257],{"class":207},[28,114507,38924],{"class":38},[28,114509,114421],{"class":211},[28,114511,30874],{"class":38},[28,114513,114514],{"class":211},".target_site_id]\n",[28,114516,114517,114520,114522,114524,114526],{"class":30,"line":9989},[28,114518,114519],{"class":211},"        dist ",[28,114521,257],{"class":207},[28,114523,111652],{"class":211},[28,114525,742],{"class":207},[28,114527,111657],{"class":211},[28,114529,114530,114533,114535,114537,114539,114542,114544],{"class":30,"line":9997},[28,114531,114532],{"class":211},"        control_cost ",[28,114534,257],{"class":207},[28,114536,112088],{"class":38},[28,114538,6595],{"class":207},[28,114540,114541],{"class":211}," np.sum(np.square(",[28,114543,30874],{"class":38},[28,114545,114546],{"class":211},".data.ctrl))\n",[28,114548,114549,114551,114553,114555,114557,114559,114561],{"class":30,"line":10002},[28,114550,14829],{"class":207},[28,114552,109848],{"class":38},[28,114554,212],{"class":211},[28,114556,742],{"class":207},[28,114558,111647],{"class":211},[28,114560,742],{"class":207},[28,114562,112110],{"class":211},[28,114564,114565],{"class":30,"line":16681},[28,114566,2477],{"emptyLinePlaceholder":134},[28,114568,114569,114571,114574,114577,114579,114582,114584,114586,114588,114590,114592,114595,114598,114600,114602,114604,114606],{"class":30,"line":16687},[28,114570,30852],{"class":207},[28,114572,114573],{"class":34}," reset",[28,114575,114576],{"class":211},"(self, ",[28,114578,665],{"class":207},[28,114580,114581],{"class":211},", seed: ",[28,114583,215],{"class":38},[28,114585,25180],{"class":207},[28,114587,38984],{"class":38},[28,114589,13641],{"class":207},[28,114591,38984],{"class":38},[28,114593,114594],{"class":211},", options: ",[28,114596,114597],{"class":38},"dict",[28,114599,25180],{"class":207},[28,114601,38984],{"class":38},[28,114603,13641],{"class":207},[28,114605,38984],{"class":38},[28,114607,30837],{"class":211},[28,114609,114610,114612,114615,114618,114620],{"class":30,"line":16710},[28,114611,30868],{"class":38},[28,114613,114614],{"class":211},"().reset(",[28,114616,114617],{"class":5293},"seed",[28,114619,257],{"class":207},[28,114621,114622],{"class":211},"seed)\n",[28,114624,114625,114628,114630,114633,114635],{"class":30,"line":16716},[28,114626,114627],{"class":211},"        mujoco.mj_resetData(",[28,114629,30874],{"class":38},[28,114631,114632],{"class":211},".model, ",[28,114634,30874],{"class":38},[28,114636,114637],{"class":211},".data)\n",[28,114639,114640],{"class":30,"line":16739},[28,114641,2477],{"emptyLinePlaceholder":134},[28,114643,114644,114646,114649,114651,114653,114656,114658,114660,114662,114664,114666,114668,114670,114672,114674,114676,114678],{"class":30,"line":16753},[28,114645,30896],{"class":38},[28,114647,114648],{"class":211},".data.qpos[:] ",[28,114650,257],{"class":207},[28,114652,38924],{"class":38},[28,114654,114655],{"class":211},".np_random.uniform(",[28,114657,113813],{"class":5293},[28,114659,113816],{"class":207},[28,114661,86261],{"class":38},[28,114663,12512],{"class":211},[28,114665,113823],{"class":5293},[28,114667,257],{"class":207},[28,114669,86261],{"class":38},[28,114671,12512],{"class":211},[28,114673,31547],{"class":5293},[28,114675,257],{"class":207},[28,114677,30874],{"class":38},[28,114679,114680],{"class":211},".model.nq)\n",[28,114682,114683,114685,114688,114690],{"class":30,"line":16773},[28,114684,30896],{"class":38},[28,114686,114687],{"class":211},".data.qvel[:] ",[28,114689,257],{"class":207},[28,114691,104812],{"class":38},[28,114693,114694,114697,114699,114701,114703],{"class":30,"line":16779},[28,114695,114696],{"class":211},"        mujoco.mj_forward(",[28,114698,30874],{"class":38},[28,114700,114632],{"class":211},[28,114702,30874],{"class":38},[28,114704,114637],{"class":211},[28,114706,114707],{"class":30,"line":16790},[28,114708,2477],{"emptyLinePlaceholder":134},[28,114710,114711,114713,114715,114717],{"class":30,"line":16813},[28,114712,30896],{"class":38},[28,114714,113757],{"class":211},[28,114716,257],{"class":207},[28,114718,47384],{"class":38},[28,114720,114721,114723,114725],{"class":30,"line":16835},[28,114722,14829],{"class":207},[28,114724,38924],{"class":38},[28,114726,114727],{"class":211},"._get_obs(), {}\n",[28,114729,114730],{"class":30,"line":16840},[28,114731,2477],{"emptyLinePlaceholder":134},[28,114733,114734,114736,114739],{"class":30,"line":16846},[28,114735,30852],{"class":207},[28,114737,114738],{"class":34}," step",[28,114740,114741],{"class":211},"(self, action):\n",[28,114743,114744,114746,114748,114751,114753,114755],{"class":30,"line":16860},[28,114745,110273],{"class":211},[28,114747,257],{"class":207},[28,114749,114750],{"class":211}," np.asarray(action, ",[28,114752,93551],{"class":5293},[28,114754,257],{"class":207},[28,114756,113847],{"class":211},[28,114758,114759,114761,114763,114765,114767,114770,114772],{"class":30,"line":16873},[28,114760,110273],{"class":211},[28,114762,257],{"class":207},[28,114764,107498],{"class":211},[28,114766,30874],{"class":38},[28,114768,114769],{"class":211},".action_space.low, ",[28,114771,30874],{"class":38},[28,114773,114774],{"class":211},".action_space.high)\n",[28,114776,114777],{"class":30,"line":16878},[28,114778,2477],{"emptyLinePlaceholder":134},[28,114780,114781,114783,114786,114788],{"class":30,"line":16892},[28,114782,30896],{"class":38},[28,114784,114785],{"class":211},".data.ctrl[:] ",[28,114787,257],{"class":207},[28,114789,107521],{"class":211},[28,114791,114792,114794,114796,114798,114800,114802,114804],{"class":30,"line":16897},[28,114793,3480],{"class":207},[28,114795,101552],{"class":211},[28,114797,26094],{"class":207},[28,114799,32494],{"class":38},[28,114801,212],{"class":211},[28,114803,30874],{"class":38},[28,114805,114806],{"class":211},".frame_skip):\n",[28,114808,114809,114812,114814,114816,114818],{"class":30,"line":16903},[28,114810,114811],{"class":211},"            mujoco.mj_step(",[28,114813,30874],{"class":38},[28,114815,114632],{"class":211},[28,114817,30874],{"class":38},[28,114819,114637],{"class":211},[28,114821,114822],{"class":30,"line":16908},[28,114823,2477],{"emptyLinePlaceholder":134},[28,114825,114826,114828,114830,114832],{"class":30,"line":16922},[28,114827,30896],{"class":38},[28,114829,113757],{"class":211},[28,114831,9554],{"class":207},[28,114833,55750],{"class":38},[28,114835,114836],{"class":30,"line":16927},[28,114837,2477],{"emptyLinePlaceholder":134},[28,114839,114840,114842,114844,114846],{"class":30,"line":16932},[28,114841,110233],{"class":211},[28,114843,257],{"class":207},[28,114845,38924],{"class":38},[28,114847,114848],{"class":211},"._get_obs()\n",[28,114850,114851,114853,114855,114857],{"class":30,"line":16946},[28,114852,110338],{"class":211},[28,114854,257],{"class":207},[28,114856,38924],{"class":38},[28,114858,114859],{"class":211},"._get_reward()\n",[28,114861,114862],{"class":30,"line":16958},[28,114863,2477],{"emptyLinePlaceholder":134},[28,114865,114866,114868,114870,114872,114874,114876],{"class":30,"line":16963},[28,114867,112188],{"class":211},[28,114869,257],{"class":207},[28,114871,38924],{"class":38},[28,114873,114421],{"class":211},[28,114875,30874],{"class":38},[28,114877,114499],{"class":211},[28,114879,114880,114882,114884,114886,114888,114890],{"class":30,"line":16976},[28,114881,112201],{"class":211},[28,114883,257],{"class":207},[28,114885,38924],{"class":38},[28,114887,114421],{"class":211},[28,114889,30874],{"class":38},[28,114891,114514],{"class":211},[28,114893,114894,114896,114898,114900,114903,114905],{"class":30,"line":16981},[28,114895,114519],{"class":211},[28,114897,257],{"class":207},[28,114899,109848],{"class":38},[28,114901,114902],{"class":211},"(np.linalg.norm(tip ",[28,114904,742],{"class":207},[28,114906,114907],{"class":211}," target))\n",[28,114909,114910],{"class":30,"line":16986},[28,114911,2477],{"emptyLinePlaceholder":134},[28,114913,114914,114917,114919,114921,114923],{"class":30,"line":16991},[28,114915,114916],{"class":211},"        terminated ",[28,114918,257],{"class":207},[28,114920,113740],{"class":211},[28,114922,1120],{"class":207},[28,114924,113745],{"class":38},[28,114926,114927,114930,114932,114934,114936,114938,114940],{"class":30,"line":17004},[28,114928,114929],{"class":211},"        truncated ",[28,114931,257],{"class":207},[28,114933,38924],{"class":38},[28,114935,113757],{"class":211},[28,114937,1788],{"class":207},[28,114939,38924],{"class":38},[28,114941,113764],{"class":211},[28,114943,114944,114947,114949,114951,114954],{"class":30,"line":17009},[28,114945,114946],{"class":211},"        info ",[28,114948,257],{"class":207},[28,114950,4525],{"class":211},[28,114952,114953],{"class":64},"\"distance\"",[28,114955,114956],{"class":211},": dist}\n",[28,114958,114959,114961],{"class":30,"line":32684},[28,114960,14829],{"class":207},[28,114962,114963],{"class":211}," obs, reward, terminated, truncated, info\n",[28,114965,114966],{"class":30,"line":32690},[28,114967,2477],{"emptyLinePlaceholder":134},[28,114969,114970],{"class":30,"line":32696},[28,114971,2477],{"emptyLinePlaceholder":134},[28,114973,114974,114976,114978,114980,114982],{"class":30,"line":32702},[28,114975,31998],{"class":207},[28,114977,2050],{"class":34},[28,114979,101449],{"class":211},[28,114981,95737],{"class":38},[28,114983,3816],{"class":211},[28,114985,114986,114989,114991],{"class":30,"line":32708},[28,114987,114988],{"class":211},"    env ",[28,114990,257],{"class":207},[28,114992,114993],{"class":211}," ReacherEnv()\n",[28,114995,114996,114999,115001,115004,115006,115008,115010],{"class":30,"line":32719},[28,114997,114998],{"class":211},"    obs, info ",[28,115000,257],{"class":207},[28,115002,115003],{"class":211}," env.reset(",[28,115005,114617],{"class":5293},[28,115007,257],{"class":207},[28,115009,401],{"class":38},[28,115011,218],{"class":211},[28,115013,115014,115016,115018,115021],{"class":30,"line":32725},[28,115015,31350],{"class":38},[28,115017,212],{"class":211},[28,115019,115020],{"class":64},"\"initial obs shape:\"",[28,115022,115023],{"class":211},", obs.shape)\n",[28,115025,115026,115028,115030,115033],{"class":30,"line":32745},[28,115027,31350],{"class":38},[28,115029,212],{"class":211},[28,115031,115032],{"class":64},"\"initial info:\"",[28,115034,115035],{"class":211},", info)\n",[28,115037,115038],{"class":30,"line":32751},[28,115039,2477],{"emptyLinePlaceholder":134},[28,115041,115042,115044,115046],{"class":30,"line":32762},[28,115043,110204],{"class":211},[28,115045,257],{"class":207},[28,115047,104812],{"class":38},[28,115049,115050,115052,115054,115056,115058,115060,115062],{"class":30,"line":32768},[28,115051,3278],{"class":207},[28,115053,31667],{"class":211},[28,115055,26094],{"class":207},[28,115057,32494],{"class":38},[28,115059,212],{"class":211},[28,115061,910],{"class":38},[28,115063,30837],{"class":211},[28,115065,115066,115068,115070],{"class":30,"line":32774},[28,115067,110273],{"class":211},[28,115069,257],{"class":207},[28,115071,115072],{"class":211}," env.action_space.sample()\n",[28,115074,115075,115078,115080],{"class":30,"line":32780},[28,115076,115077],{"class":211},"        obs, reward, terminated, truncated, info ",[28,115079,257],{"class":207},[28,115081,113466],{"class":211},[28,115083,115084,115086,115088],{"class":30,"line":32786},[28,115085,110348],{"class":211},[28,115087,9554],{"class":207},[28,115089,110353],{"class":211},[28,115091,115092,115094,115096,115098,115100,115103,115105,115107,115110,115112,115114,115117,115119,115121,115124,115126,115128,115130],{"class":30,"line":32792},[28,115093,32502],{"class":38},[28,115095,212],{"class":211},[28,115097,110382],{"class":64},[28,115099,110385],{"class":211},[28,115101,115102],{"class":64},"\"reward:\"",[28,115104,12512],{"class":211},[28,115106,32069],{"class":38},[28,115108,115109],{"class":211},"(reward, ",[28,115111,282],{"class":38},[28,115113,110396],{"class":211},[28,115115,115116],{"class":64},"\"distance:\"",[28,115118,12512],{"class":211},[28,115120,32069],{"class":38},[28,115122,115123],{"class":211},"(info[",[28,115125,114953],{"class":64},[28,115127,112253],{"class":211},[28,115129,282],{"class":38},[28,115131,30548],{"class":211},[28,115133,115134,115136,115139,115142],{"class":30,"line":32798},[28,115135,2574],{"class":207},[28,115137,115138],{"class":211}," terminated ",[28,115140,115141],{"class":207},"or",[28,115143,115144],{"class":211}," truncated:\n",[28,115146,115147],{"class":30,"line":32804},[28,115148,115149],{"class":207},"            break\n",[28,115151,115152],{"class":30,"line":32824},[28,115153,2477],{"emptyLinePlaceholder":134},[28,115155,115156,115158,115160,115162,115164,115166,115168,115170],{"class":30,"line":32830},[28,115157,31350],{"class":38},[28,115159,212],{"class":211},[28,115161,110427],{"class":64},[28,115163,12512],{"class":211},[28,115165,32069],{"class":38},[28,115167,110434],{"class":211},[28,115169,282],{"class":38},[28,115171,30548],{"class":211},[28,115173,115174],{"class":30,"line":32846},[28,115175,2477],{"emptyLinePlaceholder":134},[28,115177,115178],{"class":30,"line":32852},[28,115179,2477],{"emptyLinePlaceholder":134},[28,115181,115182,115184,115186,115188,115190],{"class":30,"line":32866},[28,115183,1609],{"class":207},[28,115185,31271],{"class":38},[28,115187,101610],{"class":207},[28,115189,101613],{"class":64},[28,115191,3816],{"class":211},[28,115193,115194],{"class":30,"line":32872},[28,115195,101620],{"class":211},[14,115197,103621],{},[18,115199,115201],{"className":20,"code":115200,"language":22,"meta":23,"style":23},"touch ch8_gym_env.py\n",[25,115202,115203],{"__ignoreMap":23},[28,115204,115205,115207],{"class":30,"line":31},[28,115206,101334],{"class":34},[28,115208,115209],{"class":64}," ch8_gym_env.py\n",[14,115211,110495],{},[18,115213,115215],{"className":20,"code":115214,"language":22,"meta":23,"style":23},"python ch8_gym_env.py\n",[25,115216,115217],{"__ignoreMap":23},[28,115218,115219,115221],{"class":30,"line":31},[28,115220,30431],{"class":34},[28,115222,115209],{"class":64},[177,115224,101623],{"id":101623},[14,115226,115227],{},"继承 Gymnasium 环境：",[18,115229,115231],{"className":30429,"code":115230,"language":30431,"meta":23,"style":23},"class ReacherEnv(gym.Env):\n",[25,115232,115233],{"__ignoreMap":23},[28,115234,115235,115237,115239,115241,115243,115245,115247],{"class":30,"line":31},[28,115236,14771],{"class":207},[28,115238,114108],{"class":34},[28,115240,212],{"class":211},[28,115242,113591],{"class":34},[28,115244,768],{"class":211},[28,115246,114117],{"class":34},[28,115248,30837],{"class":211},[14,115250,115251],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115253,115254],{},"初始化模型：",[18,115256,115258],{"className":30429,"code":115257,"language":30431,"meta":23,"style":23},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[25,115259,115260,115274],{"__ignoreMap":23},[28,115261,115262,115264,115266,115268,115270,115272],{"class":30,"line":31},[28,115263,30874],{"class":38},[28,115265,114168],{"class":211},[28,115267,257],{"class":207},[28,115269,101463],{"class":211},[28,115271,101365],{"class":38},[28,115273,218],{"class":211},[28,115275,115276,115278,115280,115282,115284,115286],{"class":30,"line":42},[28,115277,30874],{"class":38},[28,115279,114183],{"class":211},[28,115281,257],{"class":207},[28,115283,114188],{"class":211},[28,115285,30874],{"class":38},[28,115287,114193],{"class":211},[14,115289,115290,115291,115293],{},"这和前面章节一样，只是现在放到了类的 ",[25,115292,30880],{}," 里。",[14,115295,115296],{},"缓存 site ID：",[18,115298,115300],{"className":30429,"code":115299,"language":30431,"meta":23,"style":23},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[25,115301,115302,115316],{"__ignoreMap":23},[28,115303,115304,115306,115308,115310,115312,115314],{"class":30,"line":31},[28,115305,30874],{"class":38},[28,115307,114204],{"class":211},[28,115309,257],{"class":207},[28,115311,114209],{"class":211},[28,115313,89605],{"class":38},[28,115315,218],{"class":211},[28,115317,115318,115320,115322,115324,115326,115328],{"class":30,"line":42},[28,115319,30874],{"class":38},[28,115321,114225],{"class":211},[28,115323,257],{"class":207},[28,115325,114209],{"class":211},[28,115327,89605],{"class":38},[28,115329,218],{"class":211},[14,115331,115332],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115334,115335],{},"reset：",[18,115337,115339],{"className":30429,"code":115338,"language":30431,"meta":23,"style":23},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[25,115340,115341],{"__ignoreMap":23},[28,115342,115343,115345,115347,115349,115351,115353,115355,115357,115359,115361,115363,115365,115367,115369,115371,115373,115375],{"class":30,"line":31},[28,115344,31998],{"class":207},[28,115346,114573],{"class":34},[28,115348,114576],{"class":211},[28,115350,665],{"class":207},[28,115352,114581],{"class":211},[28,115354,215],{"class":38},[28,115356,25180],{"class":207},[28,115358,38984],{"class":38},[28,115360,13641],{"class":207},[28,115362,38984],{"class":38},[28,115364,114594],{"class":211},[28,115366,114597],{"class":38},[28,115368,25180],{"class":207},[28,115370,38984],{"class":38},[28,115372,13641],{"class":207},[28,115374,38984],{"class":38},[28,115376,30837],{"class":211},[14,115378,115379,115381],{},[25,115380,70107],{}," 做四件事：",[161,115383,115384,115387,115390,115393],{},[119,115385,115386],{},"设置随机种子。",[119,115388,115389],{},"重置 MuJoCo data。",[119,115391,115392],{},"随机初始化关节角。",[119,115394,115395],{},"返回初始观测和 info。",[14,115397,115398],{},"step：",[18,115400,115402],{"className":30429,"code":115401,"language":30431,"meta":23,"style":23},"def step(self, action):\n",[25,115403,115404],{"__ignoreMap":23},[28,115405,115406,115408,115410],{"class":30,"line":31},[28,115407,31998],{"class":207},[28,115409,114738],{"class":34},[28,115411,114741],{"class":211},[14,115413,115414,115416],{},[25,115415,107185],{}," 做六件事：",[161,115418,115419,115422,115428,115431,115434,115437],{},[119,115420,115421],{},"检查并裁剪 action。",[119,115423,115424,115425,28436],{},"写入 ",[25,115426,115427],{},"self.data.ctrl",[119,115429,115430],{},"连续推进若干个 MuJoCo 物理步。",[119,115432,115433],{},"计算新观测。",[119,115435,115436],{},"计算奖励和结束条件。",[119,115438,115439],{},"返回 Gymnasium 标准五元组。",[177,115441,101759],{"id":101759},[18,115443,115445],{"className":30429,"code":115444,"language":30431,"meta":23,"style":23},"import gymnasium as gym\n",[25,115446,115447],{"__ignoreMap":23},[28,115448,115449,115451,115453,115455],{"class":30,"line":31},[28,115450,30443],{"class":207},[28,115452,113946],{"class":211},[28,115454,31434],{"class":207},[28,115456,113951],{"class":211},[14,115458,115459,115460,115462,115463,115466],{},"导入 Gymnasium，并起别名 ",[25,115461,113591],{},"。后面写 ",[25,115464,115465],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[18,115468,115470],{"className":30429,"code":115469,"language":30431,"meta":23,"style":23},"from gymnasium import spaces\n",[25,115471,115472],{"__ignoreMap":23},[28,115473,115474,115476,115478,115480],{"class":30,"line":31},[28,115475,30788],{"class":207},[28,115477,113946],{"class":211},[28,115479,30443],{"class":207},[28,115481,113978],{"class":211},[14,115483,115484,115485,115488],{},"导入空间定义工具。",[25,115486,115487],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[18,115490,115491],{"className":30429,"code":115230,"language":30431,"meta":23,"style":23},[25,115492,115493],{"__ignoreMap":23},[28,115494,115495,115497,115499,115501,115503,115505,115507],{"class":30,"line":31},[28,115496,14771],{"class":207},[28,115498,114108],{"class":34},[28,115500,212],{"class":211},[28,115502,113591],{"class":34},[28,115504,768],{"class":211},[28,115506,114117],{"class":34},[28,115508,30837],{"class":211},[14,115510,115511,115512,115515,115516,115518,115519,101069,115521,115523],{},"定义一个类，名字叫 ",[25,115513,115514],{},"ReacherEnv","。括号里的 ",[25,115517,115465],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[25,115520,70107],{},[25,115522,107185],{}," 这两个核心方法。",[18,115525,115527],{"className":30429,"code":115526,"language":30431,"meta":23,"style":23},"metadata = {\"render_modes\": []}\n",[25,115528,115529],{"__ignoreMap":23},[28,115530,115531,115534,115536,115538,115540],{"class":30,"line":31},[28,115532,115533],{"class":211},"metadata ",[28,115535,257],{"class":207},[28,115537,4525],{"class":211},[28,115539,114131],{"class":64},[28,115541,114134],{"class":211},[14,115543,115544],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[18,115546,115548],{"className":30429,"code":115547,"language":30431,"meta":23,"style":23},"def __init__(self) -> None:\n",[25,115549,115550],{"__ignoreMap":23},[28,115551,115552,115554,115556,115558,115560],{"class":30,"line":31},[28,115553,31998],{"class":207},[28,115555,30855],{"class":38},[28,115557,114147],{"class":211},[28,115559,95737],{"class":38},[28,115561,3816],{"class":211},[14,115563,115564,115566,115567,28436],{},[25,115565,30880],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[25,115568,115569],{},"env = ReacherEnv()",[18,115571,115573],{"className":30429,"code":115572,"language":30431,"meta":23,"style":23},"super().__init__()\n",[25,115574,115575],{"__ignoreMap":23},[28,115576,115577,115580,115582,115584],{"class":30,"line":31},[28,115578,115579],{"class":38},"super",[28,115581,17338],{"class":211},[28,115583,30880],{"class":38},[28,115585,2053],{"class":211},[14,115587,115588,115589,115591],{},"调用父类 ",[25,115590,115465],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[18,115593,115594],{"className":30429,"code":115257,"language":30431,"meta":23,"style":23},[25,115595,115596,115610],{"__ignoreMap":23},[28,115597,115598,115600,115602,115604,115606,115608],{"class":30,"line":31},[28,115599,30874],{"class":38},[28,115601,114168],{"class":211},[28,115603,257],{"class":207},[28,115605,101463],{"class":211},[28,115607,101365],{"class":38},[28,115609,218],{"class":211},[28,115611,115612,115614,115616,115618,115620,115622],{"class":30,"line":42},[28,115613,30874],{"class":38},[28,115615,114183],{"class":211},[28,115617,257],{"class":207},[28,115619,114188],{"class":211},[28,115621,30874],{"class":38},[28,115623,114193],{"class":211},[14,115625,115626,115627,115629,115630,101069,115633,115636],{},"把 MuJoCo 模型和状态保存到 ",[25,115628,30874],{}," 上。",[25,115631,115632],{},"self.model",[25,115634,115635],{},"self.data"," 表示这个环境对象自己的模型和状态。",[18,115638,115639],{"className":30429,"code":115299,"language":30431,"meta":23,"style":23},[25,115640,115641,115655],{"__ignoreMap":23},[28,115642,115643,115645,115647,115649,115651,115653],{"class":30,"line":31},[28,115644,30874],{"class":38},[28,115646,114204],{"class":211},[28,115648,257],{"class":207},[28,115650,114209],{"class":211},[28,115652,89605],{"class":38},[28,115654,218],{"class":211},[28,115656,115657,115659,115661,115663,115665,115667],{"class":30,"line":42},[28,115658,30874],{"class":38},[28,115660,114225],{"class":211},[28,115662,257],{"class":207},[28,115664,114209],{"class":211},[28,115666,89605],{"class":38},[28,115668,218],{"class":211},[14,115670,115671,115672,101069,115675,115678],{},"提前查好 tip 和 target 的 site ID。这样 ",[25,115673,115674],{},"_get_obs",[25,115676,115677],{},"_get_reward"," 里就不用每次按名字查找。",[18,115680,115682],{"className":30429,"code":115681,"language":30431,"meta":23,"style":23},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[25,115683,115684,115694,115704],{"__ignoreMap":23},[28,115685,115686,115688,115690,115692],{"class":30,"line":31},[28,115687,30874],{"class":38},[28,115689,113918],{"class":211},[28,115691,257],{"class":207},[28,115693,54478],{"class":38},[28,115695,115696,115698,115700,115702],{"class":30,"line":42},[28,115697,30874],{"class":38},[28,115699,114297],{"class":211},[28,115701,257],{"class":207},[28,115703,114302],{"class":38},[28,115705,115706,115708,115710,115712],{"class":30,"line":50},[28,115707,30874],{"class":38},[28,115709,113757],{"class":211},[28,115711,257],{"class":207},[28,115713,47384],{"class":38},[14,115715,115716,115719,115720,115723,115724,115727],{},[25,115717,115718],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[25,115721,115722],{},"max_steps"," 是一个 episode 最多运行多少步。",[25,115725,115726],{},"steps"," 记录当前 episode 已经走了多少步。",[18,115729,115730],{"className":30429,"code":113796,"language":30431,"meta":23,"style":23},[25,115731,115732],{"__ignoreMap":23},[28,115733,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768,115770,115772],{"class":30,"line":31},[28,115735,30874],{"class":38},[28,115737,113805],{"class":211},[28,115739,257],{"class":207},[28,115741,113810],{"class":211},[28,115743,113813],{"class":5293},[28,115745,113816],{"class":207},[28,115747,102454],{"class":38},[28,115749,12512],{"class":211},[28,115751,113823],{"class":5293},[28,115753,257],{"class":207},[28,115755,102454],{"class":38},[28,115757,12512],{"class":211},[28,115759,96014],{"class":5293},[28,115761,257],{"class":207},[28,115763,212],{"class":211},[28,115765,288],{"class":38},[28,115767,113840],{"class":211},[28,115769,93551],{"class":5293},[28,115771,257],{"class":207},[28,115773,113847],{"class":211},[14,115775,115776,115777,115780,115781,101069,115784,115787],{},"定义动作空间。",[25,115778,115779],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[25,115782,115783],{},"low=-1.0",[25,115785,115786],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[18,115789,115790],{"className":30429,"code":113857,"language":30431,"meta":23,"style":23},[25,115791,115792],{"__ignoreMap":23},[28,115793,115794,115796,115798,115800,115802,115804,115806,115808,115810,115812,115814,115816,115818,115820,115822,115824,115826,115828],{"class":30,"line":31},[28,115795,30874],{"class":38},[28,115797,113866],{"class":211},[28,115799,257],{"class":207},[28,115801,113810],{"class":211},[28,115803,113813],{"class":5293},[28,115805,113816],{"class":207},[28,115807,113877],{"class":211},[28,115809,113823],{"class":5293},[28,115811,257],{"class":207},[28,115813,113877],{"class":211},[28,115815,96014],{"class":5293},[28,115817,257],{"class":207},[28,115819,212],{"class":211},[28,115821,656],{"class":38},[28,115823,113840],{"class":211},[28,115825,93551],{"class":5293},[28,115827,257],{"class":207},[28,115829,113847],{"class":211},[14,115831,115832,115833,115836,115837,115840],{},"定义观测空间。",[25,115834,115835],{},"shape=(10,)"," 表示观测是 10 个数。",[25,115838,115839],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[18,115842,115844],{"className":30429,"code":115843,"language":30431,"meta":23,"style":23},"def _get_obs(self) -> np.ndarray:\n",[25,115845,115846],{"__ignoreMap":23},[28,115847,115848,115850,115852],{"class":30,"line":31},[28,115849,31998],{"class":207},[28,115851,114407],{"class":34},[28,115853,114410],{"class":211},[14,115855,115856,115857,115859],{},"定义内部函数，用来生成观测。函数名前面的 ",[25,115858,1202],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[18,115861,115863],{"className":30429,"code":115862,"language":30431,"meta":23,"style":23},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[25,115864,115865,115879],{"__ignoreMap":23},[28,115866,115867,115869,115871,115873,115875,115877],{"class":30,"line":31},[28,115868,111619],{"class":211},[28,115870,257],{"class":207},[28,115872,38924],{"class":38},[28,115874,114421],{"class":211},[28,115876,30874],{"class":38},[28,115878,114426],{"class":211},[28,115880,115881,115883,115885,115887,115889,115891],{"class":30,"line":42},[28,115882,111629],{"class":211},[28,115884,257],{"class":207},[28,115886,38924],{"class":38},[28,115888,114421],{"class":211},[28,115890,30874],{"class":38},[28,115892,114441],{"class":211},[14,115894,115895],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[18,115897,115899],{"className":30429,"code":115898,"language":30431,"meta":23,"style":23},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[25,115900,115901,115917],{"__ignoreMap":23},[28,115902,115903,115905,115907,115909,115911,115913,115915],{"class":30,"line":31},[28,115904,110905],{"class":211},[28,115906,257],{"class":207},[28,115908,114450],{"class":211},[28,115910,30874],{"class":38},[28,115912,114455],{"class":211},[28,115914,30874],{"class":38},[28,115916,114460],{"class":211},[28,115918,115919,115921],{"class":30,"line":42},[28,115920,17123],{"class":207},[28,115922,114467],{"class":211},[14,115924,115925,115926,115929,115930,115932],{},"拼接观测，并转换成 ",[25,115927,115928],{},"float32","。很多强化学习库默认使用 ",[25,115931,115928],{},"，所以这里主动转换。",[18,115934,115935],{"className":30429,"code":115338,"language":30431,"meta":23,"style":23},[25,115936,115937],{"__ignoreMap":23},[28,115938,115939,115941,115943,115945,115947,115949,115951,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971],{"class":30,"line":31},[28,115940,31998],{"class":207},[28,115942,114573],{"class":34},[28,115944,114576],{"class":211},[28,115946,665],{"class":207},[28,115948,114581],{"class":211},[28,115950,215],{"class":38},[28,115952,25180],{"class":207},[28,115954,38984],{"class":38},[28,115956,13641],{"class":207},[28,115958,38984],{"class":38},[28,115960,114594],{"class":211},[28,115962,114597],{"class":38},[28,115964,25180],{"class":207},[28,115966,38984],{"class":38},[28,115968,13641],{"class":207},[28,115970,38984],{"class":38},[28,115972,30837],{"class":211},[14,115974,115975,115976,115978,115979,115982],{},"定义 reset。",[25,115977,114617],{}," 用来控制随机数，保证实验可以复现。",[25,115980,115981],{},"options"," 用来接收额外配置，本章暂时不用。",[18,115984,115986],{"className":30429,"code":115985,"language":30431,"meta":23,"style":23},"super().reset(seed=seed)\n",[25,115987,115988],{"__ignoreMap":23},[28,115989,115990,115992,115994,115996,115998],{"class":30,"line":31},[28,115991,115579],{"class":38},[28,115993,114614],{"class":211},[28,115995,114617],{"class":5293},[28,115997,257],{"class":207},[28,115999,114622],{"class":211},[14,116001,116002,116003,116006],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[25,116004,116005],{},"self.np_random"," 生成可复现的随机数。",[18,116008,116010],{"className":30429,"code":116009,"language":30431,"meta":23,"style":23},"mujoco.mj_resetData(self.model, self.data)\n",[25,116011,116012],{"__ignoreMap":23},[28,116013,116014,116017,116019,116021,116023],{"class":30,"line":31},[28,116015,116016],{"class":211},"mujoco.mj_resetData(",[28,116018,30874],{"class":38},[28,116020,114632],{"class":211},[28,116022,30874],{"class":38},[28,116024,114637],{"class":211},[14,116026,116027],{},"把 MuJoCo 状态重置到默认状态。",[18,116029,116031],{"className":30429,"code":116030,"language":30431,"meta":23,"style":23},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[25,116032,116033],{"__ignoreMap":23},[28,116034,116035,116037,116039,116041,116043,116045,116047,116049,116051,116053,116055,116057,116059,116061,116063,116065,116067],{"class":30,"line":31},[28,116036,30874],{"class":38},[28,116038,114648],{"class":211},[28,116040,257],{"class":207},[28,116042,38924],{"class":38},[28,116044,114655],{"class":211},[28,116046,113813],{"class":5293},[28,116048,113816],{"class":207},[28,116050,86261],{"class":38},[28,116052,12512],{"class":211},[28,116054,113823],{"class":5293},[28,116056,257],{"class":207},[28,116058,86261],{"class":38},[28,116060,12512],{"class":211},[28,116062,31547],{"class":5293},[28,116064,257],{"class":207},[28,116066,30874],{"class":38},[28,116068,114680],{"class":211},[14,116070,115392,116071,116074,116075,116078,116079,116081],{},[25,116072,116073],{},"[:]"," 表示修改整个数组。",[25,116076,116077],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[25,116080,102201],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[18,116083,116085],{"className":30429,"code":116084,"language":30431,"meta":23,"style":23},"self.data.qvel[:] = 0.0\n",[25,116086,116087],{"__ignoreMap":23},[28,116088,116089,116091,116093,116095],{"class":30,"line":31},[28,116090,30874],{"class":38},[28,116092,114687],{"class":211},[28,116094,257],{"class":207},[28,116096,104812],{"class":38},[14,116098,116099],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[18,116101,116103],{"className":30429,"code":116102,"language":30431,"meta":23,"style":23},"self.steps = 0\nreturn self._get_obs(), {}\n",[25,116104,116105,116115],{"__ignoreMap":23},[28,116106,116107,116109,116111,116113],{"class":30,"line":31},[28,116108,30874],{"class":38},[28,116110,113757],{"class":211},[28,116112,257],{"class":207},[28,116114,47384],{"class":38},[28,116116,116117,116119,116121],{"class":30,"line":42},[28,116118,17123],{"class":207},[28,116120,38924],{"class":38},[28,116122,114727],{"class":211},[14,116124,116125],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[18,116127,116128],{"className":30429,"code":115401,"language":30431,"meta":23,"style":23},[25,116129,116130],{"__ignoreMap":23},[28,116131,116132,116134,116136],{"class":30,"line":31},[28,116133,31998],{"class":207},[28,116135,114738],{"class":34},[28,116137,114741],{"class":211},[14,116139,116140],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[18,116142,116144],{"className":30429,"code":116143,"language":30431,"meta":23,"style":23},"action = np.asarray(action, dtype=np.float32)\n",[25,116145,116146],{"__ignoreMap":23},[28,116147,116148,116150,116152,116154,116156,116158],{"class":30,"line":31},[28,116149,107493],{"class":211},[28,116151,257],{"class":207},[28,116153,114750],{"class":211},[28,116155,93551],{"class":5293},[28,116157,257],{"class":207},[28,116159,113847],{"class":211},[14,116161,116162,116163,28436],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[25,116164,115928],{},[18,116166,116168],{"className":30429,"code":116167,"language":30431,"meta":23,"style":23},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[25,116169,116170],{"__ignoreMap":23},[28,116171,116172,116174,116176,116178,116180,116182,116184],{"class":30,"line":31},[28,116173,107493],{"class":211},[28,116175,257],{"class":207},[28,116177,107498],{"class":211},[28,116179,30874],{"class":38},[28,116181,114769],{"class":211},[28,116183,30874],{"class":38},[28,116185,114774],{"class":211},[14,116187,116188],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[18,116190,116192],{"className":30429,"code":116191,"language":30431,"meta":23,"style":23},"self.data.ctrl[:] = action\n",[25,116193,116194],{"__ignoreMap":23},[28,116195,116196,116198,116200,116202],{"class":30,"line":31},[28,116197,30874],{"class":38},[28,116199,114785],{"class":211},[28,116201,257],{"class":207},[28,116203,107521],{"class":211},[14,116205,116206],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[18,116208,116210],{"className":30429,"code":116209,"language":30431,"meta":23,"style":23},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[25,116211,116212,116228],{"__ignoreMap":23},[28,116213,116214,116216,116218,116220,116222,116224,116226],{"class":30,"line":31},[28,116215,3102],{"class":207},[28,116217,101552],{"class":211},[28,116219,26094],{"class":207},[28,116221,32494],{"class":38},[28,116223,212],{"class":211},[28,116225,30874],{"class":38},[28,116227,114806],{"class":211},[28,116229,116230,116233,116235,116237,116239],{"class":30,"line":42},[28,116231,116232],{"class":211},"    mujoco.mj_step(",[28,116234,30874],{"class":38},[28,116236,114632],{"class":211},[28,116238,30874],{"class":38},[28,116240,114637],{"class":211},[14,116242,116243,116244,116247,116248,116250,116251,28436],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[25,116245,116246],{},"frame_skip=5","，所以外部调用一次 ",[25,116249,113928],{},"，内部实际执行 5 次 ",[25,116252,101266],{},[18,116254,116256],{"className":30429,"code":116255,"language":30431,"meta":23,"style":23},"self.steps += 1\n",[25,116257,116258],{"__ignoreMap":23},[28,116259,116260,116262,116264,116266],{"class":30,"line":31},[28,116261,30874],{"class":38},[28,116263,113757],{"class":211},[28,116265,9554],{"class":207},[28,116267,55750],{"class":38},[14,116269,116270],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[18,116272,116274],{"className":30429,"code":116273,"language":30431,"meta":23,"style":23},"obs = self._get_obs()\nreward = self._get_reward()\n",[25,116275,116276,116286],{"__ignoreMap":23},[28,116277,116278,116280,116282,116284],{"class":30,"line":31},[28,116279,110905],{"class":211},[28,116281,257],{"class":207},[28,116283,38924],{"class":38},[28,116285,114848],{"class":211},[28,116287,116288,116290,116292,116294],{"class":30,"line":42},[28,116289,111056],{"class":211},[28,116291,257],{"class":207},[28,116293,38924],{"class":38},[28,116295,114859],{"class":211},[14,116297,116298],{},"计算新的观测和奖励。",[18,116300,116302],{"className":30429,"code":116301,"language":30431,"meta":23,"style":23},"dist = float(np.linalg.norm(tip - target))\n",[25,116303,116304],{"__ignoreMap":23},[28,116305,116306,116308,116310,116312,116314,116316],{"class":30,"line":31},[28,116307,111647],{"class":211},[28,116309,257],{"class":207},[28,116311,109848],{"class":38},[28,116313,114902],{"class":211},[28,116315,742],{"class":207},[28,116317,114907],{"class":211},[14,116319,116320],{},"计算末端到目标的距离，并转换成 Python float。",[18,116322,116323],{"className":30429,"code":113728,"language":30431,"meta":23,"style":23},[25,116324,116325,116337],{"__ignoreMap":23},[28,116326,116327,116329,116331,116333,116335],{"class":30,"line":31},[28,116328,113735],{"class":211},[28,116330,257],{"class":207},[28,116332,113740],{"class":211},[28,116334,1120],{"class":207},[28,116336,113745],{"class":38},[28,116338,116339,116341,116343,116345,116347,116349,116351],{"class":30,"line":42},[28,116340,113750],{"class":211},[28,116342,257],{"class":207},[28,116344,38924],{"class":38},[28,116346,113757],{"class":211},[28,116348,1788],{"class":207},[28,116350,38924],{"class":38},[28,116352,113764],{"class":211},[14,116354,116355],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[18,116357,116359],{"className":30429,"code":116358,"language":30431,"meta":23,"style":23},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[25,116360,116361,116374],{"__ignoreMap":23},[28,116362,116363,116366,116368,116370,116372],{"class":30,"line":31},[28,116364,116365],{"class":211},"info ",[28,116367,257],{"class":207},[28,116369,4525],{"class":211},[28,116371,114953],{"class":64},[28,116373,114956],{"class":211},[28,116375,116376,116378],{"class":30,"line":42},[28,116377,17123],{"class":207},[28,116379,114963],{"class":211},[14,116381,116382,116385],{},[25,116383,116384],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[18,116387,116389],{"className":30429,"code":116388,"language":30431,"meta":23,"style":23},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[25,116390,116391,116400],{"__ignoreMap":23},[28,116392,116393,116396,116398],{"class":30,"line":31},[28,116394,116395],{"class":211},"env ",[28,116397,257],{"class":207},[28,116399,114993],{"class":211},[28,116401,116402,116404,116406,116408,116410,116412,116414],{"class":30,"line":42},[28,116403,113451],{"class":211},[28,116405,257],{"class":207},[28,116407,115003],{"class":211},[28,116409,114617],{"class":5293},[28,116411,257],{"class":207},[28,116413,401],{"class":38},[28,116415,218],{"class":211},[14,116417,116418,116419,116422],{},"创建环境并重置。",[25,116420,116421],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[18,116424,116426],{"className":30429,"code":116425,"language":30431,"meta":23,"style":23},"action = env.action_space.sample()\n",[25,116427,116428],{"__ignoreMap":23},[28,116429,116430,116432,116434],{"class":30,"line":31},[28,116431,107493],{"class":211},[28,116433,257],{"class":207},[28,116435,115072],{"class":211},[14,116437,116438],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[149,116440,102367],{"id":102366},[14,116442,105535],{},[18,116444,116447],{"className":116445,"code":116446,"language":5264,"meta":23},[5262],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[25,116448,116446],{"__ignoreMap":23},[14,116450,116451],{},"这个环境已经具备强化学习环境的基本结构。",[14,116453,116454],{},"主函数里使用随机动作：",[18,116456,116457],{"className":30429,"code":116425,"language":30431,"meta":23,"style":23},[25,116458,116459],{"__ignoreMap":23},[28,116460,116461,116463,116465],{"class":30,"line":31},[28,116462,107493],{"class":211},[28,116464,257],{"class":207},[28,116466,115072],{"class":211},[14,116468,116469],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[149,116471,102399],{"id":102398},[161,116473,116474,116477,116483,116492,116501,116510,116516],{},[119,116475,116476],{},"运行程序。",[119,116478,116479,116480,28436],{},"确认 ",[25,116481,116482],{},"obs.shape == (10,)",[119,116484,111232,116485,116488,116489,28436],{},[25,116486,116487],{},"env.action_space","，应类似 ",[25,116490,116491],{},"Box(-1.0, 1.0, (2,), float32)",[119,116493,105636,116494,116497,116498,28436],{},[25,116495,116496],{},"self.max_steps = 10","，确认环境会更快 ",[25,116499,116500],{},"truncated=True",[119,116502,102462,116503,102465,116506,116509],{},[25,116504,116505],{},"terminated = dist \u003C 0.05",[25,116507,116508],{},"dist \u003C 0.2","，观察是否更容易结束。",[119,116511,102462,116512,116515],{},[25,116513,116514],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[119,116517,116518,116519,116521,116522,116525],{},"在 ",[25,116520,116384],{}," 里加入 ",[25,116523,116524],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[149,116527,102504],{"id":102503},[177,116529,116531],{"id":116530},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116533,116534,116535,116537],{},"Gymnasium 的 ",[25,116536,107185],{}," 返回 5 个值:",[18,116539,116541],{"className":30429,"code":116540,"language":30431,"meta":23,"style":23},"obs, reward, terminated, truncated, info\n",[25,116542,116543],{"__ignoreMap":23},[28,116544,116545],{"class":30,"line":31},[28,116546,116540],{"class":211},[14,116548,116549],{},"不是旧 Gym 的 4 个值。",[177,116551,116553,116556],{"id":116552},"datactrl-action-维度错误",[25,116554,116555],{},"data.ctrl[:] = action"," 维度错误",[14,116558,102574],{},[18,116560,116562],{"className":30429,"code":116561,"language":30431,"meta":23,"style":23},"print(self.model.nu)\nprint(action.shape)\n",[25,116563,116564,116575],{"__ignoreMap":23},[28,116565,116566,116568,116570,116572],{"class":30,"line":31},[28,116567,30466],{"class":38},[28,116569,212],{"class":211},[28,116571,30874],{"class":38},[28,116573,116574],{"class":211},".model.nu)\n",[28,116576,116577,116579],{"class":30,"line":42},[28,116578,30466],{"class":38},[28,116580,116581],{"class":211},"(action.shape)\n",[14,116583,116584],{},"两者必须匹配。",[177,116586,116588],{"id":116587},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116590,102513],{},[18,116592,116594],{"className":30429,"code":116593,"language":30431,"meta":23,"style":23},"mujoco.mj_forward(self.model, self.data)\n",[25,116595,116596],{"__ignoreMap":23},[28,116597,116598,116601,116603,116605,116607],{"class":30,"line":31},[28,116599,116600],{"class":211},"mujoco.mj_forward(",[28,116602,30874],{"class":38},[28,116604,114632],{"class":211},[28,116606,30874],{"class":38},[28,116608,114637],{"class":211},[177,116610,116612,116614],{"id":116611},"observation_space-维度和-obs-不一致",[25,116613,113651],{}," 维度和 obs 不一致",[14,116616,102626],{},[18,116618,116620],{"className":30429,"code":116619,"language":30431,"meta":23,"style":23},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[25,116621,116622,116632,116639],{"__ignoreMap":23},[28,116623,116624,116626,116628,116630],{"class":30,"line":31},[28,116625,110905],{"class":211},[28,116627,257],{"class":207},[28,116629,38924],{"class":38},[28,116631,114848],{"class":211},[28,116633,116634,116636],{"class":30,"line":42},[28,116635,30466],{"class":38},[28,116637,116638],{"class":211},"(obs.shape)\n",[28,116640,116641,116643,116645,116647],{"class":30,"line":50},[28,116642,30466],{"class":38},[28,116644,212],{"class":211},[28,116646,30874],{"class":38},[28,116648,116649],{"class":211},".observation_space.shape)\n",[14,116651,116652],{},"两者必须一致。本章观测是：",[18,116654,116657],{"className":116655,"code":116656,"language":5264,"meta":23},[5262],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[25,116658,116656],{"__ignoreMap":23},[177,116660,116662],{"id":116661},"action-超过范围","action 超过范围",[14,116664,116665],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[18,116667,116668],{"className":30429,"code":116167,"language":30431,"meta":23,"style":23},[25,116669,116670],{"__ignoreMap":23},[28,116671,116672,116674,116676,116678,116680,116682,116684],{"class":30,"line":31},[28,116673,107493],{"class":211},[28,116675,257],{"class":207},[28,116677,107498],{"class":211},[28,116679,30874],{"class":38},[28,116681,114769],{"class":211},[28,116683,30874],{"class":38},[28,116685,114774],{"class":211},[14,116687,116688,116689,28436],{},"这能避免无效动作直接写入 ",[25,116690,101127],{},[177,116692,116694],{"id":116693},"忘记返回-info","忘记返回 info",[14,116696,116534,116697,101069,116699,116701],{},[25,116698,70107],{},[25,116700,107185],{}," 都会返回 info：",[18,116703,116704],{"className":30429,"code":113444,"language":30431,"meta":23,"style":23},[25,116705,116706,116714],{"__ignoreMap":23},[28,116707,116708,116710,116712],{"class":30,"line":31},[28,116709,113451],{"class":211},[28,116711,257],{"class":207},[28,116713,113456],{"class":211},[28,116715,116716,116718,116720],{"class":30,"line":42},[28,116717,113461],{"class":211},[28,116719,257],{"class":207},[28,116721,113466],{"class":211},[14,116723,116724,116725,28436],{},"即使暂时没有额外信息，也返回 ",[25,116726,32510],{},[149,116728,116730],{"id":116729},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116732,116733],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[161,116735,116736,116739,116742,116745,116748,116751],{},[119,116737,116738],{},"更稳定的 reward。",[119,116740,116741],{},"合理的 episode 长度。",[119,116743,116744],{},"可重复的随机目标采样。",[119,116746,116747],{},"render 接口。",[119,116749,116750],{},"环境注册代码。",[119,116752,116753],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116755,116756],{},"如果只是自己写训练循环，最小形式是：",[18,116758,116760],{"className":30429,"code":116759,"language":30431,"meta":23,"style":23},"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",[25,116761,116762,116770,116786,116790,116806,116815,116824,116834],{"__ignoreMap":23},[28,116763,116764,116766,116768],{"class":30,"line":31},[28,116765,116395],{"class":211},[28,116767,257],{"class":207},[28,116769,114993],{"class":211},[28,116771,116772,116774,116776,116778,116780,116782,116784],{"class":30,"line":42},[28,116773,113451],{"class":211},[28,116775,257],{"class":207},[28,116777,115003],{"class":211},[28,116779,114617],{"class":5293},[28,116781,257],{"class":207},[28,116783,401],{"class":38},[28,116785,218],{"class":211},[28,116787,116788],{"class":30,"line":50},[28,116789,2477],{"emptyLinePlaceholder":134},[28,116791,116792,116794,116796,116798,116800,116802,116804],{"class":30,"line":58},[28,116793,3102],{"class":207},[28,116795,101552],{"class":211},[28,116797,26094],{"class":207},[28,116799,32494],{"class":38},[28,116801,212],{"class":211},[28,116803,6487],{"class":38},[28,116805,30837],{"class":211},[28,116807,116808,116811,116813],{"class":30,"line":70},[28,116809,116810],{"class":211},"    action ",[28,116812,257],{"class":207},[28,116814,115072],{"class":211},[28,116816,116817,116820,116822],{"class":30,"line":78},[28,116818,116819],{"class":211},"    obs, reward, terminated, truncated, info ",[28,116821,257],{"class":207},[28,116823,113466],{"class":211},[28,116825,116826,116828,116830,116832],{"class":30,"line":86},[28,116827,3178],{"class":207},[28,116829,115138],{"class":211},[28,116831,115141],{"class":207},[28,116833,115144],{"class":211},[28,116835,116836,116839,116841],{"class":30,"line":97},[28,116837,116838],{"class":211},"        obs, info ",[28,116840,257],{"class":207},[28,116842,113456],{"class":211},[149,116844,116846],{"id":116845},"_9本章小结","9.本章小结",[14,116848,116849],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[18,116851,116854],{"className":116852,"code":116853,"language":5264,"meta":23},[5262],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[25,116855,116853],{"__ignoreMap":23},[14,116857,116858],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[126,116860,116861],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":116863},[116864,116865,116866,116873,116877,116878,116879,116889,116890],{"id":100697,"depth":42,"text":100698},{"id":100820,"depth":42,"text":100821},{"id":101095,"depth":42,"text":101096,"children":116867},[116868,116870,116872],{"id":113675,"depth":50,"text":116869},"terminated 和 truncated 的区别",{"id":113778,"depth":50,"text":116871},"observation_space 和 action_space",{"id":113905,"depth":50,"text":113906},{"id":101303,"depth":42,"text":101304,"children":116874},[116875,116876],{"id":101623,"depth":50,"text":101623},{"id":101759,"depth":50,"text":101759},{"id":102366,"depth":42,"text":102367},{"id":102398,"depth":42,"text":102399},{"id":102503,"depth":42,"text":102504,"children":116880},[116881,116882,116884,116885,116887,116888],{"id":116530,"depth":50,"text":116531},{"id":116552,"depth":50,"text":116883},"data.ctrl[:] = action 维度错误",{"id":116587,"depth":50,"text":116588},{"id":116611,"depth":50,"text":116886},"observation_space 维度和 obs 不一致",{"id":116661,"depth":50,"text":116662},{"id":116693,"depth":50,"text":116694},{"id":116729,"depth":42,"text":116730},{"id":116845,"depth":42,"text":116846},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113428,"description":23},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116897,"title":116898,"body":116899,"description":117322,"extension":132,"meta":117323,"navigation":134,"path":117324,"seo":117325,"stem":117326,"__hash__":117327},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116900,"toc":117312},[116901,116905,116908,116911,116931,116937,116943,116953,116956,116959,116979,116982,116986,116989,116995,116998,117012,117015,117018,117092,117095,117101,117104,117127,117130,117180,117183,117189,117192,117195,117198,117217,117220,117226,117229,117232,117235,117255,117258,117261,117264,117309],[10,116902,116904],{"id":116903},"mujoco-学习","MuJoCo 学习",[14,116906,116907],{},"初版",[14,116909,116910],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[161,116912,116913,116916,116919,116928],{},[119,116914,116915],{},"MuJoCo 模型文件在描述什么。",[119,116917,116918],{},"Python 代码怎样读取和推进仿真。",[119,116920,116921,422,116923,422,116925,116927],{},[25,116922,104081],{},[25,116924,104411],{},[25,116926,104414],{}," 这些数组为什么重要。",[119,116929,116930],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116932,116933,116934,116936],{},"默认环境为 Fedora 44、Python >= 3.10、",[25,116935,101078],{}," 官方 Python bindings。",[14,116938,116939,116940,116942],{},"注意：本文禁止使用 ",[25,116941,101063],{},"。所有示例均使用：",[18,116944,116945],{"className":30429,"code":101629,"language":30431,"meta":23,"style":23},[25,116946,116947],{"__ignoreMap":23},[28,116948,116949,116951],{"class":30,"line":31},[28,116950,30443],{"class":207},[28,116952,101352],{"class":211},[149,116954,116955],{"id":116955},"适合谁阅读",[14,116957,116958],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[161,116960,116961,116964,116967,116970],{},[119,116962,116963],{},"没学过 MuJoCo，只会一点 Python。",[119,116965,116966],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[119,116968,116969],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[119,116971,116972,116973,116975,116976,116978],{},"以前接触过 ",[25,116974,101063],{},"，现在想迁移到官方 ",[25,116977,101072],{}," Python bindings。",[14,116980,116981],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[149,116983,116985],{"id":116984},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116987,116988],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[18,116990,116993],{"className":116991,"code":116992,"language":5264,"meta":23},[5262],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[25,116994,116992],{"__ignoreMap":23},[14,116996,116997],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[161,116999,117000,117003,117006,117009],{},[119,117001,117002],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[119,117004,117005],{},"快速测试控制算法，不必一开始就上真实机器人。",[119,117007,117008],{},"生成强化学习环境。",[119,117010,117011],{},"采集状态、动作、图像、奖励等训练数据。",[149,117013,117014],{"id":117014},"学习前的心智模型",[14,117016,117017],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[347,117019,117020,117032],{},[350,117021,117022],{},[353,117023,117024,117027,117030],{},[356,117025,117026],{"align":23813},"部分",[356,117028,117029],{"align":23813},"负责什么",[356,117031,21264],{"align":23813},[394,117033,117034,117045,117057,117069,117081],{},[353,117035,117036,117039,117042],{},[399,117037,117038],{"align":23813},"MJCF XML",[399,117040,117041],{"align":23813},"定义世界和机器人结构",[399,117043,117044],{"align":23813},"地面、盒子、关节、电机、摄像头",[353,117046,117047,117051,117054],{},[399,117048,117049],{"align":23813},[25,117050,100760],{},[399,117052,117053],{"align":23813},"编译后的静态模型",[399,117055,117056],{"align":23813},"有几个关节、有几个电机、时间步长是多少",[353,117058,117059,117063,117066],{},[399,117060,117061],{"align":23813},[25,117062,100770],{},[399,117064,117065],{"align":23813},"运行中的动态状态",[399,117067,117068],{"align":23813},"当前时间、位置、速度、电机输入",[353,117070,117071,117075,117078],{},[399,117072,117073],{"align":23813},[25,117074,101266],{},[399,117076,117077],{"align":23813},"推进一步物理仿真",[399,117079,117080],{"align":23813},"根据重力、力、碰撞更新状态",[353,117082,117083,117086,117089],{},[399,117084,117085],{"align":23813},"Viewer \u002F Renderer",[399,117087,117088],{"align":23813},"把仿真显示出来",[399,117090,117091],{"align":23813},"打开窗口或保存图片",[14,117093,117094],{},"一句话总结：",[18,117096,117099],{"className":117097,"code":117098,"language":5264,"meta":23},[5262],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[25,117100,117098],{"__ignoreMap":23},[14,117102,117103],{},"参考来源：",[116,117105,117106,117113,117120],{},[119,117107,117108,117109],{},"MuJoCo Python 官方文档：",[448,117110,117111],{"href":117111,"rel":117112},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23940],[119,117114,117115,117116],{},"MuJoCo XML Reference：",[448,117117,117118],{"href":117118,"rel":117119},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23940],[119,117121,117122,117123],{},"MuJoCo Overview：",[448,117124,117125],{"href":117125,"rel":117126},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23940],[149,117128,117129],{"id":117129},"章节目录",[161,117131,117132,117138,117144,117150,117156,117162,117168,117174],{},[119,117133,117134],{},[448,117135,117137],{"href":117136},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[119,117139,117140],{},[448,117141,117143],{"href":117142},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[119,117145,117146],{},[448,117147,117149],{"href":117148},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[119,117151,117152],{},[448,117153,117155],{"href":117154},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[119,117157,117158],{},[448,117159,117161],{"href":117160},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[119,117163,117164],{},[448,117165,117167],{"href":117166},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[119,117169,117170],{},[448,117171,117173],{"href":117172},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[119,117175,117176],{},[448,117177,117179],{"href":117178},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[149,117181,117182],{"id":117182},"推荐学习路线",[18,117184,117187],{"className":117185,"code":117186,"language":5264,"meta":23},[5262],"环境安装\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",[25,117188,117186],{"__ignoreMap":23},[14,117190,117191],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[149,117193,117194],{"id":117194},"建议的目录结构",[14,117196,117197],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[18,117199,117201],{"className":20,"code":117200,"language":22,"meta":23,"style":23},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[25,117202,117203,117211],{"__ignoreMap":23},[28,117204,117205,117207,117209],{"class":30,"line":31},[28,117206,101317],{"class":34},[28,117208,29267],{"class":38},[28,117210,101322],{"class":64},[28,117212,117213,117215],{"class":30,"line":42},[28,117214,101327],{"class":38},[28,117216,101322],{"class":64},[14,117218,117219],{},"每一章的代码都单独保存：",[18,117221,117224],{"className":117222,"code":117223,"language":5264,"meta":23},[5262],"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",[25,117225,117223],{"__ignoreMap":23},[14,117227,117228],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[149,117230,117231],{"id":117231},"学习方法",[14,117233,117234],{},"每章建议按这个顺序操作：",[161,117236,117237,117240,117243,117246,117249,117252],{},[119,117238,117239],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[119,117241,117242],{},"复制最小可运行代码，保存成指定文件。",[119,117244,117245],{},"运行代码，确认没有报错。",[119,117247,117248],{},"对照“运行结果说明”理解输出。",[119,117250,117251],{},"做“验证步骤”，主动改一两个参数。",[119,117253,117254],{},"遇到报错先看“常见错误与解决方案”。",[14,117256,117257],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[149,117259,117260],{"id":117260},"全局排错顺序",[14,117262,117263],{},"遇到问题时，按下面顺序查：",[161,117265,117266,117272,117278,117283,117286,117289,117296,117306],{},[119,117267,117268,117269],{},"Python 环境是否激活：",[25,117270,117271],{},"which python",[119,117273,117274,117275],{},"MuJoCo 是否能导入：",[25,117276,117277],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[119,117279,117280,117281],{},"是否误装了 ",[25,117282,101063],{},[119,117284,117285],{},"XML 标签是否闭合、属性是否拼写正确",[119,117287,117288],{},"actuator 引用的 joint 名字是否存在",[119,117290,117291,117293,117294],{},[25,117292,101127],{}," 的长度是否等于 ",[25,117295,102209],{},[119,117297,105636,117298,82590,117300,117302,117303],{},[25,117299,104081],{},[25,117301,104411],{}," 后是否调用了 ",[25,117304,117305],{},"mujoco.mj_forward",[119,117307,117308],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[126,117310,117311],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":23,"searchDepth":42,"depth":42,"links":117313},[117314,117315,117316,117317,117318,117319,117320,117321],{"id":116955,"depth":42,"text":116955},{"id":116984,"depth":42,"text":116985},{"id":117014,"depth":42,"text":117014},{"id":117129,"depth":42,"text":117129},{"id":117182,"depth":42,"text":117182},{"id":117194,"depth":42,"text":117194},{"id":117231,"depth":42,"text":117231},{"id":117260,"depth":42,"text":117260},"仿真搭建。",{"category":23455},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116898,"description":117322},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117329,"title":117330,"body":117331,"description":131,"extension":132,"meta":117786,"navigation":134,"path":117787,"seo":117788,"stem":117789,"__hash__":117790},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117332,"toc":117784},[117333,117336,117339,117345,117781],[10,117334,117330],{"id":117335},"_1-最常用的基本操作更新",[14,117337,117338],{},"装linux系统教程：",[14,117340,117341],{},[448,117342,117343],{"href":117343,"rel":117344},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23940],[18,117346,117350],{"className":117347,"code":117348,"language":117349,"meta":23,"style":23},"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",[25,117351,117352,117357,117362,117371,117376,117385,117390,117410,117415,117426,117431,117440,117445,117473,117478,117497,117502,117521,117525,117530,117546,117550,117555,117585,117589,117594,117610,117614,117619,117634,117638,117643,117659,117663,117668,117680,117692,117696,117701,117718,117722,117727,117745,117749,117754,117763,117767,117772],{"__ignoreMap":23},[28,117353,117354],{"class":30,"line":31},[28,117355,117356],{"class":269},"#更新相关的知识\n",[28,117358,117359],{"class":30,"line":42},[28,117360,117361],{"class":269},"# 更新软件包列表（从服务器获取最新软件信息）\n",[28,117363,117364,117366,117369],{"class":30,"line":50},[28,117365,24652],{"class":34},[28,117367,117368],{"class":64}," apt",[28,117370,26293],{"class":64},[28,117372,117373],{"class":30,"line":58},[28,117374,117375],{"class":269},"# 升级所有可更新的软件包（不删除旧包）\n",[28,117377,117378,117380,117382],{"class":30,"line":70},[28,117379,24652],{"class":34},[28,117381,117368],{"class":64},[28,117383,117384],{"class":64}," upgrade\n",[28,117386,117387],{"class":30,"line":78},[28,117388,117389],{"class":269},"#更新和升级软件包\n",[28,117391,117392,117394,117396,117399,117401,117403,117405,117408],{"class":30,"line":86},[28,117393,24652],{"class":34},[28,117395,117368],{"class":64},[28,117397,117398],{"class":64}," update",[28,117400,26241],{"class":211},[28,117402,24652],{"class":34},[28,117404,117368],{"class":64},[28,117406,117407],{"class":64}," upgrade",[28,117409,101032],{"class":38},[28,117411,117412],{"class":30,"line":97},[28,117413,117414],{"class":269},"#列出可更新的软件包及版本信息\n",[28,117416,117417,117420,117423],{"class":30,"line":108},[28,117418,117419],{"class":34},"apt",[28,117421,117422],{"class":64}," list",[28,117424,117425],{"class":38}," --upgradable\n",[28,117427,117428],{"class":30,"line":1407},[28,117429,117430],{"class":269},"#彻底升级（处理依赖关系，可能删除旧包）\n",[28,117432,117433,117435,117437],{"class":30,"line":1690},[28,117434,24652],{"class":34},[28,117436,117368],{"class":64},[28,117438,117439],{"class":64}," full-upgrade\n",[28,117441,117442],{"class":30,"line":1695},[28,117443,117444],{"class":269},"#设置指定版本\n",[28,117446,117447,117449,117451,117453,117455,117458,117460,117462,117464,117466,117469,117471],{"class":30,"line":1701},[28,117448,24652],{"class":34},[28,117450,117368],{"class":64},[28,117452,23909],{"class":64},[28,117454,28953],{"class":207},[28,117456,117457],{"class":64},"package_nam",[28,117459,285],{"class":211},[28,117461,1170],{"class":207},[28,117463,257],{"class":64},[28,117465,1120],{"class":207},[28,117467,117468],{"class":64},"version_numbe",[28,117470,880],{"class":211},[28,117472,51358],{"class":207},[28,117474,117475],{"class":30,"line":1706},[28,117476,117477],{"class":269},"#只安装软件包不升级\n",[28,117479,117480,117482,117484,117486,117488,117490,117492,117494],{"class":30,"line":1720},[28,117481,24652],{"class":34},[28,117483,117368],{"class":64},[28,117485,23909],{"class":64},[28,117487,28953],{"class":207},[28,117489,117457],{"class":64},[28,117491,285],{"class":211},[28,117493,1170],{"class":207},[28,117495,117496],{"class":38}," --no-upgrade\n",[28,117498,117499],{"class":30,"line":1725},[28,117500,117501],{"class":269},"#只升级，不存在就不安装\n",[28,117503,117504,117506,117508,117510,117512,117514,117516,117518],{"class":30,"line":1731},[28,117505,24652],{"class":34},[28,117507,117368],{"class":64},[28,117509,23909],{"class":64},[28,117511,28953],{"class":207},[28,117513,117457],{"class":64},[28,117515,285],{"class":211},[28,117517,1170],{"class":207},[28,117519,117520],{"class":38}," --only-upgrade\n",[28,117522,117523],{"class":30,"line":1752},[28,117524,2477],{"emptyLinePlaceholder":134},[28,117526,117527],{"class":30,"line":1757},[28,117528,117529],{"class":269},"#安装指定的软件命令\n",[28,117531,117532,117534,117536,117538,117540,117542,117544],{"class":30,"line":1771},[28,117533,24652],{"class":34},[28,117535,117368],{"class":64},[28,117537,23909],{"class":64},[28,117539,28953],{"class":207},[28,117541,117457],{"class":64},[28,117543,285],{"class":211},[28,117545,51358],{"class":207},[28,117547,117548],{"class":30,"line":1776},[28,117549,2477],{"emptyLinePlaceholder":134},[28,117551,117552],{"class":30,"line":1805},[28,117553,117554],{"class":269},"#安装多个软件包\n",[28,117556,117557,117559,117561,117563,117565,117568,117571,117573,117575,117578,117580,117582],{"class":30,"line":1810},[28,117558,24652],{"class":34},[28,117560,117368],{"class":64},[28,117562,23909],{"class":64},[28,117564,28953],{"class":207},[28,117566,117567],{"class":64},"package_",[28,117569,117570],{"class":207},"1>",[28,117572,28953],{"class":207},[28,117574,117567],{"class":64},[28,117576,117577],{"class":207},"2>",[28,117579,28953],{"class":207},[28,117581,117567],{"class":64},[28,117583,117584],{"class":207},"3>\n",[28,117586,117587],{"class":30,"line":1827},[28,117588,2477],{"emptyLinePlaceholder":134},[28,117590,117591],{"class":30,"line":1832},[28,117592,117593],{"class":269},"#更新指定的软件命令\n",[28,117595,117596,117598,117600,117602,117604,117606,117608],{"class":30,"line":1837},[28,117597,24652],{"class":34},[28,117599,117368],{"class":64},[28,117601,117398],{"class":64},[28,117603,28953],{"class":207},[28,117605,117457],{"class":64},[28,117607,285],{"class":211},[28,117609,51358],{"class":207},[28,117611,117612],{"class":30,"line":1842},[28,117613,2477],{"emptyLinePlaceholder":134},[28,117615,117616],{"class":30,"line":1856},[28,117617,117618],{"class":269},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[28,117620,117621,117623,117626,117628,117630,117632],{"class":30,"line":1861},[28,117622,117419],{"class":34},[28,117624,117625],{"class":64}," show",[28,117627,28953],{"class":207},[28,117629,117457],{"class":64},[28,117631,285],{"class":211},[28,117633,51358],{"class":207},[28,117635,117636],{"class":30,"line":2654},[28,117637,2477],{"emptyLinePlaceholder":134},[28,117639,117640],{"class":30,"line":2668},[28,117641,117642],{"class":269},"#删除软件包命令\n",[28,117644,117645,117647,117649,117651,117653,117655,117657],{"class":30,"line":2676},[28,117646,24652],{"class":34},[28,117648,117368],{"class":64},[28,117650,26130],{"class":64},[28,117652,28953],{"class":207},[28,117654,117457],{"class":64},[28,117656,285],{"class":211},[28,117658,51358],{"class":207},[28,117660,117661],{"class":30,"line":2681},[28,117662,2477],{"emptyLinePlaceholder":134},[28,117664,117665],{"class":30,"line":2687},[28,117666,117667],{"class":269},"# 清理旧版本和缓存（释放磁盘空间）\n",[28,117669,117670,117672,117674,117677],{"class":30,"line":2693},[28,117671,24652],{"class":34},[28,117673,117368],{"class":64},[28,117675,117676],{"class":64}," autoremove",[28,117678,117679],{"class":269},"  # 删除不再需要的依赖和库文件\n",[28,117681,117682,117684,117686,117689],{"class":30,"line":2698},[28,117683,24652],{"class":34},[28,117685,117368],{"class":64},[28,117687,117688],{"class":64}," clean",[28,117690,117691],{"class":269},"       # 清理下载的缓存包\n",[28,117693,117694],{"class":30,"line":8025},[28,117695,2477],{"emptyLinePlaceholder":134},[28,117697,117698],{"class":30,"line":8049},[28,117699,117700],{"class":269},"#移除软件包及配置文件\n",[28,117702,117703,117705,117707,117710,117712,117714,117716],{"class":30,"line":8054},[28,117704,24652],{"class":34},[28,117706,117368],{"class":64},[28,117708,117709],{"class":64}," purge",[28,117711,28953],{"class":207},[28,117713,117457],{"class":64},[28,117715,285],{"class":211},[28,117717,51358],{"class":207},[28,117719,117720],{"class":30,"line":8060},[28,117721,2477],{"emptyLinePlaceholder":134},[28,117723,117724],{"class":30,"line":8087},[28,117725,117726],{"class":269},"#查找软件包命令\n",[28,117728,117729,117731,117733,117736,117738,117741,117743],{"class":30,"line":8092},[28,117730,24652],{"class":34},[28,117732,117368],{"class":64},[28,117734,117735],{"class":64}," search",[28,117737,28953],{"class":207},[28,117739,117740],{"class":64},"keywor",[28,117742,524],{"class":211},[28,117744,51358],{"class":207},[28,117746,117747],{"class":30,"line":8098},[28,117748,2477],{"emptyLinePlaceholder":134},[28,117750,117751],{"class":30,"line":8110},[28,117752,117753],{"class":269},"#列出所有已安装的包\n",[28,117755,117756,117758,117760],{"class":30,"line":8122},[28,117757,117419],{"class":34},[28,117759,117422],{"class":64},[28,117761,117762],{"class":38}," --installed\n",[28,117764,117765],{"class":30,"line":8134},[28,117766,2477],{"emptyLinePlaceholder":134},[28,117768,117769],{"class":30,"line":9793},[28,117770,117771],{"class":269},"#列出所有已安装的包的版本信息\n",[28,117773,117774,117776,117778],{"class":30,"line":9818},[28,117775,117419],{"class":34},[28,117777,117422],{"class":64},[28,117779,117780],{"class":38}," --all-versions\n",[126,117782,117783],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":42,"depth":42,"links":117785},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117330,"description":131},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117792,"title":117793,"body":117794,"description":131,"extension":132,"meta":118535,"navigation":134,"path":118536,"seo":118537,"stem":118538,"__hash__":118539},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117795,"toc":118522},[117796,117799,117803,117806,117812,117816,117820,117826,117831,117836,117841,117846,117851,117854,117857,117860,117863,117867,117870,117875,117878,117883,117886,117891,117898,117901,117904,117907,117910,117913,117924,117928,117932,117937,117942,117946,117951,117955,117960,117964,117968,117973,117976,118021,118026,118030,118034,118039,118045,118050,118060,118065,118075,118080,118085,118112,118116,118119,118124,118127,118152,118156,118161,118164,118169,118174,118194,118199,118202,118217,118221,118274,118277,118282,118286,118289,118304,118307,118310,118315,118319,118323,118326,118330,118334,118337,118342,118347,118351,118358,118366,118369,118376,118381,118386,118389,118394,118401,118406,118413,118417,118419,118424,118428,118431,118434,118439,118442,118447,118450,118455,118460,118465,118469,118474,118478,118519],[10,117797,117793],{"id":117798},"_2-linux装机教程",[149,117800,117802],{"id":117801},"_21-实体机","2.1 实体机",[14,117804,117805],{},"使用清华源：（Ubuntu24.04）",[14,117807,117808],{},[448,117809,117810],{"href":117810,"rel":117811},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23940],[149,117813,117815],{"id":117814},"_22-普通虚拟机","2.2 普通虚拟机",[177,117817,117819],{"id":117818},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117821,117822],{},[448,117823,117824],{"href":117824,"rel":117825},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23940],[14,117827,117828],{},[1540,117829],{"alt":23,"src":117830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117832,117833],{},[1540,117834],{"alt":23,"src":117835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117837,117838],{},[1540,117839],{"alt":23,"src":117840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117842,117843],{},[1540,117844],{"alt":23,"src":117845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117847,117848],{},[1540,117849],{"alt":23,"src":117850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117852,117853],{},"内存4G（4096MB）；",[14,117855,117856],{},"CPU给4个核；",[14,117858,117859],{},"硬盘动态分配60G；",[14,117861,117862],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[177,117864,117866],{"id":117865},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117868,117869],{},"按照1.1的步骤下载Ubuntu",[14,117871,117872],{},[1540,117873],{"alt":23,"src":117874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117876,117877],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117879,117880],{},[1540,117881],{"alt":23,"src":117882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117884,117885],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117887,117888],{},[1540,117889],{"alt":23,"src":117890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117892,117893,117894,117897],{},"选择“正常安装”(找不到都用Alt+F7)， ",[359,117895,117896],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117899,117900],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117902,117903],{},"将改动写入磁盘吗 继续",[14,117905,117906],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117908,117909],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117911,117912],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117914,117915,117916,117919,117920,117923],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[359,117917,117918],{},"除了"," 选不发送系统信息与不升级之外， ",[359,117921,117922],{},"其它"," 都跳过或前进）",[177,117925,117927],{"id":117926},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22075,117929,117931],{"id":117930},"_2231-全屏","2.2.3.1 全屏",[14,117933,117934],{},[1540,117935],{"alt":23,"src":117936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117938,117939],{},[1540,117940],{"alt":23,"src":117941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22075,117943,117945],{"id":117944},"_2232-文件交换","2.2.3.2 文件交换",[14,117947,117948],{},[1540,117949],{"alt":23,"src":117950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22075,117952,117954],{"id":117953},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117956,117957],{},[1540,117958],{"alt":23,"src":117959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[149,117961,117963],{"id":117962},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[177,117965,117967],{"id":117966},"_231-简介与优缺点","2.3.1 简介与优缺点",[161,117969,117970],{},[119,117971,117972],{},"什么情况下推荐？",[14,117974,117975],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[161,117977,117978],{"start":42},[119,117979,117980,117981],{},"优缺点：",[161,117982,117983,118013],{},[119,117984,117985,117986],{},"优点：",[161,117987,117988,117991,117998,118001,118004,118007,118010],{},[119,117989,117990],{},"WSL2是最好的Linux发行版;(bushi)",[119,117992,117993,117994,117997],{},"性能损耗极低。且比在Windows上跑深度性能 ",[359,117995,117996],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[119,117999,118000],{},"非常方便调用USB设备，可以USB直通;",[119,118002,118003],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[119,118005,118006],{},"非常方便Win与WSL2互相传文件等协同操作;",[119,118008,118009],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[119,118011,118012],{},"非常方便使用Windows的VScode远程开发;",[119,118014,118015,118016],{},"缺点：",[161,118017,118018],{},[119,118019,118020],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,118022,118023],{},[1540,118024],{"alt":23,"src":118025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[177,118027,118029],{"id":118028},"_232-安装教程","2.3.2 安装教程",[22075,118031,118033],{"id":118032},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[161,118035,118036],{},[119,118037,118038],{},"方法一(图形界面)",[14,118040,118041,118042,24694],{},"用Win+R输入",[25,118043,118044],{},"appwiz.cpl",[14,118046,118047],{},[1540,118048],{"alt":23,"src":118049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,118051,118052,118053,118056,118057,26524],{},"点击OK进入 ",[359,118054,118055],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[359,118058,118059],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118061,118062],{},[1540,118063],{"alt":23,"src":118064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118066,118067,118068,101069,118071,118074],{},"选择 ",[359,118069,118070],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[359,118072,118073],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118076,118077],{},[1540,118078],{"alt":23,"src":118079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[161,118081,118082],{"start":42},[119,118083,118084],{},"方法二(命令行)",[18,118086,118090],{"className":118087,"code":118088,"language":118089,"meta":23,"style":23},"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",[25,118091,118092,118097,118102,118107],{"__ignoreMap":23},[28,118093,118094],{"class":30,"line":31},[28,118095,118096],{},"# 开启 Linux 子系统\n",[28,118098,118099],{"class":30,"line":42},[28,118100,118101],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[28,118103,118104],{"class":30,"line":50},[28,118105,118106],{},"# 开启虚拟机平台\n",[28,118108,118109],{"class":30,"line":58},[28,118110,118111],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22075,118113,118115],{"id":118114},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118117,118118],{},"用管理员权限打开powershell",[14,118120,118121],{},[1540,118122],{"alt":23,"src":118123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118125,118126],{},"升级WSL并设置默认版本为WSL2",[18,118128,118130],{"className":118087,"code":118129,"language":118089,"meta":23,"style":23},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[25,118131,118132,118137,118142,118147],{"__ignoreMap":23},[28,118133,118134],{"class":30,"line":31},[28,118135,118136],{},"# 更新 wsl\n",[28,118138,118139],{"class":30,"line":42},[28,118140,118141],{},"wsl --update\n",[28,118143,118144],{"class":30,"line":50},[28,118145,118146],{},"# 将 wsl 版本设置为 wsl2\n",[28,118148,118149],{"class":30,"line":58},[28,118150,118151],{},"wsl --set-default-version 2\n",[22075,118153,118155],{"id":118154},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[161,118157,118158],{},[119,118159,118160],{},"方式一(商店下载)",[14,118162,118163],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118165,118166],{},[1540,118167],{"alt":23,"src":118168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[161,118170,118171],{"start":42},[119,118172,118173],{},"方式二(命令行安装)",[18,118175,118177],{"className":118087,"code":118176,"language":118089,"meta":23,"style":23},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[25,118178,118179,118184,118189],{"__ignoreMap":23},[28,118180,118181],{"class":30,"line":31},[28,118182,118183],{},"# 列出可安装的 Linux 版本\n",[28,118185,118186],{"class":30,"line":42},[28,118187,118188],{},"#（需要科学手段）\n",[28,118190,118191],{"class":30,"line":50},[28,118192,118193],{},"wsl --list --online\n",[14,118195,118196],{},[1540,118197],{"alt":23,"src":118198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118200,118201],{},"选择对应发行版并安装",[18,118203,118205],{"className":118087,"code":118204,"language":118089,"meta":23,"style":23},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[25,118206,118207,118212],{"__ignoreMap":23},[28,118208,118209],{"class":30,"line":31},[28,118210,118211],{},"# Ubuntu安装完毕后需要重启系统\n",[28,118213,118214],{"class":30,"line":42},[28,118215,118216],{},"wsl --install -d Ubuntu-24.04\n",[22075,118218,118220],{"id":118219},"_2324-查看系统状态","2.3.2.4 查看系统状态",[18,118222,118224],{"className":118087,"code":118223,"language":118089,"meta":23,"style":23},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[25,118225,118226,118231,118236,118241,118246,118250,118254,118259,118264,118269],{"__ignoreMap":23},[28,118227,118228],{"class":30,"line":31},[28,118229,118230],{},"# 查看 wsl\n",[28,118232,118233],{"class":30,"line":42},[28,118234,118235],{},"wsl -l\n",[28,118237,118238],{"class":30,"line":50},[28,118239,118240],{},"# 查看 wsl 运行版本或模式\n",[28,118242,118243],{"class":30,"line":58},[28,118244,118245],{},"wsl -l -v\n",[28,118247,118248],{"class":30,"line":70},[28,118249,2477],{"emptyLinePlaceholder":134},[28,118251,118252],{"class":30,"line":78},[28,118253,2477],{"emptyLinePlaceholder":134},[28,118255,118256],{"class":30,"line":86},[28,118257,118258],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[28,118260,118261],{"class":30,"line":97},[28,118262,118263],{},"wsl --set-version \u003Cdistro> 2\n",[28,118265,118266],{"class":30,"line":108},[28,118267,118268],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[28,118270,118271],{"class":30,"line":1407},[28,118272,118273],{},"wsl --unregister \u003Cdistro>\n",[14,118275,118276],{},"输出Version为2即正常",[14,118278,118279],{},[1540,118280],{"alt":23,"src":118281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22075,118283,118285],{"id":118284},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118287,118288],{},"直接在Powershell里输入wsl命令进入子系统",[18,118290,118292],{"className":118087,"code":118291,"language":118089,"meta":23,"style":23},"# 进入子系统\nwsl\n",[25,118293,118294,118299],{"__ignoreMap":23},[28,118295,118296],{"class":30,"line":31},[28,118297,118298],{},"# 进入子系统\n",[28,118300,118301],{"class":30,"line":42},[28,118302,118303],{},"wsl\n",[14,118305,118306],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118308,118309],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118311,118312],{},[1540,118313],{"alt":23,"src":118314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[177,118316,118318],{"id":118317},"_233-配置各种环境","2.3.3 配置各种环境",[22075,118320,118322],{"id":118321},"_2331-换源","2.3.3.1 换源",[14,118324,118325],{},"(同实体机LINUX，往下找教程)",[22075,118327,118329],{"id":118328},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22987,118331,118333],{"id":118332},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118335,118336],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118338,118339],{},[1540,118340],{"alt":23,"src":118341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118343,118344],{},[1540,118345],{"alt":23,"src":118346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22987,118348,118350],{"id":118349},"_23322-cuda","2.3.3.2.2 CUDA",[14,118352,118353,118354],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[448,118355,118356],{"href":118356,"rel":118357},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23940],[14,118359,118360,118363],{},[1540,118361],{"alt":23,"src":118362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1540,118364],{"alt":23,"src":118365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118367,118368],{},"在下方的网站，选择合适的版本。",[14,118370,118371,118372],{},"WSL2 专属 CUDA 指南：",[448,118373,118374],{"href":118374,"rel":118375},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23940],[14,118377,118378],{},[359,118379,118380],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118382,118383],{},[1540,118384],{"alt":23,"src":118385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118387,118388],{},"挨行敲一遍",[14,118390,118391],{},[1540,118392],{"alt":23,"src":118393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118395,118396,118397,118400],{},"敲完后，输入",[25,118398,118399],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118402,118403],{},[1540,118404],{"alt":23,"src":118405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118407,118408,118409,118412],{},"（请详看下方教程的",[359,118410,118411],{},"安装CUDA的配置环境来看","如何配置环境）",[22987,118414,118416],{"id":118415},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118418,118325],{},[14,118420,118421],{},[1540,118422],{"alt":23,"src":118423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22075,118425,118427],{"id":118426},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118429,118430],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118432,118433],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118435,118436],{},[1540,118437],{"alt":23,"src":118438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118440,118441],{},"连接WSL2",[14,118443,118444],{},[1540,118445],{"alt":23,"src":118446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118448,118449],{},"远程开发成功。",[14,118451,118452],{},[1540,118453],{"alt":23,"src":118454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118456,118457],{},[1540,118458],{"alt":23,"src":118459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118461,118462],{},[1540,118463],{"alt":23,"src":118464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22075,118466,118468],{"id":118467},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118470,118471],{},[1540,118472],{"alt":23,"src":118473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22075,118475,118477],{"id":118476},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[18,118479,118481],{"className":117347,"code":118480,"language":117349,"meta":23,"style":23},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[25,118482,118483,118491,118499,118510,118514],{"__ignoreMap":23},[28,118484,118485,118487,118489],{"class":30,"line":31},[28,118486,24652],{"class":34},[28,118488,117368],{"class":64},[28,118490,26293],{"class":64},[28,118492,118493,118495,118497],{"class":30,"line":42},[28,118494,24652],{"class":34},[28,118496,117368],{"class":64},[28,118498,117384],{"class":64},[28,118500,118501,118503,118505,118507],{"class":30,"line":50},[28,118502,24652],{"class":34},[28,118504,117368],{"class":64},[28,118506,23909],{"class":64},[28,118508,118509],{"class":64}," mesa-utils\n",[28,118511,118512],{"class":30,"line":58},[28,118513,2477],{"emptyLinePlaceholder":134},[28,118515,118516],{"class":30,"line":70},[28,118517,118518],{"class":269},"#然后重启wsl2即可\n",[126,118520,118521],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":23,"searchDepth":42,"depth":42,"links":118523},[118524,118525,118530],{"id":117801,"depth":42,"text":117802},{"id":117814,"depth":42,"text":117815,"children":118526},[118527,118528,118529],{"id":117818,"depth":50,"text":117819},{"id":117865,"depth":50,"text":117866},{"id":117926,"depth":50,"text":117927},{"id":117962,"depth":42,"text":117963,"children":118531},[118532,118533,118534],{"id":117966,"depth":50,"text":117967},{"id":118028,"depth":50,"text":118029},{"id":118317,"depth":50,"text":118318},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117793,"description":131},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118541,"title":118542,"body":118543,"description":131,"extension":132,"meta":121479,"navigation":134,"path":121480,"seo":121481,"stem":121482,"__hash__":121483},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118544,"toc":121451},[118545,118548,118552,118558,118562,118568,118572,118760,118763,118768,118772,118776,118779,118782,118788,118793,118796,118799,118804,118837,118842,118846,118923,118926,118931,118935,118938,118977,118980,118989,119007,119012,119019,119136,119141,119144,119171,119176,119180,119189,119239,119246,119250,119253,119267,119274,119308,119313,119317,119340,119343,119348,119352,119355,119358,119361,119403,119407,119410,119413,119454,119458,119462,119465,119470,119475,119478,119501,119504,119512,119517,119520,119525,119530,119533,119538,119542,119547,119570,119575,119637,119645,119650,119655,119658,119663,119666,119671,119676,119694,119699,119705,119710,119724,119728,119731,119734,119737,119780,119783,119788,119889,119892,119897,119901,119905,119942,119946,119950,119954,120000,120004,120049,120053,120060,120068,120123,120126,120203,120206,120229,120233,120236,120241,120246,120254,120257,120262,120267,120272,120275,120280,120289,120292,120297,120300,120371,120376,120379,120384,120387,120392,120395,120400,120403,120408,120413,120416,120491,120494,120507,120512,120515,120529,120532,120561,120566,120595,120598,120603,120607,120612,120621,120624,120629,120632,120637,120640,120643,120648,120651,120656,120661,120664,120669,120672,120797,120802,120832,120835,120840,120845,120862,120865,120908,120911,120938,120943,120956,121099,121103,121108,121122,121125,121176,121179,121209,121212,121228,121233,121247,121250,121317,121322,121331,121336,121339,121351,121356,121363,121387,121390,121395,121398,121417,121422,121429,121441,121448],[10,118546,118542],{"id":118547},"_3-安装必备配置",[149,118549,118551],{"id":118550},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[18,118553,118556],{"className":118554,"code":118555,"language":5264},[5262],"  打开下方网站（注意，该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",[25,118557,118555],{"__ignoreMap":23},[177,118559,118561],{"id":118560},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[18,118563,118566],{"className":118564,"code":118565,"language":5264},[5262],"  输入以下命令\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",[25,118567,118565],{"__ignoreMap":23},[177,118569,118571],{"id":118570},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[18,118573,118577],{"className":118574,"code":118575,"language":118576,"meta":23,"style":23},"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",[25,118578,118579,118587,118598,118610,118624,118628,118638,118643,118647,118651,118656,118660,118672,118676,118681,118685,118696,118700,118716,118720,118731,118735,118740,118744,118752],{"__ignoreMap":23},[28,118580,118581,118583,118585],{"class":30,"line":31},[28,118582,24652],{"class":34},[28,118584,117368],{"class":64},[28,118586,26293],{"class":64},[28,118588,118589,118591,118593,118595],{"class":30,"line":42},[28,118590,24652],{"class":34},[28,118592,117368],{"class":64},[28,118594,23909],{"class":64},[28,118596,118597],{"class":64}," vim\n",[28,118599,118600,118602,118605,118607],{"class":30,"line":50},[28,118601,24652],{"class":34},[28,118603,118604],{"class":64}," rm",[28,118606,25390],{"class":38},[28,118608,118609],{"class":64}," \u002Fetc\u002Fapt\u002Fsources.list\n",[28,118611,118612,118614,118616,118618,118621],{"class":30,"line":58},[28,118613,24652],{"class":34},[28,118615,118604],{"class":64},[28,118617,25390],{"class":38},[28,118619,118620],{"class":64}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[28,118622,118623],{"class":38},"**\n",[28,118625,118626],{"class":30,"line":70},[28,118627,2477],{"emptyLinePlaceholder":134},[28,118629,118630,118632,118635],{"class":30,"line":78},[28,118631,24652],{"class":34},[28,118633,118634],{"class":64}," vim",[28,118636,118637],{"class":64}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[28,118639,118640],{"class":30,"line":86},[28,118641,118642],{"class":64},"```\n",[28,118644,118645],{"class":30,"line":97},[28,118646,2477],{"emptyLinePlaceholder":134},[28,118648,118649],{"class":30,"line":108},[28,118650,2477],{"emptyLinePlaceholder":134},[28,118652,118653],{"class":30,"line":1407},[28,118654,118655],{"class":34},"选择好Ubuntu版本后，复制下方的内容。\n",[28,118657,118658],{"class":30,"line":1690},[28,118659,2477],{"emptyLinePlaceholder":134},[28,118661,118662,118664,118667,118670],{"class":30,"line":1695},[28,118663,436],{"class":207},[28,118665,118666],{"class":64},"[](",[28,118668,118669],{"class":34},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[28,118671,218],{"class":64},[28,118673,118674],{"class":30,"line":1701},[28,118675,2477],{"emptyLinePlaceholder":134},[28,118677,118678],{"class":30,"line":1706},[28,118679,118680],{"class":34},"粘贴进去\n",[28,118682,118683],{"class":30,"line":1720},[28,118684,2477],{"emptyLinePlaceholder":134},[28,118686,118687,118689,118691,118694],{"class":30,"line":1725},[28,118688,436],{"class":207},[28,118690,118666],{"class":64},[28,118692,118693],{"class":34},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[28,118695,218],{"class":64},[28,118697,118698],{"class":30,"line":1731},[28,118699,2477],{"emptyLinePlaceholder":134},[28,118701,118702,118705,118708,118711,118713],{"class":30,"line":1752},[28,118703,118704],{"class":34},"按一下ESC，然后英文冒号，输入",[28,118706,118707],{"class":64}," `",[28,118709,118710],{"class":34},":wq!",[28,118712,1182],{"class":64},[28,118714,118715],{"class":34},"然后回车\n",[28,118717,118718],{"class":30,"line":1757},[28,118719,2477],{"emptyLinePlaceholder":134},[28,118721,118722,118724,118726,118729],{"class":30,"line":1771},[28,118723,436],{"class":207},[28,118725,118666],{"class":64},[28,118727,118728],{"class":34},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[28,118730,218],{"class":64},[28,118732,118733],{"class":30,"line":1776},[28,118734,2477],{"emptyLinePlaceholder":134},[28,118736,118737],{"class":30,"line":1805},[28,118738,118739],{"class":34},"输入以下命令\n",[28,118741,118742],{"class":30,"line":1810},[28,118743,2477],{"emptyLinePlaceholder":134},[28,118745,118746,118749],{"class":30,"line":1827},[28,118747,118748],{"class":64},"```",[28,118750,118751],{"class":34},"Bash\n",[28,118753,118754,118756,118758],{"class":30,"line":1832},[28,118755,24652],{"class":34},[28,118757,117368],{"class":64},[28,118759,26293],{"class":64},[14,118761,118762],{},"这里被替换成对应学校则成功",[14,118764,118765],{},[1540,118766],{"alt":23,"src":118767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[149,118769,118771],{"id":118770},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[177,118773,118775],{"id":118774},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118777,118778],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118780,118781],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118783,118784],{},[448,118785,118786],{"href":118786,"rel":118787},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23940],[14,118789,118790],{},[1540,118791],{"alt":23,"src":118792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118794,118795],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118797,118798],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118800,118801],{},[1540,118802],{"alt":23,"src":118803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[18,118805,118807],{"className":117347,"code":118806,"language":117349,"meta":23,"style":23},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[25,118808,118809,118814,118821,118826],{"__ignoreMap":23},[28,118810,118811],{"class":30,"line":31},[28,118812,118813],{"class":269},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[28,118815,118816,118818],{"class":30,"line":42},[28,118817,101327],{"class":38},[28,118819,118820],{"class":64}," ~\u002FDownloads\n",[28,118822,118823],{"class":30,"line":50},[28,118824,118825],{"class":269},"#下方chrome安装包名不一定是这个，根据名字来看\n",[28,118827,118828,118830,118832,118834],{"class":30,"line":58},[28,118829,24652],{"class":34},[28,118831,117368],{"class":64},[28,118833,23909],{"class":64},[28,118835,118836],{"class":64}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118838,118839],{},[1540,118840],{"alt":23,"src":118841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[177,118843,118845],{"id":118844},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[18,118847,118849],{"className":117347,"code":118848,"language":117349,"meta":23,"style":23},"# 老版\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",[25,118850,118851,118856,118864,118875,118880,118884,118889,118899,118907,118918],{"__ignoreMap":23},[28,118852,118853],{"class":30,"line":31},[28,118854,118855],{"class":269},"# 老版\n",[28,118857,118858,118860,118862],{"class":30,"line":42},[28,118859,24652],{"class":34},[28,118861,117368],{"class":64},[28,118863,26293],{"class":64},[28,118865,118866,118868,118870,118872],{"class":30,"line":50},[28,118867,24652],{"class":34},[28,118869,117368],{"class":64},[28,118871,23909],{"class":64},[28,118873,118874],{"class":64}," neofetch\n",[28,118876,118877],{"class":30,"line":58},[28,118878,118879],{"class":34},"neofetch\n",[28,118881,118882],{"class":30,"line":70},[28,118883,2477],{"emptyLinePlaceholder":134},[28,118885,118886],{"class":30,"line":78},[28,118887,118888],{"class":269},"# 新版\n",[28,118890,118891,118893,118896],{"class":30,"line":86},[28,118892,24652],{"class":34},[28,118894,118895],{"class":64}," add-apt-repository",[28,118897,118898],{"class":64}," ppa:zhangsongcui3371\u002Ffastfetch\n",[28,118900,118901,118903,118905],{"class":30,"line":97},[28,118902,24652],{"class":34},[28,118904,117368],{"class":64},[28,118906,26293],{"class":64},[28,118908,118909,118911,118913,118915],{"class":30,"line":108},[28,118910,24652],{"class":34},[28,118912,117368],{"class":64},[28,118914,23909],{"class":64},[28,118916,118917],{"class":64}," fastfetch\n",[28,118919,118920],{"class":30,"line":1407},[28,118921,118922],{"class":34},"fastfetch\n",[14,118924,118925],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118927,118928],{},[1540,118929],{"alt":23,"src":118930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[177,118932,118934],{"id":118933},"_323-移除snap应用","3.2.3 移除snap应用",[14,118936,118937],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[18,118939,118941],{"className":117347,"code":118940,"language":117349,"meta":23,"style":23},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[25,118942,118943,118955,118966],{"__ignoreMap":23},[28,118944,118945,118947,118949,118952],{"class":30,"line":31},[28,118946,24652],{"class":34},[28,118948,26564],{"class":64},[28,118950,118951],{"class":64}," disable",[28,118953,118954],{"class":64}," snapd.service\n",[28,118956,118957,118959,118961,118963],{"class":30,"line":42},[28,118958,24652],{"class":34},[28,118960,26564],{"class":64},[28,118962,118951],{"class":64},[28,118964,118965],{"class":64}," snapd.socket\n",[28,118967,118968,118970,118972,118974],{"class":30,"line":50},[28,118969,24652],{"class":34},[28,118971,26564],{"class":64},[28,118973,118951],{"class":64},[28,118975,118976],{"class":64}," snapd.seeded.service\n",[14,118978,118979],{},"然后查看snap应用列表",[14,118981,118982,118983,118988],{},"根据你安装的选择不同（最小安装或普通安装），有",[448,118984,118987],{"href":118985,"rel":118986},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23940],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[18,118990,118992],{"className":117347,"code":118991,"language":117349,"meta":23,"style":23},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[25,118993,118994,118999],{"__ignoreMap":23},[28,118995,118996],{"class":30,"line":31},[28,118997,118998],{"class":269},"# 查询当前系统上snap安装了哪些app\n",[28,119000,119001,119004],{"class":30,"line":42},[28,119002,119003],{"class":34},"snap",[28,119005,119006],{"class":64}," list\n",[14,119008,119009],{},[1540,119010],{"alt":23,"src":119011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,119013,119014,119015,119018],{},"卸载掉图中所有应用，按照 ",[359,119016,119017],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[18,119020,119022],{"className":117347,"code":119021,"language":117349,"meta":23,"style":23},"#移除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",[25,119023,119024,119029,119041,119046,119057,119062,119073,119078,119089,119094,119098,119103,119114,119125],{"__ignoreMap":23},[28,119025,119026],{"class":30,"line":31},[28,119027,119028],{"class":269},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[28,119030,119031,119033,119036,119038],{"class":30,"line":42},[28,119032,24652],{"class":34},[28,119034,119035],{"class":64}," snap",[28,119037,26130],{"class":64},[28,119039,119040],{"class":64}," snap-store\n",[28,119042,119043],{"class":30,"line":50},[28,119044,119045],{"class":269},"#移除firefox浏览器\n",[28,119047,119048,119050,119052,119054],{"class":30,"line":58},[28,119049,24652],{"class":34},[28,119051,119035],{"class":64},[28,119053,26130],{"class":64},[28,119055,119056],{"class":64}," firefox\n",[28,119058,119059],{"class":30,"line":70},[28,119060,119061],{"class":269},"#移除gnome-42-2204\n",[28,119063,119064,119066,119068,119070],{"class":30,"line":78},[28,119065,24652],{"class":34},[28,119067,119035],{"class":64},[28,119069,26130],{"class":64},[28,119071,119072],{"class":64}," gnome-42-2204\n",[28,119074,119075],{"class":30,"line":86},[28,119076,119077],{"class":269},"#移除gtk-common-themes\n",[28,119079,119080,119082,119084,119086],{"class":30,"line":97},[28,119081,24652],{"class":34},[28,119083,119035],{"class":64},[28,119085,26130],{"class":64},[28,119087,119088],{"class":64}," gtk-common-themes\n",[28,119090,119091],{"class":30,"line":108},[28,119092,119093],{"class":269},"#移除其它...\n",[28,119095,119096],{"class":30,"line":1407},[28,119097,2751],{"class":211},[28,119099,119100],{"class":30,"line":1690},[28,119101,119102],{"class":269},"#移除core22,bare以及snapd\n",[28,119104,119105,119107,119109,119111],{"class":30,"line":1695},[28,119106,24652],{"class":34},[28,119108,119035],{"class":64},[28,119110,26130],{"class":64},[28,119112,119113],{"class":64}," core22\n",[28,119115,119116,119118,119120,119122],{"class":30,"line":1701},[28,119117,24652],{"class":34},[28,119119,119035],{"class":64},[28,119121,26130],{"class":64},[28,119123,119124],{"class":64}," bare\n",[28,119126,119127,119129,119131,119133],{"class":30,"line":1706},[28,119128,24652],{"class":34},[28,119130,119035],{"class":64},[28,119132,26130],{"class":64},[28,119134,119135],{"class":64}," snapd\n",[14,119137,119138],{},[1540,119139],{"alt":23,"src":119140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119142,119143],{},"输入以下命令查看是否还有snap包",[18,119145,119147],{"className":117347,"code":119146,"language":117349,"meta":23,"style":23},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[25,119148,119149,119155,119159,119163,119167],{"__ignoreMap":23},[28,119150,119151,119153],{"class":30,"line":31},[28,119152,119003],{"class":34},[28,119154,119006],{"class":64},[28,119156,119157],{"class":30,"line":42},[28,119158,118855],{"class":269},[28,119160,119161],{"class":30,"line":50},[28,119162,118879],{"class":34},[28,119164,119165],{"class":30,"line":58},[28,119166,118888],{"class":269},[28,119168,119169],{"class":30,"line":70},[28,119170,118922],{"class":34},[14,119172,119173],{},[1540,119174],{"alt":23,"src":119175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[177,119177,119179],{"id":119178},"_324-移除snap","3.2.4 移除snap",[14,119181,119182,119183,119188],{},"在删除掉",[448,119184,119187],{"href":119185,"rel":119186},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23940],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[18,119190,119192],{"className":117347,"code":119191,"language":117349,"meta":23,"style":23}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[25,119193,119194,119199,119212,119217,119228],{"__ignoreMap":23},[28,119195,119196],{"class":30,"line":31},[28,119197,119198],{"class":269}," #使用apt移除掉snap\n",[28,119200,119201,119203,119205,119207,119210],{"class":30,"line":42},[28,119202,24652],{"class":34},[28,119204,117368],{"class":64},[28,119206,117676],{"class":64},[28,119208,119209],{"class":38}," --purge",[28,119211,119135],{"class":64},[28,119213,119214],{"class":30,"line":50},[28,119215,119216],{"class":269},"#移除snapd的一些目录\n",[28,119218,119219,119221,119223,119225],{"class":30,"line":58},[28,119220,24652],{"class":34},[28,119222,118604],{"class":64},[28,119224,25390],{"class":38},[28,119226,119227],{"class":64}," \u002Fvar\u002Fcache\u002Fsnapd\n",[28,119229,119230,119232,119234,119236],{"class":30,"line":70},[28,119231,24652],{"class":34},[28,119233,118604],{"class":64},[28,119235,25390],{"class":38},[28,119237,119238],{"class":64}," ~\u002Fsnap\n",[14,119240,119241,119242,119245],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[25,119243,119244],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[177,119247,119249],{"id":119248},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119251,119252],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[18,119254,119256],{"className":117347,"code":119255,"language":117349,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[25,119257,119258],{"__ignoreMap":23},[28,119259,119260,119262,119264],{"class":30,"line":31},[28,119261,24652],{"class":34},[28,119263,118634],{"class":64},[28,119265,119266],{"class":64}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119268,119269,119270,119273],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[25,119271,119272],{},":wq"," 回车",[18,119275,119277],{"className":117347,"code":119276,"language":117349,"meta":23,"style":23},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[25,119278,119279,119286,119300],{"__ignoreMap":23},[28,119280,119281,119284],{"class":30,"line":31},[28,119282,119283],{"class":34},"Package:",[28,119285,119135],{"class":64},[28,119287,119288,119291,119294,119297],{"class":30,"line":42},[28,119289,119290],{"class":34},"Pin:",[28,119292,119293],{"class":64}," release",[28,119295,119296],{"class":64}," a=",[28,119298,119299],{"class":38},"*\n",[28,119301,119302,119305],{"class":30,"line":50},[28,119303,119304],{"class":34},"Pin-Priority:",[28,119306,119307],{"class":38}," -10\n",[14,119309,119310],{},[1540,119311],{"alt":23,"src":119312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[177,119314,119316],{"id":119315},"_326-测试是否成功","3.2.6 测试是否成功",[18,119318,119320],{"className":117347,"code":119319,"language":117349,"meta":23,"style":23},"sudo apt update\nsudo apt install firefox\n",[25,119321,119322,119330],{"__ignoreMap":23},[28,119323,119324,119326,119328],{"class":30,"line":31},[28,119325,24652],{"class":34},[28,119327,117368],{"class":64},[28,119329,26293],{"class":64},[28,119331,119332,119334,119336,119338],{"class":30,"line":42},[28,119333,24652],{"class":34},[28,119335,117368],{"class":64},[28,119337,23909],{"class":64},[28,119339,119056],{"class":64},[14,119341,119342],{},"这里提示snapd无法被安装，就证明成功了",[14,119344,119345],{},[1540,119346],{"alt":23,"src":119347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[177,119349,119351],{"id":119350},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119353,119354],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119356,119357],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119359,119360],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[18,119362,119364],{"className":117347,"code":119363,"language":117349,"meta":23,"style":23},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[25,119365,119366,119371,119380,119385,119393],{"__ignoreMap":23},[28,119367,119368],{"class":30,"line":31},[28,119369,119370],{"class":269},"# 添加Mozilla提供的源\n",[28,119372,119373,119375,119377],{"class":30,"line":42},[28,119374,24652],{"class":34},[28,119376,118895],{"class":64},[28,119378,119379],{"class":64}," ppa:mozillateam\u002Fppa\n",[28,119381,119382],{"class":30,"line":50},[28,119383,119384],{"class":269},"# 安装Firefox\n",[28,119386,119387,119389,119391],{"class":30,"line":58},[28,119388,24652],{"class":34},[28,119390,117368],{"class":64},[28,119392,26293],{"class":64},[28,119394,119395,119397,119399,119401],{"class":30,"line":70},[28,119396,24652],{"class":34},[28,119398,117368],{"class":64},[28,119400,23909],{"class":64},[28,119402,119056],{"class":64},[177,119404,119406],{"id":119405},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119408,119409],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119411,119412],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[18,119414,119416],{"className":117347,"code":119415,"language":117349,"meta":23,"style":23},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[25,119417,119418,119423,119433,119441,119445],{"__ignoreMap":23},[28,119419,119420],{"class":30,"line":31},[28,119421,119422],{"class":269},"#删掉禁止安装snap的配置文件\n",[28,119424,119425,119427,119429,119431],{"class":30,"line":42},[28,119426,24652],{"class":34},[28,119428,118604],{"class":64},[28,119430,25390],{"class":38},[28,119432,119266],{"class":64},[28,119434,119435,119437,119439],{"class":30,"line":50},[28,119436,24652],{"class":34},[28,119438,117368],{"class":64},[28,119440,26293],{"class":64},[28,119442,119443],{"class":30,"line":58},[28,119444,2477],{"emptyLinePlaceholder":134},[28,119446,119447,119449,119451],{"class":30,"line":70},[28,119448,24652],{"class":34},[28,119450,117368],{"class":64},[28,119452,119453],{"class":64}," dist-update\n",[149,119455,119457],{"id":119456},"_33-中文输入法","3.3 中文输入法",[177,119459,119461],{"id":119460},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119463,119464],{},"官网下载搜狗输入法",[14,119466,119467],{},[1540,119468],{"alt":23,"src":119469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119471,119472],{},[1540,119473],{"alt":23,"src":119474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119476,119477],{},"打开终端输入如下",[18,119479,119481],{"className":117347,"code":119480,"language":117349,"meta":23,"style":23},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[25,119482,119483,119490],{"__ignoreMap":23},[28,119484,119485,119487],{"class":30,"line":31},[28,119486,101327],{"class":38},[28,119488,119489],{"class":64}," ~\u002FDownloads\u002F\n",[28,119491,119492,119494,119496,119498],{"class":30,"line":42},[28,119493,24652],{"class":34},[28,119495,117368],{"class":64},[28,119497,23909],{"class":64},[28,119499,119500],{"class":64}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119502,119503],{},"打开Fcitx",[14,119505,119506,119509],{},[1540,119507],{"alt":23,"src":119508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1540,119510],{"alt":23,"src":119511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119513,119514],{},[1540,119515],{"alt":23,"src":119516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119518,119519],{},"添加搜狗输入法",[14,119521,119522],{},[1540,119523],{"alt":23,"src":119524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119526,119527],{},[1540,119528],{"alt":23,"src":119529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119531,119532],{},"将搜狗输入法设置为唯一输入法",[14,119534,119535],{},[1540,119536],{"alt":23,"src":119537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[177,119539,119541],{"id":119540},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[161,119543,119544],{},[119,119545,119546],{},"卸载旧输入法",[18,119548,119550],{"className":118574,"code":119549,"language":118576,"meta":23,"style":23},"sudo apt purge fcitx* ibus*\n",[25,119551,119552],{"__ignoreMap":23},[28,119553,119554,119556,119558,119560,119563,119565,119568],{"class":30,"line":31},[28,119555,24652],{"class":34},[28,119557,117368],{"class":64},[28,119559,117709],{"class":64},[28,119561,119562],{"class":64}," fcitx",[28,119564,665],{"class":38},[28,119566,119567],{"class":64}," ibus",[28,119569,119299],{"class":38},[161,119571,119572],{"start":42},[119,119573,119574],{},"安装Fcitx5",[18,119576,119578],{"className":117347,"code":119577,"language":117349,"meta":23,"style":23},"# 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",[25,119579,119580,119585,119599,119603,119608,119617,119625],{"__ignoreMap":23},[28,119581,119582],{"class":30,"line":31},[28,119583,119584],{"class":269},"# Ubuntu22.04及以上、Debian12及以上\n",[28,119586,119587,119589,119591,119593,119596],{"class":30,"line":42},[28,119588,24652],{"class":34},[28,119590,117368],{"class":64},[28,119592,23909],{"class":64},[28,119594,119595],{"class":64}," fcitx5",[28,119597,119598],{"class":64}," fcitx5-chinese-addons\n",[28,119600,119601],{"class":30,"line":50},[28,119602,2477],{"emptyLinePlaceholder":134},[28,119604,119605],{"class":30,"line":58},[28,119606,119607],{"class":269},"# Ubuntu20.04\n",[28,119609,119610,119612,119614],{"class":30,"line":70},[28,119611,24652],{"class":34},[28,119613,118895],{"class":64},[28,119615,119616],{"class":64}," ppa:zhsj\u002Ffcitx5\n",[28,119618,119619,119621,119623],{"class":30,"line":78},[28,119620,24652],{"class":34},[28,119622,117368],{"class":64},[28,119624,26293],{"class":64},[28,119626,119627,119629,119631,119633,119635],{"class":30,"line":86},[28,119628,24652],{"class":34},[28,119630,117368],{"class":64},[28,119632,23909],{"class":64},[28,119634,119595],{"class":64},[28,119636,119598],{"class":64},[161,119638,119639,119642],{"start":50},[119,119640,119641],{},"Reboot System",[119,119643,119644],{},"启动Fcitx5",[14,119646,119647],{},[1540,119648],{"alt":23,"src":119649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[161,119651,119652],{"start":70},[119,119653,119654],{},"修改一些设置",[14,119656,119657],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119659,119660],{},[1540,119661],{"alt":23,"src":119662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119664,119665],{},"添加快捷键以便于更好切换中英文",[14,119667,119668],{},[1540,119669],{"alt":23,"src":119670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[161,119672,119673],{"start":78},[119,119674,119675],{},"重启",[18,119677,119679],{"className":118574,"code":119678,"language":118576,"meta":23,"style":23},"sudo shutdown -r now\n",[25,119680,119681],{"__ignoreMap":23},[28,119682,119683,119685,119688,119691],{"class":30,"line":31},[28,119684,24652],{"class":34},[28,119686,119687],{"class":64}," shutdown",[28,119689,119690],{"class":38}," -r",[28,119692,119693],{"class":64}," now\n",[161,119695,119696],{"start":86},[119,119697,119698],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119700,119701],{},[448,119702,119703],{"href":119703,"rel":119704},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23940],[161,119706,119707],{"start":97},[119,119708,119709],{},"再重启",[18,119711,119712],{"className":118574,"code":119678,"language":118576,"meta":23,"style":23},[25,119713,119714],{"__ignoreMap":23},[28,119715,119716,119718,119720,119722],{"class":30,"line":31},[28,119717,24652],{"class":34},[28,119719,119687],{"class":64},[28,119721,119690],{"class":38},[28,119723,119693],{"class":64},[149,119725,119727],{"id":119726},"_34-pip3源替换","3.4 pip3源替换",[14,119729,119730],{},"非Debian系发行版需要做。",[14,119732,119733],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119735,119736],{},"使用dnf的系统也可能不用做。",[18,119738,119740],{"className":117347,"code":119739,"language":117349,"meta":23,"style":23},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[25,119741,119742,119747,119754,119759,119764],{"__ignoreMap":23},[28,119743,119744],{"class":30,"line":31},[28,119745,119746],{"class":269},"# 检查是否已安装 pip\n",[28,119748,119749,119752],{"class":30,"line":42},[28,119750,119751],{"class":34},"pip3",[28,119753,26344],{"class":38},[28,119755,119756],{"class":30,"line":50},[28,119757,119758],{"class":269},"# 如果未安装，先安装 pip3（见下方）\n",[28,119760,119761],{"class":30,"line":58},[28,119762,119763],{"class":269},"# 配置 pip 使用清华源\n",[28,119765,119766,119768,119771,119774,119777],{"class":30,"line":70},[28,119767,119751],{"class":34},[28,119769,119770],{"class":64}," config",[28,119772,119773],{"class":64}," set",[28,119775,119776],{"class":64}," global.index-url",[28,119778,119779],{"class":64}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119781,119782],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119784,119785],{},[1540,119786],{"alt":23,"src":119787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[18,119789,119791],{"className":117347,"code":119790,"language":117349,"meta":23,"style":23},"#安装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",[25,119792,119793,119798,119806,119817,119821,119826,119845,119849,119854,119866,119870,119875],{"__ignoreMap":23},[28,119794,119795],{"class":30,"line":31},[28,119796,119797],{"class":269},"#安装pip3\n",[28,119799,119800,119802,119804],{"class":30,"line":42},[28,119801,24652],{"class":34},[28,119803,117368],{"class":64},[28,119805,26293],{"class":64},[28,119807,119808,119810,119812,119814],{"class":30,"line":50},[28,119809,24652],{"class":34},[28,119811,26127],{"class":64},[28,119813,23909],{"class":64},[28,119815,119816],{"class":64}," python3-pip\n",[28,119818,119819],{"class":30,"line":58},[28,119820,2477],{"emptyLinePlaceholder":134},[28,119822,119823],{"class":30,"line":70},[28,119824,119825],{"class":269},"#更新pip3\n",[28,119827,119828,119830,119832,119834,119836,119838,119841,119843],{"class":30,"line":78},[28,119829,100930],{"class":34},[28,119831,100933],{"class":38},[28,119833,100956],{"class":64},[28,119835,23909],{"class":64},[28,119837,26481],{"class":38},[28,119839,119840],{"class":64}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[28,119842,100961],{"class":38},[28,119844,100964],{"class":64},[28,119846,119847],{"class":30,"line":86},[28,119848,2477],{"emptyLinePlaceholder":134},[28,119850,119851],{"class":30,"line":97},[28,119852,119853],{"class":269},"#设置pip源为清华源\n",[28,119855,119856,119858,119860,119862,119864],{"class":30,"line":108},[28,119857,119751],{"class":34},[28,119859,119770],{"class":64},[28,119861,119773],{"class":64},[28,119863,119776],{"class":64},[28,119865,119779],{"class":64},[28,119867,119868],{"class":30,"line":1407},[28,119869,2477],{"emptyLinePlaceholder":134},[28,119871,119872],{"class":30,"line":1690},[28,119873,119874],{"class":269},"#测试\n",[28,119876,119877,119879,119881,119883,119885,119887],{"class":30,"line":1695},[28,119878,100930],{"class":34},[28,119880,100933],{"class":38},[28,119882,100956],{"class":64},[28,119884,23909],{"class":64},[28,119886,100961],{"class":38},[28,119888,100964],{"class":64},[14,119890,119891],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119893,119894],{},[1540,119895],{"alt":23,"src":119896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[149,119898,119900],{"id":119899},"_35-显卡驱动安装","3.5 显卡驱动安装",[177,119902,119904],{"id":119903},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[18,119906,119908],{"className":118574,"code":119907,"language":118576,"meta":23,"style":23},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[25,119909,119910,119915,119930,119935],{"__ignoreMap":23},[28,119911,119912],{"class":30,"line":31},[28,119913,119914],{"class":269},"# 如果是使用apt安装的驱动\n",[28,119916,119917,119919,119921,119923,119925,119928],{"class":30,"line":42},[28,119918,24652],{"class":34},[28,119920,26127],{"class":64},[28,119922,26130],{"class":64},[28,119924,119209],{"class":38},[28,119926,119927],{"class":64}," nvidia",[28,119929,119299],{"class":38},[28,119931,119932],{"class":30,"line":50},[28,119933,119934],{"class":269},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[28,119936,119937,119939],{"class":30,"line":58},[28,119938,24652],{"class":34},[28,119940,119941],{"class":64}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[177,119943,119945],{"id":119944},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22075,119947,119949],{"id":119948},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22987,119951,119953],{"id":119952},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[18,119955,119957],{"className":118574,"code":119956,"language":118576,"meta":23,"style":23},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,119958,119959,119964,119975,119980,119990,119995],{"__ignoreMap":23},[28,119960,119961],{"class":30,"line":31},[28,119962,119963],{"class":269},"# 安装英伟达驱动\n",[28,119965,119966,119968,119970,119972],{"class":30,"line":42},[28,119967,24652],{"class":34},[28,119969,117368],{"class":64},[28,119971,23909],{"class":64},[28,119973,119974],{"class":64}," nvidia-driver-版本号\n",[28,119976,119977],{"class":30,"line":50},[28,119978,119979],{"class":269},"# 重启 \n",[28,119981,119982,119984,119986,119988],{"class":30,"line":58},[28,119983,24652],{"class":34},[28,119985,119687],{"class":64},[28,119987,119690],{"class":38},[28,119989,119693],{"class":64},[28,119991,119992],{"class":30,"line":70},[28,119993,119994],{"class":269},"# 检查驱动是否安装成功\n",[28,119996,119997],{"class":30,"line":78},[28,119998,119999],{"class":34},"nvidia-smi\n",[22987,120001,120003],{"id":120002},"_35212-debian","3.5.2.1.2 Debian",[18,120005,120007],{"className":118574,"code":120006,"language":118576,"meta":23,"style":23},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120008,120009,120013,120027,120031,120041,120045],{"__ignoreMap":23},[28,120010,120011],{"class":30,"line":31},[28,120012,119963],{"class":269},[28,120014,120015,120017,120019,120021,120024],{"class":30,"line":42},[28,120016,24652],{"class":34},[28,120018,117368],{"class":64},[28,120020,23909],{"class":64},[28,120022,120023],{"class":64}," nvidia-driver",[28,120025,120026],{"class":64}," nvidia-settings\n",[28,120028,120029],{"class":30,"line":50},[28,120030,119979],{"class":269},[28,120032,120033,120035,120037,120039],{"class":30,"line":58},[28,120034,24652],{"class":34},[28,120036,119687],{"class":64},[28,120038,119690],{"class":38},[28,120040,119693],{"class":64},[28,120042,120043],{"class":30,"line":70},[28,120044,119994],{"class":269},[28,120046,120047],{"class":30,"line":78},[28,120048,119999],{"class":34},[22075,120050,120052],{"id":120051},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120054,120055,120056,120059],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[359,120057,120058],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120061,120062,120063],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23630,120064,120065],{},[359,120066,120067],{},"（也可以不禁用桌面环境，直接进行下一步。）",[18,120069,120071],{"className":118574,"code":120070,"language":118576,"meta":23,"style":23},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[25,120072,120073,120078,120088,120093,120106,120111],{"__ignoreMap":23},[28,120074,120075],{"class":30,"line":31},[28,120076,120077],{"class":269},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[28,120079,120080,120082,120085],{"class":30,"line":42},[28,120081,24652],{"class":34},[28,120083,120084],{"class":64}," telinit",[28,120086,120087],{"class":38}," 3\n",[28,120089,120090],{"class":30,"line":50},[28,120091,120092],{"class":269},"# ubuntu 使用下方命令\n",[28,120094,120095,120097,120100,120103],{"class":30,"line":58},[28,120096,24652],{"class":34},[28,120098,120099],{"class":64}," service",[28,120101,120102],{"class":64}," lightdm",[28,120104,120105],{"class":64}," stop\n",[28,120107,120108],{"class":30,"line":70},[28,120109,120110],{"class":269},"# Fedora 使用下方命令\n",[28,120112,120113,120115,120117,120120],{"class":30,"line":78},[28,120114,24652],{"class":34},[28,120116,26564],{"class":64},[28,120118,120119],{"class":64}," isolate",[28,120121,120122],{"class":64}," multi-user.target\n",[14,120124,120125],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[18,120127,120129],{"className":118574,"code":120128,"language":118576,"meta":23,"style":23},"# 编译环境+准备工作\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",[25,120130,120131,120136,120147,120152,120159,120164,120176,120181,120188,120193],{"__ignoreMap":23},[28,120132,120133],{"class":30,"line":31},[28,120134,120135],{"class":269},"# 编译环境+准备工作\n",[28,120137,120138,120140,120142,120144],{"class":30,"line":42},[28,120139,24652],{"class":34},[28,120141,117368],{"class":64},[28,120143,23909],{"class":64},[28,120145,120146],{"class":64}," build-essential\n",[28,120148,120149],{"class":30,"line":50},[28,120150,120151],{"class":269},"# 进入到.run目录中\n",[28,120153,120154,120156],{"class":30,"line":58},[28,120155,101327],{"class":38},[28,120157,120158],{"class":64}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[28,120160,120161],{"class":30,"line":70},[28,120162,120163],{"class":269},"# 给驱动文件增加可执行权限：\n",[28,120165,120166,120168,120170,120173],{"class":30,"line":78},[28,120167,24652],{"class":34},[28,120169,24655],{"class":64},[28,120171,120172],{"class":64}," a+x",[28,120174,120175],{"class":64}," NVIDIA-Linux-x86_64-550.107.02.run\n",[28,120177,120178],{"class":30,"line":86},[28,120179,120180],{"class":269},"# 然后执行安装：\n",[28,120182,120183,120185],{"class":30,"line":97},[28,120184,24652],{"class":34},[28,120186,120187],{"class":64}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[28,120189,120190],{"class":30,"line":108},[28,120191,120192],{"class":269},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[28,120194,120195,120197,120200],{"class":30,"line":1407},[28,120196,24652],{"class":34},[28,120198,120199],{"class":64}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[28,120201,120202],{"class":38},"  --no-opengl-files\n",[14,120204,120205],{},"安装完毕重启即可",[18,120207,120209],{"className":118574,"code":120208,"language":118576,"meta":23,"style":23},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[25,120210,120211,120215,120221,120225],{"__ignoreMap":23},[28,120212,120213],{"class":30,"line":31},[28,120214,119979],{"class":269},[28,120216,120217,120219],{"class":30,"line":42},[28,120218,24652],{"class":34},[28,120220,26698],{"class":64},[28,120222,120223],{"class":30,"line":50},[28,120224,119994],{"class":269},[28,120226,120227],{"class":30,"line":58},[28,120228,119999],{"class":34},[177,120230,120232],{"id":120231},"_353-安装cuda","3.5.3 安装CUDA",[14,120234,120235],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120237,120238],{},[1540,120239],{"alt":23,"src":120240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[161,120242,120243],{},[119,120244,120245],{},"先查看显卡驱动所支持的最高CUDA版本",[18,120247,120248],{"className":118574,"code":119999,"language":118576,"meta":23,"style":23},[25,120249,120250],{"__ignoreMap":23},[28,120251,120252],{"class":30,"line":31},[28,120253,119999],{"class":34},[14,120255,120256],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120258,120259],{},[1540,120260],{"alt":23,"src":120261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[161,120263,120264],{"start":42},[119,120265,120266],{},"下载CUDA并安装CUDA",[14,120268,118353,120269],{},[448,120270,118356],{"href":118356,"rel":120271},[23940],[14,120273,120274],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120276,120277],{},[1540,120278],{"alt":23,"src":120279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120281,120282,120283,120288],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[448,120284,120287],{"href":120285,"rel":120286},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23940],"Vinci机器人队单片机教程","）",[14,120290,120291],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120293,120294],{},[1540,120295],{"alt":23,"src":120296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120298,120299],{},"将最下方框框里的命令敲入终端",[18,120301,120303],{"className":118574,"code":120302,"language":118576,"meta":23,"style":23},"# 在当前文件夹下创建一个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",[25,120304,120305,120310,120319,120324,120331,120336,120344,120349,120360,120365],{"__ignoreMap":23},[28,120306,120307],{"class":30,"line":31},[28,120308,120309],{"class":269},"# 在当前文件夹下创建一个ttt的子文件夹\n",[28,120311,120312,120314,120316],{"class":30,"line":42},[28,120313,101317],{"class":34},[28,120315,29267],{"class":38},[28,120317,120318],{"class":64}," .\u002Fttt\n",[28,120320,120321],{"class":30,"line":50},[28,120322,120323],{"class":269},"# 进入ttt文件夹\n",[28,120325,120326,120328],{"class":30,"line":58},[28,120327,101327],{"class":38},[28,120329,120330],{"class":64}," ttt\n",[28,120332,120333],{"class":30,"line":70},[28,120334,120335],{"class":269},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[28,120337,120338,120341],{"class":30,"line":78},[28,120339,120340],{"class":34},"wget",[28,120342,120343],{"class":64}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[28,120345,120346],{"class":30,"line":86},[28,120347,120348],{"class":269},"# 给予权限\n",[28,120350,120351,120353,120355,120357],{"class":30,"line":97},[28,120352,24652],{"class":34},[28,120354,24655],{"class":64},[28,120356,120172],{"class":64},[28,120358,120359],{"class":64}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[28,120361,120362],{"class":30,"line":108},[28,120363,120364],{"class":269},"# 运行脚本\n",[28,120366,120367,120369],{"class":30,"line":1407},[28,120368,24652],{"class":34},[28,120370,120359],{"class":64},[14,120372,120373],{},[1540,120374],{"alt":23,"src":120375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120377,120378],{},"正在安装中：",[14,120380,120381],{},[1540,120382],{"alt":23,"src":120383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120385,120386],{},"输入accept接受即可",[14,120388,120389],{},[1540,120390],{"alt":23,"src":120391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120393,120394],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120396,120397],{},[1540,120398],{"alt":23,"src":120399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120401,120402],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120404,120405],{},[1540,120406],{"alt":23,"src":120407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[161,120409,120410],{"start":50},[119,120411,120412],{},"配置环境",[14,120414,120415],{},"根据上方确认一下路径，比如我上面红色框起来的为",[18,120417,120419],{"className":118574,"code":120418,"language":118576,"meta":23,"style":23},"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",[25,120420,120421,120437,120452],{"__ignoreMap":23},[28,120422,120423,120426,120429,120432,120435],{"class":30,"line":31},[28,120424,120425],{"class":34},"Please",[28,120427,120428],{"class":64}," make",[28,120430,120431],{"class":64}," sure",[28,120433,120434],{"class":64}," that",[28,120436,2751],{"class":211},[28,120438,120439,120441,120444,120447,120450],{"class":30,"line":42},[28,120440,52322],{"class":34},[28,120442,120443],{"class":64},"   PATH",[28,120445,120446],{"class":64}," includes",[28,120448,120449],{"class":64}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[28,120451,2751],{"class":211},[28,120453,120454,120456,120459,120461,120464,120467,120469,120472,120475,120478,120481,120483,120486,120488],{"class":30,"line":50},[28,120455,52322],{"class":34},[28,120457,120458],{"class":64},"   LD_LIBRARY_PATH",[28,120460,120446],{"class":64},[28,120462,120463],{"class":64}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[28,120465,120466],{"class":64}," or,",[28,120468,5286],{"class":64},[28,120470,120471],{"class":64}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[28,120473,120474],{"class":64}," to",[28,120476,120477],{"class":64}," \u002Fetc\u002Fld.so.conf",[28,120479,120480],{"class":64}," and",[28,120482,27281],{"class":64},[28,120484,120485],{"class":64}," ldconfig",[28,120487,64655],{"class":64},[28,120489,120490],{"class":64}," root\n",[14,120492,120493],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[18,120495,120497],{"className":118574,"code":120496,"language":118576,"meta":23,"style":23},"which nvcc\n",[25,120498,120499],{"__ignoreMap":23},[28,120500,120501,120504],{"class":30,"line":31},[28,120502,120503],{"class":38},"which",[28,120505,120506],{"class":64}," nvcc\n",[14,120508,120509],{},[1540,120510],{"alt":23,"src":120511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120513,120514],{},"所以我进行以下操作：",[18,120516,120518],{"className":118574,"code":120517,"language":118576,"meta":23,"style":23},"sudo vim ~\u002F.bashrc\n",[25,120519,120520],{"__ignoreMap":23},[28,120521,120522,120524,120526],{"class":30,"line":31},[28,120523,24652],{"class":34},[28,120525,118634],{"class":64},[28,120527,120528],{"class":64}," ~\u002F.bashrc\n",[14,120530,120531],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[18,120533,120535],{"className":118574,"code":120534,"language":118576,"meta":23,"style":23},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[25,120536,120537,120549],{"__ignoreMap":23},[28,120538,120539,120541,120544,120546],{"class":30,"line":31},[28,120540,25113],{"class":207},[28,120542,120543],{"class":211}," PATH",[28,120545,257],{"class":207},[28,120547,120548],{"class":211},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[28,120550,120551,120553,120556,120558],{"class":30,"line":42},[28,120552,25113],{"class":207},[28,120554,120555],{"class":211}," LD_LIBRARY_PATH",[28,120557,257],{"class":207},[28,120559,120560],{"class":211},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120562,120563],{},[1540,120564],{"alt":23,"src":120565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[18,120567,120569],{"className":118574,"code":120568,"language":118576,"meta":23,"style":23},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[25,120570,120571,120576,120582,120587],{"__ignoreMap":23},[28,120572,120573],{"class":30,"line":31},[28,120574,120575],{"class":269},"# 刷新当前终端的环境变量\n",[28,120577,120578,120580],{"class":30,"line":42},[28,120579,100944],{"class":38},[28,120581,120528],{"class":64},[28,120583,120584],{"class":30,"line":50},[28,120585,120586],{"class":269},"# 验证CUDA是否安装成功\n",[28,120588,120589,120592],{"class":30,"line":58},[28,120590,120591],{"class":34},"nvcc",[28,120593,120594],{"class":38}," -V\n",[14,120596,120597],{},"出现下图这种则安装成功。",[14,120599,120600],{},[1540,120601],{"alt":23,"src":120602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[177,120604,120606],{"id":120605},"_354-安装cudnn","3.5.4 安装cuDNN",[161,120608,120609],{},[119,120610,120611],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120613,120614,120615,120620],{},"前往 NVIDIA cuDNN 下载页面：",[448,120616,120619],{"href":120617,"rel":120618},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23940],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120622,120623],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120625,120626],{},[1540,120627],{"alt":23,"src":120628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120630,120631],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120633,120634],{},[1540,120635],{"alt":23,"src":120636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120638,120639],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120641,120642],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120644,120645],{},[359,120646,120647],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120649,120650],{},"下载好的：",[14,120652,120653],{},[1540,120654],{"alt":23,"src":120655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[161,120657,120658],{"start":42},[119,120659,120660],{},"安装cuDNN",[14,120662,120663],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120665,120666],{},[1540,120667],{"alt":23,"src":120668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120670,120671],{},"解压文件，并复制到对应位置完成安装",[18,120673,120675],{"className":118574,"code":120674,"language":118576,"meta":23,"style":23},"# 解压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",[25,120676,120677,120682,120693,120698,120705,120710,120726,120740,120745,120756,120765,120769,120785],{"__ignoreMap":23},[28,120678,120679],{"class":30,"line":31},[28,120680,120681],{"class":269},"# 解压cuDNN文件\n",[28,120683,120684,120687,120690],{"class":30,"line":42},[28,120685,120686],{"class":34},"tar",[28,120688,120689],{"class":38}," -xvf",[28,120691,120692],{"class":64}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[28,120694,120695],{"class":30,"line":50},[28,120696,120697],{"class":269},"# cd进文件夹\n",[28,120699,120700,120702],{"class":30,"line":58},[28,120701,101327],{"class":38},[28,120703,120704],{"class":64}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[28,120706,120707],{"class":30,"line":70},[28,120708,120709],{"class":269},"# 复制cuDNN文件到CUDA目录\n",[28,120711,120712,120714,120716,120719,120721,120724],{"class":30,"line":78},[28,120713,24652],{"class":34},[28,120715,27912],{"class":64},[28,120717,120718],{"class":64}," include\u002Fcudnn",[28,120720,665],{"class":38},[28,120722,120723],{"class":64},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[28,120725,2751],{"class":211},[28,120727,120728,120730,120732,120735,120737],{"class":30,"line":86},[28,120729,24652],{"class":34},[28,120731,27912],{"class":64},[28,120733,120734],{"class":64}," lib\u002Flibcudnn",[28,120736,665],{"class":38},[28,120738,120739],{"class":64},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[28,120741,120742],{"class":30,"line":97},[28,120743,120744],{"class":269},"# 对比一下有没有缺文件\n",[28,120746,120747,120749,120752,120754],{"class":30,"line":108},[28,120748,26812],{"class":34},[28,120750,120751],{"class":64}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[28,120753,665],{"class":38},[28,120755,2751],{"class":211},[28,120757,120758,120760,120763],{"class":30,"line":1407},[28,120759,26812],{"class":34},[28,120761,120762],{"class":64}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[28,120764,119299],{"class":38},[28,120766,120767],{"class":30,"line":1690},[28,120768,120348],{"class":269},[28,120770,120771,120773,120775,120778,120780,120782],{"class":30,"line":1695},[28,120772,24652],{"class":34},[28,120774,24655],{"class":64},[28,120776,120777],{"class":64}," a+r",[28,120779,120751],{"class":64},[28,120781,665],{"class":38},[28,120783,120784],{"class":211},"   \n",[28,120786,120787,120789,120791,120793,120795],{"class":30,"line":1701},[28,120788,24652],{"class":34},[28,120790,24655],{"class":64},[28,120792,120777],{"class":64},[28,120794,120762],{"class":64},[28,120796,119299],{"class":38},[161,120798,120799],{"start":50},[119,120800,120801],{},"检查是否安装成功",[18,120803,120805],{"className":118574,"code":120804,"language":118576,"meta":23,"style":23},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[25,120806,120807,120812],{"__ignoreMap":23},[28,120808,120809],{"class":30,"line":31},[28,120810,120811],{"class":269},"# 检查cuDNN版本命令\n",[28,120813,120814,120817,120820,120822,120824,120827,120830],{"class":30,"line":42},[28,120815,120816],{"class":34},"cat",[28,120818,120819],{"class":64}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[28,120821,25180],{"class":207},[28,120823,30287],{"class":34},[28,120825,120826],{"class":64}," CUDNN_MAJOR",[28,120828,120829],{"class":38}," -A",[28,120831,47774],{"class":38},[14,120833,120834],{},"出现下图这样的就是安装成功了",[14,120836,120837],{},[1540,120838],{"alt":23,"src":120839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[161,120841,120842],{"start":58},[119,120843,120844],{},"软链接(一般不需要)",[18,120846,120848],{"className":118574,"code":120847,"language":118576,"meta":23,"style":23},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[25,120849,120850,120855],{"__ignoreMap":23},[28,120851,120852],{"class":30,"line":31},[28,120853,120854],{"class":269},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[28,120856,120857,120859],{"class":30,"line":42},[28,120858,24652],{"class":34},[28,120860,120861],{"class":64}," ldconfig\n",[14,120863,120864],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[18,120866,120871],{"className":120867,"code":120868,"language":120869,"meta":120870,"style":23},"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",[25,120872,120873,120878,120883,120888,120893,120898,120903],{"__ignoreMap":23},[28,120874,120875],{"class":30,"line":31},[28,120876,120877],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[28,120879,120880],{"class":30,"line":42},[28,120881,120882],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[28,120884,120885],{"class":30,"line":50},[28,120886,120887],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[28,120889,120890],{"class":30,"line":58},[28,120891,120892],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[28,120894,120895],{"class":30,"line":70},[28,120896,120897],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[28,120899,120900],{"class":30,"line":78},[28,120901,120902],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[28,120904,120905],{"class":30,"line":86},[28,120906,120907],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120909,120910],{},"运行下方的命令",[18,120912,120914],{"className":118574,"code":120913,"language":118576,"meta":23,"style":23},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[25,120915,120916,120921,120928,120933],{"__ignoreMap":23},[28,120917,120918],{"class":30,"line":31},[28,120919,120920],{"class":269},"# cd进入CUDA路径\n",[28,120922,120923,120925],{"class":30,"line":42},[28,120924,101327],{"class":38},[28,120926,120927],{"class":64}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[28,120929,120930],{"class":30,"line":50},[28,120931,120932],{"class":269}," # 查看本路径下的需要软链接的文件名\n",[28,120934,120935],{"class":30,"line":58},[28,120936,120937],{"class":34}," ls\n",[14,120939,120940],{},[1540,120941],{"alt":23,"src":120942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120944,120945,120946,18487,120949,18487,120952,120955],{},"如上图，我需要将",[25,120947,120948],{},"libcudnn_xxx_xxxxx.so.8.9.7",[25,120950,120951],{},"libcudnn_xxx_xxxxx.so.8",[25,120953,120954],{},"libcudnn_xxx_xxxxx.so","软链接",[18,120957,120959],{"className":118574,"code":120958,"language":118576,"meta":23,"style":23},"# 创建符号链接。对于每个 .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",[25,120960,120961,120966,120982,120996,121010,121024,121038,121052,121066,121071,121077,121082],{"__ignoreMap":23},[28,120962,120963],{"class":30,"line":31},[28,120964,120965],{"class":269},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[28,120967,120968,120970,120973,120976,120979],{"class":30,"line":42},[28,120969,24652],{"class":34},[28,120971,120972],{"class":64}," ln",[28,120974,120975],{"class":38}," -sf",[28,120977,120978],{"class":64}," libcudnn_cnn_train.so.8.9.7",[28,120980,120981],{"class":64}," libcudnn_cnn_train.so.8\n",[28,120983,120984,120986,120988,120990,120993],{"class":30,"line":50},[28,120985,24652],{"class":34},[28,120987,120972],{"class":64},[28,120989,120975],{"class":38},[28,120991,120992],{"class":64}," libcudnn_adv_infer.so.8.9.7",[28,120994,120995],{"class":64}," libcudnn_adv_infer.so.8\n",[28,120997,120998,121000,121002,121004,121007],{"class":30,"line":58},[28,120999,24652],{"class":34},[28,121001,120972],{"class":64},[28,121003,120975],{"class":38},[28,121005,121006],{"class":64}," libcudnn_adv_train.so.8.9.7",[28,121008,121009],{"class":64}," libcudnn_adv_train.so.8\n",[28,121011,121012,121014,121016,121018,121021],{"class":30,"line":70},[28,121013,24652],{"class":34},[28,121015,120972],{"class":64},[28,121017,120975],{"class":38},[28,121019,121020],{"class":64}," libcudnn_cnn_infer.so.8.9.7",[28,121022,121023],{"class":64}," libcudnn_cnn_infer.so.8\n",[28,121025,121026,121028,121030,121032,121035],{"class":30,"line":78},[28,121027,24652],{"class":34},[28,121029,120972],{"class":64},[28,121031,120975],{"class":38},[28,121033,121034],{"class":64}," libcudnn.so.8.9.7",[28,121036,121037],{"class":64}," libcudnn.so.8\n",[28,121039,121040,121042,121044,121046,121049],{"class":30,"line":86},[28,121041,24652],{"class":34},[28,121043,120972],{"class":64},[28,121045,120975],{"class":38},[28,121047,121048],{"class":64}," libcudnn_ops_infer.so.8.9.7",[28,121050,121051],{"class":64}," libcudnn_ops_infer.so.8\n",[28,121053,121054,121056,121058,121060,121063],{"class":30,"line":97},[28,121055,24652],{"class":34},[28,121057,120972],{"class":64},[28,121059,120975],{"class":38},[28,121061,121062],{"class":64}," libcudnn_ops_train.so.8.9.7",[28,121064,121065],{"class":64}," libcudnn_ops_train.so.8\n",[28,121067,121068],{"class":30,"line":108},[28,121069,121070],{"class":269},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[28,121072,121073,121075],{"class":30,"line":1407},[28,121074,24652],{"class":34},[28,121076,120861],{"class":64},[28,121078,121079],{"class":30,"line":1690},[28,121080,121081],{"class":269},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[28,121083,121084,121086,121089,121092,121094,121097],{"class":30,"line":1695},[28,121085,26812],{"class":34},[28,121087,121088],{"class":38}," -l",[28,121090,121091],{"class":64}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[28,121093,665],{"class":38},[28,121095,121096],{"class":64},".so",[28,121098,119299],{"class":38},[177,121100,121102],{"id":121101},"_355-常见问题","3.5.5 常见问题",[161,121104,121105],{},[119,121106,121107],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[18,121109,121111],{"className":118574,"code":121110,"language":118576,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[25,121112,121113],{"__ignoreMap":23},[28,121114,121115,121117,121119],{"class":30,"line":31},[28,121116,24652],{"class":34},[28,121118,118634],{"class":64},[28,121120,121121],{"class":64}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121123,121124],{},"blacklist-nouveau.conf文件内容如下：",[18,121126,121128],{"className":118574,"code":121127,"language":118576,"meta":23,"style":23},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[25,121129,121130,121138,121145,121157,121167],{"__ignoreMap":23},[28,121131,121132,121135],{"class":30,"line":31},[28,121133,121134],{"class":34},"blacklist",[28,121136,121137],{"class":64}," nouveau\n",[28,121139,121140,121142],{"class":30,"line":42},[28,121141,121134],{"class":34},[28,121143,121144],{"class":64}," lbm-nouveau\n",[28,121146,121147,121149,121152,121155],{"class":30,"line":50},[28,121148,115981],{"class":34},[28,121150,121151],{"class":64}," nouveau",[28,121153,121154],{"class":64}," modeset=",[28,121156,3162],{"class":38},[28,121158,121159,121162,121164],{"class":30,"line":58},[28,121160,121161],{"class":38},"alias",[28,121163,121151],{"class":64},[28,121165,121166],{"class":64}," off\n",[28,121168,121169,121171,121174],{"class":30,"line":70},[28,121170,121161],{"class":38},[28,121172,121173],{"class":64}," lbm-nouveau",[28,121175,121166],{"class":64},[14,121177,121178],{},"接着运行下方命令",[18,121180,121182],{"className":118574,"code":121181,"language":118576,"meta":23,"style":23},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[25,121183,121184,121194,121199],{"__ignoreMap":23},[28,121185,121186,121188,121191],{"class":30,"line":31},[28,121187,24652],{"class":34},[28,121189,121190],{"class":64}," update-initramfs",[28,121192,121193],{"class":38}," -u\n",[28,121195,121196],{"class":30,"line":42},[28,121197,121198],{"class":34},"或者\n",[28,121200,121201,121203,121206],{"class":30,"line":50},[28,121202,24652],{"class":34},[28,121204,121205],{"class":64}," dracut",[28,121207,121208],{"class":38}," --force\n",[14,121210,121211],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[18,121213,121215],{"className":118574,"code":121214,"language":118576,"meta":23,"style":23},"lsmod | grep nouveau\n",[25,121216,121217],{"__ignoreMap":23},[28,121218,121219,121222,121224,121226],{"class":30,"line":31},[28,121220,121221],{"class":34},"lsmod",[28,121223,25180],{"class":207},[28,121225,30287],{"class":34},[28,121227,121137],{"class":64},[161,121229,121230],{"start":42},[119,121231,121232],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[18,121234,121236],{"className":118574,"code":121235,"language":118576,"meta":23,"style":23},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[25,121237,121238],{"__ignoreMap":23},[28,121239,121240,121242,121244],{"class":30,"line":31},[28,121241,24652],{"class":34},[28,121243,118634],{"class":64},[28,121245,121246],{"class":64}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121248,121249],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[18,121251,121253],{"className":118574,"code":121252,"language":118576,"meta":23,"style":23},"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",[25,121254,121255,121263,121271,121279,121286,121294,121304,121312],{"__ignoreMap":23},[28,121256,121257,121260],{"class":30,"line":31},[28,121258,121259],{"class":34},"Section",[28,121261,121262],{"class":64}," \"OutputClass\"\n",[28,121264,121265,121268],{"class":30,"line":42},[28,121266,121267],{"class":34},"   Identifier",[28,121269,121270],{"class":64}," \"nvidia\"\n",[28,121272,121273,121276],{"class":30,"line":50},[28,121274,121275],{"class":34},"   MatchDriver",[28,121277,121278],{"class":64}," \"nvidia-drm\"\n",[28,121280,121281,121284],{"class":30,"line":58},[28,121282,121283],{"class":34},"   Driver",[28,121285,121270],{"class":64},[28,121287,121288,121291],{"class":30,"line":70},[28,121289,121290],{"class":34},"   Option",[28,121292,121293],{"class":64}," \"AllowEmptyInitialConfiguration\"\n",[28,121295,121296,121298,121301],{"class":30,"line":78},[28,121297,121290],{"class":34},[28,121299,121300],{"class":64}," \"PrimaryGPU\"",[28,121302,121303],{"class":64}," \"yes\"\n",[28,121305,121306,121309],{"class":30,"line":86},[28,121307,121308],{"class":34},"   ModulePath",[28,121310,121311],{"class":64}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[28,121313,121314],{"class":30,"line":97},[28,121315,121316],{"class":34},"EndSection\n",[161,121318,121319],{"start":50},[119,121320,121321],{},"安装N卡驱动提示错误",[18,121323,121325],{"className":120867,"code":121324,"language":120869,"meta":120870,"style":23},"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",[25,121326,121327],{"__ignoreMap":23},[28,121328,121329],{"class":30,"line":31},[28,121330,121324],{},[161,121332,121333],{},[119,121334,121335],{},"检查当前运行的内核版本：",[14,121337,121338],{},"运行以下命令以查看你当前正在使用的内核版本：",[18,121340,121342],{"className":117347,"code":121341,"language":117349,"meta":23,"style":23},"uname -r\n",[25,121343,121344],{"__ignoreMap":23},[28,121345,121346,121348],{"class":30,"line":31},[28,121347,70255],{"class":34},[28,121349,121350],{"class":38}," -r\n",[161,121352,121353],{"start":42},[119,121354,121355],{},"安装内核开发文件：",[14,121357,121358,121359,121362],{},"确保你已经安装了与当前内核版本相匹配的 ",[25,121360,121361],{},"kernel-devel"," 包。运行以下命令来安装：",[18,121364,121366],{"className":117347,"code":121365,"language":117349,"meta":23,"style":23},"sudo dnf install kernel-devel-$(uname -r)\n",[25,121367,121368],{"__ignoreMap":23},[28,121369,121370,121372,121374,121376,121379,121381,121383,121385],{"class":30,"line":31},[28,121371,24652],{"class":34},[28,121373,26366],{"class":64},[28,121375,23909],{"class":64},[28,121377,121378],{"class":64}," kernel-devel-",[28,121380,25170],{"class":211},[28,121382,70255],{"class":34},[28,121384,119690],{"class":38},[28,121386,218],{"class":211},[14,121388,121389],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[161,121391,121392],{"start":50},[119,121393,121394],{},"安装内核源代码（如果需要）：",[14,121396,121397],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[18,121399,121401],{"className":117347,"code":121400,"language":117349,"meta":23,"style":23},"sudo dnf install kernel-headers kernel-source\n",[25,121402,121403],{"__ignoreMap":23},[28,121404,121405,121407,121409,121411,121414],{"class":30,"line":31},[28,121406,24652],{"class":34},[28,121408,26366],{"class":64},[28,121410,23909],{"class":64},[28,121412,121413],{"class":64}," kernel-headers",[28,121415,121416],{"class":64}," kernel-source\n",[161,121418,121419],{"start":58},[119,121420,121421],{},"检查安装：",[14,121423,121424,121425,121428],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[25,121426,121427],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[18,121430,121432],{"className":117347,"code":121431,"language":117349,"meta":23,"style":23},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[25,121433,121434],{"__ignoreMap":23},[28,121435,121436,121438],{"class":30,"line":31},[28,121437,26812],{"class":34},[28,121439,121440],{"class":64}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121442,121443,121444,121447],{},"如果仍然遇到问题，可以通过 ",[25,121445,121446],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[126,121449,121450],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":23,"searchDepth":42,"depth":42,"links":121452},[121453,121457,121467,121471,121472],{"id":118550,"depth":42,"text":118551,"children":121454},[121455,121456],{"id":118560,"depth":50,"text":118561},{"id":118570,"depth":50,"text":118571},{"id":118770,"depth":42,"text":118771,"children":121458},[121459,121460,121461,121462,121463,121464,121465,121466],{"id":118774,"depth":50,"text":118775},{"id":118844,"depth":50,"text":118845},{"id":118933,"depth":50,"text":118934},{"id":119178,"depth":50,"text":119179},{"id":119248,"depth":50,"text":119249},{"id":119315,"depth":50,"text":119316},{"id":119350,"depth":50,"text":119351},{"id":119405,"depth":50,"text":119406},{"id":119456,"depth":42,"text":119457,"children":121468},[121469,121470],{"id":119460,"depth":50,"text":119461},{"id":119540,"depth":50,"text":119541},{"id":119726,"depth":42,"text":119727},{"id":119899,"depth":42,"text":119900,"children":121473},[121474,121475,121476,121477,121478],{"id":119903,"depth":50,"text":119904},{"id":119944,"depth":50,"text":119945},{"id":120231,"depth":50,"text":120232},{"id":120605,"depth":50,"text":120606},{"id":121101,"depth":50,"text":121102},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118542,"description":131},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121485,"title":121486,"body":121487,"description":131,"extension":132,"meta":121827,"navigation":134,"path":121828,"seo":121829,"stem":121830,"__hash__":121831},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121488,"toc":121825},[121489,121492,121497,121500,121746,121751,121754,121790,121793,121822],[10,121490,121486],{"id":121491},"_4-命令教程长期积累",[161,121493,121494],{},[119,121495,121496],{},"大多数命令",[14,121498,121499],{},"常用 Linux 命令速查：",[18,121501,121503],{"className":117347,"code":121502,"language":117349,"meta":23,"style":23},"# 文件与目录\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",[25,121504,121505,121510,121517,121524,121532,121539,121546,121554,121562,121569,121576,121584,121588,121593,121600,121608,121615,121619,121624,121631,121639,121647,121655,121663,121667,121672,121680,121687,121694,121702,121710,121714,121719,121728,121737],{"__ignoreMap":23},[28,121506,121507],{"class":30,"line":31},[28,121508,121509],{"class":269},"# 文件与目录\n",[28,121511,121512,121514],{"class":30,"line":42},[28,121513,26812],{"class":34},[28,121515,121516],{"class":269},"        # 列出目录内容\n",[28,121518,121519,121521],{"class":30,"line":50},[28,121520,101327],{"class":38},[28,121522,121523],{"class":269},"        # 切换目录\n",[28,121525,121526,121529],{"class":30,"line":58},[28,121527,121528],{"class":38},"pwd",[28,121530,121531],{"class":269},"       # 显示当前路径\n",[28,121533,121534,121536],{"class":30,"line":70},[28,121535,101317],{"class":34},[28,121537,121538],{"class":269},"     # 创建目录\n",[28,121540,121541,121543],{"class":30,"line":78},[28,121542,25387],{"class":34},[28,121544,121545],{"class":269},"        # 删除文件或目录\n",[28,121547,121548,121551],{"class":30,"line":86},[28,121549,121550],{"class":34},"cp",[28,121552,121553],{"class":269},"        # 复制文件或目录\n",[28,121555,121556,121559],{"class":30,"line":97},[28,121557,121558],{"class":34},"mv",[28,121560,121561],{"class":269},"        # 移动\u002F重命名文件或目录\n",[28,121563,121564,121566],{"class":30,"line":108},[28,121565,101334],{"class":34},[28,121567,121568],{"class":269},"     # 创建空文件\n",[28,121570,121571,121573],{"class":30,"line":1407},[28,121572,120816],{"class":34},[28,121574,121575],{"class":269},"       # 查看文件内容\n",[28,121577,121578,121581],{"class":30,"line":1690},[28,121579,121580],{"class":34},"head\u002Ftail",[28,121582,121583],{"class":269}," # 查看文件头部\u002F尾部\n",[28,121585,121586],{"class":30,"line":1695},[28,121587,2477],{"emptyLinePlaceholder":134},[28,121589,121590],{"class":30,"line":1701},[28,121591,121592],{"class":269},"# 权限管理\n",[28,121594,121595,121597],{"class":30,"line":1706},[28,121596,24687],{"class":34},[28,121598,121599],{"class":269},"     # 修改文件权限\n",[28,121601,121602,121605],{"class":30,"line":1720},[28,121603,121604],{"class":34},"chown",[28,121606,121607],{"class":269},"     # 修改文件所有者\n",[28,121609,121610,121612],{"class":30,"line":1725},[28,121611,24652],{"class":34},[28,121613,121614],{"class":269},"      # 以管理员身份执行\n",[28,121616,121617],{"class":30,"line":1731},[28,121618,2477],{"emptyLinePlaceholder":134},[28,121620,121621],{"class":30,"line":1752},[28,121622,121623],{"class":269},"# 系统信息\n",[28,121625,121626,121628],{"class":30,"line":1757},[28,121627,70255],{"class":34},[28,121629,121630],{"class":269},"     # 系统信息\n",[28,121632,121633,121636],{"class":30,"line":1771},[28,121634,121635],{"class":34},"df",[28,121637,121638],{"class":269},"        # 磁盘使用情况\n",[28,121640,121641,121644],{"class":30,"line":1776},[28,121642,121643],{"class":34},"free",[28,121645,121646],{"class":269},"      # 内存使用情况\n",[28,121648,121649,121652],{"class":30,"line":1805},[28,121650,121651],{"class":34},"top\u002Fhtop",[28,121653,121654],{"class":269},"  # 进程监控\n",[28,121656,121657,121660],{"class":30,"line":1810},[28,121658,121659],{"class":34},"ps",[28,121661,121662],{"class":269},"        # 查看进程\n",[28,121664,121665],{"class":30,"line":1827},[28,121666,2477],{"emptyLinePlaceholder":134},[28,121668,121669],{"class":30,"line":1832},[28,121670,121671],{"class":269},"# 网络\n",[28,121673,121674,121677],{"class":30,"line":1837},[28,121675,121676],{"class":34},"ping",[28,121678,121679],{"class":269},"      # 测试网络连通性\n",[28,121681,121682,121684],{"class":30,"line":1842},[28,121683,26900],{"class":34},[28,121685,121686],{"class":269},"      # 发送 HTTP 请求\n",[28,121688,121689,121691],{"class":30,"line":1856},[28,121690,120340],{"class":34},[28,121692,121693],{"class":269},"      # 下载文件\n",[28,121695,121696,121699],{"class":30,"line":1861},[28,121697,121698],{"class":34},"ssh",[28,121700,121701],{"class":269},"       # 远程登录\n",[28,121703,121704,121707],{"class":30,"line":2654},[28,121705,121706],{"class":34},"scp",[28,121708,121709],{"class":269},"       # 远程文件传输\n",[28,121711,121712],{"class":30,"line":2668},[28,121713,2477],{"emptyLinePlaceholder":134},[28,121715,121716],{"class":30,"line":2676},[28,121717,121718],{"class":269},"# 包管理（Debian\u002FUbuntu）\n",[28,121720,121721,121723,121725],{"class":30,"line":2681},[28,121722,117419],{"class":34},[28,121724,117398],{"class":64},[28,121726,121727],{"class":269},"   # 更新软件源\n",[28,121729,121730,121732,121734],{"class":30,"line":2687},[28,121731,117419],{"class":34},[28,121733,23909],{"class":64},[28,121735,121736],{"class":269},"  # 安装软件包\n",[28,121738,121739,121741,121743],{"class":30,"line":2693},[28,121740,117419],{"class":34},[28,121742,26130],{"class":64},[28,121744,121745],{"class":269},"   # 卸载软件包\n",[161,121747,121748],{"start":42},[119,121749,121750],{},"KDE Dolphin 以root打开",[14,121752,121753],{},"kde5",[18,121755,121757],{"className":117347,"code":121756,"language":117349,"meta":23,"style":23},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[25,121758,121759],{"__ignoreMap":23},[28,121760,121761,121764,121767,121770,121772,121774,121777,121780,121782,121785,121787],{"class":30,"line":31},[28,121762,121763],{"class":34},"pkexec",[28,121765,121766],{"class":64}," env",[28,121768,121769],{"class":64}," DISPLAY=",[28,121771,28194],{"class":211},[28,121773,28252],{"class":64},[28,121775,121776],{"class":211},"$XAUTHORITY ",[28,121778,121779],{"class":64},"KDE_SESSION_VERSION=",[28,121781,529],{"class":38},[28,121783,121784],{"class":64}," KDE_FULL_SESSION=",[28,121786,1440],{"class":38},[28,121788,121789],{"class":64}," dolphin\n",[14,121791,121792],{},"kde6",[18,121794,121796],{"className":117347,"code":121795,"language":117349,"meta":23,"style":23},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[25,121797,121798],{"__ignoreMap":23},[28,121799,121800,121802,121804,121806,121808,121810,121812,121814,121816,121818,121820],{"class":30,"line":31},[28,121801,121763],{"class":34},[28,121803,121766],{"class":64},[28,121805,121769],{"class":64},[28,121807,28194],{"class":211},[28,121809,28252],{"class":64},[28,121811,121776],{"class":211},[28,121813,121779],{"class":64},[28,121815,554],{"class":38},[28,121817,121784],{"class":64},[28,121819,1440],{"class":38},[28,121821,121789],{"class":64},[126,121823,121824],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":23,"searchDepth":42,"depth":42,"links":121826},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121486,"description":131},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121833,"title":121834,"body":121835,"description":131,"extension":132,"meta":121849,"navigation":134,"path":121850,"seo":121851,"stem":121852,"__hash__":121853},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121836,"toc":121847},[121837,121840],[10,121838,121834],{"id":121839},"_5-各种环境配置",[14,121841,121842],{},[448,121843,121846],{"href":121844,"rel":121845},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23940],"电控组环境搭建大全",{"title":23,"searchDepth":42,"depth":42,"links":121848},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121834,"description":131},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121855,"title":121856,"body":121857,"description":131,"extension":132,"meta":122205,"navigation":134,"path":122206,"seo":122207,"stem":122208,"__hash__":122209},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121858,"toc":122197},[121859,121862,121866,121870,121874,121879,121886,121890,122183,122187,122194],[10,121860,121856],{"id":121861},"_6-拓展功能",[149,121863,121865],{"id":121864},"_61-wine","6.1 Wine",[149,121867,121869],{"id":121868},"_62-android","6.2 Android",[177,121871,121873],{"id":121872},"_621-i卡a卡","6.2.1 I卡、A卡",[161,121875,121876],{},[119,121877,121878],{},"Wayland-Waydroid(体验超级好)",[14,121880,121881,121882],{},"Waydroid 官网与安装指南：",[448,121883,121884],{"href":121884,"rel":121885},"https:\u002F\u002Fwaydro.id\u002F",[23940],[177,121887,121889],{"id":121888},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[161,121891,121892],{},[119,121893,121894,121895,121897,121898,121902,121904,121907,121912,122109],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53767,121896],{},"BlissOS 官网下载：",[448,121899,121900],{"href":121900,"rel":121901},"https:\u002F\u002Fblissos.org\u002F",[23940],[53767,121903],{},[1540,121905],{"alt":23,"src":121906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[161,121908,121909],{"start":50},[119,121910,121911],{},"比较推荐的配置",[18,121913,121915],{"className":117347,"code":121914,"language":117349,"meta":23,"style":23},"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",[25,121916,121917,121924,121934,121944,121954,121966,121976,121983,121993,122002,122011,122021,122031,122040,122050,122060,122072,122082,122091,122101],{"__ignoreMap":23},[28,121918,121919,121922],{"class":30,"line":31},[28,121920,121921],{"class":34},"qemu-system-x86_64",[28,121923,39],{"class":38},[28,121925,121926,121929,121932],{"class":30,"line":42},[28,121927,121928],{"class":38},"        -M",[28,121930,121931],{"class":64}," q35,vmport=off",[28,121933,39],{"class":38},[28,121935,121936,121939,121942],{"class":30,"line":50},[28,121937,121938],{"class":38},"        -accel",[28,121940,121941],{"class":64}," kvm",[28,121943,39],{"class":38},[28,121945,121946,121949,121952],{"class":30,"line":58},[28,121947,121948],{"class":38},"        -cpu",[28,121950,121951],{"class":64}," qemu64,+sse3,+sse4.2",[28,121953,39],{"class":38},[28,121955,121956,121959,121962,121964],{"class":30,"line":70},[28,121957,121958],{"class":38},"        -smp",[28,121960,121961],{"class":64}," 8,cores=",[28,121963,503],{"class":38},[28,121965,39],{"class":38},[28,121967,121968,121971,121974],{"class":30,"line":78},[28,121969,121970],{"class":38},"        -m",[28,121972,121973],{"class":64}," 6G",[28,121975,39],{"class":38},[28,121977,121978,121981],{"class":30,"line":86},[28,121979,121980],{"class":38},"        -usb",[28,121982,39],{"class":38},[28,121984,121985,121988,121991],{"class":30,"line":97},[28,121986,121987],{"class":38},"        -device",[28,121989,121990],{"class":64}," virtio-tablet",[28,121992,39],{"class":38},[28,121994,121995,121997,122000],{"class":30,"line":108},[28,121996,121987],{"class":38},[28,121998,121999],{"class":64}," virtio-keyboard",[28,122001,39],{"class":38},[28,122003,122004,122006,122009],{"class":30,"line":1407},[28,122005,121987],{"class":38},[28,122007,122008],{"class":64}," usb-tablet",[28,122010,39],{"class":38},[28,122012,122013,122016,122019],{"class":30,"line":1690},[28,122014,122015],{"class":38},"        -bios",[28,122017,122018],{"class":64}," OVMF-pure-efi64.fd",[28,122020,39],{"class":38},[28,122022,122023,122026,122029],{"class":30,"line":1695},[28,122024,122025],{"class":38},"        -net",[28,122027,122028],{"class":64}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[28,122030,39],{"class":38},[28,122032,122033,122035,122038],{"class":30,"line":1701},[28,122034,122025],{"class":38},[28,122036,122037],{"class":64}," nic,model=virtio",[28,122039,39],{"class":38},[28,122041,122042,122045,122048],{"class":30,"line":1706},[28,122043,122044],{"class":38},"        -audio",[28,122046,122047],{"class":64}," sdl,model=hda",[28,122049,39],{"class":38},[28,122051,122052,122055,122058],{"class":30,"line":1720},[28,122053,122054],{"class":38},"        -display",[28,122056,122057],{"class":64}," sdl,gl=on,show-cursor=on",[28,122059,39],{"class":38},[28,122061,122062,122064,122067,122070],{"class":30,"line":1725},[28,122063,121987],{"class":38},[28,122065,122066],{"class":64}," virtio-vga-gl,xres=1920,yres=",[28,122068,122069],{"class":38},"1080",[28,122071,39],{"class":38},[28,122073,122074,122077,122080],{"class":30,"line":1731},[28,122075,122076],{"class":38},"        -drive",[28,122078,122079],{"class":64}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[28,122081,39],{"class":38},[28,122083,122084,122086,122089],{"class":30,"line":1752},[28,122085,122076],{"class":38},[28,122087,122088],{"class":64}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[28,122090,39],{"class":38},[28,122092,122093,122096,122099],{"class":30,"line":1757},[28,122094,122095],{"class":38},"        -monitor",[28,122097,122098],{"class":64}," stdio",[28,122100,39],{"class":38},[28,122102,122103,122106],{"class":30,"line":1771},[28,122104,122105],{"class":38},"        -serial",[28,122107,122108],{"class":64}," none\n",[161,122110,122111],{"start":70},[119,122112,122113,122114],{},"常用操作：",[161,122115,122116,122119,122175],{},[119,122117,122118],{},"全屏：Ctrl+Alt+F",[119,122120,122121,122122,122127],{},"adb调试",[161,122123,122124],{},[119,122125,122126],{},"使Linux与Android用ADB连接。",[18,122128,122130],{"className":117347,"code":122129,"language":117349,"meta":23,"style":23},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[25,122131,122132,122137,122148,122153,122165,122170],{"__ignoreMap":23},[28,122133,122134],{"class":30,"line":31},[28,122135,122136],{"class":269},"# 连接安卓\n",[28,122138,122139,122142,122145],{"class":30,"line":42},[28,122140,122141],{"class":34},"adb",[28,122143,122144],{"class":64}," connect",[28,122146,122147],{"class":38}," 127.0.0.1\n",[28,122149,122150],{"class":30,"line":50},[28,122151,122152],{"class":269},"# 打开shell\n",[28,122154,122155,122157,122159,122162],{"class":30,"line":58},[28,122156,122141],{"class":34},[28,122158,26934],{"class":38},[28,122160,122161],{"class":64}," 127.0.0.1:5555",[28,122163,122164],{"class":64}," shell\n",[28,122166,122167],{"class":30,"line":70},[28,122168,122169],{"class":269},"# 使用root权限\n",[28,122171,122172],{"class":30,"line":78},[28,122173,122174],{"class":34},"su\n",[119,122176,122177,122178],{},"中文输入法",[161,122179,122180],{},[119,122181,122182],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[149,122184,122186],{"id":122185},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122188,122189,122190],{},"rEFInd 官网与文档：",[448,122191,122192],{"href":122192,"rel":122193},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23940],[126,122195,122196],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":23,"searchDepth":42,"depth":42,"links":122198},[122199,122200,122204],{"id":121864,"depth":42,"text":121865},{"id":121868,"depth":42,"text":121869,"children":122201},[122202,122203],{"id":121872,"depth":50,"text":121873},{"id":121888,"depth":50,"text":121889},{"id":122185,"depth":42,"text":122186},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121856,"description":131},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122211,"title":122212,"body":122213,"description":131,"extension":132,"meta":125512,"navigation":134,"path":125513,"seo":125514,"stem":125515,"__hash__":125516},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122214,"toc":125486},[122215,122218,122222,122225,122232,122482,122485,122557,122560,122564,122568,122573,122576,122579,122582,122587,122590,122593,122596,122601,122604,122609,122612,122615,122620,122623,122628,122631,122635,122639,122642,122647,122650,122664,122667,122670,122679,122682,122691,122694,122697,122706,122709,122718,122721,122724,122733,122736,122739,122754,122757,122760,122769,122774,122777,122780,122789,122792,122801,122804,122813,122816,122825,122830,122833,122841,122846,122849,122858,122861,122869,122874,122877,122886,122889,122892,122896,122899,122904,122907,122912,122926,122931,122936,122947,122952,122958,122963,122978,122983,122986,122991,122996,123001,123009,123014,123021,123026,123037,123042,123045,123049,123052,123055,123060,123063,123082,123087,123090,123099,123104,123107,123129,123132,123162,123165,123170,123173,123187,123192,123211,123214,123217,123222,123234,123239,123244,123247,123252,123255,123270,123273,123278,123283,123287,123292,123332,123335,123339,123345,123351,123356,123359,123366,123371,123378,123381,123384,123391,123405,123408,123468,123471,123485,123497,123500,123503,123506,123570,123573,123576,123579,123599,123602,123607,123614,123618,123621,123625,123630,123635,123639,123642,123645,123687,123692,123695,123717,123732,123734,123739,123751,123811,123813,123815,123869,123871,123873,123879,123884,123887,123892,123896,123899,123961,123966,123969,123971,123975,123987,124069,124071,124073,124127,124133,124135,124139,124144,124146,124151,124155,124175,124210,124214,124217,124220,124223,124230,124233,124245,124248,124263,124266,124285,124333,124336,124353,124356,124370,124375,124378,124387,124402,124414,124452,124457,124466,124471,124476,124502,124511,124515,124519,124524,124527,124531,124535,124540,124543,124548,124551,124556,124559,124564,124567,124571,124576,124579,124584,124587,124591,124596,124599,124604,124607,124612,124615,124619,124624,124627,124632,124635,124640,124643,124647,124652,124655,124660,124663,124668,124671,124676,124679,124684,124687,124692,124695,124699,124704,124707,124712,124719,124723,124728,124731,124736,124739,124743,124748,124751,124754,124757,124760,124763,124767,124770,124780,124785,124790,124812,124817,124822,124829,124833,124838,124841,124844,124849,124852,124855,124858,124861,124864,124867,124870,124873,124876,124879,124882,124885,124890,124895,124900,124905,124910,124915,124920,124923,124927,124930,124934,124939,124944,124949,124954,124958,124964,124972,124977,124980,124985,125000,125003,125008,125042,125057,125060,125115,125141,125153,125156,125165,125168,125183,125188,125191,125197,125202,125205,125210,125213,125218,125223,125230,125233,125248,125251,125286,125291,125299,125337,125340,125343,125348,125351,125356,125367,125401,125406,125409,125418,125423,125429,125432,125437,125446,125451,125454,125457,125462,125470,125473,125478,125483],[10,122216,122212],{"id":122217},"_7-其他操作",[149,122219,122221],{"id":122220},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122223,122224],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122226,122227,122228,122231],{},"进入工控机的硬盘目录，进入",[25,122229,122230],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[18,122233,122237],{"className":122234,"code":122235,"language":122236,"meta":23,"style":23},"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",[25,122238,122239,122247,122258,122265,122272,122284,122291,122303,122314,122325,122332,122339,122346,122358,122370,122377,122389,122401,122408,122420,122432,122444,122455,122462,122473],{"__ignoreMap":23},[28,122240,122241,122244],{"class":30,"line":31},[28,122242,122243],{"class":51351},"network",[28,122245,122246],{"class":211},": \n",[28,122248,122249,122252,122254,122256],{"class":30,"line":42},[28,122250,122251],{"class":51351},"  version",[28,122253,51488],{"class":211},[28,122255,288],{"class":38},[28,122257,2751],{"class":211},[28,122259,122260,122263],{"class":30,"line":50},[28,122261,122262],{"class":51351},"  wifis",[28,122264,122246],{"class":211},[28,122266,122267,122270],{"class":30,"line":58},[28,122268,122269],{"class":51351},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[28,122271,122246],{"class":211},[28,122273,122274,122277,122279,122282],{"class":30,"line":70},[28,122275,122276],{"class":51351},"      renderer",[28,122278,51488],{"class":211},[28,122280,122281],{"class":64},"NetworkManager",[28,122283,2751],{"class":211},[28,122285,122286,122289],{"class":30,"line":78},[28,122287,122288],{"class":51351},"      match",[28,122290,122246],{"class":211},[28,122292,122293,122296,122298,122301],{"class":30,"line":86},[28,122294,122295],{"class":51351},"        name",[28,122297,51488],{"class":211},[28,122299,122300],{"class":64},"\"wlan0\"",[28,122302,2751],{"class":211},[28,122304,122305,122308,122310,122312],{"class":30,"line":97},[28,122306,122307],{"class":51351},"      dhcp4",[28,122309,51488],{"class":211},[28,122311,1440],{"class":38},[28,122313,2751],{"class":211},[28,122315,122316,122319,122321,122323],{"class":30,"line":108},[28,122317,122318],{"class":51351},"      dhcp6",[28,122320,51488],{"class":211},[28,122322,1440],{"class":38},[28,122324,2751],{"class":211},[28,122326,122327,122330],{"class":30,"line":1407},[28,122328,122329],{"class":51351},"      access-points",[28,122331,122246],{"class":211},[28,122333,122334,122337],{"class":30,"line":1690},[28,122335,122336],{"class":64},"        \"EMIS_Vinci_Robocon_5G\"",[28,122338,122246],{"class":211},[28,122340,122341,122344],{"class":30,"line":1695},[28,122342,122343],{"class":51351},"          auth",[28,122345,122246],{"class":211},[28,122347,122348,122351,122353,122356],{"class":30,"line":1701},[28,122349,122350],{"class":51351},"            key-management",[28,122352,51488],{"class":211},[28,122354,122355],{"class":64},"\"psk\"",[28,122357,2751],{"class":211},[28,122359,122360,122363,122365,122368],{"class":30,"line":1706},[28,122361,122362],{"class":51351},"            password",[28,122364,51488],{"class":211},[28,122366,122367],{"class":64},"\"vinci666\"",[28,122369,2751],{"class":211},[28,122371,122372,122375],{"class":30,"line":1720},[28,122373,122374],{"class":51351},"          networkmanager",[28,122376,122246],{"class":211},[28,122378,122379,122382,122384,122387],{"class":30,"line":1725},[28,122380,122381],{"class":51351},"            uuid",[28,122383,51488],{"class":211},[28,122385,122386],{"class":64},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[28,122388,2751],{"class":211},[28,122390,122391,122394,122396,122399],{"class":30,"line":1731},[28,122392,122393],{"class":51351},"            name",[28,122395,51488],{"class":211},[28,122397,122398],{"class":64},"\"EMIS_Vinci_Robocon_5G\"",[28,122400,2751],{"class":211},[28,122402,122403,122406],{"class":30,"line":1752},[28,122404,122405],{"class":51351},"            passthrough",[28,122407,122246],{"class":211},[28,122409,122410,122413,122415,122418],{"class":30,"line":1757},[28,122411,122412],{"class":51351},"              wifi-security.auth-alg",[28,122414,51488],{"class":211},[28,122416,122417],{"class":64},"\"open\"",[28,122419,2751],{"class":211},[28,122421,122422,122425,122427,122430],{"class":30,"line":1771},[28,122423,122424],{"class":51351},"              ipv6.addr-gen-mode",[28,122426,51488],{"class":211},[28,122428,122429],{"class":64},"\"default\"",[28,122431,2751],{"class":211},[28,122433,122434,122437,122439,122442],{"class":30,"line":1776},[28,122435,122436],{"class":51351},"              ipv6.ip6-privacy",[28,122438,51488],{"class":211},[28,122440,122441],{"class":64},"\"-1\"",[28,122443,2751],{"class":211},[28,122445,122446,122449,122451,122453],{"class":30,"line":1805},[28,122447,122448],{"class":51351},"              proxy._",[28,122450,51488],{"class":211},[28,122452,7729],{"class":64},[28,122454,2751],{"class":211},[28,122456,122457,122460],{"class":30,"line":1810},[28,122458,122459],{"class":51351},"      networkmanager",[28,122461,122246],{"class":211},[28,122463,122464,122467,122469,122471],{"class":30,"line":1827},[28,122465,122466],{"class":51351},"        uuid",[28,122468,51488],{"class":211},[28,122470,122386],{"class":64},[28,122472,2751],{"class":211},[28,122474,122475,122477,122479],{"class":30,"line":1832},[28,122476,122295],{"class":51351},[28,122478,51488],{"class":211},[28,122480,122481],{"class":64},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122483,122484],{},"将其改为新wifi的名和密码：",[18,122486,122488],{"className":122234,"code":122487,"language":122236,"meta":23,"style":23},"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",[25,122489,122490,122496,122505,122511,122518,122527,122535,122541,122547],{"__ignoreMap":23},[28,122491,122492,122494],{"class":30,"line":31},[28,122493,122243],{"class":51351},[28,122495,3816],{"class":211},[28,122497,122498,122500,122502],{"class":30,"line":42},[28,122499,122251],{"class":51351},[28,122501,51488],{"class":211},[28,122503,122504],{"class":38},"2\n",[28,122506,122507,122509],{"class":30,"line":50},[28,122508,122262],{"class":51351},[28,122510,3816],{"class":211},[28,122512,122513,122516],{"class":30,"line":58},[28,122514,122515],{"class":51351},"    wlan0",[28,122517,3816],{"class":211},[28,122519,122520,122522,122524],{"class":30,"line":70},[28,122521,122307],{"class":51351},[28,122523,51488],{"class":211},[28,122525,122526],{"class":38},"true\n",[28,122528,122529,122531,122533],{"class":30,"line":78},[28,122530,122318],{"class":51351},[28,122532,51488],{"class":211},[28,122534,122526],{"class":38},[28,122536,122537,122539],{"class":30,"line":86},[28,122538,122329],{"class":51351},[28,122540,3816],{"class":211},[28,122542,122543,122545],{"class":30,"line":97},[28,122544,122336],{"class":64},[28,122546,3816],{"class":211},[28,122548,122549,122552,122554],{"class":30,"line":108},[28,122550,122551],{"class":51351},"          password",[28,122553,51488],{"class":211},[28,122555,122556],{"class":64},"\"vinci666\"\n",[14,122558,122559],{},"工控机开机即可连上网。",[149,122561,122563],{"id":122562},"_72-ssh远程开发","7.2 SSH远程开发",[177,122565,122567],{"id":122566},"_721-环境准备","7.2.1 环境准备",[14,122569,122570],{},[359,122571,122572],{},"1.硬件准备",[14,122574,122575],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122577,122578],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122580,122581],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122583,122584],{},[359,122585,122586],{},"2.设置固定IP",[14,122588,122589],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122591,122592],{},"1.进入设置界面",[14,122594,122595],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122597,122598],{},[1540,122599],{"alt":23,"src":122600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122602,122603],{},"2.配置所连接的网络",[14,122605,122606],{},[1540,122607],{"alt":23,"src":122608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122610,122611],{},"3.设置固定IP",[14,122613,122614],{},"查看当前IP地址。",[14,122616,122617],{},[1540,122618],{"alt":23,"src":122619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122621,122622],{},"设置固定IP。",[14,122624,122625],{},[1540,122626],{"alt":23,"src":122627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122629,122630],{},"至此，IP配置完毕。",[177,122632,122634],{"id":122633},"_722-环境搭建","7.2.2 环境搭建",[14,122636,122637],{},[359,122638,25804],{},[14,122640,122641],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122643,122644],{},[359,122645,122646],{},"实现",[14,122648,122649],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[161,122651,122652,122655,122658,122661],{},[119,122653,122654],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[119,122656,122657],{},"远程主机启动SSH服务；",[119,122659,122660],{},"本地主机登陆远程主机；",[119,122662,122663],{},"实现数据传输。",[14,122665,122666],{},"1.安装SSH客户端与服务端",[14,122668,122669],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[18,122671,122673],{"className":120867,"code":122672,"language":120869,"meta":120870,"style":23}," sudo apt install openssh-server\n",[25,122674,122675],{"__ignoreMap":23},[28,122676,122677],{"class":30,"line":31},[28,122678,122672],{},[14,122680,122681],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[18,122683,122685],{"className":120867,"code":122684,"language":120869,"meta":120870,"style":23},"sudo apt install openssh-client\n",[25,122686,122687],{"__ignoreMap":23},[28,122688,122689],{"class":30,"line":31},[28,122690,122684],{},[14,122692,122693],{},"2.远程主机启动SSH服务",[14,122695,122696],{},"远程主机启动 ssh 服务命令如下：",[18,122698,122700],{"className":120867,"code":122699,"language":120869,"meta":120870,"style":23},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[25,122701,122702],{"__ignoreMap":23},[28,122703,122704],{"class":30,"line":31},[28,122705,122699],{},[14,122707,122708],{},"启动后可使用如下命令查看服务是否正常运行：",[18,122710,122712],{"className":120867,"code":122711,"language":120869,"meta":120870,"style":23},"ps -e | grep ssh\n",[25,122713,122714],{"__ignoreMap":23},[28,122715,122716],{"class":30,"line":31},[28,122717,122711],{},[14,122719,122720],{},"如果启动成功，会包含 sshd 程序。",[14,122722,122723],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[18,122725,122727],{"className":120867,"code":122726,"language":120869,"meta":120870,"style":23},"sudo systemctl enable ssh\n",[25,122728,122729],{"__ignoreMap":23},[28,122730,122731],{"class":30,"line":31},[28,122732,122726],{},[14,122734,122735],{},"3.本地远程登录",[14,122737,122738],{},"登录远程主机可以调用如下命令:",[18,122740,122742],{"className":117347,"code":122741,"language":117349,"meta":23,"style":23},"ssh -X 用户名@ip地址\n",[25,122743,122744],{"__ignoreMap":23},[28,122745,122746,122748,122751],{"class":30,"line":31},[28,122747,121698],{"class":34},[28,122749,122750],{"class":38}," -X",[28,122752,122753],{"class":64}," 用户名@ip地址\n",[14,122755,122756],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122758,122759],{},"如果退出，可以调用exit命令：",[18,122761,122763],{"className":120867,"code":122762,"language":120869,"meta":120870,"style":23},"exit\n",[25,122764,122765],{"__ignoreMap":23},[28,122766,122767],{"class":30,"line":31},[28,122768,122762],{},[14,122770,122771],{},[359,122772,122773],{},"4.实现数据传输",[14,122775,122776],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122778,122779],{},"上传文件指令格式如下：",[18,122781,122783],{"className":120867,"code":122782,"language":120869,"meta":120870,"style":23},"scp 本地文件路径 账号@ip:路径\n",[25,122784,122785],{"__ignoreMap":23},[28,122786,122787],{"class":30,"line":31},[28,122788,122782],{},[14,122790,122791],{},"上传文件夹指令格式如下：",[18,122793,122795],{"className":120867,"code":122794,"language":120869,"meta":120870,"style":23},"scp -r 本地文件夹路径 账号@ip:路径\n",[25,122796,122797],{"__ignoreMap":23},[28,122798,122799],{"class":30,"line":31},[28,122800,122794],{},[14,122802,122803],{},"下载文件指令格式如下：",[18,122805,122807],{"className":120867,"code":122806,"language":120869,"meta":120870,"style":23},"scp 账号@ip:路径 本地文件夹路径\n",[25,122808,122809],{"__ignoreMap":23},[28,122810,122811],{"class":30,"line":31},[28,122812,122806],{},[14,122814,122815],{},"下载文件夹指令格式如下：",[18,122817,122819],{"className":120867,"code":122818,"language":120869,"meta":120870,"style":23},"scp -r 账号@ip:路径 本地文件夹路径\n",[25,122820,122821],{"__ignoreMap":23},[28,122822,122823],{"class":30,"line":31},[28,122824,122818],{},[14,122826,122827],{},[359,122828,122829],{},"优化",[14,122831,122832],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[161,122834,122835,122838],{},[119,122836,122837],{},"本地生成密钥对；",[119,122839,122840],{},"将公钥上传至远程主机。",[14,122842,122843],{},[359,122844,122845],{},"1.生成密钥对",[14,122847,122848],{},"本地客户端生成公私钥：（一路回车默认即可）",[18,122850,122852],{"className":120867,"code":122851,"language":120869,"meta":120870,"style":23},"ssh-keygen\n",[25,122853,122854],{"__ignoreMap":23},[28,122855,122856],{"class":30,"line":31},[28,122857,122851],{},[14,122859,122860],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[161,122862,122863,122866],{},[119,122864,122865],{},"id_rsa （私钥）；",[119,122867,122868],{},"id_rsa.pub (公钥)。",[14,122870,122871],{},[359,122872,122873],{},"2.公钥上传",[14,122875,122876],{},"上传指令如下：",[18,122878,122880],{"className":120867,"code":122879,"language":120869,"meta":120870,"style":23},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[25,122881,122882],{"__ignoreMap":23},[28,122883,122884],{"class":30,"line":31},[28,122885,122879],{},[14,122887,122888],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122890,122891],{},"以后再远程登录就无需录入密码了。",[177,122893,122895],{"id":122894},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122897,122898],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122900,122901],{},[359,122902,122903],{},"1.准备工作",[14,122905,122906],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122908,122909],{},[359,122910,122911],{},"2.为VScode安装远程开发插件",[14,122913,122914,122915,122918,122919,122922,122923,28436],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[25,122916,122917],{},"扩展：商店","的搜索栏输入",[25,122920,122921],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[25,122924,122925],{},"安装",[14,122927,122928],{},[1540,122929],{"alt":23,"src":122930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122932,122933],{},[359,122934,122935],{},"3.配置远程连接",[14,122937,122938,122939,122942,122943,122946],{},"步骤1：使用快捷键",[25,122940,122941],{},"ctrl + shift + p","打开命令输入窗口，并输入",[25,122944,122945],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122948,122949],{},[1540,122950],{"alt":23,"src":122951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122953,122954,122955,28436],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[25,122956,122957],{},"Add New SSH Host",[14,122959,122960],{},[1540,122961],{"alt":23,"src":122962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122964,122965,122966,122969,122970,122973,122974,122977],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[25,122967,122968],{},"ssh +X ubuntu@192.168.43.164","，其中，",[25,122971,122972],{},"ubuntu","需要替换为你的登录用户名，",[25,122975,122976],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122979,122980],{},[1540,122981],{"alt":23,"src":122982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122984,122985],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122987,122988],{},[1540,122989],{"alt":23,"src":122990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122992,122993],{},[1540,122994],{"alt":23,"src":122995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122997,122998],{},[359,122999,123000],{},"4.使用",[14,123002,123003,123004,122942,123006,123008],{},"步骤1：继续使用快捷键",[25,123005,122941],{},[25,123007,122945],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,123010,123011],{},[1540,123012],{"alt":23,"src":123013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,123015,123016,123017,123020],{},"或者，也可以点击侧边栏的",[25,123018,123019],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,123022,123023],{},[1540,123024],{"alt":23,"src":123025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,123027,123028,123029,123032,123033,123036],{},"步骤2：选择菜单栏的",[25,123030,123031],{},"文件","下的",[25,123034,123035],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,123038,123039],{},[1540,123040],{"alt":23,"src":123041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,123043,123044],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[149,123046,123048],{"id":123047},"_73-远程桌面","7.3 远程桌面",[14,123050,123051],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,123053,123054],{},"我们选择使用VNC来看。",[161,123056,123057],{},[119,123058,123059],{},"安装VNC服务器：",[14,123061,123062],{},"这里以TigerVNC为例进行安装：",[18,123064,123066],{"className":117347,"code":123065,"language":117349,"meta":23,"style":23},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[25,123067,123068],{"__ignoreMap":23},[28,123069,123070,123072,123074,123076,123079],{"class":30,"line":31},[28,123071,24652],{"class":34},[28,123073,117368],{"class":64},[28,123075,23909],{"class":64},[28,123077,123078],{"class":64}," tigervnc-standalone-server",[28,123080,123081],{"class":64}," tigervnc-common\n",[161,123083,123084],{"start":42},[119,123085,123086],{},"设置VNC密码：",[14,123088,123089],{},"为VNC用户设置密码，运行以下命令：",[18,123091,123093],{"className":117347,"code":123092,"language":117349,"meta":23,"style":23},"vncpasswd\n",[25,123094,123095],{"__ignoreMap":23},[28,123096,123097],{"class":30,"line":31},[28,123098,123092],{"class":34},[161,123100,123101],{"start":50},[119,123102,123103],{},"配置VNC启动脚本:",[14,123105,123106],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[18,123108,123110],{"className":117347,"code":123109,"language":117349,"meta":23,"style":23},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[25,123111,123112,123121],{"__ignoreMap":23},[28,123113,123114,123116,123118],{"class":30,"line":31},[28,123115,101317],{"class":34},[28,123117,29267],{"class":38},[28,123119,123120],{"class":64}," ~\u002F.vnc\n",[28,123122,123123,123126],{"class":30,"line":42},[28,123124,123125],{"class":34},"nano",[28,123127,123128],{"class":64}," ~\u002F.vnc\u002Fxstartup\n",[14,123130,123131],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[18,123133,123135],{"className":117347,"code":123134,"language":117349,"meta":23,"style":23},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[25,123136,123137,123142,123150,123157],{"__ignoreMap":23},[28,123138,123139],{"class":30,"line":31},[28,123140,123141],{"class":269},"#!\u002Fbin\u002Fsh\n",[28,123143,123144,123147],{"class":30,"line":42},[28,123145,123146],{"class":38},"unset",[28,123148,123149],{"class":64}," SESSION_MANAGER\n",[28,123151,123152,123154],{"class":30,"line":50},[28,123153,123146],{"class":38},[28,123155,123156],{"class":64}," DBUS_SESSION_BUS_ADDRESS\n",[28,123158,123159],{"class":30,"line":58},[28,123160,123161],{"class":34},"gnome-session\n",[14,123163,123164],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[161,123166,123167],{"start":58},[119,123168,123169],{},"给予执行权限：",[14,123171,123172],{},"为xstartup文件设置执行权限：",[18,123174,123176],{"className":117347,"code":123175,"language":117349,"meta":23,"style":23},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[25,123177,123178],{"__ignoreMap":23},[28,123179,123180,123182,123185],{"class":30,"line":31},[28,123181,24687],{"class":34},[28,123183,123184],{"class":64}," +x",[28,123186,123128],{"class":64},[161,123188,123189],{"start":70},[119,123190,123191],{},"启动VNC服务器：",[18,123193,123195],{"className":117347,"code":123194,"language":117349,"meta":23,"style":23},"vncserver -geometry 1920x1080 -localhost=0\n",[25,123196,123197],{"__ignoreMap":23},[28,123198,123199,123202,123205,123208],{"class":30,"line":31},[28,123200,123201],{"class":34},"vncserver",[28,123203,123204],{"class":38}," -geometry",[28,123206,123207],{"class":64}," 1920x1080",[28,123209,123210],{"class":38}," -localhost=0\n",[14,123212,123213],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123215,123216],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[161,123218,123219],{"start":78},[119,123220,123221],{},"查看已开启的VNC服务器：",[18,123223,123225],{"className":117347,"code":123224,"language":117349,"meta":23,"style":23},"vncserver -list\n",[25,123226,123227],{"__ignoreMap":23},[28,123228,123229,123231],{"class":30,"line":31},[28,123230,123201],{"class":34},[28,123232,123233],{"class":38}," -list\n",[14,123235,123236],{},[1540,123237],{"alt":23,"src":123238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[161,123240,123241],{"start":86},[119,123242,123243],{},"连接到VNC服务器：",[14,123245,123246],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[161,123248,123249],{"start":97},[119,123250,123251],{},"停止VNC服务器：",[14,123253,123254],{},"如果需要停止VNC服务器，可以使用以下命令：",[18,123256,123258],{"className":117347,"code":123257,"language":117349,"meta":23,"style":23},"vncserver -kill :1\n",[25,123259,123260],{"__ignoreMap":23},[28,123261,123262,123264,123267],{"class":30,"line":31},[28,123263,123201],{"class":34},[28,123265,123266],{"class":38}," -kill",[28,123268,123269],{"class":64}," :1\n",[14,123271,123272],{},"将:1替换为你实际使用的显示编号。",[14,123274,123275],{},[1540,123276],{"alt":23,"src":123277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123279,123280],{},[1540,123281],{"alt":23,"src":123282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[149,123284,123286],{"id":123285},"_74-usb端口设置","7.4 USB端口设置",[14,123288,123289],{},[359,123290,123291],{},"首先先配置好权限",[18,123293,123295],{"className":117347,"code":123294,"language":117349,"meta":23,"style":23},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[25,123296,123297,123302,123315,123322,123327],{"__ignoreMap":23},[28,123298,123299],{"class":30,"line":31},[28,123300,123301],{"class":269},"# 将用户权限提高\n",[28,123303,123304,123306,123308,123310,123313],{"class":30,"line":42},[28,123305,24652],{"class":34},[28,123307,26625],{"class":64},[28,123309,26628],{"class":38},[28,123311,123312],{"class":64}," dialout",[28,123314,26633],{"class":211},[28,123316,123317,123319],{"class":30,"line":50},[28,123318,26652],{"class":34},[28,123320,123321],{"class":64}," dialout\n",[28,123323,123324],{"class":30,"line":58},[28,123325,123326],{"class":269},"# 查看下面命令是否输出dialout（若输出才正常）\n",[28,123328,123329],{"class":30,"line":70},[28,123330,123331],{"class":34},"groups\n",[14,123333,123334],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[177,123336,123338],{"id":123337},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123340,123341,123344],{},[359,123342,123343],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123346,123347,123350],{},[359,123348,123349],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123352,123353],{},[359,123354,123355],{},"流程如下：",[14,123357,123358],{},"（1）.查找设备idVendor和idProduct",[14,123360,123361,123362,123365],{},"接入两个USB设备，在终端调用指令",[25,123363,123364],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123367,123368],{},[1540,123369],{"alt":23,"src":123370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123372,123373,123374,123377],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[25,123375,123376],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123379,123380],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123382,123383],{},"（2）.编写映射规则",[14,123385,123386,123387,123390],{},"在",[25,123388,123389],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[18,123392,123394],{"className":117347,"code":123393,"language":117349,"meta":23,"style":23},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[25,123395,123396],{"__ignoreMap":23},[28,123397,123398,123400,123402],{"class":30,"line":31},[28,123399,24652],{"class":34},[28,123401,118634],{"class":64},[28,123403,123404],{"class":64}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123406,123407],{},"输入如下内容：",[18,123409,123411],{"className":117347,"code":123410,"language":117349,"meta":23,"style":23},"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",[25,123412,123413,123443],{"__ignoreMap":23},[28,123414,123415,123418,123420,123423,123426,123429,123432,123434,123437,123440],{"class":30,"line":31},[28,123416,123417],{"class":211},"KERNEL",[28,123419,257],{"class":207},[28,123421,123422],{"class":64},"=\"ttyUSB*\",",[28,123424,123425],{"class":34}," ATTRS",[28,123427,123428],{"class":64},"{idVendor}==",[28,123430,123431],{"class":34},"\"10c4\"",[28,123433,588],{"class":34},[28,123435,123436],{"class":64}," ATTRS{idProduct}==\"ea60\",",[28,123438,123439],{"class":64}," MODE:=\"0777\",",[28,123441,123442],{"class":64}," SYMLINK+=\"mylidar\"\n",[28,123444,123445,123447,123449,123451,123453,123455,123458,123460,123463,123465],{"class":30,"line":42},[28,123446,123417],{"class":211},[28,123448,257],{"class":207},[28,123450,123422],{"class":64},[28,123452,123425],{"class":34},[28,123454,123428],{"class":64},[28,123456,123457],{"class":34},"\"1a86\"",[28,123459,588],{"class":34},[28,123461,123462],{"class":64}," ATTRS{idProduct}==\"7523\",",[28,123464,123439],{"class":64},[28,123466,123467],{"class":64}," SYMLINK+=\"mycar\"\n",[14,123469,123470],{},"代码解释：",[116,123472,123473,123476,123479,123482],{},[119,123474,123475],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[119,123477,123478],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[119,123480,123481],{},"SYMLINK是符号连接，即绑定的别名；",[119,123483,123484],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123486,123487,123488,123491,123494],{},"***小提示：***",[23630,123489,123490],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[25,123492,123493],{},"\u002Fetc\u002Fudev\u002Frule.d",[23630,123495,123496],{},"目录即可。",[14,123498,123499],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123501,123502],{},"（3）.使规则生效",[14,123504,123505],{},"在终端下输入如下指令：",[18,123507,123509],{"className":117347,"code":123508,"language":117349,"meta":23,"style":23},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[25,123510,123511,123516,123528,123539,123543,123548,123561],{"__ignoreMap":23},[28,123512,123513],{"class":30,"line":31},[28,123514,123515],{"class":269},"# Ubuntu用下方命令\n",[28,123517,123518,123520,123522,123525],{"class":30,"line":42},[28,123519,24652],{"class":34},[28,123521,120099],{"class":64},[28,123523,123524],{"class":64}," udev",[28,123526,123527],{"class":64}," reload\n",[28,123529,123530,123532,123534,123536],{"class":30,"line":50},[28,123531,24652],{"class":34},[28,123533,120099],{"class":64},[28,123535,123524],{"class":64},[28,123537,123538],{"class":64}," restart\n",[28,123540,123541],{"class":30,"line":58},[28,123542,2477],{"emptyLinePlaceholder":134},[28,123544,123545],{"class":30,"line":70},[28,123546,123547],{"class":269},"#Fedora用下方命令\n",[28,123549,123550,123552,123555,123558],{"class":30,"line":78},[28,123551,24652],{"class":34},[28,123553,123554],{"class":64}," udevadm",[28,123556,123557],{"class":64}," control",[28,123559,123560],{"class":38}," --reload\n",[28,123562,123563,123565,123567],{"class":30,"line":86},[28,123564,24652],{"class":34},[28,123566,123554],{"class":64},[28,123568,123569],{"class":64}," trigger\n",[14,123571,123572],{},"再重新插拔设备即可。",[14,123574,123575],{},"（4）.测试",[14,123577,123578],{},"终端下输入如下指令",[18,123580,123582],{"className":117347,"code":123581,"language":117349,"meta":23,"style":23},"ll \u002Fdev | grep ttyUSB\n",[25,123583,123584],{"__ignoreMap":23},[28,123585,123586,123589,123592,123594,123596],{"class":30,"line":31},[28,123587,123588],{"class":34},"ll",[28,123590,123591],{"class":64}," \u002Fdev",[28,123593,25180],{"class":207},[28,123595,30287],{"class":34},[28,123597,123598],{"class":64}," ttyUSB\n",[14,123600,123601],{},"运行结果如下：",[14,123603,123604],{},[1540,123605],{"alt":23,"src":123606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123608,123609,123610,123613],{},"也可以多次插拔USB设备，会发现设备端口",[25,123611,123612],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123615,123616],{},[359,123617,118015],{},[14,123619,123620],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[177,123622,123624],{"id":123623},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123626,123627,123629],{},[359,123628,123343],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123631,123632,123634],{},[359,123633,123349],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123636,123637],{},[359,123638,123355],{},[14,123640,123641],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123643,123644],{},"调用如下指令查看第一台雷达的USB信息：",[18,123646,123648],{"className":117347,"code":123647,"language":117349,"meta":23,"style":23},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[25,123649,123650,123670],{"__ignoreMap":23},[28,123651,123652,123655,123657,123660,123663,123665,123667],{"class":30,"line":31},[28,123653,123654],{"class":34},"udevadm",[28,123656,69872],{"class":64},[28,123658,123659],{"class":38}," --attribute-walk",[28,123661,123662],{"class":38}," --name=\u002Fdev\u002FttyUSB0",[28,123664,25180],{"class":207},[28,123666,30287],{"class":34},[28,123668,123669],{"class":64}," KERNELS\n",[28,123671,123672,123674,123676,123678,123681,123683,123685],{"class":30,"line":42},[28,123673,123654],{"class":34},[28,123675,69872],{"class":64},[28,123677,123659],{"class":38},[28,123679,123680],{"class":38}," --name=\u002Fdev\u002FttyACM0",[28,123682,25180],{"class":207},[28,123684,30287],{"class":34},[28,123686,123669],{"class":64},[14,123688,123689],{},[1540,123690],{"alt":23,"src":123691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123693,123694],{},"调用如下指令查看第二台雷达的USB信息：",[18,123696,123698],{"className":117347,"code":123697,"language":117349,"meta":23,"style":23},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[25,123699,123700],{"__ignoreMap":23},[28,123701,123702,123704,123706,123708,123711,123713,123715],{"class":30,"line":31},[28,123703,123654],{"class":34},[28,123705,69872],{"class":64},[28,123707,123659],{"class":38},[28,123709,123710],{"class":38}," --name=\u002Fdev\u002FttyUSB1",[28,123712,25180],{"class":207},[28,123714,30287],{"class":34},[28,123716,123669],{"class":64},[14,123718,123719,123720,123723,123724,123727,123728,123731],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[25,123721,123722],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[25,123725,123726],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[359,123729,123730],{},"唯一性标识","”。",[14,123733,123383],{},[14,123735,123386,123736,123738],{},[25,123737,123389],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[18,123740,123741],{"className":117347,"code":123393,"language":117349,"meta":23,"style":23},[25,123742,123743],{"__ignoreMap":23},[28,123744,123745,123747,123749],{"class":30,"line":31},[28,123746,24652],{"class":34},[28,123748,118634],{"class":64},[28,123750,123404],{"class":64},[18,123752,123754],{"className":117347,"code":123753,"language":117349,"meta":23,"style":23},"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",[25,123755,123756,123785],{"__ignoreMap":23},[28,123757,123758,123760,123762,123764,123767,123769,123772,123775,123777,123780,123782],{"class":30,"line":31},[28,123759,123417],{"class":211},[28,123761,257],{"class":207},[28,123763,123422],{"class":64},[28,123765,123766],{"class":211}," KERNELS",[28,123768,257],{"class":207},[28,123770,123771],{"class":64},"=\"1-1.3:1.0\",",[28,123773,123774],{"class":34}," MODE:",[28,123776,257],{"class":64},[28,123778,123779],{"class":34},"\"0777\"",[28,123781,588],{"class":34},[28,123783,123784],{"class":64}," SYMLINK+=\"rplidar_front\"\n",[28,123786,123787,123789,123791,123793,123795,123797,123800,123802,123804,123806,123808],{"class":30,"line":42},[28,123788,123417],{"class":211},[28,123790,257],{"class":207},[28,123792,123422],{"class":64},[28,123794,123766],{"class":211},[28,123796,257],{"class":207},[28,123798,123799],{"class":64},"=\"1-1.4:1.0\",",[28,123801,123774],{"class":34},[28,123803,257],{"class":64},[28,123805,123779],{"class":34},[28,123807,588],{"class":34},[28,123809,123810],{"class":64}," SYMLINK+=\"rplidar_back\"\n",[14,123812,123502],{},[14,123814,123505],{},[18,123816,123817],{"className":117347,"code":123508,"language":117349,"meta":23,"style":23},[25,123818,123819,123823,123833,123843,123847,123851,123861],{"__ignoreMap":23},[28,123820,123821],{"class":30,"line":31},[28,123822,123515],{"class":269},[28,123824,123825,123827,123829,123831],{"class":30,"line":42},[28,123826,24652],{"class":34},[28,123828,120099],{"class":64},[28,123830,123524],{"class":64},[28,123832,123527],{"class":64},[28,123834,123835,123837,123839,123841],{"class":30,"line":50},[28,123836,24652],{"class":34},[28,123838,120099],{"class":64},[28,123840,123524],{"class":64},[28,123842,123538],{"class":64},[28,123844,123845],{"class":30,"line":58},[28,123846,2477],{"emptyLinePlaceholder":134},[28,123848,123849],{"class":30,"line":70},[28,123850,123547],{"class":269},[28,123852,123853,123855,123857,123859],{"class":30,"line":78},[28,123854,24652],{"class":34},[28,123856,123554],{"class":64},[28,123858,123557],{"class":64},[28,123860,123560],{"class":38},[28,123862,123863,123865,123867],{"class":30,"line":86},[28,123864,24652],{"class":34},[28,123866,123554],{"class":64},[28,123868,123569],{"class":64},[14,123870,123572],{},[14,123872,123575],{},[14,123874,123578,123875,123878],{},[25,123876,123877],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123880,123881],{},[1540,123882],{"alt":23,"src":123883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123885,123886],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123888,123889,123891],{},[359,123890,118015],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[177,123893,123895],{"id":123894},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123897,123898],{},"（1）.查看所连接的主机USB接口的信息",[18,123900,123902],{"className":117347,"code":123901,"language":117349,"meta":23,"style":23},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[25,123903,123904,123934],{"__ignoreMap":23},[28,123905,123906,123908,123910,123913,123915,123917,123919,123921,123924,123927,123929,123932],{"class":30,"line":31},[28,123907,123654],{"class":34},[28,123909,69872],{"class":64},[28,123911,123912],{"class":38}," -a",[28,123914,29267],{"class":38},[28,123916,28473],{"class":211},[28,123918,123654],{"class":34},[28,123920,69872],{"class":64},[28,123922,123923],{"class":38}," -q",[28,123925,123926],{"class":64}," path",[28,123928,25186],{"class":38},[28,123930,123931],{"class":64}," \u002Fdev\u002FttyACM0",[28,123933,218],{"class":211},[28,123935,123936,123938,123940,123942,123944,123946,123948,123950,123952,123954,123956,123959],{"class":30,"line":42},[28,123937,123654],{"class":34},[28,123939,69872],{"class":64},[28,123941,123912],{"class":38},[28,123943,29267],{"class":38},[28,123945,28473],{"class":211},[28,123947,123654],{"class":34},[28,123949,69872],{"class":64},[28,123951,123923],{"class":38},[28,123953,123926],{"class":64},[28,123955,25186],{"class":38},[28,123957,123958],{"class":64}," \u002Fdev\u002FttyUSB0",[28,123960,218],{"class":211},[14,123962,123963],{},[1540,123964],{"alt":23,"src":123965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123967,123968],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123970,123383],{},[14,123972,123386,123973,123738],{},[25,123974,123389],{},[18,123976,123977],{"className":117347,"code":123393,"language":117349,"meta":23,"style":23},[25,123978,123979],{"__ignoreMap":23},[28,123980,123981,123983,123985],{"class":30,"line":31},[28,123982,24652],{"class":34},[28,123984,118634],{"class":64},[28,123986,123404],{"class":64},[18,123988,123990],{"className":117347,"code":123989,"language":117349,"meta":23,"style":23},"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",[25,123991,123992,124020,124046],{"__ignoreMap":23},[28,123993,123994,123996,123998,124001,124003,124005,124007,124009,124012,124015,124017],{"class":30,"line":31},[28,123995,123417],{"class":211},[28,123997,257],{"class":207},[28,123999,124000],{"class":64},"=\"ttyACM*\",",[28,124002,123425],{"class":34},[28,124004,123428],{"class":64},[28,124006,123457],{"class":34},[28,124008,588],{"class":34},[28,124010,124011],{"class":64}," ATTRS{idProduct}==\"55d4\",",[28,124013,124014],{"class":64}," ATTRS{serial}==\"0001\",",[28,124016,123439],{"class":64},[28,124018,124019],{"class":64}," SYMLINK+=\"ttyACM_MCU\"\n",[28,124021,124022,124024,124026,124028,124030,124032,124034,124036,124038,124041,124043],{"class":30,"line":42},[28,124023,123417],{"class":211},[28,124025,257],{"class":207},[28,124027,124000],{"class":64},[28,124029,123425],{"class":34},[28,124031,123428],{"class":64},[28,124033,123457],{"class":34},[28,124035,588],{"class":34},[28,124037,124011],{"class":64},[28,124039,124040],{"class":64}," ATTRS{serial}==\"0002\",",[28,124042,123439],{"class":64},[28,124044,124045],{"class":64}," SYMLINK+=\"ttyACM_Lidar\"\n",[28,124047,124048,124050,124052,124054,124056,124058,124060,124062,124064,124066],{"class":30,"line":50},[28,124049,123417],{"class":211},[28,124051,257],{"class":207},[28,124053,123422],{"class":64},[28,124055,123425],{"class":34},[28,124057,123428],{"class":64},[28,124059,123457],{"class":34},[28,124061,588],{"class":34},[28,124063,123462],{"class":64},[28,124065,123439],{"class":64},[28,124067,124068],{"class":64}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124070,123502],{},[14,124072,123505],{},[18,124074,124075],{"className":117347,"code":123508,"language":117349,"meta":23,"style":23},[25,124076,124077,124081,124091,124101,124105,124109,124119],{"__ignoreMap":23},[28,124078,124079],{"class":30,"line":31},[28,124080,123515],{"class":269},[28,124082,124083,124085,124087,124089],{"class":30,"line":42},[28,124084,24652],{"class":34},[28,124086,120099],{"class":64},[28,124088,123524],{"class":64},[28,124090,123527],{"class":64},[28,124092,124093,124095,124097,124099],{"class":30,"line":50},[28,124094,24652],{"class":34},[28,124096,120099],{"class":64},[28,124098,123524],{"class":64},[28,124100,123538],{"class":64},[28,124102,124103],{"class":30,"line":58},[28,124104,2477],{"emptyLinePlaceholder":134},[28,124106,124107],{"class":30,"line":70},[28,124108,123547],{"class":269},[28,124110,124111,124113,124115,124117],{"class":30,"line":78},[28,124112,24652],{"class":34},[28,124114,123554],{"class":64},[28,124116,123557],{"class":64},[28,124118,123560],{"class":38},[28,124120,124121,124123,124125],{"class":30,"line":86},[28,124122,24652],{"class":34},[28,124124,123554],{"class":64},[28,124126,123569],{"class":64},[14,124128,124129,124130],{},"再重新插拔设备即可，或者 ",[359,124131,124132],{},"直接重启系统。",[14,124134,123575],{},[14,124136,123578,124137,123878],{},[25,124138,123877],{},[14,124140,124141],{},[1540,124142],{"alt":23,"src":124143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124145,123886],{},[14,124147,124148,124150],{},[359,124149,118015],{}," 一些设备可能没有串口号等。",[177,124152,124154],{"id":124153},"_744-其他注意事项","7.4.4 其他注意事项",[14,124156,124157,124158,124160,124161,124164,124165,18487,124168,124171,124172,124174],{},"并非所有的USB设备端口号都是",[25,124159,123612],{},"的格式，比如Arduino的端口号可能是",[25,124162,124163],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[25,124166,124167],{},"videon",[25,124169,124170],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[25,124173,124167],{},"端口，绑定时需要关联的也是该接口。",[14,124176,124177,124178,124181,124182,124185,124186,124188,124189,124192,124193,124196,124197,124200,124201,124200,124204,124200,124207,28436],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[25,124179,124180],{},"KERNEL==\"ttyUSB*\"","修改为",[25,124183,124184],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[25,124187,124180],{},"修改为类似于",[25,124190,124191],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[25,124194,124195],{},"video[0,2,4,6]","表示可以绑定的端口为",[25,124198,124199],{},"video0","或",[25,124202,124203],{},"video2",[25,124205,124206],{},"video4",[25,124208,124209],{},"video6",[149,124211,124213],{"id":124212},"_75-挂载内网网页","7.5 挂载内网网页",[14,124215,124216],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124218,124219],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124221,124222],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124224,124225,124226],{},"Termux 下载地址（F-Droid）：",[448,124227,124228],{"href":124228,"rel":124229},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23940],[14,124231,124232],{},"首先打开app后，先更新软件缓存：",[18,124234,124236],{"className":117347,"code":124235,"language":117349,"meta":23,"style":23},"pkg update\n",[25,124237,124238],{"__ignoreMap":23},[28,124239,124240,124243],{"class":30,"line":31},[28,124241,124242],{"class":34},"pkg",[28,124244,26293],{"class":64},[14,124246,124247],{},"然后换源",[18,124249,124251],{"className":117347,"code":124250,"language":117349,"meta":23,"style":23},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[25,124252,124253],{"__ignoreMap":23},[28,124254,124255,124257,124260],{"class":30,"line":31},[28,124256,123125],{"class":34},[28,124258,124259],{"class":211}," $PREFIX",[28,124261,124262],{"class":64},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124264,124265],{},"将该文件内容替换为下面：",[18,124267,124269],{"className":117347,"code":124268,"language":117349,"meta":23,"style":23},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[25,124270,124271],{"__ignoreMap":23},[28,124272,124273,124276,124279,124282],{"class":30,"line":31},[28,124274,124275],{"class":34},"deb",[28,124277,124278],{"class":64}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[28,124280,124281],{"class":64}," stable",[28,124283,124284],{"class":64}," main\n",[116,124286,124287,124314],{},[119,124288,124289,124290,124292,124293],{},"如果你使用的是",[25,124291,123125],{},"编辑器：",[116,124294,124295,124302,124308],{},[119,124296,124297,124298,124301],{},"按 ",[25,124299,124300],{},"Ctrl+O"," 保存文件。",[119,124303,124297,124304,124307],{},[25,124305,124306],{},"Enter"," 确认文件名。",[119,124309,124297,124310,124313],{},[25,124311,124312],{},"Ctrl+X"," 退出编辑器。",[119,124315,124289,124316,124292,124319],{},[25,124317,124318],{},"vim",[116,124320,124321,124327],{},[119,124322,124297,124323,124326],{},[25,124324,124325],{},"Esc"," 退出编辑模式。",[119,124328,124329,124330,124332],{},"输入 ",[25,124331,119272],{}," 保存并退出。",[14,124334,124335],{},"接下来重新更新软件源：",[18,124337,124339],{"className":117347,"code":124338,"language":117349,"meta":23,"style":23},"pkg update && pkg upgrade\n",[25,124340,124341],{"__ignoreMap":23},[28,124342,124343,124345,124347,124349,124351],{"class":30,"line":31},[28,124344,124242],{"class":34},[28,124346,117398],{"class":64},[28,124348,26241],{"class":211},[28,124350,124242],{"class":34},[28,124352,117384],{"class":64},[14,124354,124355],{},"安装python：",[18,124357,124359],{"className":117347,"code":124358,"language":117349,"meta":23,"style":23},"pkg install python\n",[25,124360,124361],{"__ignoreMap":23},[28,124362,124363,124365,124367],{"class":30,"line":31},[28,124364,124242],{"class":34},[28,124366,23909],{"class":64},[28,124368,124369],{"class":64}," python\n",[14,124371,124372,26524],{},[359,124373,124374],{},"通过Termux访问设备存储",[14,124376,124377],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[18,124379,124381],{"className":117347,"code":124380,"language":117349,"meta":23,"style":23},"termux-setup-storage\n",[25,124382,124383],{"__ignoreMap":23},[28,124384,124385],{"class":30,"line":31},[28,124386,124380],{"class":34},[161,124388,124389],{},[119,124390,124391,26524,124394],{},[359,124392,124393],{},"进入HTML文件所在的目录",[161,124395,124396],{},[119,124397,124398,124399,124401],{},"使用",[25,124400,101327],{},"命令进入HTML文件所在的目录：",[18,124403,124405],{"className":117347,"code":124404,"language":117349,"meta":23,"style":23},"cd ~\u002Fyour_html_folder\n",[25,124406,124407],{"__ignoreMap":23},[28,124408,124409,124411],{"class":30,"line":31},[28,124410,101327],{"class":38},[28,124412,124413],{"class":64}," ~\u002Fyour_html_folder\n",[161,124415,124416],{"start":42},[119,124417,124418,26524,124421,124426,124443],{},[359,124419,124420],{},"启动Python HTTP服务器",[161,124422,124423],{},[119,124424,124425],{},"运行以下命令启动一个简单的HTTP服务器：",[18,124427,124429],{"className":117347,"code":124428,"language":117349,"meta":23,"style":23},"python -m http.server 8000\n",[25,124430,124431],{"__ignoreMap":23},[28,124432,124433,124435,124437,124440],{"class":30,"line":31},[28,124434,30431],{"class":34},[28,124436,100933],{"class":38},[28,124438,124439],{"class":64}," http.server",[28,124441,124442],{"class":38}," 8000\n",[161,124444,124445],{"start":50},[119,124446,124447,124448,124451],{},"这会在端口",[25,124449,124450],{},"8000","上启动一个Web服务器。",[116,124453,124454],{},[119,124455,124456],{},"启动服务器后，Termux会显示日志信息，例如：",[18,124458,124460],{"className":120867,"code":124459,"language":120869,"meta":120870,"style":23},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[25,124461,124462],{"__ignoreMap":23},[28,124463,124464],{"class":30,"line":31},[28,124465,124459],{},[116,124467,124468],{},[119,124469,124470],{},"这表示服务器已成功启动。",[14,124472,124473],{},[359,124474,124475],{},"在浏览器中访问HTML文件",[161,124477,124478],{},[119,124479,124480,26524,124483,124488],{},[359,124481,124482],{},"在同一设备上访问",[161,124484,124485],{},[119,124486,124487],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[18,124489,124492],{"className":124490,"code":124491,"language":71715,"meta":23,"style":23},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[25,124493,124494],{"__ignoreMap":23},[28,124495,124496,124499],{"class":30,"line":31},[28,124497,124498],{"class":211},"http:",[28,124500,124501],{"class":269},"\u002F\u002Flocalhost:8000\n",[116,124503,124504],{},[119,124505,124506,124507,124510],{},"如果HTML文件中有",[25,124508,124509],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[149,124512,124514],{"id":124513},"_76-linux重点知识","7.6 Linux重点知识",[177,124516,124518],{"id":124517},"_761-关于点的说明","7.6.1 关于点的说明",[14,124520,124521],{},[1540,124522],{"alt":23,"src":124523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124525,124526],{},"一点本目录，两点上目录",[177,124528,124530],{"id":124529},"_762-目录","7.6.2 目录",[22075,124532,124534],{"id":124533},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124536,124537],{},[359,124538,124539],{},"\u002Fboot:",[14,124541,124542],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124544,124545],{},[359,124546,124547],{},"\u002Fetc:",[14,124549,124550],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124552,124553],{},[359,124554,124555],{},"\u002Flib：",[14,124557,124558],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124560,124561],{},[359,124562,124563],{},"\u002Fsys:",[14,124565,124566],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22075,124568,124570],{"id":124569},"_7622-指令集合","7.6.2.2 指令集合",[14,124572,124573],{},[359,124574,124575],{},"\u002Fbin:",[14,124577,124578],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124580,124581],{},[359,124582,124583],{},"\u002Fsbin:",[14,124585,124586],{},"只有系统管理员才能使用的程序和指令",[22075,124588,124590],{"id":124589},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124592,124593],{},[359,124594,124595],{},"\u002Fdev:",[14,124597,124598],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124600,124601],{},[359,124602,124603],{},"\u002Fmedia:",[14,124605,124606],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124608,124609],{},[359,124610,124611],{},"\u002Fmnt:",[14,124613,124614],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22075,124616,124618],{"id":124617},"_7624-临时文件","7.6.2.4 临时文件",[14,124620,124621],{},[359,124622,124623],{},"\u002Frun:",[14,124625,124626],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124628,124629],{},[359,124630,124631],{},"\u002Flost+found:",[14,124633,124634],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124636,124637],{},[359,124638,124639],{},"\u002Ftmp:",[14,124641,124642],{},"这个目录是用来存放一些临时文件的",[22075,124644,124646],{"id":124645},"_7625-账户","7.6.2.5 账户",[14,124648,124649],{},[359,124650,124651],{},"\u002Froot：",[14,124653,124654],{},"系统管理员的用户主目录",[14,124656,124657,26524],{},[359,124658,124659],{},"\u002Fhome",[14,124661,124662],{},"用户的主目录，以用户的账号命名的",[14,124664,124665,26524],{},[359,124666,124667],{},"\u002Fusr",[14,124669,124670],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124672,124673],{},[359,124674,124675],{},"\u002Fusr\u002Fbin：",[14,124677,124678],{},"系统用户使用的应用程序与指令",[14,124680,124681],{},[359,124682,124683],{},"\u002Fusr\u002Fsbin：",[14,124685,124686],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124688,124689],{},[359,124690,124691],{},"\u002Fusr\u002Fsrc：",[14,124693,124694],{},"内核源代码默认的放置目录",[22075,124696,124698],{"id":124697},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124700,124701],{},[359,124702,124703],{},"\u002Fvar：",[14,124705,124706],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124708,124709],{},[359,124710,124711],{},"\u002Fproc:",[14,124713,124714,124715,124718],{},"管理 ",[359,124716,124717],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22075,124720,124722],{"id":124721},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124724,124725],{},[359,124726,124727],{},"\u002Fopt:",[14,124729,124730],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124732,124733],{},[359,124734,124735],{},"\u002Fsrv:",[14,124737,124738],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[177,124740,124742],{"id":124741},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124744,124745],{},[1540,124746],{"alt":23,"src":124747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124749,124750],{},"windows-->linux:",[14,124752,124753],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124755,124756],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124758,124759],{},"linux传输文件到windows",[14,124761,124762],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[177,124764,124766],{"id":124765},"_764-易忘知识","7.6.4 易忘知识",[14,124768,124769],{},"操作系统内核查看",[18,124771,124772],{"className":117347,"code":121341,"language":117349,"meta":23,"style":23},[25,124773,124774],{"__ignoreMap":23},[28,124775,124776,124778],{"class":30,"line":31},[28,124777,70255],{"class":34},[28,124779,121350],{"class":38},[14,124781,124782],{},[1540,124783],{"alt":23,"src":124784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124786,124787],{},[1540,124788],{"alt":23,"src":124789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[18,124791,124793],{"className":117347,"code":124792,"language":117349,"meta":23,"style":23},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[25,124794,124795,124807],{"__ignoreMap":23},[28,124796,124797,124799,124802,124805],{"class":30,"line":31},[28,124798,121558],{"class":34},[28,124800,124801],{"class":64}," mvtest",[28,124803,124804],{"class":64}," mvtest2",[28,124806,2751],{"class":211},[28,124808,124809],{"class":30,"line":42},[28,124810,124811],{"class":34},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124813,124814],{},[1540,124815],{"alt":23,"src":124816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124818,124819],{},[1540,124820],{"alt":23,"src":124821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124823,124824,124825,124828],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[25,124826,124827],{},"du -a"," 可以快速查看磁盘使用细节。",[177,124830,124832],{"id":124831},"_765-vim","7.6.5 Vim",[14,124834,124835],{},[1540,124836],{"alt":23,"src":124837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124839,124840],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124842,124843],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124845,124846],{},[359,124847,124848],{},"1.命令模式：",[14,124850,124851],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124853,124854],{},"x 删除当前光标所在处的字符",[14,124856,124857],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124859,124860],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124862,124863],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124865,124866],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124868,124869],{},"dd 剪切当前行",[14,124871,124872],{},"yy 复制当前行",[14,124874,124875],{},"p 粘贴剪贴板内容到光标下方",[14,124877,124878],{},"P 粘贴剪贴板内容到光标上方",[14,124880,124881],{},"u 撤销上一次操作",[14,124883,124884],{},"ctrl+r 重做上一次操作",[14,124886,124887,124889],{},[1005,124888],{}," 保存文件",[14,124891,124892,124894],{},[855,124893],{}," 退出Vim编辑器",[14,124896,124897,124899],{},[855,124898],{},"! 强制退出Vim编辑器，不保存修改",[14,124901,124902],{},[359,124903,124904],{},"2.输入模式：",[14,124906,124907],{},[1540,124908],{"alt":23,"src":124909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124911,124912],{},[359,124913,124914],{},"3.底线命令模式：",[14,124916,124917],{},[1540,124918],{"alt":23,"src":124919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124921,124922],{},"按下esc可以退出底线命令模式",[177,124924,124926],{"id":124925},"_766-apt","7.6.6 apt",[14,124928,124929],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[177,124931,124933],{"id":124932},"_767-home与root的区别","7.6.7 home与root的区别",[14,124935,124936],{},[1540,124937],{"alt":23,"src":124938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124940,124941],{},[1540,124942],{"alt":23,"src":124943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124945,124946],{},[1540,124947],{"alt":23,"src":124948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124950,124951],{},[1540,124952],{"alt":23,"src":124953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[177,124955,124957],{"id":124956},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124959,124960],{},[448,124961,124962],{"href":124962,"rel":124963},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23940],[161,124965,124966,124969],{},[119,124967,124968],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[119,124970,124971],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124973,124974],{},[1540,124975],{"alt":23,"src":124976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124978,124979],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124981,124982],{},[1540,124983],{"alt":23,"src":124984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[18,124986,124988],{"className":120867,"code":124987,"language":120869,"meta":120870,"style":23},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[25,124989,124990,124995],{"__ignoreMap":23},[28,124991,124992],{"class":30,"line":31},[28,124993,124994],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[28,124996,124997],{"class":30,"line":42},[28,124998,124999],{},".\u002Fpycharm.sh\n",[14,125001,125002],{},"3️⃣创建.desktop文件",[14,125004,125005],{},[359,125006,125007],{},"原理：",[116,125009,125010,125020],{},[119,125011,125012,125013,125019],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[359,125014,125015,125018],{},[25,125016,125017],{},".desktop"," 文件"," 来识别应用。",[119,125021,125022,125024,125025],{},[25,125023,125017],{}," 文件相当于一个“应用注册表”，告诉系统：",[116,125026,125027,125030,125033,125036,125039],{},[119,125028,125029],{},"应用名字（Name）",[119,125031,125032],{},"图标（Icon）",[119,125034,125035],{},"执行命令（Exec）",[119,125037,125038],{},"分类（Categories）",[119,125040,125041],{},"是否需要终端（Terminal）",[18,125043,125045],{"className":120867,"code":125044,"language":120869,"meta":120870,"style":23},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[25,125046,125047,125052],{"__ignoreMap":23},[28,125048,125049],{"class":30,"line":31},[28,125050,125051],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[28,125053,125054],{"class":30,"line":42},[28,125055,125056],{},"nano pycharm.desktop\n",[14,125058,125059],{},"nano是一个命令行下的编辑器，也可以使用vim",[18,125061,125063],{"className":120867,"code":125062,"language":120869,"meta":120870,"style":23},"[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",[25,125064,125065,125070,125075,125080,125085,125090,125095,125100,125105,125110],{"__ignoreMap":23},[28,125066,125067],{"class":30,"line":31},[28,125068,125069],{},"[Desktop Entry]\n",[28,125071,125072],{"class":30,"line":42},[28,125073,125074],{},"Version=1.0\n",[28,125076,125077],{"class":30,"line":50},[28,125078,125079],{},"Type=Application\n",[28,125081,125082],{"class":30,"line":58},[28,125083,125084],{},"Name=PyCharm\n",[28,125086,125087],{"class":30,"line":70},[28,125088,125089],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[28,125091,125092],{"class":30,"line":78},[28,125093,125094],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[28,125096,125097],{"class":30,"line":86},[28,125098,125099],{},"Comment=JetBrains PyCharm IDE\n",[28,125101,125102],{"class":30,"line":97},[28,125103,125104],{},"Categories=Development;IDE;\n",[28,125106,125107],{"class":30,"line":108},[28,125108,125109],{},"Terminal=false\n",[28,125111,125112],{"class":30,"line":1407},[28,125113,125114],{},"StartupWMClass=jetbrains-pycharm\n",[116,125116,125117,125123,125129,125135],{},[119,125118,125119,125122],{},[25,125120,125121],{},"Exec"," → 点击图标时执行的命令",[119,125124,125125,125128],{},[25,125126,125127],{},"Icon"," → 显示在菜单和桌面上的图标",[119,125130,125131,125134],{},[25,125132,125133],{},"Terminal=false"," → 不打开终端",[119,125136,125137,125140],{},[25,125138,125139],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125142,125143,125144],"blockquote",{},[14,125145,125146,125147,125149,125150],{},"可以理解成 ",[25,125148,125017],{}," 文件是 Linux 的 ",[359,125151,125152],{},"快捷方式配置文件",[14,125154,125155],{},"4️⃣设置可执行权限",[18,125157,125159],{"className":120867,"code":125158,"language":120869,"meta":120870,"style":23},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[25,125160,125161],{"__ignoreMap":23},[28,125162,125163],{"class":30,"line":31},[28,125164,125158],{},[14,125166,125167],{},"5️⃣桌面图标启动的话如下：",[18,125169,125171],{"className":120867,"code":125170,"language":120869,"meta":120870,"style":23},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[25,125172,125173,125178],{"__ignoreMap":23},[28,125174,125175],{"class":30,"line":31},[28,125176,125177],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[28,125179,125180],{"class":30,"line":42},[28,125181,125182],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[161,125184,125185],{"start":50},[119,125186,125187],{},"下载Appimage文件实现软件的安装",[14,125189,125190],{},"1️⃣先下载appimage",[14,125192,125193],{},[448,125194,125195],{"href":125195,"rel":125196},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23940],[14,125198,125199],{},[1540,125200],{"alt":23,"src":125201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125203,125204],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125206,125207],{},[1540,125208],{"alt":23,"src":125209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125211,125212],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125214,125215],{},[1540,125216],{"alt":23,"src":125217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125219,125220],{},[1540,125221],{"alt":23,"src":125222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125224,125225,125226,125229],{},"3️⃣给他们放在",[25,125227,125228],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125231,125232],{},"4️⃣给软件执行权限",[18,125234,125236],{"className":120867,"code":125235,"language":120869,"meta":120870,"style":23},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[25,125237,125238,125243],{"__ignoreMap":23},[28,125239,125240],{"class":30,"line":31},[28,125241,125242],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[28,125244,125245],{"class":30,"line":42},[28,125246,125247],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125249,125250],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[18,125252,125254],{"className":117347,"code":125253,"language":117349,"meta":23,"style":23},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[25,125255,125256,125263,125270,125276],{"__ignoreMap":23},[28,125257,125258,125260],{"class":30,"line":31},[28,125259,101327],{"class":38},[28,125261,125262],{"class":64}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[28,125264,125265,125267],{"class":30,"line":42},[28,125266,101334],{"class":34},[28,125268,125269],{"class":64}," .\u002Fqqmusic.desktop\n",[28,125271,125272,125274],{"class":30,"line":50},[28,125273,124318],{"class":34},[28,125275,125269],{"class":64},[28,125277,125278,125280,125282,125284],{"class":30,"line":58},[28,125279,24652],{"class":34},[28,125281,24655],{"class":64},[28,125283,123184],{"class":64},[28,125285,125269],{"class":64},[14,125287,125288,125290],{},[25,125289,101334],{},"：一个 Linux 命令，主要功能是：",[116,125292,125293,125296],{},[119,125294,125295],{},"如果文件不存在，就创建一个新的空文件",[119,125297,125298],{},"如果文件已存在，就更新该文件的最后修改时间",[18,125300,125302],{"className":120867,"code":125301,"language":120869,"meta":120870,"style":23},"[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",[25,125303,125304,125308,125313,125318,125323,125327,125332],{"__ignoreMap":23},[28,125305,125306],{"class":30,"line":31},[28,125307,125069],{},[28,125309,125310],{"class":30,"line":42},[28,125311,125312],{},"Name=QQ音乐\n",[28,125314,125315],{"class":30,"line":50},[28,125316,125317],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[28,125319,125320],{"class":30,"line":58},[28,125321,125322],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[28,125324,125325],{"class":30,"line":70},[28,125326,125079],{},[28,125328,125329],{"class":30,"line":78},[28,125330,125331],{},"Categories=Audio;Music;Player;\n",[28,125333,125334],{"class":30,"line":86},[28,125335,125336],{},"Comment=QQ Music Client for Linux\n",[14,125338,125339],{},"将文件复制进去",[14,125341,125342],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125344,125345],{},[1540,125346],{"alt":23,"src":125347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125349,125350],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125352,125353],{},[1540,125354],{"alt":23,"src":125355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125357,125358,125359,125362,125363,125366],{},"如果你用的不是KDE，那么也可以直接修改",[25,125360,125361],{},"qqmuic.desktop","：在exec的末尾加上",[25,125364,125365],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[18,125368,125370],{"className":120867,"code":125369,"language":120869,"meta":120870,"style":23},"[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",[25,125371,125372,125376,125380,125385,125389,125393,125397],{"__ignoreMap":23},[28,125373,125374],{"class":30,"line":31},[28,125375,125069],{},[28,125377,125378],{"class":30,"line":42},[28,125379,125312],{},[28,125381,125382],{"class":30,"line":50},[28,125383,125384],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[28,125386,125387],{"class":30,"line":58},[28,125388,125322],{},[28,125390,125391],{"class":30,"line":70},[28,125392,125079],{},[28,125394,125395],{"class":30,"line":78},[28,125396,125331],{},[28,125398,125399],{"class":30,"line":86},[28,125400,125336],{},[14,125402,125403],{},[1540,125404],{"alt":23,"src":125405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125407,125408],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[18,125410,125412],{"className":120867,"code":125411,"language":120869,"meta":120870,"style":23},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[25,125413,125414],{"__ignoreMap":23},[28,125415,125416],{"class":30,"line":31},[28,125417,125411],{},[161,125419,125420],{"start":58},[119,125421,125422],{},"去Flathub上安装软件",[14,125424,125425],{},[448,125426,125427],{"href":125427,"rel":125428},"https:\u002F\u002Fflathub.org\u002F",[23940],[14,125430,125431],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125433,125434],{},[1540,125435],{"alt":23,"src":125436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[18,125438,125440],{"className":120867,"code":125439,"language":120869,"meta":120870,"style":23},"flatpak install flathub com.obsproject.Studio\n",[25,125441,125442],{"__ignoreMap":23},[28,125443,125444],{"class":30,"line":31},[28,125445,125439],{},[14,125447,125448],{},[1540,125449],{"alt":23,"src":125450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125452,125453],{},"2️⃣运行软件",[14,125455,125456],{},"a.官方方式：",[14,125458,125459],{},[1540,125460],{"alt":23,"src":125461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[18,125463,125464],{"className":120867,"code":125439,"language":120869,"meta":120870,"style":23},[25,125465,125466],{"__ignoreMap":23},[28,125467,125468],{"class":30,"line":31},[28,125469,125439],{},[14,125471,125472],{},"b.当普通软件运行：",[14,125474,125475],{},[1540,125476],{"alt":23,"src":125477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125479,125480],{},[1540,125481],{"alt":23,"src":125482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[126,125484,125485],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":23,"searchDepth":42,"depth":42,"links":125487},[125488,125489,125494,125495,125501,125502],{"id":122220,"depth":42,"text":122221},{"id":122562,"depth":42,"text":122563,"children":125490},[125491,125492,125493],{"id":122566,"depth":50,"text":122567},{"id":122633,"depth":50,"text":122634},{"id":122894,"depth":50,"text":122895},{"id":123047,"depth":42,"text":123048},{"id":123285,"depth":42,"text":123286,"children":125496},[125497,125498,125499,125500],{"id":123337,"depth":50,"text":123338},{"id":123623,"depth":50,"text":123624},{"id":123894,"depth":50,"text":123895},{"id":124153,"depth":50,"text":124154},{"id":124212,"depth":42,"text":124213},{"id":124513,"depth":42,"text":124514,"children":125503},[125504,125505,125506,125507,125508,125509,125510,125511],{"id":124517,"depth":50,"text":124518},{"id":124529,"depth":50,"text":124530},{"id":124741,"depth":50,"text":124742},{"id":124765,"depth":50,"text":124766},{"id":124831,"depth":50,"text":124832},{"id":124925,"depth":50,"text":124926},{"id":124932,"depth":50,"text":124933},{"id":124956,"depth":50,"text":124957},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122212,"description":131},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125518,"title":125519,"body":125520,"description":131,"extension":132,"meta":125524,"navigation":134,"path":125525,"seo":125526,"stem":125527,"__hash__":125528},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125521,"toc":125522},[],{"title":23,"searchDepth":42,"depth":42,"links":125523},[],{"category":30314},"\u002Fwiki\u002F2025-01-27-linux",{"title":125519,"description":131},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125530,"title":125531,"body":125532,"description":125536,"extension":132,"meta":125927,"navigation":134,"path":125928,"seo":125929,"stem":125930,"__hash__":125931},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125533,"toc":125925},[125534,125537,125541,125558,125561,125614,125618,125620,125660,125669,125673,125676,125917,125922],[14,125535,125536],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125538,125540],{"id":125539},"_1ubuntu环境配置","1.Ubuntu环境配置",[161,125542,125543,125546,125549,125552,125555],{},[119,125544,125545],{},"ubuntu环境换源",[119,125547,125548],{},"安装cuda",[119,125550,125551],{},"安装miniconda",[119,125553,125554],{},"安装pytorch",[119,125556,125557],{},"安装genesis",[14,125559,125560],{},"参考链接：",[18,125562,125564],{"className":20,"code":125563,"language":22,"meta":23,"style":23},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[25,125565,125566],{"__ignoreMap":23},[28,125567,125568,125571,125574,125577,125579,125582,125585,125587,125590,125593,125595,125598,125601,125603,125606,125609,125611],{"class":30,"line":31},[28,125569,125570],{"class":34},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[28,125572,125573],{"class":64},"=blogdetail",[28,125575,125576],{"class":211},"&sharetype",[28,125578,257],{"class":207},[28,125580,125581],{"class":64},"blogdetail",[28,125583,125584],{"class":211},"&sharerId",[28,125586,257],{"class":207},[28,125588,125589],{"class":64},"144728092",[28,125591,125592],{"class":211},"&sharerefer",[28,125594,257],{"class":207},[28,125596,125597],{"class":64},"PC",[28,125599,125600],{"class":211},"&sharesource",[28,125602,257],{"class":207},[28,125604,125605],{"class":64},"qq_69379513",[28,125607,125608],{"class":211},"&sharefrom",[28,125610,257],{"class":207},[28,125612,125613],{"class":64},"from_link\n",[10,125615,125617],{"id":125616},"_2genesis-报错issue","2.Genesis 报错issue",[14,125619,125560],{},[18,125621,125622],{"className":20,"code":125563,"language":22,"meta":23,"style":23},[25,125623,125624],{"__ignoreMap":23},[28,125625,125626,125628,125630,125632,125634,125636,125638,125640,125642,125644,125646,125648,125650,125652,125654,125656,125658],{"class":30,"line":31},[28,125627,125570],{"class":34},[28,125629,125573],{"class":64},[28,125631,125576],{"class":211},[28,125633,257],{"class":207},[28,125635,125581],{"class":64},[28,125637,125584],{"class":211},[28,125639,257],{"class":207},[28,125641,125589],{"class":64},[28,125643,125592],{"class":211},[28,125645,257],{"class":207},[28,125647,125597],{"class":64},[28,125649,125600],{"class":211},[28,125651,257],{"class":207},[28,125653,125605],{"class":64},[28,125655,125608],{"class":211},[28,125657,257],{"class":207},[28,125659,125613],{"class":64},[18,125661,125663],{"className":20,"code":125662,"language":22,"meta":23,"style":23},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[25,125664,125665],{"__ignoreMap":23},[28,125666,125667],{"class":30,"line":31},[28,125668,125662],{"class":34},[10,125670,125672],{"id":125671},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125674,125675],{},"hello_robot.py",[18,125677,125679],{"className":30429,"code":125678,"language":30431,"meta":23,"style":23},"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",[25,125680,125681,125687,125702,125706,125718,125730,125734,125747,125751,125770,125780,125790,125804,125808,125812,125817,125821,125831,125838,125852,125859,125869,125874,125878,125896,125901,125905,125912],{"__ignoreMap":23},[28,125682,125683,125685],{"class":30,"line":31},[28,125684,30443],{"class":207},[28,125686,45356],{"class":211},[28,125688,125689,125692,125695,125697,125699],{"class":30,"line":42},[28,125690,125691],{"class":211},"os.environ[",[28,125693,125694],{"class":64},"'PYOPENGL_PLATFORM'",[28,125696,4520],{"class":211},[28,125698,257],{"class":207},[28,125700,125701],{"class":64}," 'glx'\n",[28,125703,125704],{"class":30,"line":50},[28,125705,2477],{"emptyLinePlaceholder":134},[28,125707,125708,125710,125713,125715],{"class":30,"line":58},[28,125709,30443],{"class":207},[28,125711,125712],{"class":211}," genesis ",[28,125714,31434],{"class":207},[28,125716,125717],{"class":211}," gs\n",[28,125719,125720,125722,125725,125727],{"class":30,"line":70},[28,125721,30788],{"class":207},[28,125723,125724],{"class":211}," pynput ",[28,125726,30443],{"class":207},[28,125728,125729],{"class":211}," keyboard\n",[28,125731,125732],{"class":30,"line":78},[28,125733,2477],{"emptyLinePlaceholder":134},[28,125735,125736,125739,125742,125744],{"class":30,"line":86},[28,125737,125738],{"class":211},"gs.init(",[28,125740,125741],{"class":5293},"backend",[28,125743,257],{"class":207},[28,125745,125746],{"class":211},"gs.gpu)\n",[28,125748,125749],{"class":30,"line":97},[28,125750,2477],{"emptyLinePlaceholder":134},[28,125752,125753,125756,125758,125761,125764,125766,125768],{"class":30,"line":108},[28,125754,125755],{"class":211},"scene ",[28,125757,257],{"class":207},[28,125759,125760],{"class":211}," gs.Scene(",[28,125762,125763],{"class":5293},"show_viewer",[28,125765,257],{"class":207},[28,125767,31527],{"class":38},[28,125769,218],{"class":211},[28,125771,125772,125775,125777],{"class":30,"line":1407},[28,125773,125774],{"class":211},"plane ",[28,125776,257],{"class":207},[28,125778,125779],{"class":211}," scene.add_entity(gs.morphs.Plane())\n",[28,125781,125782,125785,125787],{"class":30,"line":1690},[28,125783,125784],{"class":211},"franka ",[28,125786,257],{"class":207},[28,125788,125789],{"class":211}," scene.add_entity(\n",[28,125791,125792,125795,125797,125799,125802],{"class":30,"line":1695},[28,125793,125794],{"class":211},"    gs.morphs.MJCF(",[28,125796,45405],{"class":5293},[28,125798,257],{"class":207},[28,125800,125801],{"class":64},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[28,125803,38098],{"class":211},[28,125805,125806],{"class":30,"line":1701},[28,125807,218],{"class":211},[28,125809,125810],{"class":30,"line":1706},[28,125811,2477],{"emptyLinePlaceholder":134},[28,125813,125814],{"class":30,"line":1720},[28,125815,125816],{"class":211},"scene.build()\n",[28,125818,125819],{"class":30,"line":1725},[28,125820,2477],{"emptyLinePlaceholder":134},[28,125822,125823,125825,125828],{"class":30,"line":1731},[28,125824,31998],{"class":207},[28,125826,125827],{"class":34}," on_press",[28,125829,125830],{"class":211},"(key):\n",[28,125832,125833,125836],{"class":30,"line":1752},[28,125834,125835],{"class":207},"    try",[28,125837,3816],{"class":211},[28,125839,125840,125842,125845,125847,125850],{"class":30,"line":1757},[28,125841,2574],{"class":207},[28,125843,125844],{"class":211}," key.char ",[28,125846,3026],{"class":207},[28,125848,125849],{"class":64}," 'q'",[28,125851,3816],{"class":211},[28,125853,125854,125856],{"class":30,"line":1771},[28,125855,15809],{"class":207},[28,125857,125858],{"class":38}," False\n",[28,125860,125861,125864,125867],{"class":30,"line":1776},[28,125862,125863],{"class":207},"    except",[28,125865,125866],{"class":38}," AttributeError",[28,125868,3816],{"class":211},[28,125870,125871],{"class":30,"line":1805},[28,125872,125873],{"class":207},"        pass\n",[28,125875,125876],{"class":30,"line":1810},[28,125877,2477],{"emptyLinePlaceholder":134},[28,125879,125880,125883,125885,125888,125891,125893],{"class":30,"line":1827},[28,125881,125882],{"class":211},"listener ",[28,125884,257],{"class":207},[28,125886,125887],{"class":211}," keyboard.Listener(",[28,125889,125890],{"class":5293},"on_press",[28,125892,257],{"class":207},[28,125894,125895],{"class":211},"on_press)\n",[28,125897,125898],{"class":30,"line":1832},[28,125899,125900],{"class":211},"listener.start()\n",[28,125902,125903],{"class":30,"line":1837},[28,125904,2477],{"emptyLinePlaceholder":134},[28,125906,125907,125909],{"class":30,"line":1842},[28,125908,108714],{"class":207},[28,125910,125911],{"class":211}," listener.running:\n",[28,125913,125914],{"class":30,"line":1856},[28,125915,125916],{"class":211},"    scene.step()\n",[14,125918,125919],{},[1540,125920],{"alt":23,"src":125921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[126,125923,125924],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":23,"searchDepth":42,"depth":42,"links":125926},[],{"category":23455},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125531,"description":125536},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125933,"title":125934,"body":125935,"description":131,"extension":132,"meta":125950,"navigation":134,"path":125951,"seo":125952,"stem":125953,"__hash__":125954},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125936,"toc":125947},[125937,125940,125944],[10,125938,125934],{"id":125939},"_1-基础知识",[149,125941,125943],{"id":125942},"_11-js的组成","1.1 js的组成",[14,125945,125946],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":23,"searchDepth":42,"depth":42,"links":125948},[125949],{"id":125942,"depth":42,"text":125943},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125934,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125956,"title":125957,"body":125958,"description":131,"extension":132,"meta":126097,"navigation":134,"path":126098,"seo":126099,"stem":126100,"__hash__":126101},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125959,"toc":126085},[125960,125963,125967,125970,125974,125984,125988,125991,125994,125997,126001,126008,126014,126018,126024,126035,126039,126042,126046,126049,126053,126056,126060,126063,126067,126070,126073,126076,126079,126082],[10,125961,125957],{"id":125962},"_2-vscode必备内容",[149,125964,125966],{"id":125965},"_21-标签分类","2.1 标签分类",[14,125968,125969],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[149,125971,125973],{"id":125972},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125975,125976,125977,125979,125980,125983],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[25,125978,436],{}," 然后按 ",[25,125981,125982],{},"Tab","，快速自动生成基本结构。",[149,125985,125987],{"id":125986},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125989,125990],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125992,125993],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125995,125996],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[149,125998,126000],{"id":125999},"_24-视图缩放","2.4 视图缩放",[14,126002,126003,126004,126007],{},"缩放视图 ",[25,126005,126006],{},"ctrl+"," 可实现代码增大。",[14,126009,126010,126013],{},[25,126011,126012],{},"ctrl-"," 可实现代码减小。",[149,126015,126017],{"id":126016},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,126019,126020,126021,28436],{},"VSCode 新建文件快捷键为 ",[25,126022,126023],{},"ctrl+N",[14,126025,126026,126027,126030,126031,126034],{},"保存快捷键为 ",[25,126028,126029],{},"ctrl+S","，将文本保存为 ",[25,126032,126033],{},".html"," 文件。",[149,126036,126038],{"id":126037},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,126040,126041],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[149,126043,126045],{"id":126044},"_27-vscode-icons","2.7 vscode-icons",[14,126047,126048],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[149,126050,126052],{"id":126051},"_28-easy-less","2.8 Easy LESS",[14,126054,126055],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[149,126057,126059],{"id":126058},"_29-会了吧插件","2.9 会了吧插件",[14,126061,126062],{},"会了吧插件可以展示代码中英语单词的意思。",[149,126064,126066],{"id":126065},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126068,126069],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126071,126072],{},"②选定多个相同的单词:ctrl+D",[14,126074,126075],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126077,126078],{},"④全局替换某些单词:ctrl+h",[14,126080,126081],{},"⑤快速定位到某一行:ctrl+g",[14,126083,126084],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":23,"searchDepth":42,"depth":42,"links":126086},[126087,126088,126089,126090,126091,126092,126093,126094,126095,126096],{"id":125965,"depth":42,"text":125966},{"id":125972,"depth":42,"text":125973},{"id":125986,"depth":42,"text":125987},{"id":125999,"depth":42,"text":126000},{"id":126016,"depth":42,"text":126017},{"id":126037,"depth":42,"text":126038},{"id":126044,"depth":42,"text":126045},{"id":126051,"depth":42,"text":126052},{"id":126058,"depth":42,"text":126059},{"id":126065,"depth":42,"text":126066},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125957,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126103,"title":126104,"body":126105,"description":131,"extension":132,"meta":126264,"navigation":134,"path":126265,"seo":126266,"stem":126267,"__hash__":126268},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126106,"toc":126256},[126107,126110,126114,126124,126130,126136,126140,126149,126153,126158,126161,126164,126168,126171,126181,126190,126199,126208,126218,126225,126230,126235,126248],[10,126108,126104],{"id":126109},"_3-html文本与容器标签",[149,126111,126113],{"id":126112},"_31-标题标签","3.1 标题标签",[14,126115,126116,126119,126120,126123],{},[25,126117,126118],{},"\u003Ch1>","我是一级标签",[25,126121,126122],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126125,126126,126119,126128],{},[25,126127,126118],{},[25,126129,126122],{},[14,126131,123386,126132,126135],{},[25,126133,126134],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[149,126137,126139],{"id":126138},"_32-段落标签","3.2 段落标签",[14,126141,126142,126145,126146],{},[25,126143,126144],{},"\u003Cp>","....",[25,126147,126148],{},"\u003C\u002Fp>",[149,126150,126152],{"id":126151},"_33-换行标签","3.3 换行标签",[14,126154,126155],{},[25,126156,126157],{},"\u003Cbr \u002F>",[14,126159,126160],{},"具有强制换行的作用",[14,126162,126163],{},"单标签",[149,126165,126167],{"id":126166},"_34-文本格式化标签","3.4 文本格式化标签",[14,126169,126170],{},"提供粗体、斜体和下划线等效果",[14,126172,126173,126174,82590,126177,126180],{},"加粗：",[25,126175,126176],{},"\u003Cstrong>...\u003C\u002Fstrong>",[25,126178,126179],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126182,126183,126184,82590,126187,126180],{},"斜体：",[25,126185,126186],{},"\u003Cem>...\u003C\u002Fem>",[25,126188,126189],{},"\u003Ci>...\u003C\u002Fi>",[14,126191,126192,126193,82590,126196,126180],{},"删除线：",[25,126194,126195],{},"\u003Cdel>...\u003C\u002Fdel>",[25,126197,126198],{},"\u003Cs>...\u003C\u002Fs>",[14,126200,126201,126202,82590,126205,126180],{},"下划线：",[25,126203,126204],{},"\u003Cins>...\u003C\u002Fins>",[25,126206,126207],{},"\u003Cu>...\u003C\u002Fu>",[149,126209,126211,126212,18487,126215,102744],{"id":126210},"_35-div和span标签","3.5 ",[25,126213,126214],{},"\u003Cdiv>",[25,126216,126217],{},"\u003Cspan>",[14,126219,126220,101069,126222,126224],{},[25,126221,126214],{},[25,126223,126217],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126226,126227],{},[25,126228,126229],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126231,126232],{},[25,126233,126234],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126236,126237,126238,126240,126241,126243,126244,126247],{},"两者特点：①",[25,126239,126214],{}," 标签用来布局，但一行通常只放一个 ",[25,126242,126214],{},"。可以理解为一个大盒子，独占一行，在 ",[25,126245,126246],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126249,77300,126250,126252,126253,126255],{},[25,126251,126217],{}," 标签也可用于布局，一行可以放多个 ",[25,126254,126217],{},"，可理解为小盒子。",{"title":23,"searchDepth":42,"depth":42,"links":126257},[126258,126259,126260,126261,126262],{"id":126112,"depth":42,"text":126113},{"id":126138,"depth":42,"text":126139},{"id":126151,"depth":42,"text":126152},{"id":126166,"depth":42,"text":126167},{"id":126210,"depth":42,"text":126263},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126104,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126270,"title":126271,"body":126272,"description":131,"extension":132,"meta":126469,"navigation":134,"path":126470,"seo":126471,"stem":126472,"__hash__":126473},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126273,"toc":126461},[126274,126277,126281,126284,126290,126297,126303,126309,126312,126315,126318,126321,126324,126327,126330,126334,126337,126340,126343,126349,126355,126361,126368,126372,126378,126384,126387,126390,126396,126402,126408,126411,126414,126418,126421,126431,126437,126441,126450,126454,126457],[10,126275,126271],{"id":126276},"_4-html图像与链接",[149,126278,126280],{"id":126279},"_41-图像标签","4.1 图像标签",[14,126282,126283],{},"（1）标签",[14,126285,126286,126289],{},[25,126287,126288],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126291,126292,126293,126296],{},"src是",[25,126294,126295],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126298,126299,126300],{},"alt:文本，替换文本。图像不能显示的文字 ",[25,126301,126302],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126304,126305,126306],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[25,126307,126308],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126310,126311],{},"width:像素，设置图像的宽度",[14,126313,126314],{},"height:像素，设置图像的高度",[14,126316,126317],{},"border：像素，设置图像的边框粗细",[14,126319,126320],{},"（2）图像标签属性的注意点：",[14,126322,126323],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126325,126326],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126328,126329],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[149,126331,126333],{"id":126332},"_42-路径注意要点","4.2 路径注意要点：",[14,126335,126336],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126338,126339],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126341,126342],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126344,126345,126346],{},"①同一级路径：图像文件位于HTML文件同一级，如",[25,126347,126348],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126350,126351,126352],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[25,126353,126354],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126356,126357,126358],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[25,126359,126360],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126362,126363,126364,461],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[448,126365,126366],{"href":126366,"rel":126367},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23940],[149,126369,126371],{"id":126370},"_43-超链接标签","4.3 超链接标签",[14,126373,126374,126377],{},[25,126375,126376],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126379,126380,126381],{},"①语法格式：",[25,126382,126383],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126385,126386],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126388,126389],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126391,126392,126393],{},"③链接分类：外部链接：",[25,126394,126395],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126397,126398,126399],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[25,126400,126401],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126403,126404,126405],{},"空链接：如果当时没有确定链接目标时，",[25,126406,126407],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126409,126410],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126412,126413],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[149,126415,126417],{"id":126416},"_44-锚点链接","4.4 锚点链接",[14,126419,126420],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126422,126423,126424,126427,126428],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[25,126425,126426],{},"\u003Ca href=\"#two\">","第二级",[25,126429,126430],{},"\u003C\u002Fa>",[14,126432,126433,126434],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[25,126435,126436],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[149,126438,126440],{"id":126439},"_45-注释标签","4.5 注释标签",[14,126442,126443,126446,126447],{},[25,126444,126445],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[25,126448,126449],{},"ctrl+\u002F",[149,126451,126453],{"id":126452},"_46-特殊字符","4.6 特殊字符",[14,126455,126456],{},"可以实现添加多个空格",[1540,126458],{"style":126459,"src":126460},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":23,"searchDepth":42,"depth":42,"links":126462},[126463,126464,126465,126466,126467,126468],{"id":126279,"depth":42,"text":126280},{"id":126332,"depth":42,"text":126333},{"id":126370,"depth":42,"text":126371},{"id":126416,"depth":42,"text":126417},{"id":126439,"depth":42,"text":126440},{"id":126452,"depth":42,"text":126453},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126271,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126475,"title":126476,"body":126477,"description":131,"extension":132,"meta":126770,"navigation":134,"path":126771,"seo":126772,"stem":126773,"__hash__":126774},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126478,"toc":126761},[126479,126482,126486,126489,126492,126495,126498,126501,126504,126507,126510,126513,126533,126539,126543,126546,126549,126552,126555,126558,126561,126565,126568,126571,126574,126577,126590,126595,126598,126601,126616,126619,126622,126625,126628,126631,126635,126638,126645,126648,126651,126654,126657,126660,126666,126669,126672,126678,126681,126684,126687,126693,126696,126699,126713,126720,126723,126726,126733,126742,126745,126748,126751,126755,126758],[10,126480,126476],{"id":126481},"_5-html表格列表与表单",[149,126483,126485],{"id":126484},"_51-表格标签","5.1 表格标签",[14,126487,126488],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126490,126491],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126493,126494],{},"②表格基本语法：",[1540,126496],{"style":126459,"src":126497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126499,126500],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1540,126502],{"style":126459,"src":126503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126505,126506],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1540,126508],{"style":126459,"src":126509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126511,126512],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126514,126515,126518,126519,126521,126522,126525,126526,126528,126529,126532],{},[25,126516,126517],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[25,126520,126517],{},"内部必须拥有",[25,126523,126524],{},"\u003Ctr>","标签，一般位于第一行，",[25,126527,126517],{},"比",[25,126530,126531],{},"\u003Cth>","范围广",[14,126534,126535,126538],{},[25,126536,126537],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[149,126540,126542],{"id":126541},"_52-合并单元格","5.2 合并单元格",[14,126544,126545],{},"（1）合并单元格方式：",[14,126547,126548],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126550,126551],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126553,126554],{},"（2）目标单元格：",[14,126556,126557],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126559,126560],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[149,126562,126564],{"id":126563},"_53-列表标签","5.3 列表标签",[14,126566,126567],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126569,126570],{},"①无序列表：",[1540,126572],{"style":126459,"src":126573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126575,126576],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126578,126579,126582,126583,126586,126587,126589],{},[25,126580,126581],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[25,126584,126585],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[25,126588,126581],{},"中输入其他标签或文字是不对的",[14,126591,126592,126594],{},[25,126593,126585],{},"之间相当于一个容器，可以容纳所有元素",[14,126596,126597],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126599,126600],{},"在css中去除前边的小圆点采用如下代码:",[18,126602,126606],{"className":126603,"code":126604,"language":126605,"meta":23,"style":23},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[25,126607,126608],{"__ignoreMap":23},[28,126609,126610,126613],{"class":30,"line":31},[28,126611,126612],{"class":51351},"list-style",[28,126614,126615],{"class":211},": none;\n",[14,126617,126618],{},"②有序列表：",[1540,126620],{"style":126459,"src":126621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126623,126624],{},"③自定义列表：",[1540,126626],{"style":126459,"src":126627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1540,126629],{"style":126459,"src":126630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[149,126632,126634],{"id":126633},"_54-表单标签","5.4 表单标签",[14,126636,126637],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126639,126640,126641,126644],{},"（1）表单域：包含单元素的区域，",[25,126642,126643],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1540,126646],{"style":126459,"src":126647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126649,126650],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126652,126653],{},"表单元素提交必须有name属性",[14,126655,126656],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126658,126659],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126661,77277,126662,126665],{},[25,126663,126664],{},"\u003Cinput>","输入表单元素",[1540,126667],{"style":126459,"src":126668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1540,126670],{"style":126459,"src":126671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126673,126674,126675],{},"单选按钮：",[25,126676,126677],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1540,126679],{"style":126459,"src":126680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126682,126683],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1540,126685],{"style":126459,"src":126686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126688,126689,126692],{},[359,126690,126691],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126694,126695],{},"②select下拉表单元素：可以节约页面控件",[1540,126697],{"style":126459,"src":126698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126700,126701,13872,126703,126706,126707,126709,126710,126712],{},[359,126702,241],{},[25,126704,126705],{},"\u003Cselect>","中至少包含一对",[25,126708,102765],{},"；在",[25,126711,102765],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126714,126715,126716,126719],{},"③",[25,126717,126718],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1540,126721],{"style":126459,"src":126722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126724,126725],{},"3行20列",[149,126727,126729,126730,102744],{"id":126728},"_55-lable标签","5.5 ",[25,126731,126732],{},"\u003Clable>",[14,126734,126735,126736,126738,126739,126741],{},"它不是表单标签，但常常与表单标签搭配使用，",[25,126737,126732],{},"标签用于绑定一个表单标签，当点击",[25,126740,126732],{},"标签内的文本",[14,126743,126744],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1540,126746],{"style":126459,"src":126747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1540,126749],{"style":126459,"src":126750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[149,126752,126754],{"id":126753},"_56-实例","5.6 实例",[1540,126756],{"style":126459,"src":126757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[126,126759,126760],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":42,"depth":42,"links":126762},[126763,126764,126765,126766,126767,126769],{"id":126484,"depth":42,"text":126485},{"id":126541,"depth":42,"text":126542},{"id":126563,"depth":42,"text":126564},{"id":126633,"depth":42,"text":126634},{"id":126728,"depth":42,"text":126768},"5.5 \u003Clable>标签",{"id":126753,"depth":42,"text":126754},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126476,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126776,"title":126777,"body":126778,"description":131,"extension":132,"meta":127327,"navigation":134,"path":127328,"seo":127329,"stem":127330,"__hash__":127331},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126779,"toc":127302},[126780,126783,126787,126790,126793,126797,126800,126803,126806,126809,126812,126815,126818,126822,126825,126829,126832,126835,126838,126842,126845,126848,126851,126857,126860,126863,126866,126869,126872,126875,126878,126911,126915,126918,126921,126924,126928,126931,126934,126937,126940,126943,126947,126950,126953,126956,126960,126963,126967,126970,126974,126977,126982,126986,126989,126993,126996,126999,127002,127005,127032,127035,127039,127042,127045,127050,127053,127056,127060,127063,127068,127071,127074,127077,127081,127084,127087,127090,127094,127097,127100,127103,127107,127111,127114,127154,127157,127161,127168,127171,127175,127178,127224,127228,127231,127234,127237,127265,127269,127272,127299],[10,126781,126777],{"id":126782},"_6-css语法与文本样式",[149,126784,126786],{"id":126785},"_61-css语法规范","6.1 css语法规范",[14,126788,126789],{},"由两部分组成，选择器及一条或多条声明",[1540,126791],{"style":126459,"src":126792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126794,126795],{},[359,126796,241],{},[14,126798,126799],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126801,126802],{},"②属性与属性值以“键值对”的形式出现",[14,126804,126805],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126807,126808],{},"④属性和属性值之间用英文“;”分开",[1540,126810],{"style":126459,"src":126811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1540,126813],{"style":126459,"src":126814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1540,126816],{"style":126459,"src":126817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[149,126819,126821],{"id":126820},"_62-css选择器","6.2 css选择器",[14,126823,126824],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[177,126826,126828],{"id":126827},"_621-标签选择器","6.2.1 标签选择器",[14,126830,126831],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126833,126834],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1540,126836],{"style":126459,"src":126837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[177,126839,126841],{"id":126840},"_622-类选择器","6.2.2 类选择器",[14,126843,126844],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126846,126847],{},"②样例",[1540,126849],{"style":126459,"src":126850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126852,126853,126854,126856],{},"③ ",[359,126855,126691],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126858,126859],{},"可以理解为给这个标签起了个名字，来表示；",[14,126861,126862],{},"长名称或词组可以使用横线来为选择器命名；",[14,126864,126865],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126867,126868],{},"命名要有意义；",[1540,126870],{"style":126459,"src":126871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126873,126874],{},"类选择器也可以指定特殊的元素p.center{}",[14,126876,126877],{},"p.center和.center都对",[18,126879,126881],{"className":126603,"code":126880,"language":126605,"meta":23,"style":23},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[25,126882,126883,126888,126897,126907],{"__ignoreMap":23},[28,126884,126885],{"class":30,"line":31},[28,126886,126887],{"class":269},"\u002F* 类选择器指定特殊元素 *\u002F\n",[28,126889,126890,126892,126895],{"class":30,"line":42},[28,126891,14],{"class":51351},[28,126893,126894],{"class":34},".center",[28,126896,15649],{"class":211},[28,126898,126899,126901,126903,126905],{"class":30,"line":50},[28,126900,70577],{"class":38},[28,126902,51488],{"class":211},[28,126904,51643],{"class":38},[28,126906,1370],{"class":211},[28,126908,126909],{"class":30,"line":58},[28,126910,1643],{"class":211},[177,126912,126914],{"id":126913},"_623-多类名使用","6.2.3 多类名使用",[14,126916,126917],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1540,126919],{"style":126459,"src":126920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126922,126923],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[177,126925,126927],{"id":126926},"_624-id选择器","6.2.4 id选择器",[14,126929,126930],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126932,126933],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1540,126935],{"style":126459,"src":126936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126938,126939],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126941,126942],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[177,126944,126946],{"id":126945},"_625-通配符选择器","6.2.5 通配符选择器",[14,126948,126949],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126951,126952],{},"* {",[14,126954,126955],{},"color=\"red\"}",[177,126957,126959],{"id":126958},"_626-总结","6.2.6 总结",[1540,126961],{"style":126459,"src":126962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[149,126964,126966],{"id":126965},"_63-css字体属性","6.3 css字体属性",[14,126968,126969],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[177,126971,126973],{"id":126972},"_631-字体系列","6.3.1 字体系列",[14,126975,126976],{},"font-family: '宋体';",[14,126978,126979,126981],{},[359,126980,241],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[177,126983,126985],{"id":126984},"_632-字体大小","6.3.2 字体大小",[14,126987,126988],{},"font-size: 20px",[14,126990,126991,26524],{},[359,126992,126691],{},[14,126994,126995],{},"①px（像素）大小是网页的最常用单位",[14,126997,126998],{},"②谷歌浏览器默认为16px",[14,127000,127001],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,127003,127004],{},"④可以给body指定整个页面的大小：会自动引用",[18,127006,127008],{"className":126603,"code":127007,"language":126605,"meta":23,"style":23},"body {\n  font-size: 16px;\n}\n",[25,127009,127010,127016,127028],{"__ignoreMap":23},[28,127011,127012,127014],{"class":30,"line":31},[28,127013,51851],{"class":51351},[28,127015,15649],{"class":211},[28,127017,127018,127020,127022,127024,127026],{"class":30,"line":42},[28,127019,70677],{"class":38},[28,127021,51488],{"class":211},[28,127023,811],{"class":38},[28,127025,51543],{"class":207},[28,127027,1370],{"class":211},[28,127029,127030],{"class":30,"line":50},[28,127031,1643],{"class":211},[14,127033,127034],{},"⑤标题标签比较特殊，需要单独指定大小",[177,127036,127038],{"id":127037},"_633-字体粗细","6.3.3 字体粗细",[14,127040,127041],{},"font-weight: bold;",[14,127043,127044],{},"font-weight: 100；",[14,127046,127047,127049],{},[359,127048,241],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,127051,127052],{},"font-weight= 400;",[14,127054,127055],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[177,127057,127059],{"id":127058},"_634-文字样式","6.3.4 文字样式",[14,127061,127062],{},"font-style: normal；",[14,127064,127065,26524],{},[359,127066,127067],{},"属性值",[14,127069,127070],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127072,127073],{},"②italic：浏览器会显示斜体的字体样式",[1540,127075],{"style":126459,"src":127076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[177,127078,127080],{"id":127079},"_635-字体符合属性","6.3.5 字体符合属性",[1540,127082],{"style":126459,"src":127083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1540,127085],{"style":126459,"src":127086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127088,127089],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127091,127092,26524],{},[359,127093,126691],{},[14,127095,127096],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127098,127099],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127101,127102],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[149,127104,127106],{"id":127105},"_64-css-test文本属性","6.4 css test文本属性",[177,127108,127110],{"id":127109},"_641-文本颜色","6.4.1 文本颜色",[14,127112,127113],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[18,127115,127117],{"className":126603,"code":127116,"language":126605,"meta":23,"style":23},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[25,127118,127119,127124,127130,127140,127145,127150],{"__ignoreMap":23},[28,127120,127121],{"class":30,"line":31},[28,127122,127123],{"class":269},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[28,127125,127126,127128],{"class":30,"line":42},[28,127127,14],{"class":51351},[28,127129,15649],{"class":211},[28,127131,127132,127134,127136,127138],{"class":30,"line":50},[28,127133,70956],{"class":38},[28,127135,51488],{"class":211},[28,127137,57472],{"class":38},[28,127139,1370],{"class":211},[28,127141,127142],{"class":30,"line":58},[28,127143,127144],{"class":269},"  \u002F* color: #ff0000; *\u002F\n",[28,127146,127147],{"class":30,"line":70},[28,127148,127149],{"class":269},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[28,127151,127152],{"class":30,"line":78},[28,127153,1643],{"class":211},[1540,127155],{"style":126459,"src":127156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[177,127158,127160],{"id":127159},"_642-对齐文本","6.4.2 对齐文本",[14,127162,127163,127164,127167],{},"text-align属于用于设置元素内文本内容的 ",[359,127165,127166],{},"水平对齐"," 方式",[14,127169,127170],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[177,127172,127174],{"id":127173},"_643-装饰文本","6.4.3 装饰文本",[14,127176,127177],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[18,127179,127181],{"className":126603,"code":127180,"language":126605,"meta":23,"style":23},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[25,127182,127183,127189,127199,127203,127209,127220],{"__ignoreMap":23},[28,127184,127185,127187],{"class":30,"line":31},[28,127186,448],{"class":51351},[28,127188,15649],{"class":211},[28,127190,127191,127193,127195,127197],{"class":30,"line":42},[28,127192,70553],{"class":38},[28,127194,51488],{"class":211},[28,127196,54788],{"class":38},[28,127198,1370],{"class":211},[28,127200,127201],{"class":30,"line":50},[28,127202,1643],{"class":211},[28,127204,127205,127207],{"class":30,"line":58},[28,127206,14],{"class":51351},[28,127208,15649],{"class":211},[28,127210,127211,127213,127215,127218],{"class":30,"line":70},[28,127212,70553],{"class":38},[28,127214,51488],{"class":211},[28,127216,127217],{"class":38},"underline",[28,127219,1370],{"class":211},[28,127221,127222],{"class":30,"line":78},[28,127223,1643],{"class":211},[177,127225,127227],{"id":127226},"_644-文本缩进","6.4.4 文本缩进",[14,127229,127230],{},"实现文本的第一行首行缩进自己指定的距离",[14,127232,127233],{},"20px往右边走；-20px往左边走",[14,127235,127236],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[18,127238,127240],{"className":126603,"code":127239,"language":126605,"meta":23,"style":23},"p {\n  text-indent: 2em;\n}\n",[25,127241,127242,127248,127261],{"__ignoreMap":23},[28,127243,127244,127246],{"class":30,"line":31},[28,127245,14],{"class":51351},[28,127247,15649],{"class":211},[28,127249,127250,127253,127255,127257,127259],{"class":30,"line":42},[28,127251,127252],{"class":38},"  text-indent",[28,127254,51488],{"class":211},[28,127256,288],{"class":38},[28,127258,23630],{"class":207},[28,127260,1370],{"class":211},[28,127262,127263],{"class":30,"line":50},[28,127264,1643],{"class":211},[177,127266,127268],{"id":127267},"_645-行间距","6.4.5 行间距",[14,127270,127271],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[18,127273,127275],{"className":126603,"code":127274,"language":126605,"meta":23,"style":23},"p {\n  line-height: 1.6;\n}\n",[25,127276,127277,127283,127295],{"__ignoreMap":23},[28,127278,127279,127281],{"class":30,"line":31},[28,127280,14],{"class":51351},[28,127282,15649],{"class":211},[28,127284,127285,127288,127290,127293],{"class":30,"line":42},[28,127286,127287],{"class":38},"  line-height",[28,127289,51488],{"class":211},[28,127291,127292],{"class":38},"1.6",[28,127294,1370],{"class":211},[28,127296,127297],{"class":30,"line":50},[28,127298,1643],{"class":211},[126,127300,127301],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":23,"searchDepth":42,"depth":42,"links":127303},[127304,127305,127313,127320],{"id":126785,"depth":42,"text":126786},{"id":126820,"depth":42,"text":126821,"children":127306},[127307,127308,127309,127310,127311,127312],{"id":126827,"depth":50,"text":126828},{"id":126840,"depth":50,"text":126841},{"id":126913,"depth":50,"text":126914},{"id":126926,"depth":50,"text":126927},{"id":126945,"depth":50,"text":126946},{"id":126958,"depth":50,"text":126959},{"id":126965,"depth":42,"text":126966,"children":127314},[127315,127316,127317,127318,127319],{"id":126972,"depth":50,"text":126973},{"id":126984,"depth":50,"text":126985},{"id":127037,"depth":50,"text":127038},{"id":127058,"depth":50,"text":127059},{"id":127079,"depth":50,"text":127080},{"id":127105,"depth":42,"text":127106,"children":127321},[127322,127323,127324,127325,127326],{"id":127109,"depth":50,"text":127110},{"id":127159,"depth":50,"text":127160},{"id":127173,"depth":50,"text":127174},{"id":127226,"depth":50,"text":127227},{"id":127267,"depth":50,"text":127268},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126777,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127333,"title":127334,"body":127335,"description":131,"extension":132,"meta":127984,"navigation":134,"path":127985,"seo":127986,"stem":127987,"__hash__":127988},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127336,"toc":127965},[127337,127340,127344,127348,127408,127412,127422,127425,127428,127432,127457,127461,127464,127467,127470,127473,127476,127480,127483,127486,127528,127531,127557,127563,127566,127570,127574,127580,127583,127586,127589,127592,127595,127598,127643,127647,127650,127653,127657,127661,127690,127693,127698,127701,127704,127707,127710,127714,127718,127721,127723,127726,127730,127733,127737,127740,127743,127746,127750,127754,127760,127770,127773,127776,127779,127782,127785,127908,127916,127924,127962],[10,127338,127334],{"id":127339},"_7-css引入方式与选择器进阶",[149,127341,127343],{"id":127342},"_71-css引入方式","7.1 css引入方式",[177,127345,127347],{"id":127346},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[18,127349,127353],{"className":127350,"code":127351,"language":127352,"meta":23,"style":23},"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",[25,127354,127355,127363,127370,127382,127395,127400],{"__ignoreMap":23},[28,127356,127357,127359,127361],{"class":30,"line":31},[28,127358,1120],{"class":211},[28,127360,126],{"class":51351},[28,127362,51358],{"class":211},[28,127364,127365,127368],{"class":30,"line":42},[28,127366,127367],{"class":51351},"  h1",[28,127369,15649],{"class":211},[28,127371,127372,127375,127377,127380],{"class":30,"line":50},[28,127373,127374],{"class":38},"    color",[28,127376,51488],{"class":211},[28,127378,127379],{"class":38},"blue",[28,127381,1370],{"class":211},[28,127383,127384,127387,127389,127391,127393],{"class":30,"line":58},[28,127385,127386],{"class":38},"    font-size",[28,127388,51488],{"class":211},[28,127390,1010],{"class":38},[28,127392,51543],{"class":207},[28,127394,1370],{"class":211},[28,127396,127397],{"class":30,"line":70},[28,127398,127399],{"class":211},"  }\n",[28,127401,127402,127404,127406],{"class":30,"line":78},[28,127403,51836],{"class":211},[28,127405,126],{"class":51351},[28,127407,51358],{"class":211},[14,127409,127410,26524],{},[359,127411,126691],{},[14,127413,77277,127414,127417,127418,127421],{},[25,127415,127416],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[25,127419,127420],{},"\u003Chead>","标签中",[14,127423,127424],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127426,127427],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[177,127429,127431],{"id":127430},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[18,127433,127435],{"className":127350,"code":127434,"language":127352,"meta":23,"style":23},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[25,127436,127437],{"__ignoreMap":23},[28,127438,127439,127441,127443,127445,127447,127450,127453,127455],{"class":30,"line":31},[28,127440,1120],{"class":211},[28,127442,14],{"class":51351},[28,127444,62677],{"class":34},[28,127446,257],{"class":211},[28,127448,127449],{"class":64},"\"color: red; font-size: 16px;\"",[28,127451,127452],{"class":211},">这是一个段落\u003C\u002F",[28,127454,14],{"class":51351},[28,127456,51358],{"class":211},[14,127458,127459,26524],{},[359,127460,126691],{},[14,127462,127463],{},"①style其实就是标签的属性",[14,127465,127466],{},"②在双引号中间，写法要符合css规范",[14,127468,127469],{},"③可以控制当前的标签设置样式",[14,127471,127472],{},"④书写繁琐，简单时才用",[14,127474,127475],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[177,127477,127479],{"id":127478},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127481,127482],{},"使用最多，单独建一个css文件，然后html引用",[14,127484,127485],{},"①css文件部分： style.css",[18,127487,127489],{"className":126603,"code":127488,"language":126605,"meta":23,"style":23},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[25,127490,127491,127496,127502,127512,127524],{"__ignoreMap":23},[28,127492,127493],{"class":30,"line":31},[28,127494,127495],{"class":269},"\u002F* style.css *\u002F\n",[28,127497,127498,127500],{"class":30,"line":42},[28,127499,10],{"class":51351},[28,127501,15649],{"class":211},[28,127503,127504,127506,127508,127510],{"class":30,"line":50},[28,127505,70956],{"class":38},[28,127507,51488],{"class":211},[28,127509,127379],{"class":38},[28,127511,1370],{"class":211},[28,127513,127514,127516,127518,127520,127522],{"class":30,"line":58},[28,127515,70677],{"class":38},[28,127517,51488],{"class":211},[28,127519,1010],{"class":38},[28,127521,51543],{"class":207},[28,127523,1370],{"class":211},[28,127525,127526],{"class":30,"line":70},[28,127527,1643],{"class":211},[14,127529,127530],{},"②html部分",[18,127532,127534],{"className":127350,"code":127533,"language":127352,"meta":23,"style":23},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[25,127535,127536],{"__ignoreMap":23},[28,127537,127538,127540,127542,127544,127546,127548,127550,127552,127555],{"class":30,"line":31},[28,127539,1120],{"class":211},[28,127541,69056],{"class":51351},[28,127543,69059],{"class":34},[28,127545,257],{"class":211},[28,127547,69064],{"class":64},[28,127549,61108],{"class":34},[28,127551,257],{"class":211},[28,127553,127554],{"class":64},"\"style.css\"",[28,127556,51358],{"class":211},[14,127558,127559,127562],{},[25,127560,127561],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127564,127565],{},"ctrl+0回到页面原来大小",[149,127567,127569],{"id":127568},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[177,127571,127573],{"id":127572},"_721-快速生成html","7.2.1 快速生成html",[14,127575,127576,127577],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[25,127578,127579],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127581,127582],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127584,127585],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127587,127588],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127590,127591],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127593,127594],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127596,127597],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[18,127599,127601],{"className":127350,"code":127600,"language":127352,"meta":23,"style":23},"\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",[25,127602,127603,127608,127613,127618,127623,127628,127633,127638],{"__ignoreMap":23},[28,127604,127605],{"class":30,"line":31},[28,127606,127607],{"class":269},"\u003C!-- Emmet 语法示例 -->\n",[28,127609,127610],{"class":30,"line":42},[28,127611,127612],{"class":269},"\u003C!-- div*3        → 生成3个div -->\n",[28,127614,127615],{"class":30,"line":50},[28,127616,127617],{"class":269},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[28,127619,127620],{"class":30,"line":58},[28,127621,127622],{"class":269},"\u003C!-- div+p        → 兄弟div和p -->\n",[28,127624,127625],{"class":30,"line":70},[28,127626,127627],{"class":269},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[28,127629,127630],{"class":30,"line":78},[28,127631,127632],{"class":269},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[28,127634,127635],{"class":30,"line":86},[28,127636,127637],{"class":269},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[28,127639,127640],{"class":30,"line":97},[28,127641,127642],{"class":269},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[177,127644,127646],{"id":127645},"_722-快速生成css","7.2.2 快速生成css",[14,127648,127649],{},"简写开头",[14,127651,127652],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[149,127654,127656],{"id":127655},"_73-css复合选择器","7.3 css复合选择器",[177,127658,127660],{"id":127659},"_731-后代选择器","7.3.1 后代选择器",[18,127662,127664],{"className":126603,"code":127663,"language":126605,"meta":23,"style":23},".parent .child {\n  color: blue;\n}\n",[25,127665,127666,127676,127686],{"__ignoreMap":23},[28,127667,127668,127671,127674],{"class":30,"line":31},[28,127669,127670],{"class":34},".parent",[28,127672,127673],{"class":34}," .child",[28,127675,15649],{"class":211},[28,127677,127678,127680,127682,127684],{"class":30,"line":42},[28,127679,70956],{"class":38},[28,127681,51488],{"class":211},[28,127683,127379],{"class":38},[28,127685,1370],{"class":211},[28,127687,127688],{"class":30,"line":50},[28,127689,1643],{"class":211},[14,127691,127692],{},"元素1 元素2 {样式声明}",[14,127694,127695],{},[359,127696,127697],{},"注意点:",[14,127699,127700],{},"①元素1和元素2中间用空格隔开",[14,127702,127703],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127705,127706],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127708,127709],{},"④元素1和元素2可以是任意基础选择器",[177,127711,127713],{"id":127712},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127715,127716],{},[359,127717,127697],{},[14,127719,127720],{},"①元素1和元素2中间用大于号隔开",[14,127722,127703],{},[14,127724,127725],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[177,127727,127729],{"id":127728},"_733-并集选择器","7.3.3 并集选择器",[14,127731,127732],{},"元素1，元素2 {样式声明}",[14,127734,127735],{},[359,127736,127697],{},[14,127738,127739],{},"①元素1和元素2中间用逗号隔开",[14,127741,127742],{},"②逗号可以理解为和的意思",[14,127744,127745],{},"③并集选择器通常用于集体声明",[177,127747,127749],{"id":127748},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127751,127752],{},[359,127753,127697],{},[14,127755,127756,127757,127759],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69056,127758],{},"－:visited－:hover－:active。",[14,127761,127762,127763,127766,127767,25791],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127764,127765],"hover",{}," 、 ",[127768,127769],"first-child",{},[14,127771,127772],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127774,127775],{},"link对没访问的进行设置",[14,127777,127778],{},"vistied对已访问的进行改变",[14,127780,127781],{},"hover鼠标经过就会变",[14,127783,127784],{},"active常按(点)就会变",[18,127786,127788],{"className":126603,"code":127787,"language":126605,"meta":23,"style":23},"\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",[25,127789,127790,127795,127804,127814,127824,127828,127837,127848,127852,127860,127870,127880,127884,127893,127904],{"__ignoreMap":23},[28,127791,127792],{"class":30,"line":31},[28,127793,127794],{"class":269},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[28,127796,127797,127799,127802],{"class":30,"line":42},[28,127798,448],{"class":51351},[28,127800,127801],{"class":34},":link",[28,127803,15649],{"class":211},[28,127805,127806,127808,127810,127812],{"class":30,"line":50},[28,127807,70956],{"class":38},[28,127809,51488],{"class":211},[28,127811,62420],{"class":38},[28,127813,1370],{"class":211},[28,127815,127816,127818,127820,127822],{"class":30,"line":58},[28,127817,70553],{"class":38},[28,127819,51488],{"class":211},[28,127821,54788],{"class":38},[28,127823,1370],{"class":211},[28,127825,127826],{"class":30,"line":70},[28,127827,1643],{"class":211},[28,127829,127830,127832,127835],{"class":30,"line":78},[28,127831,448],{"class":51351},[28,127833,127834],{"class":34},":visited",[28,127836,15649],{"class":211},[28,127838,127839,127841,127843,127846],{"class":30,"line":86},[28,127840,70956],{"class":38},[28,127842,51488],{"class":211},[28,127844,127845],{"class":38},"purple",[28,127847,1370],{"class":211},[28,127849,127850],{"class":30,"line":97},[28,127851,1643],{"class":211},[28,127853,127854,127856,127858],{"class":30,"line":108},[28,127855,448],{"class":51351},[28,127857,60991],{"class":34},[28,127859,15649],{"class":211},[28,127861,127862,127864,127866,127868],{"class":30,"line":1407},[28,127863,70956],{"class":38},[28,127865,51488],{"class":211},[28,127867,54940],{"class":38},[28,127869,1370],{"class":211},[28,127871,127872,127874,127876,127878],{"class":30,"line":1690},[28,127873,70553],{"class":38},[28,127875,51488],{"class":211},[28,127877,127217],{"class":38},[28,127879,1370],{"class":211},[28,127881,127882],{"class":30,"line":1695},[28,127883,1643],{"class":211},[28,127885,127886,127888,127891],{"class":30,"line":1701},[28,127887,448],{"class":51351},[28,127889,127890],{"class":34},":active",[28,127892,15649],{"class":211},[28,127894,127895,127897,127899,127902],{"class":30,"line":1706},[28,127896,70956],{"class":38},[28,127898,51488],{"class":211},[28,127900,127901],{"class":38},"green",[28,127903,1370],{"class":211},[28,127905,127906],{"class":30,"line":1720},[28,127907,1643],{"class":211},[177,127909,127911,127912,127915],{"id":127910},"_735-伪类选择器","7.3.5 ",[127913,127914],"focus",{},"伪类选择器",[14,127917,127918,127920,127921,127923],{},[127913,127919],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[25,127922,126664],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[18,127925,127927],{"className":126603,"code":127926,"language":126605,"meta":23,"style":23},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[25,127928,127929,127937,127948,127958],{"__ignoreMap":23},[28,127930,127931,127933,127935],{"class":30,"line":31},[28,127932,53872],{"class":51351},[28,127934,61951],{"class":34},[28,127936,15649],{"class":211},[28,127938,127939,127942,127944,127946],{"class":30,"line":42},[28,127940,127941],{"class":38},"  border-color",[28,127943,51488],{"class":211},[28,127945,54940],{"class":38},[28,127947,1370],{"class":211},[28,127949,127950,127952,127954,127956],{"class":30,"line":50},[28,127951,70849],{"class":38},[28,127953,51488],{"class":211},[28,127955,54788],{"class":38},[28,127957,1370],{"class":211},[28,127959,127960],{"class":30,"line":58},[28,127961,1643],{"class":211},[126,127963,127964],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":23,"searchDepth":42,"depth":42,"links":127966},[127967,127972,127976],{"id":127342,"depth":42,"text":127343,"children":127968},[127969,127970,127971],{"id":127346,"depth":50,"text":127347},{"id":127430,"depth":50,"text":127431},{"id":127478,"depth":50,"text":127479},{"id":127568,"depth":42,"text":127569,"children":127973},[127974,127975],{"id":127572,"depth":50,"text":127573},{"id":127645,"depth":50,"text":127646},{"id":127655,"depth":42,"text":127656,"children":127977},[127978,127979,127980,127981,127982],{"id":127659,"depth":50,"text":127660},{"id":127712,"depth":50,"text":127713},{"id":127728,"depth":50,"text":127729},{"id":127748,"depth":50,"text":127749},{"id":127910,"depth":50,"text":127983},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127334,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127990,"title":127991,"body":127992,"description":131,"extension":132,"meta":129915,"navigation":134,"path":129916,"seo":129917,"stem":129918,"__hash__":129919},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127993,"toc":129889},[127994,127997,128001,128010,128014,128040,128045,128048,128051,128054,128057,128061,128064,128074,128082,128086,128121,128126,128129,128132,128135,128138,128142,128145,128154,128158,128171,128176,128179,128182,128185,128189,128192,128196,128199,128254,128257,128288,128291,128345,128349,128352,128518,128641,128644,128647,128650,128653,128657,128660,128664,128667,128670,128674,128677,128708,128735,128763,128766,128770,128796,128839,128843,128937,128940,128967,128970,128973,128976,128979,128982,128985,128988,128991,128994,128998,129055,129082,129086,129134,129138,129179,129181,129184,129187,129190,129193,129197,129289,129292,129295,129298,129302,129425,129626,129630,129634,129637,129640,129643,129647,129650,129653,129678,129681,129684,129687,129690,129693,129697,129705,129767,129770,129828,129831,129834,129837,129840,129843,129846,129849,129886],[10,127995,127991],{"id":127996},"_8-css显示模式与背景特性",[149,127998,128000],{"id":127999},"_81-css元素显示模式","8.1 css元素显示模式",[14,128002,128003,128004,128006,128007,128009],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[25,128005,126214],{},"自己占一行，比如一行可以放多个",[25,128008,126217],{},"，HTML 元素一般分为块元素和行内元素两种类型",[177,128011,128013],{"id":128012},"_811-块元素","8.1.1 块元素",[14,128015,128016,128017,128019,128020,422,128023,422,128025,422,128027,422,128030,422,128033,128036,128037,128039],{},"常见的块元素有",[25,128018,126118],{},"~",[25,128021,128022],{},"\u003Ch6>",[25,128024,126144],{},[25,128026,126214],{},[25,128028,128029],{},"\u003Cul>",[25,128031,128032],{},"\u003Col>",[25,128034,128035],{},"\u003Cli>","等，其中 ",[25,128038,126214],{}," 标签是最典型的块元素",[14,128041,128042],{},[359,128043,128044],{},"块级元素的特点：",[14,128046,128047],{},"① 比较霸道，自己独占一行。",[14,128049,128050],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,128052,128053],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128055,128056],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128058,128059],{},[359,128060,241],{},[14,128062,128063],{},"①文字类的元素内不能使用块级元素",[14,128065,77300,128066,128068,128069,128071,128072],{},[25,128067,126144],{}," 标签主要用于存放文字，因此 ",[25,128070,126144],{}," 里面不能放块级元素，特别是不能放",[25,128073,126214],{},[14,128075,128076,128077,128019,128079,128081],{},"⑥同理， ",[25,128078,126118],{},[25,128080,128022],{},"等都是文字类块级标签，里面也不能放其他块级元素",[177,128083,128085],{"id":128084},"_812-行内元素","8.1.2 行内元素",[14,128087,128088,128089,422,128091,422,128094,422,128097,422,128100,422,128103,422,128106,422,128109,422,128112,422,128115,128117,128118,128120],{},"常见的行内元素有 ",[25,128090,126376],{},[25,128092,128093],{},"\u003Cstrong>",[25,128095,128096],{},"\u003Cb>",[25,128098,128099],{},"\u003Cem>",[25,128101,128102],{},"\u003Ci>",[25,128104,128105],{},"\u003Cdel>",[25,128107,128108],{},"\u003Cs>",[25,128110,128111],{},"\u003Cins>",[25,128113,128114],{},"\u003Cu>",[25,128116,126217],{}," 等，其中 ",[25,128119,126217],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128122,128123],{},[359,128124,128125],{},"特点：",[14,128127,128128],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128130,128131],{},"② 高、宽直接设置是无效的。",[14,128133,128134],{},"③ 默认宽度就是它本身内容的宽度。",[14,128136,128137],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128139,128140],{},[359,128141,241],{},[14,128143,128144],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128146,128147,128148,128150,128151,128153],{},"②特殊情况链接 ",[25,128149,126376],{}," 里面可以放块级元素，但是给 ",[25,128152,126376],{}," 转换一下块级模式最安全",[177,128155,128157],{"id":128156},"_813-行内块元素","8.1.3 行内块元素",[14,128159,128160,128161,422,128164,422,128167,128170],{},"在行内元素中有几个特殊的标签 —— ",[25,128162,128163],{},"\u003Cimg \u002F>",[25,128165,128166],{},"\u003Cinput \u002F>",[25,128168,128169],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128172,128173],{},[359,128174,128175],{},"行内块元素的特点：",[14,128177,128178],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128180,128181],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128183,128184],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[177,128186,128188],{"id":128187},"_814-总结","8.1.4 总结",[1540,128190],{"style":126459,"src":128191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[177,128193,128195],{"id":128194},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128197,128198],{},"①转换为块元素：display:block;",[18,128200,128202],{"className":126603,"code":128201,"language":126605,"meta":23,"style":23},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[25,128203,128204,128209,128215,128226,128238,128250],{"__ignoreMap":23},[28,128205,128206],{"class":30,"line":31},[28,128207,128208],{"class":269},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[28,128210,128211,128213],{"class":30,"line":42},[28,128212,448],{"class":51351},[28,128214,15649],{"class":211},[28,128216,128217,128220,128222,128224],{"class":30,"line":50},[28,128218,128219],{"class":38},"  display",[28,128221,51488],{"class":211},[28,128223,60920],{"class":38},[28,128225,1370],{"class":211},[28,128227,128228,128230,128232,128234,128236],{"class":30,"line":58},[28,128229,70619],{"class":38},[28,128231,51488],{"class":211},[28,128233,521],{"class":38},[28,128235,51543],{"class":207},[28,128237,1370],{"class":211},[28,128239,128240,128242,128244,128246,128248],{"class":30,"line":70},[28,128241,70839],{"class":38},[28,128243,51488],{"class":211},[28,128245,611],{"class":38},[28,128247,51543],{"class":207},[28,128249,1370],{"class":211},[28,128251,128252],{"class":30,"line":78},[28,128253,1643],{"class":211},[14,128255,128256],{},"②转换为行内元素：display:inline;",[18,128258,128260],{"className":126603,"code":128259,"language":126605,"meta":23,"style":23},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[25,128261,128262,128267,128273,128284],{"__ignoreMap":23},[28,128263,128264],{"class":30,"line":31},[28,128265,128266],{"class":269},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[28,128268,128269,128271],{"class":30,"line":42},[28,128270,51662],{"class":51351},[28,128272,15649],{"class":211},[28,128274,128275,128277,128279,128282],{"class":30,"line":50},[28,128276,128219],{"class":38},[28,128278,51488],{"class":211},[28,128280,128281],{"class":38},"inline",[28,128283,1370],{"class":211},[28,128285,128286],{"class":30,"line":58},[28,128287,1643],{"class":211},[14,128289,128290],{},"③转换为行内块：display:inline-block;",[18,128292,128294],{"className":126603,"code":128293,"language":126605,"meta":23,"style":23},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[25,128295,128296,128301,128307,128317,128329,128341],{"__ignoreMap":23},[28,128297,128298],{"class":30,"line":31},[28,128299,128300],{"class":269},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[28,128302,128303,128305],{"class":30,"line":42},[28,128304,28],{"class":51351},[28,128306,15649],{"class":211},[28,128308,128309,128311,128313,128315],{"class":30,"line":50},[28,128310,128219],{"class":38},[28,128312,51488],{"class":211},[28,128314,72434],{"class":38},[28,128316,1370],{"class":211},[28,128318,128319,128321,128323,128325,128327],{"class":30,"line":58},[28,128320,70619],{"class":38},[28,128322,51488],{"class":211},[28,128324,822],{"class":38},[28,128326,51543],{"class":207},[28,128328,1370],{"class":211},[28,128330,128331,128333,128335,128337,128339],{"class":30,"line":70},[28,128332,70839],{"class":38},[28,128334,51488],{"class":211},[28,128336,1161],{"class":38},[28,128338,51543],{"class":207},[28,128340,1370],{"class":211},[28,128342,128343],{"class":30,"line":78},[28,128344,1643],{"class":211},[177,128346,128348],{"id":128347},"_816-小米侧边栏","8.1.6 小米侧边栏",[1540,128350],{"style":126459,"src":128351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[18,128353,128355],{"className":127350,"code":128354,"language":127352,"meta":23,"style":23},"\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",[25,128356,128357,128362,128377,128396,128415,128434,128453,128472,128491,128510],{"__ignoreMap":23},[28,128358,128359],{"class":30,"line":31},[28,128360,128361],{"class":269},"\u003C!-- 小米侧边栏案例 -->\n",[28,128363,128364,128366,128368,128370,128372,128375],{"class":30,"line":42},[28,128365,1120],{"class":211},[28,128367,51662],{"class":51351},[28,128369,53537],{"class":34},[28,128371,257],{"class":211},[28,128373,128374],{"class":64},"\"sidebar\"",[28,128376,51358],{"class":211},[28,128378,128379,128381,128383,128385,128387,128389,128392,128394],{"class":30,"line":50},[28,128380,52195],{"class":211},[28,128382,448],{"class":51351},[28,128384,61108],{"class":34},[28,128386,257],{"class":211},[28,128388,61113],{"class":64},[28,128390,128391],{"class":211},">手机 电话卡\u003C\u002F",[28,128393,448],{"class":51351},[28,128395,51358],{"class":211},[28,128397,128398,128400,128402,128404,128406,128408,128411,128413],{"class":30,"line":58},[28,128399,52195],{"class":211},[28,128401,448],{"class":51351},[28,128403,61108],{"class":34},[28,128405,257],{"class":211},[28,128407,61113],{"class":64},[28,128409,128410],{"class":211},">电视 盒子\u003C\u002F",[28,128412,448],{"class":51351},[28,128414,51358],{"class":211},[28,128416,128417,128419,128421,128423,128425,128427,128430,128432],{"class":30,"line":70},[28,128418,52195],{"class":211},[28,128420,448],{"class":51351},[28,128422,61108],{"class":34},[28,128424,257],{"class":211},[28,128426,61113],{"class":64},[28,128428,128429],{"class":211},">笔记本 平板\u003C\u002F",[28,128431,448],{"class":51351},[28,128433,51358],{"class":211},[28,128435,128436,128438,128440,128442,128444,128446,128449,128451],{"class":30,"line":78},[28,128437,52195],{"class":211},[28,128439,448],{"class":51351},[28,128441,61108],{"class":34},[28,128443,257],{"class":211},[28,128445,61113],{"class":64},[28,128447,128448],{"class":211},">出行 穿戴\u003C\u002F",[28,128450,448],{"class":51351},[28,128452,51358],{"class":211},[28,128454,128455,128457,128459,128461,128463,128465,128468,128470],{"class":30,"line":86},[28,128456,52195],{"class":211},[28,128458,448],{"class":51351},[28,128460,61108],{"class":34},[28,128462,257],{"class":211},[28,128464,61113],{"class":64},[28,128466,128467],{"class":211},">智能 路由器\u003C\u002F",[28,128469,448],{"class":51351},[28,128471,51358],{"class":211},[28,128473,128474,128476,128478,128480,128482,128484,128487,128489],{"class":30,"line":97},[28,128475,52195],{"class":211},[28,128477,448],{"class":51351},[28,128479,61108],{"class":34},[28,128481,257],{"class":211},[28,128483,61113],{"class":64},[28,128485,128486],{"class":211},">健康 儿童\u003C\u002F",[28,128488,448],{"class":51351},[28,128490,51358],{"class":211},[28,128492,128493,128495,128497,128499,128501,128503,128506,128508],{"class":30,"line":108},[28,128494,52195],{"class":211},[28,128496,448],{"class":51351},[28,128498,61108],{"class":34},[28,128500,257],{"class":211},[28,128502,61113],{"class":64},[28,128504,128505],{"class":211},">耳机 音响\u003C\u002F",[28,128507,448],{"class":51351},[28,128509,51358],{"class":211},[28,128511,128512,128514,128516],{"class":30,"line":1407},[28,128513,51836],{"class":211},[28,128515,51662],{"class":51351},[28,128517,51358],{"class":211},[18,128519,128521],{"className":126603,"code":128520,"language":126605,"meta":23,"style":23},".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",[25,128522,128523,128532,128542,128555,128567,128579,128591,128601,128612,128616,128626,128637],{"__ignoreMap":23},[28,128524,128525,128528,128530],{"class":30,"line":31},[28,128526,128527],{"class":34},".sidebar",[28,128529,1476],{"class":51351},[28,128531,15649],{"class":211},[28,128533,128534,128536,128538,128540],{"class":30,"line":42},[28,128535,128219],{"class":38},[28,128537,51488],{"class":211},[28,128539,60920],{"class":38},[28,128541,1370],{"class":211},[28,128543,128544,128546,128548,128551,128553],{"class":30,"line":50},[28,128545,70619],{"class":38},[28,128547,51488],{"class":211},[28,128549,128550],{"class":38},"234",[28,128552,51543],{"class":207},[28,128554,1370],{"class":211},[28,128556,128557,128559,128561,128563,128565],{"class":30,"line":58},[28,128558,70839],{"class":38},[28,128560,51488],{"class":211},[28,128562,662],{"class":38},[28,128564,51543],{"class":207},[28,128566,1370],{"class":211},[28,128568,128569,128571,128573,128575,128577],{"class":30,"line":70},[28,128570,127287],{"class":38},[28,128572,51488],{"class":211},[28,128574,662],{"class":38},[28,128576,51543],{"class":207},[28,128578,1370],{"class":211},[28,128580,128581,128583,128585,128587,128589],{"class":30,"line":78},[28,128582,70874],{"class":38},[28,128584,51488],{"class":211},[28,128586,1161],{"class":38},[28,128588,51543],{"class":207},[28,128590,1370],{"class":211},[28,128592,128593,128595,128597,128599],{"class":30,"line":86},[28,128594,70956],{"class":38},[28,128596,51488],{"class":211},[28,128598,60893],{"class":38},[28,128600,1370],{"class":211},[28,128602,128603,128605,128607,128610],{"class":30,"line":97},[28,128604,70929],{"class":38},[28,128606,51488],{"class":211},[28,128608,128609],{"class":38},"#55585a",[28,128611,1370],{"class":211},[28,128613,128614],{"class":30,"line":108},[28,128615,1643],{"class":211},[28,128617,128618,128620,128622,128624],{"class":30,"line":1407},[28,128619,128527],{"class":34},[28,128621,1476],{"class":51351},[28,128623,60991],{"class":34},[28,128625,15649],{"class":211},[28,128627,128628,128630,128632,128635],{"class":30,"line":1690},[28,128629,70929],{"class":38},[28,128631,51488],{"class":211},[28,128633,128634],{"class":38},"#ff6700",[28,128636,1370],{"class":211},[28,128638,128639],{"class":30,"line":1695},[28,128640,1643],{"class":211},[1540,128642],{"style":126459,"src":128643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128645,128646],{},"行高=盒子高度：实现文字的垂直居中",[14,128648,128649],{},"原理讲解：",[1540,128651],{"style":126459,"src":128652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[149,128654,128656],{"id":128655},"_82-css背景","8.2 css背景",[14,128658,128659],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[177,128661,128663],{"id":128662},"_821-背景颜色","8.2.1 背景颜色",[14,128665,128666],{},"background-color:颜色值;",[14,128668,128669],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[177,128671,128673],{"id":128672},"_822-背景图片","8.2.2 背景图片",[14,128675,128676],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[18,128678,128680],{"className":126603,"code":128679,"language":126605,"meta":23,"style":23},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[25,128681,128682,128688,128704],{"__ignoreMap":23},[28,128683,128684,128686],{"class":30,"line":31},[28,128685,51662],{"class":51351},[28,128687,15649],{"class":211},[28,128689,128690,128693,128695,128697,128699,128702],{"class":30,"line":42},[28,128691,128692],{"class":38},"  background-image",[28,128694,51488],{"class":211},[28,128696,61777],{"class":38},[28,128698,212],{"class":211},[28,128700,128701],{"class":5293},"images\u002Fbg.png",[28,128703,2796],{"class":211},[28,128705,128706],{"class":30,"line":50},[28,128707,1643],{"class":211},[347,128709,128710,128719],{},[350,128711,128712],{},[353,128713,128714,128717],{},[356,128715,128716],{"align":23813},"参数值",[356,128718,102747],{"align":23813},[394,128720,128721,128728],{},[353,128722,128723,128725],{},[399,128724,54788],{"align":23813},[399,128726,128727],{"align":23813},"无背景图（默认的）",[353,128729,128730,128732],{},[399,128731,61777],{"align":23813},[399,128733,128734],{"align":23813},"使用绝对或相对地址指定背景图像",[18,128736,128737],{"className":126603,"code":128679,"language":126605,"meta":23,"style":23},[25,128738,128739,128745,128759],{"__ignoreMap":23},[28,128740,128741,128743],{"class":30,"line":31},[28,128742,51662],{"class":51351},[28,128744,15649],{"class":211},[28,128746,128747,128749,128751,128753,128755,128757],{"class":30,"line":42},[28,128748,128692],{"class":38},[28,128750,51488],{"class":211},[28,128752,61777],{"class":38},[28,128754,212],{"class":211},[28,128756,128701],{"class":5293},[28,128758,2796],{"class":211},[28,128760,128761],{"class":30,"line":50},[28,128762,1643],{"class":211},[14,128764,128765],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[177,128767,128769],{"id":128768},"_823-背景平铺","8.2.3 背景平铺",[18,128771,128773],{"className":126603,"code":128772,"language":126605,"meta":23,"style":23},"div {\n  background-repeat: no-repeat;\n}\n",[25,128774,128775,128781,128792],{"__ignoreMap":23},[28,128776,128777,128779],{"class":30,"line":31},[28,128778,51662],{"class":51351},[28,128780,15649],{"class":211},[28,128782,128783,128786,128788,128790],{"class":30,"line":42},[28,128784,128785],{"class":38},"  background-repeat",[28,128787,51488],{"class":211},[28,128789,61787],{"class":38},[28,128791,1370],{"class":211},[28,128793,128794],{"class":30,"line":50},[28,128795,1643],{"class":211},[347,128797,128798,128806],{},[350,128799,128800],{},[353,128801,128802,128804],{},[356,128803,128716],{"align":23813},[356,128805,102747],{"align":23813},[394,128807,128808,128816,128823,128831],{},[353,128809,128810,128813],{},[399,128811,128812],{"align":23813},"repeat",[399,128814,128815],{"align":23813},"背景图像在纵向和横向上平铺（默认的）",[353,128817,128818,128820],{},[399,128819,61787],{"align":23813},[399,128821,128822],{"align":23813},"背景图像不平铺",[353,128824,128825,128828],{},[399,128826,128827],{"align":23813},"repeat-x",[399,128829,128830],{"align":23813},"背景图像在横向上平铺",[353,128832,128833,128836],{},[399,128834,128835],{"align":23813},"repeat-y",[399,128837,128838],{"align":23813},"背景图像在纵向平铺",[177,128840,128842],{"id":128841},"_824-背景图片位置","8.2.4 背景图片位置",[18,128844,128846],{"className":126603,"code":128845,"language":126605,"meta":23,"style":23},"\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",[25,128847,128848,128853,128859,128873,128877,128882,128888,128904,128908,128913,128919,128933],{"__ignoreMap":23},[28,128849,128850],{"class":30,"line":31},[28,128851,128852],{"class":269},"\u002F* 方位名词 *\u002F\n",[28,128854,128855,128857],{"class":30,"line":42},[28,128856,51662],{"class":51351},[28,128858,15649],{"class":211},[28,128860,128861,128864,128866,128868,128871],{"class":30,"line":50},[28,128862,128863],{"class":38},"  background-position",[28,128865,51488],{"class":211},[28,128867,51643],{"class":38},[28,128869,128870],{"class":38}," top",[28,128872,1370],{"class":211},[28,128874,128875],{"class":30,"line":58},[28,128876,1643],{"class":211},[28,128878,128879],{"class":30,"line":70},[28,128880,128881],{"class":269},"\u002F* 精确单位 *\u002F\n",[28,128883,128884,128886],{"class":30,"line":78},[28,128885,51662],{"class":51351},[28,128887,15649],{"class":211},[28,128889,128890,128892,128894,128896,128898,128900,128902],{"class":30,"line":86},[28,128891,128863],{"class":38},[28,128893,51488],{"class":211},[28,128895,910],{"class":38},[28,128897,51543],{"class":207},[28,128899,57555],{"class":38},[28,128901,51543],{"class":207},[28,128903,1370],{"class":211},[28,128905,128906],{"class":30,"line":97},[28,128907,1643],{"class":211},[28,128909,128910],{"class":30,"line":108},[28,128911,128912],{"class":269},"\u002F* 混合单位 *\u002F\n",[28,128914,128915,128917],{"class":30,"line":1407},[28,128916,51662],{"class":51351},[28,128918,15649],{"class":211},[28,128920,128921,128923,128925,128927,128929,128931],{"class":30,"line":1690},[28,128922,128863],{"class":38},[28,128924,51488],{"class":211},[28,128926,910],{"class":38},[28,128928,51543],{"class":207},[28,128930,17221],{"class":38},[28,128932,1370],{"class":211},[28,128934,128935],{"class":30,"line":1695},[28,128936,1643],{"class":211},[14,128938,128939],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[347,128941,128942,128950],{},[350,128943,128944],{},[353,128945,128946,128948],{},[356,128947,128716],{"align":23813},[356,128949,25920],{"align":23813},[394,128951,128952,128959],{},[353,128953,128954,128956],{},[399,128955,52019],{"align":23813},[399,128957,128958],{"align":23813},"百分数|由浮点数和单位标识符组成的长度值",[353,128960,128961,128964],{},[399,128962,128963],{"align":23813},"position",[399,128965,128966],{"align":23813},"top|center|bottom|left|center|right 方位名词",[14,128968,128969],{},"其他说明：",[14,128971,128972],{},"①参数是方位名词",[14,128974,128975],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128977,128978],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128980,128981],{},"②参数是精确单位",[14,128983,128984],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128986,128987],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128989,128990],{},"③参数是混合单位",[14,128992,128993],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[177,128995,128997],{"id":128996},"_825-背景图片固定","8.2.5 背景图片固定",[18,128999,129001],{"className":126603,"code":129000,"language":126605,"meta":23,"style":23},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[25,129002,129003,129008,129014,129026,129030,129035,129041,129051],{"__ignoreMap":23},[28,129004,129005],{"class":30,"line":31},[28,129006,129007],{"class":269},"\u002F* 背景滚动（默认） *\u002F\n",[28,129009,129010,129012],{"class":30,"line":42},[28,129011,51662],{"class":51351},[28,129013,15649],{"class":211},[28,129015,129016,129019,129021,129024],{"class":30,"line":50},[28,129017,129018],{"class":38},"  background-attachment",[28,129020,51488],{"class":211},[28,129022,129023],{"class":38},"scroll",[28,129025,1370],{"class":211},[28,129027,129028],{"class":30,"line":58},[28,129029,1643],{"class":211},[28,129031,129032],{"class":30,"line":70},[28,129033,129034],{"class":269},"\u002F* 背景固定 *\u002F\n",[28,129036,129037,129039],{"class":30,"line":78},[28,129038,51662],{"class":51351},[28,129040,15649],{"class":211},[28,129042,129043,129045,129047,129049],{"class":30,"line":86},[28,129044,129018],{"class":38},[28,129046,51488],{"class":211},[28,129048,86284],{"class":38},[28,129050,1370],{"class":211},[28,129052,129053],{"class":30,"line":97},[28,129054,1643],{"class":211},[347,129056,129057,129066],{},[350,129058,129059],{},[353,129060,129061,129064],{},[356,129062,129063],{"align":23813},"参数",[356,129065,102747],{"align":23813},[394,129067,129068,129075],{},[353,129069,129070,129072],{},[399,129071,129023],{"align":23813},[399,129073,129074],{"align":23813},"背景图像是随对象内容滚动",[353,129076,129077,129079],{},[399,129078,86284],{"align":23813},[399,129080,129081],{"align":23813},"背景图像固定",[177,129083,129085],{"id":129084},"_826-背景样式合写","8.2.6 背景样式合写",[18,129087,129089],{"className":126603,"code":129088,"language":126605,"meta":23,"style":23},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[25,129090,129091,129096,129102,129130],{"__ignoreMap":23},[28,129092,129093],{"class":30,"line":31},[28,129094,129095],{"class":269},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[28,129097,129098,129100],{"class":30,"line":42},[28,129099,51662],{"class":51351},[28,129101,15649],{"class":211},[28,129103,129104,129106,129108,129110,129113,129115,129117,129119,129121,129124,129126,129128],{"class":30,"line":50},[28,129105,70662],{"class":38},[28,129107,51488],{"class":211},[28,129109,60893],{"class":38},[28,129111,129112],{"class":38}," url",[28,129114,212],{"class":211},[28,129116,128701],{"class":5293},[28,129118,13791],{"class":211},[28,129120,61787],{"class":38},[28,129122,129123],{"class":38}," fixed",[28,129125,17221],{"class":38},[28,129127,128870],{"class":38},[28,129129,1370],{"class":211},[28,129131,129132],{"class":30,"line":58},[28,129133,1643],{"class":211},[177,129135,129137],{"id":129136},"_827-背景色半透明","8.2.7 背景色半透明",[18,129139,129141],{"className":126603,"code":129140,"language":126605,"meta":23,"style":23},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[25,129142,129143,129149,129175],{"__ignoreMap":23},[28,129144,129145,129147],{"class":30,"line":31},[28,129146,51662],{"class":51351},[28,129148,15649],{"class":211},[28,129150,129151,129153,129155,129157,129159,129161,129163,129165,129167,129169,129171,129173],{"class":30,"line":42},[28,129152,70662],{"class":38},[28,129154,51488],{"class":211},[28,129156,55161],{"class":38},[28,129158,212],{"class":211},[28,129160,401],{"class":38},[28,129162,12512],{"class":211},[28,129164,401],{"class":38},[28,129166,12512],{"class":211},[28,129168,401],{"class":38},[28,129170,12512],{"class":211},[28,129172,100572],{"class":38},[28,129174,2796],{"class":211},[28,129176,129177],{"class":30,"line":50},[28,129178,1643],{"class":211},[14,129180,99447],{},[14,129182,129183],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129185,129186],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129188,129189],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129191,129192],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[177,129194,129196],{"id":129195},"_828-总结","8.2.8 总结",[347,129198,129199,129210],{},[350,129200,129201],{},[353,129202,129203,129206,129208],{},[356,129204,129205],{"align":23813},"属性",[356,129207,102747],{"align":23813},[356,129209,362],{"align":23813},[394,129211,129212,129223,129234,129245,129256,129267,129278],{},[353,129213,129214,129217,129220],{},[399,129215,129216],{"align":23813},"background-color",[399,129218,129219],{"align":23813},"背景颜色",[399,129221,129222],{"align":23813},"预定义的颜色值\u002F十六进制\u002FRGB代码",[353,129224,129225,129228,129231],{},[399,129226,129227],{"align":23813},"background-image",[399,129229,129230],{"align":23813},"背景图片",[399,129232,129233],{"align":23813},"url(图片路径)",[353,129235,129236,129239,129242],{},[399,129237,129238],{"align":23813},"background-repeat",[399,129240,129241],{"align":23813},"是否平铺",[399,129243,129244],{"align":23813},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[353,129246,129247,129250,129253],{},[399,129248,129249],{"align":23813},"background-position",[399,129251,129252],{"align":23813},"背景位置",[399,129254,129255],{"align":23813},"length\u002Fposition 分别是x和y坐标",[353,129257,129258,129261,129264],{},[399,129259,129260],{"align":23813},"background-attachment",[399,129262,129263],{"align":23813},"背景附着",[399,129265,129266],{"align":23813},"scroll(背景滚动) \u002Ffixed (背景固定)",[353,129268,129269,129272,129275],{},[399,129270,129271],{"align":23813},"背景简写",[399,129273,129274],{"align":23813},"书写更简单",[399,129276,129277],{"align":23813},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[353,129279,129280,129283,129286],{},[399,129281,129282],{"align":23813},"背景半透明",[399,129284,129285],{"align":23813},"背景颜色半透明",[399,129287,129288],{"align":23813},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129290,129291],{},"颜色渐变：",[1540,129293],{"style":126459,"src":129294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1540,129296],{"style":126459,"src":129297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[177,129299,129301],{"id":129300},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[18,129303,129305],{"className":127350,"code":129304,"language":127352,"meta":23,"style":23},"\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",[25,129306,129307,129322,129341,129360,129379,129398,129417],{"__ignoreMap":23},[28,129308,129309,129311,129313,129315,129317,129320],{"class":30,"line":31},[28,129310,1120],{"class":211},[28,129312,51662],{"class":51351},[28,129314,53537],{"class":34},[28,129316,257],{"class":211},[28,129318,129319],{"class":64},"\"nav\"",[28,129321,51358],{"class":211},[28,129323,129324,129326,129328,129330,129332,129334,129337,129339],{"class":30,"line":42},[28,129325,52195],{"class":211},[28,129327,448],{"class":51351},[28,129329,61108],{"class":34},[28,129331,257],{"class":211},[28,129333,61113],{"class":64},[28,129335,129336],{"class":211},">五彩导航1\u003C\u002F",[28,129338,448],{"class":51351},[28,129340,51358],{"class":211},[28,129342,129343,129345,129347,129349,129351,129353,129356,129358],{"class":30,"line":50},[28,129344,52195],{"class":211},[28,129346,448],{"class":51351},[28,129348,61108],{"class":34},[28,129350,257],{"class":211},[28,129352,61113],{"class":64},[28,129354,129355],{"class":211},">五彩导航2\u003C\u002F",[28,129357,448],{"class":51351},[28,129359,51358],{"class":211},[28,129361,129362,129364,129366,129368,129370,129372,129375,129377],{"class":30,"line":58},[28,129363,52195],{"class":211},[28,129365,448],{"class":51351},[28,129367,61108],{"class":34},[28,129369,257],{"class":211},[28,129371,61113],{"class":64},[28,129373,129374],{"class":211},">五彩导航3\u003C\u002F",[28,129376,448],{"class":51351},[28,129378,51358],{"class":211},[28,129380,129381,129383,129385,129387,129389,129391,129394,129396],{"class":30,"line":70},[28,129382,52195],{"class":211},[28,129384,448],{"class":51351},[28,129386,61108],{"class":34},[28,129388,257],{"class":211},[28,129390,61113],{"class":64},[28,129392,129393],{"class":211},">五彩导航4\u003C\u002F",[28,129395,448],{"class":51351},[28,129397,51358],{"class":211},[28,129399,129400,129402,129404,129406,129408,129410,129413,129415],{"class":30,"line":78},[28,129401,52195],{"class":211},[28,129403,448],{"class":51351},[28,129405,61108],{"class":34},[28,129407,257],{"class":211},[28,129409,61113],{"class":64},[28,129411,129412],{"class":211},">五彩导航5\u003C\u002F",[28,129414,448],{"class":51351},[28,129416,51358],{"class":211},[28,129418,129419,129421,129423],{"class":30,"line":86},[28,129420,51836],{"class":211},[28,129422,51662],{"class":51351},[28,129424,51358],{"class":211},[18,129426,129428],{"className":126603,"code":129427,"language":126605,"meta":23,"style":23},".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",[25,129429,129430,129439,129449,129461,129473,129483,129495,129505,129509,129534,129557,129580,129603],{"__ignoreMap":23},[28,129431,129432,129435,129437],{"class":30,"line":31},[28,129433,129434],{"class":34},".nav",[28,129436,1476],{"class":51351},[28,129438,15649],{"class":211},[28,129440,129441,129443,129445,129447],{"class":30,"line":42},[28,129442,128219],{"class":38},[28,129444,51488],{"class":211},[28,129446,72434],{"class":38},[28,129448,1370],{"class":211},[28,129450,129451,129453,129455,129457,129459],{"class":30,"line":50},[28,129452,70619],{"class":38},[28,129454,51488],{"class":211},[28,129456,1027],{"class":38},[28,129458,51543],{"class":207},[28,129460,1370],{"class":211},[28,129462,129463,129465,129467,129469,129471],{"class":30,"line":58},[28,129464,70839],{"class":38},[28,129466,51488],{"class":211},[28,129468,1066],{"class":38},[28,129470,51543],{"class":207},[28,129472,1370],{"class":211},[28,129474,129475,129477,129479,129481],{"class":30,"line":70},[28,129476,70577],{"class":38},[28,129478,51488],{"class":211},[28,129480,51643],{"class":38},[28,129482,1370],{"class":211},[28,129484,129485,129487,129489,129491,129493],{"class":30,"line":78},[28,129486,127287],{"class":38},[28,129488,51488],{"class":211},[28,129490,1066],{"class":38},[28,129492,51543],{"class":207},[28,129494,1370],{"class":211},[28,129496,129497,129499,129501,129503],{"class":30,"line":86},[28,129498,70956],{"class":38},[28,129500,51488],{"class":211},[28,129502,60893],{"class":38},[28,129504,1370],{"class":211},[28,129506,129507],{"class":30,"line":97},[28,129508,1643],{"class":211},[28,129510,129511,129513,129515,129518,129520,129522,129525,129527,129529,129531],{"class":30,"line":108},[28,129512,129434],{"class":34},[28,129514,1476],{"class":51351},[28,129516,129517],{"class":34},":nth-child",[28,129519,212],{"class":211},[28,129521,427],{"class":38},[28,129523,129524],{"class":211},") { ",[28,129526,129216],{"class":38},[28,129528,51488],{"class":211},[28,129530,128634],{"class":38},[28,129532,129533],{"class":211},"; }\n",[28,129535,129536,129538,129540,129542,129544,129546,129548,129550,129552,129555],{"class":30,"line":1407},[28,129537,129434],{"class":34},[28,129539,1476],{"class":51351},[28,129541,129517],{"class":34},[28,129543,212],{"class":211},[28,129545,288],{"class":38},[28,129547,129524],{"class":211},[28,129549,129216],{"class":38},[28,129551,51488],{"class":211},[28,129553,129554],{"class":38},"#ff0000",[28,129556,129533],{"class":211},[28,129558,129559,129561,129563,129565,129567,129569,129571,129573,129575,129578],{"class":30,"line":1690},[28,129560,129434],{"class":34},[28,129562,1476],{"class":51351},[28,129564,129517],{"class":34},[28,129566,212],{"class":211},[28,129568,282],{"class":38},[28,129570,129524],{"class":211},[28,129572,129216],{"class":38},[28,129574,51488],{"class":211},[28,129576,129577],{"class":38},"#00a4ff",[28,129579,129533],{"class":211},[28,129581,129582,129584,129586,129588,129590,129592,129594,129596,129598,129601],{"class":30,"line":1695},[28,129583,129434],{"class":34},[28,129585,1476],{"class":51351},[28,129587,129517],{"class":34},[28,129589,212],{"class":211},[28,129591,503],{"class":38},[28,129593,129524],{"class":211},[28,129595,129216],{"class":38},[28,129597,51488],{"class":211},[28,129599,129600],{"class":38},"#ff00ff",[28,129602,129533],{"class":211},[28,129604,129605,129607,129609,129611,129613,129615,129617,129619,129621,129624],{"class":30,"line":1701},[28,129606,129434],{"class":34},[28,129608,1476],{"class":51351},[28,129610,129517],{"class":34},[28,129612,212],{"class":211},[28,129614,529],{"class":38},[28,129616,129524],{"class":211},[28,129618,129216],{"class":38},[28,129620,51488],{"class":211},[28,129622,129623],{"class":38},"#00ff00",[28,129625,129533],{"class":211},[149,129627,129629],{"id":129628},"_83-css三大特性","8.3 css三大特性",[177,129631,129633],{"id":129632},"_831-层叠性","8.3.1 层叠性",[14,129635,129636],{},"为了解决样式冲突问题",[14,129638,129639],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129641,129642],{},"   ②样式不冲突，不会层叠",[177,129644,129646],{"id":129645},"_832-继承性","8.3.2 继承性",[14,129648,129649],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129651,129652],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[18,129654,129656],{"className":126603,"code":129655,"language":126605,"meta":23,"style":23},"p {\n  color: #333;\n}\n",[25,129657,129658,129664,129674],{"__ignoreMap":23},[28,129659,129660,129662],{"class":30,"line":31},[28,129661,14],{"class":51351},[28,129663,15649],{"class":211},[28,129665,129666,129668,129670,129672],{"class":30,"line":42},[28,129667,70956],{"class":38},[28,129669,51488],{"class":211},[28,129671,62420],{"class":38},[28,129673,1370],{"class":211},[28,129675,129676],{"class":30,"line":50},[28,129677,1643],{"class":211},[1540,129679],{"style":126459,"src":129680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129682,129683],{},"解释：①行高可以跟单位也可以不跟单位",[14,129685,129686],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129688,129689],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129691,129692],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[177,129694,129696],{"id":129695},"_833-优先级","8.3.3 优先级",[161,129698,129699,129702],{},[119,129700,129701],{},"选择器相同，则执行层叠性",[119,129703,129704],{},"选择器不同，则根据选择器权重执行",[347,129706,129707,129717],{},[350,129708,129709],{},[353,129710,129711,129714],{},[356,129712,129713],{"align":23813},"选择器",[356,129715,129716],{"align":23813},"选择器权重",[394,129718,129719,129727,129735,129743,129751,129759],{},[353,129720,129721,129724],{},[399,129722,129723],{"align":23813},"继承 或者*",[399,129725,129726],{"align":23813},"0，0，0，0",[353,129728,129729,129732],{},[399,129730,129731],{"align":23813},"标签选择器",[399,129733,129734],{"align":23813},"0，0，0，1",[353,129736,129737,129740],{},[399,129738,129739],{"align":23813},"类选择器，伪类选择器",[399,129741,129742],{"align":23813},"0，0，1，0",[353,129744,129745,129748],{},[399,129746,129747],{"align":23813},"ID选择器",[399,129749,129750],{"align":23813},"0，1，0，0",[353,129752,129753,129756],{},[399,129754,129755],{"align":23813},"行内样式",[399,129757,129758],{"align":23813},"1，0，0，0",[353,129760,129761,129764],{},[399,129762,129763],{"align":23813},"！important",[399,129765,129766],{"align":23813},"无穷大",[14,129768,129769],{},"! important用法：",[18,129771,129773],{"className":126603,"code":129772,"language":126605,"meta":23,"style":23},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[25,129774,129775,129780,129786,129799,129803,129808,129814,129824],{"__ignoreMap":23},[28,129776,129777],{"class":30,"line":31},[28,129778,129779],{"class":269},"\u002F* !important 拥有最高优先级 *\u002F\n",[28,129781,129782,129784],{"class":30,"line":42},[28,129783,51662],{"class":51351},[28,129785,15649],{"class":211},[28,129787,129788,129790,129792,129794,129797],{"class":30,"line":50},[28,129789,70956],{"class":38},[28,129791,51488],{"class":211},[28,129793,51696],{"class":38},[28,129795,129796],{"class":207}," !important",[28,129798,1370],{"class":211},[28,129800,129801],{"class":30,"line":58},[28,129802,1643],{"class":211},[28,129804,129805],{"class":30,"line":70},[28,129806,129807],{"class":269},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[28,129809,129810,129812],{"class":30,"line":78},[28,129811,51662],{"class":51351},[28,129813,15649],{"class":211},[28,129815,129816,129818,129820,129822],{"class":30,"line":86},[28,129817,70956],{"class":38},[28,129819,51488],{"class":211},[28,129821,57472],{"class":38},[28,129823,1370],{"class":211},[28,129825,129826],{"class":30,"line":97},[28,129827,1643],{"class":211},[14,129829,129830],{},"优先级注意点：",[14,129832,129833],{},"①权重是有4组数字组成,但是不会有进位",[14,129835,129836],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129838,129839],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129841,129842],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129844,129845],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129847,129848],{},"⑥复合选择器",[347,129850,129851,129861],{},[350,129852,129853],{},[353,129854,129855,129858],{},[356,129856,129857],{"align":23813},"div ul li",[356,129859,129860],{"align":23813},"0,0,0,3",[394,129862,129863,129871,129879],{},[353,129864,129865,129868],{},[399,129866,129867],{"align":23813},".nav ul li",[399,129869,129870],{"align":23813},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[353,129872,129873,129876],{},[399,129874,129875],{"align":23813},"a:hover",[399,129877,129878],{"align":23813},"0,0,1,1",[353,129880,129881,129884],{},[399,129882,129883],{"align":23813},".nav a",[399,129885,129878],{"align":23813},[126,129887,129888],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":129890},[129891,129899,129910],{"id":127999,"depth":42,"text":128000,"children":129892},[129893,129894,129895,129896,129897,129898],{"id":128012,"depth":50,"text":128013},{"id":128084,"depth":50,"text":128085},{"id":128156,"depth":50,"text":128157},{"id":128187,"depth":50,"text":128188},{"id":128194,"depth":50,"text":128195},{"id":128347,"depth":50,"text":128348},{"id":128655,"depth":42,"text":128656,"children":129900},[129901,129902,129903,129904,129905,129906,129907,129908,129909],{"id":128662,"depth":50,"text":128663},{"id":128672,"depth":50,"text":128673},{"id":128768,"depth":50,"text":128769},{"id":128841,"depth":50,"text":128842},{"id":128996,"depth":50,"text":128997},{"id":129084,"depth":50,"text":129085},{"id":129136,"depth":50,"text":129137},{"id":129195,"depth":50,"text":129196},{"id":129300,"depth":50,"text":129301},{"id":129628,"depth":42,"text":129629,"children":129911},[129912,129913,129914],{"id":129632,"depth":50,"text":129633},{"id":129645,"depth":50,"text":129646},{"id":129695,"depth":50,"text":129696},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127991,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129921,"title":129922,"body":129923,"description":131,"extension":132,"meta":131513,"navigation":134,"path":131514,"seo":131515,"stem":131516,"__hash__":131517},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129924,"toc":131492},[129925,129928,129932,129935,129938,129941,129944,129947,129950,129953,129957,129965,130002,130038,130041,130055,130060,130094,130097,130190,130195,130198,130228,130231,130236,130244,130248,130255,130301,130345,130350,130353,130356,130359,130362,130365,130368,130370,130373,130377,130382,130426,130431,130434,130437,130474,130479,130482,130485,130488,130491,130523,130526,130529,130532,130564,130567,130570,130573,130577,130580,130612,130615,130619,130639,130642,130650,130653,130657,130662,130665,130697,130702,130705,130743,130747,130752,130755,130758,130789,130792,130809,130814,130866,130926,130931,130985,131023,131027,131031,131034,131038,131046,131049,131051,131062,131067,131115,131149,131152,131155,131158,131161,131205,131208,131211,131214,131217,131220,131223,131267,131270,131273,131276,131279,131282,131285,131291,131294,131338,131341,131344,131347,131350,131353,131397,131400,131402,131405,131409,131413,131451,131455,131458,131461,131465,131473,131477,131480,131483,131486,131489],[10,129926,129922],{"id":129927},"_9-css盒模型浮动与切图",[149,129929,129931],{"id":129930},"_91-盒子模型","9.1 盒子模型",[14,129933,129934],{},"利用盒子来设计网页",[14,129936,129937],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129939,129940],{},"网页布局设置：",[14,129942,129943],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129945,129946],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129948,129949],{},"③往盒子里装内容",[1540,129951],{"style":126459,"src":129952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[177,129954,129956],{"id":129955},"_911-边框border","9.1.1 边框（border）",[161,129958,129959,129962],{},[119,129960,129961],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[119,129963,129964],{},"语法",[18,129966,129968],{"className":126603,"code":129967,"language":126605,"meta":23,"style":23},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[25,129969,129970,129975,129981,129998],{"__ignoreMap":23},[28,129971,129972],{"class":30,"line":31},[28,129973,129974],{"class":269},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[28,129976,129977,129979],{"class":30,"line":42},[28,129978,51662],{"class":51351},[28,129980,15649],{"class":211},[28,129982,129983,129985,129987,129989,129991,129993,129996],{"class":30,"line":50},[28,129984,70947],{"class":38},[28,129986,51488],{"class":211},[28,129988,427],{"class":38},[28,129990,51543],{"class":207},[28,129992,51572],{"class":38},[28,129994,129995],{"class":38}," #ccc",[28,129997,1370],{"class":211},[28,129999,130000],{"class":30,"line":58},[28,130001,1643],{"class":211},[347,130003,130004,130012],{},[350,130005,130006],{},[353,130007,130008,130010],{},[356,130009,129205],{"align":23813},[356,130011,102747],{"align":23813},[394,130013,130014,130022,130030],{},[353,130015,130016,130019],{},[399,130017,130018],{"align":23813},"border-width",[399,130020,130021],{"align":23813},"定义边框粗细，单位是px",[353,130023,130024,130027],{},[399,130025,130026],{"align":23813},"border-style",[399,130028,130029],{"align":23813},"边框的样式",[353,130031,130032,130035],{},[399,130033,130034],{"align":23813},"border-color",[399,130036,130037],{"align":23813},"边框的颜色",[14,130039,130040],{},"边框样式 border-style 可以设置如下值：",[116,130042,130043,130046,130049,130052],{},[119,130044,130045],{},"none：没有边框即忽略所有边框的宽度（默认值）",[119,130047,130048],{},"solid：边框为单实线(最为常用的)",[119,130050,130051],{},"dashed：边框为虚线",[119,130053,130054],{},"dotted：边框为点线",[161,130056,130057],{"start":50},[119,130058,130059],{},"边框的合写分写",[18,130061,130062],{"className":126603,"code":129967,"language":126605,"meta":23,"style":23},[25,130063,130064,130068,130074,130090],{"__ignoreMap":23},[28,130065,130066],{"class":30,"line":31},[28,130067,129974],{"class":269},[28,130069,130070,130072],{"class":30,"line":42},[28,130071,51662],{"class":51351},[28,130073,15649],{"class":211},[28,130075,130076,130078,130080,130082,130084,130086,130088],{"class":30,"line":50},[28,130077,70947],{"class":38},[28,130079,51488],{"class":211},[28,130081,427],{"class":38},[28,130083,51543],{"class":207},[28,130085,51572],{"class":38},[28,130087,129995],{"class":38},[28,130089,1370],{"class":211},[28,130091,130092],{"class":30,"line":58},[28,130093,1643],{"class":211},[14,130095,130096],{},"边框分开写法：",[18,130098,130100],{"className":126603,"code":130099,"language":126605,"meta":23,"style":23},"\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",[25,130101,130102,130107,130113,130131,130149,130168,130186],{"__ignoreMap":23},[28,130103,130104],{"class":30,"line":31},[28,130105,130106],{"class":269},"\u002F* 边框分开写法 *\u002F\n",[28,130108,130109,130111],{"class":30,"line":42},[28,130110,51662],{"class":51351},[28,130112,15649],{"class":211},[28,130114,130115,130118,130120,130122,130124,130126,130129],{"class":30,"line":50},[28,130116,130117],{"class":38},"  border-top",[28,130119,51488],{"class":211},[28,130121,427],{"class":38},[28,130123,51543],{"class":207},[28,130125,51572],{"class":38},[28,130127,130128],{"class":38}," #000",[28,130130,1370],{"class":211},[28,130132,130133,130136,130138,130140,130142,130144,130147],{"class":30,"line":58},[28,130134,130135],{"class":38},"  border-right",[28,130137,51488],{"class":211},[28,130139,288],{"class":38},[28,130141,51543],{"class":207},[28,130143,62292],{"class":38},[28,130145,130146],{"class":38}," #333",[28,130148,1370],{"class":211},[28,130150,130151,130154,130156,130158,130160,130163,130166],{"class":30,"line":70},[28,130152,130153],{"class":38},"  border-bottom",[28,130155,51488],{"class":211},[28,130157,282],{"class":38},[28,130159,51543],{"class":207},[28,130161,130162],{"class":38}," dotted",[28,130164,130165],{"class":38}," #666",[28,130167,1370],{"class":211},[28,130169,130170,130173,130175,130177,130179,130181,130184],{"class":30,"line":78},[28,130171,130172],{"class":38},"  border-left",[28,130174,51488],{"class":211},[28,130176,427],{"class":38},[28,130178,51543],{"class":207},[28,130180,51572],{"class":38},[28,130182,130183],{"class":38}," #999",[28,130185,1370],{"class":211},[28,130187,130188],{"class":30,"line":86},[28,130189,1643],{"class":211},[161,130191,130192],{"start":58},[119,130193,130194],{},"表格的细线边框",[14,130196,130197],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[18,130199,130201],{"className":126603,"code":130200,"language":126605,"meta":23,"style":23},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[25,130202,130203,130208,130214,130224],{"__ignoreMap":23},[28,130204,130205],{"class":30,"line":31},[28,130206,130207],{"class":269},"\u002F* 表格细线边框合并 *\u002F\n",[28,130209,130210,130212],{"class":30,"line":42},[28,130211,347],{"class":51351},[28,130213,15649],{"class":211},[28,130215,130216,130218,130220,130222],{"class":30,"line":50},[28,130217,70629],{"class":38},[28,130219,51488],{"class":211},[28,130221,65086],{"class":38},[28,130223,1370],{"class":211},[28,130225,130226],{"class":30,"line":58},[28,130227,1643],{"class":211},[14,130229,130230],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[161,130232,130233],{"start":70},[119,130234,130235],{},"解决边框额外增加盒子的实际大小的方法：",[116,130237,130238,130241],{},[119,130239,130240],{},"测量盒子大小的时候,不量边框",[119,130242,130243],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[177,130245,130247],{"id":130246},"_912-内边距","9.1.2 内边距",[161,130249,130250,130253],{},[119,130251,130252],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[119,130254,129964],{},[347,130256,130257,130267],{},[350,130258,130259],{},[353,130260,130261,130264],{},[356,130262,130263],{"align":23813},"值的个数",[356,130265,130266],{"align":23813},"表达意思",[394,130268,130269,130277,130285,130293],{},[353,130270,130271,130274],{},[399,130272,130273],{"align":23813},"padding: 5px;",[399,130275,130276],{"align":23813},"1个值，代表上下左右都有5个元素",[353,130278,130279,130282],{},[399,130280,130281],{"align":23813},"padding: 5px 10px;",[399,130283,130284],{"align":23813},"2个值，代表上下内边距为5像素，左右内边距为10像素",[353,130286,130287,130290],{},[399,130288,130289],{"align":23813},"padding: 5px 10px 20px;",[399,130291,130292],{"align":23813},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[353,130294,130295,130298],{},[399,130296,130297],{"align":23813},"padding: 5px 10px 20px 30px;",[399,130299,130300],{"align":23813},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[347,130302,130303,130311],{},[350,130304,130305],{},[353,130306,130307,130309],{},[356,130308,129205],{"align":23813},[356,130310,102747],{"align":23813},[394,130312,130313,130321,130329,130337],{},[353,130314,130315,130318],{},[399,130316,130317],{"align":23813},"padding-left",[399,130319,130320],{"align":23813},"左内边距",[353,130322,130323,130326],{},[399,130324,130325],{"align":23813},"padding-right",[399,130327,130328],{"align":23813},"右内边距",[353,130330,130331,130334],{},[399,130332,130333],{"align":23813},"padding-top",[399,130335,130336],{"align":23813},"上内边距",[353,130338,130339,130342],{},[399,130340,130341],{"align":23813},"padding-bottom",[399,130343,130344],{"align":23813},"下内边距",[161,130346,130347],{"start":50},[119,130348,130349],{},"内边距会影响盒子的实际大小",[14,130351,130352],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130354,130355],{},"①内容和边框有了距离，添加了内边距",[14,130357,130358],{},"②padding影响了盒子实际大小",[14,130360,130361],{},"内边距对盒子大小的影响：",[14,130363,130364],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130366,130367],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130369,95271],{},[14,130371,130372],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[177,130374,130376],{"id":130375},"_913-外边距","9.1.3 外边距",[161,130378,130379],{},[119,130380,130381],{},"控制盒子与盒子之间的距离",[347,130383,130384,130392],{},[350,130385,130386],{},[353,130387,130388,130390],{},[356,130389,129205],{"align":23813},[356,130391,102747],{"align":23813},[394,130393,130394,130402,130410,130418],{},[353,130395,130396,130399],{},[399,130397,130398],{"align":23813},"margin-left",[399,130400,130401],{"align":23813},"左外边距",[353,130403,130404,130407],{},[399,130405,130406],{"align":23813},"margin-right",[399,130408,130409],{"align":23813},"右外边距",[353,130411,130412,130415],{},[399,130413,130414],{"align":23813},"margin-top",[399,130416,130417],{"align":23813},"上外边距",[353,130419,130420,130423],{},[399,130421,130422],{"align":23813},"margin-bottom",[399,130424,130425],{"align":23813},"下外边距",[161,130427,130428],{"start":42},[119,130429,130430],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130432,130433],{},"①盒子必须指定了宽度（width）",[14,130435,130436],{},"②盒子左右的外边距都设置为 auto",[18,130438,130440],{"className":126603,"code":130439,"language":126605,"meta":23,"style":23},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[25,130441,130442,130447,130454,130470],{"__ignoreMap":23},[28,130443,130444],{"class":30,"line":31},[28,130445,130446],{"class":269},"\u002F* margin 复合写法（同上） *\u002F\n",[28,130448,130449,130452],{"class":30,"line":42},[28,130450,130451],{"class":34},".box",[28,130453,15649],{"class":211},[28,130455,130456,130458,130460,130462,130464,130467],{"class":30,"line":50},[28,130457,70521],{"class":38},[28,130459,51488],{"class":211},[28,130461,401],{"class":38},[28,130463,51607],{"class":38},[28,130465,130466],{"class":211},";  ",[28,130468,130469],{"class":269},"\u002F* 块级盒子水平居中 *\u002F\n",[28,130471,130472],{"class":30,"line":58},[28,130473,1643],{"class":211},[161,130475,130476],{"start":50},[119,130477,130478],{},"外边距塌陷问题",[14,130480,130481],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1540,130483],{"style":126459,"src":130484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130486,130487],{},"解决方案：",[14,130489,130490],{},"①可以为父亲元素定义上边距",[18,130492,130493],{"className":126603,"code":130439,"language":126605,"meta":23,"style":23},[25,130494,130495,130499,130505,130519],{"__ignoreMap":23},[28,130496,130497],{"class":30,"line":31},[28,130498,130446],{"class":269},[28,130500,130501,130503],{"class":30,"line":42},[28,130502,130451],{"class":34},[28,130504,15649],{"class":211},[28,130506,130507,130509,130511,130513,130515,130517],{"class":30,"line":50},[28,130508,70521],{"class":38},[28,130510,51488],{"class":211},[28,130512,401],{"class":38},[28,130514,51607],{"class":38},[28,130516,130466],{"class":211},[28,130518,130469],{"class":269},[28,130520,130521],{"class":30,"line":58},[28,130522,1643],{"class":211},[14,130524,130525],{},"②可以为父亲元素定义上内边距",[14,130527,130528],{},"③可以为父亲元素添加overflow:hidden",[1540,130530],{"style":126459,"src":130531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[18,130533,130534],{"className":126603,"code":130439,"language":126605,"meta":23,"style":23},[25,130535,130536,130540,130546,130560],{"__ignoreMap":23},[28,130537,130538],{"class":30,"line":31},[28,130539,130446],{"class":269},[28,130541,130542,130544],{"class":30,"line":42},[28,130543,130451],{"class":34},[28,130545,15649],{"class":211},[28,130547,130548,130550,130552,130554,130556,130558],{"class":30,"line":50},[28,130549,70521],{"class":38},[28,130551,51488],{"class":211},[28,130553,401],{"class":38},[28,130555,51607],{"class":38},[28,130557,130466],{"class":211},[28,130559,130469],{"class":269},[28,130561,130562],{"class":30,"line":58},[28,130563,1643],{"class":211},[1540,130565],{"style":126459,"src":130566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130568,130569],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130571,130572],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[177,130574,130576],{"id":130575},"_914-清除内外边距","9.1.4 清除内外边距",[14,130578,130579],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[18,130581,130582],{"className":126603,"code":130439,"language":126605,"meta":23,"style":23},[25,130583,130584,130588,130594,130608],{"__ignoreMap":23},[28,130585,130586],{"class":30,"line":31},[28,130587,130446],{"class":269},[28,130589,130590,130592],{"class":30,"line":42},[28,130591,130451],{"class":34},[28,130593,15649],{"class":211},[28,130595,130596,130598,130600,130602,130604,130606],{"class":30,"line":50},[28,130597,70521],{"class":38},[28,130599,51488],{"class":211},[28,130601,401],{"class":38},[28,130603,51607],{"class":38},[28,130605,130466],{"class":211},[28,130607,130469],{"class":269},[28,130609,130610],{"class":30,"line":58},[28,130611,1643],{"class":211},[14,130613,130614],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[177,130616,130618],{"id":130617},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[116,130620,130621,130624,130627,130630,130633,130636],{},[119,130622,130623],{},"文件→打开 ：可以打开我们要测量的图片",[119,130625,130626],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[119,130628,130629],{},"右击标尺，把里面的单位改为像素",[119,130631,130632],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[119,130634,130635],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[119,130637,130638],{},"用选区拖动 可以测量大小",[1540,130640],{"style":126459,"src":130641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[116,130643,130644,130647],{},[119,130645,130646],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[119,130648,130649],{},"吸管取色工具",[1540,130651],{"style":126459,"src":130652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[177,130654,130656],{"id":130655},"_916-案例","9.1.6 案例",[161,130658,130659],{},[119,130660,130661],{},"小米商品",[1540,130663],{"style":126459,"src":130664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[18,130666,130667],{"className":126603,"code":130439,"language":126605,"meta":23,"style":23},[25,130668,130669,130673,130679,130693],{"__ignoreMap":23},[28,130670,130671],{"class":30,"line":31},[28,130672,130446],{"class":269},[28,130674,130675,130677],{"class":30,"line":42},[28,130676,130451],{"class":34},[28,130678,15649],{"class":211},[28,130680,130681,130683,130685,130687,130689,130691],{"class":30,"line":50},[28,130682,70521],{"class":38},[28,130684,51488],{"class":211},[28,130686,401],{"class":38},[28,130688,51607],{"class":38},[28,130690,130466],{"class":211},[28,130692,130469],{"class":269},[28,130694,130695],{"class":30,"line":58},[28,130696,1643],{"class":211},[161,130698,130699],{"start":42},[119,130700,130701],{},"快报模块",[1540,130703],{"style":126459,"src":130704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[18,130706,130708],{"className":127350,"code":130707,"language":127352,"meta":23,"style":23},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[25,130709,130710,130715,130730,130735],{"__ignoreMap":23},[28,130711,130712],{"class":30,"line":31},[28,130713,130714],{"class":269},"\u003C!-- HTML 代码示例 -->\n",[28,130716,130717,130719,130721,130723,130725,130728],{"class":30,"line":42},[28,130718,1120],{"class":211},[28,130720,51662],{"class":51351},[28,130722,53537],{"class":34},[28,130724,257],{"class":211},[28,130726,130727],{"class":64},"\"example\"",[28,130729,51358],{"class":211},[28,130731,130732],{"class":30,"line":50},[28,130733,130734],{"class":211},"  示例内容\n",[28,130736,130737,130739,130741],{"class":30,"line":58},[28,130738,51836],{"class":211},[28,130740,51662],{"class":51351},[28,130742,51358],{"class":211},[177,130744,130746],{"id":130745},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[161,130748,130749],{},[119,130750,130751],{},"圆角边框",[14,130753,130754],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1540,130756],{"style":126459,"src":130757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[18,130759,130761],{"className":126603,"code":130760,"language":126605,"meta":23,"style":23},"div {\n  border: 1px solid #ccc;\n}\n",[25,130762,130763,130769,130785],{"__ignoreMap":23},[28,130764,130765,130767],{"class":30,"line":31},[28,130766,51662],{"class":51351},[28,130768,15649],{"class":211},[28,130770,130771,130773,130775,130777,130779,130781,130783],{"class":30,"line":42},[28,130772,70947],{"class":38},[28,130774,51488],{"class":211},[28,130776,427],{"class":38},[28,130778,51543],{"class":207},[28,130780,51572],{"class":38},[28,130782,129995],{"class":38},[28,130784,1370],{"class":211},[28,130786,130787],{"class":30,"line":50},[28,130788,1643],{"class":211},[14,130790,130791],{},"解释:",[116,130793,130794,130797,130800,130803,130806],{},[119,130795,130796],{},"参数值可以为数值或百分比的形式",[119,130798,130799],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[119,130801,130802],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[119,130804,130805],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[119,130807,130808],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[161,130810,130811],{"start":42},[119,130812,130813],{},"盒子阴影",[18,130815,130817],{"className":126603,"code":130816,"language":126605,"meta":23,"style":23},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[25,130818,130819,130825,130862],{"__ignoreMap":23},[28,130820,130821,130823],{"class":30,"line":31},[28,130822,51662],{"class":51351},[28,130824,15649],{"class":211},[28,130826,130827,130830,130832,130834,130836,130838,130840,130842,130844,130846,130848,130850,130852,130854,130856,130858,130860],{"class":30,"line":42},[28,130828,130829],{"class":38},"  box-shadow",[28,130831,51488],{"class":211},[28,130833,401],{"class":38},[28,130835,14832],{"class":38},[28,130837,51543],{"class":207},[28,130839,2115],{"class":38},[28,130841,51543],{"class":207},[28,130843,78818],{"class":38},[28,130845,212],{"class":211},[28,130847,401],{"class":38},[28,130849,12512],{"class":211},[28,130851,401],{"class":38},[28,130853,12512],{"class":211},[28,130855,401],{"class":38},[28,130857,12512],{"class":211},[28,130859,86261],{"class":38},[28,130861,2796],{"class":211},[28,130863,130864],{"class":30,"line":50},[28,130865,1643],{"class":211},[347,130867,130868,130876],{},[350,130869,130870],{},[353,130871,130872,130874],{},[356,130873,362],{"align":23813},[356,130875,27540],{"align":23813},[394,130877,130878,130886,130894,130902,130910,130918],{},[353,130879,130880,130883],{},[399,130881,130882],{"align":23813},"h-shadow",[399,130884,130885],{"align":23813},"必需,水平阴影的位置,允许负值",[353,130887,130888,130891],{},[399,130889,130890],{"align":23813},"v-shadow",[399,130892,130893],{"align":23813},"必需,垂直阴影的位置,允许负值",[353,130895,130896,130899],{},[399,130897,130898],{"align":23813},"blur",[399,130900,130901],{"align":23813},"可选,模糊距离,就是影子的虚实",[353,130903,130904,130907],{},[399,130905,130906],{"align":23813},"spread",[399,130908,130909],{"align":23813},"可选,阴影尺寸",[353,130911,130912,130915],{},[399,130913,130914],{"align":23813},"color",[399,130916,130917],{"align":23813},"可选,阴影的颜色",[353,130919,130920,130923],{},[399,130921,130922],{"align":23813},"inset",[399,130924,130925],{"align":23813},"可选,将外部阴影(outset)改为内部阴影",[161,130927,130928],{"start":50},[119,130929,130930],{},"文字阴影",[18,130932,130934],{"className":126603,"code":130933,"language":126605,"meta":23,"style":23},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[25,130935,130936,130942,130981],{"__ignoreMap":23},[28,130937,130938,130940],{"class":30,"line":31},[28,130939,14],{"class":51351},[28,130941,15649],{"class":211},[28,130943,130944,130947,130949,130951,130953,130955,130957,130959,130961,130963,130965,130967,130969,130971,130973,130975,130977,130979],{"class":30,"line":42},[28,130945,130946],{"class":38},"  text-shadow",[28,130948,51488],{"class":211},[28,130950,427],{"class":38},[28,130952,51543],{"class":207},[28,130954,25189],{"class":38},[28,130956,51543],{"class":207},[28,130958,14832],{"class":38},[28,130960,51543],{"class":207},[28,130962,78818],{"class":38},[28,130964,212],{"class":211},[28,130966,401],{"class":38},[28,130968,12512],{"class":211},[28,130970,401],{"class":38},[28,130972,12512],{"class":211},[28,130974,401],{"class":38},[28,130976,12512],{"class":211},[28,130978,100572],{"class":38},[28,130980,2796],{"class":211},[28,130982,130983],{"class":30,"line":50},[28,130984,1643],{"class":211},[347,130986,130987,130995],{},[350,130988,130989],{},[353,130990,130991,130993],{},[356,130992,362],{"align":23813},[356,130994,27540],{"align":23813},[394,130996,130997,131003,131010,131017],{},[353,130998,130999,131001],{},[399,131000,130882],{"align":23813},[399,131002,130885],{"align":23813},[353,131004,131005,131007],{},[399,131006,130890],{"align":23813},[399,131008,131009],{"align":23813},"必需,垂直阴影位置,允许负值",[353,131011,131012,131014],{},[399,131013,130898],{"align":23813},[399,131015,131016],{"align":23813},"可选,模糊的距离",[353,131018,131019,131021],{},[399,131020,130914],{"align":23813},[399,131022,130917],{"align":23813},[149,131024,131026],{"id":131025},"_92-浮动","9.2 浮动",[177,131028,131030],{"id":131029},"_921-浮动介绍","9.2.1 浮动介绍",[14,131032,131033],{},"在16.2中详细介绍",[177,131035,131037],{"id":131036},"_922-清除浮动","9.2.2 清除浮动",[161,131039,131040,131043],{},[119,131041,131042],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[119,131044,131045],{},"清除浮动的本质",[14,131047,131048],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,131050,9102],{},[116,131052,131053,131056,131059],{},[119,131054,131055],{},"如果父盒子本身有高度，则不需要清除浮动",[119,131057,131058],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[119,131060,131061],{},"父级有了高度，就不会影响下面的标准流了",[161,131063,131064],{"start":50},[119,131065,131066],{},"清除浮动样式",[18,131068,131070],{"className":126603,"code":131069,"language":126605,"meta":23,"style":23},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[25,131071,131072,131079,131090,131094,131101,131111],{"__ignoreMap":23},[28,131073,131074,131077],{"class":30,"line":31},[28,131075,131076],{"class":34},".left",[28,131078,15649],{"class":211},[28,131080,131081,131084,131086,131088],{"class":30,"line":42},[28,131082,131083],{"class":38},"  float",[28,131085,51488],{"class":211},[28,131087,23813],{"class":38},[28,131089,1370],{"class":211},[28,131091,131092],{"class":30,"line":50},[28,131093,1643],{"class":211},[28,131095,131096,131099],{"class":30,"line":58},[28,131097,131098],{"class":34},".right",[28,131100,15649],{"class":211},[28,131102,131103,131105,131107,131109],{"class":30,"line":70},[28,131104,131083],{"class":38},[28,131106,51488],{"class":211},[28,131108,72573],{"class":38},[28,131110,1370],{"class":211},[28,131112,131113],{"class":30,"line":78},[28,131114,1643],{"class":211},[347,131116,131117,131125],{},[350,131118,131119],{},[353,131120,131121,131123],{},[356,131122,127067],{"align":23813},[356,131124,27540],{"align":23813},[394,131126,131127,131134,131141],{},[353,131128,131129,131131],{},[399,131130,23813],{"align":23813},[399,131132,131133],{"align":23813},"不允许左侧有浮动元素（清除左侧浮动的影响）",[353,131135,131136,131138],{},[399,131137,72573],{"align":23813},[399,131139,131140],{"align":23813},"不允许右侧有浮动元素（清除右侧浮动的影响）",[353,131142,131143,131146],{},[399,131144,131145],{"align":23813},"both",[399,131147,131148],{"align":23813},"同时清除左右侧浮动的影响",[14,131150,131151],{},"法一",[14,131153,131154],{},"额外标签法也称为隔墙法",[14,131156,131157],{},"使用方式：",[14,131159,131160],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[18,131162,131163],{"className":126603,"code":131069,"language":126605,"meta":23,"style":23},[25,131164,131165,131171,131181,131185,131191,131201],{"__ignoreMap":23},[28,131166,131167,131169],{"class":30,"line":31},[28,131168,131076],{"class":34},[28,131170,15649],{"class":211},[28,131172,131173,131175,131177,131179],{"class":30,"line":42},[28,131174,131083],{"class":38},[28,131176,51488],{"class":211},[28,131178,23813],{"class":38},[28,131180,1370],{"class":211},[28,131182,131183],{"class":30,"line":50},[28,131184,1643],{"class":211},[28,131186,131187,131189],{"class":30,"line":58},[28,131188,131098],{"class":34},[28,131190,15649],{"class":211},[28,131192,131193,131195,131197,131199],{"class":30,"line":70},[28,131194,131083],{"class":38},[28,131196,51488],{"class":211},[28,131198,72573],{"class":38},[28,131200,1370],{"class":211},[28,131202,131203],{"class":30,"line":78},[28,131204,1643],{"class":211},[14,131206,131207],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131209,131210],{},"优点： 通俗易懂，书写方便",[14,131212,131213],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131215,131216],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131218,131219],{},"法二",[14,131221,131222],{},"父级添加overflow属性",[18,131224,131225],{"className":126603,"code":131069,"language":126605,"meta":23,"style":23},[25,131226,131227,131233,131243,131247,131253,131263],{"__ignoreMap":23},[28,131228,131229,131231],{"class":30,"line":31},[28,131230,131076],{"class":34},[28,131232,15649],{"class":211},[28,131234,131235,131237,131239,131241],{"class":30,"line":42},[28,131236,131083],{"class":38},[28,131238,51488],{"class":211},[28,131240,23813],{"class":38},[28,131242,1370],{"class":211},[28,131244,131245],{"class":30,"line":50},[28,131246,1643],{"class":211},[28,131248,131249,131251],{"class":30,"line":58},[28,131250,131098],{"class":34},[28,131252,15649],{"class":211},[28,131254,131255,131257,131259,131261],{"class":30,"line":70},[28,131256,131083],{"class":38},[28,131258,51488],{"class":211},[28,131260,72573],{"class":38},[28,131262,1370],{"class":211},[28,131264,131265],{"class":30,"line":78},[28,131266,1643],{"class":211},[14,131268,131269],{},"overflow: hidden;",[14,131271,131272],{},"优点：代码简洁",[14,131274,131275],{},"缺点：无法显示溢出的部分",[14,131277,131278],{},"注意：是给父元素添加代码",[14,131280,131281],{},"法三",[14,131283,131284],{},"父级添加after伪元素",[14,131286,131287,131290],{},[131288,131289],"after",{}," 方式是额外标签法的升级版",[14,131292,131293],{},"使用的时候复制就可以",[18,131295,131296],{"className":126603,"code":131069,"language":126605,"meta":23,"style":23},[25,131297,131298,131304,131314,131318,131324,131334],{"__ignoreMap":23},[28,131299,131300,131302],{"class":30,"line":31},[28,131301,131076],{"class":34},[28,131303,15649],{"class":211},[28,131305,131306,131308,131310,131312],{"class":30,"line":42},[28,131307,131083],{"class":38},[28,131309,51488],{"class":211},[28,131311,23813],{"class":38},[28,131313,1370],{"class":211},[28,131315,131316],{"class":30,"line":50},[28,131317,1643],{"class":211},[28,131319,131320,131322],{"class":30,"line":58},[28,131321,131098],{"class":34},[28,131323,15649],{"class":211},[28,131325,131326,131328,131330,131332],{"class":30,"line":70},[28,131327,131083],{"class":38},[28,131329,51488],{"class":211},[28,131331,72573],{"class":38},[28,131333,1370],{"class":211},[28,131335,131336],{"class":30,"line":78},[28,131337,1643],{"class":211},[14,131339,131340],{},"优点：没有增加标签，结构更简单",[14,131342,131343],{},"缺点：照顾低版本浏览器",[14,131345,131346],{},"代表网站： 百度、淘宝网、网易等",[14,131348,131349],{},"法四",[14,131351,131352],{},"父级添加双伪元素",[18,131354,131355],{"className":126603,"code":131069,"language":126605,"meta":23,"style":23},[25,131356,131357,131363,131373,131377,131383,131393],{"__ignoreMap":23},[28,131358,131359,131361],{"class":30,"line":31},[28,131360,131076],{"class":34},[28,131362,15649],{"class":211},[28,131364,131365,131367,131369,131371],{"class":30,"line":42},[28,131366,131083],{"class":38},[28,131368,51488],{"class":211},[28,131370,23813],{"class":38},[28,131372,1370],{"class":211},[28,131374,131375],{"class":30,"line":50},[28,131376,1643],{"class":211},[28,131378,131379,131381],{"class":30,"line":58},[28,131380,131098],{"class":34},[28,131382,15649],{"class":211},[28,131384,131385,131387,131389,131391],{"class":30,"line":70},[28,131386,131083],{"class":38},[28,131388,51488],{"class":211},[28,131390,72573],{"class":38},[28,131392,1370],{"class":211},[28,131394,131395],{"class":30,"line":78},[28,131396,1643],{"class":211},[14,131398,131399],{},"优点：代码更简洁",[14,131401,131343],{},[14,131403,131404],{},"代表网站：小米、腾讯等",[149,131406,131408],{"id":131407},"_93-ps切图","9.3 PS切图",[177,131410,131412],{"id":131411},"_931-常见图片格式","9.3.1 常见图片格式",[347,131414,131415,131425],{},[350,131416,131417],{},[353,131418,131419,131422],{},[356,131420,131421],{"align":23813},"jpg图像格式",[356,131423,131424],{"align":23813},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[394,131426,131427,131435,131443],{},[353,131428,131429,131432],{},[399,131430,131431],{"align":23813},"gif图像格式",[399,131433,131434],{"align":23813},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[353,131436,131437,131440],{},[399,131438,131439],{"align":23813},"png图像格式",[399,131441,131442],{"align":23813},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[353,131444,131445,131448],{},[399,131446,131447],{"align":23813},"PSD图像格式",[399,131449,131450],{"align":23813},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[177,131452,131454],{"id":131453},"_932-图层切图","9.3.2 图层切图",[14,131456,131457],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131459,131460],{},"按住shift选中两个图层->图层菜单->合并图层",[177,131462,131464],{"id":131463},"_933-切片切图","9.3.3 切片切图",[116,131466,131467,131470],{},[119,131468,131469],{},"利用切片工具手动划出",[119,131471,131472],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[177,131474,131476],{"id":131475},"_934-切图步骤","9.3.4 切图步骤",[14,131478,131479],{},"用切片工具选中：",[1540,131481],{"style":126459,"src":131482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131484,131485],{},"文件 -> 导出",[1540,131487],{"style":126459,"src":131488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[126,131490,131491],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":23,"searchDepth":42,"depth":42,"links":131493},[131494,131503,131507],{"id":129930,"depth":42,"text":129931,"children":131495},[131496,131497,131498,131499,131500,131501,131502],{"id":129955,"depth":50,"text":129956},{"id":130246,"depth":50,"text":130247},{"id":130375,"depth":50,"text":130376},{"id":130575,"depth":50,"text":130576},{"id":130617,"depth":50,"text":130618},{"id":130655,"depth":50,"text":130656},{"id":130745,"depth":50,"text":130746},{"id":131025,"depth":42,"text":131026,"children":131504},[131505,131506],{"id":131029,"depth":50,"text":131030},{"id":131036,"depth":50,"text":131037},{"id":131407,"depth":42,"text":131408,"children":131508},[131509,131510,131511,131512],{"id":131411,"depth":50,"text":131412},{"id":131453,"depth":50,"text":131454},{"id":131463,"depth":50,"text":131464},{"id":131475,"depth":50,"text":131476},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129922,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131519,"title":131520,"body":131521,"description":131,"extension":132,"meta":132162,"navigation":134,"path":132163,"seo":132164,"stem":132165,"__hash__":132166},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131522,"toc":132150},[131523,131526,131530,131556,131590,131594,131598,131601,131643,131650,131660,131668,131670,131673,131676,131679,131686,131700,131704,131707,131736,131740,131743,131757,131761,131764,131792,131796,131799,131825,131829,131834,131867,131872,131900,131904,131921,131967,131972,132016,132033,132140,132148],[10,131524,131520],{"id":131525},"_10-css规范与学成在线案例",[149,131527,131529],{"id":131528},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[161,131531,131532,131538,131544,131550],{},[119,131533,131534,131537],{},[359,131535,131536],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[119,131539,131540,131543],{},[359,131541,131542],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[119,131545,131546,131549],{},[359,131547,131548],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[119,131551,131552,131555],{},[359,131553,131554],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[18,131557,131558],{"className":126603,"code":129967,"language":126605,"meta":23,"style":23},[25,131559,131560,131564,131570,131586],{"__ignoreMap":23},[28,131561,131562],{"class":30,"line":31},[28,131563,129974],{"class":269},[28,131565,131566,131568],{"class":30,"line":42},[28,131567,51662],{"class":51351},[28,131569,15649],{"class":211},[28,131571,131572,131574,131576,131578,131580,131582,131584],{"class":30,"line":50},[28,131573,70947],{"class":38},[28,131575,51488],{"class":211},[28,131577,427],{"class":38},[28,131579,51543],{"class":207},[28,131581,51572],{"class":38},[28,131583,129995],{"class":38},[28,131585,1370],{"class":211},[28,131587,131588],{"class":30,"line":58},[28,131589,1643],{"class":211},[149,131591,131593],{"id":131592},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[177,131595,131597],{"id":131596},"_1021-header头部制作","10.2.1 header头部制作",[1540,131599],{"style":126459,"src":131600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[116,131602,131603,131610,131617,131623,131630,131637],{},[119,131604,131605,131606,131609],{},"1号是版心盒子 ",[359,131607,131608],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[119,131611,131612,131613,131616],{},"版心盒子 里面包含 2号盒子 ",[359,131614,131615],{},"logo"," 图标",[119,131618,131619,131620,131622],{},"版心盒子 里面包含 3号盒子 ",[359,131621,53764],{}," 导航栏",[119,131624,131625,131626,131629],{},"版心盒子 里面包含 4号盒子 ",[359,131627,131628],{},"search"," 搜索框",[119,131631,131632,131633,131636],{},"版心盒子 里面包含 5号盒子 ",[359,131634,131635],{},"user"," 个人信息",[119,131638,131639,131640],{},"注意，要求里面的 ",[359,131641,131642],{},"4个子盒子 必须都浮动",[161,131644,131645],{},[119,131646,131647],{},[359,131648,131649],{},"导航栏注意点:",[14,131651,131652,131653,131656,131657],{},"实际开发中， ",[359,131654,131655],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[359,131658,131659],{},"用 li 包含链接(li+a)的做法",[116,131661,131662,131665],{},[119,131663,131664],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[119,131666,131667],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131669,9102],{},[14,131671,131672],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131674,131675],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131677,131678],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[161,131680,131681],{"start":42},[119,131682,131683],{},[359,131684,131685],{},"4号盒子search的细节：",[116,131687,131688,131691,131694],{},[119,131689,131690],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[119,131692,131693],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[119,131695,131696,131699],{},[25,131697,131698],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[177,131701,131703],{"id":131702},"_1022-banner制作","10.2.2 banner制作",[1540,131705],{"style":126459,"src":131706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[116,131708,131709,131716,131722,131729],{},[119,131710,131711,131712,131715],{},"1号盒子是通栏的大盒子 ",[359,131713,131714],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[119,131717,131718,131719,131721],{},"2号盒子是版心 ",[359,131720,1005],{}," ， 要水平居中对齐",[119,131723,131724,131725,131728],{},"3号盒子版心内，左对齐 ",[359,131726,131727],{},"subnav"," 侧导航栏",[119,131730,131731,131732,131735],{},"4号盒子版心内，右对齐 ",[359,131733,131734],{},"course"," 课程",[177,131737,131739],{"id":131738},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1540,131741],{"style":126459,"src":131742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[116,131744,131745,131748,131751,131754],{},[119,131746,131747],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[119,131749,131750],{},"1号盒子是标题 H3 左侧浮动",[119,131752,131753],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[119,131755,131756],{},"3号盒子 右浮动 mod 修改",[177,131758,131760],{"id":131759},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1540,131762],{"style":126459,"src":131763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[116,131765,131766,131772,131779,131786,131789],{},[119,131767,131768,131769,131771],{},"1号盒子为最大的盒子 ",[359,131770,53765],{}," 版心水平居中对齐",[119,131773,131774,131775,131778],{},"2号盒子为上面部分 ",[359,131776,131777],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[119,131780,131781,131782,131785],{},"3号盒子为底下部分 ",[359,131783,131784],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[119,131787,131788],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[119,131790,131791],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[177,131793,131795],{"id":131794},"_1025-底部模块制作","10.2.5 底部模块制作",[1540,131797],{"style":126459,"src":131798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[116,131800,131801,131808,131811,131818],{},[119,131802,131803,131804,131807],{},"1号盒子通栏大盒子 底部 ",[359,131805,131806],{},"footer"," 给高度 底色是白色",[119,131809,131810],{},"2号盒子版心水平居中",[119,131812,131813,131814,131817],{},"3号盒子版权 ",[359,131815,131816],{},"copyright"," 左对齐",[119,131819,131820,131821,131824],{},"4号盒子 链接组 ",[359,131822,131823],{},"links"," 右对齐",[177,131826,131828],{"id":131827},"_1026-代码模块","10.2.6 代码模块",[161,131830,131831],{},[119,131832,131833],{},"html部分",[18,131835,131837],{"className":127350,"code":131836,"language":127352,"meta":23,"style":23},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[25,131838,131839],{"__ignoreMap":23},[28,131840,131841,131843,131845,131847,131849,131852,131855,131857,131860,131863,131865],{"class":30,"line":31},[28,131842,1120],{"class":211},[28,131844,448],{"class":51351},[28,131846,61108],{"class":34},[28,131848,257],{"class":211},[28,131850,131851],{"class":64},"\"https:\u002F\u002Fexample.com\"",[28,131853,131854],{"class":34}," target",[28,131856,257],{"class":211},[28,131858,131859],{"class":64},"\"_blank\"",[28,131861,131862],{"class":211},">链接文字\u003C\u002F",[28,131864,448],{"class":51351},[28,131866,51358],{"class":211},[161,131868,131869],{"start":42},[119,131870,131871],{},"css部分",[18,131873,131874],{"className":127350,"code":131836,"language":127352,"meta":23,"style":23},[25,131875,131876],{"__ignoreMap":23},[28,131877,131878,131880,131882,131884,131886,131888,131890,131892,131894,131896,131898],{"class":30,"line":31},[28,131879,1120],{"class":211},[28,131881,448],{"class":51351},[28,131883,61108],{"class":34},[28,131885,257],{"class":211},[28,131887,131851],{"class":64},[28,131889,131854],{"class":34},[28,131891,257],{"class":211},[28,131893,131859],{"class":64},[28,131895,131862],{"class":211},[28,131897,448],{"class":51351},[28,131899,51358],{"class":211},[177,131901,131903],{"id":131902},"_1027-收获","10.2.7 收获",[161,131905,131906,131909,131912,131915,131918],{},[119,131907,131908],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[119,131910,131911],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[119,131913,131914],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[119,131916,131917],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[119,131919,131920],{},"遗忘代码",[18,131922,131924],{"className":126603,"code":131923,"language":126605,"meta":23,"style":23},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[25,131925,131926,131948,131953,131963],{"__ignoreMap":23},[28,131927,131928,131930,131932,131934,131936,131938,131940,131942,131944,131946],{"class":30,"line":31},[28,131929,51662],{"class":51351},[28,131931,12512],{"class":211},[28,131933,14],{"class":51351},[28,131935,12512],{"class":211},[28,131937,10],{"class":51351},[28,131939,12512],{"class":211},[28,131941,116],{"class":51351},[28,131943,12512],{"class":211},[28,131945,119],{"class":51351},[28,131947,15649],{"class":211},[28,131949,131950],{"class":30,"line":42},[28,131951,131952],{"class":269},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[28,131954,131955,131957,131959,131961],{"class":30,"line":50},[28,131956,128219],{"class":38},[28,131958,51488],{"class":211},[28,131960,60920],{"class":38},[28,131962,1370],{"class":211},[28,131964,131965],{"class":30,"line":58},[28,131966,1643],{"class":211},[161,131968,131969],{"start":78},[119,131970,131971],{},"html引css的程序",[18,131973,131974],{"className":126603,"code":131923,"language":126605,"meta":23,"style":23},[25,131975,131976,131998,132002,132012],{"__ignoreMap":23},[28,131977,131978,131980,131982,131984,131986,131988,131990,131992,131994,131996],{"class":30,"line":31},[28,131979,51662],{"class":51351},[28,131981,12512],{"class":211},[28,131983,14],{"class":51351},[28,131985,12512],{"class":211},[28,131987,10],{"class":51351},[28,131989,12512],{"class":211},[28,131991,116],{"class":51351},[28,131993,12512],{"class":211},[28,131995,119],{"class":51351},[28,131997,15649],{"class":211},[28,131999,132000],{"class":30,"line":42},[28,132001,131952],{"class":269},[28,132003,132004,132006,132008,132010],{"class":30,"line":50},[28,132005,128219],{"class":38},[28,132007,51488],{"class":211},[28,132009,60920],{"class":38},[28,132011,1370],{"class":211},[28,132013,132014],{"class":30,"line":58},[28,132015,1643],{"class":211},[161,132017,132018,132021,132024,132027,132030],{"start":86},[119,132019,132020],{},"浮动的盒子不会有外边距合并问题",[119,132022,132023],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[119,132025,132026],{},"ctrl+g快速定位行；shift+alt多个光标",[119,132028,132029],{},"学习上方各个模块的选择器起名方法，以后就这样用",[119,132031,132032],{},"在写选择器时尽量写全一些，例如",[18,132034,132036],{"className":126603,"code":132035,"language":126605,"meta":23,"style":23},"\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",[25,132037,132038,132043,132059,132064,132079,132084,132099,132104,132119,132124],{"__ignoreMap":23},[28,132039,132040],{"class":30,"line":31},[28,132041,132042],{"class":269},"\u002F* 静态定位（默认） *\u002F\n",[28,132044,132045,132048,132050,132052,132054,132057],{"class":30,"line":42},[28,132046,132047],{"class":34},".static",[28,132049,79858],{"class":211},[28,132051,128963],{"class":38},[28,132053,51488],{"class":211},[28,132055,132056],{"class":38},"static",[28,132058,129533],{"class":211},[28,132060,132061],{"class":30,"line":50},[28,132062,132063],{"class":269},"\u002F* 相对定位 *\u002F\n",[28,132065,132066,132069,132071,132073,132075,132077],{"class":30,"line":58},[28,132067,132068],{"class":34},".relative",[28,132070,79858],{"class":211},[28,132072,128963],{"class":38},[28,132074,51488],{"class":211},[28,132076,54815],{"class":38},[28,132078,129533],{"class":211},[28,132080,132081],{"class":30,"line":70},[28,132082,132083],{"class":269},"\u002F* 绝对定位 *\u002F\n",[28,132085,132086,132089,132091,132093,132095,132097],{"class":30,"line":78},[28,132087,132088],{"class":34},".absolute",[28,132090,79858],{"class":211},[28,132092,128963],{"class":38},[28,132094,51488],{"class":211},[28,132096,54882],{"class":38},[28,132098,129533],{"class":211},[28,132100,132101],{"class":30,"line":86},[28,132102,132103],{"class":269},"\u002F* 固定定位 *\u002F\n",[28,132105,132106,132109,132111,132113,132115,132117],{"class":30,"line":97},[28,132107,132108],{"class":34},".fixed",[28,132110,79858],{"class":211},[28,132112,128963],{"class":38},[28,132114,51488],{"class":211},[28,132116,86284],{"class":38},[28,132118,129533],{"class":211},[28,132120,132121],{"class":30,"line":108},[28,132122,132123],{"class":269},"\u002F* 粘性定位 *\u002F\n",[28,132125,132126,132129,132131,132133,132135,132138],{"class":30,"line":1407},[28,132127,132128],{"class":34},".sticky",[28,132130,79858],{"class":211},[28,132132,128963],{"class":38},[28,132134,51488],{"class":211},[28,132136,132137],{"class":38},"sticky",[28,132139,129533],{"class":211},[161,132141,132142,132145],{"start":1695},[119,132143,132144],{},"一定要用好注释",[119,132146,132147],{},"浮动的盒子不会有外边距合并的问题",[126,132149,131491],{},{"title":23,"searchDepth":42,"depth":42,"links":132151},[132152,132153],{"id":131528,"depth":42,"text":131529},{"id":131592,"depth":42,"text":131593,"children":132154},[132155,132156,132157,132158,132159,132160,132161],{"id":131596,"depth":50,"text":131597},{"id":131702,"depth":50,"text":131703},{"id":131738,"depth":50,"text":131739},{"id":131759,"depth":50,"text":131760},{"id":131794,"depth":50,"text":131795},{"id":131827,"depth":50,"text":131828},{"id":131902,"depth":50,"text":131903},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131520,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132168,"title":132169,"body":132170,"description":131,"extension":132,"meta":133656,"navigation":134,"path":133657,"seo":133658,"stem":133659,"__hash__":133660},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132171,"toc":133648},[132172,132175,132179,132183,132194,132198,132215,132259,132292,132295,132312,132315,132318,132362,132366,132370,132373,132376,132380,132383,132394,132457,132498,132501,132516,132570,132578,132581,132592,132646,132672,132675,132688,132742,132774,132828,132851,132905,132908,132911,132918,132972,132993,133047,133050,133053,133138,133146,133203,133226,133230,133233,133251,133255,133274,133328,133366,133370,133373,133376,133398,133402,133410,133413,133418,133429,133432,133436,133450,133494,133497,133501,133504,133509,133535,133540,133617,133620,133624,133627,133630,133633,133636,133639,133642,133645],[10,132173,132169],{"id":132174},"_11-传统布局与定位体系",[149,132176,132178],{"id":132177},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[177,132180,132182],{"id":132181},"_1111-普通流标准流","11.1.1 普通流（标准流）",[116,132184,132185,132188,132191],{},[119,132186,132187],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[119,132189,132190],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[119,132192,132193],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[177,132195,132197],{"id":132196},"_1112-浮动","11.1.2 浮动",[116,132199,132200,132203,132206,132209,132212],{},[119,132201,132202],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[119,132204,132205],{},"浮动可以改变元素标签默认的排列方式",[119,132207,132208],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[119,132210,132211],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[119,132213,132214],{},"在使用行内块转换时盒子之间是有空隙的",[18,132216,132217],{"className":126603,"code":131069,"language":126605,"meta":23,"style":23},[25,132218,132219,132225,132235,132239,132245,132255],{"__ignoreMap":23},[28,132220,132221,132223],{"class":30,"line":31},[28,132222,131076],{"class":34},[28,132224,15649],{"class":211},[28,132226,132227,132229,132231,132233],{"class":30,"line":42},[28,132228,131083],{"class":38},[28,132230,51488],{"class":211},[28,132232,23813],{"class":38},[28,132234,1370],{"class":211},[28,132236,132237],{"class":30,"line":50},[28,132238,1643],{"class":211},[28,132240,132241,132243],{"class":30,"line":58},[28,132242,131098],{"class":34},[28,132244,15649],{"class":211},[28,132246,132247,132249,132251,132253],{"class":30,"line":70},[28,132248,131083],{"class":38},[28,132250,51488],{"class":211},[28,132252,72573],{"class":38},[28,132254,1370],{"class":211},[28,132256,132257],{"class":30,"line":78},[28,132258,1643],{"class":211},[347,132260,132261,132269],{},[350,132262,132263],{},[353,132264,132265,132267],{},[356,132266,127067],{"align":23813},[356,132268,27540],{"align":23813},[394,132270,132271,132278,132285],{},[353,132272,132273,132275],{},[399,132274,54788],{"align":23813},[399,132276,132277],{"align":23813},"元素不浮动（默认值）",[353,132279,132280,132282],{},[399,132281,23813],{"align":23813},[399,132283,132284],{"align":23813},"元素向左浮动",[353,132286,132287,132289],{},[399,132288,72573],{"align":23813},[399,132290,132291],{"align":23813},"元素向右浮动",[14,132293,132294],{},"浮动重点：",[116,132296,132297,132300,132303,132306,132309],{},[119,132298,132299],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[119,132301,132302],{},"浮动的元素会一行内显示并且元素顶部对齐",[119,132304,132305],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[119,132307,132308],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[119,132310,132311],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132313,132314],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132316,132317],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[18,132319,132320],{"className":126603,"code":131069,"language":126605,"meta":23,"style":23},[25,132321,132322,132328,132338,132342,132348,132358],{"__ignoreMap":23},[28,132323,132324,132326],{"class":30,"line":31},[28,132325,131076],{"class":34},[28,132327,15649],{"class":211},[28,132329,132330,132332,132334,132336],{"class":30,"line":42},[28,132331,131083],{"class":38},[28,132333,51488],{"class":211},[28,132335,23813],{"class":38},[28,132337,1370],{"class":211},[28,132339,132340],{"class":30,"line":50},[28,132341,1643],{"class":211},[28,132343,132344,132346],{"class":30,"line":58},[28,132345,131098],{"class":34},[28,132347,15649],{"class":211},[28,132349,132350,132352,132354,132356],{"class":30,"line":70},[28,132351,131083],{"class":38},[28,132353,51488],{"class":211},[28,132355,72573],{"class":38},[28,132357,1370],{"class":211},[28,132359,132360],{"class":30,"line":78},[28,132361,1643],{"class":211},[177,132363,132365],{"id":132364},"_1113-定位","11.1.3 定位",[22075,132367,132369],{"id":132368},"_11131-使用场景","11.1.3.1 使用场景",[14,132371,132372],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132374,132375],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22075,132377,132379],{"id":132378},"_11132-定位组成","11.1.3.2 定位组成",[14,132381,132382],{},"定位 = 定位模式 + 边偏移",[161,132384,132385],{},[119,132386,132387,132390,132391],{},[359,132388,132389],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[359,132392,132393],{},"定位模式",[18,132395,132397],{"className":126603,"code":132396,"language":126605,"meta":23,"style":23},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[25,132398,132399,132405,132419,132436,132453],{"__ignoreMap":23},[28,132400,132401,132403],{"class":30,"line":31},[28,132402,130451],{"class":34},[28,132404,15649],{"class":211},[28,132406,132407,132410,132412,132414,132416],{"class":30,"line":42},[28,132408,132409],{"class":38},"  position",[28,132411,51488],{"class":211},[28,132413,54815],{"class":38},[28,132415,130466],{"class":211},[28,132417,132418],{"class":269},"\u002F* 定位模式 *\u002F\n",[28,132420,132421,132424,132426,132428,132430,132433],{"class":30,"line":50},[28,132422,132423],{"class":38},"  top",[28,132425,51488],{"class":211},[28,132427,656],{"class":38},[28,132429,51543],{"class":207},[28,132431,132432],{"class":211},";           ",[28,132434,132435],{"class":269},"\u002F* 边偏移：上 *\u002F\n",[28,132437,132438,132441,132443,132445,132447,132450],{"class":30,"line":58},[28,132439,132440],{"class":38},"  left",[28,132442,51488],{"class":211},[28,132444,910],{"class":38},[28,132446,51543],{"class":207},[28,132448,132449],{"class":211},";          ",[28,132451,132452],{"class":269},"\u002F* 边偏移：左 *\u002F\n",[28,132454,132455],{"class":30,"line":70},[28,132456,1643],{"class":211},[347,132458,132459,132468],{},[350,132460,132461],{},[353,132462,132463,132465],{},[356,132464,362],{"align":23813},[356,132466,132467],{"align":23813},"语义",[394,132469,132470,132477,132484,132491],{},[353,132471,132472,132474],{},[399,132473,132056],{"align":23813},[399,132475,132476],{"align":23813},"静态定位",[353,132478,132479,132481],{},[399,132480,54815],{"align":23813},[399,132482,132483],{"align":23813},"相对定位",[353,132485,132486,132488],{},[399,132487,54882],{"align":23813},[399,132489,132490],{"align":23813},"绝对定位",[353,132492,132493,132495],{},[399,132494,86284],{"align":23813},[399,132496,132497],{"align":23813},"固定定位",[14,132499,132500],{},"（1）静态定位：",[116,132502,132503,132514],{},[119,132504,132505,132506,132509,132510,132513],{},"静态定位是元素的 ",[359,132507,132508],{},"默认定位方式"," ， ",[359,132511,132512],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[119,132515,5258],{},[18,132517,132518],{"className":126603,"code":132396,"language":126605,"meta":23,"style":23},[25,132519,132520,132526,132538,132552,132566],{"__ignoreMap":23},[28,132521,132522,132524],{"class":30,"line":31},[28,132523,130451],{"class":34},[28,132525,15649],{"class":211},[28,132527,132528,132530,132532,132534,132536],{"class":30,"line":42},[28,132529,132409],{"class":38},[28,132531,51488],{"class":211},[28,132533,54815],{"class":38},[28,132535,130466],{"class":211},[28,132537,132418],{"class":269},[28,132539,132540,132542,132544,132546,132548,132550],{"class":30,"line":50},[28,132541,132423],{"class":38},[28,132543,51488],{"class":211},[28,132545,656],{"class":38},[28,132547,51543],{"class":207},[28,132549,132432],{"class":211},[28,132551,132435],{"class":269},[28,132553,132554,132556,132558,132560,132562,132564],{"class":30,"line":58},[28,132555,132440],{"class":38},[28,132557,51488],{"class":211},[28,132559,910],{"class":38},[28,132561,51543],{"class":207},[28,132563,132449],{"class":211},[28,132565,132452],{"class":269},[28,132567,132568],{"class":30,"line":70},[28,132569,1643],{"class":211},[116,132571,132572,132575],{},[119,132573,132574],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[119,132576,132577],{},"静态定位在布局时我们几乎不用的",[14,132579,132580],{},"（2）相对定位",[116,132582,132583,132590],{},[119,132584,132585,132586,132589],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[359,132587,132588],{},"原来的位置"," 来说的（自恋型）",[119,132591,5258],{},[18,132593,132594],{"className":126603,"code":132396,"language":126605,"meta":23,"style":23},[25,132595,132596,132602,132614,132628,132642],{"__ignoreMap":23},[28,132597,132598,132600],{"class":30,"line":31},[28,132599,130451],{"class":34},[28,132601,15649],{"class":211},[28,132603,132604,132606,132608,132610,132612],{"class":30,"line":42},[28,132605,132409],{"class":38},[28,132607,51488],{"class":211},[28,132609,54815],{"class":38},[28,132611,130466],{"class":211},[28,132613,132418],{"class":269},[28,132615,132616,132618,132620,132622,132624,132626],{"class":30,"line":50},[28,132617,132423],{"class":38},[28,132619,51488],{"class":211},[28,132621,656],{"class":38},[28,132623,51543],{"class":207},[28,132625,132432],{"class":211},[28,132627,132435],{"class":269},[28,132629,132630,132632,132634,132636,132638,132640],{"class":30,"line":58},[28,132631,132440],{"class":38},[28,132633,51488],{"class":211},[28,132635,910],{"class":38},[28,132637,51543],{"class":207},[28,132639,132449],{"class":211},[28,132641,132452],{"class":269},[28,132643,132644],{"class":30,"line":70},[28,132645,1643],{"class":211},[116,132647,132648],{},[119,132649,132650,132651,132653,132654,132656,132657,132660,132661,132664,132665,132667,132668,132671],{},"相对定位的特点：",[53767,132652],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53767,132655],{},"  ② ",[359,132658,132659],{},"原来"," 在标准流的 ",[359,132662,132663],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53767,132666],{},"  ③因此， ",[359,132669,132670],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132673,132674],{},"（3）绝对定位",[116,132676,132677,132686],{},[119,132678,132679,132681,132682,132685],{},[359,132680,132490],{}," 是元素在移动位置的时候，是相对于它 ",[359,132683,132684],{},"祖先元素"," 来说的（拼爹型）",[119,132687,5258],{},[18,132689,132690],{"className":126603,"code":132396,"language":126605,"meta":23,"style":23},[25,132691,132692,132698,132710,132724,132738],{"__ignoreMap":23},[28,132693,132694,132696],{"class":30,"line":31},[28,132695,130451],{"class":34},[28,132697,15649],{"class":211},[28,132699,132700,132702,132704,132706,132708],{"class":30,"line":42},[28,132701,132409],{"class":38},[28,132703,51488],{"class":211},[28,132705,54815],{"class":38},[28,132707,130466],{"class":211},[28,132709,132418],{"class":269},[28,132711,132712,132714,132716,132718,132720,132722],{"class":30,"line":50},[28,132713,132423],{"class":38},[28,132715,51488],{"class":211},[28,132717,656],{"class":38},[28,132719,51543],{"class":207},[28,132721,132432],{"class":211},[28,132723,132435],{"class":269},[28,132725,132726,132728,132730,132732,132734,132736],{"class":30,"line":58},[28,132727,132440],{"class":38},[28,132729,51488],{"class":211},[28,132731,910],{"class":38},[28,132733,51543],{"class":207},[28,132735,132449],{"class":211},[28,132737,132452],{"class":269},[28,132739,132740],{"class":30,"line":70},[28,132741,1643],{"class":211},[116,132743,132744,132759,132768,132771],{},[119,132745,132746,132747,132749,132750,132752,132753,132755,132756,132758],{},"绝对定位的特点：",[53767,132748],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53767,132751],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53767,132754],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53767,132757],{},"  (4)固定定位",[119,132760,132761,132763,132764,132767],{},[359,132762,132497],{}," 是元素 ",[359,132765,132766],{},"固定于浏览器可视区的位置"," 。（认死理型）",[119,132769,132770],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[119,132772,132773],{},"语法:",[18,132775,132776],{"className":126603,"code":132396,"language":126605,"meta":23,"style":23},[25,132777,132778,132784,132796,132810,132824],{"__ignoreMap":23},[28,132779,132780,132782],{"class":30,"line":31},[28,132781,130451],{"class":34},[28,132783,15649],{"class":211},[28,132785,132786,132788,132790,132792,132794],{"class":30,"line":42},[28,132787,132409],{"class":38},[28,132789,51488],{"class":211},[28,132791,54815],{"class":38},[28,132793,130466],{"class":211},[28,132795,132418],{"class":269},[28,132797,132798,132800,132802,132804,132806,132808],{"class":30,"line":50},[28,132799,132423],{"class":38},[28,132801,51488],{"class":211},[28,132803,656],{"class":38},[28,132805,51543],{"class":207},[28,132807,132432],{"class":211},[28,132809,132435],{"class":269},[28,132811,132812,132814,132816,132818,132820,132822],{"class":30,"line":58},[28,132813,132440],{"class":38},[28,132815,51488],{"class":211},[28,132817,910],{"class":38},[28,132819,51543],{"class":207},[28,132821,132449],{"class":211},[28,132823,132452],{"class":269},[28,132825,132826],{"class":30,"line":70},[28,132827,1643],{"class":211},[116,132829,132830,132839],{},[119,132831,132832,132833,132835,132836,132838],{},"特点:",[53767,132834],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53767,132837],{},"  ②固定定位不再占有原先的位置,完全脱标",[119,132840,132841,132842,132844,132845,132847,132848,132850],{},"固定在版心位置的方法:",[53767,132843],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53767,132846],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53767,132849],{},"  实例：",[18,132852,132853],{"className":126603,"code":132396,"language":126605,"meta":23,"style":23},[25,132854,132855,132861,132873,132887,132901],{"__ignoreMap":23},[28,132856,132857,132859],{"class":30,"line":31},[28,132858,130451],{"class":34},[28,132860,15649],{"class":211},[28,132862,132863,132865,132867,132869,132871],{"class":30,"line":42},[28,132864,132409],{"class":38},[28,132866,51488],{"class":211},[28,132868,54815],{"class":38},[28,132870,130466],{"class":211},[28,132872,132418],{"class":269},[28,132874,132875,132877,132879,132881,132883,132885],{"class":30,"line":50},[28,132876,132423],{"class":38},[28,132878,51488],{"class":211},[28,132880,656],{"class":38},[28,132882,51543],{"class":207},[28,132884,132432],{"class":211},[28,132886,132435],{"class":269},[28,132888,132889,132891,132893,132895,132897,132899],{"class":30,"line":58},[28,132890,132440],{"class":38},[28,132892,51488],{"class":211},[28,132894,910],{"class":38},[28,132896,51543],{"class":207},[28,132898,132449],{"class":211},[28,132900,132452],{"class":269},[28,132902,132903],{"class":30,"line":70},[28,132904,1643],{"class":211},[1540,132906],{"style":126459,"src":132907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132909,132910],{},"(5)粘性定位",[116,132912,132913,132916],{},[119,132914,132915],{},"粘性定位可以被认为是相对定位和固定定位的混合",[119,132917,5258],{},[18,132919,132920],{"className":126603,"code":132396,"language":126605,"meta":23,"style":23},[25,132921,132922,132928,132940,132954,132968],{"__ignoreMap":23},[28,132923,132924,132926],{"class":30,"line":31},[28,132925,130451],{"class":34},[28,132927,15649],{"class":211},[28,132929,132930,132932,132934,132936,132938],{"class":30,"line":42},[28,132931,132409],{"class":38},[28,132933,51488],{"class":211},[28,132935,54815],{"class":38},[28,132937,130466],{"class":211},[28,132939,132418],{"class":269},[28,132941,132942,132944,132946,132948,132950,132952],{"class":30,"line":50},[28,132943,132423],{"class":38},[28,132945,51488],{"class":211},[28,132947,656],{"class":38},[28,132949,51543],{"class":207},[28,132951,132432],{"class":211},[28,132953,132435],{"class":269},[28,132955,132956,132958,132960,132962,132964,132966],{"class":30,"line":58},[28,132957,132440],{"class":38},[28,132959,51488],{"class":211},[28,132961,910],{"class":38},[28,132963,51543],{"class":207},[28,132965,132449],{"class":211},[28,132967,132452],{"class":269},[28,132969,132970],{"class":30,"line":70},[28,132971,1643],{"class":211},[116,132973,132974],{},[119,132975,132976,132977,132979,132980,132982,132983,132985,132986,132989,132990,132992],{},"粘性定位的特点：",[53767,132978],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53767,132981],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53767,132984],{},"  ③必须添加 top 、left、right、bottom ",[359,132987,132988],{},"其中一个"," 才有效",[53767,132991],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[18,132994,132995],{"className":126603,"code":132396,"language":126605,"meta":23,"style":23},[25,132996,132997,133003,133015,133029,133043],{"__ignoreMap":23},[28,132998,132999,133001],{"class":30,"line":31},[28,133000,130451],{"class":34},[28,133002,15649],{"class":211},[28,133004,133005,133007,133009,133011,133013],{"class":30,"line":42},[28,133006,132409],{"class":38},[28,133008,51488],{"class":211},[28,133010,54815],{"class":38},[28,133012,130466],{"class":211},[28,133014,132418],{"class":269},[28,133016,133017,133019,133021,133023,133025,133027],{"class":30,"line":50},[28,133018,132423],{"class":38},[28,133020,51488],{"class":211},[28,133022,656],{"class":38},[28,133024,51543],{"class":207},[28,133026,132432],{"class":211},[28,133028,132435],{"class":269},[28,133030,133031,133033,133035,133037,133039,133041],{"class":30,"line":58},[28,133032,132440],{"class":38},[28,133034,51488],{"class":211},[28,133036,910],{"class":38},[28,133038,51543],{"class":207},[28,133040,132449],{"class":211},[28,133042,132452],{"class":269},[28,133044,133045],{"class":30,"line":70},[28,133046,1643],{"class":211},[1540,133048],{"style":126459,"src":133049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,133051,133052],{},"(6)总结",[347,133054,133055,133070],{},[350,133056,133057],{},[353,133058,133059,133061,133064,133067],{},[356,133060,132393],{"align":23813},[356,133062,133063],{"align":23813},"是否脱标",[356,133065,133066],{"align":23813},"移动位置",[356,133068,133069],{"align":23813},"是否常用",[394,133071,133072,133085,133099,133113,133126],{},[353,133073,133074,133077,133079,133082],{},[399,133075,133076],{"align":23813},"Static 静态定位",[399,133078,104729],{"align":23813},[399,133080,133081],{"align":23813},"不能使用边偏移",[399,133083,133084],{"align":23813},"很少",[353,133086,133087,133090,133093,133096],{},[399,133088,133089],{"align":23813},"Relative 相对定位",[399,133091,133092],{"align":23813},"否(占有位置)",[399,133094,133095],{"align":23813},"相对于自身位置移动",[399,133097,133098],{"align":23813},"基本单独使用",[353,133100,133101,133104,133107,133110],{},[399,133102,133103],{"align":23813},"Absolute 绝对定位",[399,133105,133106],{"align":23813},"是(不占有位置)",[399,133108,133109],{"align":23813},"带有定位的父级",[399,133111,133112],{"align":23813},"要和定位父级元素搭配使用",[353,133114,133115,133118,133120,133123],{},[399,133116,133117],{"align":23813},"Fixed 固定定位",[399,133119,133106],{"align":23813},[399,133121,133122],{"align":23813},"浏览器可视区",[399,133124,133125],{"align":23813},"单独使用,不需要父级",[353,133127,133128,133131,133133,133135],{},[399,133129,133130],{"align":23813},"Sticky 粘性定位",[399,133132,133092],{"align":23813},[399,133134,133122],{"align":23813},[399,133136,133137],{"align":23813},"当前阶段少",[161,133139,133140],{"start":42},[119,133141,133142,133145],{},[359,133143,133144],{},"边偏移"," 则决定了该元素的最终位置",[347,133147,133148,133159],{},[350,133149,133150],{},[353,133151,133152,133155,133157],{},[356,133153,133154],{"align":23813},"边偏移属性",[356,133156,27543],{"align":23813},[356,133158,27540],{"align":23813},[394,133160,133161,133172,133183,133193],{},[353,133162,133163,133166,133169],{},[399,133164,133165],{"align":23813},"top",[399,133167,133168],{"align":23813},"top: 80px;",[399,133170,133171],{"align":23813},"顶端偏移量，定义元素相对于父元素上边线的距离",[353,133173,133174,133177,133180],{},[399,133175,133176],{"align":23813},"bottom",[399,133178,133179],{"align":23813},"bottom: 80px ;",[399,133181,133182],{"align":23813},"底部偏移量，定义元素相对于其父元素下边线的距离",[353,133184,133185,133187,133190],{},[399,133186,23813],{"align":23813},[399,133188,133189],{"align":23813},"left: 80px ;",[399,133191,133192],{"align":23813},"左侧偏移量，定义元素相对于其父元素左边线的距离",[353,133194,133195,133197,133200],{},[399,133196,72573],{"align":23813},[399,133198,133199],{"align":23813},"right: 80px ;",[399,133201,133202],{"align":23813},"右侧偏移量，定义元素相对于其父元素右边线的距离",[116,133204,133205],{},[119,133206,9102,133207,133209,133210,133212,133213,133215,133216,133219,133220,133222,133223,133225],{},[53767,133208],{},"  ① ",[359,133211,133144],{}," 需要和 ",[359,133214,132393],{}," 联合使用， ",[359,133217,133218],{},"单独使用无效"," ；",[53767,133221],{},"  ②top和bottom不要同时使用",[53767,133224],{},"  ③left和right不要同时使用",[22075,133227,133229],{"id":133228},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133231,133232],{},"子级是绝对定位的话，父级要用相对定位",[116,133234,133235,133238,133241,133244],{},[119,133236,133237],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[119,133239,133240],{},"父盒子需要加定位限制子盒子在父盒子内显示",[119,133242,133243],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[119,133245,133246,133247,133250],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[359,133248,133249],{},"子绝父绝"," 也会遇到",[22075,133252,133254],{"id":133253},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[116,133256,133257,133272],{},[119,133258,133259,133260,133263,133264,133267,133268,133271],{},"在使用 ",[359,133261,133262],{},"定位"," 布局时，可能会 ",[359,133265,133266],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[359,133269,133270],{},"z-index"," 来控制盒子的前后次序 (z轴)",[119,133273,5258],{},[18,133275,133276],{"className":126603,"code":132396,"language":126605,"meta":23,"style":23},[25,133277,133278,133284,133296,133310,133324],{"__ignoreMap":23},[28,133279,133280,133282],{"class":30,"line":31},[28,133281,130451],{"class":34},[28,133283,15649],{"class":211},[28,133285,133286,133288,133290,133292,133294],{"class":30,"line":42},[28,133287,132409],{"class":38},[28,133289,51488],{"class":211},[28,133291,54815],{"class":38},[28,133293,130466],{"class":211},[28,133295,132418],{"class":269},[28,133297,133298,133300,133302,133304,133306,133308],{"class":30,"line":50},[28,133299,132423],{"class":38},[28,133301,51488],{"class":211},[28,133303,656],{"class":38},[28,133305,51543],{"class":207},[28,133307,132432],{"class":211},[28,133309,132435],{"class":269},[28,133311,133312,133314,133316,133318,133320,133322],{"class":30,"line":58},[28,133313,132440],{"class":38},[28,133315,51488],{"class":211},[28,133317,910],{"class":38},[28,133319,51543],{"class":207},[28,133321,132449],{"class":211},[28,133323,132452],{"class":269},[28,133325,133326],{"class":30,"line":70},[28,133327,1643],{"class":211},[116,133329,133330],{},[119,133331,133332,133333,133209,133335,133337,133338,127766,133341,82590,133344,133346,133347,133349,133350,133353,133354,133219,133357,133359,133360,133363,133365],{},"z-index的特性",[53767,133334],{},[359,133336,127067],{}," ： ",[359,133339,133340],{},"正整数",[359,133342,133343],{},"负整数",[359,133345,401],{}," ，默认值是 0，数值越大，盒子越靠上；",[53767,133348],{},"  ②如果 ",[359,133351,133352],{},"属性值相同"," ，则按照书写顺序， ",[359,133355,133356],{},"后来居上",[53767,133358],{},"  ③数字后面 ",[359,133361,133362],{},"不能加单位",[53767,133364],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22075,133367,133369],{"id":133368},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133371,133372],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133374,133375],{},"方法:",[116,133377,133378,133388],{},[119,133379,133380,133381,133384,133385],{},"left: 50%; 让 ",[359,133382,133383],{},"盒子的左侧"," 移动到 ",[359,133386,133387],{},"父级元素的水平中心位置",[119,133389,133390,133391,133394,133395],{},"margin-left: -100px; 让盒子 ",[359,133392,133393],{},"向左"," 移动 ",[359,133396,133397],{},"自身宽度的一半",[22075,133399,133401],{"id":133400},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[161,133403,133404,133407],{},[119,133405,133406],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[119,133408,133409],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133411,133412],{},"也就是说绝对定位和固定定位和浮动类似",[161,133414,133415],{"start":50},[119,133416,133417],{},"display 是显示模式， 可以改变显示模式有以下方式:",[116,133419,133420,133423,133426],{},[119,133421,133422],{},"可以用inline-block 转换为行内块",[119,133424,133425],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[119,133427,133428],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133430,133431],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22075,133433,133435],{"id":133434},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[161,133437,133438,133441,133444,133447],{},[119,133439,133440],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[119,133442,133443],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[119,133445,133446],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[119,133448,133449],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[18,133451,133452],{"className":126603,"code":131069,"language":126605,"meta":23,"style":23},[25,133453,133454,133460,133470,133474,133480,133490],{"__ignoreMap":23},[28,133455,133456,133458],{"class":30,"line":31},[28,133457,131076],{"class":34},[28,133459,15649],{"class":211},[28,133461,133462,133464,133466,133468],{"class":30,"line":42},[28,133463,131083],{"class":38},[28,133465,51488],{"class":211},[28,133467,23813],{"class":38},[28,133469,1370],{"class":211},[28,133471,133472],{"class":30,"line":50},[28,133473,1643],{"class":211},[28,133475,133476,133478],{"class":30,"line":58},[28,133477,131098],{"class":34},[28,133479,15649],{"class":211},[28,133481,133482,133484,133486,133488],{"class":30,"line":70},[28,133483,131083],{"class":38},[28,133485,51488],{"class":211},[28,133487,72573],{"class":38},[28,133489,1370],{"class":211},[28,133491,133492],{"class":30,"line":78},[28,133493,1643],{"class":211},[1540,133495],{"style":126459,"src":133496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22075,133498,133500],{"id":133499},"_11138-轮播图","11.1.3.8 轮播图",[1540,133502],{"style":126459,"src":133503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[161,133505,133506],{},[119,133507,133508],{},"制作顺序:",[116,133510,133511,133514,133517,133526],{},[119,133512,133513],{},"大盒子我们类名为： tb-promo 淘宝广告",[119,133515,133516],{},"里面先放一张图片",[119,133518,133519,133520,133522,133523,133525],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53767,133521],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53767,133524],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[119,133527,133528,133529,133531,133532,133534],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53767,133530],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53767,133533],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[161,133536,133537],{"start":42},[119,133538,133539],{},"代码模块",[18,133541,133543],{"className":126603,"code":133542,"language":126605,"meta":23,"style":23},"\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",[25,133544,133545,133550,133557,133567,133577,133587,133591,133596,133603,133613],{"__ignoreMap":23},[28,133546,133547],{"class":30,"line":31},[28,133548,133549],{"class":269},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[28,133551,133552,133555],{"class":30,"line":42},[28,133553,133554],{"class":34},".son",[28,133556,15649],{"class":211},[28,133558,133559,133561,133563,133565],{"class":30,"line":50},[28,133560,132409],{"class":38},[28,133562,51488],{"class":211},[28,133564,54882],{"class":38},[28,133566,1370],{"class":211},[28,133568,133569,133571,133573,133575],{"class":30,"line":58},[28,133570,132423],{"class":38},[28,133572,51488],{"class":211},[28,133574,401],{"class":38},[28,133576,1370],{"class":211},[28,133578,133579,133581,133583,133585],{"class":30,"line":70},[28,133580,132440],{"class":38},[28,133582,51488],{"class":211},[28,133584,401],{"class":38},[28,133586,1370],{"class":211},[28,133588,133589],{"class":30,"line":78},[28,133590,1643],{"class":211},[28,133592,133593],{"class":30,"line":86},[28,133594,133595],{"class":269},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[28,133597,133598,133601],{"class":30,"line":97},[28,133599,133600],{"class":34},".father",[28,133602,15649],{"class":211},[28,133604,133605,133607,133609,133611],{"class":30,"line":108},[28,133606,132409],{"class":38},[28,133608,51488],{"class":211},[28,133610,54815],{"class":38},[28,133612,1370],{"class":211},[28,133614,133615],{"class":30,"line":1407},[28,133616,1643],{"class":211},[14,133618,133619],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[177,133621,133623],{"id":133622},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1540,133625],{"style":126459,"src":133626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133628,133629],{},"✨ 黄金口诀：",[14,133631,133632],{},"\"TOP正下负上，LEFT正右负左\"",[14,133634,133635],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133637,133638],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133640,133641],{},"✨ 简单记：",[14,133643,133644],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[126,133646,133647],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":23,"searchDepth":42,"depth":42,"links":133649},[133650],{"id":132177,"depth":42,"text":132178,"children":133651},[133652,133653,133654,133655],{"id":132181,"depth":50,"text":132182},{"id":132196,"depth":50,"text":132197},{"id":132364,"depth":50,"text":132365},{"id":133622,"depth":50,"text":133623},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132169,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133662,"title":133663,"body":133664,"description":131,"extension":132,"meta":135087,"navigation":134,"path":135088,"seo":135089,"stem":135090,"__hash__":135091},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133665,"toc":135066},[133666,133669,133673,133681,133685,133690,133698,133710,133714,133719,133727,133738,133742,133747,133788,133796,133800,133803,133806,133809,133903,133906,134000,134003,134097,134100,134103,134138,134141,134144,134174,134177,134180,134183,134186,134189,134192,134195,134265,134268,134272,134276,134317,134321,134327,134330,134333,134337,134340,134343,134346,134427,134430,134433,134437,134441,134444,134447,134450,134453,134456,134462,134471,134475,134494,134498,134508,134511,134514,134517,134520,134523,134526,134529,134532,134541,134545,134554,134557,134562,134615,134620,134786,134789,134792,134797,134800,134803,134806,134809,134814,134962,134965,134968,134973,134976,134981,135015,135018,135021,135025,135028,135035,135038,135041,135044,135047,135050,135053,135056,135060,135063],[10,133667,133663],{"id":133668},"_12-显示隐藏与图形资源",[149,133670,133672],{"id":133671},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[116,133674,133675,133678],{},[119,133676,133677],{},"目的:让一个元素在页面中消失或者显示出来",[119,133679,133680],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[177,133682,133684],{"id":133683},"_1211-display-显示","12.1.1 display 显示",[161,133686,133687],{},[119,133688,133689],{},"display 设置或检索对象是否及如何显示",[116,133691,133692,133695],{},[119,133693,133694],{},"display: none;隐藏对象",[119,133696,133697],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[161,133699,133700,133707],{"start":42},[119,133701,133702,133703,133706],{},"特点： display 隐藏元素后， ",[359,133704,133705],{},"不再占"," 有原来的位置",[119,133708,133709],{},"在js中使用非常的广泛",[177,133711,133713],{"id":133712},"_1212-visibility可见性","12.1.2 visibility可见性",[161,133715,133716],{},[119,133717,133718],{},"visibility 属性用于指定一个元素应可见还是隐藏",[116,133720,133721,133724],{},[119,133722,133723],{},"visibility： visible；元素可见",[119,133725,133726],{},"visibility：hidden；元素隐藏",[161,133728,133729,133732,133735],{"start":42},[119,133730,133731],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[119,133733,133734],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[119,133736,133737],{},"隐藏后继续占有原有位置",[177,133739,133741],{"id":133740},"_1213-overflow溢出","12.1.3 overflow溢出",[116,133743,133744],{},[119,133745,133746],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[347,133748,133749,133757],{},[350,133750,133751],{},[353,133752,133753,133755],{},[356,133754,127067],{"align":23813},[356,133756,27540],{"align":23813},[394,133758,133759,133767,133774,133781],{},[353,133760,133761,133764],{},[399,133762,133763],{"align":23813},"visible",[399,133765,133766],{"align":23813},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[353,133768,133769,133771],{},[399,133770,61765],{"align":23813},[399,133772,133773],{"align":23813},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[353,133775,133776,133778],{},[399,133777,129023],{"align":23813},[399,133779,133780],{"align":23813},"不管超出内容否，总是显示滚动条",[353,133782,133783,133785],{},[399,133784,72714],{"align":23813},[399,133786,133787],{"align":23813},"超出自动显示滚动条，不超出不显示滚动条",[116,133789,133790,133793],{},[119,133791,133792],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[119,133794,133795],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[177,133797,133799],{"id":133798},"_1214-案例收获","12.1.4 案例收获",[1540,133801],{"style":126459,"src":133802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133804,133805],{},"问题：没做出来动态效果，使用hover没实现",[14,133807,133808],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[18,133810,133811],{"className":126603,"code":132035,"language":126605,"meta":23,"style":23},[25,133812,133813,133817,133831,133835,133849,133853,133867,133871,133885,133889],{"__ignoreMap":23},[28,133814,133815],{"class":30,"line":31},[28,133816,132042],{"class":269},[28,133818,133819,133821,133823,133825,133827,133829],{"class":30,"line":42},[28,133820,132047],{"class":34},[28,133822,79858],{"class":211},[28,133824,128963],{"class":38},[28,133826,51488],{"class":211},[28,133828,132056],{"class":38},[28,133830,129533],{"class":211},[28,133832,133833],{"class":30,"line":50},[28,133834,132063],{"class":269},[28,133836,133837,133839,133841,133843,133845,133847],{"class":30,"line":58},[28,133838,132068],{"class":34},[28,133840,79858],{"class":211},[28,133842,128963],{"class":38},[28,133844,51488],{"class":211},[28,133846,54815],{"class":38},[28,133848,129533],{"class":211},[28,133850,133851],{"class":30,"line":70},[28,133852,132083],{"class":269},[28,133854,133855,133857,133859,133861,133863,133865],{"class":30,"line":78},[28,133856,132088],{"class":34},[28,133858,79858],{"class":211},[28,133860,128963],{"class":38},[28,133862,51488],{"class":211},[28,133864,54882],{"class":38},[28,133866,129533],{"class":211},[28,133868,133869],{"class":30,"line":86},[28,133870,132103],{"class":269},[28,133872,133873,133875,133877,133879,133881,133883],{"class":30,"line":97},[28,133874,132108],{"class":34},[28,133876,79858],{"class":211},[28,133878,128963],{"class":38},[28,133880,51488],{"class":211},[28,133882,86284],{"class":38},[28,133884,129533],{"class":211},[28,133886,133887],{"class":30,"line":108},[28,133888,132123],{"class":269},[28,133890,133891,133893,133895,133897,133899,133901],{"class":30,"line":1407},[28,133892,132128],{"class":34},[28,133894,79858],{"class":211},[28,133896,128963],{"class":38},[28,133898,51488],{"class":211},[28,133900,132137],{"class":38},[28,133902,129533],{"class":211},[14,133904,133905],{},"完整代码：",[18,133907,133908],{"className":126603,"code":132035,"language":126605,"meta":23,"style":23},[25,133909,133910,133914,133928,133932,133946,133950,133964,133968,133982,133986],{"__ignoreMap":23},[28,133911,133912],{"class":30,"line":31},[28,133913,132042],{"class":269},[28,133915,133916,133918,133920,133922,133924,133926],{"class":30,"line":42},[28,133917,132047],{"class":34},[28,133919,79858],{"class":211},[28,133921,128963],{"class":38},[28,133923,51488],{"class":211},[28,133925,132056],{"class":38},[28,133927,129533],{"class":211},[28,133929,133930],{"class":30,"line":50},[28,133931,132063],{"class":269},[28,133933,133934,133936,133938,133940,133942,133944],{"class":30,"line":58},[28,133935,132068],{"class":34},[28,133937,79858],{"class":211},[28,133939,128963],{"class":38},[28,133941,51488],{"class":211},[28,133943,54815],{"class":38},[28,133945,129533],{"class":211},[28,133947,133948],{"class":30,"line":70},[28,133949,132083],{"class":269},[28,133951,133952,133954,133956,133958,133960,133962],{"class":30,"line":78},[28,133953,132088],{"class":34},[28,133955,79858],{"class":211},[28,133957,128963],{"class":38},[28,133959,51488],{"class":211},[28,133961,54882],{"class":38},[28,133963,129533],{"class":211},[28,133965,133966],{"class":30,"line":86},[28,133967,132103],{"class":269},[28,133969,133970,133972,133974,133976,133978,133980],{"class":30,"line":97},[28,133971,132108],{"class":34},[28,133973,79858],{"class":211},[28,133975,128963],{"class":38},[28,133977,51488],{"class":211},[28,133979,86284],{"class":38},[28,133981,129533],{"class":211},[28,133983,133984],{"class":30,"line":108},[28,133985,132123],{"class":269},[28,133987,133988,133990,133992,133994,133996,133998],{"class":30,"line":1407},[28,133989,132128],{"class":34},[28,133991,79858],{"class":211},[28,133993,128963],{"class":38},[28,133995,51488],{"class":211},[28,133997,132137],{"class":38},[28,133999,129533],{"class":211},[14,134001,134002],{},"分布思路重点详解：",[18,134004,134005],{"className":126603,"code":132035,"language":126605,"meta":23,"style":23},[25,134006,134007,134011,134025,134029,134043,134047,134061,134065,134079,134083],{"__ignoreMap":23},[28,134008,134009],{"class":30,"line":31},[28,134010,132042],{"class":269},[28,134012,134013,134015,134017,134019,134021,134023],{"class":30,"line":42},[28,134014,132047],{"class":34},[28,134016,79858],{"class":211},[28,134018,128963],{"class":38},[28,134020,51488],{"class":211},[28,134022,132056],{"class":38},[28,134024,129533],{"class":211},[28,134026,134027],{"class":30,"line":50},[28,134028,132063],{"class":269},[28,134030,134031,134033,134035,134037,134039,134041],{"class":30,"line":58},[28,134032,132068],{"class":34},[28,134034,79858],{"class":211},[28,134036,128963],{"class":38},[28,134038,51488],{"class":211},[28,134040,54815],{"class":38},[28,134042,129533],{"class":211},[28,134044,134045],{"class":30,"line":70},[28,134046,132083],{"class":269},[28,134048,134049,134051,134053,134055,134057,134059],{"class":30,"line":78},[28,134050,132088],{"class":34},[28,134052,79858],{"class":211},[28,134054,128963],{"class":38},[28,134056,51488],{"class":211},[28,134058,54882],{"class":38},[28,134060,129533],{"class":211},[28,134062,134063],{"class":30,"line":86},[28,134064,132103],{"class":269},[28,134066,134067,134069,134071,134073,134075,134077],{"class":30,"line":97},[28,134068,132108],{"class":34},[28,134070,79858],{"class":211},[28,134072,128963],{"class":38},[28,134074,51488],{"class":211},[28,134076,86284],{"class":38},[28,134078,129533],{"class":211},[28,134080,134081],{"class":30,"line":108},[28,134082,132123],{"class":269},[28,134084,134085,134087,134089,134091,134093,134095],{"class":30,"line":1407},[28,134086,132128],{"class":34},[28,134088,79858],{"class":211},[28,134090,128963],{"class":38},[28,134092,51488],{"class":211},[28,134094,132137],{"class":38},[28,134096,129533],{"class":211},[1540,134098],{"style":126459,"src":134099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134101,134102],{},"图片太大，盒子太小，此时需要修改图片的大小",[18,134104,134106],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[25,134107,134108],{"__ignoreMap":23},[28,134109,134110,134112,134114,134116,134118,134121,134123,134125,134128,134131,134133,134136],{"class":30,"line":31},[28,134111,1120],{"class":211},[28,134113,1540],{"class":51351},[28,134115,55290],{"class":34},[28,134117,257],{"class":211},[28,134119,134120],{"class":64},"\"images\u002Fpic.jpg\"",[28,134122,55298],{"class":34},[28,134124,257],{"class":211},[28,134126,134127],{"class":64},"\"描述文字\"",[28,134129,134130],{"class":34}," title",[28,134132,257],{"class":211},[28,134134,134135],{"class":64},"\"悬停提示\"",[28,134137,51358],{"class":211},[1540,134139],{"style":126459,"src":134140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134142,134143],{},"制造遮罩层",[18,134145,134146],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,134147,134148],{"__ignoreMap":23},[28,134149,134150,134152,134154,134156,134158,134160,134162,134164,134166,134168,134170,134172],{"class":30,"line":31},[28,134151,1120],{"class":211},[28,134153,1540],{"class":51351},[28,134155,55290],{"class":34},[28,134157,257],{"class":211},[28,134159,134120],{"class":64},[28,134161,55298],{"class":34},[28,134163,257],{"class":211},[28,134165,134127],{"class":64},[28,134167,134130],{"class":34},[28,134169,257],{"class":211},[28,134171,134135],{"class":64},[28,134173,51358],{"class":211},[14,134175,134176],{},"此时是这样的为标准流",[1540,134178],{"style":126459,"src":134179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134181,134182],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134184,134185],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134187,134188],{},"让他在中间，用center(background-position)",[14,134190,134191],{},"将需要变的尽可能放到一个盒子中",[14,134193,134194],{},"放大盒子上内部盒子发生变化",[18,134196,134198],{"className":126603,"code":134197,"language":126605,"meta":23,"style":23},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[25,134199,134200,134206,134216,134220,134227,134237,134249,134261],{"__ignoreMap":23},[28,134201,134202,134204],{"class":30,"line":31},[28,134203,127670],{"class":34},[28,134205,15649],{"class":211},[28,134207,134208,134210,134212,134214],{"class":30,"line":42},[28,134209,132409],{"class":38},[28,134211,51488],{"class":211},[28,134213,54815],{"class":38},[28,134215,1370],{"class":211},[28,134217,134218],{"class":30,"line":50},[28,134219,1643],{"class":211},[28,134221,134222,134225],{"class":30,"line":58},[28,134223,134224],{"class":34},".child",[28,134226,15649],{"class":211},[28,134228,134229,134231,134233,134235],{"class":30,"line":70},[28,134230,132409],{"class":38},[28,134232,51488],{"class":211},[28,134234,54882],{"class":38},[28,134236,1370],{"class":211},[28,134238,134239,134241,134243,134245,134247],{"class":30,"line":78},[28,134240,132423],{"class":38},[28,134242,51488],{"class":211},[28,134244,866],{"class":38},[28,134246,538],{"class":207},[28,134248,1370],{"class":211},[28,134250,134251,134253,134255,134257,134259],{"class":30,"line":86},[28,134252,132440],{"class":38},[28,134254,51488],{"class":211},[28,134256,866],{"class":38},[28,134258,538],{"class":207},[28,134260,1370],{"class":211},[28,134262,134263],{"class":30,"line":97},[28,134264,1643],{"class":211},[14,134266,134267],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[149,134269,134271],{"id":134270},"_122-精灵图","12.2 精灵图",[177,134273,134275],{"id":134274},"_1221-理解","12.2.1 理解",[161,134277,134278,134296],{},[119,134279,134280,134281,132509,134284,134287,134288,134291,134292,134295],{},"目的： ",[359,134282,134283],{},"为了有效地减少服务器接收和发送请求的次数",[359,134285,134286],{},"提高"," 页面的 ",[359,134289,134290],{},"加载速度"," ，出现了 ",[359,134293,134294],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[119,134297,134298,134299,134301,134302,134304,134305,134307,134308,134310,134311,134313,134314,134316],{},"使用精灵图核心：",[53767,134300],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53767,134303],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53767,134306],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53767,134309],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53767,134312],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53767,134315],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[177,134318,134320],{"id":134319},"_1222-扒图","12.2.2 扒图",[18,134322,134325],{"className":134323,"code":134324,"language":5264},[5262],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[25,134326,134324],{"__ignoreMap":23},[1540,134328],{"style":126459,"src":134329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1540,134331],{"style":126459,"src":134332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[177,134334,134336],{"id":134335},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1540,134338],{"style":126459,"src":134339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134341,134342],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1540,134344],{"style":126459,"src":134345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[18,134347,134349],{"className":126603,"code":134348,"language":126605,"meta":23,"style":23},"\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",[25,134350,134351,134356,134363,134375,134387,134406,134423],{"__ignoreMap":23},[28,134352,134353],{"class":30,"line":31},[28,134354,134355],{"class":269},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[28,134357,134358,134361],{"class":30,"line":42},[28,134359,134360],{"class":34},".icon",[28,134362,15649],{"class":211},[28,134364,134365,134367,134369,134371,134373],{"class":30,"line":50},[28,134366,70619],{"class":38},[28,134368,51488],{"class":211},[28,134370,910],{"class":38},[28,134372,51543],{"class":207},[28,134374,1370],{"class":211},[28,134376,134377,134379,134381,134383,134385],{"class":30,"line":58},[28,134378,70839],{"class":38},[28,134380,51488],{"class":211},[28,134382,910],{"class":38},[28,134384,51543],{"class":207},[28,134386,1370],{"class":211},[28,134388,134389,134391,134393,134395,134397,134400,134402,134404],{"class":30,"line":70},[28,134390,70662],{"class":38},[28,134392,51488],{"class":211},[28,134394,61777],{"class":38},[28,134396,212],{"class":211},[28,134398,134399],{"class":5293},"sprites.png",[28,134401,13791],{"class":211},[28,134403,61787],{"class":38},[28,134405,1370],{"class":211},[28,134407,134408,134410,134412,134414,134416,134419,134421],{"class":30,"line":78},[28,134409,128863],{"class":38},[28,134411,51488],{"class":211},[28,134413,51814],{"class":38},[28,134415,51543],{"class":207},[28,134417,134418],{"class":38}," -20",[28,134420,51543],{"class":207},[28,134422,1370],{"class":211},[28,134424,134425],{"class":30,"line":86},[28,134426,1643],{"class":211},[1540,134428],{"style":126459,"src":134429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134431,134432],{},"在前端中坐标轴的正方向是右和下",[149,134434,134436],{"id":134435},"_123-字体图标","12.3 字体图标",[177,134438,134440],{"id":134439},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134442,134443],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134445,134446],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134448,134449],{},"1.图片文件还是比较大的。",[14,134451,134452],{},"2.图片本身放大和缩小会失真。",[14,134454,134455],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134457,134458,134459,25791],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[359,134460,134461],{},"字体图标 iconfont",[14,134463,134464,134467,134468,28436],{},[359,134465,134466],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[359,134469,134470],{},"展示的是图标，本质属于字体",[177,134472,134474],{"id":134473},"_1232-字体图标的优点","12.3.2 字体图标的优点",[116,134476,134477,134482,134485,134488,134491],{},[119,134478,134479,134481],{},[359,134480,25927],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[119,134483,134484],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[119,134486,134487],{},"兼容性：几乎支持所有的浏览器，请放心使用",[119,134489,134490],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[119,134492,134493],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[177,134495,134497],{"id":134496},"_1233-字体库下载网站","12.3.3 字体库下载网站",[116,134499,134500],{},[119,134501,134502,134503],{},"icomoon字体库：",[448,134504,134507],{"href":134505,"rel":134506},"http:\u002F\u002Ficomoon.io\u002F",[23940],"http:\u002F\u002Ficomoon.io",[14,134509,134510],{},"进去之后点icomoon app",[1540,134512],{"style":126459,"src":134513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134515,134516],{},"可以对其编辑：",[1540,134518],{"style":126459,"src":134519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134521,134522],{},"生成字体：",[1540,134524],{"style":126459,"src":134525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134527,134528],{},"下载：",[1540,134530],{"style":126459,"src":134531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[116,134533,134534],{},[119,134535,134536,134537],{},"阿里iconfont字体库： ",[448,134538,134539],{"href":134539,"rel":134540},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23940],[177,134542,134544],{"id":134543},"_1234-字体图标的引入","12.3.4 字体图标的引入",[161,134546,134547],{},[119,134548,134549,134550,134553],{},"把下载包里面的 ",[359,134551,134552],{},"fonts"," 文件夹放入页面根目录下",[1540,134555],{"style":126459,"src":134556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[161,134558,134559],{"start":42},[119,134560,134561],{},"字体文件格式",[347,134563,134564,134573],{},[350,134565,134566],{},[353,134567,134568,134571],{},[356,134569,134570],{"align":23813},"格式",[356,134572,23817],{"align":23813},[394,134574,134575,134585,134595,134605],{},[353,134576,134577,134582],{},[399,134578,134579],{"align":23813},[359,134580,134581],{},".ttf",[399,134583,134584],{"align":23813},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[353,134586,134587,134592],{},[399,134588,134589],{"align":23813},[359,134590,134591],{},".woff",[399,134593,134594],{"align":23813},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[353,134596,134597,134602],{},[399,134598,134599],{"align":23813},[359,134600,134601],{},".eot",[399,134603,134604],{"align":23813},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[353,134606,134607,134612],{},[399,134608,134609],{"align":23813},[359,134610,134611],{},"svg",[399,134613,134614],{"align":23813},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[161,134616,134617],{"start":50},[119,134618,134619],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[18,134621,134623],{"className":126603,"code":134622,"language":126605,"meta":23,"style":23},"\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",[25,134624,134625,134630,134637,134649,134665,134690,134711,134731,134751,134755,134761,134771,134782],{"__ignoreMap":23},[28,134626,134627],{"class":30,"line":31},[28,134628,134629],{"class":269},"\u002F* 引入字体图标 *\u002F\n",[28,134631,134632,134635],{"class":30,"line":42},[28,134633,134634],{"class":207},"@font-face",[28,134636,15649],{"class":211},[28,134638,134639,134642,134644,134647],{"class":30,"line":50},[28,134640,134641],{"class":38},"  font-family",[28,134643,51488],{"class":211},[28,134645,134646],{"class":64},"'icomoon'",[28,134648,1370],{"class":211},[28,134650,134651,134654,134656,134658,134660,134663],{"class":30,"line":58},[28,134652,134653],{"class":38},"  src",[28,134655,51488],{"class":211},[28,134657,61777],{"class":38},[28,134659,212],{"class":211},[28,134661,134662],{"class":64},"'fonts\u002Ficomoon.eot'",[28,134664,2796],{"class":211},[28,134666,134667,134669,134671,134673,134675,134678,134680,134683,134685,134688],{"class":30,"line":70},[28,134668,134653],{"class":38},[28,134670,51488],{"class":211},[28,134672,61777],{"class":38},[28,134674,212],{"class":211},[28,134676,134677],{"class":64},"'fonts\u002Ficomoon.eot?#iefix'",[28,134679,13791],{"class":211},[28,134681,134682],{"class":38},"format",[28,134684,212],{"class":211},[28,134686,134687],{"class":64},"'embedded-opentype'",[28,134689,38098],{"class":211},[28,134691,134692,134695,134697,134700,134702,134704,134706,134709],{"class":30,"line":78},[28,134693,134694],{"class":38},"       url",[28,134696,212],{"class":211},[28,134698,134699],{"class":64},"'fonts\u002Ficomoon.woff'",[28,134701,13791],{"class":211},[28,134703,134682],{"class":38},[28,134705,212],{"class":211},[28,134707,134708],{"class":64},"'woff'",[28,134710,38098],{"class":211},[28,134712,134713,134715,134717,134720,134722,134724,134726,134729],{"class":30,"line":86},[28,134714,134694],{"class":38},[28,134716,212],{"class":211},[28,134718,134719],{"class":64},"'fonts\u002Ficomoon.ttf'",[28,134721,13791],{"class":211},[28,134723,134682],{"class":38},[28,134725,212],{"class":211},[28,134727,134728],{"class":64},"'truetype'",[28,134730,38098],{"class":211},[28,134732,134733,134735,134737,134740,134742,134744,134746,134749],{"class":30,"line":97},[28,134734,134694],{"class":38},[28,134736,212],{"class":211},[28,134738,134739],{"class":64},"'fonts\u002Ficomoon.svg#icomoon'",[28,134741,13791],{"class":211},[28,134743,134682],{"class":38},[28,134745,212],{"class":211},[28,134747,134748],{"class":64},"'svg'",[28,134750,2796],{"class":211},[28,134752,134753],{"class":30,"line":108},[28,134754,1643],{"class":211},[28,134756,134757,134759],{"class":30,"line":1407},[28,134758,134360],{"class":34},[28,134760,15649],{"class":211},[28,134762,134763,134765,134767,134769],{"class":30,"line":1690},[28,134764,134641],{"class":38},[28,134766,51488],{"class":211},[28,134768,134646],{"class":64},[28,134770,1370],{"class":211},[28,134772,134773,134776,134778,134780],{"class":30,"line":1695},[28,134774,134775],{"class":38},"  font-style",[28,134777,51488],{"class":211},[28,134779,63892],{"class":38},[28,134781,1370],{"class":211},[28,134783,134784],{"class":30,"line":1701},[28,134785,1643],{"class":211},[14,134787,134788],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1540,134790],{"style":126459,"src":134791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[161,134793,134794],{"start":58},[119,134795,134796],{},"添加字体",[1540,134798],{"style":126459,"src":134799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134801,134802],{},"复制：",[1540,134804],{"style":126459,"src":134805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134807,134808],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[161,134810,134811],{"start":70},[119,134812,134813],{},"代码展示：",[18,134815,134816],{"className":126603,"code":134622,"language":126605,"meta":23,"style":23},[25,134817,134818,134822,134828,134838,134852,134874,134892,134910,134928,134932,134938,134948,134958],{"__ignoreMap":23},[28,134819,134820],{"class":30,"line":31},[28,134821,134629],{"class":269},[28,134823,134824,134826],{"class":30,"line":42},[28,134825,134634],{"class":207},[28,134827,15649],{"class":211},[28,134829,134830,134832,134834,134836],{"class":30,"line":50},[28,134831,134641],{"class":38},[28,134833,51488],{"class":211},[28,134835,134646],{"class":64},[28,134837,1370],{"class":211},[28,134839,134840,134842,134844,134846,134848,134850],{"class":30,"line":58},[28,134841,134653],{"class":38},[28,134843,51488],{"class":211},[28,134845,61777],{"class":38},[28,134847,212],{"class":211},[28,134849,134662],{"class":64},[28,134851,2796],{"class":211},[28,134853,134854,134856,134858,134860,134862,134864,134866,134868,134870,134872],{"class":30,"line":70},[28,134855,134653],{"class":38},[28,134857,51488],{"class":211},[28,134859,61777],{"class":38},[28,134861,212],{"class":211},[28,134863,134677],{"class":64},[28,134865,13791],{"class":211},[28,134867,134682],{"class":38},[28,134869,212],{"class":211},[28,134871,134687],{"class":64},[28,134873,38098],{"class":211},[28,134875,134876,134878,134880,134882,134884,134886,134888,134890],{"class":30,"line":78},[28,134877,134694],{"class":38},[28,134879,212],{"class":211},[28,134881,134699],{"class":64},[28,134883,13791],{"class":211},[28,134885,134682],{"class":38},[28,134887,212],{"class":211},[28,134889,134708],{"class":64},[28,134891,38098],{"class":211},[28,134893,134894,134896,134898,134900,134902,134904,134906,134908],{"class":30,"line":86},[28,134895,134694],{"class":38},[28,134897,212],{"class":211},[28,134899,134719],{"class":64},[28,134901,13791],{"class":211},[28,134903,134682],{"class":38},[28,134905,212],{"class":211},[28,134907,134728],{"class":64},[28,134909,38098],{"class":211},[28,134911,134912,134914,134916,134918,134920,134922,134924,134926],{"class":30,"line":97},[28,134913,134694],{"class":38},[28,134915,212],{"class":211},[28,134917,134739],{"class":64},[28,134919,13791],{"class":211},[28,134921,134682],{"class":38},[28,134923,212],{"class":211},[28,134925,134748],{"class":64},[28,134927,2796],{"class":211},[28,134929,134930],{"class":30,"line":108},[28,134931,1643],{"class":211},[28,134933,134934,134936],{"class":30,"line":1407},[28,134935,134360],{"class":34},[28,134937,15649],{"class":211},[28,134939,134940,134942,134944,134946],{"class":30,"line":1690},[28,134941,134641],{"class":38},[28,134943,51488],{"class":211},[28,134945,134646],{"class":64},[28,134947,1370],{"class":211},[28,134949,134950,134952,134954,134956],{"class":30,"line":1695},[28,134951,134775],{"class":38},[28,134953,51488],{"class":211},[28,134955,63892],{"class":38},[28,134957,1370],{"class":211},[28,134959,134960],{"class":30,"line":1701},[28,134961,1643],{"class":211},[1540,134963],{"style":126459,"src":134964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134966,134967],{},"更加细节展示：",[161,134969,134970],{},[119,134971,134972],{},"html 标签内添加小图标",[1540,134974],{"style":126459,"src":134975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[161,134977,134978],{"start":42},[119,134979,134980],{},"给标签定义字体",[18,134982,134983],{"className":127350,"code":130707,"language":127352,"meta":23,"style":23},[25,134984,134985,134989,135003,135007],{"__ignoreMap":23},[28,134986,134987],{"class":30,"line":31},[28,134988,130714],{"class":269},[28,134990,134991,134993,134995,134997,134999,135001],{"class":30,"line":42},[28,134992,1120],{"class":211},[28,134994,51662],{"class":51351},[28,134996,53537],{"class":34},[28,134998,257],{"class":211},[28,135000,130727],{"class":64},[28,135002,51358],{"class":211},[28,135004,135005],{"class":30,"line":50},[28,135006,130734],{"class":211},[28,135008,135009,135011,135013],{"class":30,"line":58},[28,135010,51836],{"class":211},[28,135012,51662],{"class":51351},[28,135014,51358],{"class":211},[14,135016,135017],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1540,135019],{"style":126459,"src":135020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[177,135022,135024],{"id":135023},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,135026,135027],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,135029,135030,135031,135034],{},"把压缩包里面的 ",[359,135032,135033],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,135036,135037],{},"打开网站，点下方：",[1540,135039],{"style":126459,"src":135040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1540,135042],{"style":126459,"src":135043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1540,135045],{"style":126459,"src":135046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,135048,135049],{},"点yes重新加载",[14,135051,135052],{},"然后重复之前的操作就可以实现了",[14,135054,135055],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[177,135057,135059],{"id":135058},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1540,135061],{"style":126459,"src":135062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[126,135064,135065],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":135067},[135068,135074,135079],{"id":133671,"depth":42,"text":133672,"children":135069},[135070,135071,135072,135073],{"id":133683,"depth":50,"text":133684},{"id":133712,"depth":50,"text":133713},{"id":133740,"depth":50,"text":133741},{"id":133798,"depth":50,"text":133799},{"id":134270,"depth":42,"text":134271,"children":135075},[135076,135077,135078],{"id":134274,"depth":50,"text":134275},{"id":134319,"depth":50,"text":134320},{"id":134335,"depth":50,"text":134336},{"id":134435,"depth":42,"text":134436,"children":135080},[135081,135082,135083,135084,135085,135086],{"id":134439,"depth":50,"text":134440},{"id":134473,"depth":50,"text":134474},{"id":134496,"depth":50,"text":134497},{"id":134543,"depth":50,"text":134544},{"id":135023,"depth":50,"text":135024},{"id":135058,"depth":50,"text":135059},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133663,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135093,"title":135094,"body":135095,"description":131,"extension":132,"meta":136322,"navigation":134,"path":136323,"seo":136324,"stem":136325,"__hash__":136326},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135096,"toc":136303},[135097,135100,135104,135107,135121,135189,135219,135222,135226,135230,135332,135379,135383,135386,135389,135423,135426,135429,135432,135435,135438,135441,135444,135446,135449,135452,135455,135458,135461,135464,135467,135495,135498,135502,135505,135512,135515,135518,135544,135547,135551,135554,135557,135564,135568,135571,135573,135605,135608,135611,135623,135629,135632,135635,135638,135640,135644,135647,135650,135653,135698,135702,135704,135707,135714,135756,135759,135763,135768,135782,135786,135789,135792,135795,135798,135801,135835,135838,135841,135895,135898,135901,135904,135907,135959,135962,135965,136014,136018,136020,136023,136026,136029,136032,136035,136093,136096,136102,136105,136108,136140,136143,136147,136151,136154,136186,136190,136193,136237,136241,136244,136247,136250,136253,136256,136259,136262,136264,136267,136269,136272,136275,136278,136281,136286,136289,136291,136294,136297,136300],[10,135098,135094],{"id":135099},"_13-界面样式与布局技巧",[149,135101,135103],{"id":135102},"_131-css三角","13.1 css三角",[14,135105,135106],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[116,135108,135109,135112,135115,135118],{},[119,135110,135111],{},"用css 边框可以模拟三角效果",[119,135113,135114],{},"宽度高度为0",[119,135116,135117],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[119,135119,135120],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[18,135122,135124],{"className":126603,"code":135123,"language":126605,"meta":23,"style":23},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[25,135125,135126,135131,135138,135148,135158,135174,135185],{"__ignoreMap":23},[28,135127,135128],{"class":30,"line":31},[28,135129,135130],{"class":269},"\u002F* CSS 实现三角形 *\u002F\n",[28,135132,135133,135136],{"class":30,"line":42},[28,135134,135135],{"class":34},".triangle",[28,135137,15649],{"class":211},[28,135139,135140,135142,135144,135146],{"class":30,"line":50},[28,135141,70619],{"class":38},[28,135143,51488],{"class":211},[28,135145,401],{"class":38},[28,135147,1370],{"class":211},[28,135149,135150,135152,135154,135156],{"class":30,"line":58},[28,135151,70839],{"class":38},[28,135153,51488],{"class":211},[28,135155,401],{"class":38},[28,135157,1370],{"class":211},[28,135159,135160,135162,135164,135166,135168,135170,135172],{"class":30,"line":70},[28,135161,70947],{"class":38},[28,135163,51488],{"class":211},[28,135165,656],{"class":38},[28,135167,51543],{"class":207},[28,135169,51572],{"class":38},[28,135171,64042],{"class":38},[28,135173,1370],{"class":211},[28,135175,135176,135179,135181,135183],{"class":30,"line":78},[28,135177,135178],{"class":38},"  border-bottom-color",[28,135180,51488],{"class":211},[28,135182,62420],{"class":38},[28,135184,1370],{"class":211},[28,135186,135187],{"class":30,"line":86},[28,135188,1643],{"class":211},[18,135190,135191],{"className":126603,"code":130760,"language":126605,"meta":23,"style":23},[25,135192,135193,135199,135215],{"__ignoreMap":23},[28,135194,135195,135197],{"class":30,"line":31},[28,135196,51662],{"class":51351},[28,135198,15649],{"class":211},[28,135200,135201,135203,135205,135207,135209,135211,135213],{"class":30,"line":42},[28,135202,70947],{"class":38},[28,135204,51488],{"class":211},[28,135206,427],{"class":38},[28,135208,51543],{"class":207},[28,135210,51572],{"class":38},[28,135212,129995],{"class":38},[28,135214,1370],{"class":211},[28,135216,135217],{"class":30,"line":50},[28,135218,1643],{"class":211},[1540,135220],{"style":126459,"src":135221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[149,135223,135225],{"id":135224},"_132-css用户界面样式","13.2 css用户界面样式",[177,135227,135229],{"id":135228},"_1321-鼠标样式","13.2.1 鼠标样式",[18,135231,135233],{"className":126603,"code":135232,"language":126605,"meta":23,"style":23},"\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",[25,135234,135235,135240,135259,135277,135296,135313],{"__ignoreMap":23},[28,135236,135237],{"class":30,"line":31},[28,135238,135239],{"class":269},"\u002F* 鼠标样式 *\u002F\n",[28,135241,135242,135244,135246,135249,135251,135253,135256],{"class":30,"line":42},[28,135243,51662],{"class":51351},[28,135245,79858],{"class":211},[28,135247,135248],{"class":38},"cursor",[28,135250,51488],{"class":211},[28,135252,62081],{"class":38},[28,135254,135255],{"class":211},"; }   ",[28,135257,135258],{"class":269},"\u002F* 手型 *\u002F\n",[28,135260,135261,135263,135265,135267,135269,135272,135274],{"class":30,"line":50},[28,135262,51662],{"class":51351},[28,135264,79858],{"class":211},[28,135266,135248],{"class":38},[28,135268,51488],{"class":211},[28,135270,135271],{"class":38},"default",[28,135273,135255],{"class":211},[28,135275,135276],{"class":269},"\u002F* 默认 *\u002F\n",[28,135278,135279,135281,135283,135285,135287,135290,135293],{"class":30,"line":58},[28,135280,51662],{"class":51351},[28,135282,79858],{"class":211},[28,135284,135248],{"class":38},[28,135286,51488],{"class":211},[28,135288,135289],{"class":38},"move",[28,135291,135292],{"class":211},"; }      ",[28,135294,135295],{"class":269},"\u002F* 移动 *\u002F\n",[28,135297,135298,135300,135302,135304,135306,135308,135310],{"class":30,"line":70},[28,135299,51662],{"class":51351},[28,135301,79858],{"class":211},[28,135303,135248],{"class":38},[28,135305,51488],{"class":211},[28,135307,5264],{"class":38},[28,135309,135292],{"class":211},[28,135311,135312],{"class":269},"\u002F* 文本 *\u002F\n",[28,135314,135315,135317,135319,135321,135323,135326,135329],{"class":30,"line":78},[28,135316,51662],{"class":51351},[28,135318,79858],{"class":211},[28,135320,135248],{"class":38},[28,135322,51488],{"class":211},[28,135324,135325],{"class":38},"not-allowed",[28,135327,135328],{"class":211},"; } ",[28,135330,135331],{"class":269},"\u002F* 禁止 *\u002F\n",[347,135333,135334,135342],{},[350,135335,135336],{},[353,135337,135338,135340],{},[356,135339,127067],{"align":23813},[356,135341,27540],{"align":23813},[394,135343,135344,135351,135358,135365,135372],{},[353,135345,135346,135348],{},[399,135347,135271],{"align":23813},[399,135349,135350],{"align":23813},"小白 默认",[353,135352,135353,135355],{},[399,135354,62081],{"align":23813},[399,135356,135357],{"align":23813},"小手",[353,135359,135360,135362],{},[399,135361,135289],{"align":23813},[399,135363,135364],{"align":23813},"移动",[353,135366,135367,135369],{},[399,135368,5264],{"align":23813},[399,135370,135371],{"align":23813},"文本",[353,135373,135374,135376],{},[399,135375,135325],{"align":23813},[399,135377,135378],{"align":23813},"禁止",[177,135380,135382],{"id":135381},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135384,135385],{},"去除表单轮廓线",[14,135387,135388],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[18,135390,135391],{"className":126603,"code":129967,"language":126605,"meta":23,"style":23},[25,135392,135393,135397,135403,135419],{"__ignoreMap":23},[28,135394,135395],{"class":30,"line":31},[28,135396,129974],{"class":269},[28,135398,135399,135401],{"class":30,"line":42},[28,135400,51662],{"class":51351},[28,135402,15649],{"class":211},[28,135404,135405,135407,135409,135411,135413,135415,135417],{"class":30,"line":50},[28,135406,70947],{"class":38},[28,135408,51488],{"class":211},[28,135410,427],{"class":38},[28,135412,51543],{"class":207},[28,135414,51572],{"class":38},[28,135416,129995],{"class":38},[28,135418,1370],{"class":211},[28,135420,135421],{"class":30,"line":58},[28,135422,1643],{"class":211},[14,135424,135425],{},"文本域：",[1540,135427],{"style":126459,"src":135428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135430,135431],{},"此时会有一个空白区域",[1540,135433],{"style":126459,"src":135434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135436,135437],{},"写在同一行就不会出现这个问题",[1540,135439],{"style":126459,"src":135440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135442,135443],{},"文本域是行内块元素，一定记住！！！",[14,135445,98284],{},[1540,135447],{"style":126459,"src":135448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135450,135451],{},"文本域尽量放在一行",[14,135453,135454],{},"知识回顾：cols是列，rols是行",[1540,135456],{"style":126459,"src":135457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135459,135460],{},"它可以进行拖动，显然这是我们不愿意看到的",[1540,135462],{"style":126459,"src":135463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135465,135466],{},"使用resize进行解决",[18,135468,135470],{"className":126603,"code":135469,"language":126605,"meta":23,"style":23},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[25,135471,135472,135478,135491],{"__ignoreMap":23},[28,135473,135474,135476],{"class":30,"line":31},[28,135475,53872],{"class":51351},[28,135477,15649],{"class":211},[28,135479,135480,135482,135484,135486,135488],{"class":30,"line":42},[28,135481,70849],{"class":38},[28,135483,51488],{"class":211},[28,135485,54788],{"class":38},[28,135487,130466],{"class":211},[28,135489,135490],{"class":269},"\u002F* 取消表单轮廓线 *\u002F\n",[28,135492,135493],{"class":30,"line":50},[28,135494,1643],{"class":211},[14,135496,135497],{},"此时就无法通过右下方实现拖动了",[177,135499,135501],{"id":135500},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135503,135504],{},"实现一个盒子中的文字和图片对齐",[14,135506,135507,135508,135511],{},"用于设置一个元素的 ",[359,135509,135510],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135513,135514],{},"图片和文字默认是基线对齐",[1540,135516],{"style":126459,"src":135517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[18,135519,135520],{"className":126603,"code":135469,"language":126605,"meta":23,"style":23},[25,135521,135522,135528,135540],{"__ignoreMap":23},[28,135523,135524,135526],{"class":30,"line":31},[28,135525,53872],{"class":51351},[28,135527,15649],{"class":211},[28,135529,135530,135532,135534,135536,135538],{"class":30,"line":42},[28,135531,70849],{"class":38},[28,135533,51488],{"class":211},[28,135535,54788],{"class":38},[28,135537,130466],{"class":211},[28,135539,135490],{"class":269},[28,135541,135542],{"class":30,"line":50},[28,135543,1643],{"class":211},[1540,135545],{"style":126459,"src":135546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22075,135548,135550],{"id":135549},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135552,135553],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1540,135555],{"style":126459,"src":135556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135558,135559,135560,135563],{},"此时可以给图片、表单这些行内块元素的 ",[359,135561,135562],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22075,135565,135567],{"id":135566},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135569,135570],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135572,14710],{},[18,135574,135576],{"className":126603,"code":135575,"language":126605,"meta":23,"style":23},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[25,135577,135578,135583,135589,135601],{"__ignoreMap":23},[28,135579,135580],{"class":30,"line":31},[28,135581,135582],{"class":269},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[28,135584,135585,135587],{"class":30,"line":42},[28,135586,1540],{"class":51351},[28,135588,15649],{"class":211},[28,135590,135591,135594,135596,135599],{"class":30,"line":50},[28,135592,135593],{"class":38},"  vertical-align",[28,135595,51488],{"class":211},[28,135597,135598],{"class":38},"middle",[28,135600,1370],{"class":211},[28,135602,135603],{"class":30,"line":58},[28,135604,1643],{"class":211},[1540,135606],{"style":126459,"src":135607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135609,135610],{},"主要解决方法有两种：",[161,135612,135613],{},[119,135614,135615,135618,135619,135622],{},[359,135616,135617],{},"给图片"," 添加 ",[359,135620,135621],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135624,135625,135626],{},"2.把图片转换为块级元素 ",[359,135627,135628],{},"display: block",[14,135630,135631],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135633,135634],{},"img {",[14,135636,135637],{},"vertical-align:middle;",[14,135639,1156],{},[177,135641,135643],{"id":135642},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135645,135646],{},"效果：",[1540,135648],{"style":126459,"src":135649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135651,135652],{},"单行文本溢出显示省略号--必须满足三个条件：",[18,135654,135656],{"className":126603,"code":135655,"language":126605,"meta":23,"style":23},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[25,135657,135658,135663,135669,135679,135684,135694],{"__ignoreMap":23},[28,135659,135660],{"class":30,"line":31},[28,135661,135662],{"class":269},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[28,135664,135665,135667],{"class":30,"line":42},[28,135666,1540],{"class":51351},[28,135668,15649],{"class":211},[28,135670,135671,135673,135675,135677],{"class":30,"line":50},[28,135672,135593],{"class":38},[28,135674,51488],{"class":211},[28,135676,135598],{"class":38},[28,135678,1370],{"class":211},[28,135680,135681],{"class":30,"line":58},[28,135682,135683],{"class":269},"  \u002F* 或 *\u002F\n",[28,135685,135686,135688,135690,135692],{"class":30,"line":70},[28,135687,128219],{"class":38},[28,135689,51488],{"class":211},[28,135691,60920],{"class":38},[28,135693,1370],{"class":211},[28,135695,135696],{"class":30,"line":78},[28,135697,1643],{"class":211},[177,135699,135701],{"id":135700},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135703,135646],{},[1540,135705],{"style":126459,"src":135706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135708,135709,135710,135713],{},"多行文本溢出显示省略号， ",[359,135711,135712],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[18,135715,135716],{"className":126603,"code":135655,"language":126605,"meta":23,"style":23},[25,135717,135718,135722,135728,135738,135742,135752],{"__ignoreMap":23},[28,135719,135720],{"class":30,"line":31},[28,135721,135662],{"class":269},[28,135723,135724,135726],{"class":30,"line":42},[28,135725,1540],{"class":51351},[28,135727,15649],{"class":211},[28,135729,135730,135732,135734,135736],{"class":30,"line":50},[28,135731,135593],{"class":38},[28,135733,51488],{"class":211},[28,135735,135598],{"class":38},[28,135737,1370],{"class":211},[28,135739,135740],{"class":30,"line":58},[28,135741,135683],{"class":269},[28,135743,135744,135746,135748,135750],{"class":30,"line":70},[28,135745,128219],{"class":38},[28,135747,51488],{"class":211},[28,135749,60920],{"class":38},[28,135751,1370],{"class":211},[28,135753,135754],{"class":30,"line":78},[28,135755,1643],{"class":211},[14,135757,135758],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[149,135760,135762],{"id":135761},"_133-常见布局技巧","13.3 常见布局技巧",[14,135764,135765],{},[359,135766,135767],{},"巧妙利用一个技术更快更好的布局：",[161,135769,135770,135773,135776,135779],{},[119,135771,135772],{},"margin负值的运用",[119,135774,135775],{},"文字围绕浮动元素",[119,135777,135778],{},"行内块的巧妙运用",[119,135780,135781],{},"CSS三角强化",[177,135783,135785],{"id":135784},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135787,135788],{},"应用场景：",[1540,135790],{"style":126459,"src":135791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1540,135793],{"style":126459,"src":135794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135796,135797],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135799,135800],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[18,135802,135803],{"className":126603,"code":129967,"language":126605,"meta":23,"style":23},[25,135804,135805,135809,135815,135831],{"__ignoreMap":23},[28,135806,135807],{"class":30,"line":31},[28,135808,129974],{"class":269},[28,135810,135811,135813],{"class":30,"line":42},[28,135812,51662],{"class":51351},[28,135814,15649],{"class":211},[28,135816,135817,135819,135821,135823,135825,135827,135829],{"class":30,"line":50},[28,135818,70947],{"class":38},[28,135820,51488],{"class":211},[28,135822,427],{"class":38},[28,135824,51543],{"class":207},[28,135826,51572],{"class":38},[28,135828,129995],{"class":38},[28,135830,1370],{"class":211},[28,135832,135833],{"class":30,"line":58},[28,135834,1643],{"class":211},[1540,135836],{"style":126459,"src":135837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135839,135840],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[18,135842,135844],{"className":126603,"code":135843,"language":126605,"meta":23,"style":23},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[25,135845,135846,135851,135857,135867,135879,135891],{"__ignoreMap":23},[28,135847,135848],{"class":30,"line":31},[28,135849,135850],{"class":269},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[28,135852,135853,135855],{"class":30,"line":42},[28,135854,130451],{"class":34},[28,135856,15649],{"class":211},[28,135858,135859,135861,135863,135865],{"class":30,"line":50},[28,135860,132409],{"class":38},[28,135862,51488],{"class":211},[28,135864,54815],{"class":38},[28,135866,1370],{"class":211},[28,135868,135869,135871,135873,135875,135877],{"class":30,"line":58},[28,135870,132423],{"class":38},[28,135872,51488],{"class":211},[28,135874,656],{"class":38},[28,135876,51543],{"class":207},[28,135878,1370],{"class":211},[28,135880,135881,135883,135885,135887,135889],{"class":30,"line":70},[28,135882,132440],{"class":38},[28,135884,51488],{"class":211},[28,135886,910],{"class":38},[28,135888,51543],{"class":207},[28,135890,1370],{"class":211},[28,135892,135893],{"class":30,"line":78},[28,135894,1643],{"class":211},[14,135896,135897],{},"加上上述代码会发现：",[1540,135899],{"style":126459,"src":135900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135902,135903],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135905,135906],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[18,135908,135909],{"className":126603,"code":135843,"language":126605,"meta":23,"style":23},[25,135910,135911,135915,135921,135931,135943,135955],{"__ignoreMap":23},[28,135912,135913],{"class":30,"line":31},[28,135914,135850],{"class":269},[28,135916,135917,135919],{"class":30,"line":42},[28,135918,130451],{"class":34},[28,135920,15649],{"class":211},[28,135922,135923,135925,135927,135929],{"class":30,"line":50},[28,135924,132409],{"class":38},[28,135926,51488],{"class":211},[28,135928,54815],{"class":38},[28,135930,1370],{"class":211},[28,135932,135933,135935,135937,135939,135941],{"class":30,"line":58},[28,135934,132423],{"class":38},[28,135936,51488],{"class":211},[28,135938,656],{"class":38},[28,135940,51543],{"class":207},[28,135942,1370],{"class":211},[28,135944,135945,135947,135949,135951,135953],{"class":30,"line":70},[28,135946,132440],{"class":38},[28,135948,51488],{"class":211},[28,135950,910],{"class":38},[28,135952,51543],{"class":207},[28,135954,1370],{"class":211},[28,135956,135957],{"class":30,"line":78},[28,135958,1643],{"class":211},[14,135960,135961],{},"解决方式2：",[14,135963,135964],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[18,135966,135968],{"className":126603,"code":135967,"language":126605,"meta":23,"style":23},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[25,135969,135970,135976,135986,135998,136010],{"__ignoreMap":23},[28,135971,135972,135974],{"class":30,"line":31},[28,135973,51662],{"class":51351},[28,135975,15649],{"class":211},[28,135977,135978,135980,135982,135984],{"class":30,"line":42},[28,135979,132409],{"class":38},[28,135981,51488],{"class":211},[28,135983,54815],{"class":38},[28,135985,1370],{"class":211},[28,135987,135988,135990,135992,135994,135996],{"class":30,"line":50},[28,135989,132423],{"class":38},[28,135991,51488],{"class":211},[28,135993,656],{"class":38},[28,135995,51543],{"class":207},[28,135997,1370],{"class":211},[28,135999,136000,136002,136004,136006,136008],{"class":30,"line":58},[28,136001,132440],{"class":38},[28,136003,51488],{"class":211},[28,136005,910],{"class":38},[28,136007,51543],{"class":207},[28,136009,1370],{"class":211},[28,136011,136012],{"class":30,"line":70},[28,136013,1643],{"class":211},[177,136015,136017],{"id":136016},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,136019,135788],{},[1540,136021],{"style":126459,"src":136022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,136024,136025],{},"实现结构图：",[1540,136027],{"style":126459,"src":136028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,136030,136031],{},"巧妙运用浮动元素不会压住文字的特性",[14,136033,136034],{},"代码显示：",[18,136036,136038],{"className":126603,"code":136037,"language":126605,"meta":23,"style":23},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[25,136039,136040,136046,136056,136060,136065,136069,136075,136089],{"__ignoreMap":23},[28,136041,136042,136044],{"class":30,"line":31},[28,136043,130451],{"class":34},[28,136045,15649],{"class":211},[28,136047,136048,136050,136052,136054],{"class":30,"line":42},[28,136049,131083],{"class":38},[28,136051,51488],{"class":211},[28,136053,23813],{"class":38},[28,136055,1370],{"class":211},[28,136057,136058],{"class":30,"line":50},[28,136059,1643],{"class":211},[28,136061,136062],{"class":30,"line":58},[28,136063,136064],{"class":211},"```Css\n",[28,136066,136067],{"class":30,"line":70},[28,136068,130446],{"class":269},[28,136070,136071,136073],{"class":30,"line":78},[28,136072,130451],{"class":34},[28,136074,15649],{"class":211},[28,136076,136077,136079,136081,136083,136085,136087],{"class":30,"line":86},[28,136078,70521],{"class":38},[28,136080,51488],{"class":211},[28,136082,401],{"class":38},[28,136084,51607],{"class":38},[28,136086,130466],{"class":211},[28,136088,130469],{"class":269},[28,136090,136091],{"class":30,"line":97},[28,136092,1643],{"class":211},[14,136094,136095],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[18,136097,136100],{"className":136098,"code":136099,"language":5264},[5262],"\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",[25,136101,136099],{"__ignoreMap":23},[1540,136103],{"style":126459,"src":136104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136106,136107],{},"最终展示结果：",[18,136109,136110],{"className":126603,"code":130439,"language":126605,"meta":23,"style":23},[25,136111,136112,136116,136122,136136],{"__ignoreMap":23},[28,136113,136114],{"class":30,"line":31},[28,136115,130446],{"class":269},[28,136117,136118,136120],{"class":30,"line":42},[28,136119,130451],{"class":34},[28,136121,15649],{"class":211},[28,136123,136124,136126,136128,136130,136132,136134],{"class":30,"line":50},[28,136125,70521],{"class":38},[28,136127,51488],{"class":211},[28,136129,401],{"class":38},[28,136131,51607],{"class":38},[28,136133,130466],{"class":211},[28,136135,130469],{"class":269},[28,136137,136138],{"class":30,"line":58},[28,136139,1643],{"class":211},[1540,136141],{"style":126459,"src":136142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[149,136144,136146],{"id":136145},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[177,136148,136150],{"id":136149},"_1341-原理","13.4.1 原理",[1540,136152],{"style":126459,"src":136153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[18,136155,136156],{"className":126603,"code":130439,"language":126605,"meta":23,"style":23},[25,136157,136158,136162,136168,136182],{"__ignoreMap":23},[28,136159,136160],{"class":30,"line":31},[28,136161,130446],{"class":269},[28,136163,136164,136166],{"class":30,"line":42},[28,136165,130451],{"class":34},[28,136167,15649],{"class":211},[28,136169,136170,136172,136174,136176,136178,136180],{"class":30,"line":50},[28,136171,70521],{"class":38},[28,136173,51488],{"class":211},[28,136175,401],{"class":38},[28,136177,51607],{"class":38},[28,136179,130466],{"class":211},[28,136181,130469],{"class":269},[28,136183,136184],{"class":30,"line":58},[28,136185,1643],{"class":211},[177,136187,136189],{"id":136188},"_1342-实例","13.4.2 实例",[1540,136191],{"style":126459,"src":136192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[18,136194,136195],{"className":126603,"code":131069,"language":126605,"meta":23,"style":23},[25,136196,136197,136203,136213,136217,136223,136233],{"__ignoreMap":23},[28,136198,136199,136201],{"class":30,"line":31},[28,136200,131076],{"class":34},[28,136202,15649],{"class":211},[28,136204,136205,136207,136209,136211],{"class":30,"line":42},[28,136206,131083],{"class":38},[28,136208,51488],{"class":211},[28,136210,23813],{"class":38},[28,136212,1370],{"class":211},[28,136214,136215],{"class":30,"line":50},[28,136216,1643],{"class":211},[28,136218,136219,136221],{"class":30,"line":58},[28,136220,131098],{"class":34},[28,136222,15649],{"class":211},[28,136224,136225,136227,136229,136231],{"class":30,"line":70},[28,136226,131083],{"class":38},[28,136228,51488],{"class":211},[28,136230,72573],{"class":38},[28,136232,1370],{"class":211},[28,136234,136235],{"class":30,"line":78},[28,136236,1643],{"class":211},[149,136238,136240],{"id":136239},"_135-css的初始化","13.5 css的初始化",[14,136242,136243],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136245,136246],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136248,136249],{},"每个网页都必须首先进行 CSS初始化。",[14,136251,136252],{},"这里我们以 京东CSS初始化代码为例。",[14,136254,136255],{},"在网页右键查看网页源代码",[14,136257,136258],{},"找到css的link引入语句",[14,136260,136261],{},"然后ctrl+f 输入body",[14,136263,77277],{},[1540,136265],{"style":126459,"src":136266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136268,77300],{},[1540,136270],{"style":126459,"src":136271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136273,136274],{},"③打开了网页上传压缩的代码",[1540,136276],{"style":126459,"src":136277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136279,136280],{},"④从body前可以查看这个网页的初始化代码",[14,136282,136283],{},[359,136284,136285],{},"Unicode编码字体：",[14,136287,136288],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136290,83258],{},[14,136292,136293],{},"黑体 \\9ED1\\4F53",[14,136295,136296],{},"宋体 \\5B8B\\4F53",[14,136298,136299],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[126,136301,136302],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":23,"searchDepth":42,"depth":42,"links":136304},[136305,136306,136313,136317,136321],{"id":135102,"depth":42,"text":135103},{"id":135224,"depth":42,"text":135225,"children":136307},[136308,136309,136310,136311,136312],{"id":135228,"depth":50,"text":135229},{"id":135381,"depth":50,"text":135382},{"id":135500,"depth":50,"text":135501},{"id":135642,"depth":50,"text":135643},{"id":135700,"depth":50,"text":135701},{"id":135761,"depth":42,"text":135762,"children":136314},[136315,136316],{"id":135784,"depth":50,"text":135785},{"id":136016,"depth":50,"text":136017},{"id":136145,"depth":42,"text":136146,"children":136318},[136319,136320],{"id":136149,"depth":50,"text":136150},{"id":136188,"depth":50,"text":136189},{"id":136239,"depth":42,"text":136240},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135094,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136328,"title":136329,"body":136330,"description":131,"extension":132,"meta":138016,"navigation":134,"path":138017,"seo":138018,"stem":138019,"__hash__":138020},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136331,"toc":138005},[136332,136335,136339,136343,136346,136353,136356,136359,136397,136400,136402,136416,136420,136429,136433,136438,136441,136444,136447,136482,136487,136490,136520,136523,136528,136531,136534,136564,136567,136621,136624,136628,136633,136645,136648,136652,136682,136685,136690,136693,136723,136726,136730,136747,136751,136755,136758,136791,136794,136798,136801,136804,136807,136810,136813,136924,136927,136930,136933,137035,137038,137042,137046,137050,137053,137093,137096,137098,137114,137118,137121,137126,137207,137210,137213,137339,137344,137347,137355,137358,137363,137448,137451,137455,137458,137461,137465,137485,137490,137574,137577,137582,137585,137588,137666,137669,137672,137675,137678,137681,137686,137689,137692,137764,137767,137772,137775,137872,137875,137881,137884,137887,137890,137893,137896,137899,137902,137905,137909,137914,137917,137950,137955,137958,137999,138002],[10,136333,136329],{"id":136334},"_14-html5与css3新特性",[149,136336,136338],{"id":136337},"_141-html5的新特性","14.1 HTML5的新特性",[177,136340,136342],{"id":136341},"_1411-基本标签","14.1.1 基本标签",[14,136344,136345],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136347,136348,136349,136352],{},"这些新特性都有兼容性问题，基本是 ",[359,136350,136351],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136354,136355],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136357,136358],{},"现在使用的是新特性：",[116,136360,136361,136367,136373,136379,136385,136391],{},[119,136362,136363,136366],{},[25,136364,136365],{},"\u003Cheader>"," 头部标签",[119,136368,136369,136372],{},[25,136370,136371],{},"\u003Cnav>"," 导航标签",[119,136374,136375,136378],{},[25,136376,136377],{},"\u003Carticle>"," 内容标签",[119,136380,136381,136384],{},[25,136382,136383],{},"\u003Csection>"," 定义文档某个区域",[119,136386,136387,136390],{},[25,136388,136389],{},"\u003Caside>"," 侧边栏标签",[119,136392,136393,136396],{},[25,136394,136395],{},"\u003Cfooter>"," 尾部标签",[1540,136398],{"style":126459,"src":136399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136401,241],{},[116,136403,136404,136407,136410,136413],{},[119,136405,136406],{},"这种语义化标准主要是针对搜索引擎的",[119,136408,136409],{},"这些标签页面中可以经常使用",[119,136411,136412],{},"在IE9中，需要把这些元素转换为块级元素",[119,136414,136415],{},"移动端更喜欢使用这些标签",[177,136417,136419],{"id":136418},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136421,136422,136423,136425,136426,136428],{},"音频 ",[359,136424,28225],{}," 和视频 ",[359,136427,28234],{}," 两个标签",[22075,136430,136432],{"id":136431},"_14121-视频标签-video","14.1.2.1 视频标签- video",[161,136434,136435],{},[119,136436,136437],{},"支持格式：",[1540,136439],{"style":126459,"src":136440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136442,136443],{},"尽量使用MP4，兼容性好",[14,136445,136446],{},"用MP4就可以",[18,136448,136450],{"className":127350,"code":136449,"language":127352,"meta":23,"style":23},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[25,136451,136452],{"__ignoreMap":23},[28,136453,136454,136456,136458,136460,136462,136465,136467,136470,136473,136476,136478,136480],{"class":30,"line":31},[28,136455,1120],{"class":211},[28,136457,28234],{"class":51351},[28,136459,55290],{"class":34},[28,136461,257],{"class":211},[28,136463,136464],{"class":64},"\"movie.mp4\"",[28,136466,92474],{"class":34},[28,136468,136469],{"class":34}," autoplay",[28,136471,136472],{"class":34}," muted",[28,136474,136475],{"class":34}," loop",[28,136477,55365],{"class":211},[28,136479,28234],{"class":51351},[28,136481,51358],{"class":211},[161,136483,136484],{"start":42},[119,136485,136486],{},"兼容写法",[14,136488,136489],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[18,136491,136492],{"className":127350,"code":136449,"language":127352,"meta":23,"style":23},[25,136493,136494],{"__ignoreMap":23},[28,136495,136496,136498,136500,136502,136504,136506,136508,136510,136512,136514,136516,136518],{"class":30,"line":31},[28,136497,1120],{"class":211},[28,136499,28234],{"class":51351},[28,136501,55290],{"class":34},[28,136503,257],{"class":211},[28,136505,136464],{"class":64},[28,136507,92474],{"class":34},[28,136509,136469],{"class":34},[28,136511,136472],{"class":34},[28,136513,136475],{"class":34},[28,136515,55365],{"class":211},[28,136517,28234],{"class":51351},[28,136519,51358],{"class":211},[14,136521,136522],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[161,136524,136525],{"start":50},[119,136526,136527],{},"video常用属性",[1540,136529],{"style":126459,"src":136530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136532,136533],{},"poster属性后面是跟的等待加载图片的地址",[18,136535,136536],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,136537,136538],{"__ignoreMap":23},[28,136539,136540,136542,136544,136546,136548,136550,136552,136554,136556,136558,136560,136562],{"class":30,"line":31},[28,136541,1120],{"class":211},[28,136543,1540],{"class":51351},[28,136545,55290],{"class":34},[28,136547,257],{"class":211},[28,136549,134120],{"class":64},[28,136551,55298],{"class":34},[28,136553,257],{"class":211},[28,136555,134127],{"class":64},[28,136557,134130],{"class":34},[28,136559,257],{"class":211},[28,136561,134135],{"class":64},[28,136563,51358],{"class":211},[14,136565,136566],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[18,136568,136570],{"className":126603,"code":136569,"language":126605,"meta":23,"style":23},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[25,136571,136572,136577,136583,136607,136612,136617],{"__ignoreMap":23},[28,136573,136574],{"class":30,"line":31},[28,136575,136576],{"class":269},"\u002F* 2D 位移 *\u002F\n",[28,136578,136579,136581],{"class":30,"line":42},[28,136580,51662],{"class":51351},[28,136582,15649],{"class":211},[28,136584,136585,136588,136590,136593,136595,136597,136599,136601,136603,136605],{"class":30,"line":50},[28,136586,136587],{"class":38},"  transform",[28,136589,51488],{"class":211},[28,136591,136592],{"class":38},"translate",[28,136594,212],{"class":211},[28,136596,521],{"class":38},[28,136598,51543],{"class":207},[28,136600,12512],{"class":211},[28,136602,866],{"class":38},[28,136604,51543],{"class":207},[28,136606,2796],{"class":211},[28,136608,136609],{"class":30,"line":58},[28,136610,136611],{"class":269},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[28,136613,136614],{"class":30,"line":70},[28,136615,136616],{"class":269},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[28,136618,136619],{"class":30,"line":78},[28,136620,1643],{"class":211},[14,136622,136623],{},"muted:自动静音属性",[22075,136625,136627],{"id":136626},"_14122-音频标签audio","14.1.2.2 音频标签audio",[161,136629,136630],{},[119,136631,136632],{},"基本使用",[14,136634,136635,136636,136641,136642],{},"当前 ",[359,136637,136638],{},[25,136639,136640],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[359,136643,136644],{},"mp3格式",[1540,136646],{"style":126459,"src":136647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[161,136649,136650],{"start":42},[119,136651,136486],{},[18,136653,136654],{"className":127350,"code":136449,"language":127352,"meta":23,"style":23},[25,136655,136656],{"__ignoreMap":23},[28,136657,136658,136660,136662,136664,136666,136668,136670,136672,136674,136676,136678,136680],{"class":30,"line":31},[28,136659,1120],{"class":211},[28,136661,28234],{"class":51351},[28,136663,55290],{"class":34},[28,136665,257],{"class":211},[28,136667,136464],{"class":64},[28,136669,92474],{"class":34},[28,136671,136469],{"class":34},[28,136673,136472],{"class":34},[28,136675,136475],{"class":34},[28,136677,55365],{"class":211},[28,136679,28234],{"class":51351},[28,136681,51358],{"class":211},[14,136683,136684],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[161,136686,136687],{"start":50},[119,136688,136689],{},"常用属性",[1540,136691],{"style":126459,"src":136692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[18,136694,136695],{"className":127350,"code":136449,"language":127352,"meta":23,"style":23},[25,136696,136697],{"__ignoreMap":23},[28,136698,136699,136701,136703,136705,136707,136709,136711,136713,136715,136717,136719,136721],{"class":30,"line":31},[28,136700,1120],{"class":211},[28,136702,28234],{"class":51351},[28,136704,55290],{"class":34},[28,136706,257],{"class":211},[28,136708,136464],{"class":64},[28,136710,92474],{"class":34},[28,136712,136469],{"class":34},[28,136714,136472],{"class":34},[28,136716,136475],{"class":34},[28,136718,55365],{"class":211},[28,136720,28234],{"class":51351},[28,136722,51358],{"class":211},[14,136724,136725],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22075,136727,136729],{"id":136728},"_14123-总结","14.1.2.3 总结",[116,136731,136732,136735,136738,136741,136744],{},[119,136733,136734],{},"音频标签和视频标签使用方式基本一致",[119,136736,136737],{},"浏览器支持情况不同",[119,136739,136740],{},"谷歌浏览器把音频和视频自动播放禁止了",[119,136742,136743],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[119,136745,136746],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[177,136748,136750],{"id":136749},"_1413-表单元素","14.1.3 表单元素",[22075,136752,136754],{"id":136753},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1540,136756],{"style":126459,"src":136757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[18,136759,136761],{"className":127350,"code":136760,"language":127352,"meta":23,"style":23},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[25,136762,136763],{"__ignoreMap":23},[28,136764,136765,136767,136769,136771,136773,136775,136777,136779,136782,136784,136786,136789],{"class":30,"line":31},[28,136766,1120],{"class":211},[28,136768,53872],{"class":51351},[28,136770,53875],{"class":34},[28,136772,257],{"class":211},[28,136774,62750],{"class":64},[28,136776,14997],{"class":34},[28,136778,257],{"class":211},[28,136780,136781],{"class":64},"\"username\"",[28,136783,61071],{"class":34},[28,136785,257],{"class":211},[28,136787,136788],{"class":64},"\"请输入用户名\"",[28,136790,51358],{"class":211},[1540,136792],{"style":126459,"src":136793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22075,136795,136797],{"id":136796},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1540,136799],{"style":126459,"src":136800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136802,136803],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136805,136806],{},"快捷操作：",[1540,136808],{"style":126459,"src":136809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136811,136812],{},"例子1：",[18,136814,136816],{"className":127350,"code":136815,"language":127352,"meta":23,"style":23},"\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",[25,136817,136818,136841,136868,136897,136916],{"__ignoreMap":23},[28,136819,136820,136822,136824,136826,136828,136831,136834,136836,136839],{"class":30,"line":31},[28,136821,1120],{"class":211},[28,136823,66676],{"class":51351},[28,136825,66679],{"class":34},[28,136827,257],{"class":211},[28,136829,136830],{"class":64},"\"\u002Fsubmit\"",[28,136832,136833],{"class":34}," method",[28,136835,257],{"class":211},[28,136837,136838],{"class":64},"\"post\"",[28,136840,51358],{"class":211},[28,136842,136843,136845,136847,136849,136851,136853,136855,136857,136859,136861,136863,136866],{"class":30,"line":42},[28,136844,52195],{"class":211},[28,136846,53872],{"class":51351},[28,136848,53875],{"class":34},[28,136850,257],{"class":211},[28,136852,62750],{"class":64},[28,136854,14997],{"class":34},[28,136856,257],{"class":211},[28,136858,136781],{"class":64},[28,136860,61071],{"class":34},[28,136862,257],{"class":211},[28,136864,136865],{"class":64},"\"用户名\"",[28,136867,51358],{"class":211},[28,136869,136870,136872,136874,136876,136878,136881,136883,136885,136888,136890,136892,136895],{"class":30,"line":50},[28,136871,52195],{"class":211},[28,136873,53872],{"class":51351},[28,136875,53875],{"class":34},[28,136877,257],{"class":211},[28,136879,136880],{"class":64},"\"password\"",[28,136882,14997],{"class":34},[28,136884,257],{"class":211},[28,136886,136887],{"class":64},"\"pwd\"",[28,136889,61071],{"class":34},[28,136891,257],{"class":211},[28,136893,136894],{"class":64},"\"密码\"",[28,136896,51358],{"class":211},[28,136898,136899,136901,136903,136905,136907,136909,136912,136914],{"class":30,"line":58},[28,136900,52195],{"class":211},[28,136902,53938],{"class":51351},[28,136904,53875],{"class":34},[28,136906,257],{"class":211},[28,136908,66699],{"class":64},[28,136910,136911],{"class":211},">提交\u003C\u002F",[28,136913,53938],{"class":51351},[28,136915,51358],{"class":211},[28,136917,136918,136920,136922],{"class":30,"line":70},[28,136919,51836],{"class":211},[28,136921,66676],{"class":51351},[28,136923,51358],{"class":211},[1540,136925],{"style":126459,"src":136926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136928,136929],{},"value是表单域的内容",[14,136931,136932],{},"例子2：",[18,136934,136935],{"className":127350,"code":136815,"language":127352,"meta":23,"style":23},[25,136936,136937,136957,136983,137009,137027],{"__ignoreMap":23},[28,136938,136939,136941,136943,136945,136947,136949,136951,136953,136955],{"class":30,"line":31},[28,136940,1120],{"class":211},[28,136942,66676],{"class":51351},[28,136944,66679],{"class":34},[28,136946,257],{"class":211},[28,136948,136830],{"class":64},[28,136950,136833],{"class":34},[28,136952,257],{"class":211},[28,136954,136838],{"class":64},[28,136956,51358],{"class":211},[28,136958,136959,136961,136963,136965,136967,136969,136971,136973,136975,136977,136979,136981],{"class":30,"line":42},[28,136960,52195],{"class":211},[28,136962,53872],{"class":51351},[28,136964,53875],{"class":34},[28,136966,257],{"class":211},[28,136968,62750],{"class":64},[28,136970,14997],{"class":34},[28,136972,257],{"class":211},[28,136974,136781],{"class":64},[28,136976,61071],{"class":34},[28,136978,257],{"class":211},[28,136980,136865],{"class":64},[28,136982,51358],{"class":211},[28,136984,136985,136987,136989,136991,136993,136995,136997,136999,137001,137003,137005,137007],{"class":30,"line":50},[28,136986,52195],{"class":211},[28,136988,53872],{"class":51351},[28,136990,53875],{"class":34},[28,136992,257],{"class":211},[28,136994,136880],{"class":64},[28,136996,14997],{"class":34},[28,136998,257],{"class":211},[28,137000,136887],{"class":64},[28,137002,61071],{"class":34},[28,137004,257],{"class":211},[28,137006,136894],{"class":64},[28,137008,51358],{"class":211},[28,137010,137011,137013,137015,137017,137019,137021,137023,137025],{"class":30,"line":58},[28,137012,52195],{"class":211},[28,137014,53938],{"class":51351},[28,137016,53875],{"class":34},[28,137018,257],{"class":211},[28,137020,66699],{"class":64},[28,137022,136911],{"class":211},[28,137024,53938],{"class":51351},[28,137026,51358],{"class":211},[28,137028,137029,137031,137033],{"class":30,"line":70},[28,137030,51836],{"class":211},[28,137032,66676],{"class":51351},[28,137034,51358],{"class":211},[1540,137036],{"style":126459,"src":137037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[149,137039,137041],{"id":137040},"_142-css新特性","14.2 CSS新特性",[177,137043,137045],{"id":137044},"_1421-新增选择器","14.2.1 新增选择器",[22075,137047,137049],{"id":137048},"_14211-属性选择器","14.2.1.1 属性选择器",[1540,137051],{"style":126459,"src":137052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[18,137054,137056],{"className":126603,"code":137055,"language":126605,"meta":23,"style":23},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[25,137057,137058,137073,137089],{"__ignoreMap":23},[28,137059,137060,137062,137064,137066,137068,137070],{"class":30,"line":31},[28,137061,53872],{"class":51351},[28,137063,1100],{"class":211},[28,137065,103158],{"class":34},[28,137067,257],{"class":207},[28,137069,62750],{"class":64},[28,137071,137072],{"class":211},"] {\n",[28,137074,137075,137077,137079,137081,137083,137085,137087],{"class":30,"line":42},[28,137076,70947],{"class":38},[28,137078,51488],{"class":211},[28,137080,427],{"class":38},[28,137082,51543],{"class":207},[28,137084,51572],{"class":38},[28,137086,130183],{"class":38},[28,137088,1370],{"class":211},[28,137090,137091],{"class":30,"line":50},[28,137092,1643],{"class":211},[1540,137094],{"style":126459,"src":137095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137097,241],{},[116,137099,137100,137103,137106,137109],{},[119,137101,137102],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[119,137104,137105],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[119,137107,137108],{},"属性选择器也可以选择出来自定义的属性",[119,137110,137111,137113],{},[359,137112,9102],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22075,137115,137117],{"id":137116},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1540,137119],{"style":126459,"src":137120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[161,137122,137123],{},[119,137124,137125],{},"fist-child",[18,137127,137129],{"className":126603,"code":137128,"language":126605,"meta":23,"style":23},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[25,137130,137131,137136,137151,137171,137189],{"__ignoreMap":23},[28,137132,137133],{"class":30,"line":31},[28,137134,137135],{"class":269},"\u002F* 属性选择器 *\u002F\n",[28,137137,137138,137140,137142,137144,137146,137148],{"class":30,"line":42},[28,137139,53872],{"class":51351},[28,137141,1100],{"class":211},[28,137143,103158],{"class":34},[28,137145,257],{"class":207},[28,137147,62750],{"class":64},[28,137149,137150],{"class":211},"] { }\n",[28,137152,137153,137155,137157,137159,137162,137165,137168],{"class":30,"line":50},[28,137154,53872],{"class":51351},[28,137156,1100],{"class":211},[28,137158,14771],{"class":34},[28,137160,137161],{"class":207},"^=",[28,137163,137164],{"class":64},"\"icon\"",[28,137166,137167],{"class":211},"] { }  ",[28,137169,137170],{"class":269},"\u002F* 以 icon 开头 *\u002F\n",[28,137172,137173,137175,137177,137179,137182,137184,137186],{"class":30,"line":58},[28,137174,53872],{"class":51351},[28,137176,1100],{"class":211},[28,137178,14771],{"class":34},[28,137180,137181],{"class":207},"$=",[28,137183,137164],{"class":64},[28,137185,137167],{"class":211},[28,137187,137188],{"class":269},"\u002F* 以 icon 结尾 *\u002F\n",[28,137190,137191,137193,137195,137197,137200,137202,137204],{"class":30,"line":70},[28,137192,53872],{"class":51351},[28,137194,1100],{"class":211},[28,137196,14771],{"class":34},[28,137198,137199],{"class":207},"*=",[28,137201,137164],{"class":64},[28,137203,137167],{"class":211},[28,137205,137206],{"class":269},"\u002F* 包含 icon *\u002F\n",[14,137208,137209],{},"ul的第一个儿子文本为红色",[14,137211,137212],{},"一定要在冒号前加空格，不然就是选中所有的了",[18,137214,137216],{"className":126603,"code":137215,"language":126605,"meta":23,"style":23},".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",[25,137217,137218,137224,137234,137238,137242,137247,137260,137273,137289,137306,137323],{"__ignoreMap":23},[28,137219,137220,137222],{"class":30,"line":31},[28,137221,126894],{"class":34},[28,137223,15649],{"class":211},[28,137225,137226,137228,137230,137232],{"class":30,"line":42},[28,137227,70956],{"class":38},[28,137229,51488],{"class":211},[28,137231,57472],{"class":38},[28,137233,1370],{"class":211},[28,137235,137236],{"class":30,"line":50},[28,137237,1643],{"class":211},[28,137239,137240],{"class":30,"line":58},[28,137241,136064],{"class":211},[28,137243,137244],{"class":30,"line":70},[28,137245,137246],{"class":269},"\u002F* 结构伪类选择器 *\u002F\n",[28,137248,137249,137251,137254,137257],{"class":30,"line":78},[28,137250,119],{"class":51351},[28,137252,137253],{"class":34},":first-child",[28,137255,137256],{"class":211}," { }           ",[28,137258,137259],{"class":269},"\u002F* 第一个 *\u002F\n",[28,137261,137262,137264,137267,137270],{"class":30,"line":86},[28,137263,119],{"class":51351},[28,137265,137266],{"class":34},":last-child",[28,137268,137269],{"class":211}," { }            ",[28,137271,137272],{"class":269},"\u002F* 最后一个 *\u002F\n",[28,137274,137275,137277,137279,137281,137283,137286],{"class":30,"line":97},[28,137276,119],{"class":51351},[28,137278,129517],{"class":34},[28,137280,212],{"class":211},[28,137282,288],{"class":38},[28,137284,137285],{"class":211},") { }          ",[28,137287,137288],{"class":269},"\u002F* 第2个 *\u002F\n",[28,137290,137291,137293,137295,137297,137300,137303],{"class":30,"line":108},[28,137292,119],{"class":51351},[28,137294,129517],{"class":34},[28,137296,212],{"class":211},[28,137298,137299],{"class":38},"2n",[28,137301,137302],{"class":211},") { }         ",[28,137304,137305],{"class":269},"\u002F* 偶数 *\u002F\n",[28,137307,137308,137310,137312,137314,137317,137320],{"class":30,"line":1407},[28,137309,119],{"class":51351},[28,137311,129517],{"class":34},[28,137313,212],{"class":211},[28,137315,137316],{"class":38},"2n+1",[28,137318,137319],{"class":211},") { }       ",[28,137321,137322],{"class":269},"\u002F* 奇数 *\u002F\n",[28,137324,137325,137327,137329,137331,137334,137336],{"class":30,"line":1690},[28,137326,119],{"class":51351},[28,137328,129517],{"class":34},[28,137330,212],{"class":211},[28,137332,137333],{"class":38},"-n+3",[28,137335,137319],{"class":211},[28,137337,137338],{"class":269},"\u002F* 前3个 *\u002F\n",[51662,137340,137343],{"className":137341},[137342],"example","\n  示例内容\n",[14,137345,137346],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[116,137348,137349],{},[119,137350,137351,137354],{},[25,137352,137353],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137356,137357],{},"也就是说它选择的是熊大",[161,137359,137360],{"start":78},[119,137361,137362],{},"权重",[18,137364,137366],{"className":126603,"code":137365,"language":126605,"meta":23,"style":23},"\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",[25,137367,137368,137372,137382,137392,137406,137420,137434],{"__ignoreMap":23},[28,137369,137370],{"class":30,"line":31},[28,137371,137246],{"class":269},[28,137373,137374,137376,137378,137380],{"class":30,"line":42},[28,137375,119],{"class":51351},[28,137377,137253],{"class":34},[28,137379,137256],{"class":211},[28,137381,137259],{"class":269},[28,137383,137384,137386,137388,137390],{"class":30,"line":50},[28,137385,119],{"class":51351},[28,137387,137266],{"class":34},[28,137389,137269],{"class":211},[28,137391,137272],{"class":269},[28,137393,137394,137396,137398,137400,137402,137404],{"class":30,"line":58},[28,137395,119],{"class":51351},[28,137397,129517],{"class":34},[28,137399,212],{"class":211},[28,137401,288],{"class":38},[28,137403,137285],{"class":211},[28,137405,137288],{"class":269},[28,137407,137408,137410,137412,137414,137416,137418],{"class":30,"line":70},[28,137409,119],{"class":51351},[28,137411,129517],{"class":34},[28,137413,212],{"class":211},[28,137415,137299],{"class":38},[28,137417,137302],{"class":211},[28,137419,137305],{"class":269},[28,137421,137422,137424,137426,137428,137430,137432],{"class":30,"line":78},[28,137423,119],{"class":51351},[28,137425,129517],{"class":34},[28,137427,212],{"class":211},[28,137429,137316],{"class":38},[28,137431,137319],{"class":211},[28,137433,137322],{"class":269},[28,137435,137436,137438,137440,137442,137444,137446],{"class":30,"line":86},[28,137437,119],{"class":51351},[28,137439,129517],{"class":34},[28,137441,212],{"class":211},[28,137443,137333],{"class":38},[28,137445,137319],{"class":211},[28,137447,137338],{"class":269},[14,137449,137450],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22075,137452,137454],{"id":137453},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137456,137457],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1540,137459],{"style":126459,"src":137460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[161,137462,137463],{},[119,137464,241],{},[116,137466,137467,137470,137473,137476,137479,137482],{},[119,137468,137469],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[119,137471,137472],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[119,137474,137475],{},"语法： element::before {}",[119,137477,137478],{},"before 和 after 必须有 content 属性",[119,137480,137481],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[119,137483,137484],{},"伪元素选择器和标签选择器一样，权重为 1",[161,137486,137487],{"start":42},[119,137488,137489],{},"实例",[18,137491,137492],{"className":126603,"code":137365,"language":126605,"meta":23,"style":23},[25,137493,137494,137498,137508,137518,137532,137546,137560],{"__ignoreMap":23},[28,137495,137496],{"class":30,"line":31},[28,137497,137246],{"class":269},[28,137499,137500,137502,137504,137506],{"class":30,"line":42},[28,137501,119],{"class":51351},[28,137503,137253],{"class":34},[28,137505,137256],{"class":211},[28,137507,137259],{"class":269},[28,137509,137510,137512,137514,137516],{"class":30,"line":50},[28,137511,119],{"class":51351},[28,137513,137266],{"class":34},[28,137515,137269],{"class":211},[28,137517,137272],{"class":269},[28,137519,137520,137522,137524,137526,137528,137530],{"class":30,"line":58},[28,137521,119],{"class":51351},[28,137523,129517],{"class":34},[28,137525,212],{"class":211},[28,137527,288],{"class":38},[28,137529,137285],{"class":211},[28,137531,137288],{"class":269},[28,137533,137534,137536,137538,137540,137542,137544],{"class":30,"line":70},[28,137535,119],{"class":51351},[28,137537,129517],{"class":34},[28,137539,212],{"class":211},[28,137541,137299],{"class":38},[28,137543,137302],{"class":211},[28,137545,137305],{"class":269},[28,137547,137548,137550,137552,137554,137556,137558],{"class":30,"line":78},[28,137549,119],{"class":51351},[28,137551,129517],{"class":34},[28,137553,212],{"class":211},[28,137555,137316],{"class":38},[28,137557,137319],{"class":211},[28,137559,137322],{"class":269},[28,137561,137562,137564,137566,137568,137570,137572],{"class":30,"line":86},[28,137563,119],{"class":51351},[28,137565,129517],{"class":34},[28,137567,212],{"class":211},[28,137569,137333],{"class":38},[28,137571,137319],{"class":211},[28,137573,137338],{"class":269},[1540,137575],{"style":126459,"src":137576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[161,137578,137579],{"start":50},[119,137580,137581],{},"使用场景1",[1540,137583],{"style":126459,"src":137584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137586,137587],{},"不需要再加盒子来整红色那部分了",[18,137589,137591],{"className":126603,"code":137590,"language":126605,"meta":23,"style":23},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[25,137592,137593,137598,137607,137618,137628,137632,137641,137652,137662],{"__ignoreMap":23},[28,137594,137595],{"class":30,"line":31},[28,137596,137597],{"class":269},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[28,137599,137600,137602,137605],{"class":30,"line":42},[28,137601,51662],{"class":51351},[28,137603,137604],{"class":34},"::before",[28,137606,15649],{"class":211},[28,137608,137609,137612,137614,137616],{"class":30,"line":50},[28,137610,137611],{"class":38},"  content",[28,137613,51488],{"class":211},[28,137615,7729],{"class":64},[28,137617,1370],{"class":211},[28,137619,137620,137622,137624,137626],{"class":30,"line":58},[28,137621,128219],{"class":38},[28,137623,51488],{"class":211},[28,137625,60920],{"class":38},[28,137627,1370],{"class":211},[28,137629,137630],{"class":30,"line":70},[28,137631,1643],{"class":211},[28,137633,137634,137636,137639],{"class":30,"line":78},[28,137635,51662],{"class":51351},[28,137637,137638],{"class":34},"::after",[28,137640,15649],{"class":211},[28,137642,137643,137645,137647,137650],{"class":30,"line":86},[28,137644,137611],{"class":38},[28,137646,51488],{"class":211},[28,137648,137649],{"class":64},"\"→\"",[28,137651,1370],{"class":211},[28,137653,137654,137656,137658,137660],{"class":30,"line":97},[28,137655,70956],{"class":38},[28,137657,51488],{"class":211},[28,137659,62121],{"class":38},[28,137661,1370],{"class":211},[28,137663,137664],{"class":30,"line":108},[28,137665,1643],{"class":211},[1540,137667],{"style":126459,"src":137668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137670,137671],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1540,137673],{"style":126459,"src":137674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137676,137677],{},"但是在引用时需要先转义一下",[14,137679,137680],{},"content='\\e930'",[161,137682,137683],{"start":58},[119,137684,137685],{},"使用场景2",[14,137687,137688],{},"仿土豆效果",[14,137690,137691],{},"通过使用伪元素选择器可以减少body中盒子的数量",[18,137693,137694],{"className":126603,"code":137590,"language":126605,"meta":23,"style":23},[25,137695,137696,137700,137708,137718,137728,137732,137740,137750,137760],{"__ignoreMap":23},[28,137697,137698],{"class":30,"line":31},[28,137699,137597],{"class":269},[28,137701,137702,137704,137706],{"class":30,"line":42},[28,137703,51662],{"class":51351},[28,137705,137604],{"class":34},[28,137707,15649],{"class":211},[28,137709,137710,137712,137714,137716],{"class":30,"line":50},[28,137711,137611],{"class":38},[28,137713,51488],{"class":211},[28,137715,7729],{"class":64},[28,137717,1370],{"class":211},[28,137719,137720,137722,137724,137726],{"class":30,"line":58},[28,137721,128219],{"class":38},[28,137723,51488],{"class":211},[28,137725,60920],{"class":38},[28,137727,1370],{"class":211},[28,137729,137730],{"class":30,"line":70},[28,137731,1643],{"class":211},[28,137733,137734,137736,137738],{"class":30,"line":78},[28,137735,51662],{"class":51351},[28,137737,137638],{"class":34},[28,137739,15649],{"class":211},[28,137741,137742,137744,137746,137748],{"class":30,"line":86},[28,137743,137611],{"class":38},[28,137745,51488],{"class":211},[28,137747,137649],{"class":64},[28,137749,1370],{"class":211},[28,137751,137752,137754,137756,137758],{"class":30,"line":97},[28,137753,70956],{"class":38},[28,137755,51488],{"class":211},[28,137757,62121],{"class":38},[28,137759,1370],{"class":211},[28,137761,137762],{"class":30,"line":108},[28,137763,1643],{"class":211},[1540,137765],{"style":126459,"src":137766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[161,137768,137769],{"start":70},[119,137770,137771],{},"使用场景3",[14,137773,137774],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[18,137776,137778],{"className":126603,"code":137777,"language":126605,"meta":23,"style":23},".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",[25,137779,137780,137786,137796,137800,137804,137808,137816,137826,137836,137840,137848,137858,137868],{"__ignoreMap":23},[28,137781,137782,137784],{"class":30,"line":31},[28,137783,130451],{"class":34},[28,137785,15649],{"class":211},[28,137787,137788,137790,137792,137794],{"class":30,"line":42},[28,137789,131083],{"class":38},[28,137791,51488],{"class":211},[28,137793,23813],{"class":38},[28,137795,1370],{"class":211},[28,137797,137798],{"class":30,"line":50},[28,137799,1643],{"class":211},[28,137801,137802],{"class":30,"line":58},[28,137803,136064],{"class":211},[28,137805,137806],{"class":30,"line":70},[28,137807,137597],{"class":269},[28,137809,137810,137812,137814],{"class":30,"line":78},[28,137811,51662],{"class":51351},[28,137813,137604],{"class":34},[28,137815,15649],{"class":211},[28,137817,137818,137820,137822,137824],{"class":30,"line":86},[28,137819,137611],{"class":38},[28,137821,51488],{"class":211},[28,137823,7729],{"class":64},[28,137825,1370],{"class":211},[28,137827,137828,137830,137832,137834],{"class":30,"line":97},[28,137829,128219],{"class":38},[28,137831,51488],{"class":211},[28,137833,60920],{"class":38},[28,137835,1370],{"class":211},[28,137837,137838],{"class":30,"line":108},[28,137839,1643],{"class":211},[28,137841,137842,137844,137846],{"class":30,"line":1407},[28,137843,51662],{"class":51351},[28,137845,137638],{"class":34},[28,137847,15649],{"class":211},[28,137849,137850,137852,137854,137856],{"class":30,"line":1690},[28,137851,137611],{"class":38},[28,137853,51488],{"class":211},[28,137855,137649],{"class":64},[28,137857,1370],{"class":211},[28,137859,137860,137862,137864,137866],{"class":30,"line":1695},[28,137861,70956],{"class":38},[28,137863,51488],{"class":211},[28,137865,62121],{"class":38},[28,137867,1370],{"class":211},[28,137869,137870],{"class":30,"line":1701},[28,137871,1643],{"class":211},[14,137873,137874],{},"div {\nmargin: 0 auto;\n}",[18,137876,137879],{"className":137877,"code":137878,"language":5264},[5262],"\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",[25,137880,137878],{"__ignoreMap":23},[14,137882,137883],{},"如果想让多个元素都发生变化",[14,137885,137886],{},"不能如下操作：",[14,137888,137889],{},"transition: width 2s ease 0.5s;",[14,137891,137892],{},"transition: height 2s ease 0.5s;不对！！！",[14,137894,137895],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137897,137898],{},"使用如下：加逗号隔开",[14,137900,137901],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137903,137904],{},"transition all 2s ease;",[177,137906,137908],{"id":137907},"_1426-过渡练习","14.2.6 过渡练习",[161,137910,137911],{},[119,137912,137913],{},"进度条",[1540,137915],{"style":126459,"src":137916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[18,137918,137920],{"className":126603,"code":137919,"language":126605,"meta":23,"style":23},"div {\n  transition: all 0.3s ease;\n}\n",[25,137921,137922,137928,137946],{"__ignoreMap":23},[28,137923,137924,137926],{"class":30,"line":31},[28,137925,51662],{"class":51351},[28,137927,15649],{"class":211},[28,137929,137930,137933,137935,137937,137940,137942,137944],{"class":30,"line":42},[28,137931,137932],{"class":38},"  transition",[28,137934,51488],{"class":211},[28,137936,28172],{"class":38},[28,137938,137939],{"class":38}," 0.3",[28,137941,905],{"class":207},[28,137943,78731],{"class":38},[28,137945,1370],{"class":211},[28,137947,137948],{"class":30,"line":50},[28,137949,1643],{"class":211},[161,137951,137952],{"start":42},[119,137953,137954],{},"小米logo",[14,137956,137957],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[18,137959,137961],{"className":126603,"code":137960,"language":126605,"meta":23,"style":23},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[25,137962,137963,137968,137974,137990,137995],{"__ignoreMap":23},[28,137964,137965],{"class":30,"line":31},[28,137966,137967],{"class":269},"\u002F* CSS3 过渡 *\u002F\n",[28,137969,137970,137972],{"class":30,"line":42},[28,137971,51662],{"class":51351},[28,137973,15649],{"class":211},[28,137975,137976,137978,137980,137982,137984,137986,137988],{"class":30,"line":50},[28,137977,137932],{"class":38},[28,137979,51488],{"class":211},[28,137981,28172],{"class":38},[28,137983,137939],{"class":38},[28,137985,905],{"class":207},[28,137987,78731],{"class":38},[28,137989,1370],{"class":211},[28,137991,137992],{"class":30,"line":58},[28,137993,137994],{"class":269},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[28,137996,137997],{"class":30,"line":70},[28,137998,1643],{"class":211},[14,138000,138001],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[126,138003,138004],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":23,"searchDepth":42,"depth":42,"links":138006},[138007,138012],{"id":136337,"depth":42,"text":136338,"children":138008},[138009,138010,138011],{"id":136341,"depth":50,"text":136342},{"id":136418,"depth":50,"text":136419},{"id":136749,"depth":50,"text":136750},{"id":137040,"depth":42,"text":137041,"children":138013},[138014,138015],{"id":137044,"depth":50,"text":137045},{"id":137907,"depth":50,"text":137908},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136329,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138022,"title":138023,"body":138024,"description":131,"extension":132,"meta":139768,"navigation":134,"path":139769,"seo":139770,"stem":139771,"__hash__":139772},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138025,"toc":139749},[138026,138029,138033,138036,138042,138048,138052,138054,138057,138060,138063,138066,138069,138072,138075,138079,138083,138086,138089,138092,138096,138099,138102,138107,138110,138113,138116,138120,138123,138132,138135,138138,138142,138145,138148,138153,138160,138174,138182,138189,138194,138197,138200,138203,138210,138214,138220,138226,138229,138232,138237,138243,138245,138253,138258,138261,138267,138269,138274,138279,138282,138284,138289,138292,138297,138302,138336,138340,138344,138347,138351,138354,138440,138443,138480,138483,138519,138523,138528,138541,138595,138597,138625,138627,138655,138661,138675,138677,138721,138723,138767,138770,138777,138788,138790,138817,138819,138845,138852,138868,138870,138964,138966,139060,139067,139070,139075,139081,139155,139158,139160,139196,139198,139234,139237,139244,139263,139266,139269,139271,139296,139298,139322,139325,139328,139358,139362,139365,139428,139430,139496,139498,139562,139565,139597,139599,139625,139627,139653,139656,139687,139689,139715,139717,139743,139746],[10,138027,138023],{"id":138028},"_15-品优购项目上篇-搭建与公共模块",[149,138030,138032],{"id":138031},"_151-项目规划","15.1 项目规划",[1540,138034],{"style":126459,"src":138035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,138037,138038,138041],{},[359,138039,138040],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,138043,138044,138047],{},[359,138045,138046],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[149,138049,138051],{"id":138050},"_152-项目介绍","15.2 项目介绍",[14,138053,138040],{},[1540,138055],{"style":126459,"src":138056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138058,138059],{},"主页：",[1540,138061],{"style":126459,"src":138062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138064,138065],{},"列表页：",[1540,138067],{"style":126459,"src":138068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138070,138071],{},"注册页：",[1540,138073],{"style":126459,"src":138074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[149,138076,138078],{"id":138077},"_153-项目搭建工作","15.3 项目搭建工作",[177,138080,138082],{"id":138081},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1540,138084],{"style":126459,"src":138085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138087,138088],{},"经常更换的图片要放到upload文件夹中",[14,138090,138091],{},"不经常换的放到images文件夹中",[177,138093,138095],{"id":138094},"_1532-创建文件如下","15.3.2 创建文件如下",[1540,138097],{"style":126459,"src":138098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1540,138100],{"style":126459,"src":138101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138103,138104],{},[359,138105,138106],{},"初始化样式：",[14,138108,138109],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138111,138112],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138114,138115],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[177,138117,138119],{"id":138118},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138121,138122],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138124,138125,138126,138131],{},"这里最典型的应用就是 ",[359,138127,138128],{},[25,138129,138130],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1540,138133],{"style":126459,"src":138134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138136,138137],{},"通过link方法来引入",[177,138139,138141],{"id":138140},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1540,138143],{"style":126459,"src":138144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138146,138147],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[161,138149,138150],{},[119,138151,138152],{},"制作favicon图标",[14,138154,138155,138156,138159],{},"①把品优购图标切成 ",[25,138157,138158],{},"png"," 图片",[14,138161,138162,138163,138165,138166,138169,138170],{},"②把 ",[25,138164,138158],{}," 图片转换为 ",[25,138167,138168],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[448,138171,138172],{"href":138172,"rel":138173},"http:\u002F\u002Fwww.bitbug.net\u002F",[23940],[161,138175,138176,138179],{"start":42},[119,138177,138178],{},"favicon图标放到网站根目录下",[119,138180,138181],{},"HTML页面引入favicon",[14,138183,138184,138185,138188],{},"在html 页面里面的 ",[25,138186,138187],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138190,138191],{},[25,138192,138193],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138195,138196],{},"复制这行代码或者在生成这个的网站进行复制",[1540,138198],{"style":126459,"src":138199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138201,138202],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138204,138205,138206],{},"例如:",[448,138207,138208],{"href":138208,"rel":138209},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23940],[177,138211,138213],{"id":138212},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138215,138216,138219],{},[359,138217,138218],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138221,138222,138225],{},[359,138223,138224],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138227,138228],{},"页面必须有三个标签用来符合 SEO 优化",[1540,138230],{"style":126459,"src":138231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[161,138233,138234],{},[119,138235,138236],{},"title网站标题",[14,138238,138239,138242],{},[359,138240,138241],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138244,68841],{},[116,138246,138247,138250],{},[119,138248,138249],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[119,138251,138252],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[161,138254,138255],{"start":42},[119,138256,138257],{},"description网站描述",[14,138259,138260],{},"简要说明我们网站主要是做什么的",[14,138262,138263,138266],{},[359,138264,138265],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138268,68841],{},[14,138270,138271],{},[25,138272,138273],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[161,138275,138276],{"start":50},[119,138277,138278],{},"keywords关键词",[14,138280,138281],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138283,68841],{},[14,138285,138286],{},[25,138287,138288],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138290,138291],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138293,138294],{},[359,138295,138296],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[161,138298,138299],{"start":58},[119,138300,138301],{},"代码总结",[18,138303,138304],{"className":127350,"code":130707,"language":127352,"meta":23,"style":23},[25,138305,138306,138310,138324,138328],{"__ignoreMap":23},[28,138307,138308],{"class":30,"line":31},[28,138309,130714],{"class":269},[28,138311,138312,138314,138316,138318,138320,138322],{"class":30,"line":42},[28,138313,1120],{"class":211},[28,138315,51662],{"class":51351},[28,138317,53537],{"class":34},[28,138319,257],{"class":211},[28,138321,130727],{"class":64},[28,138323,51358],{"class":211},[28,138325,138326],{"class":30,"line":50},[28,138327,130734],{"class":211},[28,138329,138330,138332,138334],{"class":30,"line":58},[28,138331,51836],{"class":211},[28,138333,51662],{"class":51351},[28,138335,51358],{"class":211},[149,138337,138339],{"id":138338},"_154-项目公共部分制作","15.4 项目公共部分制作",[177,138341,138343],{"id":138342},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1540,138345],{"style":126459,"src":138346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[177,138348,138350],{"id":138349},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138352,138353],{},"布局思路：",[116,138355,138356,138359,138362,138384,138417],{},[119,138357,138358],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[119,138360,138361],{},"里面包含版心的盒子",[119,138363,138364,138365],{},"版心盒子里面包含 1 号左侧盒子左浮动",[116,138366,138367,138375,138381],{},[119,138368,138369,138370,21577,138372,138374],{},"1 号盒子 里面包含一个",[25,138371,116],{},[25,138373,116],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[119,138376,138377,138378,138380],{},"里面的内容是水平排列，所以需要给",[25,138379,119],{},"设置浮动",[119,138382,138383],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[119,138385,138386,138387],{},"版心盒子里面包含 2 号右侧盒子右浮动",[116,138388,138389,138403,138408],{},[119,138390,138391,138392,21577,138394,138396,138397,138399,138400,138402],{},"2 号盒子 里面包含一个",[25,138393,116],{},[25,138395,116],{},"包裹",[25,138398,119],{},"，中间的",[25,138401,1131],{},"可以用样式去设置，也可以用字符 |",[119,138404,138405,138406,138380],{},"里面内容水平排列，给",[25,138407,119],{},[119,138409,138410,138411,138413,138414,138416],{},"找到里面所有偶数的 ",[25,138412,119],{}," 设置样式（偶数的 ",[25,138415,119],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[119,138418,138419,138420],{},"需要用到字体图标",[116,138421,138422,138428,138431,138434,138437],{},[119,138423,138424,138425],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[25,138426,138427],{},"arrow-icon",[119,138429,138430],{},"先要引入字体图片的资源",[119,138432,138433],{},"在样式里面利用 font-face 来进行声明",[119,138435,138436],{},"在伪元素的 content属性设置 图标的编码",[119,138438,138439],{},"给伪元素设置font-family属性",[14,138441,138442],{},"结构实例代码：",[18,138444,138446],{"className":126603,"code":138445,"language":126605,"meta":23,"style":23},"div::before {\n  content: \"\";\n  display: block;\n}\n",[25,138447,138448,138456,138466,138476],{"__ignoreMap":23},[28,138449,138450,138452,138454],{"class":30,"line":31},[28,138451,51662],{"class":51351},[28,138453,137604],{"class":34},[28,138455,15649],{"class":211},[28,138457,138458,138460,138462,138464],{"class":30,"line":42},[28,138459,137611],{"class":38},[28,138461,51488],{"class":211},[28,138463,7729],{"class":64},[28,138465,1370],{"class":211},[28,138467,138468,138470,138472,138474],{"class":30,"line":50},[28,138469,128219],{"class":38},[28,138471,51488],{"class":211},[28,138473,60920],{"class":38},[28,138475,1370],{"class":211},[28,138477,138478],{"class":30,"line":58},[28,138479,1643],{"class":211},[14,138481,138482],{},"样式实例代码：",[18,138484,138485],{"className":126603,"code":138445,"language":126605,"meta":23,"style":23},[25,138486,138487,138495,138505,138515],{"__ignoreMap":23},[28,138488,138489,138491,138493],{"class":30,"line":31},[28,138490,51662],{"class":51351},[28,138492,137604],{"class":34},[28,138494,15649],{"class":211},[28,138496,138497,138499,138501,138503],{"class":30,"line":42},[28,138498,137611],{"class":38},[28,138500,51488],{"class":211},[28,138502,7729],{"class":64},[28,138504,1370],{"class":211},[28,138506,138507,138509,138511,138513],{"class":30,"line":50},[28,138508,128219],{"class":38},[28,138510,51488],{"class":211},[28,138512,60920],{"class":38},[28,138514,1370],{"class":211},[28,138516,138517],{"class":30,"line":58},[28,138518,1643],{"class":211},[177,138520,138522],{"id":138521},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[116,138524,138525],{},[119,138526,138527],{},"header 盒子必须要有高度",[14,138529,138530,138531,138533,138534],{},"1 号盒子是 ",[25,138532,131615],{}," 标志定位，在正常开发过程中， ",[359,138535,138536,138537,138540],{},"logo的布局其实是有讲究的，需要进行 ",[25,138538,138539],{},"logoSEO","的优化 （★★★）",[116,138542,138543,138551,138559,138586],{},[119,138544,138545,138547,138548,138550],{},[25,138546,131615],{}," 里面首先放一个 ",[25,138549,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[119,138552,138553,138555,138556,138558],{},[25,138554,10],{}," 里面再放一个链接，可以返回首页的，把 ",[25,138557,131615],{}," 的背景图片给链接即可",[119,138560,138561,138562],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[116,138563,138564,138579],{},[119,138565,138566,138567,138570,138571,138574,138575,138578],{},"方法1：",[25,138568,138569],{},"text-indent"," 移到盒子外面（",[25,138572,138573],{},"text-indent: -9999px",") ，然后 ",[25,138576,138577],{},"overflow:hidden"," ，淘宝的做法",[119,138580,138581,138582,138585],{},"方法2：直接给 ",[25,138583,138584],{},"font-size: 0;"," 就看不到文字了，京东的做法",[119,138587,138588,138589,138591,138592,138594],{},"最后给链接一个 ",[25,138590,51458],{}," 属性，这样鼠标放到 ",[25,138593,131615],{}," 上就可以看到提示文字了",[14,138596,138442],{},[18,138598,138599],{"className":127350,"code":131836,"language":127352,"meta":23,"style":23},[25,138600,138601],{"__ignoreMap":23},[28,138602,138603,138605,138607,138609,138611,138613,138615,138617,138619,138621,138623],{"class":30,"line":31},[28,138604,1120],{"class":211},[28,138606,448],{"class":51351},[28,138608,61108],{"class":34},[28,138610,257],{"class":211},[28,138612,131851],{"class":64},[28,138614,131854],{"class":34},[28,138616,257],{"class":211},[28,138618,131859],{"class":64},[28,138620,131862],{"class":211},[28,138622,448],{"class":51351},[28,138624,51358],{"class":211},[14,138626,138482],{},[18,138628,138629],{"className":127350,"code":131836,"language":127352,"meta":23,"style":23},[25,138630,138631],{"__ignoreMap":23},[28,138632,138633,138635,138637,138639,138641,138643,138645,138647,138649,138651,138653],{"class":30,"line":31},[28,138634,1120],{"class":211},[28,138636,448],{"class":51351},[28,138638,61108],{"class":34},[28,138640,257],{"class":211},[28,138642,131851],{"class":64},[28,138644,131854],{"class":34},[28,138646,257],{"class":211},[28,138648,131859],{"class":64},[28,138650,131862],{"class":211},[28,138652,448],{"class":51351},[28,138654,51358],{"class":211},[14,138656,138657,138658,138660],{},"2 号盒子是 ",[25,138659,131628],{}," 搜索模块定位",[116,138662,138663,138666,138669,138672],{},[119,138664,138665],{},"search盒子利用定位的方式放在对应的位置",[119,138667,138668],{},"search盒子设置绝对定位，header盒子设置相对定位",[119,138670,138671],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[119,138673,138674],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138676,138442],{},[18,138678,138679],{"className":126603,"code":131923,"language":126605,"meta":23,"style":23},[25,138680,138681,138703,138707,138717],{"__ignoreMap":23},[28,138682,138683,138685,138687,138689,138691,138693,138695,138697,138699,138701],{"class":30,"line":31},[28,138684,51662],{"class":51351},[28,138686,12512],{"class":211},[28,138688,14],{"class":51351},[28,138690,12512],{"class":211},[28,138692,10],{"class":51351},[28,138694,12512],{"class":211},[28,138696,116],{"class":51351},[28,138698,12512],{"class":211},[28,138700,119],{"class":51351},[28,138702,15649],{"class":211},[28,138704,138705],{"class":30,"line":42},[28,138706,131952],{"class":269},[28,138708,138709,138711,138713,138715],{"class":30,"line":50},[28,138710,128219],{"class":38},[28,138712,51488],{"class":211},[28,138714,60920],{"class":38},[28,138716,1370],{"class":211},[28,138718,138719],{"class":30,"line":58},[28,138720,1643],{"class":211},[14,138722,138482],{},[18,138724,138725],{"className":126603,"code":131923,"language":126605,"meta":23,"style":23},[25,138726,138727,138749,138753,138763],{"__ignoreMap":23},[28,138728,138729,138731,138733,138735,138737,138739,138741,138743,138745,138747],{"class":30,"line":31},[28,138730,51662],{"class":51351},[28,138732,12512],{"class":211},[28,138734,14],{"class":51351},[28,138736,12512],{"class":211},[28,138738,10],{"class":51351},[28,138740,12512],{"class":211},[28,138742,116],{"class":51351},[28,138744,12512],{"class":211},[28,138746,119],{"class":51351},[28,138748,15649],{"class":211},[28,138750,138751],{"class":30,"line":42},[28,138752,131952],{"class":269},[28,138754,138755,138757,138759,138761],{"class":30,"line":50},[28,138756,128219],{"class":38},[28,138758,51488],{"class":211},[28,138760,60920],{"class":38},[28,138762,1370],{"class":211},[28,138764,138765],{"class":30,"line":58},[28,138766,1643],{"class":211},[14,138768,138769],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138771,138772,138773,138776],{},"3 号盒子是 ",[25,138774,138775],{},"hotwords"," 热词模块定位",[116,138778,138779,138782,138785],{},[119,138780,138781],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[119,138783,138784],{},"给里面所有的a标签设置 左右10px的外边距",[119,138786,138787],{},"给第一个a标签设置文字变红色（#c81623）",[14,138789,138442],{},[18,138791,138793],{"className":126603,"code":138792,"language":126605,"meta":23,"style":23},"div {\n  margin: 0 auto;\n}\n",[25,138794,138795,138801,138813],{"__ignoreMap":23},[28,138796,138797,138799],{"class":30,"line":31},[28,138798,51662],{"class":51351},[28,138800,15649],{"class":211},[28,138802,138803,138805,138807,138809,138811],{"class":30,"line":42},[28,138804,70521],{"class":38},[28,138806,51488],{"class":211},[28,138808,401],{"class":38},[28,138810,51607],{"class":38},[28,138812,1370],{"class":211},[28,138814,138815],{"class":30,"line":50},[28,138816,1643],{"class":211},[14,138818,138482],{},[18,138820,138821],{"className":126603,"code":138792,"language":126605,"meta":23,"style":23},[25,138822,138823,138829,138841],{"__ignoreMap":23},[28,138824,138825,138827],{"class":30,"line":31},[28,138826,51662],{"class":51351},[28,138828,15649],{"class":211},[28,138830,138831,138833,138835,138837,138839],{"class":30,"line":42},[28,138832,70521],{"class":38},[28,138834,51488],{"class":211},[28,138836,401],{"class":38},[28,138838,51607],{"class":38},[28,138840,1370],{"class":211},[28,138842,138843],{"class":30,"line":50},[28,138844,1643],{"class":211},[14,138846,138847,138848,138851],{},"4 号盒子是 ",[25,138849,138850],{},"shopcar"," 购物车模块",[116,138853,138854,138859,138862,138865],{},[119,138855,123386,138856,138858],{},[25,138857,138850],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[119,138860,138861],{},"count 统计部分用绝对定位做",[119,138863,138864],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[119,138866,138867],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138869,138442],{},[18,138871,138872],{"className":126603,"code":132035,"language":126605,"meta":23,"style":23},[25,138873,138874,138878,138892,138896,138910,138914,138928,138932,138946,138950],{"__ignoreMap":23},[28,138875,138876],{"class":30,"line":31},[28,138877,132042],{"class":269},[28,138879,138880,138882,138884,138886,138888,138890],{"class":30,"line":42},[28,138881,132047],{"class":34},[28,138883,79858],{"class":211},[28,138885,128963],{"class":38},[28,138887,51488],{"class":211},[28,138889,132056],{"class":38},[28,138891,129533],{"class":211},[28,138893,138894],{"class":30,"line":50},[28,138895,132063],{"class":269},[28,138897,138898,138900,138902,138904,138906,138908],{"class":30,"line":58},[28,138899,132068],{"class":34},[28,138901,79858],{"class":211},[28,138903,128963],{"class":38},[28,138905,51488],{"class":211},[28,138907,54815],{"class":38},[28,138909,129533],{"class":211},[28,138911,138912],{"class":30,"line":70},[28,138913,132083],{"class":269},[28,138915,138916,138918,138920,138922,138924,138926],{"class":30,"line":78},[28,138917,132088],{"class":34},[28,138919,79858],{"class":211},[28,138921,128963],{"class":38},[28,138923,51488],{"class":211},[28,138925,54882],{"class":38},[28,138927,129533],{"class":211},[28,138929,138930],{"class":30,"line":86},[28,138931,132103],{"class":269},[28,138933,138934,138936,138938,138940,138942,138944],{"class":30,"line":97},[28,138935,132108],{"class":34},[28,138937,79858],{"class":211},[28,138939,128963],{"class":38},[28,138941,51488],{"class":211},[28,138943,86284],{"class":38},[28,138945,129533],{"class":211},[28,138947,138948],{"class":30,"line":108},[28,138949,132123],{"class":269},[28,138951,138952,138954,138956,138958,138960,138962],{"class":30,"line":1407},[28,138953,132128],{"class":34},[28,138955,79858],{"class":211},[28,138957,128963],{"class":38},[28,138959,51488],{"class":211},[28,138961,132137],{"class":38},[28,138963,129533],{"class":211},[14,138965,138482],{},[18,138967,138968],{"className":126603,"code":132035,"language":126605,"meta":23,"style":23},[25,138969,138970,138974,138988,138992,139006,139010,139024,139028,139042,139046],{"__ignoreMap":23},[28,138971,138972],{"class":30,"line":31},[28,138973,132042],{"class":269},[28,138975,138976,138978,138980,138982,138984,138986],{"class":30,"line":42},[28,138977,132047],{"class":34},[28,138979,79858],{"class":211},[28,138981,128963],{"class":38},[28,138983,51488],{"class":211},[28,138985,132056],{"class":38},[28,138987,129533],{"class":211},[28,138989,138990],{"class":30,"line":50},[28,138991,132063],{"class":269},[28,138993,138994,138996,138998,139000,139002,139004],{"class":30,"line":58},[28,138995,132068],{"class":34},[28,138997,79858],{"class":211},[28,138999,128963],{"class":38},[28,139001,51488],{"class":211},[28,139003,54815],{"class":38},[28,139005,129533],{"class":211},[28,139007,139008],{"class":30,"line":70},[28,139009,132083],{"class":269},[28,139011,139012,139014,139016,139018,139020,139022],{"class":30,"line":78},[28,139013,132088],{"class":34},[28,139015,79858],{"class":211},[28,139017,128963],{"class":38},[28,139019,51488],{"class":211},[28,139021,54882],{"class":38},[28,139023,129533],{"class":211},[28,139025,139026],{"class":30,"line":86},[28,139027,132103],{"class":269},[28,139029,139030,139032,139034,139036,139038,139040],{"class":30,"line":97},[28,139031,132108],{"class":34},[28,139033,79858],{"class":211},[28,139035,128963],{"class":38},[28,139037,51488],{"class":211},[28,139039,86284],{"class":38},[28,139041,129533],{"class":211},[28,139043,139044],{"class":30,"line":108},[28,139045,132123],{"class":269},[28,139047,139048,139050,139052,139054,139056,139058],{"class":30,"line":1407},[28,139049,132128],{"class":34},[28,139051,79858],{"class":211},[28,139053,128963],{"class":38},[28,139055,51488],{"class":211},[28,139057,132137],{"class":38},[28,139059,129533],{"class":211},[177,139061,139063,139064,139066],{"id":139062},"_1544-nav导航模块制作","15.4.4 ",[25,139065,53764],{},"导航模块制作",[1540,139068],{"style":126459,"src":139069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139071,139072,139074],{},[25,139073,53764],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139076,139077,139078],{},"1 号盒子左侧浮动，",[25,139079,139080],{},"dropdown",[116,139082,139083,139093,139101,139107,139115,139125,139133,139144],{},[119,139084,139085,139086,101069,139089,139092],{},"1号盒子有讲究，根据相关性 里面包含 ",[25,139087,139088],{},".dt",[25,139090,139091],{},".dd"," 两个盒子",[119,139094,139095,139097,139098,139100],{},[25,139096,139088],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[25,139099,139091],{}," 挤到下面去了",[119,139102,139103,139104,139106],{},"给 ",[25,139105,139091],{}," 盒子设置宽度 和 高度，以及背景颜色",[119,139108,139103,139109,139111,139112,120288],{},[25,139110,139091],{}," 盒子里面定义 无序列表 （",[25,139113,139114],{},"ul > li > a",[119,139116,139117,139118,139120,139121,139124],{},"每个 ",[25,139119,119],{}," 都有一个高度（",[25,139122,139123],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[119,139126,139103,139127,139129,139130,120288],{},[25,139128,119],{}," 里面的a设置文字大小（",[25,139131,139132],{},"14px",[119,139134,139103,139135,139137,139138,139140,139141,139143],{},[25,139136,119],{}," 设置 ",[25,139139,127764],{},"，当鼠标移入的时候，让",[25,139142,119],{},"的背景变成白色，让里面的文字变成红色",[119,139145,139146,139148,139149,139151,139152,139154],{},[25,139147,119],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[25,139150,119],{},"的右侧，那么给",[25,139153,119],{},"设置相对定位",[14,139156,139157],{},"一定要注意相关性",[14,139159,138442],{},[18,139161,139162],{"className":126603,"code":138445,"language":126605,"meta":23,"style":23},[25,139163,139164,139172,139182,139192],{"__ignoreMap":23},[28,139165,139166,139168,139170],{"class":30,"line":31},[28,139167,51662],{"class":51351},[28,139169,137604],{"class":34},[28,139171,15649],{"class":211},[28,139173,139174,139176,139178,139180],{"class":30,"line":42},[28,139175,137611],{"class":38},[28,139177,51488],{"class":211},[28,139179,7729],{"class":64},[28,139181,1370],{"class":211},[28,139183,139184,139186,139188,139190],{"class":30,"line":50},[28,139185,128219],{"class":38},[28,139187,51488],{"class":211},[28,139189,60920],{"class":38},[28,139191,1370],{"class":211},[28,139193,139194],{"class":30,"line":58},[28,139195,1643],{"class":211},[14,139197,138482],{},[18,139199,139200],{"className":126603,"code":138445,"language":126605,"meta":23,"style":23},[25,139201,139202,139210,139220,139230],{"__ignoreMap":23},[28,139203,139204,139206,139208],{"class":30,"line":31},[28,139205,51662],{"class":51351},[28,139207,137604],{"class":34},[28,139209,15649],{"class":211},[28,139211,139212,139214,139216,139218],{"class":30,"line":42},[28,139213,137611],{"class":38},[28,139215,51488],{"class":211},[28,139217,7729],{"class":64},[28,139219,1370],{"class":211},[28,139221,139222,139224,139226,139228],{"class":30,"line":50},[28,139223,128219],{"class":38},[28,139225,51488],{"class":211},[28,139227,60920],{"class":38},[28,139229,1370],{"class":211},[28,139231,139232],{"class":30,"line":58},[28,139233,1643],{"class":211},[14,139235,139236],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139238,139239,139240,139243],{},"2 号盒子左侧浮动，",[25,139241,139242],{},"navitems"," 导航栏组",[116,139245,139246,139251,139260],{},[119,139247,139248,139249],{},"里面结构是 ",[25,139250,139114],{},[119,139252,139253,139254,139256,139257,139259],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[25,139255,448],{},"左右的",[25,139258,30934],{},"把两侧撑开",[119,139261,139262],{},"让文字垂直居中（行高等于高度）",[1540,139264],{"style":126459,"src":139265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139267,139268],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139270,138442],{},[18,139272,139274],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},".box {\n  float: left;\n}\n",[25,139275,139276,139282,139292],{"__ignoreMap":23},[28,139277,139278,139280],{"class":30,"line":31},[28,139279,130451],{"class":34},[28,139281,15649],{"class":211},[28,139283,139284,139286,139288,139290],{"class":30,"line":42},[28,139285,131083],{"class":38},[28,139287,51488],{"class":211},[28,139289,23813],{"class":38},[28,139291,1370],{"class":211},[28,139293,139294],{"class":30,"line":50},[28,139295,1643],{"class":211},[14,139297,138482],{},[18,139299,139300],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,139301,139302,139308,139318],{"__ignoreMap":23},[28,139303,139304,139306],{"class":30,"line":31},[28,139305,130451],{"class":34},[28,139307,15649],{"class":211},[28,139309,139310,139312,139314,139316],{"class":30,"line":42},[28,139311,131083],{"class":38},[28,139313,51488],{"class":211},[28,139315,23813],{"class":38},[28,139317,1370],{"class":211},[28,139319,139320],{"class":30,"line":50},[28,139321,1643],{"class":211},[14,139323,139324],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1540,139326],{"style":126459,"src":139327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[18,139329,139330],{"className":126603,"code":130760,"language":126605,"meta":23,"style":23},[25,139331,139332,139338,139354],{"__ignoreMap":23},[28,139333,139334,139336],{"class":30,"line":31},[28,139335,51662],{"class":51351},[28,139337,15649],{"class":211},[28,139339,139340,139342,139344,139346,139348,139350,139352],{"class":30,"line":42},[28,139341,70947],{"class":38},[28,139343,51488],{"class":211},[28,139345,427],{"class":38},[28,139347,51543],{"class":207},[28,139349,51572],{"class":38},[28,139351,129995],{"class":38},[28,139353,1370],{"class":211},[28,139355,139356],{"class":30,"line":50},[28,139357,1643],{"class":211},[177,139359,139361],{"id":139360},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1540,139363],{"style":126459,"src":139364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[116,139366,139367,139372,139377],{},[119,139368,139369,139371],{},[25,139370,131806],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[119,139373,139374,139376],{},[25,139375,131806],{}," 里面有一个大的版心",[119,139378,139379,139380,139383,139384],{},"版心里面包含 1 号盒子，",[25,139381,139382],{},"mod_service"," 是服务模块，mod 是模块的意思",[116,139385,139386,139391,139404,139420,139425],{},[119,139387,139103,139388,139390],{},[25,139389,139382],{}," 设置高度（80px）和下边框",[119,139392,139393,139394,139397,139398,139400,139401,139403],{},"在里面定义 ",[25,139395,139396],{},"ul > li"," ,每个",[25,139399,119],{}," 宽度是300px 高度是 50px，给每个",[25,139402,119],{},"设置35px的左内边距",[119,139405,139406,139407,139409,139410,139412,139413,139415,139416,18487,139418,120288],{},"在每个",[25,139408,119],{},"里面，放一个 ",[25,139411,22987],{},"（里面放图标），一个",[25,139414,51662],{},"（里面放",[25,139417,51662],{},[25,139419,14],{},[119,139421,139103,139422,139424],{},[25,139423,22987],{},"设置浮动，让h5与这个div左右排列",[119,139426,139427],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139429,138442],{},[18,139431,139433],{"className":126603,"code":139432,"language":126605,"meta":23,"style":23},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[25,139434,139435,139441,139453,139465,139492],{"__ignoreMap":23},[28,139436,139437,139439],{"class":30,"line":31},[28,139438,134360],{"class":34},[28,139440,15649],{"class":211},[28,139442,139443,139445,139447,139449,139451],{"class":30,"line":42},[28,139444,70619],{"class":38},[28,139446,51488],{"class":211},[28,139448,910],{"class":38},[28,139450,51543],{"class":207},[28,139452,1370],{"class":211},[28,139454,139455,139457,139459,139461,139463],{"class":30,"line":50},[28,139456,70839],{"class":38},[28,139458,51488],{"class":211},[28,139460,910],{"class":38},[28,139462,51543],{"class":207},[28,139464,1370],{"class":211},[28,139466,139467,139469,139471,139473,139475,139477,139479,139481,139484,139486,139488,139490],{"class":30,"line":58},[28,139468,70662],{"class":38},[28,139470,51488],{"class":211},[28,139472,61777],{"class":38},[28,139474,212],{"class":211},[28,139476,134399],{"class":5293},[28,139478,13791],{"class":211},[28,139480,61787],{"class":38},[28,139482,139483],{"class":38}," -10",[28,139485,51543],{"class":207},[28,139487,134418],{"class":38},[28,139489,51543],{"class":207},[28,139491,1370],{"class":211},[28,139493,139494],{"class":30,"line":70},[28,139495,1643],{"class":211},[14,139497,138482],{},[18,139499,139500],{"className":126603,"code":139432,"language":126605,"meta":23,"style":23},[25,139501,139502,139508,139520,139532,139558],{"__ignoreMap":23},[28,139503,139504,139506],{"class":30,"line":31},[28,139505,134360],{"class":34},[28,139507,15649],{"class":211},[28,139509,139510,139512,139514,139516,139518],{"class":30,"line":42},[28,139511,70619],{"class":38},[28,139513,51488],{"class":211},[28,139515,910],{"class":38},[28,139517,51543],{"class":207},[28,139519,1370],{"class":211},[28,139521,139522,139524,139526,139528,139530],{"class":30,"line":50},[28,139523,70839],{"class":38},[28,139525,51488],{"class":211},[28,139527,910],{"class":38},[28,139529,51543],{"class":207},[28,139531,1370],{"class":211},[28,139533,139534,139536,139538,139540,139542,139544,139546,139548,139550,139552,139554,139556],{"class":30,"line":58},[28,139535,70662],{"class":38},[28,139537,51488],{"class":211},[28,139539,61777],{"class":38},[28,139541,212],{"class":211},[28,139543,134399],{"class":5293},[28,139545,13791],{"class":211},[28,139547,61787],{"class":38},[28,139549,139483],{"class":38},[28,139551,51543],{"class":207},[28,139553,134418],{"class":38},[28,139555,51543],{"class":207},[28,139557,1370],{"class":211},[28,139559,139560],{"class":30,"line":70},[28,139561,1643],{"class":211},[14,139563,139564],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[116,139566,139567,139570,139576,139582,139594],{},[119,139568,139569],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[119,139571,139572,139573,120288],{},"里面的布局利用 自定义列表来实现（",[25,139574,139575],{},"dl > dt + dd",[119,139577,139103,139578,139581],{},[25,139579,139580],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[119,139583,139103,139584,139587,139588,18487,139590,139593],{},[25,139585,139586],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[25,139589,139586],{},[25,139591,139592],{},"dd","之间有些距离",[119,139595,139596],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139598,138442],{},[18,139600,139601],{"className":126603,"code":138792,"language":126605,"meta":23,"style":23},[25,139602,139603,139609,139621],{"__ignoreMap":23},[28,139604,139605,139607],{"class":30,"line":31},[28,139606,51662],{"class":51351},[28,139608,15649],{"class":211},[28,139610,139611,139613,139615,139617,139619],{"class":30,"line":42},[28,139612,70521],{"class":38},[28,139614,51488],{"class":211},[28,139616,401],{"class":38},[28,139618,51607],{"class":38},[28,139620,1370],{"class":211},[28,139622,139623],{"class":30,"line":50},[28,139624,1643],{"class":211},[14,139626,138482],{},[18,139628,139629],{"className":126603,"code":138792,"language":126605,"meta":23,"style":23},[25,139630,139631,139637,139649],{"__ignoreMap":23},[28,139632,139633,139635],{"class":30,"line":31},[28,139634,51662],{"class":51351},[28,139636,15649],{"class":211},[28,139638,139639,139641,139643,139645,139647],{"class":30,"line":42},[28,139640,70521],{"class":38},[28,139642,51488],{"class":211},[28,139644,401],{"class":38},[28,139646,51607],{"class":38},[28,139648,1370],{"class":211},[28,139650,139651],{"class":30,"line":50},[28,139652,1643],{"class":211},[14,139654,139655],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[116,139657,139658,139667,139670,139681],{},[119,139659,139660,139661,139663,139664,139666],{},"分为上下两块，上面是 ",[25,139662,131823],{}," 友情链接，下面是 ",[25,139665,131816],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[119,139668,139669],{},"把内容分别复制到相应模块中",[119,139671,139103,139672,139674,139675,139677,139678,139680],{},[25,139673,131823],{}," 设置 15px 的下外边距，给",[25,139676,131823],{}," 里面 的 ",[25,139679,448],{}," 标签设置 左右 3px 的外边距",[119,139682,139683,139684,139686],{},"给",[25,139685,131816],{}," 设置 20px 的行高",[14,139688,138442],{},[18,139690,139691],{"className":126603,"code":138792,"language":126605,"meta":23,"style":23},[25,139692,139693,139699,139711],{"__ignoreMap":23},[28,139694,139695,139697],{"class":30,"line":31},[28,139696,51662],{"class":51351},[28,139698,15649],{"class":211},[28,139700,139701,139703,139705,139707,139709],{"class":30,"line":42},[28,139702,70521],{"class":38},[28,139704,51488],{"class":211},[28,139706,401],{"class":38},[28,139708,51607],{"class":38},[28,139710,1370],{"class":211},[28,139712,139713],{"class":30,"line":50},[28,139714,1643],{"class":211},[14,139716,138482],{},[18,139718,139719],{"className":126603,"code":138792,"language":126605,"meta":23,"style":23},[25,139720,139721,139727,139739],{"__ignoreMap":23},[28,139722,139723,139725],{"class":30,"line":31},[28,139724,51662],{"class":51351},[28,139726,15649],{"class":211},[28,139728,139729,139731,139733,139735,139737],{"class":30,"line":42},[28,139730,70521],{"class":38},[28,139732,51488],{"class":211},[28,139734,401],{"class":38},[28,139736,51607],{"class":38},[28,139738,1370],{"class":211},[28,139740,139741],{"class":30,"line":50},[28,139742,1643],{"class":211},[14,139744,139745],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[126,139747,139748],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":139750},[139751,139752,139753,139760],{"id":138031,"depth":42,"text":138032},{"id":138050,"depth":42,"text":138051},{"id":138077,"depth":42,"text":138078,"children":139754},[139755,139756,139757,139758,139759],{"id":138081,"depth":50,"text":138082},{"id":138094,"depth":50,"text":138095},{"id":138118,"depth":50,"text":138119},{"id":138140,"depth":50,"text":138141},{"id":138212,"depth":50,"text":138213},{"id":138338,"depth":42,"text":138339,"children":139761},[139762,139763,139764,139765,139767],{"id":138342,"depth":50,"text":138343},{"id":138349,"depth":50,"text":138350},{"id":138521,"depth":50,"text":138522},{"id":139062,"depth":50,"text":139766},"15.4.4 nav导航模块制作",{"id":139360,"depth":50,"text":139361},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138023,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139774,"title":139775,"body":139776,"description":131,"extension":132,"meta":142178,"navigation":134,"path":142179,"seo":142180,"stem":142181,"__hash__":142182},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139777,"toc":142155},[139778,139781,139785,139789,139801,139804,139807,139810,139821,139823,139847,139849,139873,139878,139881,139883,139919,139921,139957,139960,139965,139968,139971,139974,140004,140011,140014,140024,140026,140060,140063,140097,140103,140120,140122,140158,140160,140196,140201,140226,140228,140254,140256,140280,140287,140290,140354,140356,140398,140400,140440,140447,140452,140454,140484,140486,140516,140520,140523,140530,140542,140544,140570,140572,140596,140599,140601,140625,140631,140641,140643,140673,140675,140705,140712,140753,140755,140791,140793,140829,140833,140836,140839,140842,140848,140853,140856,140879,140882,140906,140909,140933,140938,140941,140944,140947,140950,140953,141027,141029,141059,141061,141091,141094,141097,141129,141133,141137,141151,141160,141163,141168,141170,141264,141266,141360,141383,141385,141409,141411,141435,141442,141445,141455,141457,141481,141486,141494,141496,141526,141531,141571,141573,141599,141601,141627,141631,141634,141639,141642,141646,141654,141661,141669,141671,141701,141703,141733,141741,141744,141747,141749,141779,141781,141811,141814,141819,141821,141845,141847,141871,141874,141959,141961,141985,141987,142011,142015,142017,142041,142043,142077,142081,142095,142098,142103,142106,142111,142114,142144,142152],[10,139779,139775],{"id":139780},"_16-品优购项目下篇-主体与页面开发",[149,139782,139784],{"id":139783},"_161-项目主体模块制作","16.1 项目主体模块制作",[177,139786,139788],{"id":139787},"_1611-首页制作","16.1.1 首页制作",[14,139790,139791,139793,139794,139796,139797,139800],{},[359,139792,102109],{}," 主体模块是 ",[359,139795,74109],{}," 里面专有的，注意需要新的样式文件 ",[359,139798,139799],{},"index.css，"," 就不要写在common.css中了",[1540,139802],{"style":126459,"src":139803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1540,139805],{"style":126459,"src":139806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139808,139809],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[116,139811,139812,139815,139818],{},[119,139813,139814],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[119,139816,139817],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[119,139819,139820],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139822,138442],{},[18,139824,139825],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,139826,139827,139833,139843],{"__ignoreMap":23},[28,139828,139829,139831],{"class":30,"line":31},[28,139830,130451],{"class":34},[28,139832,15649],{"class":211},[28,139834,139835,139837,139839,139841],{"class":30,"line":42},[28,139836,131083],{"class":38},[28,139838,51488],{"class":211},[28,139840,23813],{"class":38},[28,139842,1370],{"class":211},[28,139844,139845],{"class":30,"line":50},[28,139846,1643],{"class":211},[14,139848,138482],{},[18,139850,139851],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,139852,139853,139859,139869],{"__ignoreMap":23},[28,139854,139855,139857],{"class":30,"line":31},[28,139856,130451],{"class":34},[28,139858,15649],{"class":211},[28,139860,139861,139863,139865,139867],{"class":30,"line":42},[28,139862,131083],{"class":38},[28,139864,51488],{"class":211},[28,139866,23813],{"class":38},[28,139868,1370],{"class":211},[28,139870,139871],{"class":30,"line":50},[28,139872,1643],{"class":211},[161,139874,139875],{},[119,139876,139877],{},"左侧focus模块制作",[1540,139879],{"style":126459,"src":139880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139882,138442],{},[18,139884,139885],{"className":126603,"code":127926,"language":126605,"meta":23,"style":23},[25,139886,139887,139895,139905,139915],{"__ignoreMap":23},[28,139888,139889,139891,139893],{"class":30,"line":31},[28,139890,53872],{"class":51351},[28,139892,61951],{"class":34},[28,139894,15649],{"class":211},[28,139896,139897,139899,139901,139903],{"class":30,"line":42},[28,139898,127941],{"class":38},[28,139900,51488],{"class":211},[28,139902,54940],{"class":38},[28,139904,1370],{"class":211},[28,139906,139907,139909,139911,139913],{"class":30,"line":50},[28,139908,70849],{"class":38},[28,139910,51488],{"class":211},[28,139912,54788],{"class":38},[28,139914,1370],{"class":211},[28,139916,139917],{"class":30,"line":58},[28,139918,1643],{"class":211},[14,139920,138482],{},[18,139922,139923],{"className":126603,"code":127926,"language":126605,"meta":23,"style":23},[25,139924,139925,139933,139943,139953],{"__ignoreMap":23},[28,139926,139927,139929,139931],{"class":30,"line":31},[28,139928,53872],{"class":51351},[28,139930,61951],{"class":34},[28,139932,15649],{"class":211},[28,139934,139935,139937,139939,139941],{"class":30,"line":42},[28,139936,127941],{"class":38},[28,139938,51488],{"class":211},[28,139940,54940],{"class":38},[28,139942,1370],{"class":211},[28,139944,139945,139947,139949,139951],{"class":30,"line":50},[28,139946,70849],{"class":38},[28,139948,51488],{"class":211},[28,139950,54788],{"class":38},[28,139952,1370],{"class":211},[28,139954,139955],{"class":30,"line":58},[28,139956,1643],{"class":211},[14,139958,139959],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[161,139961,139962],{"start":42},[119,139963,139964],{},"右侧newsflash模块制作",[1540,139966],{"style":126459,"src":139967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139969,139970],{},"右侧的模块 分为上中下三个盒子",[14,139972,139973],{},"结构代码：",[18,139975,139976],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,139977,139978],{"__ignoreMap":23},[28,139979,139980,139982,139984,139986,139988,139990,139992,139994,139996,139998,140000,140002],{"class":30,"line":31},[28,139981,1120],{"class":211},[28,139983,1540],{"class":51351},[28,139985,55290],{"class":34},[28,139987,257],{"class":211},[28,139989,134120],{"class":64},[28,139991,55298],{"class":34},[28,139993,257],{"class":211},[28,139995,134127],{"class":64},[28,139997,134130],{"class":34},[28,139999,257],{"class":211},[28,140001,134135],{"class":64},[28,140003,51358],{"class":211},[14,140005,140006,140007,140010],{},"1 号盒子为 ",[25,140008,140009],{},"news"," 新闻模块 高度为 165px",[1540,140012],{"style":126459,"src":140013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,140015,140016,140017,140020,140021],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[25,140018,140019],{},"news-hd","，下面是 ",[25,140022,140023],{},"news-bd",[14,140025,139973],{},[18,140027,140028],{"className":127350,"code":130707,"language":127352,"meta":23,"style":23},[25,140029,140030,140034,140048,140052],{"__ignoreMap":23},[28,140031,140032],{"class":30,"line":31},[28,140033,130714],{"class":269},[28,140035,140036,140038,140040,140042,140044,140046],{"class":30,"line":42},[28,140037,1120],{"class":211},[28,140039,51662],{"class":51351},[28,140041,53537],{"class":34},[28,140043,257],{"class":211},[28,140045,130727],{"class":64},[28,140047,51358],{"class":211},[28,140049,140050],{"class":30,"line":50},[28,140051,130734],{"class":211},[28,140053,140054,140056,140058],{"class":30,"line":58},[28,140055,51836],{"class":211},[28,140057,51662],{"class":51351},[28,140059,51358],{"class":211},[14,140061,140062],{},"样式代码：",[18,140064,140065],{"className":127350,"code":130707,"language":127352,"meta":23,"style":23},[25,140066,140067,140071,140085,140089],{"__ignoreMap":23},[28,140068,140069],{"class":30,"line":31},[28,140070,130714],{"class":269},[28,140072,140073,140075,140077,140079,140081,140083],{"class":30,"line":42},[28,140074,1120],{"class":211},[28,140076,51662],{"class":51351},[28,140078,53537],{"class":34},[28,140080,257],{"class":211},[28,140082,130727],{"class":64},[28,140084,51358],{"class":211},[28,140086,140087],{"class":30,"line":50},[28,140088,130734],{"class":211},[28,140090,140091,140093,140095],{"class":30,"line":58},[28,140092,51836],{"class":211},[28,140094,51662],{"class":51351},[28,140096,51358],{"class":211},[14,140098,140099,140100,140102],{},"上面是",[25,140101,140019],{},"，设置高度是 33px，设置下边框",[116,140104,140105,140111],{},[119,140106,140107,140108,140110],{},"里面放一个",[25,140109,22987],{}," 标题",[119,140112,140113,140114,140116,140117,140119],{},"放一个a",[25,140115,102744],{},"，内容是 更多，然后让 ",[25,140118,448],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140121,139973],{},[18,140123,140124],{"className":126603,"code":138445,"language":126605,"meta":23,"style":23},[25,140125,140126,140134,140144,140154],{"__ignoreMap":23},[28,140127,140128,140130,140132],{"class":30,"line":31},[28,140129,51662],{"class":51351},[28,140131,137604],{"class":34},[28,140133,15649],{"class":211},[28,140135,140136,140138,140140,140142],{"class":30,"line":42},[28,140137,137611],{"class":38},[28,140139,51488],{"class":211},[28,140141,7729],{"class":64},[28,140143,1370],{"class":211},[28,140145,140146,140148,140150,140152],{"class":30,"line":50},[28,140147,128219],{"class":38},[28,140149,51488],{"class":211},[28,140151,60920],{"class":38},[28,140153,1370],{"class":211},[28,140155,140156],{"class":30,"line":58},[28,140157,1643],{"class":211},[14,140159,140062],{},[18,140161,140162],{"className":126603,"code":138445,"language":126605,"meta":23,"style":23},[25,140163,140164,140172,140182,140192],{"__ignoreMap":23},[28,140165,140166,140168,140170],{"class":30,"line":31},[28,140167,51662],{"class":51351},[28,140169,137604],{"class":34},[28,140171,15649],{"class":211},[28,140173,140174,140176,140178,140180],{"class":30,"line":42},[28,140175,137611],{"class":38},[28,140177,51488],{"class":211},[28,140179,7729],{"class":64},[28,140181,1370],{"class":211},[28,140183,140184,140186,140188,140190],{"class":30,"line":50},[28,140185,128219],{"class":38},[28,140187,51488],{"class":211},[28,140189,60920],{"class":38},[28,140191,1370],{"class":211},[28,140193,140194],{"class":30,"line":58},[28,140195,1643],{"class":211},[14,140197,140198,140199],{},"下面是",[25,140200,140023],{},[116,140202,140203,140211],{},[119,140204,140205,140206,101069,140208,140210],{},"里面包含 ",[25,140207,116],{},[25,140209,119],{}," 还有链接",[119,140212,139683,140213,140215,140216,140218,140219,140222,140223],{},[25,140214,119],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[25,140217,131269],{}," 2.设置 ",[25,140220,140221],{},"white-space: nowrap;"," 3. 设置 ",[25,140224,140225],{},"text-overflow: ellipsis;",[14,140227,139973],{},[18,140229,140231],{"className":126603,"code":140230,"language":126605,"meta":23,"style":23},"div {\n  overflow: hidden;\n}\n",[25,140232,140233,140239,140250],{"__ignoreMap":23},[28,140234,140235,140237],{"class":30,"line":31},[28,140236,51662],{"class":51351},[28,140238,15649],{"class":211},[28,140240,140241,140244,140246,140248],{"class":30,"line":42},[28,140242,140243],{"class":38},"  overflow",[28,140245,51488],{"class":211},[28,140247,61765],{"class":38},[28,140249,1370],{"class":211},[28,140251,140252],{"class":30,"line":50},[28,140253,1643],{"class":211},[14,140255,140062],{},[18,140257,140258],{"className":126603,"code":140230,"language":126605,"meta":23,"style":23},[25,140259,140260,140266,140276],{"__ignoreMap":23},[28,140261,140262,140264],{"class":30,"line":31},[28,140263,51662],{"class":51351},[28,140265,15649],{"class":211},[28,140267,140268,140270,140272,140274],{"class":30,"line":42},[28,140269,140243],{"class":38},[28,140271,51488],{"class":211},[28,140273,61765],{"class":38},[28,140275,1370],{"class":211},[28,140277,140278],{"class":30,"line":50},[28,140279,1643],{"class":211},[14,140281,140282,140283,140286],{},"2 号盒子为 ",[25,140284,140285],{},"lifeservice"," 生活服务模块 高度为 209px",[1540,140288],{"style":126459,"src":140289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[116,140291,140292,140295,140305,140329,140340],{},[119,140293,140294],{},"设置边框（左右下边框）",[119,140296,140297,140298,140301,140302,140304],{},"里面的内容 是 ",[25,140299,140300],{},"ul > 12*li","，给",[25,140303,119],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[119,140306,140307,140308],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[116,140309,140310,140315,140324],{},[119,140311,140312,140314],{},[25,140313,140285],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[119,140316,140317,140318,140320,140321,140323],{},"可以让 ",[25,140319,140285],{}," 里面的 ",[25,140322,116],{}," 宽度为 252，就可以装的下 4 个 小 li",[119,140325,140326,140328],{},[25,140327,140285],{}," 盒子 overflow 隐藏多余的部分就可以了",[119,140330,116518,140331,140333,140334,140336,140337,140339],{},[25,140332,119],{}," 里面放一个 ",[25,140335,651],{},"（里面放图标），下面的文本用 ",[25,140338,14],{}," 标签包裹",[119,140341,139103,140342,140344,140345,140347,140348,139137,140350,140353],{},[25,140343,651],{}," 设置 24px宽和28px的高（注意 ",[25,140346,651],{}," 是行内元素， 转成行内块），给 ",[25,140349,119],{},[25,140351,140352],{},"text-align:center"," 让里面内容居中显示",[14,140355,139973],{},[18,140357,140359],{"className":126603,"code":140358,"language":126605,"meta":23,"style":23},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[25,140360,140361,140379,140384,140394],{"__ignoreMap":23},[28,140362,140363,140365,140367,140369,140371,140373,140375,140377],{"class":30,"line":31},[28,140364,28],{"class":51351},[28,140366,12512],{"class":211},[28,140368,448],{"class":51351},[28,140370,12512],{"class":211},[28,140372,23630],{"class":51351},[28,140374,12512],{"class":211},[28,140376,359],{"class":51351},[28,140378,15649],{"class":211},[28,140380,140381],{"class":30,"line":42},[28,140382,140383],{"class":269},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[28,140385,140386,140388,140390,140392],{"class":30,"line":50},[28,140387,128219],{"class":38},[28,140389,51488],{"class":211},[28,140391,128281],{"class":38},[28,140393,1370],{"class":211},[28,140395,140396],{"class":30,"line":58},[28,140397,1643],{"class":211},[14,140399,140062],{},[18,140401,140402],{"className":126603,"code":140358,"language":126605,"meta":23,"style":23},[25,140403,140404,140422,140426,140436],{"__ignoreMap":23},[28,140405,140406,140408,140410,140412,140414,140416,140418,140420],{"class":30,"line":31},[28,140407,28],{"class":51351},[28,140409,12512],{"class":211},[28,140411,448],{"class":51351},[28,140413,12512],{"class":211},[28,140415,23630],{"class":51351},[28,140417,12512],{"class":211},[28,140419,359],{"class":51351},[28,140421,15649],{"class":211},[28,140423,140424],{"class":30,"line":42},[28,140425,140383],{"class":269},[28,140427,140428,140430,140432,140434],{"class":30,"line":50},[28,140429,128219],{"class":38},[28,140431,51488],{"class":211},[28,140433,128281],{"class":38},[28,140435,1370],{"class":211},[28,140437,140438],{"class":30,"line":58},[28,140439,1643],{"class":211},[14,140441,140442,140443,140446],{},"3 号盒子为 ",[25,140444,140445],{},"bargain"," 特价商品",[116,140448,140449],{},[119,140450,140451],{},"这个比较简单，直接插入一张图片即可",[14,140453,139973],{},[18,140455,140456],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,140457,140458],{"__ignoreMap":23},[28,140459,140460,140462,140464,140466,140468,140470,140472,140474,140476,140478,140480,140482],{"class":30,"line":31},[28,140461,1120],{"class":211},[28,140463,1540],{"class":51351},[28,140465,55290],{"class":34},[28,140467,257],{"class":211},[28,140469,134120],{"class":64},[28,140471,55298],{"class":34},[28,140473,257],{"class":211},[28,140475,134127],{"class":64},[28,140477,134130],{"class":34},[28,140479,257],{"class":211},[28,140481,134135],{"class":64},[28,140483,51358],{"class":211},[14,140485,140062],{},[18,140487,140488],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,140489,140490],{"__ignoreMap":23},[28,140491,140492,140494,140496,140498,140500,140502,140504,140506,140508,140510,140512,140514],{"class":30,"line":31},[28,140493,1120],{"class":211},[28,140495,1540],{"class":51351},[28,140497,55290],{"class":34},[28,140499,257],{"class":211},[28,140501,134120],{"class":64},[28,140503,55298],{"class":34},[28,140505,257],{"class":211},[28,140507,134127],{"class":64},[28,140509,134130],{"class":34},[28,140511,257],{"class":211},[28,140513,134135],{"class":64},[28,140515,51358],{"class":211},[177,140517,140519],{"id":140518},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1540,140521],{"style":126459,"src":140522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140524,140525,140526,140529],{},"大盒子 ",[25,140527,140528],{},"recom"," 推荐模块 recommend",[116,140531,140532],{},[119,140533,140534,140535,140537,140538,140541],{},"给这个 ",[25,140536,140528],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[25,140539,140540],{},"#ebebeb","），设置距离上边 12px",[14,140543,139973],{},[18,140545,140547],{"className":126603,"code":140546,"language":126605,"meta":23,"style":23},"div {\n  background-color: #f0f0f0;\n}\n",[25,140548,140549,140555,140566],{"__ignoreMap":23},[28,140550,140551,140553],{"class":30,"line":31},[28,140552,51662],{"class":51351},[28,140554,15649],{"class":211},[28,140556,140557,140559,140561,140564],{"class":30,"line":42},[28,140558,70929],{"class":38},[28,140560,51488],{"class":211},[28,140562,140563],{"class":38},"#f0f0f0",[28,140565,1370],{"class":211},[28,140567,140568],{"class":30,"line":50},[28,140569,1643],{"class":211},[14,140571,140062],{},[18,140573,140574],{"className":126603,"code":140546,"language":126605,"meta":23,"style":23},[25,140575,140576,140582,140592],{"__ignoreMap":23},[28,140577,140578,140580],{"class":30,"line":31},[28,140579,51662],{"class":51351},[28,140581,15649],{"class":211},[28,140583,140584,140586,140588,140590],{"class":30,"line":42},[28,140585,70929],{"class":38},[28,140587,51488],{"class":211},[28,140589,140563],{"class":38},[28,140591,1370],{"class":211},[28,140593,140594],{"class":30,"line":50},[28,140595,1643],{"class":211},[14,140597,140598],{},"里面包含 2 个盒子， 浮动即可",[14,140600,139973],{},[18,140602,140603],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,140604,140605,140611,140621],{"__ignoreMap":23},[28,140606,140607,140609],{"class":30,"line":31},[28,140608,130451],{"class":34},[28,140610,15649],{"class":211},[28,140612,140613,140615,140617,140619],{"class":30,"line":42},[28,140614,131083],{"class":38},[28,140616,51488],{"class":211},[28,140618,23813],{"class":38},[28,140620,1370],{"class":211},[28,140622,140623],{"class":30,"line":50},[28,140624,1643],{"class":211},[14,140626,140627,140628],{},"1 号盒子 ",[25,140629,140630],{},"recom_hd",[116,140632,140633,140636],{},[119,140634,140635],{},"设置宽度205px，高度163px",[119,140637,140107,140638,140640],{},[25,140639,1540],{},"标签，插入图片即可",[14,140642,139973],{},[18,140644,140645],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,140646,140647],{"__ignoreMap":23},[28,140648,140649,140651,140653,140655,140657,140659,140661,140663,140665,140667,140669,140671],{"class":30,"line":31},[28,140650,1120],{"class":211},[28,140652,1540],{"class":51351},[28,140654,55290],{"class":34},[28,140656,257],{"class":211},[28,140658,134120],{"class":64},[28,140660,55298],{"class":34},[28,140662,257],{"class":211},[28,140664,134127],{"class":64},[28,140666,134130],{"class":34},[28,140668,257],{"class":211},[28,140670,134135],{"class":64},[28,140672,51358],{"class":211},[14,140674,140062],{},[18,140676,140677],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,140678,140679],{"__ignoreMap":23},[28,140680,140681,140683,140685,140687,140689,140691,140693,140695,140697,140699,140701,140703],{"class":30,"line":31},[28,140682,1120],{"class":211},[28,140684,1540],{"class":51351},[28,140686,55290],{"class":34},[28,140688,257],{"class":211},[28,140690,134120],{"class":64},[28,140692,55298],{"class":34},[28,140694,257],{"class":211},[28,140696,134127],{"class":64},[28,140698,134130],{"class":34},[28,140700,257],{"class":211},[28,140702,134135],{"class":64},[28,140704,51358],{"class":211},[14,140706,140707,140708,140711],{},"2 号盒子 ",[25,140709,140710],{},"recom_bd"," ，注意里面的小竖线",[116,140713,140714,140725,140728,140733,140738],{},[119,140715,140716,140717,140719,140720,140722,140723],{},"右侧结构里面放 ",[25,140718,116],{}," 包含 4个 ",[25,140721,119],{},"，每个li里面包含一个",[25,140724,1540],{},[119,140726,140727],{},"直接利用切片工具把里面的内容当成一张图片",[119,140729,139103,140730,140732],{},[25,140731,119],{}," 设置浮动",[119,140734,139103,140735,140737],{},[25,140736,1540],{}," 设置宽高，宽度 248px，高度 163px",[119,140739,140740,140741,140301,140744,140746,140747,140749,140750],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[25,140742,140743],{},"top 10px",[25,140745,119],{},"设置相对定位（注意，最后一个",[25,140748,119],{},"不用设置伪元素），可以利用 ",[25,140751,140752],{},"nth-child(-n+3){...}",[14,140754,139973],{},[18,140756,140757],{"className":126603,"code":138445,"language":126605,"meta":23,"style":23},[25,140758,140759,140767,140777,140787],{"__ignoreMap":23},[28,140760,140761,140763,140765],{"class":30,"line":31},[28,140762,51662],{"class":51351},[28,140764,137604],{"class":34},[28,140766,15649],{"class":211},[28,140768,140769,140771,140773,140775],{"class":30,"line":42},[28,140770,137611],{"class":38},[28,140772,51488],{"class":211},[28,140774,7729],{"class":64},[28,140776,1370],{"class":211},[28,140778,140779,140781,140783,140785],{"class":30,"line":50},[28,140780,128219],{"class":38},[28,140782,51488],{"class":211},[28,140784,60920],{"class":38},[28,140786,1370],{"class":211},[28,140788,140789],{"class":30,"line":58},[28,140790,1643],{"class":211},[14,140792,140062],{},[18,140794,140795],{"className":126603,"code":138445,"language":126605,"meta":23,"style":23},[25,140796,140797,140805,140815,140825],{"__ignoreMap":23},[28,140798,140799,140801,140803],{"class":30,"line":31},[28,140800,51662],{"class":51351},[28,140802,137604],{"class":34},[28,140804,15649],{"class":211},[28,140806,140807,140809,140811,140813],{"class":30,"line":42},[28,140808,137611],{"class":38},[28,140810,51488],{"class":211},[28,140812,7729],{"class":64},[28,140814,1370],{"class":211},[28,140816,140817,140819,140821,140823],{"class":30,"line":50},[28,140818,128219],{"class":38},[28,140820,51488],{"class":211},[28,140822,60920],{"class":38},[28,140824,1370],{"class":211},[28,140826,140827],{"class":30,"line":58},[28,140828,1643],{"class":211},[177,140830,140832],{"id":140831},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1540,140834],{"style":126459,"src":140835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140837,140838],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140840,140841],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140843,140844,140847],{},[25,140845,140846],{},"box_hd"," 制作",[14,140849,140627,140850,140852],{},[25,140851,140846],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1540,140854],{"style":126459,"src":140855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[116,140857,140858,140863,140868,140871],{},[119,140859,140860,140862],{},[25,140861,140846],{}," 给 30px 的高度，2个像素的下边框",[119,140864,140865,140866],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[25,140867,139114],{},[119,140869,140870],{},"左侧盒左浮动，右侧盒子右浮动",[119,140872,140873,140875,140876,140878],{},[25,140874,448],{},"标签之间的距离用左右的",[25,140877,30934],{},"撑开即可",[14,140880,140881],{},"结构代码",[18,140883,140884],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,140885,140886,140892,140902],{"__ignoreMap":23},[28,140887,140888,140890],{"class":30,"line":31},[28,140889,130451],{"class":34},[28,140891,15649],{"class":211},[28,140893,140894,140896,140898,140900],{"class":30,"line":42},[28,140895,131083],{"class":38},[28,140897,51488],{"class":211},[28,140899,23813],{"class":38},[28,140901,1370],{"class":211},[28,140903,140904],{"class":30,"line":50},[28,140905,1643],{"class":211},[14,140907,140908],{},"样式代码",[18,140910,140911],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,140912,140913,140919,140929],{"__ignoreMap":23},[28,140914,140915,140917],{"class":30,"line":31},[28,140916,130451],{"class":34},[28,140918,15649],{"class":211},[28,140920,140921,140923,140925,140927],{"class":30,"line":42},[28,140922,131083],{"class":38},[28,140924,51488],{"class":211},[28,140926,23813],{"class":38},[28,140928,1370],{"class":211},[28,140930,140931],{"class":30,"line":50},[28,140932,1643],{"class":211},[14,140934,140935,140847],{},[25,140936,140937],{},"box_bd",[14,140939,140940],{},"2 号盒子 box_bd，不要给高度",[1540,140942],{"style":126459,"src":140943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140945,140946],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140948,140949],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140951,140952],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[116,140954,140955,140967,140983],{},[119,140956,140957,140959,140960,140963,140964,140966],{},[25,140958,140937],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[25,140961,140962],{},"tab_content","，在",[25,140965,140962],{}," 里面包裹tab选项卡对应的内容",[119,140968,140969,140970,140973,140974,140976,140977,140979,140980,140982],{},"内容被一个大盒子包裹（",[25,140971,140972],{},"tab_list_item","），里面是 ",[25,140975,116],{}," 包裹 5个 ",[25,140978,119],{},"，每个",[25,140981,119],{},"设置对应的宽度，然后设置浮动",[119,140984,140985,140986,140988,140989,140991,140992],{},"而这5个",[25,140987,119],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[25,140990,119],{},"设置",[116,140993,140994,141012,141015],{},[119,140995,140996,140997,140999,141000,141002,141003,141005,141006,141008,141009,141011],{},"第一个小 ",[25,140998,119],{}," 分为上下结构，上面是 ",[25,141001,116],{}," 包裹 ",[25,141004,119],{}," ，",[25,141007,119],{},"里面包裹 ",[25,141010,448],{},"，下面插入一张图片",[119,141013,141014],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[119,141016,141017,141018,141020,141021,141023,141024,141026],{},"后面的小 ",[25,141019,119],{}," 里面先放一个",[25,141022,448],{},"标签，然后在",[25,141025,448],{},"标签里面插入图片即可",[14,141028,140881],{},[18,141030,141031],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,141032,141033],{"__ignoreMap":23},[28,141034,141035,141037,141039,141041,141043,141045,141047,141049,141051,141053,141055,141057],{"class":30,"line":31},[28,141036,1120],{"class":211},[28,141038,1540],{"class":51351},[28,141040,55290],{"class":34},[28,141042,257],{"class":211},[28,141044,134120],{"class":64},[28,141046,55298],{"class":34},[28,141048,257],{"class":211},[28,141050,134127],{"class":64},[28,141052,134130],{"class":34},[28,141054,257],{"class":211},[28,141056,134135],{"class":64},[28,141058,51358],{"class":211},[14,141060,140908],{},[18,141062,141063],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,141064,141065],{"__ignoreMap":23},[28,141066,141067,141069,141071,141073,141075,141077,141079,141081,141083,141085,141087,141089],{"class":30,"line":31},[28,141068,1120],{"class":211},[28,141070,1540],{"class":51351},[28,141072,55290],{"class":34},[28,141074,257],{"class":211},[28,141076,134120],{"class":64},[28,141078,55298],{"class":34},[28,141080,257],{"class":211},[28,141082,134127],{"class":64},[28,141084,134130],{"class":34},[28,141086,257],{"class":211},[28,141088,134135],{"class":64},[28,141090,51358],{"class":211},[14,141092,141093],{},"tab栏切换需求！！！！！！介绍：",[1540,141095],{"style":126459,"src":141096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[116,141098,141099,141107,141113,141116],{},[119,141100,141101,141104,141105],{},[25,141102,141103],{},"tab","栏的布局是 ",[25,141106,139114],{},[119,141108,141109,141110,141112],{},"有多少个",[25,141111,141103],{},"选项卡，那么对应就有多少个内容",[119,141114,141115],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[119,141117,141118,141119,141122,141123,141125,141126,141128],{},"等后面我们学习了",[25,141120,141121],{},"js","之后，我们就会配合",[25,141124,141121],{},"来实现，",[25,141127,141103],{},"栏的切换",[149,141130,141132],{"id":141131},"_162-列表制作","16.2 列表制作",[177,141134,141136],{"id":141135},"_1621-准备工作","16.2.1 准备工作",[116,141138,141139,141142,141145,141148],{},[119,141140,141141],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[119,141143,141144],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[119,141146,141147],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[119,141149,141150],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[177,141152,141154,141155,101069,141157,141159],{"id":141153},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[25,141156,131608],{},[25,141158,53764],{}," 修改",[1540,141161],{"style":126459,"src":141162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[116,141164,141165],{},[119,141166,141167],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141169,139973],{},[18,141171,141172],{"className":126603,"code":132035,"language":126605,"meta":23,"style":23},[25,141173,141174,141178,141192,141196,141210,141214,141228,141232,141246,141250],{"__ignoreMap":23},[28,141175,141176],{"class":30,"line":31},[28,141177,132042],{"class":269},[28,141179,141180,141182,141184,141186,141188,141190],{"class":30,"line":42},[28,141181,132047],{"class":34},[28,141183,79858],{"class":211},[28,141185,128963],{"class":38},[28,141187,51488],{"class":211},[28,141189,132056],{"class":38},[28,141191,129533],{"class":211},[28,141193,141194],{"class":30,"line":50},[28,141195,132063],{"class":269},[28,141197,141198,141200,141202,141204,141206,141208],{"class":30,"line":58},[28,141199,132068],{"class":34},[28,141201,79858],{"class":211},[28,141203,128963],{"class":38},[28,141205,51488],{"class":211},[28,141207,54815],{"class":38},[28,141209,129533],{"class":211},[28,141211,141212],{"class":30,"line":70},[28,141213,132083],{"class":269},[28,141215,141216,141218,141220,141222,141224,141226],{"class":30,"line":78},[28,141217,132088],{"class":34},[28,141219,79858],{"class":211},[28,141221,128963],{"class":38},[28,141223,51488],{"class":211},[28,141225,54882],{"class":38},[28,141227,129533],{"class":211},[28,141229,141230],{"class":30,"line":86},[28,141231,132103],{"class":269},[28,141233,141234,141236,141238,141240,141242,141244],{"class":30,"line":97},[28,141235,132108],{"class":34},[28,141237,79858],{"class":211},[28,141239,128963],{"class":38},[28,141241,51488],{"class":211},[28,141243,86284],{"class":38},[28,141245,129533],{"class":211},[28,141247,141248],{"class":30,"line":108},[28,141249,132123],{"class":269},[28,141251,141252,141254,141256,141258,141260,141262],{"class":30,"line":1407},[28,141253,132128],{"class":34},[28,141255,79858],{"class":211},[28,141257,128963],{"class":38},[28,141259,51488],{"class":211},[28,141261,132137],{"class":38},[28,141263,129533],{"class":211},[14,141265,140062],{},[18,141267,141268],{"className":126603,"code":132035,"language":126605,"meta":23,"style":23},[25,141269,141270,141274,141288,141292,141306,141310,141324,141328,141342,141346],{"__ignoreMap":23},[28,141271,141272],{"class":30,"line":31},[28,141273,132042],{"class":269},[28,141275,141276,141278,141280,141282,141284,141286],{"class":30,"line":42},[28,141277,132047],{"class":34},[28,141279,79858],{"class":211},[28,141281,128963],{"class":38},[28,141283,51488],{"class":211},[28,141285,132056],{"class":38},[28,141287,129533],{"class":211},[28,141289,141290],{"class":30,"line":50},[28,141291,132063],{"class":269},[28,141293,141294,141296,141298,141300,141302,141304],{"class":30,"line":58},[28,141295,132068],{"class":34},[28,141297,79858],{"class":211},[28,141299,128963],{"class":38},[28,141301,51488],{"class":211},[28,141303,54815],{"class":38},[28,141305,129533],{"class":211},[28,141307,141308],{"class":30,"line":70},[28,141309,132083],{"class":269},[28,141311,141312,141314,141316,141318,141320,141322],{"class":30,"line":78},[28,141313,132088],{"class":34},[28,141315,79858],{"class":211},[28,141317,128963],{"class":38},[28,141319,51488],{"class":211},[28,141321,54882],{"class":38},[28,141323,129533],{"class":211},[28,141325,141326],{"class":30,"line":86},[28,141327,132103],{"class":269},[28,141329,141330,141332,141334,141336,141338,141340],{"class":30,"line":97},[28,141331,132108],{"class":34},[28,141333,79858],{"class":211},[28,141335,128963],{"class":38},[28,141337,51488],{"class":211},[28,141339,86284],{"class":38},[28,141341,129533],{"class":211},[28,141343,141344],{"class":30,"line":108},[28,141345,132123],{"class":269},[28,141347,141348,141350,141352,141354,141356,141358],{"class":30,"line":1407},[28,141349,132128],{"class":34},[28,141351,79858],{"class":211},[28,141353,128963],{"class":38},[28,141355,51488],{"class":211},[28,141357,132137],{"class":38},[28,141359,129533],{"class":211},[116,141361,141362,141373],{},[119,141363,141364,141365,141368,141369,101069,141371],{},"1 号盒子左侧浮动 ",[25,141366,141367],{},"sk_list"," 里面包含 ",[25,141370,116],{},[25,141372,119],{},[119,141374,141375,141376,141368,141379,101069,141381],{},"2 号盒子左侧浮动 ",[25,141377,141378],{},"sk_con",[25,141380,116],{},[25,141382,119],{},[14,141384,139973],{},[18,141386,141387],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,141388,141389,141395,141405],{"__ignoreMap":23},[28,141390,141391,141393],{"class":30,"line":31},[28,141392,130451],{"class":34},[28,141394,15649],{"class":211},[28,141396,141397,141399,141401,141403],{"class":30,"line":42},[28,141398,131083],{"class":38},[28,141400,51488],{"class":211},[28,141402,23813],{"class":38},[28,141404,1370],{"class":211},[28,141406,141407],{"class":30,"line":50},[28,141408,1643],{"class":211},[14,141410,140062],{},[18,141412,141413],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,141414,141415,141421,141431],{"__ignoreMap":23},[28,141416,141417,141419],{"class":30,"line":31},[28,141418,130451],{"class":34},[28,141420,15649],{"class":211},[28,141422,141423,141425,141427,141429],{"class":30,"line":42},[28,141424,131083],{"class":38},[28,141426,51488],{"class":211},[28,141428,23813],{"class":38},[28,141430,1370],{"class":211},[28,141432,141433],{"class":30,"line":50},[28,141434,1643],{"class":211},[177,141436,141438,141439],{"id":141437},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[25,141440,141441],{},"sk_container",[1540,141443],{"style":126459,"src":141444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[116,141446,141447,141452],{},[119,141448,140627,141449,141451],{},[25,141450,141441],{}," 给宽度 1200，不要给高度",[119,141453,141454],{},"一定不要忘记清除浮动",[14,141456,139973],{},[18,141458,141459],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,141460,141461,141467,141477],{"__ignoreMap":23},[28,141462,141463,141465],{"class":30,"line":31},[28,141464,130451],{"class":34},[28,141466,15649],{"class":211},[28,141468,141469,141471,141473,141475],{"class":30,"line":42},[28,141470,131083],{"class":38},[28,141472,51488],{"class":211},[28,141474,23813],{"class":38},[28,141476,1370],{"class":211},[28,141478,141479],{"class":30,"line":50},[28,141480,1643],{"class":211},[161,141482,141483],{},[119,141484,141485],{},"sk_hd制作",[116,141487,141488],{},[119,141489,140707,141490,141493],{},[25,141491,141492],{},"sk_hd"," ，插入图片即可",[14,141495,139973],{},[18,141497,141498],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,141499,141500],{"__ignoreMap":23},[28,141501,141502,141504,141506,141508,141510,141512,141514,141516,141518,141520,141522,141524],{"class":30,"line":31},[28,141503,1120],{"class":211},[28,141505,1540],{"class":51351},[28,141507,55290],{"class":34},[28,141509,257],{"class":211},[28,141511,134120],{"class":64},[28,141513,55298],{"class":34},[28,141515,257],{"class":211},[28,141517,134127],{"class":64},[28,141519,134130],{"class":34},[28,141521,257],{"class":211},[28,141523,134135],{"class":64},[28,141525,51358],{"class":211},[161,141527,141528],{"start":42},[119,141529,141530],{},"sk_bd制作",[116,141532,141533],{},[119,141534,141535,141536,141539,141540,101069,141542,141544],{},"3 号盒子 ",[25,141537,141538],{},"sk_bd"," ，里面包含很多的 ",[25,141541,116],{},[25,141543,119],{},[116,141545,141546,141555],{},[119,141547,141548,141549,141551,141552,141554],{},"当鼠标移入到 ",[25,141550,119],{}," 上面的时候显示红色的边框，在这里先给 ",[25,141553,119],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[119,141556,141557,141558,141560,141561,141563,141564,141567,141568,141570],{},"由于给每个 ",[25,141559,119],{}," 都设置了外边距，导致一行的最后一个 ",[25,141562,119],{}," 掉了下来，在这里我们利用 ",[25,141565,141566],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[25,141569,119],{},"，去掉外边距就好了",[14,141572,139973],{},[18,141574,141575],{"className":126603,"code":138792,"language":126605,"meta":23,"style":23},[25,141576,141577,141583,141595],{"__ignoreMap":23},[28,141578,141579,141581],{"class":30,"line":31},[28,141580,51662],{"class":51351},[28,141582,15649],{"class":211},[28,141584,141585,141587,141589,141591,141593],{"class":30,"line":42},[28,141586,70521],{"class":38},[28,141588,51488],{"class":211},[28,141590,401],{"class":38},[28,141592,51607],{"class":38},[28,141594,1370],{"class":211},[28,141596,141597],{"class":30,"line":50},[28,141598,1643],{"class":211},[14,141600,140062],{},[18,141602,141603],{"className":126603,"code":138792,"language":126605,"meta":23,"style":23},[25,141604,141605,141611,141623],{"__ignoreMap":23},[28,141606,141607,141609],{"class":30,"line":31},[28,141608,51662],{"class":51351},[28,141610,15649],{"class":211},[28,141612,141613,141615,141617,141619,141621],{"class":30,"line":42},[28,141614,70521],{"class":38},[28,141616,51488],{"class":211},[28,141618,401],{"class":38},[28,141620,51607],{"class":38},[28,141622,1370],{"class":211},[28,141624,141625],{"class":30,"line":50},[28,141626,1643],{"class":211},[149,141628,141630],{"id":141629},"_163-注册页面制作","16.3 注册页面制作",[1540,141632],{"style":126459,"src":141633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141635,141636,141638],{},[359,141637,9102],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1540,141640],{"style":126459,"src":141641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[177,141643,141645],{"id":141644},"_1631-准备工作","16.3.1 准备工作",[116,141647,141648,141651],{},[119,141649,141650],{},"创建register.html，引入 base.css，引入favicon图标",[119,141652,141653],{},"创建register.css ，在html页面进行引入",[177,141655,141657,141658,141660],{"id":141656},"_1632-header-头部实现","16.3.2 ",[25,141659,131608],{}," 头部实现",[116,141662,141663,141666],{},[119,141664,141665],{},"整个内容用 版心 进行包裹",[119,141667,141668],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141670,139973],{},[18,141672,141673],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,141674,141675],{"__ignoreMap":23},[28,141676,141677,141679,141681,141683,141685,141687,141689,141691,141693,141695,141697,141699],{"class":30,"line":31},[28,141678,1120],{"class":211},[28,141680,1540],{"class":51351},[28,141682,55290],{"class":34},[28,141684,257],{"class":211},[28,141686,134120],{"class":64},[28,141688,55298],{"class":34},[28,141690,257],{"class":211},[28,141692,134127],{"class":64},[28,141694,134130],{"class":34},[28,141696,257],{"class":211},[28,141698,134135],{"class":64},[28,141700,51358],{"class":211},[14,141702,140062],{},[18,141704,141705],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,141706,141707],{"__ignoreMap":23},[28,141708,141709,141711,141713,141715,141717,141719,141721,141723,141725,141727,141729,141731],{"class":30,"line":31},[28,141710,1120],{"class":211},[28,141712,1540],{"class":51351},[28,141714,55290],{"class":34},[28,141716,257],{"class":211},[28,141718,134120],{"class":64},[28,141720,55298],{"class":34},[28,141722,257],{"class":211},[28,141724,134127],{"class":64},[28,141726,134130],{"class":34},[28,141728,257],{"class":211},[28,141730,134135],{"class":64},[28,141732,51358],{"class":211},[177,141734,141736,141737,141740],{"id":141735},"_1633-registerarea-主体模块实现","16.3.3 ",[25,141738,141739],{},"registerarea"," 主体模块实现",[1540,141742],{"style":126459,"src":141743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141745,141746],{},"整个大盒子 高度为 522px，设置4个边框",[14,141748,139973],{},[18,141750,141751],{"className":126603,"code":130760,"language":126605,"meta":23,"style":23},[25,141752,141753,141759,141775],{"__ignoreMap":23},[28,141754,141755,141757],{"class":30,"line":31},[28,141756,51662],{"class":51351},[28,141758,15649],{"class":211},[28,141760,141761,141763,141765,141767,141769,141771,141773],{"class":30,"line":42},[28,141762,70947],{"class":38},[28,141764,51488],{"class":211},[28,141766,427],{"class":38},[28,141768,51543],{"class":207},[28,141770,51572],{"class":38},[28,141772,129995],{"class":38},[28,141774,1370],{"class":211},[28,141776,141777],{"class":30,"line":50},[28,141778,1643],{"class":211},[14,141780,140062],{},[18,141782,141783],{"className":126603,"code":130760,"language":126605,"meta":23,"style":23},[25,141784,141785,141791,141807],{"__ignoreMap":23},[28,141786,141787,141789],{"class":30,"line":31},[28,141788,51662],{"class":51351},[28,141790,15649],{"class":211},[28,141792,141793,141795,141797,141799,141801,141803,141805],{"class":30,"line":42},[28,141794,70947],{"class":38},[28,141796,51488],{"class":211},[28,141798,427],{"class":38},[28,141800,51543],{"class":207},[28,141802,51572],{"class":38},[28,141804,129995],{"class":38},[28,141806,1370],{"class":211},[28,141808,141809],{"class":30,"line":50},[28,141810,1643],{"class":211},[14,141812,141813],{},"1号盒子 是一个 h3 标签，放标题",[116,141815,141816],{},[119,141817,141818],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141820,139973],{},[18,141822,141823],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,141824,141825,141831,141841],{"__ignoreMap":23},[28,141826,141827,141829],{"class":30,"line":31},[28,141828,130451],{"class":34},[28,141830,15649],{"class":211},[28,141832,141833,141835,141837,141839],{"class":30,"line":42},[28,141834,131083],{"class":38},[28,141836,51488],{"class":211},[28,141838,23813],{"class":38},[28,141840,1370],{"class":211},[28,141842,141843],{"class":30,"line":50},[28,141844,1643],{"class":211},[14,141846,140062],{},[18,141848,141849],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,141850,141851,141857,141867],{"__ignoreMap":23},[28,141852,141853,141855],{"class":30,"line":31},[28,141854,130451],{"class":34},[28,141856,15649],{"class":211},[28,141858,141859,141861,141863,141865],{"class":30,"line":42},[28,141860,131083],{"class":38},[28,141862,51488],{"class":211},[28,141864,23813],{"class":38},[28,141866,1370],{"class":211},[28,141868,141869],{"class":30,"line":50},[28,141870,1643],{"class":211},[14,141872,141873],{},"2号盒子 里面放注册的内容",[116,141875,141876,141879,141888,141902,141915,141918,141921,141939,141953],{},[119,141877,141878],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[119,141880,141881,141882,141884,141885,141887],{},"里面的内容利用 ",[25,141883,116],{}," 包含 ",[25,141886,119],{}," 来实现的（不需要用表格）",[119,141889,139117,141890,141892,141893,141895,141896,141898,141899,141901],{},[25,141891,119],{}," 里面，左侧放 ",[25,141894,33659],{}," 标签， 中间放",[25,141897,53872],{}," 标签， 右侧放 ",[25,141900,28],{}," 提示信息",[119,141903,141904,141905,141907,141908,141910,141911,141914],{},"左侧 ",[25,141906,33659],{},"里面的文字都是右对齐，我们可以给",[25,141909,33659],{},"设置一个宽度（88px），然后利用",[25,141912,141913],{},"text-align"," 来设置右对齐",[119,141916,141917],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[119,141919,141920],{},"右侧 span修饰一下文字颜色",[119,141922,141923,141924],{},"提示信息的样式优化",[116,141925,141926,141929,141932],{},[119,141927,141928],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[119,141930,141931],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[119,141933,141934,141935,141938],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[25,141936,141937],{},"vertical-algin"," 来设置 图片与文字对齐方式",[119,141940,141941,141942],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[116,141943,141944,141950],{},[119,141945,141946,141947,141949],{},"设置 ",[25,141948,23630],{}," 的 左右 12px 的内边距，设置一下文字颜色",[119,141951,141952],{},"分别设置 背景颜色",[119,141954,141955,141956,141958],{},"同意协议 和 完成注册 都是用 ",[25,141957,119],{}," 进行包裹",[14,141960,139973],{},[18,141962,141963],{"className":126603,"code":140546,"language":126605,"meta":23,"style":23},[25,141964,141965,141971,141981],{"__ignoreMap":23},[28,141966,141967,141969],{"class":30,"line":31},[28,141968,51662],{"class":51351},[28,141970,15649],{"class":211},[28,141972,141973,141975,141977,141979],{"class":30,"line":42},[28,141974,70929],{"class":38},[28,141976,51488],{"class":211},[28,141978,140563],{"class":38},[28,141980,1370],{"class":211},[28,141982,141983],{"class":30,"line":50},[28,141984,1643],{"class":211},[14,141986,140062],{},[18,141988,141989],{"className":126603,"code":140546,"language":126605,"meta":23,"style":23},[25,141990,141991,141997,142007],{"__ignoreMap":23},[28,141992,141993,141995],{"class":30,"line":31},[28,141994,51662],{"class":51351},[28,141996,15649],{"class":211},[28,141998,141999,142001,142003,142005],{"class":30,"line":42},[28,142000,70929],{"class":38},[28,142002,51488],{"class":211},[28,142004,140563],{"class":38},[28,142006,1370],{"class":211},[28,142008,142009],{"class":30,"line":50},[28,142010,1643],{"class":211},[177,142012,142014],{"id":142013},"_1634-底部实现","16.3.4 底部实现",[14,142016,139973],{},[18,142018,142019],{"className":126603,"code":140546,"language":126605,"meta":23,"style":23},[25,142020,142021,142027,142037],{"__ignoreMap":23},[28,142022,142023,142025],{"class":30,"line":31},[28,142024,51662],{"class":51351},[28,142026,15649],{"class":211},[28,142028,142029,142031,142033,142035],{"class":30,"line":42},[28,142030,70929],{"class":38},[28,142032,51488],{"class":211},[28,142034,140563],{"class":38},[28,142036,1370],{"class":211},[28,142038,142039],{"class":30,"line":50},[28,142040,1643],{"class":211},[14,142042,140062],{},[18,142044,142045],{"className":127350,"code":130707,"language":127352,"meta":23,"style":23},[25,142046,142047,142051,142065,142069],{"__ignoreMap":23},[28,142048,142049],{"class":30,"line":31},[28,142050,130714],{"class":269},[28,142052,142053,142055,142057,142059,142061,142063],{"class":30,"line":42},[28,142054,1120],{"class":211},[28,142056,51662],{"class":51351},[28,142058,53537],{"class":34},[28,142060,257],{"class":211},[28,142062,130727],{"class":64},[28,142064,51358],{"class":211},[28,142066,142067],{"class":30,"line":50},[28,142068,130734],{"class":211},[28,142070,142071,142073,142075],{"class":30,"line":58},[28,142072,51836],{"class":211},[28,142074,51662],{"class":51351},[28,142076,51358],{"class":211},[149,142078,142080],{"id":142079},"_164-项目总结","16.4 项目总结",[161,142082,142083,142086,142089,142092],{},[119,142084,142085],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[119,142087,142088],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[119,142090,142091],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[119,142093,142094],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1540,142096],{"style":126459,"src":142097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[161,142099,142100],{"start":70},[119,142101,142102],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1540,142104],{"style":126459,"src":142105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[161,142107,142108],{"start":78},[119,142109,142110],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1540,142112],{"style":126459,"src":142113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[18,142115,142116],{"className":127350,"code":136760,"language":127352,"meta":23,"style":23},[25,142117,142118],{"__ignoreMap":23},[28,142119,142120,142122,142124,142126,142128,142130,142132,142134,142136,142138,142140,142142],{"class":30,"line":31},[28,142121,1120],{"class":211},[28,142123,53872],{"class":51351},[28,142125,53875],{"class":34},[28,142127,257],{"class":211},[28,142129,62750],{"class":64},[28,142131,14997],{"class":34},[28,142133,257],{"class":211},[28,142135,136781],{"class":64},[28,142137,61071],{"class":34},[28,142139,257],{"class":211},[28,142141,136788],{"class":64},[28,142143,51358],{"class":211},[161,142145,142146,142149],{"start":86},[119,142147,142148],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[119,142150,142151],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[126,142153,142154],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":23,"searchDepth":42,"depth":42,"links":142156},[142157,142162,142169,142177],{"id":139783,"depth":42,"text":139784,"children":142158},[142159,142160,142161],{"id":139787,"depth":50,"text":139788},{"id":140518,"depth":50,"text":140519},{"id":140831,"depth":50,"text":140832},{"id":141131,"depth":42,"text":141132,"children":142163},[142164,142165,142167],{"id":141135,"depth":50,"text":141136},{"id":141153,"depth":50,"text":142166},"16.2.2 列表页 header 和 nav 修改",{"id":141437,"depth":50,"text":142168},"16.2.3 列表页主体 sk_container",{"id":141629,"depth":42,"text":141630,"children":142170},[142171,142172,142174,142176],{"id":141644,"depth":50,"text":141645},{"id":141656,"depth":50,"text":142173},"16.3.2 header 头部实现",{"id":141735,"depth":50,"text":142175},"16.3.3 registerarea 主体模块实现",{"id":142013,"depth":50,"text":142014},{"id":142079,"depth":42,"text":142080},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139775,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142184,"title":142185,"body":142186,"description":131,"extension":132,"meta":142294,"navigation":134,"path":142295,"seo":142296,"stem":142297,"__hash__":142298},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142187,"toc":142289},[142188,142191,142195,142198,142201,142210,142219,142223,142228,142235,142253,142256,142259,142262,142265,142268,142271,142274,142277,142280,142283,142286],[10,142189,142185],{"id":142190},"_17-web服务器与网站发布",[149,142192,142194],{"id":142193},"_171-web服务器","17.1 Web服务器",[14,142196,142197],{},"把自己网站上传到服务器上，可以让其他人访问",[1540,142199],{"style":126459,"src":142200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142202,142203,142206,142207],{},[359,142204,142205],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[359,142208,142209],{},"Web 服务器等",[14,142211,142212,142213,101069,142216,25791],{},"根据服务器在网络中所在的位置不同，又可分为 ",[359,142214,142215],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[359,142217,142218],{},"远程服务器",[177,142220,142222],{"id":142221},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142224,142225],{},[359,142226,142227],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142229,142230,142231],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[448,142232,142233],{"href":142233,"rel":142234},"http:\u002F\u002Ffree.3v.do\u002F",[23940],[116,142236,142237,142240,142243,142250],{},[119,142238,142239],{},"去免费空间网站注册账号。",[119,142241,142242],{},"记录下主机名、用户名、密码、域名。",[119,142244,142245,142246,142249],{},"利用 ",[25,142247,142248],{},"utftp"," 软件 上传网站到远程服务器",[119,142251,142252],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142254,142255],{},"使用软件上传，对上传软件文件进行解压",[1540,142257],{"style":126459,"src":142258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1540,142260],{"style":126459,"src":142261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142263,142264],{},"输入刚刚申请的服务器账号信息：",[1540,142266],{"style":126459,"src":142267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1540,142269],{"style":126459,"src":142270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1540,142272],{"style":126459,"src":142273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1540,142275],{"style":126459,"src":142276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142278,142279],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1540,142281],{"style":126459,"src":142282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142284,142285],{},"浏览器输入域名即可访问",[14,142287,142288],{},"首页一定必须是index",{"title":23,"searchDepth":42,"depth":42,"links":142290},[142291],{"id":142193,"depth":42,"text":142194,"children":142292},[142293],{"id":142221,"depth":50,"text":142222},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142185,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142300,"title":142301,"body":142302,"description":131,"extension":132,"meta":143229,"navigation":134,"path":143230,"seo":143231,"stem":143232,"__hash__":143233},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142303,"toc":143212},[142304,142307,142311,142314,142317,142328,142331,142335,142339,142344,142347,142350,142353,142356,142360,142386,142390,142394,142397,142400,142404,142437,142441,142444,142447,142511,142515,142519,142522,142525,142528,142532,142577,142581,142584,142614,142618,142622,142625,142628,142632,142635,142704,142707,142815,142817,142823,142827,142830,142833,142929,142932,142936,142960,142964,142967,142971,142974,142978,142981,142984,142987,142990,142994,142997,143000,143004,143008,143011,143014,143017,143020,143024,143027,143031,143034,143037,143082,143086,143090,143093,143096,143099,143131,143135,143138,143172,143176,143179,143209],[10,142305,142301],{"id":142306},"_18-2d动画与3d转换",[149,142308,142310],{"id":142309},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142312,142313],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142315,142316],{},"转换（transform）你可以简单理解为变形",[116,142318,142319,142322,142325],{},[119,142320,142321],{},"移动：translate",[119,142323,142324],{},"旋转：rotate",[119,142326,142327],{},"缩放：scale",[1540,142329],{"style":126459,"src":142330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[177,142332,142334],{"id":142333},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22075,142336,142338],{"id":142337},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142340,142341,142342],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[359,142343,133262],{},[1540,142345],{"style":126459,"src":142346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142348,142349],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142351,142352],{},"对于行内元素无效",[14,142354,142355],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22075,142357,142359],{"id":142358},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[18,142361,142362],{"className":126603,"code":138792,"language":126605,"meta":23,"style":23},[25,142363,142364,142370,142382],{"__ignoreMap":23},[28,142365,142366,142368],{"class":30,"line":31},[28,142367,51662],{"class":51351},[28,142369,15649],{"class":211},[28,142371,142372,142374,142376,142378,142380],{"class":30,"line":42},[28,142373,70521],{"class":38},[28,142375,51488],{"class":211},[28,142377,401],{"class":38},[28,142379,51607],{"class":38},[28,142381,1370],{"class":211},[28,142383,142384],{"class":30,"line":50},[28,142385,1643],{"class":211},[177,142387,142389],{"id":142388},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22075,142391,142393],{"id":142392},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142395,142396],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1540,142398],{"style":126459,"src":142399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22075,142401,142403],{"id":142402},"_18122-旋转效果","18.1.2.2 旋转效果",[18,142405,142407],{"className":126603,"code":142406,"language":126605,"meta":23,"style":23},"div {\n  transform: rotate(45deg);\n}\n",[25,142408,142409,142415,142433],{"__ignoreMap":23},[28,142410,142411,142413],{"class":30,"line":31},[28,142412,51662],{"class":51351},[28,142414,15649],{"class":211},[28,142416,142417,142419,142421,142424,142426,142428,142431],{"class":30,"line":42},[28,142418,136587],{"class":38},[28,142420,51488],{"class":211},[28,142422,142423],{"class":38},"rotate",[28,142425,212],{"class":211},[28,142427,739],{"class":38},[28,142429,142430],{"class":207},"deg",[28,142432,2796],{"class":211},[28,142434,142435],{"class":30,"line":50},[28,142436,1643],{"class":211},[22075,142438,142440],{"id":142439},"_18123-三角做法","18.1.2.3 三角做法",[14,142442,142443],{},"该下标当经过最外层大盒子时会实现向上反转",[1540,142445],{"style":126459,"src":142446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[18,142448,142449],{"className":126603,"code":135123,"language":126605,"meta":23,"style":23},[25,142450,142451,142455,142461,142471,142481,142497,142507],{"__ignoreMap":23},[28,142452,142453],{"class":30,"line":31},[28,142454,135130],{"class":269},[28,142456,142457,142459],{"class":30,"line":42},[28,142458,135135],{"class":34},[28,142460,15649],{"class":211},[28,142462,142463,142465,142467,142469],{"class":30,"line":50},[28,142464,70619],{"class":38},[28,142466,51488],{"class":211},[28,142468,401],{"class":38},[28,142470,1370],{"class":211},[28,142472,142473,142475,142477,142479],{"class":30,"line":58},[28,142474,70839],{"class":38},[28,142476,51488],{"class":211},[28,142478,401],{"class":38},[28,142480,1370],{"class":211},[28,142482,142483,142485,142487,142489,142491,142493,142495],{"class":30,"line":70},[28,142484,70947],{"class":38},[28,142486,51488],{"class":211},[28,142488,656],{"class":38},[28,142490,51543],{"class":207},[28,142492,51572],{"class":38},[28,142494,64042],{"class":38},[28,142496,1370],{"class":211},[28,142498,142499,142501,142503,142505],{"class":30,"line":78},[28,142500,135178],{"class":38},[28,142502,51488],{"class":211},[28,142504,62420],{"class":38},[28,142506,1370],{"class":211},[28,142508,142509],{"class":30,"line":86},[28,142510,1643],{"class":211},[177,142512,142514],{"id":142513},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22075,142516,142518],{"id":142517},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142520,142521],{},"设置中心点",[1540,142523],{"style":126459,"src":142524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142526,142527],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22075,142529,142531],{"id":142530},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[18,142533,142535],{"className":126603,"code":142534,"language":126605,"meta":23,"style":23},"\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",[25,142536,142537,142542,142548,142563,142568,142573],{"__ignoreMap":23},[28,142538,142539],{"class":30,"line":31},[28,142540,142541],{"class":269},"\u002F* 转换中心点 *\u002F\n",[28,142543,142544,142546],{"class":30,"line":42},[28,142545,51662],{"class":51351},[28,142547,15649],{"class":211},[28,142549,142550,142553,142555,142557,142559,142561],{"class":30,"line":50},[28,142551,142552],{"class":38},"  transform-origin",[28,142554,51488],{"class":211},[28,142556,51643],{"class":38},[28,142558,17221],{"class":38},[28,142560,130466],{"class":211},[28,142562,135276],{"class":269},[28,142564,142565],{"class":30,"line":58},[28,142566,142567],{"class":269},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[28,142569,142570],{"class":30,"line":70},[28,142571,142572],{"class":269},"  \u002F* transform-origin: left top; *\u002F\n",[28,142574,142575],{"class":30,"line":78},[28,142576,1643],{"class":211},[22075,142578,142580],{"id":142579},"_18133-旋转案例","18.1.3.3 旋转案例",[1540,142582],{"style":126459,"src":142583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[18,142585,142586],{"className":126603,"code":142406,"language":126605,"meta":23,"style":23},[25,142587,142588,142594,142610],{"__ignoreMap":23},[28,142589,142590,142592],{"class":30,"line":31},[28,142591,51662],{"class":51351},[28,142593,15649],{"class":211},[28,142595,142596,142598,142600,142602,142604,142606,142608],{"class":30,"line":42},[28,142597,136587],{"class":38},[28,142599,51488],{"class":211},[28,142601,142423],{"class":38},[28,142603,212],{"class":211},[28,142605,739],{"class":38},[28,142607,142430],{"class":207},[28,142609,2796],{"class":211},[28,142611,142612],{"class":30,"line":50},[28,142613,1643],{"class":211},[177,142615,142617],{"id":142616},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22075,142619,142621],{"id":142620},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142623,142624],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1540,142626],{"style":126459,"src":142627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22075,142629,142631],{"id":142630},"_18142-分页按钮","18.1.4.2 分页按钮",[1540,142633],{"style":126459,"src":142634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[18,142636,142638],{"className":126603,"code":142637,"language":126605,"meta":23,"style":23},"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",[25,142639,142640,142646,142662,142666,142670,142675,142681,142695,142700],{"__ignoreMap":23},[28,142641,142642,142644],{"class":30,"line":31},[28,142643,51662],{"class":51351},[28,142645,15649],{"class":211},[28,142647,142648,142650,142652,142655,142657,142660],{"class":30,"line":42},[28,142649,136587],{"class":38},[28,142651,51488],{"class":211},[28,142653,142654],{"class":38},"scale",[28,142656,212],{"class":211},[28,142658,142659],{"class":38},"1.2",[28,142661,2796],{"class":211},[28,142663,142664],{"class":30,"line":50},[28,142665,1643],{"class":211},[28,142667,142668],{"class":30,"line":58},[28,142669,136064],{"class":211},[28,142671,142672],{"class":30,"line":70},[28,142673,142674],{"class":269},"\u002F* 2D 缩放 *\u002F\n",[28,142676,142677,142679],{"class":30,"line":78},[28,142678,51662],{"class":51351},[28,142680,15649],{"class":211},[28,142682,142683,142685,142687,142689,142691,142693],{"class":30,"line":86},[28,142684,136587],{"class":38},[28,142686,51488],{"class":211},[28,142688,142654],{"class":38},[28,142690,212],{"class":211},[28,142692,142659],{"class":38},[28,142694,2796],{"class":211},[28,142696,142697],{"class":30,"line":97},[28,142698,142699],{"class":269},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[28,142701,142702],{"class":30,"line":108},[28,142703,1643],{"class":211},[14,142705,142706],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[18,142708,142710],{"className":126603,"code":142709,"language":126605,"meta":23,"style":23},"\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",[25,142711,142712,142717,142727,142748,142769,142773,142778,142784,142811],{"__ignoreMap":23},[28,142713,142714],{"class":30,"line":31},[28,142715,142716],{"class":269},"\u002F* 定义动画 *\u002F\n",[28,142718,142719,142722,142725],{"class":30,"line":42},[28,142720,142721],{"class":207},"@keyframes",[28,142723,142724],{"class":5293}," move",[28,142726,15649],{"class":211},[28,142728,142729,142732,142734,142736,142738,142741,142743,142745],{"class":30,"line":50},[28,142730,142731],{"class":34},"  0%",[28,142733,79858],{"class":211},[28,142735,48185],{"class":38},[28,142737,51488],{"class":211},[28,142739,142740],{"class":38},"translateX",[28,142742,212],{"class":211},[28,142744,401],{"class":38},[28,142746,142747],{"class":211},"); }\n",[28,142749,142750,142753,142755,142757,142759,142761,142763,142765,142767],{"class":30,"line":58},[28,142751,142752],{"class":34},"  100%",[28,142754,79858],{"class":211},[28,142756,48185],{"class":38},[28,142758,51488],{"class":211},[28,142760,142740],{"class":38},[28,142762,212],{"class":211},[28,142764,521],{"class":38},[28,142766,51543],{"class":207},[28,142768,142747],{"class":211},[28,142770,142771],{"class":30,"line":70},[28,142772,1643],{"class":211},[28,142774,142775],{"class":30,"line":78},[28,142776,142777],{"class":269},"\u002F* 调用动画 *\u002F\n",[28,142779,142780,142782],{"class":30,"line":86},[28,142781,51662],{"class":51351},[28,142783,15649],{"class":211},[28,142785,142786,142789,142791,142793,142795,142797,142799,142801,142803,142806,142809],{"class":30,"line":97},[28,142787,142788],{"class":38},"  animation",[28,142790,51488],{"class":211},[28,142792,135289],{"class":38},[28,142794,25189],{"class":38},[28,142796,905],{"class":207},[28,142798,78731],{"class":38},[28,142800,4170],{"class":38},[28,142802,905],{"class":207},[28,142804,142805],{"class":38}," infinite",[28,142807,142808],{"class":38}," alternate",[28,142810,1370],{"class":211},[28,142812,142813],{"class":30,"line":108},[28,142814,1643],{"class":211},[14,142816,142706],{},[18,142818,142821],{"className":142819,"code":142820,"language":5264},[5262],"\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",[25,142822,142820],{"__ignoreMap":23},[22075,142824,142826],{"id":142825},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142828,142829],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1540,142831],{"style":126459,"src":142832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[18,142834,142835],{"className":126603,"code":142709,"language":126605,"meta":23,"style":23},[25,142836,142837,142841,142849,142867,142887,142891,142895,142901,142925],{"__ignoreMap":23},[28,142838,142839],{"class":30,"line":31},[28,142840,142716],{"class":269},[28,142842,142843,142845,142847],{"class":30,"line":42},[28,142844,142721],{"class":207},[28,142846,142724],{"class":5293},[28,142848,15649],{"class":211},[28,142850,142851,142853,142855,142857,142859,142861,142863,142865],{"class":30,"line":50},[28,142852,142731],{"class":34},[28,142854,79858],{"class":211},[28,142856,48185],{"class":38},[28,142858,51488],{"class":211},[28,142860,142740],{"class":38},[28,142862,212],{"class":211},[28,142864,401],{"class":38},[28,142866,142747],{"class":211},[28,142868,142869,142871,142873,142875,142877,142879,142881,142883,142885],{"class":30,"line":58},[28,142870,142752],{"class":34},[28,142872,79858],{"class":211},[28,142874,48185],{"class":38},[28,142876,51488],{"class":211},[28,142878,142740],{"class":38},[28,142880,212],{"class":211},[28,142882,521],{"class":38},[28,142884,51543],{"class":207},[28,142886,142747],{"class":211},[28,142888,142889],{"class":30,"line":70},[28,142890,1643],{"class":211},[28,142892,142893],{"class":30,"line":78},[28,142894,142777],{"class":269},[28,142896,142897,142899],{"class":30,"line":86},[28,142898,51662],{"class":51351},[28,142900,15649],{"class":211},[28,142902,142903,142905,142907,142909,142911,142913,142915,142917,142919,142921,142923],{"class":30,"line":97},[28,142904,142788],{"class":38},[28,142906,51488],{"class":211},[28,142908,135289],{"class":38},[28,142910,25189],{"class":38},[28,142912,905],{"class":207},[28,142914,78731],{"class":38},[28,142916,4170],{"class":38},[28,142918,905],{"class":207},[28,142920,142805],{"class":38},[28,142922,142808],{"class":38},[28,142924,1370],{"class":211},[28,142926,142927],{"class":30,"line":108},[28,142928,1643],{"class":211},[14,142930,142931],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[177,142933,142935],{"id":142934},"_1823-知识点回顾","18.2.3 知识点回顾",[18,142937,142938],{"className":126603,"code":128772,"language":126605,"meta":23,"style":23},[25,142939,142940,142946,142956],{"__ignoreMap":23},[28,142941,142942,142944],{"class":30,"line":31},[28,142943,51662],{"class":51351},[28,142945,15649],{"class":211},[28,142947,142948,142950,142952,142954],{"class":30,"line":42},[28,142949,128785],{"class":38},[28,142951,51488],{"class":211},[28,142953,61787],{"class":38},[28,142955,1370],{"class":211},[28,142957,142958],{"class":30,"line":50},[28,142959,1643],{"class":211},[149,142961,142963],{"id":142962},"_183-3d-转换","18.3 3D 转换",[14,142965,142966],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[177,142968,142970],{"id":142969},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1540,142972],{"style":126459,"src":142973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[177,142975,142977],{"id":142976},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1540,142979],{"style":126459,"src":142980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142982,142983],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142985,142986],{},"translate3d的效果需要搭配透视perspective来使用",[1540,142988],{"style":126459,"src":142989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[177,142991,142993],{"id":142992},"_1833-透视-perspective","18.3.3 透视 perspective",[1540,142995],{"style":126459,"src":142996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142998,142999],{},"透视写在父盒子上，单位为像素",[177,143001,143003],{"id":143002},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22075,143005,143007],{"id":143006},"_18341-分开解释","18.3.4.1 分开解释",[1540,143009],{"style":126459,"src":143010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1540,143012],{"style":126459,"src":143013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1540,143015],{"style":126459,"src":143016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,143018,143019],{},"总结来说就是左手原则",[22075,143021,143023],{"id":143022},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1540,143025],{"style":126459,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[177,143028,143030],{"id":143029},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1540,143032],{"style":126459,"src":143033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1540,143035],{"style":126459,"src":143036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[18,143038,143040],{"className":126603,"code":143039,"language":126605,"meta":23,"style":23},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[25,143041,143042,143048,143061,143078],{"__ignoreMap":23},[28,143043,143044,143046],{"class":30,"line":31},[28,143045,51662],{"class":51351},[28,143047,15649],{"class":211},[28,143049,143050,143053,143055,143057,143059],{"class":30,"line":42},[28,143051,143052],{"class":38},"  perspective",[28,143054,51488],{"class":211},[28,143056,65125],{"class":38},[28,143058,51543],{"class":207},[28,143060,1370],{"class":211},[28,143062,143063,143065,143067,143070,143072,143074,143076],{"class":30,"line":50},[28,143064,136587],{"class":38},[28,143066,51488],{"class":211},[28,143068,143069],{"class":38},"rotateX",[28,143071,212],{"class":211},[28,143073,739],{"class":38},[28,143075,142430],{"class":207},[28,143077,2796],{"class":211},[28,143079,143080],{"class":30,"line":58},[28,143081,1643],{"class":211},[177,143083,143085],{"id":143084},"_1836-案例","18.3.6 案例",[22075,143087,143089],{"id":143088},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1540,143091],{"style":126459,"src":143092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1540,143094],{"style":126459,"src":143095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1540,143097],{"style":126459,"src":143098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[18,143100,143102],{"className":126603,"code":143101,"language":126605,"meta":23,"style":23},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[25,143103,143104,143109,143115,143127],{"__ignoreMap":23},[28,143105,143106],{"class":30,"line":31},[28,143107,143108],{"class":269},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[28,143110,143111,143113],{"class":30,"line":42},[28,143112,133600],{"class":34},[28,143114,15649],{"class":211},[28,143116,143117,143119,143121,143123,143125],{"class":30,"line":50},[28,143118,143052],{"class":38},[28,143120,51488],{"class":211},[28,143122,65125],{"class":38},[28,143124,51543],{"class":207},[28,143126,1370],{"class":211},[28,143128,143129],{"class":30,"line":58},[28,143130,1643],{"class":211},[22075,143132,143134],{"id":143133},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1540,143136],{"style":126459,"src":143137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[18,143139,143140],{"className":127350,"code":130707,"language":127352,"meta":23,"style":23},[25,143141,143142,143146,143160,143164],{"__ignoreMap":23},[28,143143,143144],{"class":30,"line":31},[28,143145,130714],{"class":269},[28,143147,143148,143150,143152,143154,143156,143158],{"class":30,"line":42},[28,143149,1120],{"class":211},[28,143151,51662],{"class":51351},[28,143153,53537],{"class":34},[28,143155,257],{"class":211},[28,143157,130727],{"class":64},[28,143159,51358],{"class":211},[28,143161,143162],{"class":30,"line":50},[28,143163,130734],{"class":211},[28,143165,143166,143168,143170],{"class":30,"line":58},[28,143167,51836],{"class":211},[28,143169,51662],{"class":51351},[28,143171,51358],{"class":211},[22075,143173,143175],{"id":143174},"_18363-旋转木马","18.3.6.3 旋转木马",[1540,143177],{"style":126459,"src":143178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[18,143180,143181],{"className":126603,"code":142406,"language":126605,"meta":23,"style":23},[25,143182,143183,143189,143205],{"__ignoreMap":23},[28,143184,143185,143187],{"class":30,"line":31},[28,143186,51662],{"class":51351},[28,143188,15649],{"class":211},[28,143190,143191,143193,143195,143197,143199,143201,143203],{"class":30,"line":42},[28,143192,136587],{"class":38},[28,143194,51488],{"class":211},[28,143196,142423],{"class":38},[28,143198,212],{"class":211},[28,143200,739],{"class":38},[28,143202,142430],{"class":207},[28,143204,2796],{"class":211},[28,143206,143207],{"class":30,"line":50},[28,143208,1643],{"class":211},[126,143210,143211],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":23,"searchDepth":42,"depth":42,"links":143213},[143214,143221],{"id":142309,"depth":42,"text":142310,"children":143215},[143216,143217,143218,143219,143220],{"id":142333,"depth":50,"text":142334},{"id":142388,"depth":50,"text":142389},{"id":142513,"depth":50,"text":142514},{"id":142616,"depth":50,"text":142617},{"id":142934,"depth":50,"text":142935},{"id":142962,"depth":42,"text":142963,"children":143222},[143223,143224,143225,143226,143227,143228],{"id":142969,"depth":50,"text":142970},{"id":142976,"depth":50,"text":142977},{"id":142992,"depth":50,"text":142993},{"id":143002,"depth":50,"text":143003},{"id":143029,"depth":50,"text":143030},{"id":143084,"depth":50,"text":143085},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142301,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143235,"title":143236,"body":143237,"description":131,"extension":132,"meta":143440,"navigation":134,"path":143441,"seo":143442,"stem":143443,"__hash__":143444},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143238,"toc":143429},[143239,143242,143246,143249,143252,143256,143259,143262,143265,143269,143272,143276,143279,143283,143286,143290,143304,143308,143333,143336,143339,143356,143360,143364,143367,143370,143374,143377,143380,143398,143402,143405,143419,143423,143426],[10,143240,143236],{"id":143241},"_19-移动端基础-前缀现状与视口",[149,143243,143245],{"id":143244},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1540,143247],{"style":126459,"src":143248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143250,143251],{},"意思就是加个前缀，增加兼容性",[149,143253,143255],{"id":143254},"_192-移动端现状认识","19.2 移动端现状认识",[1540,143257],{"style":126459,"src":143258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143260,143261],{},"调试方法：",[1540,143263],{"style":126459,"src":143264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[149,143266,143268],{"id":143267},"_193-视口","19.3 视口",[14,143270,143271],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[177,143273,143275],{"id":143274},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1540,143277],{"style":126459,"src":143278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[177,143280,143282],{"id":143281},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1540,143284],{"style":126459,"src":143285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[177,143287,143289],{"id":143288},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[116,143291,143292,143295,143298,143301],{},[119,143293,143294],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[119,143296,143297],{},"理想视口，对设备来讲，是最理想的视口尺寸",[119,143299,143300],{},"需要手动添写meta视口标签通知浏览器操作",[119,143302,143303],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[177,143305,143307],{"id":143306},"_1934-meta视口标签","19.3.4 meta视口标签",[18,143309,143311],{"className":127350,"code":143310,"language":127352,"meta":23,"style":23},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[25,143312,143313],{"__ignoreMap":23},[28,143314,143315,143317,143319,143321,143323,143325,143327,143329,143331],{"class":30,"line":31},[28,143316,1120],{"class":211},[28,143318,51395],{"class":51351},[28,143320,14997],{"class":34},[28,143322,257],{"class":211},[28,143324,51442],{"class":64},[28,143326,51422],{"class":34},[28,143328,257],{"class":211},[28,143330,51449],{"class":64},[28,143332,51358],{"class":211},[1540,143334],{"style":126459,"src":143335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143337,143338],{},"标准视口设置：",[161,143340,143341,143344,143347,143350,143353],{},[119,143342,143343],{},"视口宽度和设备保持一致",[119,143345,143346],{},"视口的默认缩放比例1.0",[119,143348,143349],{},"不允许用户自行缩放",[119,143351,143352],{},"最大允许的缩放比例1.0",[119,143354,143355],{},"最小允许的缩放比例1.0",[177,143357,143359],{"id":143358},"_1935-二倍图","19.3.5 二倍图",[22075,143361,143363],{"id":143362},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1540,143365],{"style":126459,"src":143366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1540,143368],{"style":126459,"src":143369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22075,143371,143373],{"id":143372},"_19352-多倍图","19.3.5.2 多倍图",[1540,143375],{"style":126459,"src":143376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143378,143379],{},"二倍图法，代码如下：",[18,143381,143383],{"className":126603,"code":143382,"language":126605,"meta":23,"style":23},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[25,143384,143385,143390],{"__ignoreMap":23},[28,143386,143387],{"class":30,"line":31},[28,143388,143389],{"class":269},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[28,143391,143392,143395],{"class":30,"line":42},[28,143393,143394],{"class":51351},"background-size",[28,143396,143397],{"class":211},": 50% 50%;\n",[22075,143399,143401],{"id":143400},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1540,143403],{"style":126459,"src":143404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[161,143406,143407,143410,143413,143416],{},[119,143408,143409],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[119,143411,143412],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[119,143414,143415],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[119,143417,143418],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22075,143420,143422],{"id":143421},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1540,143424],{"style":126459,"src":143425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[126,143427,143428],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":23,"searchDepth":42,"depth":42,"links":143430},[143431,143432,143433],{"id":143244,"depth":42,"text":143245},{"id":143254,"depth":42,"text":143255},{"id":143267,"depth":42,"text":143268,"children":143434},[143435,143436,143437,143438,143439],{"id":143274,"depth":50,"text":143275},{"id":143281,"depth":50,"text":143282},{"id":143288,"depth":50,"text":143289},{"id":143306,"depth":50,"text":143307},{"id":143358,"depth":50,"text":143359},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143236,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143446,"title":143447,"body":143448,"description":131,"extension":132,"meta":144325,"navigation":134,"path":144326,"seo":144327,"stem":144328,"__hash__":144329},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143449,"toc":144309},[143450,143453,143457,143464,143467,143474,143477,143482,143485,143489,143493,143500,143503,143506,143510,143513,143516,143519,143522,143525,143529,143532,143536,143538,143541,143544,143547,143550,143552,143555,143557,143587,143589,143619,143623,143626,143630,143633,143650,143653,143656,143732,143734,143737,143740,143743,143746,143748,143751,143754,143758,143780,143783,143786,143790,143793,143799,143802,143806,143809,143812,143816,143819,143822,143825,143829,143832,143835,143838,143841,143845,143848,143852,143859,143862,143865,143868,143871,143881,143884,143887,143894,143897,143901,143904,143907,143911,143914,143917,143920,143965,143968,143971,143974,143976,144105,144107,144145,144148,144151,144153,144271,144273,144307],[10,143451,143447],{"id":143452},"_20-移动端布局实战上篇",[149,143454,143456],{"id":143455},"_201-移动端主流方案","20.1 移动端主流方案",[161,143458,143459],{},[119,143460,143461],{},[359,143462,143463],{},"单独移动端页面（主流）",[1540,143465],{"style":126459,"src":143466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[161,143468,143469],{"start":42},[119,143470,143471],{},[359,143472,143473],{},"响应式兼容PC移动端",[1540,143475],{"style":126459,"src":143476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[161,143478,143479],{"start":50},[119,143480,143481],{},"两种页面选型布局方式",[1540,143483],{"style":126459,"src":143484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[149,143486,143488],{"id":143487},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[177,143490,143492],{"id":143491},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143494,143495,143496],{},"官网地址： ",[448,143497,143498],{"href":143498,"rel":143499},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23940],[1540,143501],{"style":126459,"src":143502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1540,143504],{"style":126459,"src":143505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[177,143507,143509],{"id":143508},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1540,143511],{"style":126459,"src":143512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1540,143514],{"style":126459,"src":143515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143517,143518],{},"去除高亮：",[14,143520,143521],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143523,143524],{},"-webkit- tap-highlight-color: transparent;",[149,143526,143528],{"id":143527},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1540,143530],{"style":126459,"src":143531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[149,143533,143535],{"id":143534},"_204-流式布局案例","20.4 流式布局案例",[14,143537,241],{},[14,143539,143540],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143542,143543],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143545,143546],{},"图片格式：",[1540,143548],{"style":126459,"src":143549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143551,135646],{},[1540,143553],{"style":126459,"src":143554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143556,139973],{},[18,143558,143559],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,143560,143561],{"__ignoreMap":23},[28,143562,143563,143565,143567,143569,143571,143573,143575,143577,143579,143581,143583,143585],{"class":30,"line":31},[28,143564,1120],{"class":211},[28,143566,1540],{"class":51351},[28,143568,55290],{"class":34},[28,143570,257],{"class":211},[28,143572,134120],{"class":64},[28,143574,55298],{"class":34},[28,143576,257],{"class":211},[28,143578,134127],{"class":64},[28,143580,134130],{"class":34},[28,143582,257],{"class":211},[28,143584,134135],{"class":64},[28,143586,51358],{"class":211},[14,143588,140062],{},[18,143590,143591],{"className":127350,"code":134105,"language":127352,"meta":23,"style":23},[25,143592,143593],{"__ignoreMap":23},[28,143594,143595,143597,143599,143601,143603,143605,143607,143609,143611,143613,143615,143617],{"class":30,"line":31},[28,143596,1120],{"class":211},[28,143598,1540],{"class":51351},[28,143600,55290],{"class":34},[28,143602,257],{"class":211},[28,143604,134120],{"class":64},[28,143606,55298],{"class":34},[28,143608,257],{"class":211},[28,143610,134127],{"class":64},[28,143612,134130],{"class":34},[28,143614,257],{"class":211},[28,143616,134135],{"class":64},[28,143618,51358],{"class":211},[149,143620,143622],{"id":143621},"_205-flex布局","20.5 flex布局",[1540,143624],{"style":126459,"src":143625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[177,143627,143629],{"id":143628},"_2051-布局原理","20.5.1 布局原理",[14,143631,143632],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[116,143634,143635,143638,143641,143644,143647],{},[119,143636,143637],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[119,143639,143640],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[119,143642,143643],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[119,143645,143646],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[119,143648,143649],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143651,143652],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143654,143655],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[18,143657,143659],{"className":126603,"code":143658,"language":126605,"meta":23,"style":23},"\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",[25,143660,143661,143666,143673,143683,143695,143706,143717,143728],{"__ignoreMap":23},[28,143662,143663],{"class":30,"line":31},[28,143664,143665],{"class":269},"\u002F* Flex 弹性布局 *\u002F\n",[28,143667,143668,143671],{"class":30,"line":42},[28,143669,143670],{"class":34},".container",[28,143672,15649],{"class":211},[28,143674,143675,143677,143679,143681],{"class":30,"line":50},[28,143676,128219],{"class":38},[28,143678,51488],{"class":211},[28,143680,51528],{"class":38},[28,143682,1370],{"class":211},[28,143684,143685,143688,143690,143693],{"class":30,"line":58},[28,143686,143687],{"class":38},"  flex-direction",[28,143689,51488],{"class":211},[28,143691,143692],{"class":38},"row",[28,143694,1370],{"class":211},[28,143696,143697,143700,143702,143704],{"class":30,"line":70},[28,143698,143699],{"class":38},"  justify-content",[28,143701,51488],{"class":211},[28,143703,51719],{"class":38},[28,143705,1370],{"class":211},[28,143707,143708,143711,143713,143715],{"class":30,"line":78},[28,143709,143710],{"class":38},"  align-items",[28,143712,51488],{"class":211},[28,143714,51643],{"class":38},[28,143716,1370],{"class":211},[28,143718,143719,143722,143724,143726],{"class":30,"line":86},[28,143720,143721],{"class":38},"  flex-wrap",[28,143723,51488],{"class":211},[28,143725,78661],{"class":38},[28,143727,1370],{"class":211},[28,143729,143730],{"class":30,"line":97},[28,143731,1643],{"class":211},[14,143733,70504],{},[14,143735,143736],{},".form-item .male-label {",[14,143738,143739],{},"   margin-right: 20px;",[14,143741,143742],{},"   display: inline-flex;",[14,143744,143745],{},"   align-items: center;",[14,143747,1156],{},[1540,143749],{"style":126459,"src":143750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1540,143752],{"style":126459,"src":143753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[177,143755,143757],{"id":143756},"_2052-常见父项属性","20.5.2 常见父项属性",[161,143759,143760,143763,143766,143769,143772,143775,143778],{},[119,143761,143762],{},"flex-direction：设置主轴的方向",[119,143764,143765],{},"justify-content：设置主轴上的子元素排列方式",[119,143767,143768],{},"flex-wrap：设置子元素是否换行",[119,143770,143771],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[119,143773,143774],{},"align-items：设置侧轴上的子元素排列方式（单行）",[119,143776,143777],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[119,143779,143762],{},[1540,143781],{"style":126459,"src":143782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1540,143784],{"style":126459,"src":143785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[161,143787,143788],{"start":42},[119,143789,143765],{},[1540,143791],{"style":126459,"src":143792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143794,143795,143798],{},[25,143796,143797],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143800,143801],{},"跟着主轴走",[161,143803,143804],{"start":50},[119,143805,143768],{},[1540,143807],{"style":126459,"src":143808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143810,143811],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[161,143813,143814],{"start":58},[119,143815,143771],{},[1540,143817],{"style":126459,"src":143818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143820,143821],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143823,143824],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[161,143826,143827],{"start":70},[119,143828,143774],{},[1540,143830],{"style":126459,"src":143831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143833,143834],{},"align-items与align-content之间的区别：",[14,143836,143837],{},"单找items，多找content",[1540,143839],{"style":126459,"src":143840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[161,143842,143843],{"start":78},[119,143844,143777],{},[1540,143846],{"style":126459,"src":143847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[177,143849,143851],{"id":143850},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[161,143853,143854],{},[119,143855,143856],{},[359,143857,143858],{},"flex 属性",[14,143860,143861],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1540,143863],{"style":126459,"src":143864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143866,143867],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143869,143870],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[161,143872,143873],{"start":42},[119,143874,143875,13872,143878],{},[359,143876,143877],{},"align-self",[359,143879,143880],{},"控制子项自己在侧轴上的排列方式",[1540,143882],{"style":126459,"src":143883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143885,143886],{},"单个子盒子在父盒子侧轴上的排列方式",[161,143888,143889],{"start":50},[119,143890,143891,143893],{},[359,143892,95348],{}," 属性定义项目的排列顺序",[1540,143895],{"style":126459,"src":143896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[177,143898,143900],{"id":143899},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1540,143902],{"style":126459,"src":143903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143905,143906],{},"必须要添加浏览器的私有前缀",[177,143908,143910],{"id":143909},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143912,143913],{},"学到最重要的知识：",[14,143915,143916],{},"flex处理这样的布局思路",[1540,143918],{"style":126459,"src":143919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[18,143921,143923],{"className":126603,"code":143922,"language":126605,"meta":23,"style":23},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[25,143924,143925,143931,143941,143951,143961],{"__ignoreMap":23},[28,143926,143927,143929],{"class":30,"line":31},[28,143928,143670],{"class":34},[28,143930,15649],{"class":211},[28,143932,143933,143935,143937,143939],{"class":30,"line":42},[28,143934,128219],{"class":38},[28,143936,51488],{"class":211},[28,143938,51528],{"class":38},[28,143940,1370],{"class":211},[28,143942,143943,143945,143947,143949],{"class":30,"line":50},[28,143944,143699],{"class":38},[28,143946,51488],{"class":211},[28,143948,51643],{"class":38},[28,143950,1370],{"class":211},[28,143952,143953,143955,143957,143959],{"class":30,"line":58},[28,143954,143710],{"class":38},[28,143956,51488],{"class":211},[28,143958,51643],{"class":38},[28,143960,1370],{"class":211},[28,143962,143963],{"class":30,"line":70},[28,143964,1643],{"class":211},[14,143966,143967],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143969,143970],{},"使用属性选择器",[1540,143972],{"style":126459,"src":143973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143975,68940],{},[18,143977,143979],{"className":127350,"code":143978,"language":127352,"meta":23,"style":23},"\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",[25,143980,143981,143986,144000,144005,144025,144030,144049,144054,144073,144078,144097],{"__ignoreMap":23},[28,143982,143983],{"class":30,"line":31},[28,143984,143985],{"class":269},"\u003C!-- 携程网移动端案例结构 -->\n",[28,143987,143988,143990,143992,143994,143996,143998],{"class":30,"line":42},[28,143989,1120],{"class":211},[28,143991,51662],{"class":51351},[28,143993,53537],{"class":34},[28,143995,257],{"class":211},[28,143997,92374],{"class":64},[28,143999,51358],{"class":211},[28,144001,144002],{"class":30,"line":50},[28,144003,144004],{"class":269},"  \u003C!-- 搜索栏 -->\n",[28,144006,144007,144009,144011,144013,144015,144018,144021,144023],{"class":30,"line":58},[28,144008,52195],{"class":211},[28,144010,51662],{"class":51351},[28,144012,53537],{"class":34},[28,144014,257],{"class":211},[28,144016,144017],{"class":64},"\"search-index\"",[28,144019,144020],{"class":211},">...\u003C\u002F",[28,144022,51662],{"class":51351},[28,144024,51358],{"class":211},[28,144026,144027],{"class":30,"line":70},[28,144028,144029],{"class":269},"  \u003C!-- 焦点图 -->\n",[28,144031,144032,144034,144036,144038,144040,144043,144045,144047],{"class":30,"line":78},[28,144033,52195],{"class":211},[28,144035,51662],{"class":51351},[28,144037,53537],{"class":34},[28,144039,257],{"class":211},[28,144041,144042],{"class":64},"\"focus\"",[28,144044,144020],{"class":211},[28,144046,51662],{"class":51351},[28,144048,51358],{"class":211},[28,144050,144051],{"class":30,"line":86},[28,144052,144053],{"class":269},"  \u003C!-- 主导航 -->\n",[28,144055,144056,144058,144060,144062,144064,144067,144069,144071],{"class":30,"line":97},[28,144057,52195],{"class":211},[28,144059,51662],{"class":51351},[28,144061,53537],{"class":34},[28,144063,257],{"class":211},[28,144065,144066],{"class":64},"\"local-nav\"",[28,144068,144020],{"class":211},[28,144070,51662],{"class":51351},[28,144072,51358],{"class":211},[28,144074,144075],{"class":30,"line":108},[28,144076,144077],{"class":269},"  \u003C!-- 子导航 -->\n",[28,144079,144080,144082,144084,144086,144088,144091,144093,144095],{"class":30,"line":1407},[28,144081,52195],{"class":211},[28,144083,51662],{"class":51351},[28,144085,53537],{"class":34},[28,144087,257],{"class":211},[28,144089,144090],{"class":64},"\"nav-common\"",[28,144092,144020],{"class":211},[28,144094,51662],{"class":51351},[28,144096,51358],{"class":211},[28,144098,144099,144101,144103],{"class":30,"line":1690},[28,144100,51836],{"class":211},[28,144102,51662],{"class":51351},[28,144104,51358],{"class":211},[14,144106,70504],{},[18,144108,144109],{"className":126603,"code":137055,"language":126605,"meta":23,"style":23},[25,144110,144111,144125,144141],{"__ignoreMap":23},[28,144112,144113,144115,144117,144119,144121,144123],{"class":30,"line":31},[28,144114,53872],{"class":51351},[28,144116,1100],{"class":211},[28,144118,103158],{"class":34},[28,144120,257],{"class":207},[28,144122,62750],{"class":64},[28,144124,137072],{"class":211},[28,144126,144127,144129,144131,144133,144135,144137,144139],{"class":30,"line":42},[28,144128,70947],{"class":38},[28,144130,51488],{"class":211},[28,144132,427],{"class":38},[28,144134,51543],{"class":207},[28,144136,51572],{"class":38},[28,144138,130183],{"class":38},[28,144140,1370],{"class":211},[28,144142,144143],{"class":30,"line":50},[28,144144,1643],{"class":211},[14,144146,144147],{},"总代码和效果展示：",[1540,144149],{"style":126459,"src":144150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144152,68940],{},[18,144154,144155],{"className":127350,"code":143978,"language":127352,"meta":23,"style":23},[25,144156,144157,144161,144175,144179,144197,144201,144219,144223,144241,144245,144263],{"__ignoreMap":23},[28,144158,144159],{"class":30,"line":31},[28,144160,143985],{"class":269},[28,144162,144163,144165,144167,144169,144171,144173],{"class":30,"line":42},[28,144164,1120],{"class":211},[28,144166,51662],{"class":51351},[28,144168,53537],{"class":34},[28,144170,257],{"class":211},[28,144172,92374],{"class":64},[28,144174,51358],{"class":211},[28,144176,144177],{"class":30,"line":50},[28,144178,144004],{"class":269},[28,144180,144181,144183,144185,144187,144189,144191,144193,144195],{"class":30,"line":58},[28,144182,52195],{"class":211},[28,144184,51662],{"class":51351},[28,144186,53537],{"class":34},[28,144188,257],{"class":211},[28,144190,144017],{"class":64},[28,144192,144020],{"class":211},[28,144194,51662],{"class":51351},[28,144196,51358],{"class":211},[28,144198,144199],{"class":30,"line":70},[28,144200,144029],{"class":269},[28,144202,144203,144205,144207,144209,144211,144213,144215,144217],{"class":30,"line":78},[28,144204,52195],{"class":211},[28,144206,51662],{"class":51351},[28,144208,53537],{"class":34},[28,144210,257],{"class":211},[28,144212,144042],{"class":64},[28,144214,144020],{"class":211},[28,144216,51662],{"class":51351},[28,144218,51358],{"class":211},[28,144220,144221],{"class":30,"line":86},[28,144222,144053],{"class":269},[28,144224,144225,144227,144229,144231,144233,144235,144237,144239],{"class":30,"line":97},[28,144226,52195],{"class":211},[28,144228,51662],{"class":51351},[28,144230,53537],{"class":34},[28,144232,257],{"class":211},[28,144234,144066],{"class":64},[28,144236,144020],{"class":211},[28,144238,51662],{"class":51351},[28,144240,51358],{"class":211},[28,144242,144243],{"class":30,"line":108},[28,144244,144077],{"class":269},[28,144246,144247,144249,144251,144253,144255,144257,144259,144261],{"class":30,"line":1407},[28,144248,52195],{"class":211},[28,144250,51662],{"class":51351},[28,144252,53537],{"class":34},[28,144254,257],{"class":211},[28,144256,144090],{"class":64},[28,144258,144020],{"class":211},[28,144260,51662],{"class":51351},[28,144262,51358],{"class":211},[28,144264,144265,144267,144269],{"class":30,"line":1690},[28,144266,51836],{"class":211},[28,144268,51662],{"class":51351},[28,144270,51358],{"class":211},[14,144272,70504],{},[18,144274,144275],{"className":127350,"code":130707,"language":127352,"meta":23,"style":23},[25,144276,144277,144281,144295,144299],{"__ignoreMap":23},[28,144278,144279],{"class":30,"line":31},[28,144280,130714],{"class":269},[28,144282,144283,144285,144287,144289,144291,144293],{"class":30,"line":42},[28,144284,1120],{"class":211},[28,144286,51662],{"class":51351},[28,144288,53537],{"class":34},[28,144290,257],{"class":211},[28,144292,130727],{"class":64},[28,144294,51358],{"class":211},[28,144296,144297],{"class":30,"line":50},[28,144298,130734],{"class":211},[28,144300,144301,144303,144305],{"class":30,"line":58},[28,144302,51836],{"class":211},[28,144304,51662],{"class":51351},[28,144306,51358],{"class":211},[126,144308,138004],{},{"title":23,"searchDepth":42,"depth":42,"links":144310},[144311,144312,144316,144317,144318],{"id":143455,"depth":42,"text":143456},{"id":143487,"depth":42,"text":143488,"children":144313},[144314,144315],{"id":143491,"depth":50,"text":143492},{"id":143508,"depth":50,"text":143509},{"id":143527,"depth":42,"text":143528},{"id":143534,"depth":42,"text":143535},{"id":143621,"depth":42,"text":143622,"children":144319},[144320,144321,144322,144323,144324],{"id":143628,"depth":50,"text":143629},{"id":143756,"depth":50,"text":143757},{"id":143850,"depth":50,"text":143851},{"id":143899,"depth":50,"text":143900},{"id":143909,"depth":50,"text":143910},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143447,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144331,"title":144332,"body":144333,"description":131,"extension":132,"meta":145560,"navigation":134,"path":145561,"seo":145562,"stem":145563,"__hash__":145564},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144334,"toc":145538},[144335,144338,144342,144346,144349,144352,144356,144361,144364,144367,144370,144373,144376,144433,144436,144441,144444,144447,144451,144462,144466,144469,144472,144479,144484,144488,144491,144497,144500,144504,144507,144514,144517,144520,144527,144530,144537,144540,144543,144550,144553,144556,144558,144575,144579,144582,144585,144588,144592,144595,144598,144601,144604,144607,144610,144612,144615,144618,144680,144683,144793,144800,144806,144809,144812,144816,144819,144823,144828,144831,144838,144841,144847,144852,144855,144858,144861,144864,144867,144870,144873,144876,144932,144934,144960,144964,144967,144970,144973,144981,144984,144987,144991,145047,145050,145054,145060,145071,145074,145079,145082,145085,145091,145094,145097,145100,145103,145106,145109,145112,145115,145140,145146,145149,145152,145155,145158,145161,145164,145169,145172,145175,145178,145186,145189,145196,145199,145202,145204,145228,145230,145233,145236,145239,145242,145245,145248,145251,145285,145288,145291,145325,145332,145335,145338,145341,145344,145347,145350,145357,145360,145363,145366,145369,145376,145379,145382,145389,145392,145395,145399,145402,145405,145408,145411,145414,145417,145420,145423,145425,145449,145451,145475,145479,145490,145493,145496,145499,145502,145505,145508,145511,145514,145517,145520,145523,145526,145529,145532,145535],[10,144336,144332],{"id":144337},"_21-移动端布局实战下篇",[149,144339,144341],{"id":144340},"_211-rem适配布局","21.1 rem适配布局",[177,144343,144345],{"id":144344},"_2111-rem单位","21.1.1 rem单位",[1540,144347],{"style":126459,"src":144348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144350,144351],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[177,144353,144355],{"id":144354},"_2112-媒体查询","21.1.2 媒体查询",[161,144357,144358],{},[119,144359,144360],{},"参数介绍",[1540,144362],{"style":126459,"src":144363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1540,144365],{"style":126459,"src":144366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1540,144368],{"style":126459,"src":144369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1540,144371],{"style":126459,"src":144372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1540,144374],{"style":126459,"src":144375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[18,144377,144379],{"className":126603,"code":144378,"language":126605,"meta":23,"style":23},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[25,144380,144381,144386,144405,144412,144425,144429],{"__ignoreMap":23},[28,144382,144383],{"class":30,"line":31},[28,144384,144385],{"class":269},"\u002F* 媒体查询 *\u002F\n",[28,144387,144388,144391,144393,144396,144398,144401,144403],{"class":30,"line":42},[28,144389,144390],{"class":207},"@media",[28,144392,1736],{"class":211},[28,144394,144395],{"class":38},"max-width",[28,144397,51488],{"class":211},[28,144399,144400],{"class":38},"768",[28,144402,51543],{"class":207},[28,144404,12519],{"class":211},[28,144406,144407,144410],{"class":30,"line":50},[28,144408,144409],{"class":34},"  .container",[28,144411,15649],{"class":211},[28,144413,144414,144417,144419,144421,144423],{"class":30,"line":58},[28,144415,144416],{"class":38},"    width",[28,144418,51488],{"class":211},[28,144420,521],{"class":38},[28,144422,538],{"class":207},[28,144424,1370],{"class":211},[28,144426,144427],{"class":30,"line":70},[28,144428,127399],{"class":211},[28,144430,144431],{"class":30,"line":78},[28,144432,1643],{"class":211},[14,144434,144435],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[161,144437,144438],{"start":42},[119,144439,144440],{},"引入资源",[1540,144442],{"style":126459,"src":144443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144445,144446],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[177,144448,144450],{"id":144449},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[116,144452,144453,144456,144459],{},[119,144454,144455],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[119,144457,144458],{},"媒体查询可以根据不同设备宽度来修改样式",[119,144460,144461],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[149,144463,144465],{"id":144464},"_212-less基础","21.2 Less基础",[14,144467,144468],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144470,144471],{},"Less可以解决该问题，它是css的扩展语言",[14,144473,144474,144475],{},"Less中文网址： ",[448,144476,144477],{"href":144477,"rel":144478},"http:\u002F\u002Flesscss.cn\u002F",[23940],[14,144480,144481],{},[359,144482,144483],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[177,144485,144487],{"id":144486},"_2121-less安装","21.2.1 less安装",[14,144489,144490],{},"如果使用vscode，则无需进行下方安装步骤",[14,144492,144493],{},[448,144494,144495],{"href":144495,"rel":144496},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23940],[1540,144498],{"style":126459,"src":144499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[177,144501,144503],{"id":144502},"_2122-less使用","21.2.2 less使用",[14,144505,144506],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[161,144508,144509],{},[119,144510,144511],{},[359,144512,144513],{},"Less 变量",[1540,144515],{"style":126459,"src":144516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1540,144518],{"style":126459,"src":144519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[161,144521,144522],{"start":42},[119,144523,144524],{},[359,144525,144526],{},"Less 编译",[1540,144528],{"style":126459,"src":144529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[161,144531,144532],{"start":50},[119,144533,144534],{},[359,144535,144536],{},"Less 嵌套",[1540,144538],{"style":126459,"src":144539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1540,144541],{"style":126459,"src":144542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[161,144544,144545],{"start":58},[119,144546,144547],{},[359,144548,144549],{},"Less 运算",[1540,144551],{"style":126459,"src":144552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144554,144555],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144557,241],{},[116,144559,144560,144563,144566,144569,144572],{},[119,144561,144562],{},"乘号（*）和除号（\u002F）的写法",[119,144564,144565],{},"运算符中间左右有个空格隔开 1px + 5",[119,144567,144568],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[119,144570,144571],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[119,144573,144574],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[149,144576,144578],{"id":144577},"_213-rem-适配方案","21.3 rem 适配方案",[14,144580,144581],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144583,144584],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1540,144586],{"style":126459,"src":144587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[177,144589,144591],{"id":144590},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144593,144594],{},"rem + 媒体查询 + less 技术",[1540,144596],{"style":126459,"src":144597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144599,144600],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144602,144603],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1540,144605],{"style":126459,"src":144606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144608,144609],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144611,14710],{},[1540,144613],{"style":126459,"src":144614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144616,144617],{},"index.html:",[18,144619,144621],{"className":126603,"code":144620,"language":126605,"meta":23,"style":23},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[25,144622,144623,144628,144634,144650,144654,144660,144676],{"__ignoreMap":23},[28,144624,144625],{"class":30,"line":31},[28,144626,144627],{"class":269},"\u002F* rem 适配方案 *\u002F\n",[28,144629,144630,144632],{"class":30,"line":42},[28,144631,50686],{"class":51351},[28,144633,15649],{"class":211},[28,144635,144636,144638,144640,144643,144645,144647],{"class":30,"line":50},[28,144637,70677],{"class":38},[28,144639,51488],{"class":211},[28,144641,144642],{"class":38},"62.5",[28,144644,538],{"class":207},[28,144646,130466],{"class":211},[28,144648,144649],{"class":269},"\u002F* 1rem = 10px *\u002F\n",[28,144651,144652],{"class":30,"line":58},[28,144653,1643],{"class":211},[28,144655,144656,144658],{"class":30,"line":70},[28,144657,130451],{"class":34},[28,144659,15649],{"class":211},[28,144661,144662,144664,144666,144668,144671,144673],{"class":30,"line":78},[28,144663,70619],{"class":38},[28,144665,51488],{"class":211},[28,144667,656],{"class":38},[28,144669,144670],{"class":207},"rem",[28,144672,130466],{"class":211},[28,144674,144675],{"class":269},"\u002F* 100px *\u002F\n",[28,144677,144678],{"class":30,"line":86},[28,144679,1643],{"class":211},[14,144681,144682],{},"common.less",[18,144684,144686],{"className":126603,"code":144685,"language":126605,"meta":23,"style":23},"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",[25,144687,144688,144694,144709,144713,144719,144733,144737,144741,144745,144751,144765,144769,144775,144789],{"__ignoreMap":23},[28,144689,144690,144692],{"class":30,"line":31},[28,144691,50686],{"class":51351},[28,144693,15649],{"class":211},[28,144695,144696,144698,144700,144702,144704,144706],{"class":30,"line":42},[28,144697,70677],{"class":38},[28,144699,51488],{"class":211},[28,144701,144642],{"class":38},[28,144703,538],{"class":207},[28,144705,26118],{"class":211},[28,144707,144708],{"class":269},"\u002F* 10px *\u002F\n",[28,144710,144711],{"class":30,"line":50},[28,144712,1643],{"class":211},[28,144714,144715,144717],{"class":30,"line":58},[28,144716,51662],{"class":51351},[28,144718,15649],{"class":211},[28,144720,144721,144723,144725,144727,144729,144731],{"class":30,"line":70},[28,144722,70619],{"class":38},[28,144724,51488],{"class":211},[28,144726,656],{"class":38},[28,144728,144670],{"class":207},[28,144730,26118],{"class":211},[28,144732,144675],{"class":269},[28,144734,144735],{"class":30,"line":78},[28,144736,1643],{"class":211},[28,144738,144739],{"class":30,"line":86},[28,144740,136064],{"class":211},[28,144742,144743],{"class":30,"line":97},[28,144744,144627],{"class":269},[28,144746,144747,144749],{"class":30,"line":108},[28,144748,50686],{"class":51351},[28,144750,15649],{"class":211},[28,144752,144753,144755,144757,144759,144761,144763],{"class":30,"line":1407},[28,144754,70677],{"class":38},[28,144756,51488],{"class":211},[28,144758,144642],{"class":38},[28,144760,538],{"class":207},[28,144762,130466],{"class":211},[28,144764,144649],{"class":269},[28,144766,144767],{"class":30,"line":1690},[28,144768,1643],{"class":211},[28,144770,144771,144773],{"class":30,"line":1695},[28,144772,130451],{"class":34},[28,144774,15649],{"class":211},[28,144776,144777,144779,144781,144783,144785,144787],{"class":30,"line":1701},[28,144778,70619],{"class":38},[28,144780,51488],{"class":211},[28,144782,656],{"class":38},[28,144784,144670],{"class":207},[28,144786,130466],{"class":211},[28,144788,144675],{"class":269},[28,144790,144791],{"class":30,"line":1706},[28,144792,1643],{"class":211},[14,144794,144795,144796,144799],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23630,144797,144798],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[18,144801,144804],{"className":144802,"code":144803,"language":5264},[5262],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[25,144805,144803],{"__ignoreMap":23},[14,144807,144808],{},"less保存时会自动变成.css文件",[14,144810,144811],{},"好好搞懂上述代码写法",[177,144813,144815],{"id":144814},"_2132-样式导入样式","21.3.2 样式导入样式",[1540,144817],{"style":126459,"src":144818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[177,144820,144822],{"id":144821},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[161,144824,144825],{},[119,144826,144827],{},"准备工作",[1540,144829],{"style":126459,"src":144830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144832,144833,144834],{},"github地址：",[448,144835,144836],{"href":144836,"rel":144837},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23940],[14,144839,144840],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144842,144843,144844],{},"js文件引入到index.html中使用的是",[25,144845,144846],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[161,144848,144849],{"start":42},[119,144850,144851],{},"vscode插件",[1540,144853],{"style":126459,"src":144854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144856,144857],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144859,144860],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1540,144862],{"style":126459,"src":144863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144865,144866],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1540,144868],{"style":126459,"src":144869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144871,144872],{},"修改成75就可以，alt+z为快捷键",[14,144874,144875],{},"index.css：",[18,144877,144878],{"className":126603,"code":144620,"language":126605,"meta":23,"style":23},[25,144879,144880,144884,144890,144904,144908,144914,144928],{"__ignoreMap":23},[28,144881,144882],{"class":30,"line":31},[28,144883,144627],{"class":269},[28,144885,144886,144888],{"class":30,"line":42},[28,144887,50686],{"class":51351},[28,144889,15649],{"class":211},[28,144891,144892,144894,144896,144898,144900,144902],{"class":30,"line":50},[28,144893,70677],{"class":38},[28,144895,51488],{"class":211},[28,144897,144642],{"class":38},[28,144899,538],{"class":207},[28,144901,130466],{"class":211},[28,144903,144649],{"class":269},[28,144905,144906],{"class":30,"line":58},[28,144907,1643],{"class":211},[28,144909,144910,144912],{"class":30,"line":70},[28,144911,130451],{"class":34},[28,144913,15649],{"class":211},[28,144915,144916,144918,144920,144922,144924,144926],{"class":30,"line":78},[28,144917,70619],{"class":38},[28,144919,51488],{"class":211},[28,144921,656],{"class":38},[28,144923,144670],{"class":207},[28,144925,130466],{"class":211},[28,144927,144675],{"class":269},[28,144929,144930],{"class":30,"line":86},[28,144931,1643],{"class":211},[14,144933,144617],{},[18,144935,144936],{"className":126603,"code":127007,"language":126605,"meta":23,"style":23},[25,144937,144938,144944,144956],{"__ignoreMap":23},[28,144939,144940,144942],{"class":30,"line":31},[28,144941,51851],{"class":51351},[28,144943,15649],{"class":211},[28,144945,144946,144948,144950,144952,144954],{"class":30,"line":42},[28,144947,70677],{"class":38},[28,144949,51488],{"class":211},[28,144951,811],{"class":38},[28,144953,51543],{"class":207},[28,144955,1370],{"class":211},[28,144957,144958],{"class":30,"line":50},[28,144959,1643],{"class":211},[149,144961,144963],{"id":144962},"_214-响应式开发","21.4 响应式开发",[14,144965,144966],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1540,144968],{"style":126459,"src":144969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144971,144972],{},"做法：",[116,144974,144975,144978],{},[119,144976,144977],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[119,144979,144980],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1540,144982],{"style":126459,"src":144983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144985,144986],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[177,144988,144990],{"id":144989},"_2141-简单代码示范","21.4.1 简单代码示范",[18,144992,144993],{"className":126603,"code":144620,"language":126605,"meta":23,"style":23},[25,144994,144995,144999,145005,145019,145023,145029,145043],{"__ignoreMap":23},[28,144996,144997],{"class":30,"line":31},[28,144998,144627],{"class":269},[28,145000,145001,145003],{"class":30,"line":42},[28,145002,50686],{"class":51351},[28,145004,15649],{"class":211},[28,145006,145007,145009,145011,145013,145015,145017],{"class":30,"line":50},[28,145008,70677],{"class":38},[28,145010,51488],{"class":211},[28,145012,144642],{"class":38},[28,145014,538],{"class":207},[28,145016,130466],{"class":211},[28,145018,144649],{"class":269},[28,145020,145021],{"class":30,"line":58},[28,145022,1643],{"class":211},[28,145024,145025,145027],{"class":30,"line":70},[28,145026,130451],{"class":34},[28,145028,15649],{"class":211},[28,145030,145031,145033,145035,145037,145039,145041],{"class":30,"line":78},[28,145032,70619],{"class":38},[28,145034,51488],{"class":211},[28,145036,656],{"class":38},[28,145038,144670],{"class":207},[28,145040,130466],{"class":211},[28,145042,144675],{"class":269},[28,145044,145045],{"class":30,"line":86},[28,145046,1643],{"class":211},[14,145048,145049],{},"父盒子一般命名为container",[177,145051,145053],{"id":145052},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145055,145056,145057],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[359,145058,145059],{},"使得 Web 开发更加快捷",[116,145061,145062],{},[119,145063,145064,145065],{},"官网：",[359,145066,145067],{},[448,145068,145069],{"href":145069,"rel":145070},"http:\u002F\u002Fgetbootstrap.com\u002F",[23940],[14,145072,145073],{},"可以直接去官网拿现成的东西",[161,145075,145076],{},[119,145077,145078],{},"Bootstrap的使用",[14,145080,145081],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145083,145084],{},"Bootstrap 使用四步曲：",[14,145086,145087,145090],{},[359,145088,145089],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1540,145092],{"style":126459,"src":145093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145095,145096],{},"打开Bootstrap官网，然后下载",[1540,145098],{"style":126459,"src":145099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1540,145101],{"style":126459,"src":145102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145104,145105],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145107,145108],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145110,145111],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1540,145113],{"style":126459,"src":145114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[18,145116,145118],{"className":126603,"code":145117,"language":126605,"meta":23,"style":23},".center {\n  color: red;\n}\n",[25,145119,145120,145126,145136],{"__ignoreMap":23},[28,145121,145122,145124],{"class":30,"line":31},[28,145123,126894],{"class":34},[28,145125,15649],{"class":211},[28,145127,145128,145130,145132,145134],{"class":30,"line":42},[28,145129,70956],{"class":38},[28,145131,51488],{"class":211},[28,145133,57472],{"class":38},[28,145135,1370],{"class":211},[28,145137,145138],{"class":30,"line":50},[28,145139,1643],{"class":211},[14,145141,145142,145145],{},[25,145143,145144],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1540,145147],{"style":126459,"src":145148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1540,145150],{"style":126459,"src":145151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1540,145153],{"style":126459,"src":145154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145156,145157],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1540,145159],{"style":126459,"src":145160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145162,145163],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[161,145165,145166],{"start":42},[119,145167,145168],{},"布局容器",[1540,145170],{"style":126459,"src":145171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145173,145174],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145176,145177],{},"container-fluid用于移动式布局比较方便",[161,145179,145180],{"start":50},[119,145181,145182,145183],{},"bootstrap ",[359,145184,145185],{},"栅格系统原理",[1540,145187],{"style":126459,"src":145188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[161,145190,145191],{"start":58},[119,145192,145193],{},[359,145194,145195],{},"栅格选项参数",[1540,145197],{"style":126459,"src":145198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145200,145201],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145203,14710],{},[18,145205,145206],{"className":126603,"code":145117,"language":126605,"meta":23,"style":23},[25,145207,145208,145214,145224],{"__ignoreMap":23},[28,145209,145210,145212],{"class":30,"line":31},[28,145211,126894],{"class":34},[28,145213,15649],{"class":211},[28,145215,145216,145218,145220,145222],{"class":30,"line":42},[28,145217,70956],{"class":38},[28,145219,51488],{"class":211},[28,145221,57472],{"class":38},[28,145223,1370],{"class":211},[28,145225,145226],{"class":30,"line":50},[28,145227,1643],{"class":211},[14,145229,135646],{},[1540,145231],{"style":126459,"src":145232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145234,145235],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145237,145238],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145240,145241],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145243,145244],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145246,145247],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145249,145250],{},"汇总展示说明：",[18,145252,145253],{"className":127350,"code":130707,"language":127352,"meta":23,"style":23},[25,145254,145255,145259,145273,145277],{"__ignoreMap":23},[28,145256,145257],{"class":30,"line":31},[28,145258,130714],{"class":269},[28,145260,145261,145263,145265,145267,145269,145271],{"class":30,"line":42},[28,145262,1120],{"class":211},[28,145264,51662],{"class":51351},[28,145266,53537],{"class":34},[28,145268,257],{"class":211},[28,145270,130727],{"class":64},[28,145272,51358],{"class":211},[28,145274,145275],{"class":30,"line":50},[28,145276,130734],{"class":211},[28,145278,145279,145281,145283],{"class":30,"line":58},[28,145280,51836],{"class":211},[28,145282,51662],{"class":51351},[28,145284,51358],{"class":211},[1540,145286],{"style":126459,"src":145287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145289,145290],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[18,145292,145293],{"className":127350,"code":130707,"language":127352,"meta":23,"style":23},[25,145294,145295,145299,145313,145317],{"__ignoreMap":23},[28,145296,145297],{"class":30,"line":31},[28,145298,130714],{"class":269},[28,145300,145301,145303,145305,145307,145309,145311],{"class":30,"line":42},[28,145302,1120],{"class":211},[28,145304,51662],{"class":51351},[28,145306,53537],{"class":34},[28,145308,257],{"class":211},[28,145310,130727],{"class":64},[28,145312,51358],{"class":211},[28,145314,145315],{"class":30,"line":50},[28,145316,130734],{"class":211},[28,145318,145319,145321,145323],{"class":30,"line":58},[28,145320,51836],{"class":211},[28,145322,51662],{"class":51351},[28,145324,51358],{"class":211},[161,145326,145327],{"start":70},[119,145328,145329],{},[359,145330,145331],{},"列嵌套",[1540,145333],{"style":126459,"src":145334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145336,145337],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145339,145340],{},"没加row内部这样：",[1540,145342],{"style":126459,"src":145343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145345,145346],{},"加上row之后内部为：",[1540,145348],{"style":126459,"src":145349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[161,145351,145352],{"start":78},[119,145353,145354],{},[359,145355,145356],{},"列偏移",[1540,145358],{"style":126459,"src":145359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145361,145362],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145364,145365],{},"要加偏移量，即偏移份数",[14,145367,145368],{},"偏移的份数=12-两个盒子的份数",[161,145370,145371],{"start":86},[119,145372,145373],{},[359,145374,145375],{},"列排序",[1540,145377],{"style":126459,"src":145378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145380,145381],{},"pull拉左；push推右",[161,145383,145384],{"start":97},[119,145385,145386],{},[359,145387,145388],{},"响应式工具",[1540,145390],{"style":126459,"src":145391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145393,145394],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[177,145396,145398],{"id":145397},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145400,145401],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145403,145404],{},"ul {",[14,145406,145407],{},"list-style: none;",[14,145409,145410],{},"margin:0;",[14,145412,145413],{},"padding:0; }",[1540,145415],{"style":126459,"src":145416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1540,145418],{"style":126459,"src":145419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145421,145422],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145424,68940],{},[18,145426,145427],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,145428,145429,145435,145445],{"__ignoreMap":23},[28,145430,145431,145433],{"class":30,"line":31},[28,145432,130451],{"class":34},[28,145434,15649],{"class":211},[28,145436,145437,145439,145441,145443],{"class":30,"line":42},[28,145438,131083],{"class":38},[28,145440,51488],{"class":211},[28,145442,23813],{"class":38},[28,145444,1370],{"class":211},[28,145446,145447],{"class":30,"line":50},[28,145448,1643],{"class":211},[14,145450,70504],{},[18,145452,145453],{"className":126603,"code":139273,"language":126605,"meta":23,"style":23},[25,145454,145455,145461,145471],{"__ignoreMap":23},[28,145456,145457,145459],{"class":30,"line":31},[28,145458,130451],{"class":34},[28,145460,15649],{"class":211},[28,145462,145463,145465,145467,145469],{"class":30,"line":42},[28,145464,131083],{"class":38},[28,145466,51488],{"class":211},[28,145468,23813],{"class":38},[28,145470,1370],{"class":211},[28,145472,145473],{"class":30,"line":50},[28,145474,1643],{"class":211},[149,145476,145478],{"id":145477},"_215-swiper-插件使用","21.5 swiper 插件使用",[116,145480,145481,145484,145487],{},[119,145482,145483],{},"下载需要的css和js文件html页面中 引入相关文件",[119,145485,145486],{},"官网找到类似案例，复制html结构，css样式 js 语法",[119,145488,145489],{},"根据需求定制修改模块",[1540,145491],{"style":126459,"src":145492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145494,145495],{},"解压后将这两部分放到项目中",[1540,145497],{"style":126459,"src":145498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145500,145501],{},"这个插件可以帮助我们实现轮播图效果",[14,145503,145504],{},"用法：",[1540,145506],{"style":126459,"src":145507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145509,145510],{},"找到自己喜欢的",[1540,145512],{"style":126459,"src":145513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145515,145516],{},"右键，查看网页源代码",[1540,145518],{"style":126459,"src":145519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145521,145522],{},"复制人家的结构内容",[14,145524,145525],{},"然后去看API文档：",[1540,145527],{"style":126459,"src":145528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145530,145531],{},"可以看看如何修改样式",[14,145533,145534],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[126,145536,145537],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":23,"searchDepth":42,"depth":42,"links":145539},[145540,145545,145549,145554,145559],{"id":144340,"depth":42,"text":144341,"children":145541},[145542,145543,145544],{"id":144344,"depth":50,"text":144345},{"id":144354,"depth":50,"text":144355},{"id":144449,"depth":50,"text":144450},{"id":144464,"depth":42,"text":144465,"children":145546},[145547,145548],{"id":144486,"depth":50,"text":144487},{"id":144502,"depth":50,"text":144503},{"id":144577,"depth":42,"text":144578,"children":145550},[145551,145552,145553],{"id":144590,"depth":50,"text":144591},{"id":144814,"depth":50,"text":144815},{"id":144821,"depth":50,"text":144822},{"id":144962,"depth":42,"text":144963,"children":145555},[145556,145557,145558],{"id":144989,"depth":50,"text":144990},{"id":145052,"depth":50,"text":145053},{"id":145397,"depth":50,"text":145398},{"id":145477,"depth":42,"text":145478},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144332,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145566,"title":145567,"body":145568,"description":131,"extension":132,"meta":145788,"navigation":134,"path":145789,"seo":145790,"stem":145791,"__hash__":145792},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145569,"toc":145784},[145570,145573,145577,145580,145595,145600,145603,145608,145643,145648,145660,145665,145678,145683,145700,145705,145725,145730,145748,145751,145754,145757,145760,145764,145767,145770,145773,145776,145779,145782],[10,145571,145567],{"id":145572},"_22-代码提交与新型相对单位",[149,145574,145576],{"id":145575},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145578,145579],{},"法1：",[161,145581,145582,145589,145592],{},[119,145583,145584,145585],{},"登录网站注册：",[448,145586,145587],{"href":145587,"rel":145588},"https:\u002F\u002Fgitee.com\u002F",[23940],[119,145590,145591],{},"码云创建新的仓库",[119,145593,145594],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[116,145596,145597],{},[119,145598,145599],{},"在网站根目录右键-- Git Bash Here",[1540,145601],{"style":126459,"src":145602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[116,145604,145605],{},[119,145606,145607],{},"如果是第一次利用git提交，请配置好全局选项",[18,145609,145611],{"className":117347,"code":145610,"language":117349,"meta":23,"style":23},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[25,145612,145613,145629],{"__ignoreMap":23},[28,145614,145615,145618,145620,145623,145626],{"class":30,"line":31},[28,145616,145617],{"class":34},"git",[28,145619,119770],{"class":64},[28,145621,145622],{"class":38}," --global",[28,145624,145625],{"class":64}," user.name",[28,145627,145628],{"class":64}," \"你的名字\"\n",[28,145630,145631,145633,145635,145637,145640],{"class":30,"line":42},[28,145632,145617],{"class":34},[28,145634,119770],{"class":64},[28,145636,145622],{"class":38},[28,145638,145639],{"class":64}," user.email",[28,145641,145642],{"class":64}," \"你的邮箱\"\n",[116,145644,145645],{},[119,145646,145647],{},"初始化仓库",[18,145649,145651],{"className":117347,"code":145650,"language":117349,"meta":23,"style":23},"git init\n",[25,145652,145653],{"__ignoreMap":23},[28,145654,145655,145657],{"class":30,"line":31},[28,145656,145617],{"class":34},[28,145658,145659],{"class":64}," init\n",[116,145661,145662],{},[119,145663,145664],{},"把本地文件放到暂存区",[18,145666,145668],{"className":117347,"code":145667,"language":117349,"meta":23,"style":23},"git add .\n",[25,145669,145670],{"__ignoreMap":23},[28,145671,145672,145674,145676],{"class":30,"line":31},[28,145673,145617],{"class":34},[28,145675,5286],{"class":64},[28,145677,28792],{"class":64},[116,145679,145680],{},[119,145681,145682],{},"把本地文件放到本地仓库里面",[18,145684,145686],{"className":117347,"code":145685,"language":117349,"meta":23,"style":23},"git commit -m \"first commit\"\n",[25,145687,145688],{"__ignoreMap":23},[28,145689,145690,145692,145695,145697],{"class":30,"line":31},[28,145691,145617],{"class":34},[28,145693,145694],{"class":64}," commit",[28,145696,100933],{"class":38},[28,145698,145699],{"class":64}," \"first commit\"\n",[116,145701,145702],{},[119,145703,145704],{},"链接远程仓库",[18,145706,145708],{"className":117347,"code":145707,"language":117349,"meta":23,"style":23},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[25,145709,145710],{"__ignoreMap":23},[28,145711,145712,145714,145717,145719,145722],{"class":30,"line":31},[28,145713,145617],{"class":34},[28,145715,145716],{"class":64}," remote",[28,145718,5286],{"class":64},[28,145720,145721],{"class":64}," origin",[28,145723,145724],{"class":64}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[116,145726,145727],{},[119,145728,145729],{},"把本地仓库的文件推送到远程仓库 push",[18,145731,145733],{"className":117347,"code":145732,"language":117349,"meta":23,"style":23},"git push -u origin master\n",[25,145734,145735],{"__ignoreMap":23},[28,145736,145737,145739,145741,145743,145745],{"class":30,"line":31},[28,145738,145617],{"class":34},[28,145740,29067],{"class":64},[28,145742,28341],{"class":38},[28,145744,145721],{"class":64},[28,145746,145747],{"class":64}," master\n",[1540,145749],{"style":126459,"src":145750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145752,145753],{},"上方方法暂未实现，后边学完git后在整",[14,145755,145756],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1540,145758],{"style":126459,"src":145759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[149,145761,145763],{"id":145762},"_222-新型相对单位","22.2 新型相对单位",[1540,145765],{"style":126459,"src":145766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1540,145768],{"style":126459,"src":145769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145771,145772],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145774,145775],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1540,145777],{"style":126459,"src":145778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145780,145781],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[126,145783,24033],{},{"title":23,"searchDepth":42,"depth":42,"links":145785},[145786,145787],{"id":145575,"depth":42,"text":145576},{"id":145762,"depth":42,"text":145763},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145567,"description":131},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145794,"title":145795,"body":145796,"description":145800,"extension":132,"meta":145801,"navigation":134,"path":145802,"seo":145803,"stem":145804,"__hash__":145805},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145797,"toc":145798},[],{"title":23,"searchDepth":42,"depth":42,"links":145799},[],"自己正经开始学编程的第一门语言！",{"category":92890},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145795,"description":145800},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145807,"title":145808,"body":145809,"description":131,"extension":132,"meta":146956,"navigation":134,"path":146957,"seo":146958,"stem":146959,"__hash__":146960},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145810,"toc":146932},[145811,145814,145818,145821,145824,145849,145852,145858,145862,145865,145892,145895,145935,145938,145950,145953,145959,145963,145967,145994,146011,146018,146022,146025,146051,146054,146058,146061,146101,146104,146121,146127,146131,146136,146180,146183,146201,146204,146272,146276,146283,146286,146301,146304,146313,146316,146327,146330,146339,146342,146359,146362,146377,146381,146385,146388,146390,146410,146414,146417,146420,146431,146434,146440,146444,146450,146477,146480,146492,146495,146506,146509,146515,146519,146525,146575,146578,146620,146623,146656,146659,146693,146697,146700,146720,146723,146759,146762,146775,146779,146783,146789,146792,146805,146809,146812,146818,146821,146825,146828,146831,146880,146884,146900,146906,146913,146919,146929],[10,145812,145808],{"id":145813},"_1-python环境与第一个程序",[149,145815,145817],{"id":145816},"_11-什么是python","1.1 什么是Python",[14,145819,145820],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145822,145823],{},"理解 Python 时抓住三个关键词：",[161,145825,145826,145829,145832],{},[119,145827,145828],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[119,145830,145831],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[119,145833,145834,145835,422,145838,422,145841,422,145844,422,145846,28436],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[25,145836,145837],{},"os",[25,145839,145840],{},"sys",[25,145842,145843],{},"json",[25,145845,57911],{},[25,145847,145848],{},"datetime",[14,145850,145851],{},"Python 程序的运行链路：",[18,145853,145856],{"className":145854,"code":145855,"language":5264,"meta":23},[5262],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[25,145857,145855],{"__ignoreMap":23},[149,145859,145861],{"id":145860},"_12-python解释器","1.2 Python解释器",[14,145863,145864],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[18,145866,145868],{"className":20,"code":145867,"language":22,"meta":23,"style":23},"python --version\npython3 --version\npython\npython3\n",[25,145869,145870,145876,145882,145887],{"__ignoreMap":23},[28,145871,145872,145874],{"class":30,"line":31},[28,145873,30431],{"class":34},[28,145875,26344],{"class":38},[28,145877,145878,145880],{"class":30,"line":42},[28,145879,100930],{"class":34},[28,145881,26344],{"class":38},[28,145883,145884],{"class":30,"line":50},[28,145885,145886],{"class":34},"python\n",[28,145888,145889],{"class":30,"line":58},[28,145890,145891],{"class":34},"python3\n",[14,145893,145894],{},"进入交互模式后，可以直接输入表达式：",[18,145896,145898],{"className":30429,"code":145897,"language":30431,"meta":23,"style":23},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[25,145899,145900,145911,145916,145930],{"__ignoreMap":23},[28,145901,145902,145905,145907,145909],{"class":30,"line":31},[28,145903,145904],{"class":207},">>>",[28,145906,25189],{"class":38},[28,145908,45617],{"class":207},[28,145910,47774],{"class":38},[28,145912,145913],{"class":30,"line":42},[28,145914,145915],{"class":38},"3\n",[28,145917,145918,145920,145923,145925,145928],{"class":30,"line":50},[28,145919,145904],{"class":207},[28,145921,145922],{"class":38}," print",[28,145924,212],{"class":211},[28,145926,145927],{"class":64},"\"hello python\"",[28,145929,218],{"class":211},[28,145931,145932],{"class":30,"line":58},[28,145933,145934],{"class":211},"hello python\n",[14,145936,145937],{},"退出交互模式：",[18,145939,145941],{"className":30429,"code":145940,"language":30431,"meta":23,"style":23},"exit()\n",[25,145942,145943],{"__ignoreMap":23},[28,145944,145945,145948],{"class":30,"line":31},[28,145946,145947],{"class":38},"exit",[28,145949,2053],{"class":211},[14,145951,145952],{},"或使用快捷键：",[18,145954,145957],{"className":145955,"code":145956,"language":5264,"meta":23},[5262],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[25,145958,145956],{"__ignoreMap":23},[149,145960,145962],{"id":145961},"_13-安装python","1.3 安装Python",[177,145964,145966],{"id":145965},"_131-windows安装","1.3.1 Windows安装",[161,145968,145969,145976,145979,145985,145991],{},[119,145970,145971,145972],{},"打开 Python 官网：",[448,145973,145974],{"href":145974,"rel":145975},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23940],[119,145977,145978],{},"下载 Windows Installer。",[119,145980,145981,145982,28436],{},"安装时勾选 ",[25,145983,145984],{},"Add Python to PATH",[119,145986,145987,145988,28436],{},"点击 ",[25,145989,145990],{},"Install Now",[119,145992,145993],{},"安装完成后打开命令提示符验证：",[18,145995,145997],{"className":20,"code":145996,"language":22,"meta":23,"style":23},"python --version\npip --version\n",[25,145998,145999,146005],{"__ignoreMap":23},[28,146000,146001,146003],{"class":30,"line":31},[28,146002,30431],{"class":34},[28,146004,26344],{"class":38},[28,146006,146007,146009],{"class":30,"line":42},[28,146008,23906],{"class":34},[28,146010,26344],{"class":38},[14,146012,146013,146014,146017],{},"如果提示 ",[25,146015,146016],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[177,146019,146021],{"id":146020},"_132-macos安装","1.3.2 macOS安装",[14,146023,146024],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[18,146026,146028],{"className":20,"code":146027,"language":22,"meta":23,"style":23},"brew install python\npython3 --version\npip3 --version\n",[25,146029,146030,146039,146045],{"__ignoreMap":23},[28,146031,146032,146035,146037],{"class":30,"line":31},[28,146033,146034],{"class":34},"brew",[28,146036,23909],{"class":64},[28,146038,124369],{"class":64},[28,146040,146041,146043],{"class":30,"line":42},[28,146042,100930],{"class":34},[28,146044,26344],{"class":38},[28,146046,146047,146049],{"class":30,"line":50},[28,146048,119751],{"class":34},[28,146050,26344],{"class":38},[14,146052,146053],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[177,146055,146057],{"id":146056},"_133-linux安装","1.3.3 Linux安装",[14,146059,146060],{},"Ubuntu\u002FDebian：",[18,146062,146064],{"className":20,"code":146063,"language":22,"meta":23,"style":23},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[25,146065,146066,146074,146089,146095],{"__ignoreMap":23},[28,146067,146068,146070,146072],{"class":30,"line":31},[28,146069,24652],{"class":34},[28,146071,117368],{"class":64},[28,146073,26293],{"class":64},[28,146075,146076,146078,146080,146082,146084,146086],{"class":30,"line":42},[28,146077,24652],{"class":34},[28,146079,117368],{"class":64},[28,146081,23909],{"class":64},[28,146083,104454],{"class":64},[28,146085,100849],{"class":64},[28,146087,146088],{"class":64}," python3-venv\n",[28,146090,146091,146093],{"class":30,"line":50},[28,146092,100930],{"class":34},[28,146094,26344],{"class":38},[28,146096,146097,146099],{"class":30,"line":58},[28,146098,119751],{"class":34},[28,146100,26344],{"class":38},[14,146102,146103],{},"Fedora：",[18,146105,146107],{"className":20,"code":146106,"language":22,"meta":23,"style":23},"sudo dnf install python3 python3-pip\n",[25,146108,146109],{"__ignoreMap":23},[28,146110,146111,146113,146115,146117,146119],{"class":30,"line":31},[28,146112,24652],{"class":34},[28,146114,26366],{"class":64},[28,146116,23909],{"class":64},[28,146118,104454],{"class":64},[28,146120,119816],{"class":64},[14,146122,146123,146124,146126],{},"Linux 上通常使用 ",[25,146125,100930],{}," 命令，避免和系统旧版本 Python 冲突。",[149,146128,146130],{"id":146129},"_14-pip包管理器","1.4 pip包管理器",[14,146132,146133,146135],{},[25,146134,23906],{}," 用来安装第三方库。",[18,146137,146139],{"className":20,"code":146138,"language":22,"meta":23,"style":23},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[25,146140,146141,146150,146159,146167,146173],{"__ignoreMap":23},[28,146142,146143,146145,146147],{"class":30,"line":31},[28,146144,23906],{"class":34},[28,146146,23909],{"class":64},[28,146148,146149],{"class":64}," requests\n",[28,146151,146152,146154,146157],{"class":30,"line":42},[28,146153,23906],{"class":34},[28,146155,146156],{"class":64}," uninstall",[28,146158,146149],{"class":64},[28,146160,146161,146163,146165],{"class":30,"line":50},[28,146162,23906],{"class":34},[28,146164,117625],{"class":64},[28,146166,146149],{"class":64},[28,146168,146169,146171],{"class":30,"line":58},[28,146170,23906],{"class":34},[28,146172,119006],{"class":64},[28,146174,146175,146177],{"class":30,"line":70},[28,146176,23906],{"class":34},[28,146178,146179],{"class":64}," freeze\n",[14,146181,146182],{},"国内网络较慢时可以临时使用镜像：",[18,146184,146186],{"className":20,"code":146185,"language":22,"meta":23,"style":23},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[25,146187,146188],{"__ignoreMap":23},[28,146189,146190,146192,146194,146197,146199],{"class":30,"line":31},[28,146191,23906],{"class":34},[28,146193,23909],{"class":64},[28,146195,146196],{"class":64}," requests",[28,146198,26481],{"class":38},[28,146200,119779],{"class":64},[14,146202,146203],{},"常见第三方库：",[347,146205,146206,146215],{},[350,146207,146208],{},[353,146209,146210,146213],{},[356,146211,146212],{},"库",[356,146214,102747],{},[394,146216,146217,146225,146232,146240,146248,146256,146264],{},[353,146218,146219,146222],{},[399,146220,146221],{},"requests",[399,146223,146224],{},"网络请求",[353,146226,146227,146229],{},[399,146228,100677],{},[399,146230,146231],{},"数值计算",[353,146233,146234,146237],{},[399,146235,146236],{},"pandas",[399,146238,146239],{},"表格数据处理",[353,146241,146242,146245],{},[399,146243,146244],{},"matplotlib",[399,146246,146247],{},"绘图",[353,146249,146250,146253],{},[399,146251,146252],{},"pyecharts",[399,146254,146255],{},"ECharts 图表",[353,146257,146258,146261],{},[399,146259,146260],{},"flask",[399,146262,146263],{},"Web 后端",[353,146265,146266,146269],{},[399,146267,146268],{},"pytest",[399,146270,146271],{},"自动化测试",[149,146273,146275],{"id":146274},"_15-虚拟环境","1.5 虚拟环境",[14,146277,146278,146279,146282],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[25,146280,146281],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146284,146285],{},"创建虚拟环境：",[18,146287,146289],{"className":20,"code":146288,"language":22,"meta":23,"style":23},"python -m venv .venv\n",[25,146290,146291],{"__ignoreMap":23},[28,146292,146293,146295,146297,146299],{"class":30,"line":31},[28,146294,30431],{"class":34},[28,146296,100933],{"class":38},[28,146298,100936],{"class":64},[28,146300,100939],{"class":64},[14,146302,146303],{},"Windows 激活：",[18,146305,146307],{"className":20,"code":146306,"language":22,"meta":23,"style":23},".venv\\Scripts\\activate\n",[25,146308,146309],{"__ignoreMap":23},[28,146310,146311],{"class":30,"line":31},[28,146312,146306],{"class":34},[14,146314,146315],{},"macOS\u002FLinux 激活：",[18,146317,146319],{"className":20,"code":146318,"language":22,"meta":23,"style":23},"source .venv\u002Fbin\u002Factivate\n",[25,146320,146321],{"__ignoreMap":23},[28,146322,146323,146325],{"class":30,"line":31},[28,146324,100944],{"class":38},[28,146326,100947],{"class":64},[14,146328,146329],{},"退出虚拟环境：",[18,146331,146333],{"className":20,"code":146332,"language":22,"meta":23,"style":23},"deactivate\n",[25,146334,146335],{"__ignoreMap":23},[28,146336,146337],{"class":30,"line":31},[28,146338,146332],{"class":34},[14,146340,146341],{},"保存依赖：",[18,146343,146345],{"className":20,"code":146344,"language":22,"meta":23,"style":23},"pip freeze > requirements.txt\n",[25,146346,146347],{"__ignoreMap":23},[28,146348,146349,146351,146354,146356],{"class":30,"line":31},[28,146350,23906],{"class":34},[28,146352,146353],{"class":64}," freeze",[28,146355,26273],{"class":207},[28,146357,146358],{"class":64}," requirements.txt\n",[14,146360,146361],{},"安装依赖：",[18,146363,146365],{"className":20,"code":146364,"language":22,"meta":23,"style":23},"pip install -r requirements.txt\n",[25,146366,146367],{"__ignoreMap":23},[28,146368,146369,146371,146373,146375],{"class":30,"line":31},[28,146370,23906],{"class":34},[28,146372,23909],{"class":64},[28,146374,119690],{"class":38},[28,146376,146358],{"class":64},[149,146378,146380],{"id":146379},"_16-开发工具","1.6 开发工具",[177,146382,146384],{"id":146383},"_161-pycharm","1.6.1 PyCharm",[14,146386,146387],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146389,122113],{},[161,146391,146392,146395,146398,146404,146407],{},[119,146393,146394],{},"New Project：创建项目。",[119,146396,146397],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[119,146399,146400,146401,126034],{},"New Python File：创建 ",[25,146402,146403],{},".py",[119,146405,146406],{},"Run：运行当前文件。",[119,146408,146409],{},"Debug：断点调试。",[177,146411,146413],{"id":146412},"_162-vs-code","1.6.2 VS Code",[14,146415,146416],{},"VS Code 轻量，适合后续多语言开发。",[14,146418,146419],{},"建议安装插件：",[161,146421,146422,146425,146428],{},[119,146423,146424],{},"Python。",[119,146426,146427],{},"Pylance。",[119,146429,146430],{},"Jupyter。",[14,146432,146433],{},"选择解释器：",[18,146435,146438],{"className":146436,"code":146437,"language":5264,"meta":23},[5262],"Ctrl + Shift + P -> Python: Select Interpreter\n",[25,146439,146437],{"__ignoreMap":23},[149,146441,146443],{"id":146442},"_17-第一个python程序","1.7 第一个Python程序",[14,146445,146446,146447,24694],{},"创建文件 ",[25,146448,146449],{},"hello.py",[18,146451,146453],{"className":30429,"code":146452,"language":30431,"meta":23,"style":23},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[25,146454,146455,146466],{"__ignoreMap":23},[28,146456,146457,146459,146461,146464],{"class":30,"line":31},[28,146458,30466],{"class":38},[28,146460,212],{"class":211},[28,146462,146463],{"class":64},"\"Hello World\"",[28,146465,218],{"class":211},[28,146467,146468,146470,146472,146475],{"class":30,"line":42},[28,146469,30466],{"class":38},[28,146471,212],{"class":211},[28,146473,146474],{"class":64},"\"你好，Python\"",[28,146476,218],{"class":211},[14,146478,146479],{},"在终端运行：",[18,146481,146483],{"className":20,"code":146482,"language":22,"meta":23,"style":23},"python hello.py\n",[25,146484,146485],{"__ignoreMap":23},[28,146486,146487,146489],{"class":30,"line":31},[28,146488,30431],{"class":34},[28,146490,146491],{"class":64}," hello.py\n",[14,146493,146494],{},"或：",[18,146496,146498],{"className":20,"code":146497,"language":22,"meta":23,"style":23},"python3 hello.py\n",[25,146499,146500],{"__ignoreMap":23},[28,146501,146502,146504],{"class":30,"line":31},[28,146503,100930],{"class":34},[28,146505,146491],{"class":64},[14,146507,146508],{},"输出：",[18,146510,146513],{"className":146511,"code":146512,"language":5264,"meta":23},[5262],"Hello World\n你好，Python\n",[25,146514,146512],{"__ignoreMap":23},[149,146516,146518],{"id":146517},"_18-print函数","1.8 print函数",[14,146520,146521,146524],{},[25,146522,146523],{},"print()"," 用来输出内容。",[18,146526,146528],{"className":30429,"code":146527,"language":30431,"meta":23,"style":23},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[25,146529,146530,146540,146550,146560],{"__ignoreMap":23},[28,146531,146532,146534,146536,146538],{"class":30,"line":31},[28,146533,30466],{"class":38},[28,146535,212],{"class":211},[28,146537,5921],{"class":64},[28,146539,218],{"class":211},[28,146541,146542,146544,146546,146548],{"class":30,"line":42},[28,146543,30466],{"class":38},[28,146545,212],{"class":211},[28,146547,521],{"class":38},[28,146549,218],{"class":211},[28,146551,146552,146554,146556,146558],{"class":30,"line":50},[28,146553,30466],{"class":38},[28,146555,212],{"class":211},[28,146557,260],{"class":38},[28,146559,218],{"class":211},[28,146561,146562,146564,146566,146569,146571,146573],{"class":30,"line":58},[28,146563,30466],{"class":38},[28,146565,212],{"class":211},[28,146567,146568],{"class":64},"\"年龄:\"",[28,146570,12512],{"class":211},[28,146572,860],{"class":38},[28,146574,218],{"class":211},[14,146576,146577],{},"多个内容用逗号隔开，默认中间加空格：",[18,146579,146581],{"className":30429,"code":146580,"language":30431,"meta":23,"style":23},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[25,146582,146583,146593,146603],{"__ignoreMap":23},[28,146584,146585,146588,146590],{"class":30,"line":31},[28,146586,146587],{"class":211},"name ",[28,146589,257],{"class":207},[28,146591,146592],{"class":64}," \"张三\"\n",[28,146594,146595,146598,146600],{"class":30,"line":42},[28,146596,146597],{"class":211},"age ",[28,146599,257],{"class":207},[28,146601,146602],{"class":38}," 18\n",[28,146604,146605,146607,146609,146612,146615,146617],{"class":30,"line":50},[28,146606,30466],{"class":38},[28,146608,212],{"class":211},[28,146610,146611],{"class":64},"\"姓名:\"",[28,146613,146614],{"class":211},", name, ",[28,146616,146568],{"class":64},[28,146618,146619],{"class":211},", age)\n",[14,146621,146622],{},"修改分隔符：",[18,146624,146626],{"className":30429,"code":146625,"language":30431,"meta":23,"style":23},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[25,146627,146628],{"__ignoreMap":23},[28,146629,146630,146632,146634,146637,146639,146641,146643,146645,146647,146650,146652,146654],{"class":30,"line":31},[28,146631,30466],{"class":38},[28,146633,212],{"class":211},[28,146635,146636],{"class":64},"\"2024\"",[28,146638,12512],{"class":211},[28,146640,54367],{"class":64},[28,146642,12512],{"class":211},[28,146644,54367],{"class":64},[28,146646,12512],{"class":211},[28,146648,146649],{"class":5293},"sep",[28,146651,257],{"class":207},[28,146653,32534],{"class":64},[28,146655,218],{"class":211},[14,146657,146658],{},"修改结尾符：",[18,146660,146662],{"className":30429,"code":146661,"language":30431,"meta":23,"style":23},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[25,146663,146664,146682],{"__ignoreMap":23},[28,146665,146666,146668,146670,146672,146674,146676,146678,146680],{"class":30,"line":31},[28,146667,30466],{"class":38},[28,146669,212],{"class":211},[28,146671,5921],{"class":64},[28,146673,12512],{"class":211},[28,146675,45852],{"class":5293},[28,146677,257],{"class":207},[28,146679,4436],{"class":64},[28,146681,218],{"class":211},[28,146683,146684,146686,146688,146691],{"class":30,"line":42},[28,146685,30466],{"class":38},[28,146687,212],{"class":211},[28,146689,146690],{"class":64},"\"python\"",[28,146692,218],{"class":211},[149,146694,146696],{"id":146695},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146698,146699],{},"交互运行适合临时验证：",[18,146701,146703],{"className":30429,"code":146702,"language":30431,"meta":23,"style":23},">>> 10 * 3\n30\n",[25,146704,146705,146715],{"__ignoreMap":23},[28,146706,146707,146709,146711,146713],{"class":30,"line":31},[28,146708,145904],{"class":207},[28,146710,2115],{"class":38},[28,146712,6595],{"class":207},[28,146714,120087],{"class":38},[28,146716,146717],{"class":30,"line":42},[28,146718,146719],{"class":38},"30\n",[14,146721,146722],{},"脚本运行适合保存程序：",[18,146724,146726],{"className":30429,"code":146725,"language":30431,"meta":23,"style":23},"price = 8\ncount = 5\nprint(price * count)\n",[25,146727,146728,146738,146747],{"__ignoreMap":23},[28,146729,146730,146733,146735],{"class":30,"line":31},[28,146731,146732],{"class":211},"price ",[28,146734,257],{"class":207},[28,146736,146737],{"class":38}," 8\n",[28,146739,146740,146743,146745],{"class":30,"line":42},[28,146741,146742],{"class":211},"count ",[28,146744,257],{"class":207},[28,146746,54478],{"class":38},[28,146748,146749,146751,146754,146756],{"class":30,"line":50},[28,146750,30466],{"class":38},[28,146752,146753],{"class":211},"(price ",[28,146755,665],{"class":207},[28,146757,146758],{"class":211}," count)\n",[14,146760,146761],{},"实际学习中推荐：",[161,146763,146764,146767,146772],{},[119,146765,146766],{},"临时试一个语法，用交互模式。",[119,146768,146769,146770,126034],{},"写完整练习，用 ",[25,146771,146403],{},[119,146773,146774],{},"写项目，用独立目录和虚拟环境。",[149,146776,146778],{"id":146777},"_110-常见错误","1.10 常见错误",[177,146780,146782],{"id":146781},"_1101-命令找不到","1.10.1 命令找不到",[18,146784,146787],{"className":146785,"code":146786,"language":5264,"meta":23},[5262],"python: command not found\n",[25,146788,146786],{"__ignoreMap":23},[14,146790,146791],{},"原因：",[161,146793,146794,146797,146800],{},[119,146795,146796],{},"没安装 Python。",[119,146798,146799],{},"PATH 没配置。",[119,146801,146802,146803,28436],{},"Linux\u002FmacOS 应该使用 ",[25,146804,100930],{},[177,146806,146808],{"id":146807},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146810,146811],{},"不要把文件命名为：",[18,146813,146816],{"className":146814,"code":146815,"language":5264,"meta":23},[5262],"random.py\njson.py\ntime.py\nrequests.py\n",[25,146817,146815],{"__ignoreMap":23},[14,146819,146820],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[177,146822,146824],{"id":146823},"_1103-中文乱码","1.10.3 中文乱码",[14,146826,146827],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146829,146830],{},"如果读写文件出现乱码，要明确指定编码：",[18,146832,146834],{"className":30429,"code":146833,"language":30431,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[25,146835,146836,146870],{"__ignoreMap":23},[28,146837,146838,146840,146843,146845,146848,146850,146853,146855,146858,146860,146863,146865,146867],{"class":30,"line":31},[28,146839,107884],{"class":207},[28,146841,146842],{"class":38}," open",[28,146844,212],{"class":211},[28,146846,146847],{"class":64},"\"data.txt\"",[28,146849,12512],{"class":211},[28,146851,146852],{"class":64},"\"r\"",[28,146854,12512],{"class":211},[28,146856,146857],{"class":5293},"encoding",[28,146859,257],{"class":207},[28,146861,146862],{"class":64},"\"utf-8\"",[28,146864,13791],{"class":211},[28,146866,31434],{"class":207},[28,146868,146869],{"class":211}," f:\n",[28,146871,146872,146875,146877],{"class":30,"line":42},[28,146873,146874],{"class":211},"    content ",[28,146876,257],{"class":207},[28,146878,146879],{"class":211}," f.read()\n",[149,146881,146883],{"id":146882},"_111-本章练习","1.11 本章练习",[161,146885,146886,146889,146895],{},[119,146887,146888],{},"安装 Python，并在终端输出版本号。",[119,146890,146891,146892,146894],{},"新建 ",[25,146893,146449],{},"，输出自己的姓名、年龄、学习目标。",[119,146896,104417,146897,146899],{},[25,146898,146523],{}," 输出下面格式：",[18,146901,146904],{"className":146902,"code":146903,"language":5264,"meta":23},[5262],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[25,146905,146903],{"__ignoreMap":23},[161,146907,146908],{"start":58},[119,146909,104417,146910,146912],{},[25,146911,146649],{}," 输出日期：",[18,146914,146917],{"className":146915,"code":146916,"language":5264,"meta":23},[5262],"2024-10-10\n",[25,146918,146916],{"__ignoreMap":23},[161,146920,146921],{"start":70},[119,146922,104417,146923,146925,146926,146928],{},[25,146924,45852],{}," 让两次 ",[25,146927,146523],{}," 输出在同一行。",[126,146930,146931],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":146933},[146934,146935,146936,146941,146942,146943,146947,146948,146949,146950,146955],{"id":145816,"depth":42,"text":145817},{"id":145860,"depth":42,"text":145861},{"id":145961,"depth":42,"text":145962,"children":146937},[146938,146939,146940],{"id":145965,"depth":50,"text":145966},{"id":146020,"depth":50,"text":146021},{"id":146056,"depth":50,"text":146057},{"id":146129,"depth":42,"text":146130},{"id":146274,"depth":42,"text":146275},{"id":146379,"depth":42,"text":146380,"children":146944},[146945,146946],{"id":146383,"depth":50,"text":146384},{"id":146412,"depth":50,"text":146413},{"id":146442,"depth":42,"text":146443},{"id":146517,"depth":42,"text":146518},{"id":146695,"depth":42,"text":146696},{"id":146777,"depth":42,"text":146778,"children":146951},[146952,146953,146954],{"id":146781,"depth":50,"text":146782},{"id":146807,"depth":50,"text":146808},{"id":146823,"depth":50,"text":146824},{"id":146882,"depth":42,"text":146883},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145808,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146962,"title":146963,"body":146964,"description":131,"extension":132,"meta":149368,"navigation":134,"path":149369,"seo":149370,"stem":149371,"__hash__":149372},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146965,"toc":149353},[146966,146969,146973,146976,146979,146996,146999,147041,147044,147048,147051,147054,147091,147094,147128,147131,147223,147227,147241,147244,147271,147274,147278,147381,147388,147391,147408,147412,147419,147608,147611,147684,147688,147691,147775,147778,147810,147814,148018,148021,148025,148031,148133,148136,148392,148396,148399,148402,148416,148418,148604,148608,148970,148976,148980,148983,149107,149110,149289,149292,149296,149329,149333,149350],[10,146967,146963],{"id":146968},"_10-json与pyecharts折线图",[149,146970,146972],{"id":146971},"_101-数据可视化","10.1 数据可视化",[14,146974,146975],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146977,146978],{},"常见图表：",[161,146980,146981,146984,146987,146990,146993],{},[119,146982,146983],{},"折线图：看趋势。",[119,146985,146986],{},"柱状图：看分类对比。",[119,146988,146989],{},"饼图：看占比。",[119,146991,146992],{},"地图：看地域分布。",[119,146994,146995],{},"散点图：看两个变量之间的关系。",[14,146997,146998],{},"Python 可视化常用库：",[347,147000,147001,147009],{},[350,147002,147003],{},[353,147004,147005,147007],{},[356,147006,146212],{},[356,147008,23817],{},[394,147010,147011,147018,147026,147033],{},[353,147012,147013,147015],{},[399,147014,146244],{},[399,147016,147017],{},"基础、经典、可定制",[353,147019,147020,147023],{},[399,147021,147022],{},"seaborn",[399,147024,147025],{},"统计图表更美观",[353,147027,147028,147030],{},[399,147029,146252],{},[399,147031,147032],{},"生成交互式网页图表",[353,147034,147035,147038],{},[399,147036,147037],{},"plotly",[399,147039,147040],{},"交互图表能力强",[14,147042,147043],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[149,147045,147047],{"id":147046},"_102-json回顾","10.2 JSON回顾",[14,147049,147050],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,147052,147053],{},"Python 字典：",[18,147055,147057],{"className":30429,"code":147056,"language":30431,"meta":23,"style":23},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[25,147058,147059,147067,147078,147087],{"__ignoreMap":23},[28,147060,147061,147063,147065],{"class":30,"line":31},[28,147062,101709],{"class":211},[28,147064,257],{"class":207},[28,147066,15649],{"class":211},[28,147068,147069,147072,147074,147076],{"class":30,"line":42},[28,147070,147071],{"class":64},"    \"name\"",[28,147073,51488],{"class":211},[28,147075,69320],{"class":64},[28,147077,31517],{"class":211},[28,147079,147080,147083,147085],{"class":30,"line":50},[28,147081,147082],{"class":64},"    \"value\"",[28,147084,51488],{"class":211},[28,147086,97509],{"class":38},[28,147088,147089],{"class":30,"line":58},[28,147090,1643],{"class":211},[14,147092,147093],{},"JSON 字符串：",[18,147095,147098],{"className":147096,"code":147097,"language":145843,"meta":23,"style":23},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[25,147099,147100,147104,147115,147124],{"__ignoreMap":23},[28,147101,147102],{"class":30,"line":31},[28,147103,1624],{"class":211},[28,147105,147106,147109,147111,147113],{"class":30,"line":42},[28,147107,147108],{"class":38},"  \"name\"",[28,147110,51488],{"class":211},[28,147112,69320],{"class":64},[28,147114,31517],{"class":211},[28,147116,147117,147120,147122],{"class":30,"line":50},[28,147118,147119],{"class":38},"  \"value\"",[28,147121,51488],{"class":211},[28,147123,97509],{"class":38},[28,147125,147126],{"class":30,"line":58},[28,147127,1643],{"class":211},[14,147129,147130],{},"Python 与 JSON 的转换：",[18,147132,147134],{"className":30429,"code":147133,"language":30431,"meta":23,"style":23},"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",[25,147135,147136,147143,147147,147172,147176,147195,147202,147206,147216],{"__ignoreMap":23},[28,147137,147138,147140],{"class":30,"line":31},[28,147139,30443],{"class":207},[28,147141,147142],{"class":211}," json\n",[28,147144,147145],{"class":30,"line":42},[28,147146,2477],{"emptyLinePlaceholder":134},[28,147148,147149,147151,147153,147155,147157,147159,147161,147163,147166,147168,147170],{"class":30,"line":50},[28,147150,101709],{"class":211},[28,147152,257],{"class":207},[28,147154,4525],{"class":211},[28,147156,62730],{"class":64},[28,147158,51488],{"class":211},[28,147160,69320],{"class":64},[28,147162,12512],{"class":211},[28,147164,147165],{"class":64},"\"value\"",[28,147167,51488],{"class":211},[28,147169,521],{"class":38},[28,147171,1643],{"class":211},[28,147173,147174],{"class":30,"line":58},[28,147175,2477],{"emptyLinePlaceholder":134},[28,147177,147178,147181,147183,147186,147189,147191,147193],{"class":30,"line":70},[28,147179,147180],{"class":211},"json_text ",[28,147182,257],{"class":207},[28,147184,147185],{"class":211}," json.dumps(data, ",[28,147187,147188],{"class":5293},"ensure_ascii",[28,147190,257],{"class":207},[28,147192,34038],{"class":38},[28,147194,218],{"class":211},[28,147196,147197,147199],{"class":30,"line":78},[28,147198,30466],{"class":38},[28,147200,147201],{"class":211},"(json_text)\n",[28,147203,147204],{"class":30,"line":86},[28,147205,2477],{"emptyLinePlaceholder":134},[28,147207,147208,147211,147213],{"class":30,"line":97},[28,147209,147210],{"class":211},"new_data ",[28,147212,257],{"class":207},[28,147214,147215],{"class":211}," json.loads(json_text)\n",[28,147217,147218,147220],{"class":30,"line":108},[28,147219,30466],{"class":38},[28,147221,147222],{"class":211},"(new_data)\n",[149,147224,147226],{"id":147225},"_103-安装pyecharts","10.3 安装pyecharts",[18,147228,147230],{"className":20,"code":147229,"language":22,"meta":23,"style":23},"pip install pyecharts\n",[25,147231,147232],{"__ignoreMap":23},[28,147233,147234,147236,147238],{"class":30,"line":31},[28,147235,23906],{"class":34},[28,147237,23909],{"class":64},[28,147239,147240],{"class":64}," pyecharts\n",[14,147242,147243],{},"验证：",[18,147245,147247],{"className":30429,"code":147246,"language":30431,"meta":23,"style":23},"import pyecharts\n\nprint(pyecharts.__version__)\n",[25,147248,147249,147255,147259],{"__ignoreMap":23},[28,147250,147251,147253],{"class":30,"line":31},[28,147252,30443],{"class":207},[28,147254,147240],{"class":211},[28,147256,147257],{"class":30,"line":42},[28,147258,2477],{"emptyLinePlaceholder":134},[28,147260,147261,147263,147266,147269],{"class":30,"line":50},[28,147262,30466],{"class":38},[28,147264,147265],{"class":211},"(pyecharts.",[28,147267,147268],{"class":38},"__version__",[28,147270,218],{"class":211},[14,147272,147273],{},"如果使用虚拟环境，要先激活环境再安装。",[149,147275,147277],{"id":147276},"_104-第一个折线图","10.4 第一个折线图",[18,147279,147281],{"className":30429,"code":147280,"language":30431,"meta":23,"style":23},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[25,147282,147283,147295,147299,147309,147339,147371],{"__ignoreMap":23},[28,147284,147285,147287,147290,147292],{"class":30,"line":31},[28,147286,30788],{"class":207},[28,147288,147289],{"class":211}," pyecharts.charts ",[28,147291,30443],{"class":207},[28,147293,147294],{"class":211}," Line\n",[28,147296,147297],{"class":30,"line":42},[28,147298,2477],{"emptyLinePlaceholder":134},[28,147300,147301,147304,147306],{"class":30,"line":50},[28,147302,147303],{"class":211},"line ",[28,147305,257],{"class":207},[28,147307,147308],{"class":211}," Line()\n",[28,147310,147311,147314,147317,147319,147322,147324,147327,147329,147332,147334,147337],{"class":30,"line":58},[28,147312,147313],{"class":211},"line.add_xaxis([",[28,147315,147316],{"class":64},"\"周一\"",[28,147318,12512],{"class":211},[28,147320,147321],{"class":64},"\"周二\"",[28,147323,12512],{"class":211},[28,147325,147326],{"class":64},"\"周三\"",[28,147328,12512],{"class":211},[28,147330,147331],{"class":64},"\"周四\"",[28,147333,12512],{"class":211},[28,147335,147336],{"class":64},"\"周五\"",[28,147338,4734],{"class":211},[28,147340,147341,147344,147347,147349,147351,147353,147355,147357,147359,147361,147364,147366,147369],{"class":30,"line":70},[28,147342,147343],{"class":211},"line.add_yaxis(",[28,147345,147346],{"class":64},"\"销售额\"",[28,147348,77569],{"class":211},[28,147350,521],{"class":38},[28,147352,12512],{"class":211},[28,147354,1027],{"class":38},[28,147356,12512],{"class":211},[28,147358,1072],{"class":38},[28,147360,12512],{"class":211},[28,147362,147363],{"class":38},"150",[28,147365,12512],{"class":211},[28,147367,147368],{"class":38},"180",[28,147370,4734],{"class":211},[28,147372,147373,147376,147379],{"class":30,"line":78},[28,147374,147375],{"class":211},"line.render(",[28,147377,147378],{"class":64},"\"line.html\"",[28,147380,218],{"class":211},[14,147382,147383,147384,147387],{},"运行后会生成 ",[25,147385,147386],{},"line.html","，用浏览器打开即可看到图表。",[14,147389,147390],{},"核心步骤：",[161,147392,147393,147396,147399,147402,147405],{},[119,147394,147395],{},"导入图表类。",[119,147397,147398],{},"创建图表对象。",[119,147400,147401],{},"添加 x 轴数据。",[119,147403,147404],{},"添加 y 轴数据。",[119,147406,147407],{},"渲染为 HTML。",[149,147409,147411],{"id":147410},"_105-全局配置","10.5 全局配置",[14,147413,147414,147415,147418],{},"常用配置在 ",[25,147416,147417],{},"pyecharts.options"," 中。",[18,147420,147422],{"className":30429,"code":147421,"language":30431,"meta":23,"style":23},"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",[25,147423,147424,147441,147451,147455,147463,147487,147515,147520,147539,147558,147576,147596,147600],{"__ignoreMap":23},[28,147425,147426,147428,147431,147433,147436,147438],{"class":30,"line":31},[28,147427,30788],{"class":207},[28,147429,147430],{"class":211}," pyecharts ",[28,147432,30443],{"class":207},[28,147434,147435],{"class":211}," options ",[28,147437,31434],{"class":207},[28,147439,147440],{"class":211}," opts\n",[28,147442,147443,147445,147447,147449],{"class":30,"line":42},[28,147444,30788],{"class":207},[28,147446,147289],{"class":211},[28,147448,30443],{"class":207},[28,147450,147294],{"class":211},[28,147452,147453],{"class":30,"line":50},[28,147454,2477],{"emptyLinePlaceholder":134},[28,147456,147457,147459,147461],{"class":30,"line":58},[28,147458,147303],{"class":211},[28,147460,257],{"class":207},[28,147462,147308],{"class":211},[28,147464,147465,147467,147469,147471,147473,147475,147477,147479,147481,147483,147485],{"class":30,"line":70},[28,147466,147313],{"class":211},[28,147468,147316],{"class":64},[28,147470,12512],{"class":211},[28,147472,147321],{"class":64},[28,147474,12512],{"class":211},[28,147476,147326],{"class":64},[28,147478,12512],{"class":211},[28,147480,147331],{"class":64},[28,147482,12512],{"class":211},[28,147484,147336],{"class":64},[28,147486,4734],{"class":211},[28,147488,147489,147491,147493,147495,147497,147499,147501,147503,147505,147507,147509,147511,147513],{"class":30,"line":78},[28,147490,147343],{"class":211},[28,147492,147346],{"class":64},[28,147494,77569],{"class":211},[28,147496,521],{"class":38},[28,147498,12512],{"class":211},[28,147500,1027],{"class":38},[28,147502,12512],{"class":211},[28,147504,1072],{"class":38},[28,147506,12512],{"class":211},[28,147508,147363],{"class":38},[28,147510,12512],{"class":211},[28,147512,147368],{"class":38},[28,147514,4734],{"class":211},[28,147516,147517],{"class":30,"line":86},[28,147518,147519],{"class":211},"line.set_global_opts(\n",[28,147521,147522,147525,147527,147530,147532,147534,147537],{"class":30,"line":97},[28,147523,147524],{"class":5293},"    title_opts",[28,147526,257],{"class":207},[28,147528,147529],{"class":211},"opts.TitleOpts(",[28,147531,51458],{"class":5293},[28,147533,257],{"class":207},[28,147535,147536],{"class":64},"\"一周销售额\"",[28,147538,38098],{"class":211},[28,147540,147541,147544,147546,147549,147551,147553,147556],{"class":30,"line":108},[28,147542,147543],{"class":5293},"    xaxis_opts",[28,147545,257],{"class":207},[28,147547,147548],{"class":211},"opts.AxisOpts(",[28,147550,79861],{"class":5293},[28,147552,257],{"class":207},[28,147554,147555],{"class":64},"\"日期\"",[28,147557,38098],{"class":211},[28,147559,147560,147563,147565,147567,147569,147571,147574],{"class":30,"line":1407},[28,147561,147562],{"class":5293},"    yaxis_opts",[28,147564,257],{"class":207},[28,147566,147548],{"class":211},[28,147568,79861],{"class":5293},[28,147570,257],{"class":207},[28,147572,147573],{"class":64},"\"金额\"",[28,147575,38098],{"class":211},[28,147577,147578,147581,147583,147586,147589,147591,147594],{"class":30,"line":1690},[28,147579,147580],{"class":5293},"    tooltip_opts",[28,147582,257],{"class":207},[28,147584,147585],{"class":211},"opts.TooltipOpts(",[28,147587,147588],{"class":5293},"trigger",[28,147590,257],{"class":207},[28,147592,147593],{"class":64},"\"axis\"",[28,147595,38098],{"class":211},[28,147597,147598],{"class":30,"line":1695},[28,147599,218],{"class":211},[28,147601,147602,147604,147606],{"class":30,"line":1701},[28,147603,147375],{"class":211},[28,147605,147378],{"class":64},[28,147607,218],{"class":211},[14,147609,147610],{},"常见全局配置：",[347,147612,147613,147622],{},[350,147614,147615],{},[353,147616,147617,147620],{},[356,147618,147619],{},"配置",[356,147621,102747],{},[394,147623,147624,147634,147644,147654,147664,147674],{},[353,147625,147626,147631],{},[399,147627,147628],{},[25,147629,147630],{},"TitleOpts",[399,147632,147633],{},"标题",[353,147635,147636,147641],{},[399,147637,147638],{},[25,147639,147640],{},"LegendOpts",[399,147642,147643],{},"图例",[353,147645,147646,147651],{},[399,147647,147648],{},[25,147649,147650],{},"TooltipOpts",[399,147652,147653],{},"提示框",[353,147655,147656,147661],{},[399,147657,147658],{},[25,147659,147660],{},"AxisOpts",[399,147662,147663],{},"坐标轴",[353,147665,147666,147671],{},[399,147667,147668],{},[25,147669,147670],{},"VisualMapOpts",[399,147672,147673],{},"视觉映射",[353,147675,147676,147681],{},[399,147677,147678],{},[25,147679,147680],{},"DataZoomOpts",[399,147682,147683],{},"区域缩放",[149,147685,147687],{"id":147686},"_106-系列配置","10.6 系列配置",[14,147689,147690],{},"系列配置作用于某一组数据。",[18,147692,147694],{"className":30429,"code":147693,"language":30431,"meta":23,"style":23},"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",[25,147695,147696,147701,147712,147741,147752,147771],{"__ignoreMap":23},[28,147697,147698],{"class":30,"line":31},[28,147699,147700],{"class":211},"line.add_yaxis(\n",[28,147702,147703,147706,147708,147710],{"class":30,"line":42},[28,147704,147705],{"class":5293},"    series_name",[28,147707,257],{"class":207},[28,147709,147346],{"class":64},[28,147711,31517],{"class":211},[28,147713,147714,147717,147719,147721,147723,147725,147727,147729,147731,147733,147735,147737,147739],{"class":30,"line":50},[28,147715,147716],{"class":5293},"    y_axis",[28,147718,257],{"class":207},[28,147720,1100],{"class":211},[28,147722,521],{"class":38},[28,147724,12512],{"class":211},[28,147726,1027],{"class":38},[28,147728,12512],{"class":211},[28,147730,1072],{"class":38},[28,147732,12512],{"class":211},[28,147734,147363],{"class":38},[28,147736,12512],{"class":211},[28,147738,147368],{"class":38},[28,147740,87887],{"class":211},[28,147742,147743,147746,147748,147750],{"class":30,"line":58},[28,147744,147745],{"class":5293},"    is_smooth",[28,147747,257],{"class":207},[28,147749,31527],{"class":38},[28,147751,31517],{"class":211},[28,147753,147754,147757,147759,147762,147765,147767,147769],{"class":30,"line":70},[28,147755,147756],{"class":5293},"    label_opts",[28,147758,257],{"class":207},[28,147760,147761],{"class":211},"opts.LabelOpts(",[28,147763,147764],{"class":5293},"is_show",[28,147766,257],{"class":207},[28,147768,31527],{"class":38},[28,147770,38098],{"class":211},[28,147772,147773],{"class":30,"line":78},[28,147774,218],{"class":211},[14,147776,147777],{},"常用参数：",[161,147779,147780,147786,147792,147798,147804],{},[119,147781,147782,147785],{},[25,147783,147784],{},"series_name","：系列名称。",[119,147787,147788,147791],{},[25,147789,147790],{},"y_axis","：y 轴数据。",[119,147793,147794,147797],{},[25,147795,147796],{},"is_smooth","：是否平滑曲线。",[119,147799,147800,147803],{},[25,147801,147802],{},"label_opts","：标签配置。",[119,147805,147806,147809],{},[25,147807,147808],{},"symbol_size","：标记点大小。",[149,147811,147813],{"id":147812},"_107-多条折线","10.7 多条折线",[18,147815,147817],{"className":30429,"code":147816,"language":30431,"meta":23,"style":23},"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",[25,147818,147819,147833,147843,147847,147876,147880,147888,147893,147931,147968,147972,147989,148005,148009],{"__ignoreMap":23},[28,147820,147821,147823,147825,147827,147829,147831],{"class":30,"line":31},[28,147822,30788],{"class":207},[28,147824,147430],{"class":211},[28,147826,30443],{"class":207},[28,147828,147435],{"class":211},[28,147830,31434],{"class":207},[28,147832,147440],{"class":211},[28,147834,147835,147837,147839,147841],{"class":30,"line":42},[28,147836,30788],{"class":207},[28,147838,147289],{"class":211},[28,147840,30443],{"class":207},[28,147842,147294],{"class":211},[28,147844,147845],{"class":30,"line":50},[28,147846,2477],{"emptyLinePlaceholder":134},[28,147848,147849,147852,147854,147856,147858,147860,147862,147864,147866,147868,147870,147872,147874],{"class":30,"line":58},[28,147850,147851],{"class":211},"dates ",[28,147853,257],{"class":207},[28,147855,52277],{"class":211},[28,147857,147316],{"class":64},[28,147859,12512],{"class":211},[28,147861,147321],{"class":64},[28,147863,12512],{"class":211},[28,147865,147326],{"class":64},[28,147867,12512],{"class":211},[28,147869,147331],{"class":64},[28,147871,12512],{"class":211},[28,147873,147336],{"class":64},[28,147875,33297],{"class":211},[28,147877,147878],{"class":30,"line":70},[28,147879,2477],{"emptyLinePlaceholder":134},[28,147881,147882,147884,147886],{"class":30,"line":78},[28,147883,147303],{"class":211},[28,147885,257],{"class":207},[28,147887,147308],{"class":211},[28,147889,147890],{"class":30,"line":86},[28,147891,147892],{"class":211},"line.add_xaxis(dates)\n",[28,147894,147895,147897,147900,147902,147904,147906,147909,147911,147913,147915,147917,147919,147921,147923,147925,147927,147929],{"class":30,"line":97},[28,147896,147343],{"class":211},[28,147898,147899],{"class":64},"\"线上销售\"",[28,147901,77569],{"class":211},[28,147903,521],{"class":38},[28,147905,12512],{"class":211},[28,147907,147908],{"class":38},"130",[28,147910,12512],{"class":211},[28,147912,1027],{"class":38},[28,147914,12512],{"class":211},[28,147916,21125],{"class":38},[28,147918,12512],{"class":211},[28,147920,1800],{"class":38},[28,147922,112253],{"class":211},[28,147924,147796],{"class":5293},[28,147926,257],{"class":207},[28,147928,31527],{"class":38},[28,147930,218],{"class":211},[28,147932,147933,147935,147938,147940,147942,147944,147946,147948,147950,147952,147954,147956,147958,147960,147962,147964,147966],{"class":30,"line":108},[28,147934,147343],{"class":211},[28,147936,147937],{"class":64},"\"线下销售\"",[28,147939,77569],{"class":211},[28,147941,822],{"class":38},[28,147943,12512],{"class":211},[28,147945,1072],{"class":38},[28,147947,12512],{"class":211},[28,147949,521],{"class":38},[28,147951,12512],{"class":211},[28,147953,1027],{"class":38},[28,147955,12512],{"class":211},[28,147957,147363],{"class":38},[28,147959,112253],{"class":211},[28,147961,147796],{"class":5293},[28,147963,257],{"class":207},[28,147965,31527],{"class":38},[28,147967,218],{"class":211},[28,147969,147970],{"class":30,"line":1407},[28,147971,147519],{"class":211},[28,147973,147974,147976,147978,147980,147982,147984,147987],{"class":30,"line":1690},[28,147975,147524],{"class":5293},[28,147977,257],{"class":207},[28,147979,147529],{"class":211},[28,147981,51458],{"class":5293},[28,147983,257],{"class":207},[28,147985,147986],{"class":64},"\"线上线下销售趋势\"",[28,147988,38098],{"class":211},[28,147990,147991,147993,147995,147997,147999,148001,148003],{"class":30,"line":1695},[28,147992,147580],{"class":5293},[28,147994,257],{"class":207},[28,147996,147585],{"class":211},[28,147998,147588],{"class":5293},[28,148000,257],{"class":207},[28,148002,147593],{"class":64},[28,148004,38098],{"class":211},[28,148006,148007],{"class":30,"line":1701},[28,148008,218],{"class":211},[28,148010,148011,148013,148016],{"class":30,"line":1706},[28,148012,147375],{"class":211},[28,148014,148015],{"class":64},"\"sales.html\"",[28,148017,218],{"class":211},[14,148019,148020],{},"多条折线适合比较不同指标或不同地区。",[149,148022,148024],{"id":148023},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,148026,148027,148028,24694],{},"假设 ",[25,148029,148030],{},"sales.json",[18,148032,148034],{"className":147096,"code":148033,"language":145843,"meta":23,"style":23},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[25,148035,148036,148041,148073,148101,148129],{"__ignoreMap":23},[28,148037,148038],{"class":30,"line":31},[28,148039,148040],{"class":211},"[\n",[28,148042,148043,148046,148049,148051,148053,148055,148058,148060,148062,148064,148067,148069,148071],{"class":30,"line":42},[28,148044,148045],{"class":211},"  {",[28,148047,148048],{"class":38},"\"date\"",[28,148050,51488],{"class":211},[28,148052,147316],{"class":64},[28,148054,12512],{"class":211},[28,148056,148057],{"class":38},"\"online\"",[28,148059,51488],{"class":211},[28,148061,521],{"class":38},[28,148063,12512],{"class":211},[28,148065,148066],{"class":38},"\"offline\"",[28,148068,51488],{"class":211},[28,148070,822],{"class":38},[28,148072,5007],{"class":211},[28,148074,148075,148077,148079,148081,148083,148085,148087,148089,148091,148093,148095,148097,148099],{"class":30,"line":50},[28,148076,148045],{"class":211},[28,148078,148048],{"class":38},[28,148080,51488],{"class":211},[28,148082,147321],{"class":64},[28,148084,12512],{"class":211},[28,148086,148057],{"class":38},[28,148088,51488],{"class":211},[28,148090,147908],{"class":38},[28,148092,12512],{"class":211},[28,148094,148066],{"class":38},[28,148096,51488],{"class":211},[28,148098,1072],{"class":38},[28,148100,5007],{"class":211},[28,148102,148103,148105,148107,148109,148111,148113,148115,148117,148119,148121,148123,148125,148127],{"class":30,"line":58},[28,148104,148045],{"class":211},[28,148106,148048],{"class":38},[28,148108,51488],{"class":211},[28,148110,147326],{"class":64},[28,148112,12512],{"class":211},[28,148114,148057],{"class":38},[28,148116,51488],{"class":211},[28,148118,1027],{"class":38},[28,148120,12512],{"class":211},[28,148122,148066],{"class":38},[28,148124,51488],{"class":211},[28,148126,521],{"class":38},[28,148128,1643],{"class":211},[28,148130,148131],{"class":30,"line":70},[28,148132,33297],{"class":211},[14,148134,148135],{},"读取并绘图：",[18,148137,148139],{"className":30429,"code":148138,"language":30431,"meta":23,"style":23},"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",[25,148140,148141,148147,148161,148171,148175,148207,148220,148224,148232,148241,148250,148254,148266,148275,148284,148293,148297,148305,148309,148326,148343,148347,148364,148380,148384],{"__ignoreMap":23},[28,148142,148143,148145],{"class":30,"line":31},[28,148144,30443],{"class":207},[28,148146,147142],{"class":211},[28,148148,148149,148151,148153,148155,148157,148159],{"class":30,"line":42},[28,148150,30788],{"class":207},[28,148152,147430],{"class":211},[28,148154,30443],{"class":207},[28,148156,147435],{"class":211},[28,148158,31434],{"class":207},[28,148160,147440],{"class":211},[28,148162,148163,148165,148167,148169],{"class":30,"line":50},[28,148164,30788],{"class":207},[28,148166,147289],{"class":211},[28,148168,30443],{"class":207},[28,148170,147294],{"class":211},[28,148172,148173],{"class":30,"line":58},[28,148174,2477],{"emptyLinePlaceholder":134},[28,148176,148177,148179,148181,148183,148186,148188,148190,148192,148194,148196,148198,148200,148202,148205],{"class":30,"line":70},[28,148178,107884],{"class":207},[28,148180,146842],{"class":38},[28,148182,212],{"class":211},[28,148184,148185],{"class":64},"\"sales.json\"",[28,148187,12512],{"class":211},[28,148189,146852],{"class":64},[28,148191,12512],{"class":211},[28,148193,146857],{"class":5293},[28,148195,257],{"class":207},[28,148197,146862],{"class":64},[28,148199,13791],{"class":211},[28,148201,31434],{"class":207},[28,148203,148204],{"class":5293}," file",[28,148206,3816],{"class":211},[28,148208,148209,148211,148213,148216,148218],{"class":30,"line":78},[28,148210,101472],{"class":211},[28,148212,257],{"class":207},[28,148214,148215],{"class":211}," json.load(",[28,148217,45405],{"class":5293},[28,148219,218],{"class":211},[28,148221,148222],{"class":30,"line":86},[28,148223,2477],{"emptyLinePlaceholder":134},[28,148225,148226,148228,148230],{"class":30,"line":97},[28,148227,147851],{"class":211},[28,148229,257],{"class":207},[28,148231,51889],{"class":211},[28,148233,148234,148237,148239],{"class":30,"line":108},[28,148235,148236],{"class":211},"online_sales ",[28,148238,257],{"class":207},[28,148240,51889],{"class":211},[28,148242,148243,148246,148248],{"class":30,"line":1407},[28,148244,148245],{"class":211},"offline_sales ",[28,148247,257],{"class":207},[28,148249,51889],{"class":211},[28,148251,148252],{"class":30,"line":1690},[28,148253,2477],{"emptyLinePlaceholder":134},[28,148255,148256,148258,148261,148263],{"class":30,"line":1695},[28,148257,3102],{"class":207},[28,148259,148260],{"class":211}," item ",[28,148262,26094],{"class":207},[28,148264,148265],{"class":211}," data:\n",[28,148267,148268,148271,148273],{"class":30,"line":1701},[28,148269,148270],{"class":211},"    dates.append(item[",[28,148272,148048],{"class":64},[28,148274,4734],{"class":211},[28,148276,148277,148280,148282],{"class":30,"line":1706},[28,148278,148279],{"class":211},"    online_sales.append(item[",[28,148281,148057],{"class":64},[28,148283,4734],{"class":211},[28,148285,148286,148289,148291],{"class":30,"line":1720},[28,148287,148288],{"class":211},"    offline_sales.append(item[",[28,148290,148066],{"class":64},[28,148292,4734],{"class":211},[28,148294,148295],{"class":30,"line":1725},[28,148296,2477],{"emptyLinePlaceholder":134},[28,148298,148299,148301,148303],{"class":30,"line":1731},[28,148300,147303],{"class":211},[28,148302,257],{"class":207},[28,148304,147308],{"class":211},[28,148306,148307],{"class":30,"line":1752},[28,148308,147892],{"class":211},[28,148310,148311,148313,148315,148318,148320,148322,148324],{"class":30,"line":1757},[28,148312,147343],{"class":211},[28,148314,147899],{"class":64},[28,148316,148317],{"class":211},", online_sales, ",[28,148319,147796],{"class":5293},[28,148321,257],{"class":207},[28,148323,31527],{"class":38},[28,148325,218],{"class":211},[28,148327,148328,148330,148332,148335,148337,148339,148341],{"class":30,"line":1771},[28,148329,147343],{"class":211},[28,148331,147937],{"class":64},[28,148333,148334],{"class":211},", offline_sales, ",[28,148336,147796],{"class":5293},[28,148338,257],{"class":207},[28,148340,31527],{"class":38},[28,148342,218],{"class":211},[28,148344,148345],{"class":30,"line":1776},[28,148346,147519],{"class":211},[28,148348,148349,148351,148353,148355,148357,148359,148362],{"class":30,"line":1805},[28,148350,147524],{"class":5293},[28,148352,257],{"class":207},[28,148354,147529],{"class":211},[28,148356,51458],{"class":5293},[28,148358,257],{"class":207},[28,148360,148361],{"class":64},"\"销售趋势\"",[28,148363,38098],{"class":211},[28,148365,148366,148368,148370,148372,148374,148376,148378],{"class":30,"line":1810},[28,148367,147580],{"class":5293},[28,148369,257],{"class":207},[28,148371,147585],{"class":211},[28,148373,147588],{"class":5293},[28,148375,257],{"class":207},[28,148377,147593],{"class":64},[28,148379,38098],{"class":211},[28,148381,148382],{"class":30,"line":1827},[28,148383,218],{"class":211},[28,148385,148386,148388,148390],{"class":30,"line":1832},[28,148387,147375],{"class":211},[28,148389,148015],{"class":64},[28,148391,218],{"class":211},[149,148393,148395],{"id":148394},"_109-数据清洗","10.9 数据清洗",[14,148397,148398],{},"真实数据经常不整齐，需要清洗。",[14,148400,148401],{},"常见问题：",[161,148403,148404,148407,148410,148413],{},[119,148405,148406],{},"数字是字符串。",[119,148408,148409],{},"字段缺失。",[119,148411,148412],{},"空值。",[119,148414,148415],{},"日期格式不统一。",[14,148417,15212],{},[18,148419,148421],{"className":30429,"code":148420,"language":30431,"meta":23,"style":23},"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",[25,148422,148423,148432,148455,148475,148496,148500,148504,148512,148521,148525,148536,148550,148559,148564,148568,148576,148586,148590,148597],{"__ignoreMap":23},[28,148424,148425,148428,148430],{"class":30,"line":31},[28,148426,148427],{"class":211},"raw_data ",[28,148429,257],{"class":207},[28,148431,55498],{"class":211},[28,148433,148434,148437,148439,148441,148443,148445,148448,148450,148453],{"class":30,"line":42},[28,148435,148436],{"class":211},"    {",[28,148438,148048],{"class":64},[28,148440,51488],{"class":211},[28,148442,147316],{"class":64},[28,148444,12512],{"class":211},[28,148446,148447],{"class":64},"\"sales\"",[28,148449,51488],{"class":211},[28,148451,148452],{"class":64},"\"100\"",[28,148454,5007],{"class":211},[28,148456,148457,148459,148461,148463,148465,148467,148469,148471,148473],{"class":30,"line":50},[28,148458,148436],{"class":211},[28,148460,148048],{"class":64},[28,148462,51488],{"class":211},[28,148464,147321],{"class":64},[28,148466,12512],{"class":211},[28,148468,148447],{"class":64},[28,148470,51488],{"class":211},[28,148472,7729],{"class":64},[28,148474,5007],{"class":211},[28,148476,148477,148479,148481,148483,148485,148487,148489,148491,148494],{"class":30,"line":58},[28,148478,148436],{"class":211},[28,148480,148048],{"class":64},[28,148482,51488],{"class":211},[28,148484,147326],{"class":64},[28,148486,12512],{"class":211},[28,148488,148447],{"class":64},[28,148490,51488],{"class":211},[28,148492,148493],{"class":64},"\"120\"",[28,148495,5007],{"class":211},[28,148497,148498],{"class":30,"line":70},[28,148499,33297],{"class":211},[28,148501,148502],{"class":30,"line":78},[28,148503,2477],{"emptyLinePlaceholder":134},[28,148505,148506,148508,148510],{"class":30,"line":86},[28,148507,147851],{"class":211},[28,148509,257],{"class":207},[28,148511,51889],{"class":211},[28,148513,148514,148517,148519],{"class":30,"line":97},[28,148515,148516],{"class":211},"sales ",[28,148518,257],{"class":207},[28,148520,51889],{"class":211},[28,148522,148523],{"class":30,"line":108},[28,148524,2477],{"emptyLinePlaceholder":134},[28,148526,148527,148529,148531,148533],{"class":30,"line":1407},[28,148528,3102],{"class":207},[28,148530,148260],{"class":211},[28,148532,26094],{"class":207},[28,148534,148535],{"class":211}," raw_data:\n",[28,148537,148538,148541,148543,148546,148548],{"class":30,"line":1690},[28,148539,148540],{"class":211},"    value ",[28,148542,257],{"class":207},[28,148544,148545],{"class":211}," item.get(",[28,148547,148447],{"class":64},[28,148549,218],{"class":211},[28,148551,148552,148554,148556],{"class":30,"line":1695},[28,148553,3178],{"class":207},[28,148555,38981],{"class":207},[28,148557,148558],{"class":211}," value:\n",[28,148560,148561],{"class":30,"line":1701},[28,148562,148563],{"class":207},"        continue\n",[28,148565,148566],{"class":30,"line":1706},[28,148567,2477],{"emptyLinePlaceholder":134},[28,148569,148570,148572,148574],{"class":30,"line":1720},[28,148571,148270],{"class":211},[28,148573,148048],{"class":64},[28,148575,4734],{"class":211},[28,148577,148578,148581,148583],{"class":30,"line":1725},[28,148579,148580],{"class":211},"    sales.append(",[28,148582,215],{"class":38},[28,148584,148585],{"class":211},"(value))\n",[28,148587,148588],{"class":30,"line":1731},[28,148589,2477],{"emptyLinePlaceholder":134},[28,148591,148592,148594],{"class":30,"line":1752},[28,148593,30466],{"class":38},[28,148595,148596],{"class":211},"(dates)\n",[28,148598,148599,148601],{"class":30,"line":1757},[28,148600,30466],{"class":38},[28,148602,148603],{"class":211},"(sales)\n",[149,148605,148607],{"id":148606},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[18,148609,148611],{"className":30429,"code":148610,"language":30431,"meta":23,"style":23},"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",[25,148612,148613,148627,148637,148641,148649,148670,148692,148714,148736,148758,148762,148766,148788,148809,148813,148821,148825,148829,148839,148848,148858,148874,148878,148882,148899,148915,148931,148947,148957,148961],{"__ignoreMap":23},[28,148614,148615,148617,148619,148621,148623,148625],{"class":30,"line":31},[28,148616,30788],{"class":207},[28,148618,147430],{"class":211},[28,148620,30443],{"class":207},[28,148622,147435],{"class":211},[28,148624,31434],{"class":207},[28,148626,147440],{"class":211},[28,148628,148629,148631,148633,148635],{"class":30,"line":42},[28,148630,30788],{"class":207},[28,148632,147289],{"class":211},[28,148634,30443],{"class":207},[28,148636,147294],{"class":211},[28,148638,148639],{"class":30,"line":50},[28,148640,2477],{"emptyLinePlaceholder":134},[28,148642,148643,148645,148647],{"class":30,"line":58},[28,148644,148516],{"class":211},[28,148646,257],{"class":207},[28,148648,55498],{"class":211},[28,148650,148651,148653,148655,148657,148660,148662,148664,148666,148668],{"class":30,"line":70},[28,148652,148436],{"class":211},[28,148654,148048],{"class":64},[28,148656,51488],{"class":211},[28,148658,148659],{"class":64},"\"2024-10-01\"",[28,148661,12512],{"class":211},[28,148663,84135],{"class":64},[28,148665,51488],{"class":211},[28,148667,92074],{"class":38},[28,148669,5007],{"class":211},[28,148671,148672,148674,148676,148678,148681,148683,148685,148687,148690],{"class":30,"line":78},[28,148673,148436],{"class":211},[28,148675,148048],{"class":64},[28,148677,51488],{"class":211},[28,148679,148680],{"class":64},"\"2024-10-02\"",[28,148682,12512],{"class":211},[28,148684,84135],{"class":64},[28,148686,51488],{"class":211},[28,148688,148689],{"class":38},"1800",[28,148691,5007],{"class":211},[28,148693,148694,148696,148698,148700,148703,148705,148707,148709,148712],{"class":30,"line":86},[28,148695,148436],{"class":211},[28,148697,148048],{"class":64},[28,148699,51488],{"class":211},[28,148701,148702],{"class":64},"\"2024-10-03\"",[28,148704,12512],{"class":211},[28,148706,84135],{"class":64},[28,148708,51488],{"class":211},[28,148710,148711],{"class":38},"1500",[28,148713,5007],{"class":211},[28,148715,148716,148718,148720,148722,148725,148727,148729,148731,148734],{"class":30,"line":97},[28,148717,148436],{"class":211},[28,148719,148048],{"class":64},[28,148721,51488],{"class":211},[28,148723,148724],{"class":64},"\"2024-10-04\"",[28,148726,12512],{"class":211},[28,148728,84135],{"class":64},[28,148730,51488],{"class":211},[28,148732,148733],{"class":38},"2100",[28,148735,5007],{"class":211},[28,148737,148738,148740,148742,148744,148747,148749,148751,148753,148756],{"class":30,"line":108},[28,148739,148436],{"class":211},[28,148741,148048],{"class":64},[28,148743,51488],{"class":211},[28,148745,148746],{"class":64},"\"2024-10-05\"",[28,148748,12512],{"class":211},[28,148750,84135],{"class":64},[28,148752,51488],{"class":211},[28,148754,148755],{"class":38},"2600",[28,148757,5007],{"class":211},[28,148759,148760],{"class":30,"line":1407},[28,148761,33297],{"class":211},[28,148763,148764],{"class":30,"line":1690},[28,148765,2477],{"emptyLinePlaceholder":134},[28,148767,148768,148770,148772,148775,148777,148779,148781,148783,148785],{"class":30,"line":1695},[28,148769,147851],{"class":211},[28,148771,257],{"class":207},[28,148773,148774],{"class":211}," [item[",[28,148776,148048],{"class":64},[28,148778,4520],{"class":211},[28,148780,3102],{"class":207},[28,148782,148260],{"class":211},[28,148784,26094],{"class":207},[28,148786,148787],{"class":211}," sales]\n",[28,148789,148790,148793,148795,148797,148799,148801,148803,148805,148807],{"class":30,"line":1701},[28,148791,148792],{"class":211},"amounts ",[28,148794,257],{"class":207},[28,148796,148774],{"class":211},[28,148798,84135],{"class":64},[28,148800,4520],{"class":211},[28,148802,3102],{"class":207},[28,148804,148260],{"class":211},[28,148806,26094],{"class":207},[28,148808,148787],{"class":211},[28,148810,148811],{"class":30,"line":1706},[28,148812,2477],{"emptyLinePlaceholder":134},[28,148814,148815,148817,148819],{"class":30,"line":1720},[28,148816,147303],{"class":211},[28,148818,257],{"class":207},[28,148820,147308],{"class":211},[28,148822,148823],{"class":30,"line":1725},[28,148824,147892],{"class":211},[28,148826,148827],{"class":30,"line":1731},[28,148828,147700],{"class":211},[28,148830,148831,148833,148835,148837],{"class":30,"line":1752},[28,148832,147705],{"class":5293},[28,148834,257],{"class":207},[28,148836,147346],{"class":64},[28,148838,31517],{"class":211},[28,148840,148841,148843,148845],{"class":30,"line":1757},[28,148842,147716],{"class":5293},[28,148844,257],{"class":207},[28,148846,148847],{"class":211},"amounts,\n",[28,148849,148850,148852,148854,148856],{"class":30,"line":1771},[28,148851,147745],{"class":5293},[28,148853,257],{"class":207},[28,148855,31527],{"class":38},[28,148857,31517],{"class":211},[28,148859,148860,148862,148864,148866,148868,148870,148872],{"class":30,"line":1776},[28,148861,147756],{"class":5293},[28,148863,257],{"class":207},[28,148865,147761],{"class":211},[28,148867,147764],{"class":5293},[28,148869,257],{"class":207},[28,148871,31527],{"class":38},[28,148873,38098],{"class":211},[28,148875,148876],{"class":30,"line":1805},[28,148877,218],{"class":211},[28,148879,148880],{"class":30,"line":1810},[28,148881,147519],{"class":211},[28,148883,148884,148886,148888,148890,148892,148894,148897],{"class":30,"line":1827},[28,148885,147524],{"class":5293},[28,148887,257],{"class":207},[28,148889,147529],{"class":211},[28,148891,51458],{"class":5293},[28,148893,257],{"class":207},[28,148895,148896],{"class":64},"\"每日销售额\"",[28,148898,38098],{"class":211},[28,148900,148901,148903,148905,148907,148909,148911,148913],{"class":30,"line":1832},[28,148902,147543],{"class":5293},[28,148904,257],{"class":207},[28,148906,147548],{"class":211},[28,148908,79861],{"class":5293},[28,148910,257],{"class":207},[28,148912,147555],{"class":64},[28,148914,38098],{"class":211},[28,148916,148917,148919,148921,148923,148925,148927,148929],{"class":30,"line":1837},[28,148918,147562],{"class":5293},[28,148920,257],{"class":207},[28,148922,147548],{"class":211},[28,148924,79861],{"class":5293},[28,148926,257],{"class":207},[28,148928,147573],{"class":64},[28,148930,38098],{"class":211},[28,148932,148933,148935,148937,148939,148941,148943,148945],{"class":30,"line":1842},[28,148934,147580],{"class":5293},[28,148936,257],{"class":207},[28,148938,147585],{"class":211},[28,148940,147588],{"class":5293},[28,148942,257],{"class":207},[28,148944,147593],{"class":64},[28,148946,38098],{"class":211},[28,148948,148949,148952,148954],{"class":30,"line":1856},[28,148950,148951],{"class":5293},"    datazoom_opts",[28,148953,257],{"class":207},[28,148955,148956],{"class":211},"[opts.DataZoomOpts()],\n",[28,148958,148959],{"class":30,"line":1861},[28,148960,218],{"class":211},[28,148962,148963,148965,148968],{"class":30,"line":2654},[28,148964,147375],{"class":211},[28,148966,148967],{"class":64},"\"daily_sales.html\"",[28,148969,218],{"class":211},[14,148971,148972,148975],{},[25,148973,148974],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[149,148977,148979],{"id":148978},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148981,148982],{},"如果数据结构如下：",[18,148984,148986],{"className":30429,"code":148985,"language":30431,"meta":23,"style":23},"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",[25,148987,148988,148996,149004,149026,149047,149052,149059,149079,149099,149103],{"__ignoreMap":23},[28,148989,148990,148992,148994],{"class":30,"line":31},[28,148991,101709],{"class":211},[28,148993,257],{"class":207},[28,148995,15649],{"class":211},[28,148997,148998,149001],{"class":30,"line":42},[28,148999,149000],{"class":64},"    \"北京\"",[28,149002,149003],{"class":211},": [\n",[28,149005,149006,149008,149010,149012,149015,149017,149020,149022,149024],{"class":30,"line":50},[28,149007,4994],{"class":211},[28,149009,148048],{"class":64},[28,149011,51488],{"class":211},[28,149013,149014],{"class":64},"\"2024-01-01\"",[28,149016,12512],{"class":211},[28,149018,149019],{"class":64},"\"confirm\"",[28,149021,51488],{"class":211},[28,149023,656],{"class":38},[28,149025,5007],{"class":211},[28,149027,149028,149030,149032,149034,149037,149039,149041,149043,149045],{"class":30,"line":58},[28,149029,4994],{"class":211},[28,149031,148048],{"class":64},[28,149033,51488],{"class":211},[28,149035,149036],{"class":64},"\"2024-01-02\"",[28,149038,12512],{"class":211},[28,149040,149019],{"class":64},[28,149042,51488],{"class":211},[28,149044,708],{"class":38},[28,149046,5007],{"class":211},[28,149048,149049],{"class":30,"line":70},[28,149050,149051],{"class":211},"    ],\n",[28,149053,149054,149057],{"class":30,"line":78},[28,149055,149056],{"class":64},"    \"上海\"",[28,149058,149003],{"class":211},[28,149060,149061,149063,149065,149067,149069,149071,149073,149075,149077],{"class":30,"line":86},[28,149062,4994],{"class":211},[28,149064,148048],{"class":64},[28,149066,51488],{"class":211},[28,149068,149014],{"class":64},[28,149070,12512],{"class":211},[28,149072,149019],{"class":64},[28,149074,51488],{"class":211},[28,149076,605],{"class":38},[28,149078,5007],{"class":211},[28,149080,149081,149083,149085,149087,149089,149091,149093,149095,149097],{"class":30,"line":97},[28,149082,4994],{"class":211},[28,149084,148048],{"class":64},[28,149086,51488],{"class":211},[28,149088,149036],{"class":64},[28,149090,12512],{"class":211},[28,149092,149019],{"class":64},[28,149094,51488],{"class":211},[28,149096,733],{"class":38},[28,149098,5007],{"class":211},[28,149100,149101],{"class":30,"line":108},[28,149102,149051],{"class":211},[28,149104,149105],{"class":30,"line":1407},[28,149106,1643],{"class":211},[14,149108,149109],{},"绘制多地区趋势：",[18,149111,149113],{"className":30429,"code":149112,"language":30431,"meta":23,"style":23},"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",[25,149114,149115,149129,149139,149143,149168,149172,149180,149184,149188,149200,149222,149235,149239,149243,149260,149276,149280],{"__ignoreMap":23},[28,149116,149117,149119,149121,149123,149125,149127],{"class":30,"line":31},[28,149118,30788],{"class":207},[28,149120,147430],{"class":211},[28,149122,30443],{"class":207},[28,149124,147435],{"class":211},[28,149126,31434],{"class":207},[28,149128,147440],{"class":211},[28,149130,149131,149133,149135,149137],{"class":30,"line":42},[28,149132,30788],{"class":207},[28,149134,147289],{"class":211},[28,149136,30443],{"class":207},[28,149138,147294],{"class":211},[28,149140,149141],{"class":30,"line":50},[28,149142,2477],{"emptyLinePlaceholder":134},[28,149144,149145,149147,149149,149151,149153,149155,149157,149159,149161,149164,149166],{"class":30,"line":58},[28,149146,147851],{"class":211},[28,149148,257],{"class":207},[28,149150,148774],{"class":211},[28,149152,148048],{"class":64},[28,149154,4520],{"class":211},[28,149156,3102],{"class":207},[28,149158,148260],{"class":211},[28,149160,26094],{"class":207},[28,149162,149163],{"class":211}," data[",[28,149165,69320],{"class":64},[28,149167,77578],{"class":211},[28,149169,149170],{"class":30,"line":70},[28,149171,2477],{"emptyLinePlaceholder":134},[28,149173,149174,149176,149178],{"class":30,"line":78},[28,149175,147303],{"class":211},[28,149177,257],{"class":207},[28,149179,147308],{"class":211},[28,149181,149182],{"class":30,"line":86},[28,149183,147892],{"class":211},[28,149185,149186],{"class":30,"line":97},[28,149187,2477],{"emptyLinePlaceholder":134},[28,149189,149190,149192,149195,149197],{"class":30,"line":108},[28,149191,3102],{"class":207},[28,149193,149194],{"class":211}," city, records ",[28,149196,26094],{"class":207},[28,149198,149199],{"class":211}," data.items():\n",[28,149201,149202,149205,149207,149209,149211,149213,149215,149217,149219],{"class":30,"line":1407},[28,149203,149204],{"class":211},"    values ",[28,149206,257],{"class":207},[28,149208,148774],{"class":211},[28,149210,149019],{"class":64},[28,149212,4520],{"class":211},[28,149214,3102],{"class":207},[28,149216,148260],{"class":211},[28,149218,26094],{"class":207},[28,149220,149221],{"class":211}," records]\n",[28,149223,149224,149227,149229,149231,149233],{"class":30,"line":1690},[28,149225,149226],{"class":211},"    line.add_yaxis(city, values, ",[28,149228,147796],{"class":5293},[28,149230,257],{"class":207},[28,149232,31527],{"class":38},[28,149234,218],{"class":211},[28,149236,149237],{"class":30,"line":1695},[28,149238,2477],{"emptyLinePlaceholder":134},[28,149240,149241],{"class":30,"line":1701},[28,149242,147519],{"class":211},[28,149244,149245,149247,149249,149251,149253,149255,149258],{"class":30,"line":1706},[28,149246,147524],{"class":5293},[28,149248,257],{"class":207},[28,149250,147529],{"class":211},[28,149252,51458],{"class":5293},[28,149254,257],{"class":207},[28,149256,149257],{"class":64},"\"多地区趋势图\"",[28,149259,38098],{"class":211},[28,149261,149262,149264,149266,149268,149270,149272,149274],{"class":30,"line":1720},[28,149263,147580],{"class":5293},[28,149265,257],{"class":207},[28,149267,147585],{"class":211},[28,149269,147588],{"class":5293},[28,149271,257],{"class":207},[28,149273,147593],{"class":64},[28,149275,38098],{"class":211},[28,149277,149278],{"class":30,"line":1725},[28,149279,218],{"class":211},[28,149281,149282,149284,149287],{"class":30,"line":1731},[28,149283,147375],{"class":211},[28,149285,149286],{"class":64},"\"trend.html\"",[28,149288,218],{"class":211},[14,149290,149291],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[149,149293,149295],{"id":149294},"_1012-易错点","10.12 易错点",[161,149297,149298,149304,149310,149320,149326],{},[119,149299,149300,149303],{},[25,149301,149302],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[119,149305,149306,149309],{},[25,149307,149308],{},"render()"," 生成的是 HTML，不是图片。",[119,149311,149312,149313,149316,149317,28436],{},"JSON 字符串用 ",[25,149314,149315],{},"json.loads()","，JSON 文件用 ",[25,149318,149319],{},"json.load()",[119,149321,149322,149323,28436],{},"中文 JSON 保存时加 ",[25,149324,149325],{},"ensure_ascii=False",[119,149327,149328],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[149,149330,149332],{"id":149331},"_1013-本章练习","10.13 本章练习",[161,149334,149335,149338,149341,149344,149347],{},[119,149336,149337],{},"安装 pyecharts 并生成第一个折线图。",[119,149339,149340],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[119,149342,149343],{},"绘制两条折线，对比线上和线下销售额。",[119,149345,149346],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[119,149348,149349],{},"对含有空值的销售数据进行清洗后再绘图。",[126,149351,149352],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":23,"searchDepth":42,"depth":42,"links":149354},[149355,149356,149357,149358,149359,149360,149361,149362,149363,149364,149365,149366,149367],{"id":146971,"depth":42,"text":146972},{"id":147046,"depth":42,"text":147047},{"id":147225,"depth":42,"text":147226},{"id":147276,"depth":42,"text":147277},{"id":147410,"depth":42,"text":147411},{"id":147686,"depth":42,"text":147687},{"id":147812,"depth":42,"text":147813},{"id":148023,"depth":42,"text":148024},{"id":148394,"depth":42,"text":148395},{"id":148606,"depth":42,"text":148607},{"id":148978,"depth":42,"text":148979},{"id":149294,"depth":42,"text":149295},{"id":149331,"depth":42,"text":149332},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146963,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149374,"title":149375,"body":149376,"description":131,"extension":132,"meta":151736,"navigation":134,"path":151737,"seo":151738,"stem":151739,"__hash__":151740},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149377,"toc":151713},[149378,149381,149385,149388,149391,149467,149470,149561,149564,149568,149571,149615,149628,149632,149635,149702,149705,149709,149712,149796,149804,149808,149813,149954,149957,149968,149974,149980,150094,150098,150101,150104,150357,150360,150364,150367,150471,150474,150478,150629,150633,150640,150753,150757,150760,150866,150869,150873,150876,150907,150910,151015,151018,151022,151026,151036,151104,151108,151115,151179,151182,151186,151192,151288,151297,151301,151625,151634,151638,151666,151670,151710],[10,149379,149375],{"id":149380},"_11-面向对象基础",[149,149382,149384],{"id":149383},"_111-什么是面向对象","11.1 什么是面向对象",[14,149386,149387],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149389,149390],{},"面向过程：",[18,149392,149394],{"className":30429,"code":149393,"language":30431,"meta":23,"style":23},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[25,149395,149396,149405,149413,149417,149427,149458,149462],{"__ignoreMap":23},[28,149397,149398,149400,149402],{"class":30,"line":31},[28,149399,146587],{"class":211},[28,149401,257],{"class":207},[28,149403,149404],{"class":64}," \"小明\"\n",[28,149406,149407,149409,149411],{"class":30,"line":42},[28,149408,146597],{"class":211},[28,149410,257],{"class":207},[28,149412,146602],{"class":38},[28,149414,149415],{"class":30,"line":50},[28,149416,2477],{"emptyLinePlaceholder":134},[28,149418,149419,149421,149424],{"class":30,"line":58},[28,149420,31998],{"class":207},[28,149422,149423],{"class":34}," introduce",[28,149425,149426],{"class":211},"(name, age):\n",[28,149428,149429,149431,149433,149435,149438,149440,149442,149444,149447,149449,149451,149453,149456],{"class":30,"line":70},[28,149430,31350],{"class":38},[28,149432,212],{"class":211},[28,149434,263],{"class":207},[28,149436,149437],{"class":64},"\"我叫",[28,149439,1106],{"class":38},[28,149441,79861],{"class":211},[28,149443,1156],{"class":38},[28,149445,149446],{"class":64},"，今年",[28,149448,1106],{"class":38},[28,149450,70272],{"class":211},[28,149452,1156],{"class":38},[28,149454,149455],{"class":64},"岁\"",[28,149457,218],{"class":211},[28,149459,149460],{"class":30,"line":78},[28,149461,2477],{"emptyLinePlaceholder":134},[28,149463,149464],{"class":30,"line":86},[28,149465,149466],{"class":211},"introduce(name, age)\n",[14,149468,149469],{},"面向对象：",[18,149471,149473],{"className":30429,"code":149472,"language":30431,"meta":23,"style":23},"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",[25,149474,149475,149483,149491,149520,149524,149528,149538,149547,149556],{"__ignoreMap":23},[28,149476,149477,149479,149481],{"class":30,"line":31},[28,149478,14771],{"class":207},[28,149480,7975],{"class":34},[28,149482,3816],{"class":211},[28,149484,149485,149487,149489],{"class":30,"line":42},[28,149486,30852],{"class":207},[28,149488,149423],{"class":34},[28,149490,30858],{"class":211},[28,149492,149493,149495,149497,149499,149501,149504,149506,149508,149510,149512,149514,149516,149518],{"class":30,"line":50},[28,149494,32502],{"class":38},[28,149496,212],{"class":211},[28,149498,263],{"class":207},[28,149500,149437],{"class":64},[28,149502,149503],{"class":38},"{self",[28,149505,80352],{"class":211},[28,149507,1156],{"class":38},[28,149509,149446],{"class":64},[28,149511,149503],{"class":38},[28,149513,80364],{"class":211},[28,149515,1156],{"class":38},[28,149517,149455],{"class":64},[28,149519,218],{"class":211},[28,149521,149522],{"class":30,"line":58},[28,149523,2477],{"emptyLinePlaceholder":134},[28,149525,149526],{"class":30,"line":70},[28,149527,2477],{"emptyLinePlaceholder":134},[28,149529,149530,149533,149535],{"class":30,"line":78},[28,149531,149532],{"class":211},"student ",[28,149534,257],{"class":207},[28,149536,149537],{"class":211}," Student()\n",[28,149539,149540,149543,149545],{"class":30,"line":86},[28,149541,149542],{"class":211},"student.name ",[28,149544,257],{"class":207},[28,149546,149404],{"class":64},[28,149548,149549,149552,149554],{"class":30,"line":97},[28,149550,149551],{"class":211},"student.age ",[28,149553,257],{"class":207},[28,149555,146602],{"class":38},[28,149557,149558],{"class":30,"line":108},[28,149559,149560],{"class":211},"student.introduce()\n",[14,149562,149563],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[149,149565,149567],{"id":149566},"_112-类和对象","11.2 类和对象",[14,149569,149570],{},"类是模板，对象是根据模板创建出来的具体实例。",[18,149572,149574],{"className":30429,"code":149573,"language":30431,"meta":23,"style":23},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[25,149575,149576,149584,149589,149593,149597,149606],{"__ignoreMap":23},[28,149577,149578,149580,149582],{"class":30,"line":31},[28,149579,14771],{"class":207},[28,149581,7975],{"class":34},[28,149583,3816],{"class":211},[28,149585,149586],{"class":30,"line":42},[28,149587,149588],{"class":207},"    pass\n",[28,149590,149591],{"class":30,"line":50},[28,149592,2477],{"emptyLinePlaceholder":134},[28,149594,149595],{"class":30,"line":58},[28,149596,2477],{"emptyLinePlaceholder":134},[28,149598,149599,149602,149604],{"class":30,"line":70},[28,149600,149601],{"class":211},"student1 ",[28,149603,257],{"class":207},[28,149605,149537],{"class":211},[28,149607,149608,149611,149613],{"class":30,"line":78},[28,149609,149610],{"class":211},"student2 ",[28,149612,257],{"class":207},[28,149614,149537],{"class":211},[14,149616,149617,149620,149621,101069,149624,149627],{},[25,149618,149619],{},"Student"," 是类，",[25,149622,149623],{},"student1",[25,149625,149626],{},"student2"," 是对象。",[149,149629,149631],{"id":149630},"_113-属性","11.3 属性",[14,149633,149634],{},"属性是对象保存的数据。",[18,149636,149638],{"className":30429,"code":149637,"language":30431,"meta":23,"style":23},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[25,149639,149640,149648,149652,149656,149660,149668,149676,149684,149688,149695],{"__ignoreMap":23},[28,149641,149642,149644,149646],{"class":30,"line":31},[28,149643,14771],{"class":207},[28,149645,7975],{"class":34},[28,149647,3816],{"class":211},[28,149649,149650],{"class":30,"line":42},[28,149651,149588],{"class":207},[28,149653,149654],{"class":30,"line":50},[28,149655,2477],{"emptyLinePlaceholder":134},[28,149657,149658],{"class":30,"line":58},[28,149659,2477],{"emptyLinePlaceholder":134},[28,149661,149662,149664,149666],{"class":30,"line":70},[28,149663,149532],{"class":211},[28,149665,257],{"class":207},[28,149667,149537],{"class":211},[28,149669,149670,149672,149674],{"class":30,"line":78},[28,149671,149542],{"class":211},[28,149673,257],{"class":207},[28,149675,149404],{"class":64},[28,149677,149678,149680,149682],{"class":30,"line":86},[28,149679,149551],{"class":211},[28,149681,257],{"class":207},[28,149683,146602],{"class":38},[28,149685,149686],{"class":30,"line":97},[28,149687,2477],{"emptyLinePlaceholder":134},[28,149689,149690,149692],{"class":30,"line":108},[28,149691,30466],{"class":38},[28,149693,149694],{"class":211},"(student.name)\n",[28,149696,149697,149699],{"class":30,"line":1407},[28,149698,30466],{"class":38},[28,149700,149701],{"class":211},"(student.age)\n",[14,149703,149704],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[149,149706,149708],{"id":149707},"_114-方法","11.4 方法",[14,149710,149711],{},"类中的函数叫方法。",[18,149713,149714],{"className":30429,"code":149472,"language":30431,"meta":23,"style":23},[25,149715,149716,149724,149732,149760,149764,149768,149776,149784,149792],{"__ignoreMap":23},[28,149717,149718,149720,149722],{"class":30,"line":31},[28,149719,14771],{"class":207},[28,149721,7975],{"class":34},[28,149723,3816],{"class":211},[28,149725,149726,149728,149730],{"class":30,"line":42},[28,149727,30852],{"class":207},[28,149729,149423],{"class":34},[28,149731,30858],{"class":211},[28,149733,149734,149736,149738,149740,149742,149744,149746,149748,149750,149752,149754,149756,149758],{"class":30,"line":50},[28,149735,32502],{"class":38},[28,149737,212],{"class":211},[28,149739,263],{"class":207},[28,149741,149437],{"class":64},[28,149743,149503],{"class":38},[28,149745,80352],{"class":211},[28,149747,1156],{"class":38},[28,149749,149446],{"class":64},[28,149751,149503],{"class":38},[28,149753,80364],{"class":211},[28,149755,1156],{"class":38},[28,149757,149455],{"class":64},[28,149759,218],{"class":211},[28,149761,149762],{"class":30,"line":58},[28,149763,2477],{"emptyLinePlaceholder":134},[28,149765,149766],{"class":30,"line":70},[28,149767,2477],{"emptyLinePlaceholder":134},[28,149769,149770,149772,149774],{"class":30,"line":78},[28,149771,149532],{"class":211},[28,149773,257],{"class":207},[28,149775,149537],{"class":211},[28,149777,149778,149780,149782],{"class":30,"line":86},[28,149779,149542],{"class":211},[28,149781,257],{"class":207},[28,149783,149404],{"class":64},[28,149785,149786,149788,149790],{"class":30,"line":97},[28,149787,149551],{"class":211},[28,149789,257],{"class":207},[28,149791,146602],{"class":38},[28,149793,149794],{"class":30,"line":108},[28,149795,149560],{"class":211},[14,149797,149798,149800,149801,149803],{},[25,149799,30874],{}," 表示当前对象。调用方法时不需要手动传入 ",[25,149802,30874],{},"，Python 会自动传。",[149,149805,149807],{"id":149806},"_115-构造方法__init__","11.5 构造方法__init__",[14,149809,149810,149812],{},[25,149811,30880],{}," 在对象创建时自动执行，用于初始化属性。",[18,149814,149816],{"className":30429,"code":149815,"language":30431,"meta":23,"style":23},"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",[25,149817,149818,149826,149835,149847,149859,149870,149874,149882,149920,149924,149928,149950],{"__ignoreMap":23},[28,149819,149820,149822,149824],{"class":30,"line":31},[28,149821,14771],{"class":207},[28,149823,7975],{"class":34},[28,149825,3816],{"class":211},[28,149827,149828,149830,149832],{"class":30,"line":42},[28,149829,30852],{"class":207},[28,149831,30855],{"class":38},[28,149833,149834],{"class":211},"(self, name, age, score):\n",[28,149836,149837,149839,149842,149844],{"class":30,"line":50},[28,149838,30896],{"class":38},[28,149840,149841],{"class":211},".name ",[28,149843,257],{"class":207},[28,149845,149846],{"class":211}," name\n",[28,149848,149849,149851,149854,149856],{"class":30,"line":58},[28,149850,30896],{"class":38},[28,149852,149853],{"class":211},".age ",[28,149855,257],{"class":207},[28,149857,149858],{"class":211}," age\n",[28,149860,149861,149863,149866,149868],{"class":30,"line":70},[28,149862,30896],{"class":38},[28,149864,149865],{"class":211},".score ",[28,149867,257],{"class":207},[28,149869,1657],{"class":211},[28,149871,149872],{"class":30,"line":78},[28,149873,2477],{"emptyLinePlaceholder":134},[28,149875,149876,149878,149880],{"class":30,"line":86},[28,149877,30852],{"class":207},[28,149879,149423],{"class":34},[28,149881,30858],{"class":211},[28,149883,149884,149886,149888,149890,149892,149894,149896,149898,149900,149902,149904,149906,149909,149911,149914,149916,149918],{"class":30,"line":97},[28,149885,32502],{"class":38},[28,149887,212],{"class":211},[28,149889,263],{"class":207},[28,149891,149437],{"class":64},[28,149893,149503],{"class":38},[28,149895,80352],{"class":211},[28,149897,1156],{"class":38},[28,149899,149446],{"class":64},[28,149901,149503],{"class":38},[28,149903,80364],{"class":211},[28,149905,1156],{"class":38},[28,149907,149908],{"class":64},"岁，成绩",[28,149910,149503],{"class":38},[28,149912,149913],{"class":211},".score",[28,149915,1156],{"class":38},[28,149917,461],{"class":64},[28,149919,218],{"class":211},[28,149921,149922],{"class":30,"line":108},[28,149923,2477],{"emptyLinePlaceholder":134},[28,149925,149926],{"class":30,"line":1407},[28,149927,2477],{"emptyLinePlaceholder":134},[28,149929,149930,149932,149934,149937,149940,149942,149944,149946,149948],{"class":30,"line":1690},[28,149931,149532],{"class":211},[28,149933,257],{"class":207},[28,149935,149936],{"class":211}," Student(",[28,149938,149939],{"class":64},"\"小明\"",[28,149941,12512],{"class":211},[28,149943,860],{"class":38},[28,149945,12512],{"class":211},[28,149947,1199],{"class":38},[28,149949,218],{"class":211},[28,149951,149952],{"class":30,"line":1695},[28,149953,149560],{"class":211},[14,149955,149956],{},"构造方法的好处：",[161,149958,149959,149962,149965],{},[119,149960,149961],{},"创建对象时必须提供必要数据。",[119,149963,149964],{},"属性初始化集中，不容易漏。",[119,149966,149967],{},"对象状态更完整。",[149,149969,149971,149972],{"id":149970},"_116-str","11.6 ",[359,149973,1379],{},[14,149975,149976,149977,28436],{},"直接打印对象时，默认输出不直观。可以定义 ",[25,149978,149979],{},"__str__",[18,149981,149983],{"className":30429,"code":149982,"language":30431,"meta":23,"style":23},"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",[25,149984,149985,149993,150002,150012,150022,150026,150035,150063,150067,150071,150087],{"__ignoreMap":23},[28,149986,149987,149989,149991],{"class":30,"line":31},[28,149988,14771],{"class":207},[28,149990,7975],{"class":34},[28,149992,3816],{"class":211},[28,149994,149995,149997,149999],{"class":30,"line":42},[28,149996,30852],{"class":207},[28,149998,30855],{"class":38},[28,150000,150001],{"class":211},"(self, name, age):\n",[28,150003,150004,150006,150008,150010],{"class":30,"line":50},[28,150005,30896],{"class":38},[28,150007,149841],{"class":211},[28,150009,257],{"class":207},[28,150011,149846],{"class":211},[28,150013,150014,150016,150018,150020],{"class":30,"line":58},[28,150015,30896],{"class":38},[28,150017,149853],{"class":211},[28,150019,257],{"class":207},[28,150021,149858],{"class":211},[28,150023,150024],{"class":30,"line":70},[28,150025,2477],{"emptyLinePlaceholder":134},[28,150027,150028,150030,150033],{"class":30,"line":78},[28,150029,30852],{"class":207},[28,150031,150032],{"class":38}," __str__",[28,150034,30858],{"class":211},[28,150036,150037,150039,150042,150045,150047,150049,150051,150054,150056,150058,150060],{"class":30,"line":86},[28,150038,14829],{"class":207},[28,150040,150041],{"class":207}," f",[28,150043,150044],{"class":64},"\"Student(name=",[28,150046,149503],{"class":38},[28,150048,80352],{"class":211},[28,150050,1156],{"class":38},[28,150052,150053],{"class":64},", age=",[28,150055,149503],{"class":38},[28,150057,80364],{"class":211},[28,150059,1156],{"class":38},[28,150061,150062],{"class":64},")\"\n",[28,150064,150065],{"class":30,"line":97},[28,150066,2477],{"emptyLinePlaceholder":134},[28,150068,150069],{"class":30,"line":108},[28,150070,2477],{"emptyLinePlaceholder":134},[28,150072,150073,150075,150077,150079,150081,150083,150085],{"class":30,"line":1407},[28,150074,149532],{"class":211},[28,150076,257],{"class":207},[28,150078,149936],{"class":211},[28,150080,149939],{"class":64},[28,150082,12512],{"class":211},[28,150084,860],{"class":38},[28,150086,218],{"class":211},[28,150088,150089,150091],{"class":30,"line":1690},[28,150090,30466],{"class":38},[28,150092,150093],{"class":211},"(student)\n",[149,150095,150097],{"id":150096},"_117-封装","11.7 封装",[14,150099,150100],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150102,150103],{},"Python 中以双下划线开头的属性通常视为私有属性。",[18,150105,150107],{"className":30429,"code":150106,"language":30431,"meta":23,"style":23},"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",[25,150108,150109,150118,150127,150139,150151,150155,150164,150173,150177,150187,150200,150211,150216,150227,150231,150240,150252,150263,150267,150280,150291,150295,150306,150310,150314,150332,150341,150350],{"__ignoreMap":23},[28,150110,150111,150113,150116],{"class":30,"line":31},[28,150112,14771],{"class":207},[28,150114,150115],{"class":34}," Account",[28,150117,3816],{"class":211},[28,150119,150120,150122,150124],{"class":30,"line":42},[28,150121,30852],{"class":207},[28,150123,30855],{"class":38},[28,150125,150126],{"class":211},"(self, owner, balance):\n",[28,150128,150129,150131,150134,150136],{"class":30,"line":50},[28,150130,30896],{"class":38},[28,150132,150133],{"class":211},".owner ",[28,150135,257],{"class":207},[28,150137,150138],{"class":211}," owner\n",[28,150140,150141,150143,150146,150148],{"class":30,"line":58},[28,150142,30896],{"class":38},[28,150144,150145],{"class":211},".__balance ",[28,150147,257],{"class":207},[28,150149,150150],{"class":211}," balance\n",[28,150152,150153],{"class":30,"line":70},[28,150154,2477],{"emptyLinePlaceholder":134},[28,150156,150157,150159,150162],{"class":30,"line":78},[28,150158,30852],{"class":207},[28,150160,150161],{"class":34}," get_balance",[28,150163,30858],{"class":211},[28,150165,150166,150168,150170],{"class":30,"line":86},[28,150167,14829],{"class":207},[28,150169,38924],{"class":38},[28,150171,150172],{"class":211},".__balance\n",[28,150174,150175],{"class":30,"line":97},[28,150176,2477],{"emptyLinePlaceholder":134},[28,150178,150179,150181,150184],{"class":30,"line":108},[28,150180,30852],{"class":207},[28,150182,150183],{"class":34}," deposit",[28,150185,150186],{"class":211},"(self, money):\n",[28,150188,150189,150191,150194,150196,150198],{"class":30,"line":1407},[28,150190,2574],{"class":207},[28,150192,150193],{"class":211}," money ",[28,150195,1666],{"class":207},[28,150197,4170],{"class":38},[28,150199,3816],{"class":211},[28,150201,150202,150204,150206,150209],{"class":30,"line":1690},[28,150203,34701],{"class":38},[28,150205,212],{"class":211},[28,150207,150208],{"class":64},"\"存款金额必须大于0\"",[28,150210,218],{"class":211},[28,150212,150213],{"class":30,"line":1695},[28,150214,150215],{"class":207},"            return\n",[28,150217,150218,150220,150222,150224],{"class":30,"line":1701},[28,150219,30896],{"class":38},[28,150221,150145],{"class":211},[28,150223,9554],{"class":207},[28,150225,150226],{"class":211}," money\n",[28,150228,150229],{"class":30,"line":1706},[28,150230,2477],{"emptyLinePlaceholder":134},[28,150232,150233,150235,150238],{"class":30,"line":1720},[28,150234,30852],{"class":207},[28,150236,150237],{"class":34}," withdraw",[28,150239,150186],{"class":211},[28,150241,150242,150244,150246,150248,150250],{"class":30,"line":1725},[28,150243,2574],{"class":207},[28,150245,150193],{"class":211},[28,150247,1666],{"class":207},[28,150249,4170],{"class":38},[28,150251,3816],{"class":211},[28,150253,150254,150256,150258,150261],{"class":30,"line":1731},[28,150255,34701],{"class":38},[28,150257,212],{"class":211},[28,150259,150260],{"class":64},"\"取款金额必须大于0\"",[28,150262,218],{"class":211},[28,150264,150265],{"class":30,"line":1752},[28,150266,150215],{"class":207},[28,150268,150269,150271,150273,150275,150277],{"class":30,"line":1757},[28,150270,2574],{"class":207},[28,150272,150193],{"class":211},[28,150274,1170],{"class":207},[28,150276,38924],{"class":38},[28,150278,150279],{"class":211},".__balance:\n",[28,150281,150282,150284,150286,150289],{"class":30,"line":1771},[28,150283,34701],{"class":38},[28,150285,212],{"class":211},[28,150287,150288],{"class":64},"\"余额不足\"",[28,150290,218],{"class":211},[28,150292,150293],{"class":30,"line":1776},[28,150294,150215],{"class":207},[28,150296,150297,150299,150301,150304],{"class":30,"line":1805},[28,150298,30896],{"class":38},[28,150300,150145],{"class":211},[28,150302,150303],{"class":207},"-=",[28,150305,150226],{"class":211},[28,150307,150308],{"class":30,"line":1810},[28,150309,2477],{"emptyLinePlaceholder":134},[28,150311,150312],{"class":30,"line":1827},[28,150313,2477],{"emptyLinePlaceholder":134},[28,150315,150316,150319,150321,150324,150326,150328,150330],{"class":30,"line":1832},[28,150317,150318],{"class":211},"account ",[28,150320,257],{"class":207},[28,150322,150323],{"class":211}," Account(",[28,150325,149939],{"class":64},[28,150327,12512],{"class":211},[28,150329,6487],{"class":38},[28,150331,218],{"class":211},[28,150333,150334,150337,150339],{"class":30,"line":1837},[28,150335,150336],{"class":211},"account.deposit(",[28,150338,1800],{"class":38},[28,150340,218],{"class":211},[28,150342,150343,150346,150348],{"class":30,"line":1842},[28,150344,150345],{"class":211},"account.withdraw(",[28,150347,521],{"class":38},[28,150349,218],{"class":211},[28,150351,150352,150354],{"class":30,"line":1856},[28,150353,30466],{"class":38},[28,150355,150356],{"class":211},"(account.get_balance())\n",[14,150358,150359],{},"封装的意义是避免外部随意修改内部状态。",[149,150361,150363],{"id":150362},"_118-继承","11.8 继承",[14,150365,150366],{},"继承可以让子类复用父类的属性和方法。",[18,150368,150370],{"className":30429,"code":150369,"language":30431,"meta":23,"style":23},"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",[25,150371,150372,150381,150390,150401,150405,150409,150423,150432,150443,150447,150451,150461,150466],{"__ignoreMap":23},[28,150373,150374,150376,150379],{"class":30,"line":31},[28,150375,14771],{"class":207},[28,150377,150378],{"class":34}," Animal",[28,150380,3816],{"class":211},[28,150382,150383,150385,150388],{"class":30,"line":42},[28,150384,30852],{"class":207},[28,150386,150387],{"class":34}," eat",[28,150389,30858],{"class":211},[28,150391,150392,150394,150396,150399],{"class":30,"line":50},[28,150393,32502],{"class":38},[28,150395,212],{"class":211},[28,150397,150398],{"class":64},"\"吃东西\"",[28,150400,218],{"class":211},[28,150402,150403],{"class":30,"line":58},[28,150404,2477],{"emptyLinePlaceholder":134},[28,150406,150407],{"class":30,"line":70},[28,150408,2477],{"emptyLinePlaceholder":134},[28,150410,150411,150413,150416,150418,150421],{"class":30,"line":78},[28,150412,14771],{"class":207},[28,150414,150415],{"class":34}," Dog",[28,150417,212],{"class":211},[28,150419,150420],{"class":34},"Animal",[28,150422,30837],{"class":211},[28,150424,150425,150427,150430],{"class":30,"line":86},[28,150426,30852],{"class":207},[28,150428,150429],{"class":34}," bark",[28,150431,30858],{"class":211},[28,150433,150434,150436,150438,150441],{"class":30,"line":97},[28,150435,32502],{"class":38},[28,150437,212],{"class":211},[28,150439,150440],{"class":64},"\"汪汪\"",[28,150442,218],{"class":211},[28,150444,150445],{"class":30,"line":108},[28,150446,2477],{"emptyLinePlaceholder":134},[28,150448,150449],{"class":30,"line":1407},[28,150450,2477],{"emptyLinePlaceholder":134},[28,150452,150453,150456,150458],{"class":30,"line":1690},[28,150454,150455],{"class":211},"dog ",[28,150457,257],{"class":207},[28,150459,150460],{"class":211}," Dog()\n",[28,150462,150463],{"class":30,"line":1695},[28,150464,150465],{"class":211},"dog.eat()\n",[28,150467,150468],{"class":30,"line":1701},[28,150469,150470],{"class":211},"dog.bark()\n",[14,150472,150473],{},"子类可以扩展新方法，也可以重写父类方法。",[149,150475,150477],{"id":150476},"_119-方法重写","11.9 方法重写",[18,150479,150481],{"className":30429,"code":150480,"language":30431,"meta":23,"style":23},"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",[25,150482,150483,150491,150500,150511,150515,150519,150531,150539,150549,150553,150557,150570,150578,150589,150593,150597,150605,150615,150619,150624],{"__ignoreMap":23},[28,150484,150485,150487,150489],{"class":30,"line":31},[28,150486,14771],{"class":207},[28,150488,150378],{"class":34},[28,150490,3816],{"class":211},[28,150492,150493,150495,150498],{"class":30,"line":42},[28,150494,30852],{"class":207},[28,150496,150497],{"class":34}," speak",[28,150499,30858],{"class":211},[28,150501,150502,150504,150506,150509],{"class":30,"line":50},[28,150503,32502],{"class":38},[28,150505,212],{"class":211},[28,150507,150508],{"class":64},"\"动物叫\"",[28,150510,218],{"class":211},[28,150512,150513],{"class":30,"line":58},[28,150514,2477],{"emptyLinePlaceholder":134},[28,150516,150517],{"class":30,"line":70},[28,150518,2477],{"emptyLinePlaceholder":134},[28,150520,150521,150523,150525,150527,150529],{"class":30,"line":78},[28,150522,14771],{"class":207},[28,150524,150415],{"class":34},[28,150526,212],{"class":211},[28,150528,150420],{"class":34},[28,150530,30837],{"class":211},[28,150532,150533,150535,150537],{"class":30,"line":86},[28,150534,30852],{"class":207},[28,150536,150497],{"class":34},[28,150538,30858],{"class":211},[28,150540,150541,150543,150545,150547],{"class":30,"line":97},[28,150542,32502],{"class":38},[28,150544,212],{"class":211},[28,150546,150440],{"class":64},[28,150548,218],{"class":211},[28,150550,150551],{"class":30,"line":108},[28,150552,2477],{"emptyLinePlaceholder":134},[28,150554,150555],{"class":30,"line":1407},[28,150556,2477],{"emptyLinePlaceholder":134},[28,150558,150559,150561,150564,150566,150568],{"class":30,"line":1690},[28,150560,14771],{"class":207},[28,150562,150563],{"class":34}," Cat",[28,150565,212],{"class":211},[28,150567,150420],{"class":34},[28,150569,30837],{"class":211},[28,150571,150572,150574,150576],{"class":30,"line":1695},[28,150573,30852],{"class":207},[28,150575,150497],{"class":34},[28,150577,30858],{"class":211},[28,150579,150580,150582,150584,150587],{"class":30,"line":1701},[28,150581,32502],{"class":38},[28,150583,212],{"class":211},[28,150585,150586],{"class":64},"\"喵喵\"",[28,150588,218],{"class":211},[28,150590,150591],{"class":30,"line":1706},[28,150592,2477],{"emptyLinePlaceholder":134},[28,150594,150595],{"class":30,"line":1720},[28,150596,2477],{"emptyLinePlaceholder":134},[28,150598,150599,150601,150603],{"class":30,"line":1725},[28,150600,150455],{"class":211},[28,150602,257],{"class":207},[28,150604,150460],{"class":211},[28,150606,150607,150610,150612],{"class":30,"line":1731},[28,150608,150609],{"class":211},"cat ",[28,150611,257],{"class":207},[28,150613,150614],{"class":211}," Cat()\n",[28,150616,150617],{"class":30,"line":1752},[28,150618,2477],{"emptyLinePlaceholder":134},[28,150620,150621],{"class":30,"line":1757},[28,150622,150623],{"class":211},"dog.speak()\n",[28,150625,150626],{"class":30,"line":1771},[28,150627,150628],{"class":211},"cat.speak()\n",[149,150630,150632],{"id":150631},"_1110-super","11.10 super",[14,150634,150635,150636,150639],{},"子类可以通过 ",[25,150637,150638],{},"super()"," 调用父类方法。",[18,150641,150643],{"className":30429,"code":150642,"language":30431,"meta":23,"style":23},"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",[25,150644,150645,150653,150662,150672,150676,150680,150692,150701,150712,150722,150726,150730,150746],{"__ignoreMap":23},[28,150646,150647,150649,150651],{"class":30,"line":31},[28,150648,14771],{"class":207},[28,150650,15646],{"class":34},[28,150652,3816],{"class":211},[28,150654,150655,150657,150659],{"class":30,"line":42},[28,150656,30852],{"class":207},[28,150658,30855],{"class":38},[28,150660,150661],{"class":211},"(self, name):\n",[28,150663,150664,150666,150668,150670],{"class":30,"line":50},[28,150665,30896],{"class":38},[28,150667,149841],{"class":211},[28,150669,257],{"class":207},[28,150671,149846],{"class":211},[28,150673,150674],{"class":30,"line":58},[28,150675,2477],{"emptyLinePlaceholder":134},[28,150677,150678],{"class":30,"line":70},[28,150679,2477],{"emptyLinePlaceholder":134},[28,150681,150682,150684,150686,150688,150690],{"class":30,"line":78},[28,150683,14771],{"class":207},[28,150685,7975],{"class":34},[28,150687,212],{"class":211},[28,150689,19123],{"class":34},[28,150691,30837],{"class":211},[28,150693,150694,150696,150698],{"class":30,"line":86},[28,150695,30852],{"class":207},[28,150697,30855],{"class":38},[28,150699,150700],{"class":211},"(self, name, score):\n",[28,150702,150703,150705,150707,150709],{"class":30,"line":97},[28,150704,30868],{"class":38},[28,150706,17338],{"class":211},[28,150708,30880],{"class":38},[28,150710,150711],{"class":211},"(name)\n",[28,150713,150714,150716,150718,150720],{"class":30,"line":108},[28,150715,30896],{"class":38},[28,150717,149865],{"class":211},[28,150719,257],{"class":207},[28,150721,1657],{"class":211},[28,150723,150724],{"class":30,"line":1407},[28,150725,2477],{"emptyLinePlaceholder":134},[28,150727,150728],{"class":30,"line":1690},[28,150729,2477],{"emptyLinePlaceholder":134},[28,150731,150732,150734,150736,150738,150740,150742,150744],{"class":30,"line":1695},[28,150733,149532],{"class":211},[28,150735,257],{"class":207},[28,150737,149936],{"class":211},[28,150739,149939],{"class":64},[28,150741,12512],{"class":211},[28,150743,1199],{"class":38},[28,150745,218],{"class":211},[28,150747,150748,150750],{"class":30,"line":1701},[28,150749,30466],{"class":38},[28,150751,150752],{"class":211},"(student.name, student.score)\n",[149,150754,150756],{"id":150755},"_1111-多态","11.11 多态",[14,150758,150759],{},"多态指不同对象响应同一个方法，表现出不同结果。",[18,150761,150763],{"className":30429,"code":150762,"language":30431,"meta":23,"style":23},"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",[25,150764,150765,150773,150781,150791,150795,150799,150807,150815,150825,150829,150833,150843,150848,150852,150856,150861],{"__ignoreMap":23},[28,150766,150767,150769,150771],{"class":30,"line":31},[28,150768,14771],{"class":207},[28,150770,150415],{"class":34},[28,150772,3816],{"class":211},[28,150774,150775,150777,150779],{"class":30,"line":42},[28,150776,30852],{"class":207},[28,150778,150497],{"class":34},[28,150780,30858],{"class":211},[28,150782,150783,150785,150787,150789],{"class":30,"line":50},[28,150784,32502],{"class":38},[28,150786,212],{"class":211},[28,150788,150440],{"class":64},[28,150790,218],{"class":211},[28,150792,150793],{"class":30,"line":58},[28,150794,2477],{"emptyLinePlaceholder":134},[28,150796,150797],{"class":30,"line":70},[28,150798,2477],{"emptyLinePlaceholder":134},[28,150800,150801,150803,150805],{"class":30,"line":78},[28,150802,14771],{"class":207},[28,150804,150563],{"class":34},[28,150806,3816],{"class":211},[28,150808,150809,150811,150813],{"class":30,"line":86},[28,150810,30852],{"class":207},[28,150812,150497],{"class":34},[28,150814,30858],{"class":211},[28,150816,150817,150819,150821,150823],{"class":30,"line":97},[28,150818,32502],{"class":38},[28,150820,212],{"class":211},[28,150822,150586],{"class":64},[28,150824,218],{"class":211},[28,150826,150827],{"class":30,"line":108},[28,150828,2477],{"emptyLinePlaceholder":134},[28,150830,150831],{"class":30,"line":1407},[28,150832,2477],{"emptyLinePlaceholder":134},[28,150834,150835,150837,150840],{"class":30,"line":1690},[28,150836,31998],{"class":207},[28,150838,150839],{"class":34}," make_sound",[28,150841,150842],{"class":211},"(animal):\n",[28,150844,150845],{"class":30,"line":1695},[28,150846,150847],{"class":211},"    animal.speak()\n",[28,150849,150850],{"class":30,"line":1701},[28,150851,2477],{"emptyLinePlaceholder":134},[28,150853,150854],{"class":30,"line":1706},[28,150855,2477],{"emptyLinePlaceholder":134},[28,150857,150858],{"class":30,"line":1720},[28,150859,150860],{"class":211},"make_sound(Dog())\n",[28,150862,150863],{"class":30,"line":1725},[28,150864,150865],{"class":211},"make_sound(Cat())\n",[14,150867,150868],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[149,150870,150872],{"id":150871},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150874,150875],{},"实例属性属于对象：",[18,150877,150879],{"className":30429,"code":150878,"language":30431,"meta":23,"style":23},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[25,150880,150881,150889,150897],{"__ignoreMap":23},[28,150882,150883,150885,150887],{"class":30,"line":31},[28,150884,14771],{"class":207},[28,150886,7975],{"class":34},[28,150888,3816],{"class":211},[28,150890,150891,150893,150895],{"class":30,"line":42},[28,150892,30852],{"class":207},[28,150894,30855],{"class":38},[28,150896,150661],{"class":211},[28,150898,150899,150901,150903,150905],{"class":30,"line":50},[28,150900,30896],{"class":38},[28,150902,149841],{"class":211},[28,150904,257],{"class":207},[28,150906,149846],{"class":211},[14,150908,150909],{},"类属性属于类，所有对象共享：",[18,150911,150913],{"className":30429,"code":150912,"language":30431,"meta":23,"style":23},"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",[25,150914,150915,150923,150933,150937,150945,150955,150959,150963,150976,150990,150994,151001,151008],{"__ignoreMap":23},[28,150916,150917,150919,150921],{"class":30,"line":31},[28,150918,14771],{"class":207},[28,150920,7975],{"class":34},[28,150922,3816],{"class":211},[28,150924,150925,150928,150930],{"class":30,"line":42},[28,150926,150927],{"class":211},"    school ",[28,150929,257],{"class":207},[28,150931,150932],{"class":64}," \"黑马学校\"\n",[28,150934,150935],{"class":30,"line":50},[28,150936,2477],{"emptyLinePlaceholder":134},[28,150938,150939,150941,150943],{"class":30,"line":58},[28,150940,30852],{"class":207},[28,150942,30855],{"class":38},[28,150944,150661],{"class":211},[28,150946,150947,150949,150951,150953],{"class":30,"line":70},[28,150948,30896],{"class":38},[28,150950,149841],{"class":211},[28,150952,257],{"class":207},[28,150954,149846],{"class":211},[28,150956,150957],{"class":30,"line":78},[28,150958,2477],{"emptyLinePlaceholder":134},[28,150960,150961],{"class":30,"line":86},[28,150962,2477],{"emptyLinePlaceholder":134},[28,150964,150965,150968,150970,150972,150974],{"class":30,"line":97},[28,150966,150967],{"class":211},"s1 ",[28,150969,257],{"class":207},[28,150971,149936],{"class":211},[28,150973,149939],{"class":64},[28,150975,218],{"class":211},[28,150977,150978,150981,150983,150985,150988],{"class":30,"line":108},[28,150979,150980],{"class":211},"s2 ",[28,150982,257],{"class":207},[28,150984,149936],{"class":211},[28,150986,150987],{"class":64},"\"小红\"",[28,150989,218],{"class":211},[28,150991,150992],{"class":30,"line":1407},[28,150993,2477],{"emptyLinePlaceholder":134},[28,150995,150996,150998],{"class":30,"line":1690},[28,150997,30466],{"class":38},[28,150999,151000],{"class":211},"(s1.school)\n",[28,151002,151003,151005],{"class":30,"line":1695},[28,151004,30466],{"class":38},[28,151006,151007],{"class":211},"(s2.school)\n",[28,151009,151010,151012],{"class":30,"line":1701},[28,151011,30466],{"class":38},[28,151013,151014],{"class":211},"(Student.school)\n",[14,151016,151017],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[149,151019,151021],{"id":151020},"_1113-类方法和静态方法","11.13 类方法和静态方法",[177,151023,151025],{"id":151024},"_11131-类方法","11.13.1 类方法",[14,151027,151028,151029,151032,151033,28436],{},"类方法使用 ",[25,151030,151031],{},"@classmethod","，第一个参数通常是 ",[25,151034,151035],{},"cls",[18,151037,151039],{"className":30429,"code":151038,"language":30431,"meta":23,"style":23},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[25,151040,151041,151049,151057,151061,151069,151079,151089,151093,151097],{"__ignoreMap":23},[28,151042,151043,151045,151047],{"class":30,"line":31},[28,151044,14771],{"class":207},[28,151046,7975],{"class":34},[28,151048,3816],{"class":211},[28,151050,151051,151053,151055],{"class":30,"line":42},[28,151052,150927],{"class":211},[28,151054,257],{"class":207},[28,151056,150932],{"class":64},[28,151058,151059],{"class":30,"line":50},[28,151060,2477],{"emptyLinePlaceholder":134},[28,151062,151063,151066],{"class":30,"line":58},[28,151064,151065],{"class":34},"    @",[28,151067,151068],{"class":38},"classmethod\n",[28,151070,151071,151073,151076],{"class":30,"line":70},[28,151072,30852],{"class":207},[28,151074,151075],{"class":34}," get_school",[28,151077,151078],{"class":211},"(cls):\n",[28,151080,151081,151083,151086],{"class":30,"line":78},[28,151082,14829],{"class":207},[28,151084,151085],{"class":38}," cls",[28,151087,151088],{"class":211},".school\n",[28,151090,151091],{"class":30,"line":86},[28,151092,2477],{"emptyLinePlaceholder":134},[28,151094,151095],{"class":30,"line":97},[28,151096,2477],{"emptyLinePlaceholder":134},[28,151098,151099,151101],{"class":30,"line":108},[28,151100,30466],{"class":38},[28,151102,151103],{"class":211},"(Student.get_school())\n",[177,151105,151107],{"id":151106},"_11132-静态方法","11.13.2 静态方法",[14,151109,151110,151111,151114],{},"静态方法使用 ",[25,151112,151113],{},"@staticmethod","，不需要访问实例和类。",[18,151116,151118],{"className":30429,"code":151117,"language":30431,"meta":23,"style":23},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[25,151119,151120,151129,151136,151145,151156,151160,151164],{"__ignoreMap":23},[28,151121,151122,151124,151127],{"class":30,"line":31},[28,151123,14771],{"class":207},[28,151125,151126],{"class":34}," MathUtils",[28,151128,3816],{"class":211},[28,151130,151131,151133],{"class":30,"line":42},[28,151132,151065],{"class":34},[28,151134,151135],{"class":38},"staticmethod\n",[28,151137,151138,151140,151142],{"class":30,"line":50},[28,151139,30852],{"class":207},[28,151141,5286],{"class":34},[28,151143,151144],{"class":211},"(a, b):\n",[28,151146,151147,151149,151151,151153],{"class":30,"line":58},[28,151148,14829],{"class":207},[28,151150,10946],{"class":211},[28,151152,691],{"class":207},[28,151154,151155],{"class":211}," b\n",[28,151157,151158],{"class":30,"line":70},[28,151159,2477],{"emptyLinePlaceholder":134},[28,151161,151162],{"class":30,"line":78},[28,151163,2477],{"emptyLinePlaceholder":134},[28,151165,151166,151168,151171,151173,151175,151177],{"class":30,"line":86},[28,151167,30466],{"class":38},[28,151169,151170],{"class":211},"(MathUtils.add(",[28,151172,427],{"class":38},[28,151174,12512],{"class":211},[28,151176,288],{"class":38},[28,151178,30548],{"class":211},[14,151180,151181],{},"静态方法本质上是放在类命名空间里的普通函数。",[149,151183,151185],{"id":151184},"_1114-dataclass","11.14 dataclass",[14,151187,151188,151191],{},[25,151189,151190],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[18,151193,151195],{"className":30429,"code":151194,"language":30431,"meta":23,"style":23},"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",[25,151196,151197,151209,151213,151217,151222,151230,151238,151246,151254,151258,151262,151282],{"__ignoreMap":23},[28,151198,151199,151201,151204,151206],{"class":30,"line":31},[28,151200,30788],{"class":207},[28,151202,151203],{"class":211}," dataclasses ",[28,151205,30443],{"class":207},[28,151207,151208],{"class":211}," dataclass\n",[28,151210,151211],{"class":30,"line":42},[28,151212,2477],{"emptyLinePlaceholder":134},[28,151214,151215],{"class":30,"line":50},[28,151216,2477],{"emptyLinePlaceholder":134},[28,151218,151219],{"class":30,"line":58},[28,151220,151221],{"class":34},"@dataclass\n",[28,151223,151224,151226,151228],{"class":30,"line":70},[28,151225,14771],{"class":207},[28,151227,7975],{"class":34},[28,151229,3816],{"class":211},[28,151231,151232,151235],{"class":30,"line":78},[28,151233,151234],{"class":211},"    name: ",[28,151236,151237],{"class":38},"str\n",[28,151239,151240,151243],{"class":30,"line":86},[28,151241,151242],{"class":211},"    age: ",[28,151244,151245],{"class":38},"int\n",[28,151247,151248,151251],{"class":30,"line":97},[28,151249,151250],{"class":211},"    score: ",[28,151252,151253],{"class":38},"float\n",[28,151255,151256],{"class":30,"line":108},[28,151257,2477],{"emptyLinePlaceholder":134},[28,151259,151260],{"class":30,"line":1407},[28,151261,2477],{"emptyLinePlaceholder":134},[28,151263,151264,151266,151268,151270,151272,151274,151276,151278,151280],{"class":30,"line":1690},[28,151265,149532],{"class":211},[28,151267,257],{"class":207},[28,151269,149936],{"class":211},[28,151271,149939],{"class":64},[28,151273,12512],{"class":211},[28,151275,860],{"class":38},[28,151277,12512],{"class":211},[28,151279,1199],{"class":38},[28,151281,218],{"class":211},[28,151283,151284,151286],{"class":30,"line":1695},[28,151285,30466],{"class":38},[28,151287,150093],{"class":211},[14,151289,151290,151291,422,151293,151296],{},"它会自动生成 ",[25,151292,30880],{},[25,151294,151295],{},"__repr__"," 等方法。适合数据模型类。",[149,151298,151300],{"id":151299},"_1115-小案例学生类","11.15 小案例：学生类",[18,151302,151304],{"className":30429,"code":151303,"language":30431,"meta":23,"style":23},"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",[25,151305,151306,151314,151323,151335,151345,151355,151365,151369,151378,151391,151395,151404,151410,151422,151434,151446,151458,151462,151466,151472,151482,151491,151501,151509,151517,151526,151530,151534,151542,151578,151582,151586,151611,151618],{"__ignoreMap":23},[28,151307,151308,151310,151312],{"class":30,"line":31},[28,151309,14771],{"class":207},[28,151311,7975],{"class":34},[28,151313,3816],{"class":211},[28,151315,151316,151318,151320],{"class":30,"line":42},[28,151317,30852],{"class":207},[28,151319,30855],{"class":38},[28,151321,151322],{"class":211},"(self, student_id, name, age, score):\n",[28,151324,151325,151327,151330,151332],{"class":30,"line":50},[28,151326,30896],{"class":38},[28,151328,151329],{"class":211},".student_id ",[28,151331,257],{"class":207},[28,151333,151334],{"class":211}," student_id\n",[28,151336,151337,151339,151341,151343],{"class":30,"line":58},[28,151338,30896],{"class":38},[28,151340,149841],{"class":211},[28,151342,257],{"class":207},[28,151344,149846],{"class":211},[28,151346,151347,151349,151351,151353],{"class":30,"line":70},[28,151348,30896],{"class":38},[28,151350,149853],{"class":211},[28,151352,257],{"class":207},[28,151354,149858],{"class":211},[28,151356,151357,151359,151361,151363],{"class":30,"line":78},[28,151358,30896],{"class":38},[28,151360,149865],{"class":211},[28,151362,257],{"class":207},[28,151364,1657],{"class":211},[28,151366,151367],{"class":30,"line":86},[28,151368,2477],{"emptyLinePlaceholder":134},[28,151370,151371,151373,151376],{"class":30,"line":97},[28,151372,30852],{"class":207},[28,151374,151375],{"class":34}," is_passed",[28,151377,30858],{"class":211},[28,151379,151380,151382,151384,151386,151388],{"class":30,"line":108},[28,151381,14829],{"class":207},[28,151383,38924],{"class":38},[28,151385,149865],{"class":211},[28,151387,1788],{"class":207},[28,151389,151390],{"class":38}," 60\n",[28,151392,151393],{"class":30,"line":1407},[28,151394,2477],{"emptyLinePlaceholder":134},[28,151396,151397,151399,151402],{"class":30,"line":1690},[28,151398,30852],{"class":207},[28,151400,151401],{"class":34}," to_dict",[28,151403,30858],{"class":211},[28,151405,151406,151408],{"class":30,"line":1695},[28,151407,14829],{"class":207},[28,151409,15649],{"class":211},[28,151411,151412,151415,151417,151419],{"class":30,"line":1701},[28,151413,151414],{"class":64},"            \"student_id\"",[28,151416,51488],{"class":211},[28,151418,30874],{"class":38},[28,151420,151421],{"class":211},".student_id,\n",[28,151423,151424,151427,151429,151431],{"class":30,"line":1706},[28,151425,151426],{"class":64},"            \"name\"",[28,151428,51488],{"class":211},[28,151430,30874],{"class":38},[28,151432,151433],{"class":211},".name,\n",[28,151435,151436,151439,151441,151443],{"class":30,"line":1720},[28,151437,151438],{"class":64},"            \"age\"",[28,151440,51488],{"class":211},[28,151442,30874],{"class":38},[28,151444,151445],{"class":211},".age,\n",[28,151447,151448,151451,151453,151455],{"class":30,"line":1725},[28,151449,151450],{"class":64},"            \"score\"",[28,151452,51488],{"class":211},[28,151454,30874],{"class":38},[28,151456,151457],{"class":211},".score,\n",[28,151459,151460],{"class":30,"line":1731},[28,151461,2606],{"class":211},[28,151463,151464],{"class":30,"line":1752},[28,151465,2477],{"emptyLinePlaceholder":134},[28,151467,151468,151470],{"class":30,"line":1757},[28,151469,151065],{"class":34},[28,151471,151068],{"class":38},[28,151473,151474,151476,151479],{"class":30,"line":1771},[28,151475,30852],{"class":207},[28,151477,151478],{"class":34}," from_dict",[28,151480,151481],{"class":211},"(cls, data):\n",[28,151483,151484,151486,151488],{"class":30,"line":1776},[28,151485,14829],{"class":207},[28,151487,151085],{"class":38},[28,151489,151490],{"class":211},"(\n",[28,151492,151493,151496,151499],{"class":30,"line":1805},[28,151494,151495],{"class":211},"            data[",[28,151497,151498],{"class":64},"\"student_id\"",[28,151500,87887],{"class":211},[28,151502,151503,151505,151507],{"class":30,"line":1810},[28,151504,151495],{"class":211},[28,151506,62730],{"class":64},[28,151508,87887],{"class":211},[28,151510,151511,151513,151515],{"class":30,"line":1827},[28,151512,151495],{"class":211},[28,151514,69175],{"class":64},[28,151516,87887],{"class":211},[28,151518,151519,151521,151524],{"class":30,"line":1832},[28,151520,151495],{"class":211},[28,151522,151523],{"class":64},"\"score\"",[28,151525,87887],{"class":211},[28,151527,151528],{"class":30,"line":1837},[28,151529,38177],{"class":211},[28,151531,151532],{"class":30,"line":1842},[28,151533,2477],{"emptyLinePlaceholder":134},[28,151535,151536,151538,151540],{"class":30,"line":1856},[28,151537,30852],{"class":207},[28,151539,150032],{"class":38},[28,151541,30858],{"class":211},[28,151543,151544,151546,151548,151550,151552,151555,151557,151560,151562,151564,151566,151568,151570,151572,151574,151576],{"class":30,"line":1861},[28,151545,14829],{"class":207},[28,151547,150041],{"class":207},[28,151549,461],{"class":64},[28,151551,149503],{"class":38},[28,151553,151554],{"class":211},".student_id",[28,151556,1156],{"class":38},[28,151558,151559],{"class":38}," {self",[28,151561,80352],{"class":211},[28,151563,1156],{"class":38},[28,151565,151559],{"class":38},[28,151567,80364],{"class":211},[28,151569,1156],{"class":38},[28,151571,151559],{"class":38},[28,151573,149913],{"class":211},[28,151575,1156],{"class":38},[28,151577,25204],{"class":64},[28,151579,151580],{"class":30,"line":2654},[28,151581,2477],{"emptyLinePlaceholder":134},[28,151583,151584],{"class":30,"line":2668},[28,151585,2477],{"emptyLinePlaceholder":134},[28,151587,151588,151590,151592,151594,151597,151599,151601,151603,151605,151607,151609],{"class":30,"line":2676},[28,151589,149532],{"class":211},[28,151591,257],{"class":207},[28,151593,149936],{"class":211},[28,151595,151596],{"class":64},"\"001\"",[28,151598,12512],{"class":211},[28,151600,149939],{"class":64},[28,151602,12512],{"class":211},[28,151604,860],{"class":38},[28,151606,12512],{"class":211},[28,151608,1199],{"class":38},[28,151610,218],{"class":211},[28,151612,151613,151615],{"class":30,"line":2681},[28,151614,30466],{"class":38},[28,151616,151617],{"class":211},"(student.is_passed())\n",[28,151619,151620,151622],{"class":30,"line":2687},[28,151621,30466],{"class":38},[28,151623,151624],{"class":211},"(student.to_dict())\n",[14,151626,151627,101069,151630,151633],{},[25,151628,151629],{},"to_dict()",[25,151631,151632],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[149,151635,151637],{"id":151636},"_1116-易错点","11.16 易错点",[161,151639,151640,151646,151652,151657,151660,151663],{},[119,151641,151642,151643,28436],{},"类名推荐使用大驼峰，如 ",[25,151644,151645],{},"StudentManager",[119,151647,151648,151649,151651],{},"方法第一个参数必须写 ",[25,151650,30874],{},"，调用时不用传。",[119,151653,151654,151656],{},[25,151655,30880],{}," 不是普通方法，它在创建对象时自动执行。",[119,151658,151659],{},"私有属性不是绝对安全，只是约定和名称改写。",[119,151661,151662],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[119,151664,151665],{},"类中方法太多时，说明职责可能过重。",[149,151667,151669],{"id":151668},"_1117-本章练习","11.17 本章练习",[161,151671,151672,151678,151684,151689,151702],{},[119,151673,151674,151675,151677],{},"定义 ",[25,151676,149619],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[119,151679,151674,151680,151683],{},[25,151681,151682],{},"Account"," 类，实现存款、取款、查询余额。",[119,151685,151674,151686,151688],{},[25,151687,17303],{}," 类，计算圆的周长和面积。",[119,151690,151674,151691,422,151694,151697,151698,151701],{},[25,151692,151693],{},"Dog",[25,151695,151696],{},"Cat"," 类，并用同一个函数调用它们的 ",[25,151699,151700],{},"speak()"," 方法。",[119,151703,104417,151704,151706,151707,28436],{},[25,151705,151190],{}," 定义一个商品类 ",[25,151708,151709],{},"Product",[126,151711,151712],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":42,"depth":42,"links":151714},[151715,151716,151717,151718,151719,151720,151722,151723,151724,151725,151726,151727,151728,151732,151733,151734,151735],{"id":149383,"depth":42,"text":149384},{"id":149566,"depth":42,"text":149567},{"id":149630,"depth":42,"text":149631},{"id":149707,"depth":42,"text":149708},{"id":149806,"depth":42,"text":149807},{"id":149970,"depth":42,"text":151721},"11.6 str",{"id":150096,"depth":42,"text":150097},{"id":150362,"depth":42,"text":150363},{"id":150476,"depth":42,"text":150477},{"id":150631,"depth":42,"text":150632},{"id":150755,"depth":42,"text":150756},{"id":150871,"depth":42,"text":150872},{"id":151020,"depth":42,"text":151021,"children":151729},[151730,151731],{"id":151024,"depth":50,"text":151025},{"id":151106,"depth":50,"text":151107},{"id":151184,"depth":42,"text":151185},{"id":151299,"depth":42,"text":151300},{"id":151636,"depth":42,"text":151637},{"id":151668,"depth":42,"text":151669},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149375,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151742,"title":151743,"body":151744,"description":131,"extension":132,"meta":155057,"navigation":134,"path":155058,"seo":155059,"stem":155060,"__hash__":155061},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151745,"toc":155033},[151746,151749,151753,151756,151759,151788,151791,151799,151803,151807,151810,151833,151836,151842,151846,153292,153295,153316,153320,153323,153335,153338,153522,153525,153651,153654,153658,153662,153798,153802,153888,153892,153974,153978,154015,154019,154208,154212,154215,154445,154449,154452,154633,154636,154640,154643,154649,154652,154678,154682,154685,154699,154702,154727,154730,154744,154747,154764,154767,154784,154787,154804,154808,154834,154838,154861,154865,154868,154870,154876,154878,154899,154902,154908,154914,154918,154921,154997,155000,155004,155030],[10,151747,151743],{"id":151748},"_12-综合案例与复习路线",[149,151750,151752],{"id":151751},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151754,151755],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151757,151758],{},"一个合格的入门综合项目最好覆盖：",[161,151760,151761,151764,151767,151770,151773,151776,151779,151782,151785],{},[119,151762,151763],{},"输入输出。",[119,151765,151766],{},"判断和循环。",[119,151768,151769],{},"函数拆分。",[119,151771,151772],{},"列表、字典等容器。",[119,151774,151775],{},"文件持久化。",[119,151777,151778],{},"异常处理。",[119,151780,151781],{},"模块拆分。",[119,151783,151784],{},"可选：面向对象。",[119,151786,151787],{},"可选：数据可视化。",[14,151789,151790],{},"本章整理两个方向：",[161,151792,151793,151796],{},[119,151794,151795],{},"学生管理系统。",[119,151797,151798],{},"销售数据统计和可视化。",[149,151800,151802],{"id":151801},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[177,151804,151806],{"id":151805},"_1221-需求","12.2.1 需求",[14,151808,151809],{},"实现一个命令行学生管理系统：",[161,151811,151812,151815,151818,151821,151824,151827,151830],{},[119,151813,151814],{},"添加学生。",[119,151816,151817],{},"删除学生。",[119,151819,151820],{},"修改学生。",[119,151822,151823],{},"查询学生。",[119,151825,151826],{},"显示所有学生。",[119,151828,151829],{},"保存到 JSON 文件。",[119,151831,151832],{},"程序启动时自动读取 JSON 文件。",[14,151834,151835],{},"学生字段：",[18,151837,151840],{"className":151838,"code":151839,"language":5264,"meta":23},[5262],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[25,151841,151839],{"__ignoreMap":23},[149,151843,151845],{"id":151844},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[18,151847,151849],{"className":30429,"code":151848,"language":30431,"meta":23,"style":23},"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",[25,151850,151851,151857,151867,151871,151885,151889,151893,151902,151914,151920,151924,151930,151961,151971,151978,151989,151995,151999,152003,152013,152044,152070,152074,152078,152087,152098,152109,152120,152131,152142,152153,152164,152168,152172,152182,152194,152210,152217,152224,152228,152232,152242,152250,152257,152270,152280,152291,152295,152299,152308,152316,152322,152334,152342,152353,152357,152361,152370,152386,152390,152397,152408,152413,152417,152433,152448,152463,152467,152472,152480,152488,152496,152504,152508,152513,152524,152528,152532,152541,152556,152566,152570,152582,152593,152597,152601,152606,152610,152621,152625,152629,152638,152653,152661,152665,152677,152687,152691,152695,152710,152723,152736,152740,152753,152765,152777,152781,152785,152796,152800,152804,152813,152828,152836,152840,152852,152862,152866,152870,152875,152879,152883,152893,152899,152921,152940,152959,152978,152983,152987,152991,153000,153008,153019,153023,153027,153053,153063,153068,153072,153076,153084,153094,153098,153106,153111,153127,153131,153145,153150,153164,153169,153182,153187,153200,153205,153218,153223,153236,153247,153251,153257,153268,153272,153276,153288],{"__ignoreMap":23},[28,151852,151853,151855],{"class":30,"line":31},[28,151854,30443],{"class":207},[28,151856,147142],{"class":211},[28,151858,151859,151861,151863,151865],{"class":30,"line":42},[28,151860,30788],{"class":207},[28,151862,108362],{"class":211},[28,151864,30443],{"class":207},[28,151866,108367],{"class":211},[28,151868,151869],{"class":30,"line":50},[28,151870,2477],{"emptyLinePlaceholder":134},[28,151872,151873,151876,151878,151880,151883],{"class":30,"line":58},[28,151874,151875],{"class":38},"DATA_FILE",[28,151877,13641],{"class":207},[28,151879,108596],{"class":211},[28,151881,151882],{"class":64},"\"students.json\"",[28,151884,218],{"class":211},[28,151886,151887],{"class":30,"line":70},[28,151888,2477],{"emptyLinePlaceholder":134},[28,151890,151891],{"class":30,"line":78},[28,151892,2477],{"emptyLinePlaceholder":134},[28,151894,151895,151897,151900],{"class":30,"line":86},[28,151896,31998],{"class":207},[28,151898,151899],{"class":34}," load_students",[28,151901,32004],{"class":211},[28,151903,151904,151906,151908,151911],{"class":30,"line":97},[28,151905,3178],{"class":207},[28,151907,38981],{"class":207},[28,151909,151910],{"class":38}," DATA_FILE",[28,151912,151913],{"class":211},".exists():\n",[28,151915,151916,151918],{"class":30,"line":108},[28,151917,14829],{"class":207},[28,151919,51889],{"class":211},[28,151921,151922],{"class":30,"line":1407},[28,151923,2477],{"emptyLinePlaceholder":134},[28,151925,151926,151928],{"class":30,"line":1690},[28,151927,125835],{"class":207},[28,151929,3816],{"class":211},[28,151931,151932,151935,151937,151939,151941,151943,151945,151947,151949,151951,151953,151955,151957,151959],{"class":30,"line":1695},[28,151933,151934],{"class":207},"        with",[28,151936,146842],{"class":38},[28,151938,212],{"class":211},[28,151940,151875],{"class":38},[28,151942,12512],{"class":211},[28,151944,146852],{"class":64},[28,151946,12512],{"class":211},[28,151948,146857],{"class":5293},[28,151950,257],{"class":207},[28,151952,146862],{"class":64},[28,151954,13791],{"class":211},[28,151956,31434],{"class":207},[28,151958,148204],{"class":5293},[28,151960,3816],{"class":211},[28,151962,151963,151965,151967,151969],{"class":30,"line":1701},[28,151964,15809],{"class":207},[28,151966,148215],{"class":211},[28,151968,45405],{"class":5293},[28,151970,218],{"class":211},[28,151972,151973,151975],{"class":30,"line":1706},[28,151974,125863],{"class":207},[28,151976,151977],{"class":211}," json.JSONDecodeError:\n",[28,151979,151980,151982,151984,151987],{"class":30,"line":1720},[28,151981,32502],{"class":38},[28,151983,212],{"class":211},[28,151985,151986],{"class":64},"\"数据文件格式错误，已使用空数据启动\"",[28,151988,218],{"class":211},[28,151990,151991,151993],{"class":30,"line":1725},[28,151992,14829],{"class":207},[28,151994,51889],{"class":211},[28,151996,151997],{"class":30,"line":1731},[28,151998,2477],{"emptyLinePlaceholder":134},[28,152000,152001],{"class":30,"line":1752},[28,152002,2477],{"emptyLinePlaceholder":134},[28,152004,152005,152007,152010],{"class":30,"line":1757},[28,152006,31998],{"class":207},[28,152008,152009],{"class":34}," save_students",[28,152011,152012],{"class":211},"(students):\n",[28,152014,152015,152017,152019,152021,152023,152025,152028,152030,152032,152034,152036,152038,152040,152042],{"class":30,"line":1771},[28,152016,34229],{"class":207},[28,152018,146842],{"class":38},[28,152020,212],{"class":211},[28,152022,151875],{"class":38},[28,152024,12512],{"class":211},[28,152026,152027],{"class":64},"\"w\"",[28,152029,12512],{"class":211},[28,152031,146857],{"class":5293},[28,152033,257],{"class":207},[28,152035,146862],{"class":64},[28,152037,13791],{"class":211},[28,152039,31434],{"class":207},[28,152041,148204],{"class":5293},[28,152043,3816],{"class":211},[28,152045,152046,152049,152051,152053,152055,152057,152059,152061,152064,152066,152068],{"class":30,"line":1776},[28,152047,152048],{"class":211},"        json.dump(students, ",[28,152050,45405],{"class":5293},[28,152052,12512],{"class":211},[28,152054,147188],{"class":5293},[28,152056,257],{"class":207},[28,152058,34038],{"class":38},[28,152060,12512],{"class":211},[28,152062,152063],{"class":5293},"indent",[28,152065,257],{"class":207},[28,152067,288],{"class":38},[28,152069,218],{"class":211},[28,152071,152072],{"class":30,"line":1805},[28,152073,2477],{"emptyLinePlaceholder":134},[28,152075,152076],{"class":30,"line":1810},[28,152077,2477],{"emptyLinePlaceholder":134},[28,152079,152080,152082,152085],{"class":30,"line":1827},[28,152081,31998],{"class":207},[28,152083,152084],{"class":34}," show_menu",[28,152086,32004],{"class":211},[28,152088,152089,152091,152093,152096],{"class":30,"line":1832},[28,152090,31350],{"class":38},[28,152092,212],{"class":211},[28,152094,152095],{"class":64},"\"====== 学生管理系统 ======\"",[28,152097,218],{"class":211},[28,152099,152100,152102,152104,152107],{"class":30,"line":1837},[28,152101,31350],{"class":38},[28,152103,212],{"class":211},[28,152105,152106],{"class":64},"\"1. 添加学生\"",[28,152108,218],{"class":211},[28,152110,152111,152113,152115,152118],{"class":30,"line":1842},[28,152112,31350],{"class":38},[28,152114,212],{"class":211},[28,152116,152117],{"class":64},"\"2. 删除学生\"",[28,152119,218],{"class":211},[28,152121,152122,152124,152126,152129],{"class":30,"line":1856},[28,152123,31350],{"class":38},[28,152125,212],{"class":211},[28,152127,152128],{"class":64},"\"3. 修改学生\"",[28,152130,218],{"class":211},[28,152132,152133,152135,152137,152140],{"class":30,"line":1861},[28,152134,31350],{"class":38},[28,152136,212],{"class":211},[28,152138,152139],{"class":64},"\"4. 查询学生\"",[28,152141,218],{"class":211},[28,152143,152144,152146,152148,152151],{"class":30,"line":2654},[28,152145,31350],{"class":38},[28,152147,212],{"class":211},[28,152149,152150],{"class":64},"\"5. 显示所有学生\"",[28,152152,218],{"class":211},[28,152154,152155,152157,152159,152162],{"class":30,"line":2668},[28,152156,31350],{"class":38},[28,152158,212],{"class":211},[28,152160,152161],{"class":64},"\"0. 退出系统\"",[28,152163,218],{"class":211},[28,152165,152166],{"class":30,"line":2676},[28,152167,2477],{"emptyLinePlaceholder":134},[28,152169,152170],{"class":30,"line":2681},[28,152171,2477],{"emptyLinePlaceholder":134},[28,152173,152174,152176,152179],{"class":30,"line":2687},[28,152175,31998],{"class":207},[28,152177,152178],{"class":34}," find_student",[28,152180,152181],{"class":211},"(students, student_id):\n",[28,152183,152184,152186,152189,152191],{"class":30,"line":2693},[28,152185,3278],{"class":207},[28,152187,152188],{"class":211}," student ",[28,152190,26094],{"class":207},[28,152192,152193],{"class":211}," students:\n",[28,152195,152196,152198,152201,152203,152205,152207],{"class":30,"line":2698},[28,152197,2574],{"class":207},[28,152199,152200],{"class":211}," student[",[28,152202,151498],{"class":64},[28,152204,4520],{"class":211},[28,152206,3026],{"class":207},[28,152208,152209],{"class":211}," student_id:\n",[28,152211,152212,152214],{"class":30,"line":8025},[28,152213,15809],{"class":207},[28,152215,152216],{"class":211}," student\n",[28,152218,152219,152221],{"class":30,"line":8049},[28,152220,4167],{"class":207},[28,152222,152223],{"class":38}," None\n",[28,152225,152226],{"class":30,"line":8054},[28,152227,2477],{"emptyLinePlaceholder":134},[28,152229,152230],{"class":30,"line":8060},[28,152231,2477],{"emptyLinePlaceholder":134},[28,152233,152234,152236,152239],{"class":30,"line":8087},[28,152235,31998],{"class":207},[28,152237,152238],{"class":34}," input_int",[28,152240,152241],{"class":211},"(prompt):\n",[28,152243,152244,152246,152248],{"class":30,"line":8092},[28,152245,2328],{"class":207},[28,152247,95343],{"class":38},[28,152249,3816],{"class":211},[28,152251,152252,152255],{"class":30,"line":8098},[28,152253,152254],{"class":207},"        try",[28,152256,3816],{"class":211},[28,152258,152259,152261,152263,152265,152267],{"class":30,"line":8110},[28,152260,15809],{"class":207},[28,152262,2459],{"class":38},[28,152264,212],{"class":211},[28,152266,53872],{"class":38},[28,152268,152269],{"class":211},"(prompt))\n",[28,152271,152272,152275,152278],{"class":30,"line":8122},[28,152273,152274],{"class":207},"        except",[28,152276,152277],{"class":38}," ValueError",[28,152279,3816],{"class":211},[28,152281,152282,152284,152286,152289],{"class":30,"line":8134},[28,152283,34701],{"class":38},[28,152285,212],{"class":211},[28,152287,152288],{"class":64},"\"请输入整数\"",[28,152290,218],{"class":211},[28,152292,152293],{"class":30,"line":9793},[28,152294,2477],{"emptyLinePlaceholder":134},[28,152296,152297],{"class":30,"line":9818},[28,152298,2477],{"emptyLinePlaceholder":134},[28,152300,152301,152303,152306],{"class":30,"line":9841},[28,152302,31998],{"class":207},[28,152304,152305],{"class":34}," input_float",[28,152307,152241],{"class":211},[28,152309,152310,152312,152314],{"class":30,"line":9865},[28,152311,2328],{"class":207},[28,152313,95343],{"class":38},[28,152315,3816],{"class":211},[28,152317,152318,152320],{"class":30,"line":9870},[28,152319,152254],{"class":207},[28,152321,3816],{"class":211},[28,152323,152324,152326,152328,152330,152332],{"class":30,"line":9875},[28,152325,15809],{"class":207},[28,152327,109848],{"class":38},[28,152329,212],{"class":211},[28,152331,53872],{"class":38},[28,152333,152269],{"class":211},[28,152335,152336,152338,152340],{"class":30,"line":9880},[28,152337,152274],{"class":207},[28,152339,152277],{"class":38},[28,152341,3816],{"class":211},[28,152343,152344,152346,152348,152351],{"class":30,"line":9889},[28,152345,34701],{"class":38},[28,152347,212],{"class":211},[28,152349,152350],{"class":64},"\"请输入数字\"",[28,152352,218],{"class":211},[28,152354,152355],{"class":30,"line":9894},[28,152356,2477],{"emptyLinePlaceholder":134},[28,152358,152359],{"class":30,"line":9900},[28,152360,2477],{"emptyLinePlaceholder":134},[28,152362,152363,152365,152368],{"class":30,"line":9921},[28,152364,31998],{"class":207},[28,152366,152367],{"class":34}," add_student",[28,152369,152012],{"class":211},[28,152371,152372,152375,152377,152379,152381,152384],{"class":30,"line":9927},[28,152373,152374],{"class":211},"    student_id ",[28,152376,257],{"class":207},[28,152378,60656],{"class":38},[28,152380,212],{"class":211},[28,152382,152383],{"class":64},"\"请输入学号:\"",[28,152385,218],{"class":211},[28,152387,152388],{"class":30,"line":9941},[28,152389,2477],{"emptyLinePlaceholder":134},[28,152391,152392,152394],{"class":30,"line":9947},[28,152393,3178],{"class":207},[28,152395,152396],{"class":211}," find_student(students, student_id):\n",[28,152398,152399,152401,152403,152406],{"class":30,"line":9974},[28,152400,32502],{"class":38},[28,152402,212],{"class":211},[28,152404,152405],{"class":64},"\"学号已存在\"",[28,152407,218],{"class":211},[28,152409,152410],{"class":30,"line":9983},[28,152411,152412],{"class":207},"        return\n",[28,152414,152415],{"class":30,"line":9989},[28,152416,2477],{"emptyLinePlaceholder":134},[28,152418,152419,152422,152424,152426,152428,152431],{"class":30,"line":9997},[28,152420,152421],{"class":211},"    name ",[28,152423,257],{"class":207},[28,152425,60656],{"class":38},[28,152427,212],{"class":211},[28,152429,152430],{"class":64},"\"请输入姓名:\"",[28,152432,218],{"class":211},[28,152434,152435,152438,152440,152443,152446],{"class":30,"line":10002},[28,152436,152437],{"class":211},"    age ",[28,152439,257],{"class":207},[28,152441,152442],{"class":211}," input_int(",[28,152444,152445],{"class":64},"\"请输入年龄:\"",[28,152447,218],{"class":211},[28,152449,152450,152453,152455,152458,152461],{"class":30,"line":16681},[28,152451,152452],{"class":211},"    score ",[28,152454,257],{"class":207},[28,152456,152457],{"class":211}," input_float(",[28,152459,152460],{"class":64},"\"请输入成绩:\"",[28,152462,218],{"class":211},[28,152464,152465],{"class":30,"line":16687},[28,152466,2477],{"emptyLinePlaceholder":134},[28,152468,152469],{"class":30,"line":16710},[28,152470,152471],{"class":211},"    students.append({\n",[28,152473,152474,152477],{"class":30,"line":16716},[28,152475,152476],{"class":64},"        \"student_id\"",[28,152478,152479],{"class":211},": student_id,\n",[28,152481,152482,152485],{"class":30,"line":16739},[28,152483,152484],{"class":64},"        \"name\"",[28,152486,152487],{"class":211},": name,\n",[28,152489,152490,152493],{"class":30,"line":16753},[28,152491,152492],{"class":64},"        \"age\"",[28,152494,152495],{"class":211},": age,\n",[28,152497,152498,152501],{"class":30,"line":16773},[28,152499,152500],{"class":64},"        \"score\"",[28,152502,152503],{"class":211},": score,\n",[28,152505,152506],{"class":30,"line":16779},[28,152507,33512],{"class":211},[28,152509,152510],{"class":30,"line":16790},[28,152511,152512],{"class":211},"    save_students(students)\n",[28,152514,152515,152517,152519,152522],{"class":30,"line":16813},[28,152516,31350],{"class":38},[28,152518,212],{"class":211},[28,152520,152521],{"class":64},"\"添加成功\"",[28,152523,218],{"class":211},[28,152525,152526],{"class":30,"line":16835},[28,152527,2477],{"emptyLinePlaceholder":134},[28,152529,152530],{"class":30,"line":16840},[28,152531,2477],{"emptyLinePlaceholder":134},[28,152533,152534,152536,152539],{"class":30,"line":16846},[28,152535,31998],{"class":207},[28,152537,152538],{"class":34}," delete_student",[28,152540,152012],{"class":211},[28,152542,152543,152545,152547,152549,152551,152554],{"class":30,"line":16860},[28,152544,152374],{"class":211},[28,152546,257],{"class":207},[28,152548,60656],{"class":38},[28,152550,212],{"class":211},[28,152552,152553],{"class":64},"\"请输入要删除的学号:\"",[28,152555,218],{"class":211},[28,152557,152558,152561,152563],{"class":30,"line":16873},[28,152559,152560],{"class":211},"    student ",[28,152562,257],{"class":207},[28,152564,152565],{"class":211}," find_student(students, student_id)\n",[28,152567,152568],{"class":30,"line":16878},[28,152569,2477],{"emptyLinePlaceholder":134},[28,152571,152572,152574,152576,152578,152580],{"class":30,"line":16892},[28,152573,3178],{"class":207},[28,152575,152188],{"class":211},[28,152577,38978],{"class":207},[28,152579,38984],{"class":38},[28,152581,3816],{"class":211},[28,152583,152584,152586,152588,152591],{"class":30,"line":16897},[28,152585,32502],{"class":38},[28,152587,212],{"class":211},[28,152589,152590],{"class":64},"\"学生不存在\"",[28,152592,218],{"class":211},[28,152594,152595],{"class":30,"line":16903},[28,152596,152412],{"class":207},[28,152598,152599],{"class":30,"line":16908},[28,152600,2477],{"emptyLinePlaceholder":134},[28,152602,152603],{"class":30,"line":16922},[28,152604,152605],{"class":211},"    students.remove(student)\n",[28,152607,152608],{"class":30,"line":16927},[28,152609,152512],{"class":211},[28,152611,152612,152614,152616,152619],{"class":30,"line":16932},[28,152613,31350],{"class":38},[28,152615,212],{"class":211},[28,152617,152618],{"class":64},"\"删除成功\"",[28,152620,218],{"class":211},[28,152622,152623],{"class":30,"line":16946},[28,152624,2477],{"emptyLinePlaceholder":134},[28,152626,152627],{"class":30,"line":16958},[28,152628,2477],{"emptyLinePlaceholder":134},[28,152630,152631,152633,152636],{"class":30,"line":16963},[28,152632,31998],{"class":207},[28,152634,152635],{"class":34}," update_student",[28,152637,152012],{"class":211},[28,152639,152640,152642,152644,152646,152648,152651],{"class":30,"line":16976},[28,152641,152374],{"class":211},[28,152643,257],{"class":207},[28,152645,60656],{"class":38},[28,152647,212],{"class":211},[28,152649,152650],{"class":64},"\"请输入要修改的学号:\"",[28,152652,218],{"class":211},[28,152654,152655,152657,152659],{"class":30,"line":16981},[28,152656,152560],{"class":211},[28,152658,257],{"class":207},[28,152660,152565],{"class":211},[28,152662,152663],{"class":30,"line":16986},[28,152664,2477],{"emptyLinePlaceholder":134},[28,152666,152667,152669,152671,152673,152675],{"class":30,"line":16991},[28,152668,3178],{"class":207},[28,152670,152188],{"class":211},[28,152672,38978],{"class":207},[28,152674,38984],{"class":38},[28,152676,3816],{"class":211},[28,152678,152679,152681,152683,152685],{"class":30,"line":17004},[28,152680,32502],{"class":38},[28,152682,212],{"class":211},[28,152684,152590],{"class":64},[28,152686,218],{"class":211},[28,152688,152689],{"class":30,"line":17009},[28,152690,152412],{"class":207},[28,152692,152693],{"class":30,"line":32684},[28,152694,2477],{"emptyLinePlaceholder":134},[28,152696,152697,152699,152701,152703,152705,152708],{"class":30,"line":32690},[28,152698,152421],{"class":211},[28,152700,257],{"class":207},[28,152702,60656],{"class":38},[28,152704,212],{"class":211},[28,152706,152707],{"class":64},"\"请输入新姓名:\"",[28,152709,218],{"class":211},[28,152711,152712,152714,152716,152718,152721],{"class":30,"line":32696},[28,152713,152437],{"class":211},[28,152715,257],{"class":207},[28,152717,152442],{"class":211},[28,152719,152720],{"class":64},"\"请输入新年龄:\"",[28,152722,218],{"class":211},[28,152724,152725,152727,152729,152731,152734],{"class":30,"line":32702},[28,152726,152452],{"class":211},[28,152728,257],{"class":207},[28,152730,152457],{"class":211},[28,152732,152733],{"class":64},"\"请输入新成绩:\"",[28,152735,218],{"class":211},[28,152737,152738],{"class":30,"line":32708},[28,152739,2477],{"emptyLinePlaceholder":134},[28,152741,152742,152745,152747,152749,152751],{"class":30,"line":32719},[28,152743,152744],{"class":211},"    student[",[28,152746,62730],{"class":64},[28,152748,4520],{"class":211},[28,152750,257],{"class":207},[28,152752,149846],{"class":211},[28,152754,152755,152757,152759,152761,152763],{"class":30,"line":32725},[28,152756,152744],{"class":211},[28,152758,69175],{"class":64},[28,152760,4520],{"class":211},[28,152762,257],{"class":207},[28,152764,149858],{"class":211},[28,152766,152767,152769,152771,152773,152775],{"class":30,"line":32745},[28,152768,152744],{"class":211},[28,152770,151523],{"class":64},[28,152772,4520],{"class":211},[28,152774,257],{"class":207},[28,152776,1657],{"class":211},[28,152778,152779],{"class":30,"line":32751},[28,152780,2477],{"emptyLinePlaceholder":134},[28,152782,152783],{"class":30,"line":32762},[28,152784,152512],{"class":211},[28,152786,152787,152789,152791,152794],{"class":30,"line":32768},[28,152788,31350],{"class":38},[28,152790,212],{"class":211},[28,152792,152793],{"class":64},"\"修改成功\"",[28,152795,218],{"class":211},[28,152797,152798],{"class":30,"line":32774},[28,152799,2477],{"emptyLinePlaceholder":134},[28,152801,152802],{"class":30,"line":32780},[28,152803,2477],{"emptyLinePlaceholder":134},[28,152805,152806,152808,152811],{"class":30,"line":32786},[28,152807,31998],{"class":207},[28,152809,152810],{"class":34}," query_student",[28,152812,152012],{"class":211},[28,152814,152815,152817,152819,152821,152823,152826],{"class":30,"line":32792},[28,152816,152374],{"class":211},[28,152818,257],{"class":207},[28,152820,60656],{"class":38},[28,152822,212],{"class":211},[28,152824,152825],{"class":64},"\"请输入要查询的学号:\"",[28,152827,218],{"class":211},[28,152829,152830,152832,152834],{"class":30,"line":32798},[28,152831,152560],{"class":211},[28,152833,257],{"class":207},[28,152835,152565],{"class":211},[28,152837,152838],{"class":30,"line":32804},[28,152839,2477],{"emptyLinePlaceholder":134},[28,152841,152842,152844,152846,152848,152850],{"class":30,"line":32824},[28,152843,3178],{"class":207},[28,152845,152188],{"class":211},[28,152847,38978],{"class":207},[28,152849,38984],{"class":38},[28,152851,3816],{"class":211},[28,152853,152854,152856,152858,152860],{"class":30,"line":32830},[28,152855,32502],{"class":38},[28,152857,212],{"class":211},[28,152859,152590],{"class":64},[28,152861,218],{"class":211},[28,152863,152864],{"class":30,"line":32846},[28,152865,152412],{"class":207},[28,152867,152868],{"class":30,"line":32852},[28,152869,2477],{"emptyLinePlaceholder":134},[28,152871,152872],{"class":30,"line":32866},[28,152873,152874],{"class":211},"    print_student(student)\n",[28,152876,152877],{"class":30,"line":32872},[28,152878,2477],{"emptyLinePlaceholder":134},[28,152880,152881],{"class":30,"line":32887},[28,152882,2477],{"emptyLinePlaceholder":134},[28,152884,152885,152887,152890],{"class":30,"line":32893},[28,152886,31998],{"class":207},[28,152888,152889],{"class":34}," print_student",[28,152891,152892],{"class":211},"(student):\n",[28,152894,152895,152897],{"class":30,"line":32902},[28,152896,31350],{"class":38},[28,152898,151490],{"class":211},[28,152900,152901,152904,152906,152908,152911,152914,152916,152919],{"class":30,"line":32908},[28,152902,152903],{"class":207},"        f",[28,152905,461],{"class":64},[28,152907,1106],{"class":38},[28,152909,152910],{"class":211},"student[",[28,152912,152913],{"class":64},"'student_id'",[28,152915,1150],{"class":211},[28,152917,152918],{"class":38},"}\\t",[28,152920,25204],{"class":64},[28,152922,152923,152925,152927,152929,152931,152934,152936,152938],{"class":30,"line":32917},[28,152924,152903],{"class":207},[28,152926,461],{"class":64},[28,152928,1106],{"class":38},[28,152930,152910],{"class":211},[28,152932,152933],{"class":64},"'name'",[28,152935,1150],{"class":211},[28,152937,152918],{"class":38},[28,152939,25204],{"class":64},[28,152941,152942,152944,152946,152948,152950,152953,152955,152957],{"class":30,"line":32923},[28,152943,152903],{"class":207},[28,152945,461],{"class":64},[28,152947,1106],{"class":38},[28,152949,152910],{"class":211},[28,152951,152952],{"class":64},"'age'",[28,152954,1150],{"class":211},[28,152956,152918],{"class":38},[28,152958,25204],{"class":64},[28,152960,152961,152963,152965,152967,152969,152972,152974,152976],{"class":30,"line":32929},[28,152962,152903],{"class":207},[28,152964,461],{"class":64},[28,152966,1106],{"class":38},[28,152968,152910],{"class":211},[28,152970,152971],{"class":64},"'score'",[28,152973,1150],{"class":211},[28,152975,1156],{"class":38},[28,152977,25204],{"class":64},[28,152979,152980],{"class":30,"line":32938},[28,152981,152982],{"class":211},"    )\n",[28,152984,152985],{"class":30,"line":32944},[28,152986,2477],{"emptyLinePlaceholder":134},[28,152988,152989],{"class":30,"line":32955},[28,152990,2477],{"emptyLinePlaceholder":134},[28,152992,152993,152995,152998],{"class":30,"line":32961},[28,152994,31998],{"class":207},[28,152996,152997],{"class":34}," show_all_students",[28,152999,152012],{"class":211},[28,153001,153002,153004,153006],{"class":30,"line":32980},[28,153003,3178],{"class":207},[28,153005,38981],{"class":207},[28,153007,152193],{"class":211},[28,153009,153010,153012,153014,153017],{"class":30,"line":32986},[28,153011,32502],{"class":38},[28,153013,212],{"class":211},[28,153015,153016],{"class":64},"\"暂无学生\"",[28,153018,218],{"class":211},[28,153020,153021],{"class":30,"line":32997},[28,153022,152412],{"class":207},[28,153024,153025],{"class":30,"line":33003},[28,153026,2477],{"emptyLinePlaceholder":134},[28,153028,153029,153031,153033,153036,153038,153041,153043,153046,153048,153051],{"class":30,"line":33023},[28,153030,31350],{"class":38},[28,153032,212],{"class":211},[28,153034,153035],{"class":64},"\"学号",[28,153037,1310],{"class":38},[28,153039,153040],{"class":64},"姓名",[28,153042,1310],{"class":38},[28,153044,153045],{"class":64},"年龄",[28,153047,1310],{"class":38},[28,153049,153050],{"class":64},"成绩\"",[28,153052,218],{"class":211},[28,153054,153055,153057,153059,153061],{"class":30,"line":33039},[28,153056,3278],{"class":207},[28,153058,152188],{"class":211},[28,153060,26094],{"class":207},[28,153062,152193],{"class":211},[28,153064,153065],{"class":30,"line":33045},[28,153066,153067],{"class":211},"        print_student(student)\n",[28,153069,153070],{"class":30,"line":33059},[28,153071,2477],{"emptyLinePlaceholder":134},[28,153073,153074],{"class":30,"line":33065},[28,153075,2477],{"emptyLinePlaceholder":134},[28,153077,153078,153080,153082],{"class":30,"line":33071},[28,153079,31998],{"class":207},[28,153081,2050],{"class":34},[28,153083,32004],{"class":211},[28,153085,153086,153089,153091],{"class":30,"line":33082},[28,153087,153088],{"class":211},"    students ",[28,153090,257],{"class":207},[28,153092,153093],{"class":211}," load_students()\n",[28,153095,153096],{"class":30,"line":33088},[28,153097,2477],{"emptyLinePlaceholder":134},[28,153099,153100,153102,153104],{"class":30,"line":33094},[28,153101,2328],{"class":207},[28,153103,95343],{"class":38},[28,153105,3816],{"class":211},[28,153107,153108],{"class":30,"line":33104},[28,153109,153110],{"class":211},"        show_menu()\n",[28,153112,153113,153116,153118,153120,153122,153125],{"class":30,"line":33110},[28,153114,153115],{"class":211},"        choice ",[28,153117,257],{"class":207},[28,153119,60656],{"class":38},[28,153121,212],{"class":211},[28,153123,153124],{"class":64},"\"请输入操作:\"",[28,153126,218],{"class":211},[28,153128,153129],{"class":30,"line":33121},[28,153130,2477],{"emptyLinePlaceholder":134},[28,153132,153133,153135,153138,153140,153143],{"class":30,"line":33127},[28,153134,2574],{"class":207},[28,153136,153137],{"class":211}," choice ",[28,153139,3026],{"class":207},[28,153141,153142],{"class":64}," \"1\"",[28,153144,3816],{"class":211},[28,153146,153147],{"class":30,"line":33137},[28,153148,153149],{"class":211},"            add_student(students)\n",[28,153151,153152,153155,153157,153159,153162],{"class":30,"line":33142},[28,153153,153154],{"class":207},"        elif",[28,153156,153137],{"class":211},[28,153158,3026],{"class":207},[28,153160,153161],{"class":64}," \"2\"",[28,153163,3816],{"class":211},[28,153165,153166],{"class":30,"line":33148},[28,153167,153168],{"class":211},"            delete_student(students)\n",[28,153170,153171,153173,153175,153177,153180],{"class":30,"line":33197},[28,153172,153154],{"class":207},[28,153174,153137],{"class":211},[28,153176,3026],{"class":207},[28,153178,153179],{"class":64}," \"3\"",[28,153181,3816],{"class":211},[28,153183,153184],{"class":30,"line":33244},[28,153185,153186],{"class":211},"            update_student(students)\n",[28,153188,153189,153191,153193,153195,153198],{"class":30,"line":33249},[28,153190,153154],{"class":207},[28,153192,153137],{"class":211},[28,153194,3026],{"class":207},[28,153196,153197],{"class":64}," \"4\"",[28,153199,3816],{"class":211},[28,153201,153202],{"class":30,"line":33255},[28,153203,153204],{"class":211},"            query_student(students)\n",[28,153206,153207,153209,153211,153213,153216],{"class":30,"line":33274},[28,153208,153154],{"class":207},[28,153210,153137],{"class":211},[28,153212,3026],{"class":207},[28,153214,153215],{"class":64}," \"5\"",[28,153217,3816],{"class":211},[28,153219,153220],{"class":30,"line":33280},[28,153221,153222],{"class":211},"            show_all_students(students)\n",[28,153224,153225,153227,153229,153231,153234],{"class":30,"line":33300},[28,153226,153154],{"class":207},[28,153228,153137],{"class":211},[28,153230,3026],{"class":207},[28,153232,153233],{"class":64}," \"0\"",[28,153235,3816],{"class":211},[28,153237,153238,153240,153242,153245],{"class":30,"line":33306},[28,153239,34701],{"class":38},[28,153241,212],{"class":211},[28,153243,153244],{"class":64},"\"退出系统\"",[28,153246,218],{"class":211},[28,153248,153249],{"class":30,"line":33312},[28,153250,115149],{"class":207},[28,153252,153253,153255],{"class":30,"line":33322},[28,153254,2611],{"class":207},[28,153256,3816],{"class":211},[28,153258,153259,153261,153263,153266],{"class":30,"line":33327},[28,153260,34701],{"class":38},[28,153262,212],{"class":211},[28,153264,153265],{"class":64},"\"输入错误\"",[28,153267,218],{"class":211},[28,153269,153270],{"class":30,"line":33333},[28,153271,2477],{"emptyLinePlaceholder":134},[28,153273,153274],{"class":30,"line":33349},[28,153275,2477],{"emptyLinePlaceholder":134},[28,153277,153278,153280,153282,153284,153286],{"class":30,"line":33394},[28,153279,1609],{"class":207},[28,153281,31271],{"class":38},[28,153283,101610],{"class":207},[28,153285,101613],{"class":64},[28,153287,3816],{"class":211},[28,153289,153290],{"class":30,"line":33400},[28,153291,101620],{"class":211},[14,153293,153294],{},"这个项目串联了：",[161,153296,153297,153300,153303,153306,153309,153311],{},[119,153298,153299],{},"菜单循环。",[119,153301,153302],{},"函数封装。",[119,153304,153305],{},"列表字典。",[119,153307,153308],{},"JSON 读写。",[119,153310,151778],{},[119,153312,153313,28436],{},[25,153314,153315],{},"if __name__ == \"__main__\"",[149,153317,153319],{"id":153318},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153321,153322],{},"可以进一步拆成两个类：",[161,153324,153325,153330],{},[119,153326,153327,153329],{},[25,153328,149619],{},"：表示单个学生。",[119,153331,153332,153334],{},[25,153333,151645],{},"：负责学生增删改查和文件保存。",[14,153336,153337],{},"示意代码：",[18,153339,153341],{"className":30429,"code":153340,"language":30431,"meta":23,"style":23},"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",[25,153342,153343,153353,153357,153361,153365,153373,153380,153386,153392,153398,153402,153410,153416,153426,153436,153446,153456,153460,153464,153470,153478,153486,153494,153502,153510,153518],{"__ignoreMap":23},[28,153344,153345,153347,153349,153351],{"class":30,"line":31},[28,153346,30788],{"class":207},[28,153348,151203],{"class":211},[28,153350,30443],{"class":207},[28,153352,151208],{"class":211},[28,153354,153355],{"class":30,"line":42},[28,153356,2477],{"emptyLinePlaceholder":134},[28,153358,153359],{"class":30,"line":50},[28,153360,2477],{"emptyLinePlaceholder":134},[28,153362,153363],{"class":30,"line":58},[28,153364,151221],{"class":34},[28,153366,153367,153369,153371],{"class":30,"line":70},[28,153368,14771],{"class":207},[28,153370,7975],{"class":34},[28,153372,3816],{"class":211},[28,153374,153375,153378],{"class":30,"line":78},[28,153376,153377],{"class":211},"    student_id: ",[28,153379,151237],{"class":38},[28,153381,153382,153384],{"class":30,"line":86},[28,153383,151234],{"class":211},[28,153385,151237],{"class":38},[28,153387,153388,153390],{"class":30,"line":97},[28,153389,151242],{"class":211},[28,153391,151245],{"class":38},[28,153393,153394,153396],{"class":30,"line":108},[28,153395,151250],{"class":211},[28,153397,151253],{"class":38},[28,153399,153400],{"class":30,"line":1407},[28,153401,2477],{"emptyLinePlaceholder":134},[28,153403,153404,153406,153408],{"class":30,"line":1690},[28,153405,30852],{"class":207},[28,153407,151401],{"class":34},[28,153409,30858],{"class":211},[28,153411,153412,153414],{"class":30,"line":1695},[28,153413,14829],{"class":207},[28,153415,15649],{"class":211},[28,153417,153418,153420,153422,153424],{"class":30,"line":1701},[28,153419,151414],{"class":64},[28,153421,51488],{"class":211},[28,153423,30874],{"class":38},[28,153425,151421],{"class":211},[28,153427,153428,153430,153432,153434],{"class":30,"line":1706},[28,153429,151426],{"class":64},[28,153431,51488],{"class":211},[28,153433,30874],{"class":38},[28,153435,151433],{"class":211},[28,153437,153438,153440,153442,153444],{"class":30,"line":1720},[28,153439,151438],{"class":64},[28,153441,51488],{"class":211},[28,153443,30874],{"class":38},[28,153445,151445],{"class":211},[28,153447,153448,153450,153452,153454],{"class":30,"line":1725},[28,153449,151450],{"class":64},[28,153451,51488],{"class":211},[28,153453,30874],{"class":38},[28,153455,151457],{"class":211},[28,153457,153458],{"class":30,"line":1731},[28,153459,2606],{"class":211},[28,153461,153462],{"class":30,"line":1752},[28,153463,2477],{"emptyLinePlaceholder":134},[28,153465,153466,153468],{"class":30,"line":1757},[28,153467,151065],{"class":34},[28,153469,151068],{"class":38},[28,153471,153472,153474,153476],{"class":30,"line":1771},[28,153473,30852],{"class":207},[28,153475,151478],{"class":34},[28,153477,151481],{"class":211},[28,153479,153480,153482,153484],{"class":30,"line":1776},[28,153481,14829],{"class":207},[28,153483,151085],{"class":38},[28,153485,151490],{"class":211},[28,153487,153488,153490,153492],{"class":30,"line":1805},[28,153489,151495],{"class":211},[28,153491,151498],{"class":64},[28,153493,87887],{"class":211},[28,153495,153496,153498,153500],{"class":30,"line":1810},[28,153497,151495],{"class":211},[28,153499,62730],{"class":64},[28,153501,87887],{"class":211},[28,153503,153504,153506,153508],{"class":30,"line":1827},[28,153505,151495],{"class":211},[28,153507,69175],{"class":64},[28,153509,87887],{"class":211},[28,153511,153512,153514,153516],{"class":30,"line":1832},[28,153513,151495],{"class":211},[28,153515,151523],{"class":64},[28,153517,87887],{"class":211},[28,153519,153520],{"class":30,"line":1837},[28,153521,38177],{"class":211},[14,153523,153524],{},"管理器示意：",[18,153526,153528],{"className":30429,"code":153527,"language":30431,"meta":23,"style":23},"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",[25,153529,153530,153539,153547,153558,153562,153572,153585,153596,153603,153609,153613,153622,153631,153637,153644],{"__ignoreMap":23},[28,153531,153532,153534,153537],{"class":30,"line":31},[28,153533,14771],{"class":207},[28,153535,153536],{"class":34}," StudentManager",[28,153538,3816],{"class":211},[28,153540,153541,153543,153545],{"class":30,"line":42},[28,153542,30852],{"class":207},[28,153544,30855],{"class":38},[28,153546,30858],{"class":211},[28,153548,153549,153551,153554,153556],{"class":30,"line":50},[28,153550,30896],{"class":38},[28,153552,153553],{"class":211},".students ",[28,153555,257],{"class":207},[28,153557,51889],{"class":211},[28,153559,153560],{"class":30,"line":58},[28,153561,2477],{"emptyLinePlaceholder":134},[28,153563,153564,153566,153569],{"class":30,"line":70},[28,153565,30852],{"class":207},[28,153567,153568],{"class":34}," find_by_id",[28,153570,153571],{"class":211},"(self, student_id):\n",[28,153573,153574,153576,153578,153580,153582],{"class":30,"line":78},[28,153575,3480],{"class":207},[28,153577,152188],{"class":211},[28,153579,26094],{"class":207},[28,153581,38924],{"class":38},[28,153583,153584],{"class":211},".students:\n",[28,153586,153587,153589,153592,153594],{"class":30,"line":86},[28,153588,4719],{"class":207},[28,153590,153591],{"class":211}," student.student_id ",[28,153593,3026],{"class":207},[28,153595,152209],{"class":211},[28,153597,153598,153601],{"class":30,"line":97},[28,153599,153600],{"class":207},"                return",[28,153602,152216],{"class":211},[28,153604,153605,153607],{"class":30,"line":108},[28,153606,14829],{"class":207},[28,153608,152223],{"class":38},[28,153610,153611],{"class":30,"line":1407},[28,153612,2477],{"emptyLinePlaceholder":134},[28,153614,153615,153617,153619],{"class":30,"line":1690},[28,153616,30852],{"class":207},[28,153618,5286],{"class":34},[28,153620,153621],{"class":211},"(self, student):\n",[28,153623,153624,153626,153628],{"class":30,"line":1695},[28,153625,2574],{"class":207},[28,153627,38924],{"class":38},[28,153629,153630],{"class":211},".find_by_id(student.student_id):\n",[28,153632,153633,153635],{"class":30,"line":1701},[28,153634,15809],{"class":207},[28,153636,125858],{"class":38},[28,153638,153639,153641],{"class":30,"line":1706},[28,153640,30896],{"class":38},[28,153642,153643],{"class":211},".students.append(student)\n",[28,153645,153646,153648],{"class":30,"line":1720},[28,153647,14829],{"class":207},[28,153649,153650],{"class":38}," True\n",[14,153652,153653],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[149,153655,153657],{"id":153656},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[177,153659,153661],{"id":153660},"_1251-数据结构","12.5.1 数据结构",[18,153663,153665],{"className":30429,"code":153664,"language":30431,"meta":23,"style":23},"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",[25,153666,153667,153675,153706,153736,153765,153794],{"__ignoreMap":23},[28,153668,153669,153671,153673],{"class":30,"line":31},[28,153670,148516],{"class":211},[28,153672,257],{"class":207},[28,153674,55498],{"class":211},[28,153676,153677,153679,153681,153683,153685,153687,153690,153692,153695,153697,153699,153701,153704],{"class":30,"line":42},[28,153678,148436],{"class":211},[28,153680,148048],{"class":64},[28,153682,51488],{"class":211},[28,153684,148659],{"class":64},[28,153686,12512],{"class":211},[28,153688,153689],{"class":64},"\"category\"",[28,153691,51488],{"class":211},[28,153693,153694],{"class":64},"\"手机\"",[28,153696,12512],{"class":211},[28,153698,84135],{"class":64},[28,153700,51488],{"class":211},[28,153702,153703],{"class":38},"12000",[28,153705,5007],{"class":211},[28,153707,153708,153710,153712,153714,153716,153718,153720,153722,153725,153727,153729,153731,153734],{"class":30,"line":50},[28,153709,148436],{"class":211},[28,153711,148048],{"class":64},[28,153713,51488],{"class":211},[28,153715,148659],{"class":64},[28,153717,12512],{"class":211},[28,153719,153689],{"class":64},[28,153721,51488],{"class":211},[28,153723,153724],{"class":64},"\"电脑\"",[28,153726,12512],{"class":211},[28,153728,84135],{"class":64},[28,153730,51488],{"class":211},[28,153732,153733],{"class":38},"18000",[28,153735,5007],{"class":211},[28,153737,153738,153740,153742,153744,153746,153748,153750,153752,153754,153756,153758,153760,153763],{"class":30,"line":58},[28,153739,148436],{"class":211},[28,153741,148048],{"class":64},[28,153743,51488],{"class":211},[28,153745,148680],{"class":64},[28,153747,12512],{"class":211},[28,153749,153689],{"class":64},[28,153751,51488],{"class":211},[28,153753,153694],{"class":64},[28,153755,12512],{"class":211},[28,153757,84135],{"class":64},[28,153759,51488],{"class":211},[28,153761,153762],{"class":38},"15000",[28,153764,5007],{"class":211},[28,153766,153767,153769,153771,153773,153775,153777,153779,153781,153783,153785,153787,153789,153792],{"class":30,"line":70},[28,153768,148436],{"class":211},[28,153770,148048],{"class":64},[28,153772,51488],{"class":211},[28,153774,148680],{"class":64},[28,153776,12512],{"class":211},[28,153778,153689],{"class":64},[28,153780,51488],{"class":211},[28,153782,153724],{"class":64},[28,153784,12512],{"class":211},[28,153786,84135],{"class":64},[28,153788,51488],{"class":211},[28,153790,153791],{"class":38},"16000",[28,153793,5007],{"class":211},[28,153795,153796],{"class":30,"line":78},[28,153797,33297],{"class":211},[177,153799,153801],{"id":153800},"_1252-按日期统计","12.5.2 按日期统计",[18,153803,153805],{"className":30429,"code":153804,"language":30431,"meta":23,"style":23},"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",[25,153806,153807,153816,153820,153831,153845,153858,153877,153881],{"__ignoreMap":23},[28,153808,153809,153812,153814],{"class":30,"line":31},[28,153810,153811],{"class":211},"daily_total ",[28,153813,257],{"class":207},[28,153815,87919],{"class":211},[28,153817,153818],{"class":30,"line":42},[28,153819,2477],{"emptyLinePlaceholder":134},[28,153821,153822,153824,153826,153828],{"class":30,"line":50},[28,153823,3102],{"class":207},[28,153825,148260],{"class":211},[28,153827,26094],{"class":207},[28,153829,153830],{"class":211}," sales:\n",[28,153832,153833,153836,153838,153841,153843],{"class":30,"line":58},[28,153834,153835],{"class":211},"    date ",[28,153837,257],{"class":207},[28,153839,153840],{"class":211}," item[",[28,153842,148048],{"class":64},[28,153844,33297],{"class":211},[28,153846,153847,153850,153852,153854,153856],{"class":30,"line":70},[28,153848,153849],{"class":211},"    amount ",[28,153851,257],{"class":207},[28,153853,153840],{"class":211},[28,153855,84135],{"class":64},[28,153857,33297],{"class":211},[28,153859,153860,153863,153865,153868,153870,153872,153874],{"class":30,"line":78},[28,153861,153862],{"class":211},"    daily_total[date] ",[28,153864,257],{"class":207},[28,153866,153867],{"class":211}," daily_total.get(date, ",[28,153869,401],{"class":38},[28,153871,13791],{"class":211},[28,153873,691],{"class":207},[28,153875,153876],{"class":211}," amount\n",[28,153878,153879],{"class":30,"line":86},[28,153880,2477],{"emptyLinePlaceholder":134},[28,153882,153883,153885],{"class":30,"line":97},[28,153884,30466],{"class":38},[28,153886,153887],{"class":211},"(daily_total)\n",[177,153889,153891],{"id":153890},"_1253-按类别统计","12.5.3 按类别统计",[18,153893,153895],{"className":30429,"code":153894,"language":30431,"meta":23,"style":23},"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",[25,153896,153897,153906,153910,153920,153933,153945,153963,153967],{"__ignoreMap":23},[28,153898,153899,153902,153904],{"class":30,"line":31},[28,153900,153901],{"class":211},"category_total ",[28,153903,257],{"class":207},[28,153905,87919],{"class":211},[28,153907,153908],{"class":30,"line":42},[28,153909,2477],{"emptyLinePlaceholder":134},[28,153911,153912,153914,153916,153918],{"class":30,"line":50},[28,153913,3102],{"class":207},[28,153915,148260],{"class":211},[28,153917,26094],{"class":207},[28,153919,153830],{"class":211},[28,153921,153922,153925,153927,153929,153931],{"class":30,"line":58},[28,153923,153924],{"class":211},"    category ",[28,153926,257],{"class":207},[28,153928,153840],{"class":211},[28,153930,153689],{"class":64},[28,153932,33297],{"class":211},[28,153934,153935,153937,153939,153941,153943],{"class":30,"line":70},[28,153936,153849],{"class":211},[28,153938,257],{"class":207},[28,153940,153840],{"class":211},[28,153942,84135],{"class":64},[28,153944,33297],{"class":211},[28,153946,153947,153950,153952,153955,153957,153959,153961],{"class":30,"line":78},[28,153948,153949],{"class":211},"    category_total[category] ",[28,153951,257],{"class":207},[28,153953,153954],{"class":211}," category_total.get(category, ",[28,153956,401],{"class":38},[28,153958,13791],{"class":211},[28,153960,691],{"class":207},[28,153962,153876],{"class":211},[28,153964,153965],{"class":30,"line":86},[28,153966,2477],{"emptyLinePlaceholder":134},[28,153968,153969,153971],{"class":30,"line":97},[28,153970,30466],{"class":38},[28,153972,153973],{"class":211},"(category_total)\n",[177,153975,153977],{"id":153976},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[18,153979,153981],{"className":30429,"code":153980,"language":30431,"meta":23,"style":23},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[25,153982,153983,154008],{"__ignoreMap":23},[28,153984,153985,153988,153990,153992,153995,153998,154001,154004,154006],{"class":30,"line":31},[28,153986,153987],{"class":211},"top_date, top_amount ",[28,153989,257],{"class":207},[28,153991,6028],{"class":38},[28,153993,153994],{"class":211},"(daily_total.items(), ",[28,153996,153997],{"class":5293},"key",[28,153999,154000],{"class":207},"=lambda",[28,154002,154003],{"class":211}," item: item[",[28,154005,427],{"class":38},[28,154007,4734],{"class":211},[28,154009,154010,154012],{"class":30,"line":42},[28,154011,30466],{"class":38},[28,154013,154014],{"class":211},"(top_date, top_amount)\n",[149,154016,154018],{"id":154017},"_126-绘制柱状图","12.6 绘制柱状图",[18,154020,154022],{"className":30429,"code":154021,"language":30431,"meta":23,"style":23},"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",[25,154023,154024,154038,154049,154053,154061,154073,154085,154096,154100,154104,154114,154125,154139,154144,154161,154178,154194,154198],{"__ignoreMap":23},[28,154025,154026,154028,154030,154032,154034,154036],{"class":30,"line":31},[28,154027,30788],{"class":207},[28,154029,147430],{"class":211},[28,154031,30443],{"class":207},[28,154033,147435],{"class":211},[28,154035,31434],{"class":207},[28,154037,147440],{"class":211},[28,154039,154040,154042,154044,154046],{"class":30,"line":42},[28,154041,30788],{"class":207},[28,154043,147289],{"class":211},[28,154045,30443],{"class":207},[28,154047,154048],{"class":211}," Bar\n",[28,154050,154051],{"class":30,"line":50},[28,154052,2477],{"emptyLinePlaceholder":134},[28,154054,154055,154057,154059],{"class":30,"line":58},[28,154056,153901],{"class":211},[28,154058,257],{"class":207},[28,154060,15649],{"class":211},[28,154062,154063,154066,154068,154071],{"class":30,"line":70},[28,154064,154065],{"class":64},"    \"手机\"",[28,154067,51488],{"class":211},[28,154069,154070],{"class":38},"27000",[28,154072,31517],{"class":211},[28,154074,154075,154078,154080,154083],{"class":30,"line":78},[28,154076,154077],{"class":64},"    \"电脑\"",[28,154079,51488],{"class":211},[28,154081,154082],{"class":38},"34000",[28,154084,31517],{"class":211},[28,154086,154087,154090,154092,154094],{"class":30,"line":86},[28,154088,154089],{"class":64},"    \"耳机\"",[28,154091,51488],{"class":211},[28,154093,124450],{"class":38},[28,154095,31517],{"class":211},[28,154097,154098],{"class":30,"line":97},[28,154099,1643],{"class":211},[28,154101,154102],{"class":30,"line":108},[28,154103,2477],{"emptyLinePlaceholder":134},[28,154105,154106,154109,154111],{"class":30,"line":1407},[28,154107,154108],{"class":211},"bar ",[28,154110,257],{"class":207},[28,154112,154113],{"class":211}," Bar()\n",[28,154115,154116,154119,154122],{"class":30,"line":1690},[28,154117,154118],{"class":211},"bar.add_xaxis(",[28,154120,154121],{"class":38},"list",[28,154123,154124],{"class":211},"(category_total.keys()))\n",[28,154126,154127,154130,154132,154134,154136],{"class":30,"line":1695},[28,154128,154129],{"class":211},"bar.add_yaxis(",[28,154131,147346],{"class":64},[28,154133,12512],{"class":211},[28,154135,154121],{"class":38},[28,154137,154138],{"class":211},"(category_total.values()))\n",[28,154140,154141],{"class":30,"line":1701},[28,154142,154143],{"class":211},"bar.set_global_opts(\n",[28,154145,154146,154148,154150,154152,154154,154156,154159],{"class":30,"line":1706},[28,154147,147524],{"class":5293},[28,154149,257],{"class":207},[28,154151,147529],{"class":211},[28,154153,51458],{"class":5293},[28,154155,257],{"class":207},[28,154157,154158],{"class":64},"\"品类销售额\"",[28,154160,38098],{"class":211},[28,154162,154163,154165,154167,154169,154171,154173,154176],{"class":30,"line":1720},[28,154164,147543],{"class":5293},[28,154166,257],{"class":207},[28,154168,147548],{"class":211},[28,154170,79861],{"class":5293},[28,154172,257],{"class":207},[28,154174,154175],{"class":64},"\"品类\"",[28,154177,38098],{"class":211},[28,154179,154180,154182,154184,154186,154188,154190,154192],{"class":30,"line":1725},[28,154181,147562],{"class":5293},[28,154183,257],{"class":207},[28,154185,147548],{"class":211},[28,154187,79861],{"class":5293},[28,154189,257],{"class":207},[28,154191,147346],{"class":64},[28,154193,38098],{"class":211},[28,154195,154196],{"class":30,"line":1731},[28,154197,218],{"class":211},[28,154199,154200,154203,154206],{"class":30,"line":1752},[28,154201,154202],{"class":211},"bar.render(",[28,154204,154205],{"class":64},"\"category_sales.html\"",[28,154207,218],{"class":211},[149,154209,154211],{"id":154210},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154213,154214],{},"时间线适合展示不同日期、月份、年份的数据变化。",[18,154216,154218],{"className":30429,"code":154217,"language":30431,"meta":23,"style":23},"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",[25,154219,154220,154234,154245,154249,154257,154281,154304,154329,154333,154337,154347,154351,154362,154371,154381,154395,154426,154431,154435],{"__ignoreMap":23},[28,154221,154222,154224,154226,154228,154230,154232],{"class":30,"line":31},[28,154223,30788],{"class":207},[28,154225,147430],{"class":211},[28,154227,30443],{"class":207},[28,154229,147435],{"class":211},[28,154231,31434],{"class":207},[28,154233,147440],{"class":211},[28,154235,154236,154238,154240,154242],{"class":30,"line":42},[28,154237,30788],{"class":207},[28,154239,147289],{"class":211},[28,154241,30443],{"class":207},[28,154243,154244],{"class":211}," Bar, Timeline\n",[28,154246,154247],{"class":30,"line":50},[28,154248,2477],{"emptyLinePlaceholder":134},[28,154250,154251,154253,154255],{"class":30,"line":58},[28,154252,101709],{"class":211},[28,154254,257],{"class":207},[28,154256,15649],{"class":211},[28,154258,154259,154262,154265,154267,154269,154271,154273,154275,154277,154279],{"class":30,"line":70},[28,154260,154261],{"class":64},"    \"2024-10-01\"",[28,154263,154264],{"class":211},": {",[28,154266,153694],{"class":64},[28,154268,51488],{"class":211},[28,154270,153703],{"class":38},[28,154272,12512],{"class":211},[28,154274,153724],{"class":64},[28,154276,51488],{"class":211},[28,154278,153733],{"class":38},[28,154280,5007],{"class":211},[28,154282,154283,154286,154288,154290,154292,154294,154296,154298,154300,154302],{"class":30,"line":78},[28,154284,154285],{"class":64},"    \"2024-10-02\"",[28,154287,154264],{"class":211},[28,154289,153694],{"class":64},[28,154291,51488],{"class":211},[28,154293,153762],{"class":38},[28,154295,12512],{"class":211},[28,154297,153724],{"class":64},[28,154299,51488],{"class":211},[28,154301,153791],{"class":38},[28,154303,5007],{"class":211},[28,154305,154306,154309,154311,154313,154315,154318,154320,154322,154324,154327],{"class":30,"line":86},[28,154307,154308],{"class":64},"    \"2024-10-03\"",[28,154310,154264],{"class":211},[28,154312,153694],{"class":64},[28,154314,51488],{"class":211},[28,154316,154317],{"class":38},"17000",[28,154319,12512],{"class":211},[28,154321,153724],{"class":64},[28,154323,51488],{"class":211},[28,154325,154326],{"class":38},"19000",[28,154328,5007],{"class":211},[28,154330,154331],{"class":30,"line":97},[28,154332,1643],{"class":211},[28,154334,154335],{"class":30,"line":108},[28,154336,2477],{"emptyLinePlaceholder":134},[28,154338,154339,154342,154344],{"class":30,"line":1407},[28,154340,154341],{"class":211},"timeline ",[28,154343,257],{"class":207},[28,154345,154346],{"class":211}," Timeline()\n",[28,154348,154349],{"class":30,"line":1690},[28,154350,2477],{"emptyLinePlaceholder":134},[28,154352,154353,154355,154358,154360],{"class":30,"line":1695},[28,154354,3102],{"class":207},[28,154356,154357],{"class":211}," date, category_data ",[28,154359,26094],{"class":207},[28,154361,149199],{"class":211},[28,154363,154364,154367,154369],{"class":30,"line":1701},[28,154365,154366],{"class":211},"    bar ",[28,154368,257],{"class":207},[28,154370,154113],{"class":211},[28,154372,154373,154376,154378],{"class":30,"line":1706},[28,154374,154375],{"class":211},"    bar.add_xaxis(",[28,154377,154121],{"class":38},[28,154379,154380],{"class":211},"(category_data.keys()))\n",[28,154382,154383,154386,154388,154390,154392],{"class":30,"line":1720},[28,154384,154385],{"class":211},"    bar.add_yaxis(",[28,154387,147346],{"class":64},[28,154389,12512],{"class":211},[28,154391,154121],{"class":38},[28,154393,154394],{"class":211},"(category_data.values()))\n",[28,154396,154397,154400,154403,154405,154407,154409,154411,154413,154415,154417,154419,154421,154424],{"class":30,"line":1725},[28,154398,154399],{"class":211},"    bar.set_global_opts(",[28,154401,154402],{"class":5293},"title_opts",[28,154404,257],{"class":207},[28,154406,147529],{"class":211},[28,154408,51458],{"class":5293},[28,154410,257],{"class":207},[28,154412,263],{"class":207},[28,154414,461],{"class":64},[28,154416,1106],{"class":38},[28,154418,73977],{"class":211},[28,154420,1156],{"class":38},[28,154422,154423],{"class":64},"销售额\"",[28,154425,30548],{"class":211},[28,154427,154428],{"class":30,"line":1731},[28,154429,154430],{"class":211},"    timeline.add(bar, date)\n",[28,154432,154433],{"class":30,"line":1752},[28,154434,2477],{"emptyLinePlaceholder":134},[28,154436,154437,154440,154443],{"class":30,"line":1757},[28,154438,154439],{"class":211},"timeline.render(",[28,154441,154442],{"class":64},"\"timeline_sales.html\"",[28,154444,218],{"class":211},[149,154446,154448],{"id":154447},"_128-绘制地图","12.8 绘制地图",[14,154450,154451],{},"地图适合展示地区数据。",[18,154453,154455],{"className":30429,"code":154454,"language":30431,"meta":23,"style":23},"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",[25,154456,154457,154471,154482,154486,154494,154507,154519,154532,154545,154549,154553,154563,154578,154583,154600,154619,154623],{"__ignoreMap":23},[28,154458,154459,154461,154463,154465,154467,154469],{"class":30,"line":31},[28,154460,30788],{"class":207},[28,154462,147430],{"class":211},[28,154464,30443],{"class":207},[28,154466,147435],{"class":211},[28,154468,31434],{"class":207},[28,154470,147440],{"class":211},[28,154472,154473,154475,154477,154479],{"class":30,"line":42},[28,154474,30788],{"class":207},[28,154476,147289],{"class":211},[28,154478,30443],{"class":207},[28,154480,154481],{"class":211}," Map\n",[28,154483,154484],{"class":30,"line":50},[28,154485,2477],{"emptyLinePlaceholder":134},[28,154487,154488,154490,154492],{"class":30,"line":58},[28,154489,101709],{"class":211},[28,154491,257],{"class":207},[28,154493,55498],{"class":211},[28,154495,154496,154499,154501,154503,154505],{"class":30,"line":70},[28,154497,154498],{"class":211},"    (",[28,154500,69320],{"class":64},[28,154502,12512],{"class":211},[28,154504,1027],{"class":38},[28,154506,38098],{"class":211},[28,154508,154509,154511,154513,154515,154517],{"class":30,"line":78},[28,154510,154498],{"class":211},[28,154512,69340],{"class":64},[28,154514,12512],{"class":211},[28,154516,147363],{"class":38},[28,154518,38098],{"class":211},[28,154520,154521,154523,154526,154528,154530],{"class":30,"line":86},[28,154522,154498],{"class":211},[28,154524,154525],{"class":64},"\"广东\"",[28,154527,12512],{"class":211},[28,154529,1800],{"class":38},[28,154531,38098],{"class":211},[28,154533,154534,154536,154539,154541,154543],{"class":30,"line":97},[28,154535,154498],{"class":211},[28,154537,154538],{"class":64},"\"浙江\"",[28,154540,12512],{"class":211},[28,154542,147368],{"class":38},[28,154544,38098],{"class":211},[28,154546,154547],{"class":30,"line":108},[28,154548,33297],{"class":211},[28,154550,154551],{"class":30,"line":1407},[28,154552,2477],{"emptyLinePlaceholder":134},[28,154554,154555,154558,154560],{"class":30,"line":1690},[28,154556,154557],{"class":211},"map_chart ",[28,154559,257],{"class":207},[28,154561,154562],{"class":211}," Map()\n",[28,154564,154565,154568,154570,154573,154576],{"class":30,"line":1695},[28,154566,154567],{"class":211},"map_chart.add(",[28,154569,147346],{"class":64},[28,154571,154572],{"class":211},", data, ",[28,154574,154575],{"class":64},"\"china\"",[28,154577,218],{"class":211},[28,154579,154580],{"class":30,"line":1701},[28,154581,154582],{"class":211},"map_chart.set_global_opts(\n",[28,154584,154585,154587,154589,154591,154593,154595,154598],{"class":30,"line":1706},[28,154586,147524],{"class":5293},[28,154588,257],{"class":207},[28,154590,147529],{"class":211},[28,154592,51458],{"class":5293},[28,154594,257],{"class":207},[28,154596,154597],{"class":64},"\"地区销售额\"",[28,154599,38098],{"class":211},[28,154601,154602,154605,154607,154610,154613,154615,154617],{"class":30,"line":1720},[28,154603,154604],{"class":5293},"    visualmap_opts",[28,154606,257],{"class":207},[28,154608,154609],{"class":211},"opts.VisualMapOpts(",[28,154611,154612],{"class":5293},"max_",[28,154614,257],{"class":207},[28,154616,1800],{"class":38},[28,154618,38098],{"class":211},[28,154620,154621],{"class":30,"line":1725},[28,154622,218],{"class":211},[28,154624,154625,154628,154631],{"class":30,"line":1731},[28,154626,154627],{"class":211},"map_chart.render(",[28,154629,154630],{"class":64},"\"map_sales.html\"",[28,154632,218],{"class":211},[14,154634,154635],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[149,154637,154639],{"id":154638},"_129-项目拆分建议","12.9 项目拆分建议",[14,154641,154642],{},"当代码超过一个文件时，可以这样组织：",[18,154644,154647],{"className":154645,"code":154646,"language":5264,"meta":23},[5262],"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",[25,154648,154646],{"__ignoreMap":23},[14,154650,154651],{},"职责：",[161,154653,154654,154660,154666,154672],{},[119,154655,154656,154659],{},[25,154657,154658],{},"main.py","：程序入口。",[119,154661,154662,154665],{},[25,154663,154664],{},"file_utils.py","：读写 JSON。",[119,154667,154668,154671],{},[25,154669,154670],{},"sales_service.py","：统计销售数据。",[119,154673,154674,154677],{},[25,154675,154676],{},"chart_builder.py","：生成图表。",[149,154679,154681],{"id":154680},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154683,154684],{},"语法基础：",[161,154686,154687,154690,154693,154696],{},[119,154688,154689],{},"会写变量、注释、输入输出。",[119,154691,154692],{},"会使用 int、float、str、bool。",[119,154694,154695],{},"会做类型转换。",[119,154697,154698],{},"会使用 f-string 格式化输出。",[14,154700,154701],{},"流程控制：",[161,154703,154704,154710,154716,154724],{},[119,154705,154706,154707,28436],{},"会写 ",[25,154708,154709],{},"if elif else",[119,154711,154706,154712,101069,154714,28436],{},[25,154713,108714],{},[25,154715,3102],{},[119,154717,154718,154719,101069,154721,28436],{},"理解 ",[25,154720,2130],{},[25,154722,154723],{},"continue",[119,154725,154726],{},"能写嵌套循环。",[14,154728,154729],{},"函数：",[161,154731,154732,154735,154738,154741],{},[119,154733,154734],{},"会定义和调用函数。",[119,154736,154737],{},"理解参数和返回值。",[119,154739,154740],{},"知道局部变量和全局变量。",[119,154742,154743],{},"会使用默认参数、关键字参数、不定长参数。",[14,154745,154746],{},"容器：",[161,154748,154749,154752,154755,154758,154761],{},[119,154750,154751],{},"会使用列表增删改查。",[119,154753,154754],{},"会遍历列表、字典。",[119,154756,154757],{},"会使用切片。",[119,154759,154760],{},"会用集合去重。",[119,154762,154763],{},"会处理列表嵌套字典。",[14,154765,154766],{},"文件和模块：",[161,154768,154769,154772,154775,154778,154781],{},[119,154770,154771],{},"会读写文本文件。",[119,154773,154774],{},"会读写 JSON。",[119,154776,154777],{},"会捕获常见异常。",[119,154779,154780],{},"会导入模块和第三方包。",[119,154782,154783],{},"会创建简单包结构。",[14,154785,154786],{},"项目能力：",[161,154788,154789,154792,154795,154798,154801],{},[119,154790,154791],{},"能把代码拆成函数。",[119,154793,154794],{},"能把数据保存到文件。",[119,154796,154797],{},"能处理用户输入错误。",[119,154799,154800],{},"能写一个完整菜单程序。",[119,154802,154803],{},"能用 pyecharts 生成图表。",[149,154805,154807],{"id":154806},"_1211-推荐练习顺序","12.11 推荐练习顺序",[161,154809,154810,154813,154816,154819,154822,154825,154828,154831],{},[119,154811,154812],{},"猜数字游戏。",[119,154814,154815],{},"ATM 菜单程序。",[119,154817,154818],{},"学生成绩统计。",[119,154820,154821],{},"学生管理系统函数版。",[119,154823,154824],{},"学生管理系统文件持久化版。",[119,154826,154827],{},"学生管理系统面向对象版。",[119,154829,154830],{},"销售数据统计。",[119,154832,154833],{},"销售数据可视化。",[149,154835,154837],{"id":154836},"_1212-常见学习误区","12.12 常见学习误区",[161,154839,154840,154843,154846,154849,154852,154855,154858],{},[119,154841,154842],{},"只看视频不敲代码。",[119,154844,154845],{},"一报错就复制错误去搜，不先读报错位置。",[119,154847,154848],{},"变量名随便写，后续自己看不懂。",[119,154850,154851],{},"所有代码都写在一个文件一个函数里。",[119,154853,154854],{},"不保存练习代码，复习时没有材料。",[119,154856,154857],{},"还没掌握列表字典就急着学框架。",[119,154859,154860],{},"不会读官方文档，只依赖教程。",[149,154862,154864],{"id":154863},"_1213-如何读报错","12.13 如何读报错",[14,154866,154867],{},"报错通常从下往上看最后几行。",[14,154869,15212],{},[18,154871,154874],{"className":154872,"code":154873,"language":5264,"meta":23},[5262],"ValueError: invalid literal for int() with base 10: 'abc'\n",[25,154875,154873],{"__ignoreMap":23},[14,154877,24675],{},[161,154879,154880,154886,154896],{},[119,154881,154882,154883,28436],{},"异常类型是 ",[25,154884,154885],{},"ValueError",[119,154887,107396,154888,154891,154892,154895],{},[25,154889,154890],{},"int()"," 无法把 ",[25,154893,154894],{},"'abc'"," 转成整数。",[119,154897,154898],{},"应该检查输入内容或增加异常处理。",[14,154900,154901],{},"再看文件名和行号：",[18,154903,154906],{"className":154904,"code":154905,"language":5264,"meta":23},[5262],"File \"main.py\", line 10, in \u003Cmodule>\n",[25,154907,154905],{"__ignoreMap":23},[14,154909,154910,154911,154913],{},"表示错误发生在 ",[25,154912,154658],{}," 第 10 行。",[149,154915,154917],{"id":154916},"_1214-后续学习方向","12.14 后续学习方向",[14,154919,154920],{},"Python 基础完成后，可以按兴趣选择方向：",[161,154922,154923,154935,154944,154956,154967,154976,154986],{},[119,154924,154925,154926,422,154929,422,154932,28436],{},"自动化办公：",[25,154927,154928],{},"openpyxl",[25,154930,154931],{},"python-docx",[25,154933,154934],{},"pdfplumber",[119,154936,154937,154938,422,154940,422,154942,28436],{},"数据分析：",[25,154939,100677],{},[25,154941,146236],{},[25,154943,146244],{},[119,154945,154946,154947,422,154950,422,154953,28436],{},"Web 后端：",[25,154948,154949],{},"Flask",[25,154951,154952],{},"FastAPI",[25,154954,154955],{},"Django",[119,154957,154958,154959,422,154961,422,154964,28436],{},"爬虫：",[25,154960,146221],{},[25,154962,154963],{},"BeautifulSoup",[25,154965,154966],{},"Scrapy",[119,154968,154969,154970,422,154972,154975],{},"测试开发：",[25,154971,146268],{},[25,154973,154974],{},"selenium","、接口测试。",[119,154977,154978,154979,422,154981,422,154983,28436],{},"人工智能：",[25,154980,100677],{},[25,154982,146236],{},[25,154984,154985],{},"pytorch",[119,154987,154988,154989,422,154991,422,154994,28436],{},"运维脚本：",[25,154990,145837],{},[25,154992,154993],{},"subprocess",[25,154995,154996],{},"paramiko",[14,154998,154999],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[149,155001,155003],{"id":155002},"_1215-结课练习","12.15 结课练习",[161,155005,155006,155009,155012,155015,155018,155021,155024,155027],{},[119,155007,155008],{},"完成函数版学生管理系统。",[119,155010,155011],{},"给学生管理系统增加 JSON 持久化。",[119,155013,155014],{},"给学生管理系统增加异常处理。",[119,155016,155017],{},"把学生管理系统改成面向对象版。",[119,155019,155020],{},"使用 pyecharts 绘制学生成绩柱状图。",[119,155022,155023],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[119,155025,155026],{},"按品类统计销售额并绘制柱状图。",[119,155028,155029],{},"写一份自己的 Python 学习路线图。",[126,155031,155032],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":23,"searchDepth":42,"depth":42,"links":155034},[155035,155036,155039,155040,155041,155047,155048,155049,155050,155051,155052,155053,155054,155055,155056],{"id":151751,"depth":42,"text":151752},{"id":151801,"depth":42,"text":151802,"children":155037},[155038],{"id":151805,"depth":50,"text":151806},{"id":151844,"depth":42,"text":151845},{"id":153318,"depth":42,"text":153319},{"id":153656,"depth":42,"text":153657,"children":155042},[155043,155044,155045,155046],{"id":153660,"depth":50,"text":153661},{"id":153800,"depth":50,"text":153801},{"id":153890,"depth":50,"text":153891},{"id":153976,"depth":50,"text":153977},{"id":154017,"depth":42,"text":154018},{"id":154210,"depth":42,"text":154211},{"id":154447,"depth":42,"text":154448},{"id":154638,"depth":42,"text":154639},{"id":154680,"depth":42,"text":154681},{"id":154806,"depth":42,"text":154807},{"id":154836,"depth":42,"text":154837},{"id":154863,"depth":42,"text":154864},{"id":154916,"depth":42,"text":154917},{"id":155002,"depth":42,"text":155003},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151743,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155063,"title":155064,"body":155065,"description":131,"extension":132,"meta":157534,"navigation":134,"path":157535,"seo":157536,"stem":157537,"__hash__":157538},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155066,"toc":157509},[155067,155070,155074,155077,155080,155100,155103,155126,155129,155132,155154,155157,155179,155183,155186,155226,155229,155350,155354,155357,155397,155400,155424,155427,155431,155434,155448,155481,155484,155519,155522,155545,155548,155581,155584,155586,155592,155667,155670,155676,155693,155733,155737,155740,155786,155788,155826,155829,155864,155867,155902,155905,155937,155940,155959,155963,155967,156080,156082,156157,156161,156207,156210,156236,156245,156249,156252,156315,156323,156351,156355,156395,156460,156464,156467,156506,156509,156554,156557,156618,156622,156649,156652,156680,156683,156687,156691,156756,156759,156797,156800,156832,156836,156935,156939,156942,157015,157018,157066,157070,157076,157116,157119,157166,157169,157218,157222,157224,157238,157240,157421,157425,157452,157472,157479,157483,157500,157506],[10,155068,155064],{"id":155069},"_2-基础语法变量与字符串",[149,155071,155073],{"id":155072},"_21-注释","2.1 注释",[14,155075,155076],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155078,155079],{},"单行注释：",[18,155081,155083],{"className":30429,"code":155082,"language":30431,"meta":23,"style":23},"# 这是单行注释\nprint(\"hello\")\n",[25,155084,155085,155090],{"__ignoreMap":23},[28,155086,155087],{"class":30,"line":31},[28,155088,155089],{"class":269},"# 这是单行注释\n",[28,155091,155092,155094,155096,155098],{"class":30,"line":42},[28,155093,30466],{"class":38},[28,155095,212],{"class":211},[28,155097,5921],{"class":64},[28,155099,218],{"class":211},[14,155101,155102],{},"多行说明常用三引号：",[18,155104,155106],{"className":30429,"code":155105,"language":30431,"meta":23,"style":23},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[25,155107,155108,155112,155117,155122],{"__ignoreMap":23},[28,155109,155110],{"class":30,"line":31},[28,155111,95749],{"class":64},[28,155113,155114],{"class":30,"line":42},[28,155115,155116],{"class":64},"这是多行说明。\n",[28,155118,155119],{"class":30,"line":50},[28,155120,155121],{"class":64},"常用于文件顶部说明、函数说明等。\n",[28,155123,155124],{"class":30,"line":58},[28,155125,95749],{"class":64},[14,155127,155128],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155130,155131],{},"不好：",[18,155133,155135],{"className":30429,"code":155134,"language":30431,"meta":23,"style":23},"# age 加 1\nage = age + 1\n",[25,155136,155137,155142],{"__ignoreMap":23},[28,155138,155139],{"class":30,"line":31},[28,155140,155141],{"class":269},"# age 加 1\n",[28,155143,155144,155146,155148,155150,155152],{"class":30,"line":42},[28,155145,146597],{"class":211},[28,155147,257],{"class":207},[28,155149,15784],{"class":211},[28,155151,691],{"class":207},[28,155153,55750],{"class":38},[14,155155,155156],{},"较好：",[18,155158,155160],{"className":30429,"code":155159,"language":30431,"meta":23,"style":23},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[25,155161,155162,155167],{"__ignoreMap":23},[28,155163,155164],{"class":30,"line":31},[28,155165,155166],{"class":269},"# 用户过完生日后，年龄增加一岁\n",[28,155168,155169,155171,155173,155175,155177],{"class":30,"line":42},[28,155170,146597],{"class":211},[28,155172,257],{"class":207},[28,155174,15784],{"class":211},[28,155176,691],{"class":207},[28,155178,55750],{"class":38},[149,155180,155182],{"id":155181},"_22-字面量","2.2 字面量",[14,155184,155185],{},"字面量就是代码中直接写出来的数据。",[18,155187,155189],{"className":30429,"code":155188,"language":30431,"meta":23,"style":23},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[25,155190,155191,155198,155205,155212,155219],{"__ignoreMap":23},[28,155192,155193,155195],{"class":30,"line":31},[28,155194,521],{"class":38},[28,155196,155197],{"class":269},"          # 整数\n",[28,155199,155200,155202],{"class":30,"line":42},[28,155201,260],{"class":38},[28,155203,155204],{"class":269},"         # 小数\n",[28,155206,155207,155209],{"class":30,"line":50},[28,155208,5921],{"class":64},[28,155210,155211],{"class":269},"      # 字符串\n",[28,155213,155214,155216],{"class":30,"line":58},[28,155215,31527],{"class":38},[28,155217,155218],{"class":269},"         # 布尔值\n",[28,155220,155221,155223],{"class":30,"line":70},[28,155222,95737],{"class":38},[28,155224,155225],{"class":269},"         # 空值\n",[14,155227,155228],{},"常见字面量类型：",[347,155230,155231,155241],{},[350,155232,155233],{},[353,155234,155235,155237,155239],{},[356,155236,23814],{},[356,155238,27543],{},[356,155240,25920],{},[394,155242,155243,155254,155265,155276,155288,155300,155312,155325,155337],{},[353,155244,155245,155247,155251],{},[399,155246,215],{},[399,155248,155249],{},[25,155250,521],{},[399,155252,155253],{},"整数",[353,155255,155256,155258,155262],{},[399,155257,251],{},[399,155259,155260],{},[25,155261,260],{},[399,155263,155264],{},"浮点数",[353,155266,155267,155269,155273],{},[399,155268,1379],{},[399,155270,155271],{},[25,155272,5921],{},[399,155274,155275],{},"字符串",[353,155277,155278,155280,155286],{},[399,155279,1432],{},[399,155281,155282,422,155284],{},[25,155283,31527],{},[25,155285,34038],{},[399,155287,66066],{},[353,155289,155290,155293,155297],{},[399,155291,155292],{},"NoneType",[399,155294,155295],{},[25,155296,95737],{},[399,155298,155299],{},"空值",[353,155301,155302,155304,155309],{},[399,155303,154121],{},[399,155305,155306],{},[25,155307,155308],{},"[1, 2, 3]",[399,155310,155311],{},"列表",[353,155313,155314,155317,155322],{},[399,155315,155316],{},"tuple",[399,155318,155319],{},[25,155320,155321],{},"(1, 2, 3)",[399,155323,155324],{},"元组",[353,155326,155327,155329,155334],{},[399,155328,114597],{},[399,155330,155331],{},[25,155332,155333],{},"{\"name\": \"张三\"}",[399,155335,155336],{},"字典",[353,155338,155339,155342,155347],{},[399,155340,155341],{},"set",[399,155343,155344],{},[25,155345,155346],{},"{1, 2, 3}",[399,155348,155349],{},"集合",[149,155351,155353],{"id":155352},"_23-变量","2.3 变量",[14,155355,155356],{},"变量是保存数据的名字。",[18,155358,155360],{"className":30429,"code":155359,"language":30431,"meta":23,"style":23},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[25,155361,155362,155370,155378,155388],{"__ignoreMap":23},[28,155363,155364,155366,155368],{"class":30,"line":31},[28,155365,146587],{"class":211},[28,155367,257],{"class":207},[28,155369,149404],{"class":64},[28,155371,155372,155374,155376],{"class":30,"line":42},[28,155373,146597],{"class":211},[28,155375,257],{"class":207},[28,155377,146602],{"class":38},[28,155379,155380,155383,155385],{"class":30,"line":50},[28,155381,155382],{"class":211},"height ",[28,155384,257],{"class":207},[28,155386,155387],{"class":38}," 1.75\n",[28,155389,155390,155393,155395],{"class":30,"line":58},[28,155391,155392],{"class":211},"is_student ",[28,155394,257],{"class":207},[28,155396,153650],{"class":38},[14,155398,155399],{},"Python 的变量不需要提前声明类型：",[18,155401,155403],{"className":30429,"code":155402,"language":30431,"meta":23,"style":23},"score = 100\nscore = \"满分\"\n",[25,155404,155405,155415],{"__ignoreMap":23},[28,155406,155407,155410,155412],{"class":30,"line":31},[28,155408,155409],{"class":211},"score ",[28,155411,257],{"class":207},[28,155413,155414],{"class":38}," 100\n",[28,155416,155417,155419,155421],{"class":30,"line":42},[28,155418,155409],{"class":211},[28,155420,257],{"class":207},[28,155422,155423],{"class":64}," \"满分\"\n",[14,155425,155426],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[149,155428,155430],{"id":155429},"_24-变量命名规则","2.4 变量命名规则",[14,155432,155433],{},"硬性规则：",[161,155435,155436,155439,155442,155445],{},[119,155437,155438],{},"只能由字母、数字、下划线组成。",[119,155440,155441],{},"不能以数字开头。",[119,155443,155444],{},"不能使用 Python 关键字。",[119,155446,155447],{},"区分大小写。",[18,155449,155451],{"className":30429,"code":155450,"language":30431,"meta":23,"style":23},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[25,155452,155453,155462,155471],{"__ignoreMap":23},[28,155454,155455,155458,155460],{"class":30,"line":31},[28,155456,155457],{"class":211},"user_name ",[28,155459,257],{"class":207},[28,155461,146592],{"class":64},[28,155463,155464,155467,155469],{"class":30,"line":42},[28,155465,155466],{"class":211},"age2 ",[28,155468,257],{"class":207},[28,155470,146602],{"class":38},[28,155472,155473,155476,155478],{"class":30,"line":50},[28,155474,155475],{"class":211},"_token ",[28,155477,257],{"class":207},[28,155479,155480],{"class":64}," \"abc\"\n",[14,155482,155483],{},"错误写法：",[18,155485,155487],{"className":30429,"code":155486,"language":30431,"meta":23,"style":23},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[25,155488,155489,155498,155510],{"__ignoreMap":23},[28,155490,155491,155494,155496],{"class":30,"line":31},[28,155492,155493],{"class":77454},"2age",[28,155495,13641],{"class":207},[28,155497,146602],{"class":38},[28,155499,155500,155502,155504,155506,155508],{"class":30,"line":42},[28,155501,131635],{"class":211},[28,155503,742],{"class":207},[28,155505,146587],{"class":211},[28,155507,257],{"class":207},[28,155509,146592],{"class":64},[28,155511,155512,155514,155516],{"class":30,"line":50},[28,155513,14771],{"class":207},[28,155515,13641],{"class":207},[28,155517,155518],{"class":64}," \"一班\"\n",[14,155520,155521],{},"查看关键字：",[18,155523,155525],{"className":30429,"code":155524,"language":30431,"meta":23,"style":23},"import keyword\n\nprint(keyword.kwlist)\n",[25,155526,155527,155534,155538],{"__ignoreMap":23},[28,155528,155529,155531],{"class":30,"line":31},[28,155530,30443],{"class":207},[28,155532,155533],{"class":211}," keyword\n",[28,155535,155536],{"class":30,"line":42},[28,155537,2477],{"emptyLinePlaceholder":134},[28,155539,155540,155542],{"class":30,"line":50},[28,155541,30466],{"class":38},[28,155543,155544],{"class":211},"(keyword.kwlist)\n",[14,155546,155547],{},"推荐命名风格：",[18,155549,155551],{"className":30429,"code":155550,"language":30431,"meta":23,"style":23},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[25,155552,155553,155562,155572],{"__ignoreMap":23},[28,155554,155555,155558,155560],{"class":30,"line":31},[28,155556,155557],{"class":211},"student_name ",[28,155559,257],{"class":207},[28,155561,149404],{"class":64},[28,155563,155564,155567,155569],{"class":30,"line":42},[28,155565,155566],{"class":211},"total_price ",[28,155568,257],{"class":207},[28,155570,155571],{"class":38}," 99.8\n",[28,155573,155574,155577,155579],{"class":30,"line":50},[28,155575,155576],{"class":211},"is_finished ",[28,155578,257],{"class":207},[28,155580,125858],{"class":38},[14,155582,155583],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[149,155585,50783],{"id":50782},[14,155587,104417,155588,155591],{},[25,155589,155590],{},"type()"," 查看数据类型：",[18,155593,155595],{"className":30429,"code":155594,"language":30431,"meta":23,"style":23},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[25,155596,155597,155611,155625,155639,155653],{"__ignoreMap":23},[28,155598,155599,155601,155603,155605,155607,155609],{"class":30,"line":31},[28,155600,30466],{"class":38},[28,155602,212],{"class":211},[28,155604,103158],{"class":38},[28,155606,212],{"class":211},[28,155608,521],{"class":38},[28,155610,30548],{"class":211},[28,155612,155613,155615,155617,155619,155621,155623],{"class":30,"line":42},[28,155614,30466],{"class":38},[28,155616,212],{"class":211},[28,155618,103158],{"class":38},[28,155620,212],{"class":211},[28,155622,260],{"class":38},[28,155624,30548],{"class":211},[28,155626,155627,155629,155631,155633,155635,155637],{"class":30,"line":50},[28,155628,30466],{"class":38},[28,155630,212],{"class":211},[28,155632,103158],{"class":38},[28,155634,212],{"class":211},[28,155636,5921],{"class":64},[28,155638,30548],{"class":211},[28,155640,155641,155643,155645,155647,155649,155651],{"class":30,"line":58},[28,155642,30466],{"class":38},[28,155644,212],{"class":211},[28,155646,103158],{"class":38},[28,155648,212],{"class":211},[28,155650,31527],{"class":38},[28,155652,30548],{"class":211},[28,155654,155655,155657,155659,155661,155663,155665],{"class":30,"line":70},[28,155656,30466],{"class":38},[28,155658,212],{"class":211},[28,155660,103158],{"class":38},[28,155662,212],{"class":211},[28,155664,95737],{"class":38},[28,155666,30548],{"class":211},[14,155668,155669],{},"输出类似：",[18,155671,155674],{"className":155672,"code":155673,"language":5264,"meta":23},[5262],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[25,155675,155673],{"__ignoreMap":23},[14,155677,9102,155678,107334,155680,155682,155683,155685,155686,21577,155688,155685,155690,155692],{},[25,155679,1432],{},[25,155681,215],{}," 的子类，",[25,155684,31527],{}," 可以当作 ",[25,155687,427],{},[25,155689,34038],{},[25,155691,401],{},"，但业务代码中不要滥用。",[18,155694,155696],{"className":30429,"code":155695,"language":30431,"meta":23,"style":23},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[25,155697,155698,155716],{"__ignoreMap":23},[28,155699,155700,155702,155704,155706,155708,155710,155713],{"class":30,"line":31},[28,155701,30466],{"class":38},[28,155703,212],{"class":211},[28,155705,31527],{"class":38},[28,155707,45617],{"class":207},[28,155709,25189],{"class":38},[28,155711,155712],{"class":211},")   ",[28,155714,155715],{"class":269},"# 2\n",[28,155717,155718,155720,155722,155724,155726,155728,155730],{"class":30,"line":42},[28,155719,30466],{"class":38},[28,155721,212],{"class":211},[28,155723,34038],{"class":38},[28,155725,45617],{"class":207},[28,155727,25189],{"class":38},[28,155729,45859],{"class":211},[28,155731,155732],{"class":269},"# 1\n",[149,155734,155736],{"id":155735},"_26-类型转换","2.6 类型转换",[14,155738,155739],{},"常用转换函数：",[18,155741,155743],{"className":30429,"code":155742,"language":30431,"meta":23,"style":23},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[25,155744,155745,155755,155766,155776],{"__ignoreMap":23},[28,155746,155747,155749,155751,155753],{"class":30,"line":31},[28,155748,215],{"class":38},[28,155750,212],{"class":211},[28,155752,54367],{"class":64},[28,155754,218],{"class":211},[28,155756,155757,155759,155761,155764],{"class":30,"line":42},[28,155758,251],{"class":38},[28,155760,212],{"class":211},[28,155762,155763],{"class":64},"\"3.14\"",[28,155765,218],{"class":211},[28,155767,155768,155770,155772,155774],{"class":30,"line":50},[28,155769,1379],{"class":38},[28,155771,212],{"class":211},[28,155773,521],{"class":38},[28,155775,218],{"class":211},[28,155777,155778,155780,155782,155784],{"class":30,"line":58},[28,155779,1432],{"class":38},[28,155781,212],{"class":211},[28,155783,427],{"class":38},[28,155785,218],{"class":211},[14,155787,15212],{},[18,155789,155791],{"className":30429,"code":155790,"language":30431,"meta":23,"style":23},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[25,155792,155793,155802,155813],{"__ignoreMap":23},[28,155794,155795,155797,155799],{"class":30,"line":31},[28,155796,146597],{"class":211},[28,155798,257],{"class":207},[28,155800,155801],{"class":64}," \"18\"\n",[28,155803,155804,155806,155808,155810],{"class":30,"line":42},[28,155805,146597],{"class":211},[28,155807,257],{"class":207},[28,155809,2459],{"class":38},[28,155811,155812],{"class":211},"(age)\n",[28,155814,155815,155817,155820,155822,155824],{"class":30,"line":50},[28,155816,30466],{"class":38},[28,155818,155819],{"class":211},"(age ",[28,155821,691],{"class":207},[28,155823,25189],{"class":38},[28,155825,218],{"class":211},[14,155827,155828],{},"输入得到的内容永远是字符串：",[18,155830,155832],{"className":30429,"code":155831,"language":30431,"meta":23,"style":23},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[25,155833,155834,155850],{"__ignoreMap":23},[28,155835,155836,155839,155841,155843,155845,155848],{"class":30,"line":31},[28,155837,155838],{"class":211},"num ",[28,155840,257],{"class":207},[28,155842,60656],{"class":38},[28,155844,212],{"class":211},[28,155846,155847],{"class":64},"\"请输入数字:\"",[28,155849,218],{"class":211},[28,155851,155852,155854,155856,155858,155861],{"class":30,"line":42},[28,155853,30466],{"class":38},[28,155855,212],{"class":211},[28,155857,103158],{"class":38},[28,155859,155860],{"class":211},"(num))  ",[28,155862,155863],{"class":269},"# str\n",[14,155865,155866],{},"如果要做数学运算，必须转换：",[18,155868,155870],{"className":30429,"code":155869,"language":30431,"meta":23,"style":23},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[25,155871,155872,155890],{"__ignoreMap":23},[28,155873,155874,155876,155878,155880,155882,155884,155886,155888],{"class":30,"line":31},[28,155875,155838],{"class":211},[28,155877,257],{"class":207},[28,155879,2459],{"class":38},[28,155881,212],{"class":211},[28,155883,53872],{"class":38},[28,155885,212],{"class":211},[28,155887,155847],{"class":64},[28,155889,30548],{"class":211},[28,155891,155892,155894,155896,155898,155900],{"class":30,"line":42},[28,155893,30466],{"class":38},[28,155895,45670],{"class":211},[28,155897,691],{"class":207},[28,155899,2115],{"class":38},[28,155901,218],{"class":211},[14,155903,155904],{},"常见错误：",[18,155906,155908],{"className":30429,"code":155907,"language":30431,"meta":23,"style":23},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[25,155909,155910,155923],{"__ignoreMap":23},[28,155911,155912,155914,155916,155918,155920],{"class":30,"line":31},[28,155913,215],{"class":38},[28,155915,212],{"class":211},[28,155917,155763],{"class":64},[28,155919,155712],{"class":211},[28,155921,155922],{"class":269},"# 错误\n",[28,155924,155925,155927,155929,155932,155935],{"class":30,"line":42},[28,155926,215],{"class":38},[28,155928,212],{"class":211},[28,155930,155931],{"class":64},"\"abc\"",[28,155933,155934],{"class":211},")    ",[28,155936,155922],{"class":269},[14,155938,155939],{},"正确写法：",[18,155941,155943],{"className":30429,"code":155942,"language":30431,"meta":23,"style":23},"num = float(\"3.14\")\n",[25,155944,155945],{"__ignoreMap":23},[28,155946,155947,155949,155951,155953,155955,155957],{"class":30,"line":31},[28,155948,155838],{"class":211},[28,155950,257],{"class":207},[28,155952,109848],{"class":38},[28,155954,212],{"class":211},[28,155956,155763],{"class":64},[28,155958,218],{"class":211},[149,155960,155962],{"id":155961},"_27-运算符","2.7 运算符",[177,155964,155966],{"id":155965},"_271-算术运算符","2.7.1 算术运算符",[347,155968,155969,155980],{},[350,155970,155971],{},[353,155972,155973,155976,155978],{},[356,155974,155975],{},"运算符",[356,155977,25920],{},[356,155979,27543],{},[394,155981,155982,155996,156010,156024,156038,156052,156066],{},[353,155983,155984,155988,155991],{},[399,155985,155986],{},[25,155987,691],{},[399,155989,155990],{},"加法",[399,155992,155993],{},[25,155994,155995],{},"1 + 2",[353,155997,155998,156002,156005],{},[399,155999,156000],{},[25,156001,742],{},[399,156003,156004],{},"减法",[399,156006,156007],{},[25,156008,156009],{},"5 - 3",[353,156011,156012,156016,156019],{},[399,156013,156014],{},[25,156015,665],{},[399,156017,156018],{},"乘法",[399,156020,156021],{},[25,156022,156023],{},"2 * 3",[353,156025,156026,156030,156033],{},[399,156027,156028],{},[25,156029,794],{},[399,156031,156032],{},"除法，结果是浮点数",[399,156034,156035],{},[25,156036,156037],{},"5 \u002F 2",[353,156039,156040,156044,156047],{},[399,156041,156042],{},[25,156043,33380],{},[399,156045,156046],{},"整除",[399,156048,156049],{},[25,156050,156051],{},"5 \u002F\u002F 2",[353,156053,156054,156058,156061],{},[399,156055,156056],{},[25,156057,538],{},[399,156059,156060],{},"取余",[399,156062,156063],{},[25,156064,156065],{},"5 % 2",[353,156067,156068,156072,156075],{},[399,156069,156070],{},[25,156071,10738],{},[399,156073,156074],{},"幂运算",[399,156076,156077],{},[25,156078,156079],{},"2 ** 3",[14,156081,15212],{},[18,156083,156085],{"className":30429,"code":156084,"language":30431,"meta":23,"style":23},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[25,156086,156087,156105,156122,156139],{"__ignoreMap":23},[28,156088,156089,156091,156093,156095,156098,156100,156102],{"class":30,"line":31},[28,156090,30466],{"class":38},[28,156092,212],{"class":211},[28,156094,529],{"class":38},[28,156096,156097],{"class":207}," \u002F",[28,156099,14832],{"class":38},[28,156101,155712],{"class":211},[28,156103,156104],{"class":269},"# 2.5\n",[28,156106,156107,156109,156111,156113,156116,156118,156120],{"class":30,"line":42},[28,156108,30466],{"class":38},[28,156110,212],{"class":211},[28,156112,529],{"class":38},[28,156114,156115],{"class":207}," \u002F\u002F",[28,156117,14832],{"class":38},[28,156119,45859],{"class":211},[28,156121,155715],{"class":269},[28,156123,156124,156126,156128,156130,156133,156135,156137],{"class":30,"line":50},[28,156125,30466],{"class":38},[28,156127,212],{"class":211},[28,156129,529],{"class":38},[28,156131,156132],{"class":207}," %",[28,156134,14832],{"class":38},[28,156136,155712],{"class":211},[28,156138,155732],{"class":269},[28,156140,156141,156143,156145,156147,156150,156152,156154],{"class":30,"line":58},[28,156142,30466],{"class":38},[28,156144,212],{"class":211},[28,156146,288],{"class":38},[28,156148,156149],{"class":207}," **",[28,156151,78121],{"class":38},[28,156153,45859],{"class":211},[28,156155,156156],{"class":269},"# 8\n",[177,156158,156160],{"id":156159},"_272-赋值运算符","2.7.2 赋值运算符",[18,156162,156164],{"className":30429,"code":156163,"language":30431,"meta":23,"style":23},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[25,156165,156166,156174,156182,156190,156198],{"__ignoreMap":23},[28,156167,156168,156170,156172],{"class":30,"line":31},[28,156169,155838],{"class":211},[28,156171,257],{"class":207},[28,156173,58479],{"class":38},[28,156175,156176,156178,156180],{"class":30,"line":42},[28,156177,155838],{"class":211},[28,156179,9554],{"class":207},[28,156181,54478],{"class":38},[28,156183,156184,156186,156188],{"class":30,"line":50},[28,156185,155838],{"class":211},[28,156187,150303],{"class":207},[28,156189,47774],{"class":38},[28,156191,156192,156194,156196],{"class":30,"line":58},[28,156193,155838],{"class":211},[28,156195,137199],{"class":207},[28,156197,120087],{"class":38},[28,156199,156200,156202,156205],{"class":30,"line":70},[28,156201,155838],{"class":211},[28,156203,156204],{"class":207},"\u002F=",[28,156206,47774],{"class":38},[14,156208,156209],{},"等价关系：",[18,156211,156213],{"className":30429,"code":156212,"language":30431,"meta":23,"style":23},"num += 1\nnum = num + 1\n",[25,156214,156215,156223],{"__ignoreMap":23},[28,156216,156217,156219,156221],{"class":30,"line":31},[28,156218,155838],{"class":211},[28,156220,9554],{"class":207},[28,156222,55750],{"class":38},[28,156224,156225,156227,156229,156232,156234],{"class":30,"line":42},[28,156226,155838],{"class":211},[28,156228,257],{"class":207},[28,156230,156231],{"class":211}," num ",[28,156233,691],{"class":207},[28,156235,55750],{"class":38},[14,156237,156238,156239,101069,156242,28436],{},"Python 没有 ",[25,156240,156241],{},"num++",[25,156243,156244],{},"num--",[177,156246,156248],{"id":156247},"_273-比较运算符","2.7.3 比较运算符",[14,156250,156251],{},"比较运算结果是布尔值。",[18,156253,156255],{"className":30429,"code":156254,"language":30431,"meta":23,"style":23},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[25,156256,156257,156271,156286,156300],{"__ignoreMap":23},[28,156258,156259,156261,156263,156265,156267,156269],{"class":30,"line":31},[28,156260,30466],{"class":38},[28,156262,212],{"class":211},[28,156264,656],{"class":38},[28,156266,26273],{"class":207},[28,156268,2225],{"class":38},[28,156270,218],{"class":211},[28,156272,156273,156275,156277,156279,156282,156284],{"class":30,"line":42},[28,156274,30466],{"class":38},[28,156276,212],{"class":211},[28,156278,656],{"class":38},[28,156280,156281],{"class":207}," >=",[28,156283,2115],{"class":38},[28,156285,218],{"class":211},[28,156287,156288,156290,156292,156294,156296,156298],{"class":30,"line":50},[28,156289,30466],{"class":38},[28,156291,212],{"class":211},[28,156293,656],{"class":38},[28,156295,101610],{"class":207},[28,156297,2160],{"class":38},[28,156299,218],{"class":211},[28,156301,156302,156304,156306,156308,156311,156313],{"class":30,"line":58},[28,156303,30466],{"class":38},[28,156305,212],{"class":211},[28,156307,656],{"class":38},[28,156309,156310],{"class":207}," !=",[28,156312,2160],{"class":38},[28,156314,218],{"class":211},[14,156316,156317,156318,156320,156321,28436],{},"注意：判断相等用 ",[25,156319,3026],{},"，赋值用 ",[25,156322,257],{},[18,156324,156326],{"className":30429,"code":156325,"language":30431,"meta":23,"style":23},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[25,156327,156328,156340],{"__ignoreMap":23},[28,156329,156330,156332,156334,156337],{"class":30,"line":31},[28,156331,146597],{"class":211},[28,156333,257],{"class":207},[28,156335,156336],{"class":38}," 18",[28,156338,156339],{"class":269},"       # 赋值\n",[28,156341,156342,156344,156346,156348],{"class":30,"line":42},[28,156343,146597],{"class":211},[28,156345,3026],{"class":207},[28,156347,156336],{"class":38},[28,156349,156350],{"class":269},"      # 判断是否相等\n",[177,156352,156354],{"id":156353},"_274-逻辑运算符","2.7.4 逻辑运算符",[347,156356,156357,156365],{},[350,156358,156359],{},[353,156360,156361,156363],{},[356,156362,155975],{},[356,156364,25920],{},[394,156366,156367,156376,156385],{},[353,156368,156369,156373],{},[399,156370,156371],{},[25,156372,30513],{},[399,156374,156375],{},"并且",[353,156377,156378,156382],{},[399,156379,156380],{},[25,156381,115141],{},[399,156383,156384],{},"或者",[353,156386,156387,156392],{},[399,156388,156389],{},[25,156390,156391],{},"not",[399,156393,156394],{},"取反",[18,156396,156398],{"className":30429,"code":156397,"language":30431,"meta":23,"style":23},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[25,156399,156400,156408,156417,156421,156436,156450],{"__ignoreMap":23},[28,156401,156402,156404,156406],{"class":30,"line":31},[28,156403,146597],{"class":211},[28,156405,257],{"class":207},[28,156407,88116],{"class":38},[28,156409,156410,156413,156415],{"class":30,"line":42},[28,156411,156412],{"class":211},"has_ticket ",[28,156414,257],{"class":207},[28,156416,153650],{"class":38},[28,156418,156419],{"class":30,"line":50},[28,156420,2477],{"emptyLinePlaceholder":134},[28,156422,156423,156425,156427,156429,156431,156433],{"class":30,"line":58},[28,156424,30466],{"class":38},[28,156426,155819],{"class":211},[28,156428,1788],{"class":207},[28,156430,156336],{"class":38},[28,156432,120480],{"class":207},[28,156434,156435],{"class":211}," has_ticket)\n",[28,156437,156438,156440,156442,156444,156446,156448],{"class":30,"line":70},[28,156439,30466],{"class":38},[28,156441,155819],{"class":211},[28,156443,1120],{"class":207},[28,156445,156336],{"class":38},[28,156447,114252],{"class":207},[28,156449,156435],{"class":211},[28,156451,156452,156454,156456,156458],{"class":30,"line":78},[28,156453,30466],{"class":38},[28,156455,212],{"class":211},[28,156457,156391],{"class":207},[28,156459,156435],{"class":211},[149,156461,156463],{"id":156462},"_28-字符串定义","2.8 字符串定义",[14,156465,156466],{},"三种常见写法：",[18,156468,156470],{"className":30429,"code":156469,"language":30431,"meta":23,"style":23},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[25,156471,156472,156482,156491,156501],{"__ignoreMap":23},[28,156473,156474,156477,156479],{"class":30,"line":31},[28,156475,156476],{"class":211},"name1 ",[28,156478,257],{"class":207},[28,156480,156481],{"class":64}," '小明'\n",[28,156483,156484,156487,156489],{"class":30,"line":42},[28,156485,156486],{"class":211},"name2 ",[28,156488,257],{"class":207},[28,156490,149404],{"class":64},[28,156492,156493,156496,156498],{"class":30,"line":50},[28,156494,156495],{"class":211},"text ",[28,156497,257],{"class":207},[28,156499,156500],{"class":64}," \"\"\"这是多行字符串\n",[28,156502,156503],{"class":30,"line":58},[28,156504,156505],{"class":64},"可以换行\"\"\"\n",[14,156507,156508],{},"字符串中包含引号：",[18,156510,156512],{"className":30429,"code":156511,"language":30431,"meta":23,"style":23},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[25,156513,156514,156524,156534],{"__ignoreMap":23},[28,156515,156516,156519,156521],{"class":30,"line":31},[28,156517,156518],{"class":211},"msg ",[28,156520,257],{"class":207},[28,156522,156523],{"class":64}," \"他说:'你好'\"\n",[28,156525,156526,156529,156531],{"class":30,"line":42},[28,156527,156528],{"class":211},"msg2 ",[28,156530,257],{"class":207},[28,156532,156533],{"class":64}," '他说:\"你好\"'\n",[28,156535,156536,156539,156541,156544,156547,156550,156552],{"class":30,"line":50},[28,156537,156538],{"class":211},"msg3 ",[28,156540,257],{"class":207},[28,156542,156543],{"class":64}," \"他说:",[28,156545,156546],{"class":38},"\\\"",[28,156548,156549],{"class":64},"你好",[28,156551,156546],{"class":38},[28,156553,25204],{"class":64},[14,156555,156556],{},"常见转义字符：",[347,156558,156559,156568],{},[350,156560,156561],{},[353,156562,156563,156566],{},[356,156564,156565],{},"写法",[356,156567,100751],{},[394,156569,156570,156580,156589,156599,156608],{},[353,156571,156572,156577],{},[399,156573,156574],{},[25,156575,156576],{},"\\n",[399,156578,156579],{},"换行",[353,156581,156582,156586],{},[399,156583,156584],{},[25,156585,1310],{},[399,156587,156588],{},"制表符",[353,156590,156591,156596],{},[399,156592,156593],{},[25,156594,156595],{},"\\\\",[399,156597,156598],{},"反斜杠",[353,156600,156601,156605],{},[399,156602,156603],{},[25,156604,156546],{},[399,156606,156607],{},"双引号",[353,156609,156610,156615],{},[399,156611,156612],{},[25,156613,156614],{},"\\'",[399,156616,156617],{},"单引号",[149,156619,156621],{"id":156620},"_29-字符串拼接","2.9 字符串拼接",[18,156623,156625],{"className":30429,"code":156624,"language":30431,"meta":23,"style":23},"name = \"小明\"\nprint(\"你好，\" + name)\n",[25,156626,156627,156635],{"__ignoreMap":23},[28,156628,156629,156631,156633],{"class":30,"line":31},[28,156630,146587],{"class":211},[28,156632,257],{"class":207},[28,156634,149404],{"class":64},[28,156636,156637,156639,156641,156644,156646],{"class":30,"line":42},[28,156638,30466],{"class":38},[28,156640,212],{"class":211},[28,156642,156643],{"class":64},"\"你好，\"",[28,156645,45617],{"class":207},[28,156647,156648],{"class":211}," name)\n",[14,156650,156651],{},"字符串只能和字符串拼接：",[18,156653,156655],{"className":30429,"code":156654,"language":30431,"meta":23,"style":23},"age = 18\nprint(\"年龄:\" + str(age))\n",[25,156656,156657,156665],{"__ignoreMap":23},[28,156658,156659,156661,156663],{"class":30,"line":31},[28,156660,146597],{"class":211},[28,156662,257],{"class":207},[28,156664,146602],{"class":38},[28,156666,156667,156669,156671,156673,156675,156677],{"class":30,"line":42},[28,156668,30466],{"class":38},[28,156670,212],{"class":211},[28,156672,146568],{"class":64},[28,156674,45617],{"class":207},[28,156676,73970],{"class":38},[28,156678,156679],{"class":211},"(age))\n",[14,156681,156682],{},"更推荐使用格式化字符串。",[149,156684,156686],{"id":156685},"_210-字符串格式化","2.10 字符串格式化",[177,156688,156690],{"id":156689},"_2101-百分号格式化","2.10.1 百分号格式化",[18,156692,156694],{"className":30429,"code":156693,"language":30431,"meta":23,"style":23},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[25,156695,156696,156704,156712,156721,156725],{"__ignoreMap":23},[28,156697,156698,156700,156702],{"class":30,"line":31},[28,156699,146587],{"class":211},[28,156701,257],{"class":207},[28,156703,149404],{"class":64},[28,156705,156706,156708,156710],{"class":30,"line":42},[28,156707,146597],{"class":211},[28,156709,257],{"class":207},[28,156711,146602],{"class":38},[28,156713,156714,156716,156718],{"class":30,"line":50},[28,156715,155409],{"class":211},[28,156717,257],{"class":207},[28,156719,156720],{"class":38}," 95.5\n",[28,156722,156723],{"class":30,"line":58},[28,156724,2477],{"emptyLinePlaceholder":134},[28,156726,156727,156729,156731,156734,156737,156740,156743,156746,156749,156751,156753],{"class":30,"line":70},[28,156728,30466],{"class":38},[28,156730,212],{"class":211},[28,156732,156733],{"class":64},"\"姓名:",[28,156735,156736],{"class":38},"%s",[28,156738,156739],{"class":64}," 年龄:",[28,156741,156742],{"class":38},"%d",[28,156744,156745],{"class":64}," 分数:",[28,156747,156748],{"class":38},"%.1f",[28,156750,461],{"class":64},[28,156752,156132],{"class":207},[28,156754,156755],{"class":211}," (name, age, score))\n",[14,156757,156758],{},"常用占位符：",[347,156760,156761,156770],{},[350,156762,156763],{},[353,156764,156765,156768],{},[356,156766,156767],{},"占位符",[356,156769,25920],{},[394,156771,156772,156780,156788],{},[353,156773,156774,156778],{},[399,156775,156776],{},[25,156777,156736],{},[399,156779,155275],{},[353,156781,156782,156786],{},[399,156783,156784],{},[25,156785,156742],{},[399,156787,155253],{},[353,156789,156790,156795],{},[399,156791,156792],{},[25,156793,156794],{},"%f",[399,156796,155264],{},[14,156798,156799],{},"精度控制：",[18,156801,156803],{"className":30429,"code":156802,"language":30431,"meta":23,"style":23},"price = 12.3456\nprint(\"%.2f\" % price)\n",[25,156804,156805,156814],{"__ignoreMap":23},[28,156806,156807,156809,156811],{"class":30,"line":31},[28,156808,146732],{"class":211},[28,156810,257],{"class":207},[28,156812,156813],{"class":38}," 12.3456\n",[28,156815,156816,156818,156820,156822,156825,156827,156829],{"class":30,"line":42},[28,156817,30466],{"class":38},[28,156819,212],{"class":211},[28,156821,461],{"class":64},[28,156823,156824],{"class":38},"%.2f",[28,156826,461],{"class":64},[28,156828,156132],{"class":207},[28,156830,156831],{"class":211}," price)\n",[177,156833,156835],{"id":156834},"_2102-format方法","2.10.2 format方法",[18,156837,156839],{"className":30429,"code":156838,"language":30431,"meta":23,"style":23},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[25,156840,156841,156849,156857,156861,156880,156900],{"__ignoreMap":23},[28,156842,156843,156845,156847],{"class":30,"line":31},[28,156844,146587],{"class":211},[28,156846,257],{"class":207},[28,156848,149404],{"class":64},[28,156850,156851,156853,156855],{"class":30,"line":42},[28,156852,146597],{"class":211},[28,156854,257],{"class":207},[28,156856,146602],{"class":38},[28,156858,156859],{"class":30,"line":50},[28,156860,2477],{"emptyLinePlaceholder":134},[28,156862,156863,156865,156867,156869,156871,156873,156875,156877],{"class":30,"line":58},[28,156864,30466],{"class":38},[28,156866,212],{"class":211},[28,156868,156733],{"class":64},[28,156870,32510],{"class":38},[28,156872,156739],{"class":64},[28,156874,32510],{"class":38},[28,156876,461],{"class":64},[28,156878,156879],{"class":211},".format(name, age))\n",[28,156881,156882,156884,156886,156888,156891,156893,156896,156898],{"class":30,"line":70},[28,156883,30466],{"class":38},[28,156885,212],{"class":211},[28,156887,156733],{"class":64},[28,156889,156890],{"class":38},"{0}",[28,156892,156739],{"class":64},[28,156894,156895],{"class":38},"{1}",[28,156897,461],{"class":64},[28,156899,156879],{"class":211},[28,156901,156902,156904,156906,156908,156911,156913,156916,156918,156921,156923,156925,156928,156930,156932],{"class":30,"line":78},[28,156903,30466],{"class":38},[28,156905,212],{"class":211},[28,156907,156733],{"class":64},[28,156909,156910],{"class":38},"{name}",[28,156912,156739],{"class":64},[28,156914,156915],{"class":38},"{age}",[28,156917,461],{"class":64},[28,156919,156920],{"class":211},".format(",[28,156922,79861],{"class":5293},[28,156924,257],{"class":207},[28,156926,156927],{"class":211},"name, ",[28,156929,70272],{"class":5293},[28,156931,257],{"class":207},[28,156933,156934],{"class":211},"age))\n",[177,156936,156938],{"id":156937},"_2103-f-string","2.10.3 f-string",[14,156940,156941],{},"推荐写法：",[18,156943,156945],{"className":30429,"code":156944,"language":30431,"meta":23,"style":23},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[25,156946,156947,156955,156963,156971,156975],{"__ignoreMap":23},[28,156948,156949,156951,156953],{"class":30,"line":31},[28,156950,146587],{"class":211},[28,156952,257],{"class":207},[28,156954,149404],{"class":64},[28,156956,156957,156959,156961],{"class":30,"line":42},[28,156958,146597],{"class":211},[28,156960,257],{"class":207},[28,156962,146602],{"class":38},[28,156964,156965,156967,156969],{"class":30,"line":50},[28,156966,155409],{"class":211},[28,156968,257],{"class":207},[28,156970,156720],{"class":38},[28,156972,156973],{"class":30,"line":58},[28,156974,2477],{"emptyLinePlaceholder":134},[28,156976,156977,156979,156981,156983,156985,156987,156989,156991,156993,156995,156997,156999,157001,157003,157006,157009,157011,157013],{"class":30,"line":70},[28,156978,30466],{"class":38},[28,156980,212],{"class":211},[28,156982,263],{"class":207},[28,156984,156733],{"class":64},[28,156986,1106],{"class":38},[28,156988,79861],{"class":211},[28,156990,1156],{"class":38},[28,156992,156739],{"class":64},[28,156994,1106],{"class":38},[28,156996,70272],{"class":211},[28,156998,1156],{"class":38},[28,157000,156745],{"class":64},[28,157002,1106],{"class":38},[28,157004,157005],{"class":211},"score",[28,157007,157008],{"class":207},":.1f",[28,157010,1156],{"class":38},[28,157012,461],{"class":64},[28,157014,218],{"class":211},[14,157016,157017],{},"表达式也可以放进去：",[18,157019,157021],{"className":30429,"code":157020,"language":30431,"meta":23,"style":23},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[25,157022,157023,157031,157039],{"__ignoreMap":23},[28,157024,157025,157027,157029],{"class":30,"line":31},[28,157026,146732],{"class":211},[28,157028,257],{"class":207},[28,157030,146737],{"class":38},[28,157032,157033,157035,157037],{"class":30,"line":42},[28,157034,146742],{"class":211},[28,157036,257],{"class":207},[28,157038,54478],{"class":38},[28,157040,157041,157043,157045,157047,157050,157052,157054,157056,157059,157061,157064],{"class":30,"line":50},[28,157042,30466],{"class":38},[28,157044,212],{"class":211},[28,157046,263],{"class":207},[28,157048,157049],{"class":64},"\"总价:",[28,157051,1106],{"class":38},[28,157053,146732],{"class":211},[28,157055,665],{"class":207},[28,157057,157058],{"class":211}," count",[28,157060,1156],{"class":38},[28,157062,157063],{"class":64},"元\"",[28,157065,218],{"class":211},[149,157067,157069],{"id":157068},"_211-input输入","2.11 input输入",[14,157071,157072,157075],{},[25,157073,157074],{},"input()"," 会暂停程序，等待用户输入。",[18,157077,157079],{"className":30429,"code":157078,"language":30431,"meta":23,"style":23},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[25,157080,157081,157095],{"__ignoreMap":23},[28,157082,157083,157085,157087,157089,157091,157093],{"class":30,"line":31},[28,157084,146587],{"class":211},[28,157086,257],{"class":207},[28,157088,60656],{"class":38},[28,157090,212],{"class":211},[28,157092,152430],{"class":64},[28,157094,218],{"class":211},[28,157096,157097,157099,157101,157103,157106,157108,157110,157112,157114],{"class":30,"line":42},[28,157098,30466],{"class":38},[28,157100,212],{"class":211},[28,157102,263],{"class":207},[28,157104,157105],{"class":64},"\"你好，",[28,157107,1106],{"class":38},[28,157109,79861],{"class":211},[28,157111,1156],{"class":38},[28,157113,461],{"class":64},[28,157115,218],{"class":211},[14,157117,157118],{},"输入整数：",[18,157120,157122],{"className":30429,"code":157121,"language":30431,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[25,157123,157124,157142],{"__ignoreMap":23},[28,157125,157126,157128,157130,157132,157134,157136,157138,157140],{"class":30,"line":31},[28,157127,146597],{"class":211},[28,157129,257],{"class":207},[28,157131,2459],{"class":38},[28,157133,212],{"class":211},[28,157135,53872],{"class":38},[28,157137,212],{"class":211},[28,157139,152445],{"class":64},[28,157141,30548],{"class":211},[28,157143,157144,157146,157148,157150,157153,157155,157157,157159,157162,157164],{"class":30,"line":42},[28,157145,30466],{"class":38},[28,157147,212],{"class":211},[28,157149,263],{"class":207},[28,157151,157152],{"class":64},"\"明年你",[28,157154,1106],{"class":38},[28,157156,146597],{"class":211},[28,157158,691],{"class":207},[28,157160,157161],{"class":38}," 1}",[28,157163,149455],{"class":64},[28,157165,218],{"class":211},[14,157167,157168],{},"输入小数：",[18,157170,157172],{"className":30429,"code":157171,"language":30431,"meta":23,"style":23},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[25,157173,157174,157193],{"__ignoreMap":23},[28,157175,157176,157178,157180,157182,157184,157186,157188,157191],{"class":30,"line":31},[28,157177,155382],{"class":211},[28,157179,257],{"class":207},[28,157181,109848],{"class":38},[28,157183,212],{"class":211},[28,157185,53872],{"class":38},[28,157187,212],{"class":211},[28,157189,157190],{"class":64},"\"请输入身高:\"",[28,157192,30548],{"class":211},[28,157194,157195,157197,157199,157201,157204,157206,157208,157211,157213,157216],{"class":30,"line":42},[28,157196,30466],{"class":38},[28,157198,212],{"class":211},[28,157200,263],{"class":207},[28,157202,157203],{"class":64},"\"身高:",[28,157205,1106],{"class":38},[28,157207,25052],{"class":211},[28,157209,157210],{"class":207},":.2f",[28,157212,1156],{"class":38},[28,157214,157215],{"class":64},"米\"",[28,157217,218],{"class":211},[149,157219,157221],{"id":157220},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157223,123343],{},[161,157225,157226,157229,157232,157235],{},[119,157227,157228],{},"输入商品单价。",[119,157230,157231],{},"输入购买数量。",[119,157233,157234],{},"输入折扣，例如 0.8 表示八折。",[119,157236,157237],{},"输出最终金额，保留两位小数。",[14,157239,10112],{},[18,157241,157243],{"className":30429,"code":157242,"language":30431,"meta":23,"style":23},"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",[25,157244,157245,157264,157283,157303,157307,157327,157331,157354,157375,157397],{"__ignoreMap":23},[28,157246,157247,157249,157251,157253,157255,157257,157259,157262],{"class":30,"line":31},[28,157248,146732],{"class":211},[28,157250,257],{"class":207},[28,157252,109848],{"class":38},[28,157254,212],{"class":211},[28,157256,53872],{"class":38},[28,157258,212],{"class":211},[28,157260,157261],{"class":64},"\"请输入商品单价:\"",[28,157263,30548],{"class":211},[28,157265,157266,157268,157270,157272,157274,157276,157278,157281],{"class":30,"line":42},[28,157267,146742],{"class":211},[28,157269,257],{"class":207},[28,157271,2459],{"class":38},[28,157273,212],{"class":211},[28,157275,53872],{"class":38},[28,157277,212],{"class":211},[28,157279,157280],{"class":64},"\"请输入购买数量:\"",[28,157282,30548],{"class":211},[28,157284,157285,157288,157290,157292,157294,157296,157298,157301],{"class":30,"line":50},[28,157286,157287],{"class":211},"discount ",[28,157289,257],{"class":207},[28,157291,109848],{"class":38},[28,157293,212],{"class":211},[28,157295,53872],{"class":38},[28,157297,212],{"class":211},[28,157299,157300],{"class":64},"\"请输入折扣:\"",[28,157302,30548],{"class":211},[28,157304,157305],{"class":30,"line":58},[28,157306,2477],{"emptyLinePlaceholder":134},[28,157308,157309,157312,157314,157317,157319,157322,157324],{"class":30,"line":70},[28,157310,157311],{"class":211},"total ",[28,157313,257],{"class":207},[28,157315,157316],{"class":211}," price ",[28,157318,665],{"class":207},[28,157320,157321],{"class":211}," count ",[28,157323,665],{"class":207},[28,157325,157326],{"class":211}," discount\n",[28,157328,157329],{"class":30,"line":78},[28,157330,2477],{"emptyLinePlaceholder":134},[28,157332,157333,157335,157337,157339,157342,157344,157346,157348,157350,157352],{"class":30,"line":86},[28,157334,30466],{"class":38},[28,157336,212],{"class":211},[28,157338,263],{"class":207},[28,157340,157341],{"class":64},"\"商品单价:",[28,157343,1106],{"class":38},[28,157345,79866],{"class":211},[28,157347,157210],{"class":207},[28,157349,1156],{"class":38},[28,157351,461],{"class":64},[28,157353,218],{"class":211},[28,157355,157356,157358,157360,157362,157365,157367,157369,157371,157373],{"class":30,"line":97},[28,157357,30466],{"class":38},[28,157359,212],{"class":211},[28,157361,263],{"class":207},[28,157363,157364],{"class":64},"\"购买数量:",[28,157366,1106],{"class":38},[28,157368,84485],{"class":211},[28,157370,1156],{"class":38},[28,157372,461],{"class":64},[28,157374,218],{"class":211},[28,157376,157377,157379,157381,157383,157386,157388,157391,157393,157395],{"class":30,"line":108},[28,157378,30466],{"class":38},[28,157380,212],{"class":211},[28,157382,263],{"class":207},[28,157384,157385],{"class":64},"\"折扣:",[28,157387,1106],{"class":38},[28,157389,157390],{"class":211},"discount",[28,157392,1156],{"class":38},[28,157394,461],{"class":64},[28,157396,218],{"class":211},[28,157398,157399,157401,157403,157405,157408,157410,157413,157415,157417,157419],{"class":30,"line":1407},[28,157400,30466],{"class":38},[28,157402,212],{"class":211},[28,157404,263],{"class":207},[28,157406,157407],{"class":64},"\"应付金额:",[28,157409,1106],{"class":38},[28,157411,157412],{"class":211},"total",[28,157414,157210],{"class":207},[28,157416,1156],{"class":38},[28,157418,157063],{"class":64},[28,157420,218],{"class":211},[149,157422,157424],{"id":157423},"_213-易错点","2.13 易错点",[161,157426,157427,157432,157438,157446,157449],{},[119,157428,157429,157431],{},[25,157430,157074],{}," 的结果是字符串，做运算前要转换。",[119,157433,157434,157435,28436],{},"字符串拼接时，数字要先 ",[25,157436,157437],{},"str()",[119,157439,157440,157442,157443,157445],{},[25,157441,257],{}," 是赋值，",[25,157444,3026],{}," 是比较。",[119,157447,157448],{},"Python 没有自增自减运算符。",[119,157450,157451],{},"浮点数计算可能有精度误差：",[18,157453,157455],{"className":30429,"code":157454,"language":30431,"meta":23,"style":23},"print(0.1 + 0.2)\n",[25,157456,157457],{"__ignoreMap":23},[28,157458,157459,157461,157463,157465,157467,157470],{"class":30,"line":31},[28,157460,30466],{"class":38},[28,157462,212],{"class":211},[28,157464,86261],{"class":38},[28,157466,45617],{"class":207},[28,157468,157469],{"class":38}," 0.2",[28,157471,218],{"class":211},[14,157473,157474,157475,157478],{},"金额计算如果要求严格，可以后续学习 ",[25,157476,157477],{},"decimal"," 模块。",[149,157480,157482],{"id":157481},"_214-本章练习","2.14 本章练习",[161,157484,157485,157488,157491,157494,157497],{},[119,157486,157487],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[119,157489,157490],{},"输入圆的半径，计算面积，保留两位小数。",[119,157492,157493],{},"输入工资和奖金，计算总收入。",[119,157495,157496],{},"输入摄氏温度，转换为华氏温度。",[119,157498,157499],{},"写一个 BMI 计算程序：",[18,157501,157504],{"className":157502,"code":157503,"language":5264,"meta":23},[5262],"BMI = 体重kg \u002F 身高m ** 2\n",[25,157505,157503],{"__ignoreMap":23},[126,157507,157508],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":157510},[157511,157512,157513,157514,157515,157516,157517,157523,157524,157525,157530,157531,157532,157533],{"id":155072,"depth":42,"text":155073},{"id":155181,"depth":42,"text":155182},{"id":155352,"depth":42,"text":155353},{"id":155429,"depth":42,"text":155430},{"id":50782,"depth":42,"text":50783},{"id":155735,"depth":42,"text":155736},{"id":155961,"depth":42,"text":155962,"children":157518},[157519,157520,157521,157522],{"id":155965,"depth":50,"text":155966},{"id":156159,"depth":50,"text":156160},{"id":156247,"depth":50,"text":156248},{"id":156353,"depth":50,"text":156354},{"id":156462,"depth":42,"text":156463},{"id":156620,"depth":42,"text":156621},{"id":156685,"depth":42,"text":156686,"children":157526},[157527,157528,157529],{"id":156689,"depth":50,"text":156690},{"id":156834,"depth":50,"text":156835},{"id":156937,"depth":50,"text":156938},{"id":157068,"depth":42,"text":157069},{"id":157220,"depth":42,"text":157221},{"id":157423,"depth":42,"text":157424},{"id":157481,"depth":42,"text":157482},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155064,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157540,"title":157541,"body":157542,"description":131,"extension":132,"meta":159178,"navigation":134,"path":159179,"seo":159180,"stem":159181,"__hash__":159182},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157543,"toc":159159},[157544,157547,157551,157554,157569,157572,157600,157604,157654,157656,157672,157675,157701,157704,157708,157775,157778,157794,157798,157801,157919,157922,157929,157978,157984,157988,157991,158104,158107,158111,158115,158118,158168,158172,158175,158225,158229,158232,158270,158274,158277,158323,158326,158361,158365,158370,158373,158419,158421,158488,158492,158498,158609,158618,158622,158624,158635,158637,158803,158807,158809,158823,158825,159039,159043,159062,159079,159082,159128,159132,159156],[10,157545,157541],{"id":157546},"_3-判断语句",[149,157548,157550],{"id":157549},"_31-布尔值","3.1 布尔值",[14,157552,157553],{},"判断语句依赖布尔值：",[18,157555,157557],{"className":30429,"code":157556,"language":30431,"meta":23,"style":23},"True\nFalse\n",[25,157558,157559,157564],{"__ignoreMap":23},[28,157560,157561],{"class":30,"line":31},[28,157562,157563],{"class":38},"True\n",[28,157565,157566],{"class":30,"line":42},[28,157567,157568],{"class":38},"False\n",[14,157570,157571],{},"比较表达式会产生布尔值：",[18,157573,157575],{"className":30429,"code":157574,"language":30431,"meta":23,"style":23},"age = 18\nprint(age >= 18)  # True\n",[25,157576,157577,157585],{"__ignoreMap":23},[28,157578,157579,157581,157583],{"class":30,"line":31},[28,157580,146597],{"class":211},[28,157582,257],{"class":207},[28,157584,146602],{"class":38},[28,157586,157587,157589,157591,157593,157595,157597],{"class":30,"line":42},[28,157588,30466],{"class":38},[28,157590,155819],{"class":211},[28,157592,1788],{"class":207},[28,157594,156336],{"class":38},[28,157596,45859],{"class":211},[28,157598,157599],{"class":269},"# True\n",[149,157601,157603],{"id":157602},"_32-if基础语法","3.2 if基础语法",[18,157605,157607],{"className":30429,"code":157606,"language":30431,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[25,157608,157609,157627,157631,157643],{"__ignoreMap":23},[28,157610,157611,157613,157615,157617,157619,157621,157623,157625],{"class":30,"line":31},[28,157612,146597],{"class":211},[28,157614,257],{"class":207},[28,157616,2459],{"class":38},[28,157618,212],{"class":211},[28,157620,53872],{"class":38},[28,157622,212],{"class":211},[28,157624,152445],{"class":64},[28,157626,30548],{"class":211},[28,157628,157629],{"class":30,"line":42},[28,157630,2477],{"emptyLinePlaceholder":134},[28,157632,157633,157635,157637,157639,157641],{"class":30,"line":50},[28,157634,1609],{"class":207},[28,157636,15784],{"class":211},[28,157638,1788],{"class":207},[28,157640,156336],{"class":38},[28,157642,3816],{"class":211},[28,157644,157645,157647,157649,157652],{"class":30,"line":58},[28,157646,31350],{"class":38},[28,157648,212],{"class":211},[28,157650,157651],{"class":64},"\"可以进入网吧\"",[28,157653,218],{"class":211},[14,157655,9102],{},[161,157657,157658,157663,157666,157669],{},[119,157659,157660,157662],{},[25,157661,1609],{}," 后面是条件表达式。",[119,157664,157665],{},"条件后面必须写冒号。",[119,157667,157668],{},"条件成立时执行缩进代码块。",[119,157670,157671],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157673,157674],{},"错误示例：",[18,157676,157678],{"className":30429,"code":157677,"language":30431,"meta":23,"style":23},"if age >= 18\n    print(\"可以进入\")\n",[25,157679,157680,157690],{"__ignoreMap":23},[28,157681,157682,157684,157686,157688],{"class":30,"line":31},[28,157683,1609],{"class":207},[28,157685,15784],{"class":211},[28,157687,1788],{"class":207},[28,157689,146602],{"class":38},[28,157691,157692,157694,157696,157699],{"class":30,"line":42},[28,157693,31350],{"class":38},[28,157695,212],{"class":211},[28,157697,157698],{"class":64},"\"可以进入\"",[28,157700,218],{"class":211},[14,157702,157703],{},"缺少冒号。",[149,157705,157707],{"id":157706},"_33-if-else","3.3 if else",[18,157709,157711],{"className":30429,"code":157710,"language":30431,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[25,157712,157713,157731,157735,157747,157758,157764],{"__ignoreMap":23},[28,157714,157715,157717,157719,157721,157723,157725,157727,157729],{"class":30,"line":31},[28,157716,146597],{"class":211},[28,157718,257],{"class":207},[28,157720,2459],{"class":38},[28,157722,212],{"class":211},[28,157724,53872],{"class":38},[28,157726,212],{"class":211},[28,157728,152445],{"class":64},[28,157730,30548],{"class":211},[28,157732,157733],{"class":30,"line":42},[28,157734,2477],{"emptyLinePlaceholder":134},[28,157736,157737,157739,157741,157743,157745],{"class":30,"line":50},[28,157738,1609],{"class":207},[28,157740,15784],{"class":211},[28,157742,1788],{"class":207},[28,157744,156336],{"class":38},[28,157746,3816],{"class":211},[28,157748,157749,157751,157753,157756],{"class":30,"line":58},[28,157750,31350],{"class":38},[28,157752,212],{"class":211},[28,157754,157755],{"class":64},"\"成年人\"",[28,157757,218],{"class":211},[28,157759,157760,157762],{"class":30,"line":70},[28,157761,1779],{"class":207},[28,157763,3816],{"class":211},[28,157765,157766,157768,157770,157773],{"class":30,"line":78},[28,157767,31350],{"class":38},[28,157769,212],{"class":211},[28,157771,157772],{"class":64},"\"未成年人\"",[28,157774,218],{"class":211},[14,157776,157777],{},"执行逻辑：",[161,157779,157780,157786,157791],{},[119,157781,157782,157783,157785],{},"条件成立，执行 ",[25,157784,1609],{}," 代码块。",[119,157787,157788,157789,157785],{},"条件不成立，执行 ",[25,157790,1779],{},[119,157792,157793],{},"两个代码块只会执行其中一个。",[149,157795,157797],{"id":157796},"_34-if-elif-else","3.4 if elif else",[14,157799,157800],{},"多条件判断：",[18,157802,157804],{"className":30429,"code":157803,"language":30431,"meta":23,"style":23},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[25,157805,157806,157824,157828,157842,157853,157867,157878,157891,157902,157908],{"__ignoreMap":23},[28,157807,157808,157810,157812,157814,157816,157818,157820,157822],{"class":30,"line":31},[28,157809,155409],{"class":211},[28,157811,257],{"class":207},[28,157813,2459],{"class":38},[28,157815,212],{"class":211},[28,157817,53872],{"class":38},[28,157819,212],{"class":211},[28,157821,152460],{"class":64},[28,157823,30548],{"class":211},[28,157825,157826],{"class":30,"line":42},[28,157827,2477],{"emptyLinePlaceholder":134},[28,157829,157830,157832,157835,157837,157840],{"class":30,"line":50},[28,157831,1609],{"class":207},[28,157833,157834],{"class":211}," score ",[28,157836,1788],{"class":207},[28,157838,157839],{"class":38}," 90",[28,157841,3816],{"class":211},[28,157843,157844,157846,157848,157851],{"class":30,"line":58},[28,157845,31350],{"class":38},[28,157847,212],{"class":211},[28,157849,157850],{"class":64},"\"优秀\"",[28,157852,218],{"class":211},[28,157854,157855,157858,157860,157862,157865],{"class":30,"line":70},[28,157856,157857],{"class":207},"elif",[28,157859,157834],{"class":211},[28,157861,1788],{"class":207},[28,157863,157864],{"class":38}," 80",[28,157866,3816],{"class":211},[28,157868,157869,157871,157873,157876],{"class":30,"line":78},[28,157870,31350],{"class":38},[28,157872,212],{"class":211},[28,157874,157875],{"class":64},"\"良好\"",[28,157877,218],{"class":211},[28,157879,157880,157882,157884,157886,157889],{"class":30,"line":86},[28,157881,157857],{"class":207},[28,157883,157834],{"class":211},[28,157885,1788],{"class":207},[28,157887,157888],{"class":38}," 60",[28,157890,3816],{"class":211},[28,157892,157893,157895,157897,157900],{"class":30,"line":97},[28,157894,31350],{"class":38},[28,157896,212],{"class":211},[28,157898,157899],{"class":64},"\"及格\"",[28,157901,218],{"class":211},[28,157903,157904,157906],{"class":30,"line":108},[28,157905,1779],{"class":207},[28,157907,3816],{"class":211},[28,157909,157910,157912,157914,157917],{"class":30,"line":1407},[28,157911,31350],{"class":38},[28,157913,212],{"class":211},[28,157915,157916],{"class":64},"\"不及格\"",[28,157918,218],{"class":211},[14,157920,157921],{},"注意判断顺序很重要。",[14,157923,157924,157925,157928],{},"如果把 ",[25,157926,157927],{},"score >= 60"," 放在最前面：",[18,157930,157932],{"className":30429,"code":157931,"language":30431,"meta":23,"style":23},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[25,157933,157934,157946,157956,157968],{"__ignoreMap":23},[28,157935,157936,157938,157940,157942,157944],{"class":30,"line":31},[28,157937,1609],{"class":207},[28,157939,157834],{"class":211},[28,157941,1788],{"class":207},[28,157943,157888],{"class":38},[28,157945,3816],{"class":211},[28,157947,157948,157950,157952,157954],{"class":30,"line":42},[28,157949,31350],{"class":38},[28,157951,212],{"class":211},[28,157953,157899],{"class":64},[28,157955,218],{"class":211},[28,157957,157958,157960,157962,157964,157966],{"class":30,"line":50},[28,157959,157857],{"class":207},[28,157961,157834],{"class":211},[28,157963,1788],{"class":207},[28,157965,157839],{"class":38},[28,157967,3816],{"class":211},[28,157969,157970,157972,157974,157976],{"class":30,"line":58},[28,157971,31350],{"class":38},[28,157973,212],{"class":211},[28,157975,157850],{"class":64},[28,157977,218],{"class":211},[14,157979,157980,157981,157983],{},"成绩 95 会先满足 ",[25,157982,157927],{},"，后面的优秀分支就不会执行。",[149,157985,157987],{"id":157986},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157989,157990],{},"嵌套判断就是在一个判断内部再写判断。",[18,157992,157994],{"className":30429,"code":157993,"language":30431,"meta":23,"style":23},"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",[25,157995,157996,158014,158029,158033,158045,158059,158069,158076,158087,158093],{"__ignoreMap":23},[28,157997,157998,158000,158002,158004,158006,158008,158010,158012],{"class":30,"line":31},[28,157999,146597],{"class":211},[28,158001,257],{"class":207},[28,158003,2459],{"class":38},[28,158005,212],{"class":211},[28,158007,53872],{"class":38},[28,158009,212],{"class":211},[28,158011,152445],{"class":64},[28,158013,30548],{"class":211},[28,158015,158016,158018,158020,158022,158024,158027],{"class":30,"line":42},[28,158017,156412],{"class":211},[28,158019,257],{"class":207},[28,158021,60656],{"class":38},[28,158023,212],{"class":211},[28,158025,158026],{"class":64},"\"是否有票(y\u002Fn):\"",[28,158028,218],{"class":211},[28,158030,158031],{"class":30,"line":50},[28,158032,2477],{"emptyLinePlaceholder":134},[28,158034,158035,158037,158039,158041,158043],{"class":30,"line":58},[28,158036,1609],{"class":207},[28,158038,15784],{"class":211},[28,158040,1788],{"class":207},[28,158042,156336],{"class":38},[28,158044,3816],{"class":211},[28,158046,158047,158049,158052,158054,158057],{"class":30,"line":70},[28,158048,3178],{"class":207},[28,158050,158051],{"class":211}," has_ticket ",[28,158053,3026],{"class":207},[28,158055,158056],{"class":64}," \"y\"",[28,158058,3816],{"class":211},[28,158060,158061,158063,158065,158067],{"class":30,"line":78},[28,158062,32502],{"class":38},[28,158064,212],{"class":211},[28,158066,157698],{"class":64},[28,158068,218],{"class":211},[28,158070,158071,158074],{"class":30,"line":86},[28,158072,158073],{"class":207},"    else",[28,158075,3816],{"class":211},[28,158077,158078,158080,158082,158085],{"class":30,"line":97},[28,158079,32502],{"class":38},[28,158081,212],{"class":211},[28,158083,158084],{"class":64},"\"请先买票\"",[28,158086,218],{"class":211},[28,158088,158089,158091],{"class":30,"line":108},[28,158090,1779],{"class":207},[28,158092,3816],{"class":211},[28,158094,158095,158097,158099,158102],{"class":30,"line":1407},[28,158096,31350],{"class":38},[28,158098,212],{"class":211},[28,158100,158101],{"class":64},"\"未成年人禁止进入\"",[28,158103,218],{"class":211},[14,158105,158106],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[149,158108,158110],{"id":158109},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[177,158112,158114],{"id":158113},"_361-and","3.6.1 and",[14,158116,158117],{},"两个条件都成立才成立。",[18,158119,158121],{"className":30429,"code":158120,"language":30431,"meta":23,"style":23},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[25,158122,158123,158131,158139,158143,158158],{"__ignoreMap":23},[28,158124,158125,158127,158129],{"class":30,"line":31},[28,158126,146597],{"class":211},[28,158128,257],{"class":207},[28,158130,88116],{"class":38},[28,158132,158133,158135,158137],{"class":30,"line":42},[28,158134,156412],{"class":211},[28,158136,257],{"class":207},[28,158138,153650],{"class":38},[28,158140,158141],{"class":30,"line":50},[28,158142,2477],{"emptyLinePlaceholder":134},[28,158144,158145,158147,158149,158151,158153,158155],{"class":30,"line":58},[28,158146,1609],{"class":207},[28,158148,15784],{"class":211},[28,158150,1788],{"class":207},[28,158152,156336],{"class":38},[28,158154,120480],{"class":207},[28,158156,158157],{"class":211}," has_ticket:\n",[28,158159,158160,158162,158164,158166],{"class":30,"line":70},[28,158161,31350],{"class":38},[28,158163,212],{"class":211},[28,158165,157698],{"class":64},[28,158167,218],{"class":211},[177,158169,158171],{"id":158170},"_362-or","3.6.2 or",[14,158173,158174],{},"只要一个条件成立就成立。",[18,158176,158178],{"className":30429,"code":158177,"language":30431,"meta":23,"style":23},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[25,158179,158180,158189,158198,158202,158214],{"__ignoreMap":23},[28,158181,158182,158185,158187],{"class":30,"line":31},[28,158183,158184],{"class":211},"is_vip ",[28,158186,257],{"class":207},[28,158188,125858],{"class":38},[28,158190,158191,158194,158196],{"class":30,"line":42},[28,158192,158193],{"class":211},"coupon ",[28,158195,257],{"class":207},[28,158197,153650],{"class":38},[28,158199,158200],{"class":30,"line":50},[28,158201,2477],{"emptyLinePlaceholder":134},[28,158203,158204,158206,158209,158211],{"class":30,"line":58},[28,158205,1609],{"class":207},[28,158207,158208],{"class":211}," is_vip ",[28,158210,115141],{"class":207},[28,158212,158213],{"class":211}," coupon:\n",[28,158215,158216,158218,158220,158223],{"class":30,"line":70},[28,158217,31350],{"class":38},[28,158219,212],{"class":211},[28,158221,158222],{"class":64},"\"可以享受优惠\"",[28,158224,218],{"class":211},[177,158226,158228],{"id":158227},"_363-not","3.6.3 not",[14,158230,158231],{},"取反。",[18,158233,158235],{"className":30429,"code":158234,"language":30431,"meta":23,"style":23},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[25,158236,158237,158246,158250,158259],{"__ignoreMap":23},[28,158238,158239,158242,158244],{"class":30,"line":31},[28,158240,158241],{"class":211},"is_closed ",[28,158243,257],{"class":207},[28,158245,125858],{"class":38},[28,158247,158248],{"class":30,"line":42},[28,158249,2477],{"emptyLinePlaceholder":134},[28,158251,158252,158254,158256],{"class":30,"line":50},[28,158253,1609],{"class":207},[28,158255,38981],{"class":207},[28,158257,158258],{"class":211}," is_closed:\n",[28,158260,158261,158263,158265,158268],{"class":30,"line":58},[28,158262,31350],{"class":38},[28,158264,212],{"class":211},[28,158266,158267],{"class":64},"\"店铺营业中\"",[28,158269,218],{"class":211},[149,158271,158273],{"id":158272},"_37-链式比较","3.7 链式比较",[14,158275,158276],{},"Python 支持链式比较：",[18,158278,158280],{"className":30429,"code":158279,"language":30431,"meta":23,"style":23},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[25,158281,158282,158291,158295,158312],{"__ignoreMap":23},[28,158283,158284,158286,158288],{"class":30,"line":31},[28,158285,155409],{"class":211},[28,158287,257],{"class":207},[28,158289,158290],{"class":38}," 85\n",[28,158292,158293],{"class":30,"line":42},[28,158294,2477],{"emptyLinePlaceholder":134},[28,158296,158297,158299,158301,158304,158306,158308,158310],{"class":30,"line":50},[28,158298,1609],{"class":207},[28,158300,4170],{"class":38},[28,158302,158303],{"class":207}," \u003C=",[28,158305,157834],{"class":211},[28,158307,1666],{"class":207},[28,158309,5831],{"class":38},[28,158311,3816],{"class":211},[28,158313,158314,158316,158318,158321],{"class":30,"line":58},[28,158315,31350],{"class":38},[28,158317,212],{"class":211},[28,158319,158320],{"class":64},"\"成绩合法\"",[28,158322,218],{"class":211},[14,158324,158325],{},"等价于：",[18,158327,158329],{"className":30429,"code":158328,"language":30431,"meta":23,"style":23},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[25,158330,158331,158351],{"__ignoreMap":23},[28,158332,158333,158335,158337,158339,158341,158343,158345,158347,158349],{"class":30,"line":31},[28,158334,1609],{"class":207},[28,158336,157834],{"class":211},[28,158338,1788],{"class":207},[28,158340,4170],{"class":38},[28,158342,120480],{"class":207},[28,158344,157834],{"class":211},[28,158346,1666],{"class":207},[28,158348,5831],{"class":38},[28,158350,3816],{"class":211},[28,158352,158353,158355,158357,158359],{"class":30,"line":42},[28,158354,31350],{"class":38},[28,158356,212],{"class":211},[28,158358,158320],{"class":64},[28,158360,218],{"class":211},[149,158362,158364],{"id":158363},"_38-真值和假值","3.8 真值和假值",[14,158366,116518,158367,158369],{},[25,158368,1609],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158371,158372],{},"假值：",[18,158374,158376],{"className":30429,"code":158375,"language":30431,"meta":23,"style":23},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[25,158377,158378,158382,158387,158391,158395,158400,158404,158408,158413],{"__ignoreMap":23},[28,158379,158380],{"class":30,"line":31},[28,158381,157568],{"class":38},[28,158383,158384],{"class":30,"line":42},[28,158385,158386],{"class":38},"None\n",[28,158388,158389],{"class":30,"line":50},[28,158390,3162],{"class":38},[28,158392,158393],{"class":30,"line":58},[28,158394,32393],{"class":38},[28,158396,158397],{"class":30,"line":70},[28,158398,158399],{"class":64},"\"\"\n",[28,158401,158402],{"class":30,"line":78},[28,158403,32408],{"class":211},[28,158405,158406],{"class":30,"line":86},[28,158407,2053],{"class":211},[28,158409,158410],{"class":30,"line":97},[28,158411,158412],{"class":211},"{}\n",[28,158414,158415,158417],{"class":30,"line":108},[28,158416,155341],{"class":38},[28,158418,2053],{"class":211},[14,158420,15212],{},[18,158422,158424],{"className":30429,"code":158423,"language":30431,"meta":23,"style":23},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[25,158425,158426,158440,158444,158451,158471,158477],{"__ignoreMap":23},[28,158427,158428,158430,158432,158434,158436,158438],{"class":30,"line":31},[28,158429,146587],{"class":211},[28,158431,257],{"class":207},[28,158433,60656],{"class":38},[28,158435,212],{"class":211},[28,158437,152430],{"class":64},[28,158439,218],{"class":211},[28,158441,158442],{"class":30,"line":42},[28,158443,2477],{"emptyLinePlaceholder":134},[28,158445,158446,158448],{"class":30,"line":50},[28,158447,1609],{"class":207},[28,158449,158450],{"class":211}," name:\n",[28,158452,158453,158455,158457,158459,158461,158463,158465,158467,158469],{"class":30,"line":58},[28,158454,31350],{"class":38},[28,158456,212],{"class":211},[28,158458,263],{"class":207},[28,158460,157105],{"class":64},[28,158462,1106],{"class":38},[28,158464,79861],{"class":211},[28,158466,1156],{"class":38},[28,158468,461],{"class":64},[28,158470,218],{"class":211},[28,158472,158473,158475],{"class":30,"line":70},[28,158474,1779],{"class":207},[28,158476,3816],{"class":211},[28,158478,158479,158481,158483,158486],{"class":30,"line":78},[28,158480,31350],{"class":38},[28,158482,212],{"class":211},[28,158484,158485],{"class":64},"\"姓名不能为空\"",[28,158487,218],{"class":211},[149,158489,158491],{"id":158490},"_39-match语句","3.9 match语句",[14,158493,158494,158495,158497],{},"Python 3.10 开始支持 ",[25,158496,71316],{},"。它适合处理固定选项。",[18,158499,158501],{"className":30429,"code":158500,"language":30431,"meta":23,"style":23},"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",[25,158502,158503,158519,158523,158530,158540,158551,158560,158571,158580,158591,158598],{"__ignoreMap":23},[28,158504,158505,158508,158510,158512,158514,158517],{"class":30,"line":31},[28,158506,158507],{"class":211},"command ",[28,158509,257],{"class":207},[28,158511,60656],{"class":38},[28,158513,212],{"class":211},[28,158515,158516],{"class":64},"\"请输入命令:\"",[28,158518,218],{"class":211},[28,158520,158521],{"class":30,"line":42},[28,158522,2477],{"emptyLinePlaceholder":134},[28,158524,158525,158527],{"class":30,"line":50},[28,158526,71316],{"class":207},[28,158528,158529],{"class":211}," command:\n",[28,158531,158532,158535,158538],{"class":30,"line":58},[28,158533,158534],{"class":207},"    case",[28,158536,158537],{"class":64}," \"start\"",[28,158539,3816],{"class":211},[28,158541,158542,158544,158546,158549],{"class":30,"line":70},[28,158543,32502],{"class":38},[28,158545,212],{"class":211},[28,158547,158548],{"class":64},"\"启动\"",[28,158550,218],{"class":211},[28,158552,158553,158555,158558],{"class":30,"line":78},[28,158554,158534],{"class":207},[28,158556,158557],{"class":64}," \"stop\"",[28,158559,3816],{"class":211},[28,158561,158562,158564,158566,158569],{"class":30,"line":86},[28,158563,32502],{"class":38},[28,158565,212],{"class":211},[28,158567,158568],{"class":64},"\"停止\"",[28,158570,218],{"class":211},[28,158572,158573,158575,158578],{"class":30,"line":97},[28,158574,158534],{"class":207},[28,158576,158577],{"class":64}," \"restart\"",[28,158579,3816],{"class":211},[28,158581,158582,158584,158586,158589],{"class":30,"line":108},[28,158583,32502],{"class":38},[28,158585,212],{"class":211},[28,158587,158588],{"class":64},"\"重启\"",[28,158590,218],{"class":211},[28,158592,158593,158595],{"class":30,"line":1407},[28,158594,158534],{"class":207},[28,158596,158597],{"class":211}," _:\n",[28,158599,158600,158602,158604,158607],{"class":30,"line":1690},[28,158601,32502],{"class":38},[28,158603,212],{"class":211},[28,158605,158606],{"class":64},"\"未知命令\"",[28,158608,218],{"class":211},[14,158610,158611,158612,158614,158615,158617],{},"入门阶段掌握 ",[25,158613,154709],{}," 更重要，",[25,158616,71316],{}," 可以作为补充。",[149,158619,158621],{"id":158620},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158623,123343],{},[161,158625,158626,158629,158632],{},[119,158627,158628],{},"输入成绩。",[119,158630,158631],{},"判断成绩是否合法。",[119,158633,158634],{},"输出等级。",[14,158636,10112],{},[18,158638,158640],{"className":30429,"code":158639,"language":30431,"meta":23,"style":23},"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",[25,158641,158642,158660,158664,158682,158693,158705,158716,158728,158739,158752,158763,158775,158786,158792],{"__ignoreMap":23},[28,158643,158644,158646,158648,158650,158652,158654,158656,158658],{"class":30,"line":31},[28,158645,155409],{"class":211},[28,158647,257],{"class":207},[28,158649,109848],{"class":38},[28,158651,212],{"class":211},[28,158653,53872],{"class":38},[28,158655,212],{"class":211},[28,158657,152460],{"class":64},[28,158659,30548],{"class":211},[28,158661,158662],{"class":30,"line":42},[28,158663,2477],{"emptyLinePlaceholder":134},[28,158665,158666,158668,158670,158672,158674,158676,158678,158680],{"class":30,"line":50},[28,158667,1609],{"class":207},[28,158669,38981],{"class":207},[28,158671,4170],{"class":38},[28,158673,158303],{"class":207},[28,158675,157834],{"class":211},[28,158677,1666],{"class":207},[28,158679,5831],{"class":38},[28,158681,3816],{"class":211},[28,158683,158684,158686,158688,158691],{"class":30,"line":58},[28,158685,31350],{"class":38},[28,158687,212],{"class":211},[28,158689,158690],{"class":64},"\"成绩不合法\"",[28,158692,218],{"class":211},[28,158694,158695,158697,158699,158701,158703],{"class":30,"line":70},[28,158696,157857],{"class":207},[28,158698,157834],{"class":211},[28,158700,1788],{"class":207},[28,158702,157839],{"class":38},[28,158704,3816],{"class":211},[28,158706,158707,158709,158711,158714],{"class":30,"line":78},[28,158708,31350],{"class":38},[28,158710,212],{"class":211},[28,158712,158713],{"class":64},"\"等级:A\"",[28,158715,218],{"class":211},[28,158717,158718,158720,158722,158724,158726],{"class":30,"line":86},[28,158719,157857],{"class":207},[28,158721,157834],{"class":211},[28,158723,1788],{"class":207},[28,158725,157864],{"class":38},[28,158727,3816],{"class":211},[28,158729,158730,158732,158734,158737],{"class":30,"line":97},[28,158731,31350],{"class":38},[28,158733,212],{"class":211},[28,158735,158736],{"class":64},"\"等级:B\"",[28,158738,218],{"class":211},[28,158740,158741,158743,158745,158747,158750],{"class":30,"line":108},[28,158742,157857],{"class":207},[28,158744,157834],{"class":211},[28,158746,1788],{"class":207},[28,158748,158749],{"class":38}," 70",[28,158751,3816],{"class":211},[28,158753,158754,158756,158758,158761],{"class":30,"line":1407},[28,158755,31350],{"class":38},[28,158757,212],{"class":211},[28,158759,158760],{"class":64},"\"等级:C\"",[28,158762,218],{"class":211},[28,158764,158765,158767,158769,158771,158773],{"class":30,"line":1690},[28,158766,157857],{"class":207},[28,158768,157834],{"class":211},[28,158770,1788],{"class":207},[28,158772,157888],{"class":38},[28,158774,3816],{"class":211},[28,158776,158777,158779,158781,158784],{"class":30,"line":1695},[28,158778,31350],{"class":38},[28,158780,212],{"class":211},[28,158782,158783],{"class":64},"\"等级:D\"",[28,158785,218],{"class":211},[28,158787,158788,158790],{"class":30,"line":1701},[28,158789,1779],{"class":207},[28,158791,3816],{"class":211},[28,158793,158794,158796,158798,158801],{"class":30,"line":1706},[28,158795,31350],{"class":38},[28,158797,212],{"class":211},[28,158799,158800],{"class":64},"\"等级:E\"",[28,158802,218],{"class":211},[149,158804,158806],{"id":158805},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158808,123343],{},[161,158810,158811,158814,158817,158820],{},[119,158812,158813],{},"输入消费金额。",[119,158815,158816],{},"输入会员等级，普通、银卡、金卡。",[119,158818,158819],{},"普通不打折，银卡 9 折，金卡 8 折。",[119,158821,158822],{},"满 500 再减 50。",[14,158824,10112],{},[18,158826,158828],{"className":30429,"code":158827,"language":30431,"meta":23,"style":23},"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",[25,158829,158830,158850,158866,158870,158878,158882,158896,158906,158919,158928,158941,158949,158955,158966,158970,158984,158988,159002,159012,159016],{"__ignoreMap":23},[28,158831,158832,158835,158837,158839,158841,158843,158845,158848],{"class":30,"line":31},[28,158833,158834],{"class":211},"amount ",[28,158836,257],{"class":207},[28,158838,109848],{"class":38},[28,158840,212],{"class":211},[28,158842,53872],{"class":38},[28,158844,212],{"class":211},[28,158846,158847],{"class":64},"\"请输入消费金额:\"",[28,158849,30548],{"class":211},[28,158851,158852,158855,158857,158859,158861,158864],{"class":30,"line":42},[28,158853,158854],{"class":211},"level ",[28,158856,257],{"class":207},[28,158858,60656],{"class":38},[28,158860,212],{"class":211},[28,158862,158863],{"class":64},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[28,158865,218],{"class":211},[28,158867,158868],{"class":30,"line":50},[28,158869,2477],{"emptyLinePlaceholder":134},[28,158871,158872,158874,158876],{"class":30,"line":58},[28,158873,157287],{"class":211},[28,158875,257],{"class":207},[28,158877,55750],{"class":38},[28,158879,158880],{"class":30,"line":70},[28,158881,2477],{"emptyLinePlaceholder":134},[28,158883,158884,158886,158889,158891,158894],{"class":30,"line":78},[28,158885,1609],{"class":207},[28,158887,158888],{"class":211}," level ",[28,158890,3026],{"class":207},[28,158892,158893],{"class":64}," \"银卡\"",[28,158895,3816],{"class":211},[28,158897,158898,158901,158903],{"class":30,"line":86},[28,158899,158900],{"class":211},"    discount ",[28,158902,257],{"class":207},[28,158904,158905],{"class":38}," 0.9\n",[28,158907,158908,158910,158912,158914,158917],{"class":30,"line":97},[28,158909,157857],{"class":207},[28,158911,158888],{"class":211},[28,158913,3026],{"class":207},[28,158915,158916],{"class":64}," \"金卡\"",[28,158918,3816],{"class":211},[28,158920,158921,158923,158925],{"class":30,"line":108},[28,158922,158900],{"class":211},[28,158924,257],{"class":207},[28,158926,158927],{"class":38}," 0.8\n",[28,158929,158930,158932,158934,158936,158939],{"class":30,"line":1407},[28,158931,157857],{"class":207},[28,158933,158888],{"class":211},[28,158935,3026],{"class":207},[28,158937,158938],{"class":64}," \"普通\"",[28,158940,3816],{"class":211},[28,158942,158943,158945,158947],{"class":30,"line":1690},[28,158944,158900],{"class":211},[28,158946,257],{"class":207},[28,158948,55750],{"class":38},[28,158950,158951,158953],{"class":30,"line":1695},[28,158952,1779],{"class":207},[28,158954,3816],{"class":211},[28,158956,158957,158959,158961,158964],{"class":30,"line":1701},[28,158958,31350],{"class":38},[28,158960,212],{"class":211},[28,158962,158963],{"class":64},"\"会员等级输入错误，按普通会员计算\"",[28,158965,218],{"class":211},[28,158967,158968],{"class":30,"line":1706},[28,158969,2477],{"emptyLinePlaceholder":134},[28,158971,158972,158975,158977,158980,158982],{"class":30,"line":1720},[28,158973,158974],{"class":211},"pay ",[28,158976,257],{"class":207},[28,158978,158979],{"class":211}," amount ",[28,158981,665],{"class":207},[28,158983,157326],{"class":211},[28,158985,158986],{"class":30,"line":1725},[28,158987,2477],{"emptyLinePlaceholder":134},[28,158989,158990,158992,158995,158997,159000],{"class":30,"line":1731},[28,158991,1609],{"class":207},[28,158993,158994],{"class":211}," pay ",[28,158996,1788],{"class":207},[28,158998,158999],{"class":38}," 500",[28,159001,3816],{"class":211},[28,159003,159004,159007,159009],{"class":30,"line":1752},[28,159005,159006],{"class":211},"    pay ",[28,159008,150303],{"class":207},[28,159010,159011],{"class":38}," 50\n",[28,159013,159014],{"class":30,"line":1757},[28,159015,2477],{"emptyLinePlaceholder":134},[28,159017,159018,159020,159022,159024,159026,159028,159031,159033,159035,159037],{"class":30,"line":1771},[28,159019,30466],{"class":38},[28,159021,212],{"class":211},[28,159023,263],{"class":207},[28,159025,157407],{"class":64},[28,159027,1106],{"class":38},[28,159029,159030],{"class":211},"pay",[28,159032,157210],{"class":207},[28,159034,1156],{"class":38},[28,159036,157063],{"class":64},[28,159038,218],{"class":211},[149,159040,159042],{"id":159041},"_312-易错点","3.12 易错点",[161,159044,159045,159048,159051,159054,159059],{},[119,159046,159047],{},"冒号不能漏。",[119,159049,159050],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[119,159052,159053],{},"多分支判断要注意顺序。",[119,159055,159056,159057,28436],{},"判断相等用 ",[25,159058,3026],{},[119,159060,159061],{},"字符串比较区分大小写：",[18,159063,159065],{"className":30429,"code":159064,"language":30431,"meta":23,"style":23},"\"Y\" == \"y\"  # False\n",[25,159066,159067],{"__ignoreMap":23},[28,159068,159069,159072,159074,159076],{"class":30,"line":31},[28,159070,159071],{"class":64},"\"Y\"",[28,159073,101610],{"class":207},[28,159075,158056],{"class":64},[28,159077,159078],{"class":269},"  # False\n",[14,159080,159081],{},"可转换后再判断：",[18,159083,159085],{"className":30429,"code":159084,"language":30431,"meta":23,"style":23},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[25,159086,159087,159104,159117],{"__ignoreMap":23},[28,159088,159089,159092,159094,159096,159098,159101],{"class":30,"line":31},[28,159090,159091],{"class":211},"answer ",[28,159093,257],{"class":207},[28,159095,60656],{"class":38},[28,159097,212],{"class":211},[28,159099,159100],{"class":64},"\"是否继续(y\u002Fn):\"",[28,159102,159103],{"class":211},").lower()\n",[28,159105,159106,159108,159111,159113,159115],{"class":30,"line":42},[28,159107,1609],{"class":207},[28,159109,159110],{"class":211}," answer ",[28,159112,3026],{"class":207},[28,159114,158056],{"class":64},[28,159116,3816],{"class":211},[28,159118,159119,159121,159123,159126],{"class":30,"line":50},[28,159120,31350],{"class":38},[28,159122,212],{"class":211},[28,159124,159125],{"class":64},"\"继续\"",[28,159127,218],{"class":211},[149,159129,159131],{"id":159130},"_313-本章练习","3.13 本章练习",[161,159133,159134,159137,159140,159143,159153],{},[119,159135,159136],{},"输入年龄，判断是否成年。",[119,159138,159139],{},"输入年份，判断是否为闰年。",[119,159141,159142],{},"输入三个数字，输出最大值。",[119,159144,159145,159146,159149,159150,159152],{},"写登录判断：用户名是 ",[25,159147,159148],{},"admin"," 且密码是 ",[25,159151,15161],{}," 才登录成功。",[119,159154,159155],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[126,159157,159158],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":23,"searchDepth":42,"depth":42,"links":159160},[159161,159162,159163,159164,159165,159166,159171,159172,159173,159174,159175,159176,159177],{"id":157549,"depth":42,"text":157550},{"id":157602,"depth":42,"text":157603},{"id":157706,"depth":42,"text":157707},{"id":157796,"depth":42,"text":157797},{"id":157986,"depth":42,"text":157987},{"id":158109,"depth":42,"text":158110,"children":159167},[159168,159169,159170],{"id":158113,"depth":50,"text":158114},{"id":158170,"depth":50,"text":158171},{"id":158227,"depth":50,"text":158228},{"id":158272,"depth":42,"text":158273},{"id":158363,"depth":42,"text":158364},{"id":158490,"depth":42,"text":158491},{"id":158620,"depth":42,"text":158621},{"id":158805,"depth":42,"text":158806},{"id":159041,"depth":42,"text":159042},{"id":159130,"depth":42,"text":159131},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157541,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159184,"title":159185,"body":159186,"description":131,"extension":132,"meta":160955,"navigation":134,"path":160956,"seo":160957,"stem":160958,"__hash__":160959},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159187,"toc":160935},[159188,159191,159195,159201,159204,159221,159225,159227,159244,159246,159291,159293,159310,159314,159317,159383,159386,159404,159408,159569,159578,159582,159586,159591,159638,159640,159646,159650,159655,159702,159704,159710,159714,159719,159755,159758,159805,159809,159815,159873,159878,159909,159914,159918,159973,159976,160048,160051,160110,160114,160117,160192,160195,160199,160305,160308,160334,160338,160350,160419,160422,160514,160518,160520,160531,160533,160663,160667,160869,160877,160881,160911,160915,160932],[10,159189,159185],{"id":159190},"_4-循环语句",[149,159192,159194],{"id":159193},"_41-为什么需要循环","4.1 为什么需要循环",[14,159196,159197,159198,159200],{},"如果要输出 1 到 100，不应该写 100 行 ",[25,159199,146523],{},"，而应该用循环。",[14,159202,159203],{},"循环适合处理重复任务：",[161,159205,159206,159209,159212,159215,159218],{},[119,159207,159208],{},"重复输出。",[119,159210,159211],{},"重复输入。",[119,159213,159214],{},"遍历数据。",[119,159216,159217],{},"持续执行菜单。",[119,159219,159220],{},"批量处理文件或数据。",[149,159222,159224],{"id":159223},"_42-while循环","4.2 while循环",[14,159226,5258],{},[18,159228,159230],{"className":30429,"code":159229,"language":30431,"meta":23,"style":23},"while 条件:\n    循环体\n",[25,159231,159232,159239],{"__ignoreMap":23},[28,159233,159234,159236],{"class":30,"line":31},[28,159235,108714],{"class":207},[28,159237,159238],{"class":211}," 条件:\n",[28,159240,159241],{"class":30,"line":42},[28,159242,159243],{"class":211},"    循环体\n",[14,159245,15212],{},[18,159247,159249],{"className":30429,"code":159248,"language":30431,"meta":23,"style":23},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[25,159250,159251,159259,159263,159275,159282],{"__ignoreMap":23},[28,159252,159253,159255,159257],{"class":30,"line":31},[28,159254,100199],{"class":211},[28,159256,257],{"class":207},[28,159258,55750],{"class":38},[28,159260,159261],{"class":30,"line":42},[28,159262,2477],{"emptyLinePlaceholder":134},[28,159264,159265,159267,159269,159271,159273],{"class":30,"line":50},[28,159266,108714],{"class":207},[28,159268,9515],{"class":211},[28,159270,1666],{"class":207},[28,159272,2225],{"class":38},[28,159274,3816],{"class":211},[28,159276,159277,159279],{"class":30,"line":58},[28,159278,31350],{"class":38},[28,159280,159281],{"class":211},"(i)\n",[28,159283,159284,159287,159289],{"class":30,"line":70},[28,159285,159286],{"class":211},"    i ",[28,159288,9554],{"class":207},[28,159290,55750],{"class":38},[14,159292,80980],{},[161,159294,159295,159301,159304,159307],{},[119,159296,159297,159298,28436],{},"判断条件 ",[25,159299,159300],{},"i \u003C= 5",[119,159302,159303],{},"条件成立，执行循环体。",[119,159305,159306],{},"执行完后回到条件判断。",[119,159308,159309],{},"条件不成立，退出循环。",[149,159311,159313],{"id":159312},"_43-while累加","4.3 while累加",[14,159315,159316],{},"计算 1 到 100 的和：",[18,159318,159320],{"className":30429,"code":159319,"language":30431,"meta":23,"style":23},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[25,159321,159322,159330,159338,159342,159354,159364,159372,159376],{"__ignoreMap":23},[28,159323,159324,159326,159328],{"class":30,"line":31},[28,159325,100199],{"class":211},[28,159327,257],{"class":207},[28,159329,55750],{"class":38},[28,159331,159332,159334,159336],{"class":30,"line":42},[28,159333,157311],{"class":211},[28,159335,257],{"class":207},[28,159337,47384],{"class":38},[28,159339,159340],{"class":30,"line":50},[28,159341,2477],{"emptyLinePlaceholder":134},[28,159343,159344,159346,159348,159350,159352],{"class":30,"line":58},[28,159345,108714],{"class":207},[28,159347,9515],{"class":211},[28,159349,1666],{"class":207},[28,159351,5831],{"class":38},[28,159353,3816],{"class":211},[28,159355,159356,159359,159361],{"class":30,"line":70},[28,159357,159358],{"class":211},"    total ",[28,159360,9554],{"class":207},[28,159362,159363],{"class":211}," i\n",[28,159365,159366,159368,159370],{"class":30,"line":78},[28,159367,159286],{"class":211},[28,159369,9554],{"class":207},[28,159371,55750],{"class":38},[28,159373,159374],{"class":30,"line":86},[28,159375,2477],{"emptyLinePlaceholder":134},[28,159377,159378,159380],{"class":30,"line":97},[28,159379,30466],{"class":38},[28,159381,159382],{"class":211},"(total)\n",[14,159384,159385],{},"核心思想：",[161,159387,159388,159393,159398],{},[119,159389,159390,159392],{},[25,159391,651],{}," 控制循环次数。",[119,159394,159395,159397],{},[25,159396,157412],{}," 保存累加结果。",[119,159399,159400,159401,159403],{},"每轮循环都要更新 ",[25,159402,651],{},"，否则可能死循环。",[149,159405,159407],{"id":159406},"_44-while猜数字","4.4 while猜数字",[18,159409,159411],{"className":30429,"code":159410,"language":30431,"meta":23,"style":23},"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",[25,159412,159413,159419,159423,159440,159448,159452,159460,159480,159489,159493,159505,159516,159526,159537,159543,159565],{"__ignoreMap":23},[28,159414,159415,159417],{"class":30,"line":31},[28,159416,30443],{"class":207},[28,159418,45379],{"class":211},[28,159420,159421],{"class":30,"line":42},[28,159422,2477],{"emptyLinePlaceholder":134},[28,159424,159425,159427,159429,159432,159434,159436,159438],{"class":30,"line":50},[28,159426,159091],{"class":211},[28,159428,257],{"class":207},[28,159430,159431],{"class":211}," random.randint(",[28,159433,427],{"class":38},[28,159435,12512],{"class":211},[28,159437,521],{"class":38},[28,159439,218],{"class":211},[28,159441,159442,159444,159446],{"class":30,"line":58},[28,159443,146742],{"class":211},[28,159445,257],{"class":207},[28,159447,47384],{"class":38},[28,159449,159450],{"class":30,"line":70},[28,159451,2477],{"emptyLinePlaceholder":134},[28,159453,159454,159456,159458],{"class":30,"line":78},[28,159455,108714],{"class":207},[28,159457,95343],{"class":38},[28,159459,3816],{"class":211},[28,159461,159462,159465,159467,159469,159471,159473,159475,159478],{"class":30,"line":86},[28,159463,159464],{"class":211},"    guess ",[28,159466,257],{"class":207},[28,159468,2459],{"class":38},[28,159470,212],{"class":211},[28,159472,53872],{"class":38},[28,159474,212],{"class":211},[28,159476,159477],{"class":64},"\"请输入1到100之间的数字:\"",[28,159479,30548],{"class":211},[28,159481,159482,159485,159487],{"class":30,"line":97},[28,159483,159484],{"class":211},"    count ",[28,159486,9554],{"class":207},[28,159488,55750],{"class":38},[28,159490,159491],{"class":30,"line":108},[28,159492,2477],{"emptyLinePlaceholder":134},[28,159494,159495,159497,159500,159502],{"class":30,"line":1407},[28,159496,3178],{"class":207},[28,159498,159499],{"class":211}," guess ",[28,159501,1170],{"class":207},[28,159503,159504],{"class":211}," answer:\n",[28,159506,159507,159509,159511,159514],{"class":30,"line":1690},[28,159508,32502],{"class":38},[28,159510,212],{"class":211},[28,159512,159513],{"class":64},"\"猜大了\"",[28,159515,218],{"class":211},[28,159517,159518,159520,159522,159524],{"class":30,"line":1695},[28,159519,39344],{"class":207},[28,159521,159499],{"class":211},[28,159523,1120],{"class":207},[28,159525,159504],{"class":211},[28,159527,159528,159530,159532,159535],{"class":30,"line":1701},[28,159529,32502],{"class":38},[28,159531,212],{"class":211},[28,159533,159534],{"class":64},"\"猜小了\"",[28,159536,218],{"class":211},[28,159538,159539,159541],{"class":30,"line":1706},[28,159540,158073],{"class":207},[28,159542,3816],{"class":211},[28,159544,159545,159547,159549,159551,159554,159556,159558,159560,159563],{"class":30,"line":1720},[28,159546,32502],{"class":38},[28,159548,212],{"class":211},[28,159550,263],{"class":207},[28,159552,159553],{"class":64},"\"猜对了，一共猜了",[28,159555,1106],{"class":38},[28,159557,84485],{"class":211},[28,159559,1156],{"class":38},[28,159561,159562],{"class":64},"次\"",[28,159564,218],{"class":211},[28,159566,159567],{"class":30,"line":1725},[28,159568,31678],{"class":207},[14,159570,159571,159574,159575,159577],{},[25,159572,159573],{},"while True"," 表示无限循环，通常配合 ",[25,159576,2130],{}," 使用。",[149,159579,159581],{"id":159580},"_45-break和continue","4.5 break和continue",[177,159583,159585],{"id":159584},"_451-break","4.5.1 break",[14,159587,159588,159590],{},[25,159589,2130],{}," 直接结束整个循环。",[18,159592,159594],{"className":30429,"code":159593,"language":30431,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[25,159595,159596,159616,159628,159632],{"__ignoreMap":23},[28,159597,159598,159600,159602,159604,159606,159608,159610,159612,159614],{"class":30,"line":31},[28,159599,3102],{"class":207},[28,159601,9515],{"class":211},[28,159603,26094],{"class":207},[28,159605,32494],{"class":38},[28,159607,212],{"class":211},[28,159609,427],{"class":38},[28,159611,12512],{"class":211},[28,159613,554],{"class":38},[28,159615,30837],{"class":211},[28,159617,159618,159620,159622,159624,159626],{"class":30,"line":42},[28,159619,3178],{"class":207},[28,159621,9515],{"class":211},[28,159623,3026],{"class":207},[28,159625,78121],{"class":38},[28,159627,3816],{"class":211},[28,159629,159630],{"class":30,"line":50},[28,159631,31678],{"class":207},[28,159633,159634,159636],{"class":30,"line":58},[28,159635,31350],{"class":38},[28,159637,159281],{"class":211},[14,159639,146508],{},[18,159641,159644],{"className":159642,"code":159643,"language":5264,"meta":23},[5262],"1\n2\n",[25,159645,159643],{"__ignoreMap":23},[177,159647,159649],{"id":159648},"_452-continue","4.5.2 continue",[14,159651,159652,159654],{},[25,159653,154723],{}," 跳过本轮剩余代码，进入下一轮循环。",[18,159656,159658],{"className":30429,"code":159657,"language":30431,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[25,159659,159660,159680,159692,159696],{"__ignoreMap":23},[28,159661,159662,159664,159666,159668,159670,159672,159674,159676,159678],{"class":30,"line":31},[28,159663,3102],{"class":207},[28,159665,9515],{"class":211},[28,159667,26094],{"class":207},[28,159669,32494],{"class":38},[28,159671,212],{"class":211},[28,159673,427],{"class":38},[28,159675,12512],{"class":211},[28,159677,554],{"class":38},[28,159679,30837],{"class":211},[28,159681,159682,159684,159686,159688,159690],{"class":30,"line":42},[28,159683,3178],{"class":207},[28,159685,9515],{"class":211},[28,159687,3026],{"class":207},[28,159689,78121],{"class":38},[28,159691,3816],{"class":211},[28,159693,159694],{"class":30,"line":50},[28,159695,148563],{"class":207},[28,159697,159698,159700],{"class":30,"line":58},[28,159699,31350],{"class":38},[28,159701,159281],{"class":211},[14,159703,146508],{},[18,159705,159708],{"className":159706,"code":159707,"language":5264,"meta":23},[5262],"1\n2\n4\n5\n",[25,159709,159707],{"__ignoreMap":23},[149,159711,159713],{"id":159712},"_46-for循环","4.6 for循环",[14,159715,159716,159718],{},[25,159717,3102],{}," 常用于遍历序列。",[18,159720,159722],{"className":30429,"code":159721,"language":30431,"meta":23,"style":23},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[25,159723,159724,159733,159737,159748],{"__ignoreMap":23},[28,159725,159726,159728,159730],{"class":30,"line":31},[28,159727,146587],{"class":211},[28,159729,257],{"class":207},[28,159731,159732],{"class":64}," \"python\"\n",[28,159734,159735],{"class":30,"line":42},[28,159736,2477],{"emptyLinePlaceholder":134},[28,159738,159739,159741,159744,159746],{"class":30,"line":50},[28,159740,3102],{"class":207},[28,159742,159743],{"class":211}," ch ",[28,159745,26094],{"class":207},[28,159747,158450],{"class":211},[28,159749,159750,159752],{"class":30,"line":58},[28,159751,31350],{"class":38},[28,159753,159754],{"class":211},"(ch)\n",[14,159756,159757],{},"遍历列表：",[18,159759,159761],{"className":30429,"code":159760,"language":30431,"meta":23,"style":23},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[25,159762,159763,159785,159789,159799],{"__ignoreMap":23},[28,159764,159765,159768,159770,159772,159774,159776,159778,159780,159783],{"class":30,"line":31},[28,159766,159767],{"class":211},"students ",[28,159769,257],{"class":207},[28,159771,52277],{"class":211},[28,159773,149939],{"class":64},[28,159775,12512],{"class":211},[28,159777,150987],{"class":64},[28,159779,12512],{"class":211},[28,159781,159782],{"class":64},"\"小刚\"",[28,159784,33297],{"class":211},[28,159786,159787],{"class":30,"line":42},[28,159788,2477],{"emptyLinePlaceholder":134},[28,159790,159791,159793,159795,159797],{"class":30,"line":50},[28,159792,3102],{"class":207},[28,159794,152188],{"class":211},[28,159796,26094],{"class":207},[28,159798,152193],{"class":211},[28,159800,159801,159803],{"class":30,"line":58},[28,159802,31350],{"class":38},[28,159804,150093],{"class":211},[149,159806,159808],{"id":159807},"_47-range函数","4.7 range函数",[14,159810,159811,159814],{},[25,159812,159813],{},"range()"," 用于生成整数序列。",[18,159816,159818],{"className":30429,"code":159817,"language":30431,"meta":23,"style":23},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[25,159819,159820,159834,159852],{"__ignoreMap":23},[28,159821,159822,159824,159826,159828,159831],{"class":30,"line":31},[28,159823,33467],{"class":38},[28,159825,212],{"class":211},[28,159827,529],{"class":38},[28,159829,159830],{"class":211},")          ",[28,159832,159833],{"class":269},"# 0,1,2,3,4\n",[28,159835,159836,159838,159840,159842,159844,159846,159849],{"class":30,"line":42},[28,159837,33467],{"class":38},[28,159839,212],{"class":211},[28,159841,427],{"class":38},[28,159843,12512],{"class":211},[28,159845,529],{"class":38},[28,159847,159848],{"class":211},")       ",[28,159850,159851],{"class":269},"# 1,2,3,4\n",[28,159853,159854,159856,159858,159860,159862,159864,159866,159868,159870],{"class":30,"line":50},[28,159855,33467],{"class":38},[28,159857,212],{"class":211},[28,159859,427],{"class":38},[28,159861,12512],{"class":211},[28,159863,656],{"class":38},[28,159865,12512],{"class":211},[28,159867,288],{"class":38},[28,159869,155712],{"class":211},[28,159871,159872],{"class":269},"# 1,3,5,7,9\n",[14,159874,159875,159876,24694],{},"配合 ",[25,159877,3102],{},[18,159879,159881],{"className":30429,"code":159880,"language":30431,"meta":23,"style":23},"for i in range(1, 6):\n    print(i)\n",[25,159882,159883,159903],{"__ignoreMap":23},[28,159884,159885,159887,159889,159891,159893,159895,159897,159899,159901],{"class":30,"line":31},[28,159886,3102],{"class":207},[28,159888,9515],{"class":211},[28,159890,26094],{"class":207},[28,159892,32494],{"class":38},[28,159894,212],{"class":211},[28,159896,427],{"class":38},[28,159898,12512],{"class":211},[28,159900,554],{"class":38},[28,159902,30837],{"class":211},[28,159904,159905,159907],{"class":30,"line":42},[28,159906,31350],{"class":38},[28,159908,159281],{"class":211},[14,159910,9102,159911,159913],{},[25,159912,33467],{}," 的结束值不包含在内。",[149,159915,159917],{"id":159916},"_48-for循环求和","4.8 for循环求和",[18,159919,159921],{"className":30429,"code":159920,"language":30431,"meta":23,"style":23},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[25,159922,159923,159931,159935,159955,159963,159967],{"__ignoreMap":23},[28,159924,159925,159927,159929],{"class":30,"line":31},[28,159926,157311],{"class":211},[28,159928,257],{"class":207},[28,159930,47384],{"class":38},[28,159932,159933],{"class":30,"line":42},[28,159934,2477],{"emptyLinePlaceholder":134},[28,159936,159937,159939,159941,159943,159945,159947,159949,159951,159953],{"class":30,"line":50},[28,159938,3102],{"class":207},[28,159940,9515],{"class":211},[28,159942,26094],{"class":207},[28,159944,32494],{"class":38},[28,159946,212],{"class":211},[28,159948,427],{"class":38},[28,159950,12512],{"class":211},[28,159952,547],{"class":38},[28,159954,30837],{"class":211},[28,159956,159957,159959,159961],{"class":30,"line":58},[28,159958,159358],{"class":211},[28,159960,9554],{"class":207},[28,159962,159363],{"class":211},[28,159964,159965],{"class":30,"line":70},[28,159966,2477],{"emptyLinePlaceholder":134},[28,159968,159969,159971],{"class":30,"line":78},[28,159970,30466],{"class":38},[28,159972,159382],{"class":211},[14,159974,159975],{},"求偶数和：",[18,159977,159979],{"className":30429,"code":159978,"language":30431,"meta":23,"style":23},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[25,159980,159981,159989,159993,160013,160029,160038,160042],{"__ignoreMap":23},[28,159982,159983,159985,159987],{"class":30,"line":31},[28,159984,157311],{"class":211},[28,159986,257],{"class":207},[28,159988,47384],{"class":38},[28,159990,159991],{"class":30,"line":42},[28,159992,2477],{"emptyLinePlaceholder":134},[28,159994,159995,159997,159999,160001,160003,160005,160007,160009,160011],{"class":30,"line":50},[28,159996,3102],{"class":207},[28,159998,9515],{"class":211},[28,160000,26094],{"class":207},[28,160002,32494],{"class":38},[28,160004,212],{"class":211},[28,160006,427],{"class":38},[28,160008,12512],{"class":211},[28,160010,547],{"class":38},[28,160012,30837],{"class":211},[28,160014,160015,160017,160019,160021,160023,160025,160027],{"class":30,"line":58},[28,160016,3178],{"class":207},[28,160018,9515],{"class":211},[28,160020,538],{"class":207},[28,160022,14832],{"class":38},[28,160024,101610],{"class":207},[28,160026,4170],{"class":38},[28,160028,3816],{"class":211},[28,160030,160031,160034,160036],{"class":30,"line":70},[28,160032,160033],{"class":211},"        total ",[28,160035,9554],{"class":207},[28,160037,159363],{"class":211},[28,160039,160040],{"class":30,"line":78},[28,160041,2477],{"emptyLinePlaceholder":134},[28,160043,160044,160046],{"class":30,"line":86},[28,160045,30466],{"class":38},[28,160047,159382],{"class":211},[14,160049,160050],{},"也可以：",[18,160052,160054],{"className":30429,"code":160053,"language":30431,"meta":23,"style":23},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[25,160055,160056,160064,160068,160092,160100,160104],{"__ignoreMap":23},[28,160057,160058,160060,160062],{"class":30,"line":31},[28,160059,157311],{"class":211},[28,160061,257],{"class":207},[28,160063,47384],{"class":38},[28,160065,160066],{"class":30,"line":42},[28,160067,2477],{"emptyLinePlaceholder":134},[28,160069,160070,160072,160074,160076,160078,160080,160082,160084,160086,160088,160090],{"class":30,"line":50},[28,160071,3102],{"class":207},[28,160073,9515],{"class":211},[28,160075,26094],{"class":207},[28,160077,32494],{"class":38},[28,160079,212],{"class":211},[28,160081,288],{"class":38},[28,160083,12512],{"class":211},[28,160085,547],{"class":38},[28,160087,12512],{"class":211},[28,160089,288],{"class":38},[28,160091,30837],{"class":211},[28,160093,160094,160096,160098],{"class":30,"line":58},[28,160095,159358],{"class":211},[28,160097,9554],{"class":207},[28,160099,159363],{"class":211},[28,160101,160102],{"class":30,"line":70},[28,160103,2477],{"emptyLinePlaceholder":134},[28,160105,160106,160108],{"class":30,"line":78},[28,160107,30466],{"class":38},[28,160109,159382],{"class":211},[149,160111,160113],{"id":160112},"_49-循环嵌套","4.9 循环嵌套",[14,160115,160116],{},"嵌套循环就是循环里面再写循环。",[18,160118,160120],{"className":30429,"code":160119,"language":30431,"meta":23,"style":23},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[25,160121,160122,160142,160162],{"__ignoreMap":23},[28,160123,160124,160126,160128,160130,160132,160134,160136,160138,160140],{"class":30,"line":31},[28,160125,3102],{"class":207},[28,160127,9515],{"class":211},[28,160129,26094],{"class":207},[28,160131,32494],{"class":38},[28,160133,212],{"class":211},[28,160135,427],{"class":38},[28,160137,12512],{"class":211},[28,160139,503],{"class":38},[28,160141,30837],{"class":211},[28,160143,160144,160146,160148,160150,160152,160154,160156,160158,160160],{"class":30,"line":42},[28,160145,3278],{"class":207},[28,160147,9577],{"class":211},[28,160149,26094],{"class":207},[28,160151,32494],{"class":38},[28,160153,212],{"class":211},[28,160155,427],{"class":38},[28,160157,12512],{"class":211},[28,160159,503],{"class":38},[28,160161,30837],{"class":211},[28,160163,160164,160166,160168,160170,160173,160175,160177,160179,160182,160184,160186,160188,160190],{"class":30,"line":50},[28,160165,32502],{"class":38},[28,160167,212],{"class":211},[28,160169,263],{"class":207},[28,160171,160172],{"class":64},"\"i=",[28,160174,1106],{"class":38},[28,160176,651],{"class":211},[28,160178,1156],{"class":38},[28,160180,160181],{"class":64},", j=",[28,160183,1106],{"class":38},[28,160185,677],{"class":211},[28,160187,1156],{"class":38},[28,160189,461],{"class":64},[28,160191,218],{"class":211},[14,160193,160194],{},"外层循环执行一次，内层循环执行完整一轮。",[149,160196,160198],{"id":160197},"_410-九九乘法表","4.10 九九乘法表",[18,160200,160202],{"className":30429,"code":160201,"language":30431,"meta":23,"style":23},"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",[25,160203,160204,160224,160247,160299],{"__ignoreMap":23},[28,160205,160206,160208,160210,160212,160214,160216,160218,160220,160222],{"class":30,"line":31},[28,160207,3102],{"class":207},[28,160209,9515],{"class":211},[28,160211,26094],{"class":207},[28,160213,32494],{"class":38},[28,160215,212],{"class":211},[28,160217,427],{"class":38},[28,160219,12512],{"class":211},[28,160221,656],{"class":38},[28,160223,30837],{"class":211},[28,160225,160226,160228,160230,160232,160234,160236,160238,160241,160243,160245],{"class":30,"line":42},[28,160227,3278],{"class":207},[28,160229,9577],{"class":211},[28,160231,26094],{"class":207},[28,160233,32494],{"class":38},[28,160235,212],{"class":211},[28,160237,427],{"class":38},[28,160239,160240],{"class":211},", i ",[28,160242,691],{"class":207},[28,160244,25189],{"class":38},[28,160246,30837],{"class":211},[28,160248,160249,160251,160253,160255,160257,160259,160261,160263,160265,160267,160269,160271,160273,160275,160277,160279,160281,160283,160285,160287,160289,160291,160293,160295,160297],{"class":30,"line":50},[28,160250,32502],{"class":38},[28,160252,212],{"class":211},[28,160254,263],{"class":207},[28,160256,461],{"class":64},[28,160258,1106],{"class":38},[28,160260,677],{"class":211},[28,160262,1156],{"class":38},[28,160264,665],{"class":64},[28,160266,1106],{"class":38},[28,160268,651],{"class":211},[28,160270,1156],{"class":38},[28,160272,257],{"class":64},[28,160274,1106],{"class":38},[28,160276,100199],{"class":211},[28,160278,665],{"class":207},[28,160280,3487],{"class":211},[28,160282,1156],{"class":38},[28,160284,461],{"class":64},[28,160286,12512],{"class":211},[28,160288,45852],{"class":5293},[28,160290,257],{"class":207},[28,160292,461],{"class":64},[28,160294,1310],{"class":38},[28,160296,461],{"class":64},[28,160298,218],{"class":211},[28,160300,160301,160303],{"class":30,"line":58},[28,160302,31350],{"class":38},[28,160304,2053],{"class":211},[14,160306,160307],{},"关键点：",[161,160309,160310,160316,160322,160328],{},[119,160311,160312,160313,160315],{},"外层 ",[25,160314,651],{}," 控制行。",[119,160317,160318,160319,160321],{},"内层 ",[25,160320,677],{}," 控制列。",[119,160323,160324,160325,160327],{},"每行结束后用 ",[25,160326,146523],{}," 换行。",[119,160329,160330,160333],{},[25,160331,160332],{},"end=\"\\t\""," 让同一行的内容横向排列。",[149,160335,160337],{"id":160336},"_411-循环else","4.11 循环else",[14,160339,160340,160341,160343,160344,160346,160347,160349],{},"Python 的循环可以带 ",[25,160342,1779],{},"。当循环正常结束时执行 ",[25,160345,1779],{},"，如果被 ",[25,160348,2130],{}," 打断，则不执行。",[18,160351,160353],{"className":30429,"code":160352,"language":30431,"meta":23,"style":23},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[25,160354,160355,160375,160387,160398,160402,160408],{"__ignoreMap":23},[28,160356,160357,160359,160361,160363,160365,160367,160369,160371,160373],{"class":30,"line":31},[28,160358,3102],{"class":207},[28,160360,9515],{"class":211},[28,160362,26094],{"class":207},[28,160364,32494],{"class":38},[28,160366,212],{"class":211},[28,160368,427],{"class":38},[28,160370,12512],{"class":211},[28,160372,554],{"class":38},[28,160374,30837],{"class":211},[28,160376,160377,160379,160381,160383,160385],{"class":30,"line":42},[28,160378,3178],{"class":207},[28,160380,9515],{"class":211},[28,160382,3026],{"class":207},[28,160384,2115],{"class":38},[28,160386,3816],{"class":211},[28,160388,160389,160391,160393,160396],{"class":30,"line":50},[28,160390,32502],{"class":38},[28,160392,212],{"class":211},[28,160394,160395],{"class":64},"\"找到了\"",[28,160397,218],{"class":211},[28,160399,160400],{"class":30,"line":58},[28,160401,31678],{"class":207},[28,160403,160404,160406],{"class":30,"line":70},[28,160405,1779],{"class":207},[28,160407,3816],{"class":211},[28,160409,160410,160412,160414,160417],{"class":30,"line":78},[28,160411,31350],{"class":38},[28,160413,212],{"class":211},[28,160415,160416],{"class":64},"\"没找到\"",[28,160418,218],{"class":211},[14,160420,160421],{},"常用于搜索。",[18,160423,160425],{"className":30429,"code":160424,"language":30431,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[25,160426,160427,160448,160457,160461,160473,160484,160494,160498,160504],{"__ignoreMap":23},[28,160428,160429,160432,160434,160436,160438,160440,160442,160444,160446],{"class":30,"line":31},[28,160430,160431],{"class":211},"names ",[28,160433,257],{"class":207},[28,160435,52277],{"class":211},[28,160437,149939],{"class":64},[28,160439,12512],{"class":211},[28,160441,150987],{"class":64},[28,160443,12512],{"class":211},[28,160445,159782],{"class":64},[28,160447,33297],{"class":211},[28,160449,160450,160452,160454],{"class":30,"line":42},[28,160451,111629],{"class":211},[28,160453,257],{"class":207},[28,160455,160456],{"class":64}," \"小李\"\n",[28,160458,160459],{"class":30,"line":50},[28,160460,2477],{"emptyLinePlaceholder":134},[28,160462,160463,160465,160468,160470],{"class":30,"line":58},[28,160464,3102],{"class":207},[28,160466,160467],{"class":211}," name ",[28,160469,26094],{"class":207},[28,160471,160472],{"class":211}," names:\n",[28,160474,160475,160477,160479,160481],{"class":30,"line":70},[28,160476,3178],{"class":207},[28,160478,160467],{"class":211},[28,160480,3026],{"class":207},[28,160482,160483],{"class":211}," target:\n",[28,160485,160486,160488,160490,160492],{"class":30,"line":78},[28,160487,32502],{"class":38},[28,160489,212],{"class":211},[28,160491,160395],{"class":64},[28,160493,218],{"class":211},[28,160495,160496],{"class":30,"line":86},[28,160497,31678],{"class":207},[28,160499,160500,160502],{"class":30,"line":97},[28,160501,1779],{"class":207},[28,160503,3816],{"class":211},[28,160505,160506,160508,160510,160512],{"class":30,"line":108},[28,160507,31350],{"class":38},[28,160509,212],{"class":211},[28,160511,160416],{"class":64},[28,160513,218],{"class":211},[149,160515,160517],{"id":160516},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160519,123343],{},[161,160521,160522,160525,160528],{},[119,160523,160524],{},"用户最多输入 3 次密码。",[119,160526,160527],{},"密码正确则登录成功。",[119,160529,160530],{},"3 次都错误则锁定账号。",[14,160532,10112],{},[18,160534,160536],{"className":30429,"code":160535,"language":30431,"meta":23,"style":23},"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",[25,160537,160538,160548,160552,160568,160584,160588,160600,160611,160615,160621,160646,160652],{"__ignoreMap":23},[28,160539,160540,160543,160545],{"class":30,"line":31},[28,160541,160542],{"class":211},"password ",[28,160544,257],{"class":207},[28,160546,160547],{"class":64}," \"123456\"\n",[28,160549,160550],{"class":30,"line":42},[28,160551,2477],{"emptyLinePlaceholder":134},[28,160553,160554,160556,160558,160560,160562,160564,160566],{"class":30,"line":50},[28,160555,3102],{"class":207},[28,160557,9515],{"class":211},[28,160559,26094],{"class":207},[28,160561,32494],{"class":38},[28,160563,212],{"class":211},[28,160565,282],{"class":38},[28,160567,30837],{"class":211},[28,160569,160570,160573,160575,160577,160579,160582],{"class":30,"line":58},[28,160571,160572],{"class":211},"    user_password ",[28,160574,257],{"class":207},[28,160576,60656],{"class":38},[28,160578,212],{"class":211},[28,160580,160581],{"class":64},"\"请输入密码:\"",[28,160583,218],{"class":211},[28,160585,160586],{"class":30,"line":70},[28,160587,2477],{"emptyLinePlaceholder":134},[28,160589,160590,160592,160595,160597],{"class":30,"line":78},[28,160591,3178],{"class":207},[28,160593,160594],{"class":211}," user_password ",[28,160596,3026],{"class":207},[28,160598,160599],{"class":211}," password:\n",[28,160601,160602,160604,160606,160609],{"class":30,"line":86},[28,160603,32502],{"class":38},[28,160605,212],{"class":211},[28,160607,160608],{"class":64},"\"登录成功\"",[28,160610,218],{"class":211},[28,160612,160613],{"class":30,"line":97},[28,160614,31678],{"class":207},[28,160616,160617,160619],{"class":30,"line":108},[28,160618,158073],{"class":207},[28,160620,3816],{"class":211},[28,160622,160623,160625,160627,160629,160632,160635,160637,160639,160641,160644],{"class":30,"line":1407},[28,160624,32502],{"class":38},[28,160626,212],{"class":211},[28,160628,263],{"class":207},[28,160630,160631],{"class":64},"\"密码错误，还剩",[28,160633,160634],{"class":38},"{2",[28,160636,52322],{"class":207},[28,160638,3109],{"class":211},[28,160640,1156],{"class":38},[28,160642,160643],{"class":64},"次机会\"",[28,160645,218],{"class":211},[28,160647,160648,160650],{"class":30,"line":1690},[28,160649,1779],{"class":207},[28,160651,3816],{"class":211},[28,160653,160654,160656,160658,160661],{"class":30,"line":1695},[28,160655,31350],{"class":38},[28,160657,212],{"class":211},[28,160659,160660],{"class":64},"\"账号已锁定\"",[28,160662,218],{"class":211},[149,160664,160666],{"id":160665},"_413-小案例菜单程序","4.13 小案例：菜单程序",[18,160668,160670],{"className":30429,"code":160669,"language":30431,"meta":23,"style":23},"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",[25,160671,160672,160680,160691,160702,160713,160724,160735,160739,160754,160758,160770,160781,160793,160804,160816,160827,160839,160849,160853,160859],{"__ignoreMap":23},[28,160673,160674,160676,160678],{"class":30,"line":31},[28,160675,108714],{"class":207},[28,160677,95343],{"class":38},[28,160679,3816],{"class":211},[28,160681,160682,160684,160686,160689],{"class":30,"line":42},[28,160683,31350],{"class":38},[28,160685,212],{"class":211},[28,160687,160688],{"class":64},"\"====== 菜单 ======\"",[28,160690,218],{"class":211},[28,160692,160693,160695,160697,160700],{"class":30,"line":50},[28,160694,31350],{"class":38},[28,160696,212],{"class":211},[28,160698,160699],{"class":64},"\"1. 查询余额\"",[28,160701,218],{"class":211},[28,160703,160704,160706,160708,160711],{"class":30,"line":58},[28,160705,31350],{"class":38},[28,160707,212],{"class":211},[28,160709,160710],{"class":64},"\"2. 存款\"",[28,160712,218],{"class":211},[28,160714,160715,160717,160719,160722],{"class":30,"line":70},[28,160716,31350],{"class":38},[28,160718,212],{"class":211},[28,160720,160721],{"class":64},"\"3. 取款\"",[28,160723,218],{"class":211},[28,160725,160726,160728,160730,160733],{"class":30,"line":78},[28,160727,31350],{"class":38},[28,160729,212],{"class":211},[28,160731,160732],{"class":64},"\"0. 退出\"",[28,160734,218],{"class":211},[28,160736,160737],{"class":30,"line":86},[28,160738,2477],{"emptyLinePlaceholder":134},[28,160740,160741,160744,160746,160748,160750,160752],{"class":30,"line":97},[28,160742,160743],{"class":211},"    choice ",[28,160745,257],{"class":207},[28,160747,60656],{"class":38},[28,160749,212],{"class":211},[28,160751,153124],{"class":64},[28,160753,218],{"class":211},[28,160755,160756],{"class":30,"line":108},[28,160757,2477],{"emptyLinePlaceholder":134},[28,160759,160760,160762,160764,160766,160768],{"class":30,"line":1407},[28,160761,3178],{"class":207},[28,160763,153137],{"class":211},[28,160765,3026],{"class":207},[28,160767,153142],{"class":64},[28,160769,3816],{"class":211},[28,160771,160772,160774,160776,160779],{"class":30,"line":1690},[28,160773,32502],{"class":38},[28,160775,212],{"class":211},[28,160777,160778],{"class":64},"\"余额为1000元\"",[28,160780,218],{"class":211},[28,160782,160783,160785,160787,160789,160791],{"class":30,"line":1695},[28,160784,39344],{"class":207},[28,160786,153137],{"class":211},[28,160788,3026],{"class":207},[28,160790,153161],{"class":64},[28,160792,3816],{"class":211},[28,160794,160795,160797,160799,160802],{"class":30,"line":1701},[28,160796,32502],{"class":38},[28,160798,212],{"class":211},[28,160800,160801],{"class":64},"\"存款功能\"",[28,160803,218],{"class":211},[28,160805,160806,160808,160810,160812,160814],{"class":30,"line":1706},[28,160807,39344],{"class":207},[28,160809,153137],{"class":211},[28,160811,3026],{"class":207},[28,160813,153179],{"class":64},[28,160815,3816],{"class":211},[28,160817,160818,160820,160822,160825],{"class":30,"line":1720},[28,160819,32502],{"class":38},[28,160821,212],{"class":211},[28,160823,160824],{"class":64},"\"取款功能\"",[28,160826,218],{"class":211},[28,160828,160829,160831,160833,160835,160837],{"class":30,"line":1725},[28,160830,39344],{"class":207},[28,160832,153137],{"class":211},[28,160834,3026],{"class":207},[28,160836,153233],{"class":64},[28,160838,3816],{"class":211},[28,160840,160841,160843,160845,160847],{"class":30,"line":1731},[28,160842,32502],{"class":38},[28,160844,212],{"class":211},[28,160846,153244],{"class":64},[28,160848,218],{"class":211},[28,160850,160851],{"class":30,"line":1752},[28,160852,31678],{"class":207},[28,160854,160855,160857],{"class":30,"line":1757},[28,160856,158073],{"class":207},[28,160858,3816],{"class":211},[28,160860,160861,160863,160865,160867],{"class":30,"line":1771},[28,160862,32502],{"class":38},[28,160864,212],{"class":211},[28,160866,153265],{"class":64},[28,160868,218],{"class":211},[14,160870,160871,160872,160874,160875,28436],{},"菜单类程序通常使用 ",[25,160873,159573],{},"，用户选择退出时 ",[25,160876,2130],{},[149,160878,160880],{"id":160879},"_414-易错点","4.14 易错点",[161,160882,160883,160888,160894,160902,160908],{},[119,160884,160885,160887],{},[25,160886,108714],{}," 循环必须更新控制变量。",[119,160889,160890,160893],{},[25,160891,160892],{},"range(1, 10)"," 不包含 10。",[119,160895,160896,160898,160899,160901],{},[25,160897,2130],{}," 结束整个循环，",[25,160900,154723],{}," 只跳过本轮。",[119,160903,160904,160905,160907],{},"嵌套循环中，",[25,160906,2130],{}," 只跳出当前所在的一层循环。",[119,160909,160910],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[149,160912,160914],{"id":160913},"_415-本章练习","4.15 本章练习",[161,160916,160917,160920,160923,160926,160929],{},[119,160918,160919],{},"输出 1 到 100。",[119,160921,160922],{},"计算 1 到 100 的偶数和。",[119,160924,160925],{},"输出 100 以内能被 3 和 5 同时整除的数。",[119,160927,160928],{},"编写猜数字游戏，限制最多猜 7 次。",[119,160930,160931],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[126,160933,160934],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":160936},[160937,160938,160939,160940,160941,160945,160946,160947,160948,160949,160950,160951,160952,160953,160954],{"id":159193,"depth":42,"text":159194},{"id":159223,"depth":42,"text":159224},{"id":159312,"depth":42,"text":159313},{"id":159406,"depth":42,"text":159407},{"id":159580,"depth":42,"text":159581,"children":160942},[160943,160944],{"id":159584,"depth":50,"text":159585},{"id":159648,"depth":50,"text":159649},{"id":159712,"depth":42,"text":159713},{"id":159807,"depth":42,"text":159808},{"id":159916,"depth":42,"text":159917},{"id":160112,"depth":42,"text":160113},{"id":160197,"depth":42,"text":160198},{"id":160336,"depth":42,"text":160337},{"id":160516,"depth":42,"text":160517},{"id":160665,"depth":42,"text":160666},{"id":160879,"depth":42,"text":160880},{"id":160913,"depth":42,"text":160914},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159185,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160961,"title":160962,"body":160963,"description":131,"extension":132,"meta":162968,"navigation":134,"path":162969,"seo":162970,"stem":162971,"__hash__":162972},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160964,"toc":162948},[160965,160968,160972,160975,160978,160992,160995,161009,161013,161015,161034,161036,161083,161085,161099,161103,161177,161180,161184,161187,161246,161254,161257,161310,161313,161317,161322,161377,161385,161435,161439,161444,161452,161551,161557,161561,161566,161569,161580,161621,161634,161638,161641,161677,161680,161693,161696,161756,161760,161764,161767,161818,161822,161825,161872,161878,161944,161947,161951,161954,162070,162073,162077,162080,162186,162190,162193,162231,162234,162276,162279,162339,162342,162346,162810,162813,162817,162844,162850,162911,162915,162945],[10,160966,160962],{"id":160967},"_5-函数基础",[149,160969,160971],{"id":160970},"_51-为什么需要函数","5.1 为什么需要函数",[14,160973,160974],{},"函数用于封装一段可以重复使用的代码。",[14,160976,160977],{},"不使用函数的问题：",[161,160979,160980,160983,160986,160989],{},[119,160981,160982],{},"重复代码多。",[119,160984,160985],{},"修改逻辑时容易漏改。",[119,160987,160988],{},"主流程不清晰。",[119,160990,160991],{},"程序越写越长，难以维护。",[14,160993,160994],{},"使用函数后的好处：",[161,160996,160997,161000,161003,161006],{},[119,160998,160999],{},"提高复用性。",[119,161001,161002],{},"提高可读性。",[119,161004,161005],{},"便于调试。",[119,161007,161008],{},"便于分工。",[149,161010,161012],{"id":161011},"_52-函数定义","5.2 函数定义",[14,161014,5258],{},[18,161016,161018],{"className":30429,"code":161017,"language":30431,"meta":23,"style":23},"def 函数名():\n    函数体\n",[25,161019,161020,161029],{"__ignoreMap":23},[28,161021,161022,161024,161027],{"class":30,"line":31},[28,161023,31998],{"class":207},[28,161025,161026],{"class":34}," 函数名",[28,161028,32004],{"class":211},[28,161030,161031],{"class":30,"line":42},[28,161032,161033],{"class":211},"    函数体\n",[14,161035,15212],{},[18,161037,161039],{"className":30429,"code":161038,"language":30431,"meta":23,"style":23},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[25,161040,161041,161050,161060,161070,161074,161078],{"__ignoreMap":23},[28,161042,161043,161045,161048],{"class":30,"line":31},[28,161044,31998],{"class":207},[28,161046,161047],{"class":34}," say_hello",[28,161049,32004],{"class":211},[28,161051,161052,161054,161056,161058],{"class":30,"line":42},[28,161053,31350],{"class":38},[28,161055,212],{"class":211},[28,161057,5921],{"class":64},[28,161059,218],{"class":211},[28,161061,161062,161064,161066,161068],{"class":30,"line":50},[28,161063,31350],{"class":38},[28,161065,212],{"class":211},[28,161067,146690],{"class":64},[28,161069,218],{"class":211},[28,161071,161072],{"class":30,"line":58},[28,161073,2477],{"emptyLinePlaceholder":134},[28,161075,161076],{"class":30,"line":70},[28,161077,2477],{"emptyLinePlaceholder":134},[28,161079,161080],{"class":30,"line":78},[28,161081,161082],{"class":211},"say_hello()\n",[14,161084,9102],{},[161,161086,161087,161090,161093,161096],{},[119,161088,161089],{},"函数必须先定义，再调用。",[119,161091,161092],{},"函数名遵循变量命名规则。",[119,161094,161095],{},"函数体需要缩进。",[119,161097,161098],{},"函数不调用就不会执行。",[149,161100,161102],{"id":161101},"_53-函数调用","5.3 函数调用",[18,161104,161106],{"className":30429,"code":161105,"language":30431,"meta":23,"style":23},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[25,161107,161108,161117,161128,161139,161150,161160,161164,161168,161173],{"__ignoreMap":23},[28,161109,161110,161112,161115],{"class":30,"line":31},[28,161111,31998],{"class":207},[28,161113,161114],{"class":34}," print_menu",[28,161116,32004],{"class":211},[28,161118,161119,161121,161123,161126],{"class":30,"line":42},[28,161120,31350],{"class":38},[28,161122,212],{"class":211},[28,161124,161125],{"class":64},"\"1. 查询\"",[28,161127,218],{"class":211},[28,161129,161130,161132,161134,161137],{"class":30,"line":50},[28,161131,31350],{"class":38},[28,161133,212],{"class":211},[28,161135,161136],{"class":64},"\"2. 添加\"",[28,161138,218],{"class":211},[28,161140,161141,161143,161145,161148],{"class":30,"line":58},[28,161142,31350],{"class":38},[28,161144,212],{"class":211},[28,161146,161147],{"class":64},"\"3. 删除\"",[28,161149,218],{"class":211},[28,161151,161152,161154,161156,161158],{"class":30,"line":70},[28,161153,31350],{"class":38},[28,161155,212],{"class":211},[28,161157,160732],{"class":64},[28,161159,218],{"class":211},[28,161161,161162],{"class":30,"line":78},[28,161163,2477],{"emptyLinePlaceholder":134},[28,161165,161166],{"class":30,"line":86},[28,161167,2477],{"emptyLinePlaceholder":134},[28,161169,161170],{"class":30,"line":97},[28,161171,161172],{"class":211},"print_menu()\n",[28,161174,161175],{"class":30,"line":108},[28,161176,161172],{"class":211},[14,161178,161179],{},"函数可以多次调用，每次调用都会执行函数体。",[149,161181,161183],{"id":161182},"_54-参数","5.4 参数",[14,161185,161186],{},"参数用于向函数传递数据。",[18,161188,161190],{"className":30429,"code":161189,"language":30431,"meta":23,"style":23},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[25,161191,161192,161201,161221,161225,161229,161238],{"__ignoreMap":23},[28,161193,161194,161196,161198],{"class":30,"line":31},[28,161195,31998],{"class":207},[28,161197,161047],{"class":34},[28,161199,161200],{"class":211},"(name):\n",[28,161202,161203,161205,161207,161209,161211,161213,161215,161217,161219],{"class":30,"line":42},[28,161204,31350],{"class":38},[28,161206,212],{"class":211},[28,161208,263],{"class":207},[28,161210,157105],{"class":64},[28,161212,1106],{"class":38},[28,161214,79861],{"class":211},[28,161216,1156],{"class":38},[28,161218,461],{"class":64},[28,161220,218],{"class":211},[28,161222,161223],{"class":30,"line":50},[28,161224,2477],{"emptyLinePlaceholder":134},[28,161226,161227],{"class":30,"line":58},[28,161228,2477],{"emptyLinePlaceholder":134},[28,161230,161231,161234,161236],{"class":30,"line":70},[28,161232,161233],{"class":211},"say_hello(",[28,161235,149939],{"class":64},[28,161237,218],{"class":211},[28,161239,161240,161242,161244],{"class":30,"line":78},[28,161241,161233],{"class":211},[28,161243,150987],{"class":64},[28,161245,218],{"class":211},[14,161247,161248,161250,161251,161253],{},[25,161249,79861],{}," 是形参，",[25,161252,149939],{}," 是实参。",[14,161255,161256],{},"多个参数：",[18,161258,161260],{"className":30429,"code":161259,"language":30431,"meta":23,"style":23},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[25,161261,161262,161270,161283,161289,161293,161297],{"__ignoreMap":23},[28,161263,161264,161266,161268],{"class":30,"line":31},[28,161265,31998],{"class":207},[28,161267,5286],{"class":34},[28,161269,151144],{"class":211},[28,161271,161272,161275,161277,161279,161281],{"class":30,"line":42},[28,161273,161274],{"class":211},"    result ",[28,161276,257],{"class":207},[28,161278,10946],{"class":211},[28,161280,691],{"class":207},[28,161282,151155],{"class":211},[28,161284,161285,161287],{"class":30,"line":50},[28,161286,31350],{"class":38},[28,161288,76636],{"class":211},[28,161290,161291],{"class":30,"line":58},[28,161292,2477],{"emptyLinePlaceholder":134},[28,161294,161295],{"class":30,"line":70},[28,161296,2477],{"emptyLinePlaceholder":134},[28,161298,161299,161302,161304,161306,161308],{"class":30,"line":78},[28,161300,161301],{"class":211},"add(",[28,161303,656],{"class":38},[28,161305,12512],{"class":211},[28,161307,910],{"class":38},[28,161309,218],{"class":211},[14,161311,161312],{},"调用时参数数量必须匹配。",[149,161314,161316],{"id":161315},"_55-返回值","5.5 返回值",[14,161318,161319,161321],{},[25,161320,17123],{}," 用于把函数内部的结果返回给调用者。",[18,161323,161325],{"className":30429,"code":161324,"language":30431,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[25,161326,161327,161335,161345,161349,161353,161371],{"__ignoreMap":23},[28,161328,161329,161331,161333],{"class":30,"line":31},[28,161330,31998],{"class":207},[28,161332,5286],{"class":34},[28,161334,151144],{"class":211},[28,161336,161337,161339,161341,161343],{"class":30,"line":42},[28,161338,4167],{"class":207},[28,161340,10946],{"class":211},[28,161342,691],{"class":207},[28,161344,151155],{"class":211},[28,161346,161347],{"class":30,"line":50},[28,161348,2477],{"emptyLinePlaceholder":134},[28,161350,161351],{"class":30,"line":58},[28,161352,2477],{"emptyLinePlaceholder":134},[28,161354,161355,161358,161360,161363,161365,161367,161369],{"class":30,"line":70},[28,161356,161357],{"class":211},"result ",[28,161359,257],{"class":207},[28,161361,161362],{"class":211}," add(",[28,161364,656],{"class":38},[28,161366,12512],{"class":211},[28,161368,910],{"class":38},[28,161370,218],{"class":211},[28,161372,161373,161375],{"class":30,"line":78},[28,161374,30466],{"class":38},[28,161376,76636],{"class":211},[14,161378,161379,161380,161382,161383,28436],{},"如果函数没有写 ",[25,161381,17123],{},"，默认返回 ",[25,161384,95737],{},[18,161386,161388],{"className":30429,"code":161387,"language":30431,"meta":23,"style":23},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[25,161389,161390,161398,161408,161412,161416,161425],{"__ignoreMap":23},[28,161391,161392,161394,161396],{"class":30,"line":31},[28,161393,31998],{"class":207},[28,161395,161047],{"class":34},[28,161397,32004],{"class":211},[28,161399,161400,161402,161404,161406],{"class":30,"line":42},[28,161401,31350],{"class":38},[28,161403,212],{"class":211},[28,161405,5921],{"class":64},[28,161407,218],{"class":211},[28,161409,161410],{"class":30,"line":50},[28,161411,2477],{"emptyLinePlaceholder":134},[28,161413,161414],{"class":30,"line":58},[28,161415,2477],{"emptyLinePlaceholder":134},[28,161417,161418,161420,161422],{"class":30,"line":70},[28,161419,161357],{"class":211},[28,161421,257],{"class":207},[28,161423,161424],{"class":211}," say_hello()\n",[28,161426,161427,161429,161432],{"class":30,"line":78},[28,161428,30466],{"class":38},[28,161430,161431],{"class":211},"(result)  ",[28,161433,161434],{"class":269},"# None\n",[149,161436,161438],{"id":161437},"_56-return的作用","5.6 return的作用",[14,161440,161441,161443],{},[25,161442,17123],{}," 有两个作用：",[161,161445,161446,161449],{},[119,161447,161448],{},"返回结果。",[119,161450,161451],{},"结束函数。",[18,161453,161455],{"className":30429,"code":161454,"language":30431,"meta":23,"style":23},"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",[25,161456,161457,161467,161479,161486,161490,161502,161509,161513,161520,161524,161528,161539],{"__ignoreMap":23},[28,161458,161459,161461,161464],{"class":30,"line":31},[28,161460,31998],{"class":207},[28,161462,161463],{"class":34}," check_age",[28,161465,161466],{"class":211},"(age):\n",[28,161468,161469,161471,161473,161475,161477],{"class":30,"line":42},[28,161470,3178],{"class":207},[28,161472,15784],{"class":211},[28,161474,1120],{"class":207},[28,161476,4170],{"class":38},[28,161478,3816],{"class":211},[28,161480,161481,161483],{"class":30,"line":50},[28,161482,14829],{"class":207},[28,161484,161485],{"class":64}," \"年龄不合法\"\n",[28,161487,161488],{"class":30,"line":58},[28,161489,2477],{"emptyLinePlaceholder":134},[28,161491,161492,161494,161496,161498,161500],{"class":30,"line":70},[28,161493,3178],{"class":207},[28,161495,15784],{"class":211},[28,161497,1788],{"class":207},[28,161499,156336],{"class":38},[28,161501,3816],{"class":211},[28,161503,161504,161506],{"class":30,"line":78},[28,161505,14829],{"class":207},[28,161507,161508],{"class":64}," \"成年人\"\n",[28,161510,161511],{"class":30,"line":86},[28,161512,2477],{"emptyLinePlaceholder":134},[28,161514,161515,161517],{"class":30,"line":97},[28,161516,4167],{"class":207},[28,161518,161519],{"class":64}," \"未成年人\"\n",[28,161521,161522],{"class":30,"line":108},[28,161523,2477],{"emptyLinePlaceholder":134},[28,161525,161526],{"class":30,"line":1407},[28,161527,2477],{"emptyLinePlaceholder":134},[28,161529,161530,161532,161535,161537],{"class":30,"line":1690},[28,161531,30466],{"class":38},[28,161533,161534],{"class":211},"(check_age(",[28,161536,910],{"class":38},[28,161538,30548],{"class":211},[28,161540,161541,161543,161545,161547,161549],{"class":30,"line":1695},[28,161542,30466],{"class":38},[28,161544,161534],{"class":211},[28,161546,742],{"class":207},[28,161548,427],{"class":38},[28,161550,30548],{"class":211},[14,161552,161553,161554,161556],{},"函数执行到 ",[25,161555,17123],{}," 后，后面的代码不会继续执行。",[149,161558,161560],{"id":161559},"_57-none","5.7 None",[14,161562,161563,161565],{},[25,161564,95737],{}," 表示空值或没有结果。",[14,161567,161568],{},"常见使用场景：",[161,161570,161571,161574,161577],{},[119,161572,161573],{},"函数没有返回值。",[119,161575,161576],{},"变量暂时没有具体值。",[119,161578,161579],{},"表示查询不到结果。",[18,161581,161583],{"className":30429,"code":161582,"language":30431,"meta":23,"style":23},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[25,161584,161585,161593,161597,161610],{"__ignoreMap":23},[28,161586,161587,161589,161591],{"class":30,"line":31},[28,161588,161357],{"class":211},[28,161590,257],{"class":207},[28,161592,152223],{"class":38},[28,161594,161595],{"class":30,"line":42},[28,161596,2477],{"emptyLinePlaceholder":134},[28,161598,161599,161601,161604,161606,161608],{"class":30,"line":50},[28,161600,1609],{"class":207},[28,161602,161603],{"class":211}," result ",[28,161605,38978],{"class":207},[28,161607,38984],{"class":38},[28,161609,3816],{"class":211},[28,161611,161612,161614,161616,161619],{"class":30,"line":58},[28,161613,31350],{"class":38},[28,161615,212],{"class":211},[28,161617,161618],{"class":64},"\"没有数据\"",[28,161620,218],{"class":211},[14,161622,161623,161624,161626,161627,161630,161631,28436],{},"判断 ",[25,161625,95737],{}," 推荐使用 ",[25,161628,161629],{},"is None","，不要写成 ",[25,161632,161633],{},"== None",[149,161635,161637],{"id":161636},"_58-函数文档字符串","5.8 函数文档字符串",[14,161639,161640],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[18,161642,161644],{"className":30429,"code":161643,"language":30431,"meta":23,"style":23},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[25,161645,161646,161656,161661],{"__ignoreMap":23},[28,161647,161648,161650,161653],{"class":30,"line":31},[28,161649,31998],{"class":207},[28,161651,161652],{"class":34}," calculate_bmi",[28,161654,161655],{"class":211},"(weight, height):\n",[28,161657,161658],{"class":30,"line":42},[28,161659,161660],{"class":64},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[28,161662,161663,161665,161668,161670,161673,161675],{"class":30,"line":50},[28,161664,4167],{"class":207},[28,161666,161667],{"class":211}," weight ",[28,161669,794],{"class":207},[28,161671,161672],{"class":211}," height ",[28,161674,10738],{"class":207},[28,161676,47774],{"class":38},[14,161678,161679],{},"查看说明：",[18,161681,161683],{"className":30429,"code":161682,"language":30431,"meta":23,"style":23},"help(calculate_bmi)\n",[25,161684,161685],{"__ignoreMap":23},[28,161686,161687,161690],{"class":30,"line":31},[28,161688,161689],{"class":38},"help",[28,161691,161692],{"class":211},"(calculate_bmi)\n",[14,161694,161695],{},"较完整的写法：",[18,161697,161699],{"className":30429,"code":161698,"language":30431,"meta":23,"style":23},"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",[25,161700,161701,161709,161714,161719,161723,161728,161733,161738,161742],{"__ignoreMap":23},[28,161702,161703,161705,161707],{"class":30,"line":31},[28,161704,31998],{"class":207},[28,161706,161652],{"class":34},[28,161708,161655],{"class":211},[28,161710,161711],{"class":30,"line":42},[28,161712,161713],{"class":64},"    \"\"\"\n",[28,161715,161716],{"class":30,"line":50},[28,161717,161718],{"class":64},"    计算BMI。\n",[28,161720,161721],{"class":30,"line":58},[28,161722,2477],{"emptyLinePlaceholder":134},[28,161724,161725],{"class":30,"line":70},[28,161726,161727],{"class":64},"    :param weight: 体重，单位kg\n",[28,161729,161730],{"class":30,"line":78},[28,161731,161732],{"class":64},"    :param height: 身高，单位m\n",[28,161734,161735],{"class":30,"line":86},[28,161736,161737],{"class":64},"    :return: BMI数值\n",[28,161739,161740],{"class":30,"line":97},[28,161741,161713],{"class":64},[28,161743,161744,161746,161748,161750,161752,161754],{"class":30,"line":108},[28,161745,4167],{"class":207},[28,161747,161667],{"class":211},[28,161749,794],{"class":207},[28,161751,161672],{"class":211},[28,161753,10738],{"class":207},[28,161755,47774],{"class":38},[149,161757,161759],{"id":161758},"_59-变量作用域","5.9 变量作用域",[177,161761,161763],{"id":161762},"_591-局部变量","5.9.1 局部变量",[14,161765,161766],{},"在函数内部定义的变量，只能在函数内部使用。",[18,161768,161770],{"className":30429,"code":161769,"language":30431,"meta":23,"style":23},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[25,161771,161772,161781,161789,161795,161799,161803,161808],{"__ignoreMap":23},[28,161773,161774,161776,161779],{"class":30,"line":31},[28,161775,31998],{"class":207},[28,161777,161778],{"class":34}," test",[28,161780,32004],{"class":211},[28,161782,161783,161785,161787],{"class":30,"line":42},[28,161784,45644],{"class":211},[28,161786,257],{"class":207},[28,161788,58479],{"class":38},[28,161790,161791,161793],{"class":30,"line":50},[28,161792,31350],{"class":38},[28,161794,225],{"class":211},[28,161796,161797],{"class":30,"line":58},[28,161798,2477],{"emptyLinePlaceholder":134},[28,161800,161801],{"class":30,"line":70},[28,161802,2477],{"emptyLinePlaceholder":134},[28,161804,161805],{"class":30,"line":78},[28,161806,161807],{"class":211},"test()\n",[28,161809,161810,161812,161815],{"class":30,"line":86},[28,161811,30466],{"class":38},[28,161813,161814],{"class":211},"(num)  ",[28,161816,161817],{"class":269},"# 报错\n",[177,161819,161821],{"id":161820},"_592-全局变量","5.9.2 全局变量",[14,161823,161824],{},"在函数外部定义的变量，可以在函数内部读取。",[18,161826,161828],{"className":30429,"code":161827,"language":30431,"meta":23,"style":23},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[25,161829,161830,161838,161842,161846,161854,161860,161864,161868],{"__ignoreMap":23},[28,161831,161832,161834,161836],{"class":30,"line":31},[28,161833,146587],{"class":211},[28,161835,257],{"class":207},[28,161837,149404],{"class":64},[28,161839,161840],{"class":30,"line":42},[28,161841,2477],{"emptyLinePlaceholder":134},[28,161843,161844],{"class":30,"line":50},[28,161845,2477],{"emptyLinePlaceholder":134},[28,161847,161848,161850,161852],{"class":30,"line":58},[28,161849,31998],{"class":207},[28,161851,161047],{"class":34},[28,161853,32004],{"class":211},[28,161855,161856,161858],{"class":30,"line":70},[28,161857,31350],{"class":38},[28,161859,150711],{"class":211},[28,161861,161862],{"class":30,"line":78},[28,161863,2477],{"emptyLinePlaceholder":134},[28,161865,161866],{"class":30,"line":86},[28,161867,2477],{"emptyLinePlaceholder":134},[28,161869,161870],{"class":30,"line":97},[28,161871,161082],{"class":211},[14,161873,161874,161875,28436],{},"如果要在函数内部修改全局变量，需要 ",[25,161876,161877],{},"global",[18,161879,161881],{"className":30429,"code":161880,"language":30431,"meta":23,"style":23},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[25,161882,161883,161891,161895,161899,161908,161916,161924,161928,161932,161937],{"__ignoreMap":23},[28,161884,161885,161887,161889],{"class":30,"line":31},[28,161886,146742],{"class":211},[28,161888,257],{"class":207},[28,161890,47384],{"class":38},[28,161892,161893],{"class":30,"line":42},[28,161894,2477],{"emptyLinePlaceholder":134},[28,161896,161897],{"class":30,"line":50},[28,161898,2477],{"emptyLinePlaceholder":134},[28,161900,161901,161903,161906],{"class":30,"line":58},[28,161902,31998],{"class":207},[28,161904,161905],{"class":34}," add_count",[28,161907,32004],{"class":211},[28,161909,161910,161913],{"class":30,"line":70},[28,161911,161912],{"class":207},"    global",[28,161914,161915],{"class":211}," count\n",[28,161917,161918,161920,161922],{"class":30,"line":78},[28,161919,159484],{"class":211},[28,161921,9554],{"class":207},[28,161923,55750],{"class":38},[28,161925,161926],{"class":30,"line":86},[28,161927,2477],{"emptyLinePlaceholder":134},[28,161929,161930],{"class":30,"line":97},[28,161931,2477],{"emptyLinePlaceholder":134},[28,161933,161934],{"class":30,"line":108},[28,161935,161936],{"class":211},"add_count()\n",[28,161938,161939,161941],{"class":30,"line":1407},[28,161940,30466],{"class":38},[28,161942,161943],{"class":211},"(count)\n",[14,161945,161946],{},"不建议大量使用全局变量，项目变大后很难维护。",[149,161948,161950],{"id":161949},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161952,161953],{},"一个函数中可以调用另一个函数。",[18,161955,161957],{"className":30429,"code":161956,"language":30431,"meta":23,"style":23},"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",[25,161958,161959,161968,161982,161986,161990,161999,162004,162024,162045,162049,162053,162057],{"__ignoreMap":23},[28,161960,161961,161963,161966],{"class":30,"line":31},[28,161962,31998],{"class":207},[28,161964,161965],{"class":34}," print_line",[28,161967,32004],{"class":211},[28,161969,161970,161972,161974,161976,161978,161980],{"class":30,"line":42},[28,161971,31350],{"class":38},[28,161973,212],{"class":211},[28,161975,32534],{"class":64},[28,161977,6595],{"class":207},[28,161979,78716],{"class":38},[28,161981,218],{"class":211},[28,161983,161984],{"class":30,"line":50},[28,161985,2477],{"emptyLinePlaceholder":134},[28,161987,161988],{"class":30,"line":58},[28,161989,2477],{"emptyLinePlaceholder":134},[28,161991,161992,161994,161997],{"class":30,"line":70},[28,161993,31998],{"class":207},[28,161995,161996],{"class":34}," print_info",[28,161998,149426],{"class":211},[28,162000,162001],{"class":30,"line":78},[28,162002,162003],{"class":211},"    print_line()\n",[28,162005,162006,162008,162010,162012,162014,162016,162018,162020,162022],{"class":30,"line":86},[28,162007,31350],{"class":38},[28,162009,212],{"class":211},[28,162011,263],{"class":207},[28,162013,156733],{"class":64},[28,162015,1106],{"class":38},[28,162017,79861],{"class":211},[28,162019,1156],{"class":38},[28,162021,461],{"class":64},[28,162023,218],{"class":211},[28,162025,162026,162028,162030,162032,162035,162037,162039,162041,162043],{"class":30,"line":97},[28,162027,31350],{"class":38},[28,162029,212],{"class":211},[28,162031,263],{"class":207},[28,162033,162034],{"class":64},"\"年龄:",[28,162036,1106],{"class":38},[28,162038,70272],{"class":211},[28,162040,1156],{"class":38},[28,162042,461],{"class":64},[28,162044,218],{"class":211},[28,162046,162047],{"class":30,"line":108},[28,162048,162003],{"class":211},[28,162050,162051],{"class":30,"line":1407},[28,162052,2477],{"emptyLinePlaceholder":134},[28,162054,162055],{"class":30,"line":1690},[28,162056,2477],{"emptyLinePlaceholder":134},[28,162058,162059,162062,162064,162066,162068],{"class":30,"line":1695},[28,162060,162061],{"class":211},"print_info(",[28,162063,149939],{"class":64},[28,162065,12512],{"class":211},[28,162067,860],{"class":38},[28,162069,218],{"class":211},[14,162071,162072],{},"这种方式可以把小功能组合成大功能。",[149,162074,162076],{"id":162075},"_511-参数检查","5.11 参数检查",[14,162078,162079],{},"函数内部可以检查参数是否合法。",[18,162081,162083],{"className":30429,"code":162082,"language":30431,"meta":23,"style":23},"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",[25,162084,162085,162094,162106,162112,162122,162126,162130,162147,162151,162163,162174,162180],{"__ignoreMap":23},[28,162086,162087,162089,162092],{"class":30,"line":31},[28,162088,31998],{"class":207},[28,162090,162091],{"class":34}," divide",[28,162093,151144],{"class":211},[28,162095,162096,162098,162100,162102,162104],{"class":30,"line":42},[28,162097,3178],{"class":207},[28,162099,10959],{"class":211},[28,162101,3026],{"class":207},[28,162103,4170],{"class":38},[28,162105,3816],{"class":211},[28,162107,162108,162110],{"class":30,"line":50},[28,162109,14829],{"class":207},[28,162111,152223],{"class":38},[28,162113,162114,162116,162118,162120],{"class":30,"line":58},[28,162115,4167],{"class":207},[28,162117,10946],{"class":211},[28,162119,794],{"class":207},[28,162121,151155],{"class":211},[28,162123,162124],{"class":30,"line":70},[28,162125,2477],{"emptyLinePlaceholder":134},[28,162127,162128],{"class":30,"line":78},[28,162129,2477],{"emptyLinePlaceholder":134},[28,162131,162132,162134,162136,162139,162141,162143,162145],{"class":30,"line":86},[28,162133,161357],{"class":211},[28,162135,257],{"class":207},[28,162137,162138],{"class":211}," divide(",[28,162140,656],{"class":38},[28,162142,12512],{"class":211},[28,162144,401],{"class":38},[28,162146,218],{"class":211},[28,162148,162149],{"class":30,"line":97},[28,162150,2477],{"emptyLinePlaceholder":134},[28,162152,162153,162155,162157,162159,162161],{"class":30,"line":108},[28,162154,1609],{"class":207},[28,162156,161603],{"class":211},[28,162158,38978],{"class":207},[28,162160,38984],{"class":38},[28,162162,3816],{"class":211},[28,162164,162165,162167,162169,162172],{"class":30,"line":1407},[28,162166,31350],{"class":38},[28,162168,212],{"class":211},[28,162170,162171],{"class":64},"\"除数不能为0\"",[28,162173,218],{"class":211},[28,162175,162176,162178],{"class":30,"line":1690},[28,162177,1779],{"class":207},[28,162179,3816],{"class":211},[28,162181,162182,162184],{"class":30,"line":1695},[28,162183,31350],{"class":38},[28,162185,76636],{"class":211},[149,162187,162189],{"id":162188},"_512-类型提示","5.12 类型提示",[14,162191,162192],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[18,162194,162196],{"className":30429,"code":162195,"language":30431,"meta":23,"style":23},"def add(a: int, b: int) -> int:\n    return a + b\n",[25,162197,162198,162221],{"__ignoreMap":23},[28,162199,162200,162202,162204,162207,162209,162212,162214,162217,162219],{"class":30,"line":31},[28,162201,31998],{"class":207},[28,162203,5286],{"class":34},[28,162205,162206],{"class":211},"(a: ",[28,162208,215],{"class":38},[28,162210,162211],{"class":211},", b: ",[28,162213,215],{"class":38},[28,162215,162216],{"class":211},") -> ",[28,162218,215],{"class":38},[28,162220,3816],{"class":211},[28,162222,162223,162225,162227,162229],{"class":30,"line":42},[28,162224,4167],{"class":207},[28,162226,10946],{"class":211},[28,162228,691],{"class":207},[28,162230,151155],{"class":211},[14,162232,162233],{},"字符串参数：",[18,162235,162237],{"className":30429,"code":162236,"language":30431,"meta":23,"style":23},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[25,162238,162239,162256],{"__ignoreMap":23},[28,162240,162241,162243,162245,162248,162250,162252,162254],{"class":30,"line":31},[28,162242,31998],{"class":207},[28,162244,161047],{"class":34},[28,162246,162247],{"class":211},"(name: ",[28,162249,1379],{"class":38},[28,162251,162216],{"class":211},[28,162253,95737],{"class":38},[28,162255,3816],{"class":211},[28,162257,162258,162260,162262,162264,162266,162268,162270,162272,162274],{"class":30,"line":42},[28,162259,31350],{"class":38},[28,162261,212],{"class":211},[28,162263,263],{"class":207},[28,162265,157105],{"class":64},[28,162267,1106],{"class":38},[28,162269,79861],{"class":211},[28,162271,1156],{"class":38},[28,162273,461],{"class":64},[28,162275,218],{"class":211},[14,162277,162278],{},"列表参数：",[18,162280,162282],{"className":30429,"code":162281,"language":30431,"meta":23,"style":23},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[25,162283,162284,162303,162311,162323,162332],{"__ignoreMap":23},[28,162285,162286,162288,162291,162294,162296,162299,162301],{"class":30,"line":31},[28,162287,31998],{"class":207},[28,162289,162290],{"class":34}," get_total",[28,162292,162293],{"class":211},"(numbers: list[",[28,162295,215],{"class":38},[28,162297,162298],{"class":211},"]) -> ",[28,162300,215],{"class":38},[28,162302,3816],{"class":211},[28,162304,162305,162307,162309],{"class":30,"line":42},[28,162306,159358],{"class":211},[28,162308,257],{"class":207},[28,162310,47384],{"class":38},[28,162312,162313,162315,162318,162320],{"class":30,"line":50},[28,162314,3278],{"class":207},[28,162316,162317],{"class":211}," number ",[28,162319,26094],{"class":207},[28,162321,162322],{"class":211}," numbers:\n",[28,162324,162325,162327,162329],{"class":30,"line":58},[28,162326,160033],{"class":211},[28,162328,9554],{"class":207},[28,162330,162331],{"class":211}," number\n",[28,162333,162334,162336],{"class":30,"line":70},[28,162335,4167],{"class":207},[28,162337,162338],{"class":211}," total\n",[14,162340,162341],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[149,162343,162345],{"id":162344},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[18,162347,162349],{"className":30429,"code":162348,"language":30431,"meta":23,"style":23},"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",[25,162350,162351,162361,162365,162369,162377,162388,162398,162408,162418,162428,162432,162436,162445,162467,162471,162475,162484,162490,162510,162522,162533,162537,162546,162557,162562,162566,162570,162579,162585,162604,162616,162626,162630,162641,162651,162655,162663,162674,162678,162682,162686,162694,162699,162713,162717,162729,162734,162746,162751,162763,162768,162780,162790,162794,162800],{"__ignoreMap":23},[28,162352,162353,162356,162358],{"class":30,"line":31},[28,162354,162355],{"class":211},"balance ",[28,162357,257],{"class":207},[28,162359,162360],{"class":38}," 1000\n",[28,162362,162363],{"class":30,"line":42},[28,162364,2477],{"emptyLinePlaceholder":134},[28,162366,162367],{"class":30,"line":50},[28,162368,2477],{"emptyLinePlaceholder":134},[28,162370,162371,162373,162375],{"class":30,"line":58},[28,162372,31998],{"class":207},[28,162374,152084],{"class":34},[28,162376,32004],{"class":211},[28,162378,162379,162381,162383,162386],{"class":30,"line":70},[28,162380,31350],{"class":38},[28,162382,212],{"class":211},[28,162384,162385],{"class":64},"\"====== ATM ======\"",[28,162387,218],{"class":211},[28,162389,162390,162392,162394,162396],{"class":30,"line":78},[28,162391,31350],{"class":38},[28,162393,212],{"class":211},[28,162395,160699],{"class":64},[28,162397,218],{"class":211},[28,162399,162400,162402,162404,162406],{"class":30,"line":86},[28,162401,31350],{"class":38},[28,162403,212],{"class":211},[28,162405,160710],{"class":64},[28,162407,218],{"class":211},[28,162409,162410,162412,162414,162416],{"class":30,"line":97},[28,162411,31350],{"class":38},[28,162413,212],{"class":211},[28,162415,160721],{"class":64},[28,162417,218],{"class":211},[28,162419,162420,162422,162424,162426],{"class":30,"line":108},[28,162421,31350],{"class":38},[28,162423,212],{"class":211},[28,162425,160732],{"class":64},[28,162427,218],{"class":211},[28,162429,162430],{"class":30,"line":1407},[28,162431,2477],{"emptyLinePlaceholder":134},[28,162433,162434],{"class":30,"line":1690},[28,162435,2477],{"emptyLinePlaceholder":134},[28,162437,162438,162440,162443],{"class":30,"line":1695},[28,162439,31998],{"class":207},[28,162441,162442],{"class":34}," show_balance",[28,162444,32004],{"class":211},[28,162446,162447,162449,162451,162453,162456,162458,162461,162463,162465],{"class":30,"line":1701},[28,162448,31350],{"class":38},[28,162450,212],{"class":211},[28,162452,263],{"class":207},[28,162454,162455],{"class":64},"\"当前余额:",[28,162457,1106],{"class":38},[28,162459,162460],{"class":211},"balance",[28,162462,1156],{"class":38},[28,162464,157063],{"class":64},[28,162466,218],{"class":211},[28,162468,162469],{"class":30,"line":1706},[28,162470,2477],{"emptyLinePlaceholder":134},[28,162472,162473],{"class":30,"line":1720},[28,162474,2477],{"emptyLinePlaceholder":134},[28,162476,162477,162479,162482],{"class":30,"line":1725},[28,162478,31998],{"class":207},[28,162480,162481],{"class":34}," save_money",[28,162483,32004],{"class":211},[28,162485,162486,162488],{"class":30,"line":1731},[28,162487,161912],{"class":207},[28,162489,150150],{"class":211},[28,162491,162492,162495,162497,162499,162501,162503,162505,162508],{"class":30,"line":1752},[28,162493,162494],{"class":211},"    money ",[28,162496,257],{"class":207},[28,162498,109848],{"class":38},[28,162500,212],{"class":211},[28,162502,53872],{"class":38},[28,162504,212],{"class":211},[28,162506,162507],{"class":64},"\"请输入存款金额:\"",[28,162509,30548],{"class":211},[28,162511,162512,162514,162516,162518,162520],{"class":30,"line":1757},[28,162513,3178],{"class":207},[28,162515,150193],{"class":211},[28,162517,1666],{"class":207},[28,162519,4170],{"class":38},[28,162521,3816],{"class":211},[28,162523,162524,162526,162528,162531],{"class":30,"line":1771},[28,162525,32502],{"class":38},[28,162527,212],{"class":211},[28,162529,162530],{"class":64},"\"金额必须大于0\"",[28,162532,218],{"class":211},[28,162534,162535],{"class":30,"line":1776},[28,162536,152412],{"class":207},[28,162538,162539,162542,162544],{"class":30,"line":1805},[28,162540,162541],{"class":211},"    balance ",[28,162543,9554],{"class":207},[28,162545,150226],{"class":211},[28,162547,162548,162550,162552,162555],{"class":30,"line":1810},[28,162549,31350],{"class":38},[28,162551,212],{"class":211},[28,162553,162554],{"class":64},"\"存款成功\"",[28,162556,218],{"class":211},[28,162558,162559],{"class":30,"line":1827},[28,162560,162561],{"class":211},"    show_balance()\n",[28,162563,162564],{"class":30,"line":1832},[28,162565,2477],{"emptyLinePlaceholder":134},[28,162567,162568],{"class":30,"line":1837},[28,162569,2477],{"emptyLinePlaceholder":134},[28,162571,162572,162574,162577],{"class":30,"line":1842},[28,162573,31998],{"class":207},[28,162575,162576],{"class":34}," withdraw_money",[28,162578,32004],{"class":211},[28,162580,162581,162583],{"class":30,"line":1856},[28,162582,161912],{"class":207},[28,162584,150150],{"class":211},[28,162586,162587,162589,162591,162593,162595,162597,162599,162602],{"class":30,"line":1861},[28,162588,162494],{"class":211},[28,162590,257],{"class":207},[28,162592,109848],{"class":38},[28,162594,212],{"class":211},[28,162596,53872],{"class":38},[28,162598,212],{"class":211},[28,162600,162601],{"class":64},"\"请输入取款金额:\"",[28,162603,30548],{"class":211},[28,162605,162606,162608,162610,162612,162614],{"class":30,"line":2654},[28,162607,3178],{"class":207},[28,162609,150193],{"class":211},[28,162611,1666],{"class":207},[28,162613,4170],{"class":38},[28,162615,3816],{"class":211},[28,162617,162618,162620,162622,162624],{"class":30,"line":2668},[28,162619,32502],{"class":38},[28,162621,212],{"class":211},[28,162623,162530],{"class":64},[28,162625,218],{"class":211},[28,162627,162628],{"class":30,"line":2676},[28,162629,152412],{"class":207},[28,162631,162632,162634,162636,162638],{"class":30,"line":2681},[28,162633,3178],{"class":207},[28,162635,150193],{"class":211},[28,162637,1170],{"class":207},[28,162639,162640],{"class":211}," balance:\n",[28,162642,162643,162645,162647,162649],{"class":30,"line":2687},[28,162644,32502],{"class":38},[28,162646,212],{"class":211},[28,162648,150288],{"class":64},[28,162650,218],{"class":211},[28,162652,162653],{"class":30,"line":2693},[28,162654,152412],{"class":207},[28,162656,162657,162659,162661],{"class":30,"line":2698},[28,162658,162541],{"class":211},[28,162660,150303],{"class":207},[28,162662,150226],{"class":211},[28,162664,162665,162667,162669,162672],{"class":30,"line":8025},[28,162666,31350],{"class":38},[28,162668,212],{"class":211},[28,162670,162671],{"class":64},"\"取款成功\"",[28,162673,218],{"class":211},[28,162675,162676],{"class":30,"line":8049},[28,162677,162561],{"class":211},[28,162679,162680],{"class":30,"line":8054},[28,162681,2477],{"emptyLinePlaceholder":134},[28,162683,162684],{"class":30,"line":8060},[28,162685,2477],{"emptyLinePlaceholder":134},[28,162687,162688,162690,162692],{"class":30,"line":8087},[28,162689,108714],{"class":207},[28,162691,95343],{"class":38},[28,162693,3816],{"class":211},[28,162695,162696],{"class":30,"line":8092},[28,162697,162698],{"class":211},"    show_menu()\n",[28,162700,162701,162703,162705,162707,162709,162711],{"class":30,"line":8098},[28,162702,160743],{"class":211},[28,162704,257],{"class":207},[28,162706,60656],{"class":38},[28,162708,212],{"class":211},[28,162710,153124],{"class":64},[28,162712,218],{"class":211},[28,162714,162715],{"class":30,"line":8110},[28,162716,2477],{"emptyLinePlaceholder":134},[28,162718,162719,162721,162723,162725,162727],{"class":30,"line":8122},[28,162720,3178],{"class":207},[28,162722,153137],{"class":211},[28,162724,3026],{"class":207},[28,162726,153142],{"class":64},[28,162728,3816],{"class":211},[28,162730,162731],{"class":30,"line":8134},[28,162732,162733],{"class":211},"        show_balance()\n",[28,162735,162736,162738,162740,162742,162744],{"class":30,"line":9793},[28,162737,39344],{"class":207},[28,162739,153137],{"class":211},[28,162741,3026],{"class":207},[28,162743,153161],{"class":64},[28,162745,3816],{"class":211},[28,162747,162748],{"class":30,"line":9818},[28,162749,162750],{"class":211},"        save_money()\n",[28,162752,162753,162755,162757,162759,162761],{"class":30,"line":9841},[28,162754,39344],{"class":207},[28,162756,153137],{"class":211},[28,162758,3026],{"class":207},[28,162760,153179],{"class":64},[28,162762,3816],{"class":211},[28,162764,162765],{"class":30,"line":9865},[28,162766,162767],{"class":211},"        withdraw_money()\n",[28,162769,162770,162772,162774,162776,162778],{"class":30,"line":9870},[28,162771,39344],{"class":207},[28,162773,153137],{"class":211},[28,162775,3026],{"class":207},[28,162777,153233],{"class":64},[28,162779,3816],{"class":211},[28,162781,162782,162784,162786,162788],{"class":30,"line":9875},[28,162783,32502],{"class":38},[28,162785,212],{"class":211},[28,162787,153244],{"class":64},[28,162789,218],{"class":211},[28,162791,162792],{"class":30,"line":9880},[28,162793,31678],{"class":207},[28,162795,162796,162798],{"class":30,"line":9889},[28,162797,158073],{"class":207},[28,162799,3816],{"class":211},[28,162801,162802,162804,162806,162808],{"class":30,"line":9894},[28,162803,32502],{"class":38},[28,162805,212],{"class":211},[28,162807,153265],{"class":64},[28,162809,218],{"class":211},[14,162811,162812],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[149,162814,162816],{"id":162815},"_514-易错点","5.14 易错点",[161,162818,162819,162822,162825,162830,162835,162838],{},[119,162820,162821],{},"函数定义后必须调用才会执行。",[119,162823,162824],{},"函数名后面有括号才是调用。",[119,162826,162827,162829],{},[25,162828,17123],{}," 后面的代码不会执行。",[119,162831,162832,162833,28436],{},"没有返回值的函数默认返回 ",[25,162834,95737],{},[119,162836,162837],{},"局部变量不能在函数外部访问。",[119,162839,162840,162841,162843],{},"不要滥用 ",[25,162842,161877],{},"，更好的方式是让函数返回新值。",[14,162845,162846,162847,162849],{},"例如不用 ",[25,162848,161877],{}," 改写存款：",[18,162851,162853],{"className":30429,"code":162852,"language":30431,"meta":23,"style":23},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[25,162854,162855,162864,162875,162879,162883,162891,162904],{"__ignoreMap":23},[28,162856,162857,162859,162861],{"class":30,"line":31},[28,162858,31998],{"class":207},[28,162860,162481],{"class":34},[28,162862,162863],{"class":211},"(balance, money):\n",[28,162865,162866,162868,162871,162873],{"class":30,"line":42},[28,162867,4167],{"class":207},[28,162869,162870],{"class":211}," balance ",[28,162872,691],{"class":207},[28,162874,150226],{"class":211},[28,162876,162877],{"class":30,"line":50},[28,162878,2477],{"emptyLinePlaceholder":134},[28,162880,162881],{"class":30,"line":58},[28,162882,2477],{"emptyLinePlaceholder":134},[28,162884,162885,162887,162889],{"class":30,"line":70},[28,162886,162355],{"class":211},[28,162888,257],{"class":207},[28,162890,162360],{"class":38},[28,162892,162893,162895,162897,162900,162902],{"class":30,"line":78},[28,162894,162355],{"class":211},[28,162896,257],{"class":207},[28,162898,162899],{"class":211}," save_money(balance, ",[28,162901,1800],{"class":38},[28,162903,218],{"class":211},[28,162905,162906,162908],{"class":30,"line":86},[28,162907,30466],{"class":38},[28,162909,162910],{"class":211},"(balance)\n",[149,162912,162914],{"id":162913},"_515-本章练习","5.15 本章练习",[161,162916,162917,162924,162930,162936,162942],{},[119,162918,162919,162920,162923],{},"定义函数 ",[25,162921,162922],{},"print_student(name, age)","，输出学生信息。",[119,162925,162919,162926,162929],{},[25,162927,162928],{},"get_max(a, b, c)","，返回三个数中的最大值。",[119,162931,162919,162932,162935],{},[25,162933,162934],{},"is_even(num)","，判断一个数是否为偶数。",[119,162937,162919,162938,162941],{},[25,162939,162940],{},"calculate_bmi(weight, height)","，返回 BMI。",[119,162943,162944],{},"把第 4 章的菜单程序拆分成多个函数。",[126,162946,162947],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":23,"searchDepth":42,"depth":42,"links":162949},[162950,162951,162952,162953,162954,162955,162956,162957,162958,162962,162963,162964,162965,162966,162967],{"id":160970,"depth":42,"text":160971},{"id":161011,"depth":42,"text":161012},{"id":161101,"depth":42,"text":161102},{"id":161182,"depth":42,"text":161183},{"id":161315,"depth":42,"text":161316},{"id":161437,"depth":42,"text":161438},{"id":161559,"depth":42,"text":161560},{"id":161636,"depth":42,"text":161637},{"id":161758,"depth":42,"text":161759,"children":162959},[162960,162961],{"id":161762,"depth":50,"text":161763},{"id":161820,"depth":50,"text":161821},{"id":161949,"depth":42,"text":161950},{"id":162075,"depth":42,"text":162076},{"id":162188,"depth":42,"text":162189},{"id":162344,"depth":42,"text":162345},{"id":162815,"depth":42,"text":162816},{"id":162913,"depth":42,"text":162914},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160962,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162974,"title":162975,"body":162976,"description":131,"extension":132,"meta":166020,"navigation":134,"path":166021,"seo":166022,"stem":166023,"__hash__":166024},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162977,"toc":166001},[162978,162981,162985,162988,162991,163095,163098,163102,163105,163185,163188,163192,163195,163255,163258,163294,163297,163312,163316,163389,163392,163447,163450,163520,163523,163607,163617,163675,163679,163724,163727,163753,163756,163862,163866,163869,163911,163914,163978,163981,163985,163988,164049,164052,164082,164085,164123,164127,164130,164139,164142,164266,164269,164310,164314,164317,164328,164368,164371,164386,164391,164394,164461,164464,164554,164558,164561,164609,164612,164639,164641,164671,164674,164694,164697,164728,164731,164764,164768,164771,164795,164798,164822,164825,164849,164853,164856,164986,164989,165069,165072,165147,165151,165154,165204,165207,165249,165252,165276,165278,165302,165305,165360,165363,165429,165433,165436,165439,165477,165480,165533,165536,165582,165585,165618,165621,165625,165944,165948,165977,165981,165998],[10,162979,162975],{"id":162980},"_6-数据容器",[149,162982,162984],{"id":162983},"_61-什么是数据容器","6.1 什么是数据容器",[14,162986,162987],{},"数据容器用于一次保存多个数据。",[14,162989,162990],{},"常见容器：",[347,162992,162993,163010],{},[350,162994,162995],{},[353,162996,162997,162999,163002,163005,163008],{},[356,162998,25822],{},[356,163000,163001],{},"是否有序",[356,163003,163004],{},"是否可变",[356,163006,163007],{},"是否允许重复",[356,163009,27543],{},[394,163011,163012,163030,163046,163061,163078],{},[353,163013,163014,163017,163020,163023,163026],{},[399,163015,163016],{},"list列表",[399,163018,163019],{},"有序",[399,163021,163022],{},"可变",[399,163024,163025],{},"允许",[399,163027,163028],{},[25,163029,155308],{},[353,163031,163032,163035,163037,163040,163042],{},[399,163033,163034],{},"tuple元组",[399,163036,163019],{},[399,163038,163039],{},"不可变",[399,163041,163025],{},[399,163043,163044],{},[25,163045,155321],{},[353,163047,163048,163051,163053,163055,163057],{},[399,163049,163050],{},"str字符串",[399,163052,163019],{},[399,163054,163039],{},[399,163056,163025],{},[399,163058,163059],{},[25,163060,155931],{},[353,163062,163063,163066,163069,163071,163074],{},[399,163064,163065],{},"set集合",[399,163067,163068],{},"无序",[399,163070,163022],{},[399,163072,163073],{},"不允许",[399,163075,163076],{},[25,163077,155346],{},[353,163079,163080,163083,163085,163087,163090],{},[399,163081,163082],{},"dict字典",[399,163084,163019],{},[399,163086,163022],{},[399,163088,163089],{},"key不允许重复",[399,163091,163092],{},[25,163093,163094],{},"{\"name\": \"小明\"}",[14,163096,163097],{},"Python 3.7 之后，字典保持插入顺序。",[149,163099,163101],{"id":163100},"_62-列表list","6.2 列表list",[14,163103,163104],{},"列表用于保存一组有顺序的数据。",[18,163106,163108],{"className":30429,"code":163107,"language":30431,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[25,163109,163110,163130,163155,163176],{"__ignoreMap":23},[28,163111,163112,163114,163116,163118,163120,163122,163124,163126,163128],{"class":30,"line":31},[28,163113,160431],{"class":211},[28,163115,257],{"class":207},[28,163117,52277],{"class":211},[28,163119,149939],{"class":64},[28,163121,12512],{"class":211},[28,163123,150987],{"class":64},[28,163125,12512],{"class":211},[28,163127,159782],{"class":64},[28,163129,33297],{"class":211},[28,163131,163132,163135,163137,163139,163141,163143,163145,163147,163149,163151,163153],{"class":30,"line":42},[28,163133,163134],{"class":211},"numbers ",[28,163136,257],{"class":207},[28,163138,52277],{"class":211},[28,163140,427],{"class":38},[28,163142,12512],{"class":211},[28,163144,288],{"class":38},[28,163146,12512],{"class":211},[28,163148,282],{"class":38},[28,163150,12512],{"class":211},[28,163152,503],{"class":38},[28,163154,33297],{"class":211},[28,163156,163157,163160,163162,163164,163166,163168,163170,163172,163174],{"class":30,"line":50},[28,163158,163159],{"class":211},"mixed ",[28,163161,257],{"class":207},[28,163163,52277],{"class":211},[28,163165,149939],{"class":64},[28,163167,12512],{"class":211},[28,163169,860],{"class":38},[28,163171,12512],{"class":211},[28,163173,31527],{"class":38},[28,163175,33297],{"class":211},[28,163177,163178,163181,163183],{"class":30,"line":58},[28,163179,163180],{"class":211},"empty ",[28,163182,257],{"class":207},[28,163184,51889],{"class":211},[14,163186,163187],{},"推荐一个列表中保存同类数据，代码更清晰。",[149,163189,163191],{"id":163190},"_63-列表索引","6.3 列表索引",[14,163193,163194],{},"正向索引从 0 开始：",[18,163196,163198],{"className":30429,"code":163197,"language":30431,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[25,163199,163200,163220,163224,163235,163245],{"__ignoreMap":23},[28,163201,163202,163204,163206,163208,163210,163212,163214,163216,163218],{"class":30,"line":31},[28,163203,160431],{"class":211},[28,163205,257],{"class":207},[28,163207,52277],{"class":211},[28,163209,149939],{"class":64},[28,163211,12512],{"class":211},[28,163213,150987],{"class":64},[28,163215,12512],{"class":211},[28,163217,159782],{"class":64},[28,163219,33297],{"class":211},[28,163221,163222],{"class":30,"line":42},[28,163223,2477],{"emptyLinePlaceholder":134},[28,163225,163226,163228,163231,163233],{"class":30,"line":50},[28,163227,30466],{"class":38},[28,163229,163230],{"class":211},"(names[",[28,163232,401],{"class":38},[28,163234,4734],{"class":211},[28,163236,163237,163239,163241,163243],{"class":30,"line":58},[28,163238,30466],{"class":38},[28,163240,163230],{"class":211},[28,163242,427],{"class":38},[28,163244,4734],{"class":211},[28,163246,163247,163249,163251,163253],{"class":30,"line":70},[28,163248,30466],{"class":38},[28,163250,163230],{"class":211},[28,163252,288],{"class":38},[28,163254,4734],{"class":211},[14,163256,163257],{},"反向索引从 -1 开始：",[18,163259,163261],{"className":30429,"code":163260,"language":30431,"meta":23,"style":23},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[25,163262,163263,163279],{"__ignoreMap":23},[28,163264,163265,163267,163269,163271,163273,163276],{"class":30,"line":31},[28,163266,30466],{"class":38},[28,163268,163230],{"class":211},[28,163270,742],{"class":207},[28,163272,427],{"class":38},[28,163274,163275],{"class":211},"])  ",[28,163277,163278],{"class":269},"# 小刚\n",[28,163280,163281,163283,163285,163287,163289,163291],{"class":30,"line":42},[28,163282,30466],{"class":38},[28,163284,163230],{"class":211},[28,163286,742],{"class":207},[28,163288,288],{"class":38},[28,163290,163275],{"class":211},[28,163292,163293],{"class":269},"# 小红\n",[14,163295,163296],{},"索引越界会报错：",[18,163298,163300],{"className":30429,"code":163299,"language":30431,"meta":23,"style":23},"print(names[3])\n",[25,163301,163302],{"__ignoreMap":23},[28,163303,163304,163306,163308,163310],{"class":30,"line":31},[28,163305,30466],{"class":38},[28,163307,163230],{"class":211},[28,163309,282],{"class":38},[28,163311,4734],{"class":211},[149,163313,163315],{"id":163314},"_64-列表常用方法","6.4 列表常用方法",[18,163317,163319],{"className":30429,"code":163318,"language":30431,"meta":23,"style":23},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[25,163320,163321,163337,163341,163350,163364,163378,163382],{"__ignoreMap":23},[28,163322,163323,163325,163327,163329,163331,163333,163335],{"class":30,"line":31},[28,163324,160431],{"class":211},[28,163326,257],{"class":207},[28,163328,52277],{"class":211},[28,163330,149939],{"class":64},[28,163332,12512],{"class":211},[28,163334,150987],{"class":64},[28,163336,33297],{"class":211},[28,163338,163339],{"class":30,"line":42},[28,163340,2477],{"emptyLinePlaceholder":134},[28,163342,163343,163346,163348],{"class":30,"line":50},[28,163344,163345],{"class":211},"names.append(",[28,163347,159782],{"class":64},[28,163349,218],{"class":211},[28,163351,163352,163355,163357,163359,163362],{"class":30,"line":58},[28,163353,163354],{"class":211},"names.insert(",[28,163356,427],{"class":38},[28,163358,12512],{"class":211},[28,163360,163361],{"class":64},"\"小李\"",[28,163363,218],{"class":211},[28,163365,163366,163369,163371,163373,163376],{"class":30,"line":70},[28,163367,163368],{"class":211},"names.extend([",[28,163370,8760],{"class":64},[28,163372,12512],{"class":211},[28,163374,163375],{"class":64},"\"小赵\"",[28,163377,4734],{"class":211},[28,163379,163380],{"class":30,"line":78},[28,163381,2477],{"emptyLinePlaceholder":134},[28,163383,163384,163386],{"class":30,"line":86},[28,163385,30466],{"class":38},[28,163387,163388],{"class":211},"(names)\n",[14,163390,163391],{},"删除元素：",[18,163393,163395],{"className":30429,"code":163394,"language":30431,"meta":23,"style":23},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[25,163396,163397,163406,163416,163430,163442],{"__ignoreMap":23},[28,163398,163399,163402,163404],{"class":30,"line":31},[28,163400,163401],{"class":211},"names.remove(",[28,163403,150987],{"class":64},[28,163405,218],{"class":211},[28,163407,163408,163411,163413],{"class":30,"line":42},[28,163409,163410],{"class":211},"last ",[28,163412,257],{"class":207},[28,163414,163415],{"class":211}," names.pop()\n",[28,163417,163418,163421,163423,163426,163428],{"class":30,"line":50},[28,163419,163420],{"class":211},"first ",[28,163422,257],{"class":207},[28,163424,163425],{"class":211}," names.pop(",[28,163427,401],{"class":38},[28,163429,218],{"class":211},[28,163431,163432,163435,163438,163440],{"class":30,"line":58},[28,163433,163434],{"class":207},"del",[28,163436,163437],{"class":211}," names[",[28,163439,401],{"class":38},[28,163441,33297],{"class":211},[28,163443,163444],{"class":30,"line":70},[28,163445,163446],{"class":211},"names.clear()\n",[14,163448,163449],{},"查询和统计：",[18,163451,163453],{"className":30429,"code":163452,"language":30431,"meta":23,"style":23},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[25,163454,163455,163483,163487,163498,163509],{"__ignoreMap":23},[28,163456,163457,163459,163461,163463,163465,163467,163469,163471,163473,163475,163477,163479,163481],{"class":30,"line":31},[28,163458,163134],{"class":211},[28,163460,257],{"class":207},[28,163462,52277],{"class":211},[28,163464,427],{"class":38},[28,163466,12512],{"class":211},[28,163468,288],{"class":38},[28,163470,12512],{"class":211},[28,163472,282],{"class":38},[28,163474,12512],{"class":211},[28,163476,288],{"class":38},[28,163478,12512],{"class":211},[28,163480,503],{"class":38},[28,163482,33297],{"class":211},[28,163484,163485],{"class":30,"line":42},[28,163486,2477],{"emptyLinePlaceholder":134},[28,163488,163489,163491,163494,163496],{"class":30,"line":50},[28,163490,30466],{"class":38},[28,163492,163493],{"class":211},"(numbers.index(",[28,163495,282],{"class":38},[28,163497,30548],{"class":211},[28,163499,163500,163502,163505,163507],{"class":30,"line":58},[28,163501,30466],{"class":38},[28,163503,163504],{"class":211},"(numbers.count(",[28,163506,288],{"class":38},[28,163508,30548],{"class":211},[28,163510,163511,163513,163515,163517],{"class":30,"line":70},[28,163512,30466],{"class":38},[28,163514,212],{"class":211},[28,163516,7435],{"class":38},[28,163518,163519],{"class":211},"(numbers))\n",[14,163521,163522],{},"排序：",[18,163524,163526],{"className":30429,"code":163525,"language":30431,"meta":23,"style":23},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[25,163527,163528,163552,163556,163561,163568,163572,163586,163592,163596,163601],{"__ignoreMap":23},[28,163529,163530,163532,163534,163536,163538,163540,163542,163544,163546,163548,163550],{"class":30,"line":31},[28,163531,163134],{"class":211},[28,163533,257],{"class":207},[28,163535,52277],{"class":211},[28,163537,282],{"class":38},[28,163539,12512],{"class":211},[28,163541,427],{"class":38},[28,163543,12512],{"class":211},[28,163545,529],{"class":38},[28,163547,12512],{"class":211},[28,163549,288],{"class":38},[28,163551,33297],{"class":211},[28,163553,163554],{"class":30,"line":42},[28,163555,2477],{"emptyLinePlaceholder":134},[28,163557,163558],{"class":30,"line":50},[28,163559,163560],{"class":211},"numbers.sort()\n",[28,163562,163563,163565],{"class":30,"line":58},[28,163564,30466],{"class":38},[28,163566,163567],{"class":211},"(numbers)\n",[28,163569,163570],{"class":30,"line":70},[28,163571,2477],{"emptyLinePlaceholder":134},[28,163573,163574,163577,163580,163582,163584],{"class":30,"line":78},[28,163575,163576],{"class":211},"numbers.sort(",[28,163578,163579],{"class":5293},"reverse",[28,163581,257],{"class":207},[28,163583,31527],{"class":38},[28,163585,218],{"class":211},[28,163587,163588,163590],{"class":30,"line":86},[28,163589,30466],{"class":38},[28,163591,163567],{"class":211},[28,163593,163594],{"class":30,"line":97},[28,163595,2477],{"emptyLinePlaceholder":134},[28,163597,163598],{"class":30,"line":108},[28,163599,163600],{"class":211},"numbers.reverse()\n",[28,163602,163603,163605],{"class":30,"line":1407},[28,163604,30466],{"class":38},[28,163606,163567],{"class":211},[14,163608,163609,163612,163613,163616],{},[25,163610,163611],{},"sort()"," 会修改原列表，",[25,163614,163615],{},"sorted()"," 返回新列表。",[18,163618,163620],{"className":30429,"code":163619,"language":30431,"meta":23,"style":23},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[25,163621,163622,163646,163658,163662,163668],{"__ignoreMap":23},[28,163623,163624,163626,163628,163630,163632,163634,163636,163638,163640,163642,163644],{"class":30,"line":31},[28,163625,163134],{"class":211},[28,163627,257],{"class":207},[28,163629,52277],{"class":211},[28,163631,282],{"class":38},[28,163633,12512],{"class":211},[28,163635,427],{"class":38},[28,163637,12512],{"class":211},[28,163639,529],{"class":38},[28,163641,12512],{"class":211},[28,163643,288],{"class":38},[28,163645,33297],{"class":211},[28,163647,163648,163651,163653,163656],{"class":30,"line":42},[28,163649,163650],{"class":211},"new_numbers ",[28,163652,257],{"class":207},[28,163654,163655],{"class":38}," sorted",[28,163657,163567],{"class":211},[28,163659,163660],{"class":30,"line":50},[28,163661,2477],{"emptyLinePlaceholder":134},[28,163663,163664,163666],{"class":30,"line":58},[28,163665,30466],{"class":38},[28,163667,163567],{"class":211},[28,163669,163670,163672],{"class":30,"line":70},[28,163671,30466],{"class":38},[28,163673,163674],{"class":211},"(new_numbers)\n",[149,163676,163678],{"id":163677},"_65-列表遍历","6.5 列表遍历",[18,163680,163682],{"className":30429,"code":163681,"language":30431,"meta":23,"style":23},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[25,163683,163684,163704,163708,163718],{"__ignoreMap":23},[28,163685,163686,163688,163690,163692,163694,163696,163698,163700,163702],{"class":30,"line":31},[28,163687,160431],{"class":211},[28,163689,257],{"class":207},[28,163691,52277],{"class":211},[28,163693,149939],{"class":64},[28,163695,12512],{"class":211},[28,163697,150987],{"class":64},[28,163699,12512],{"class":211},[28,163701,159782],{"class":64},[28,163703,33297],{"class":211},[28,163705,163706],{"class":30,"line":42},[28,163707,2477],{"emptyLinePlaceholder":134},[28,163709,163710,163712,163714,163716],{"class":30,"line":50},[28,163711,3102],{"class":207},[28,163713,160467],{"class":211},[28,163715,26094],{"class":207},[28,163717,160472],{"class":211},[28,163719,163720,163722],{"class":30,"line":58},[28,163721,31350],{"class":38},[28,163723,150711],{"class":211},[14,163725,163726],{},"需要索引时：",[18,163728,163730],{"className":30429,"code":163729,"language":30431,"meta":23,"style":23},"for index, name in enumerate(names):\n    print(index, name)\n",[25,163731,163732,163746],{"__ignoreMap":23},[28,163733,163734,163736,163739,163741,163743],{"class":30,"line":31},[28,163735,3102],{"class":207},[28,163737,163738],{"class":211}," index, name ",[28,163740,26094],{"class":207},[28,163742,31657],{"class":38},[28,163744,163745],{"class":211},"(names):\n",[28,163747,163748,163750],{"class":30,"line":42},[28,163749,31350],{"class":38},[28,163751,163752],{"class":211},"(index, name)\n",[14,163754,163755],{},"统计总分：",[18,163757,163759],{"className":30429,"code":163758,"language":30431,"meta":23,"style":23},"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",[25,163760,163761,163786,163794,163798,163809,163817,163821,163838],{"__ignoreMap":23},[28,163762,163763,163766,163768,163770,163772,163774,163776,163778,163780,163782,163784],{"class":30,"line":31},[28,163764,163765],{"class":211},"scores ",[28,163767,257],{"class":207},[28,163769,52277],{"class":211},[28,163771,1072],{"class":38},[28,163773,12512],{"class":211},[28,163775,946],{"class":38},[28,163777,12512],{"class":211},[28,163779,464],{"class":38},[28,163781,12512],{"class":211},[28,163783,771],{"class":38},[28,163785,33297],{"class":211},[28,163787,163788,163790,163792],{"class":30,"line":42},[28,163789,157311],{"class":211},[28,163791,257],{"class":207},[28,163793,47384],{"class":38},[28,163795,163796],{"class":30,"line":50},[28,163797,2477],{"emptyLinePlaceholder":134},[28,163799,163800,163802,163804,163806],{"class":30,"line":58},[28,163801,3102],{"class":207},[28,163803,157834],{"class":211},[28,163805,26094],{"class":207},[28,163807,163808],{"class":211}," scores:\n",[28,163810,163811,163813,163815],{"class":30,"line":70},[28,163812,159358],{"class":211},[28,163814,9554],{"class":207},[28,163816,1657],{"class":211},[28,163818,163819],{"class":30,"line":78},[28,163820,2477],{"emptyLinePlaceholder":134},[28,163822,163823,163826,163828,163831,163833,163835],{"class":30,"line":86},[28,163824,163825],{"class":211},"avg ",[28,163827,257],{"class":207},[28,163829,163830],{"class":211}," total ",[28,163832,794],{"class":207},[28,163834,7408],{"class":38},[28,163836,163837],{"class":211},"(scores)\n",[28,163839,163840,163842,163844,163846,163849,163851,163854,163856,163858,163860],{"class":30,"line":97},[28,163841,30466],{"class":38},[28,163843,212],{"class":211},[28,163845,263],{"class":207},[28,163847,163848],{"class":64},"\"平均分:",[28,163850,1106],{"class":38},[28,163852,163853],{"class":211},"avg",[28,163855,157210],{"class":207},[28,163857,1156],{"class":38},[28,163859,461],{"class":64},[28,163861,218],{"class":211},[149,163863,163865],{"id":163864},"_66-元组tuple","6.6 元组tuple",[14,163867,163868],{},"元组和列表类似，但不可修改。",[18,163870,163872],{"className":30429,"code":163871,"language":30431,"meta":23,"style":23},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[25,163873,163874,163891],{"__ignoreMap":23},[28,163875,163876,163879,163881,163883,163885,163887,163889],{"class":30,"line":31},[28,163877,163878],{"class":211},"point ",[28,163880,257],{"class":207},[28,163882,1736],{"class":211},[28,163884,656],{"class":38},[28,163886,12512],{"class":211},[28,163888,910],{"class":38},[28,163890,218],{"class":211},[28,163892,163893,163895,163897,163899,163901,163903,163905,163907,163909],{"class":30,"line":42},[28,163894,116365],{"class":211},[28,163896,257],{"class":207},[28,163898,1736],{"class":211},[28,163900,149939],{"class":64},[28,163902,12512],{"class":211},[28,163904,860],{"class":38},[28,163906,12512],{"class":211},[28,163908,69320],{"class":64},[28,163910,218],{"class":211},[14,163912,163913],{},"单元素元组必须加逗号：",[18,163915,163917],{"className":30429,"code":163916,"language":30431,"meta":23,"style":23},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[25,163918,163919,163933,163946,163950,163964],{"__ignoreMap":23},[28,163920,163921,163924,163926,163928,163930],{"class":30,"line":31},[28,163922,163923],{"class":211},"t1 ",[28,163925,257],{"class":207},[28,163927,1736],{"class":211},[28,163929,656],{"class":38},[28,163931,163932],{"class":211},",)\n",[28,163934,163935,163938,163940,163942,163944],{"class":30,"line":42},[28,163936,163937],{"class":211},"t2 ",[28,163939,257],{"class":207},[28,163941,1736],{"class":211},[28,163943,656],{"class":38},[28,163945,218],{"class":211},[28,163947,163948],{"class":30,"line":50},[28,163949,2477],{"emptyLinePlaceholder":134},[28,163951,163952,163954,163956,163958,163961],{"class":30,"line":58},[28,163953,30466],{"class":38},[28,163955,212],{"class":211},[28,163957,103158],{"class":38},[28,163959,163960],{"class":211},"(t1))  ",[28,163962,163963],{"class":269},"# tuple\n",[28,163965,163966,163968,163970,163972,163975],{"class":30,"line":70},[28,163967,30466],{"class":38},[28,163969,212],{"class":211},[28,163971,103158],{"class":38},[28,163973,163974],{"class":211},"(t2))  ",[28,163976,163977],{"class":269},"# int\n",[14,163979,163980],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[149,163982,163984],{"id":163983},"_67-字符串str","6.7 字符串str",[14,163986,163987],{},"字符串也是序列，可以索引、切片和遍历。",[18,163989,163991],{"className":30429,"code":163990,"language":30431,"meta":23,"style":23},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[25,163992,163993,164001,164005,164016,164028,164032,164043],{"__ignoreMap":23},[28,163994,163995,163997,163999],{"class":30,"line":31},[28,163996,156495],{"class":211},[28,163998,257],{"class":207},[28,164000,159732],{"class":64},[28,164002,164003],{"class":30,"line":42},[28,164004,2477],{"emptyLinePlaceholder":134},[28,164006,164007,164009,164012,164014],{"class":30,"line":50},[28,164008,30466],{"class":38},[28,164010,164011],{"class":211},"(text[",[28,164013,401],{"class":38},[28,164015,4734],{"class":211},[28,164017,164018,164020,164022,164024,164026],{"class":30,"line":58},[28,164019,30466],{"class":38},[28,164021,164011],{"class":211},[28,164023,742],{"class":207},[28,164025,427],{"class":38},[28,164027,4734],{"class":211},[28,164029,164030],{"class":30,"line":70},[28,164031,2477],{"emptyLinePlaceholder":134},[28,164033,164034,164036,164038,164040],{"class":30,"line":78},[28,164035,3102],{"class":207},[28,164037,159743],{"class":211},[28,164039,26094],{"class":207},[28,164041,164042],{"class":211}," text:\n",[28,164044,164045,164047],{"class":30,"line":86},[28,164046,31350],{"class":38},[28,164048,159754],{"class":211},[14,164050,164051],{},"字符串不可变：",[18,164053,164055],{"className":30429,"code":164054,"language":30431,"meta":23,"style":23},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[25,164056,164057,164065],{"__ignoreMap":23},[28,164058,164059,164061,164063],{"class":30,"line":31},[28,164060,156495],{"class":211},[28,164062,257],{"class":207},[28,164064,159732],{"class":64},[28,164066,164067,164070,164072,164074,164076,164079],{"class":30,"line":42},[28,164068,164069],{"class":211},"text[",[28,164071,401],{"class":38},[28,164073,4520],{"class":211},[28,164075,257],{"class":207},[28,164077,164078],{"class":64}," \"P\"",[28,164080,164081],{"class":269},"  # 报错\n",[14,164083,164084],{},"如果要得到新字符串：",[18,164086,164088],{"className":30429,"code":164087,"language":30431,"meta":23,"style":23},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[25,164089,164090,164098,164116],{"__ignoreMap":23},[28,164091,164092,164094,164096],{"class":30,"line":31},[28,164093,156495],{"class":211},[28,164095,257],{"class":207},[28,164097,159732],{"class":64},[28,164099,164100,164102,164104,164106,164108,164111,164113],{"class":30,"line":42},[28,164101,156495],{"class":211},[28,164103,257],{"class":207},[28,164105,164078],{"class":64},[28,164107,45617],{"class":207},[28,164109,164110],{"class":211}," text[",[28,164112,427],{"class":38},[28,164114,164115],{"class":211},":]\n",[28,164117,164118,164120],{"class":30,"line":50},[28,164119,30466],{"class":38},[28,164121,164122],{"class":211},"(text)\n",[149,164124,164126],{"id":164125},"_68-切片","6.8 切片",[14,164128,164129],{},"切片用于从序列中取一部分。",[18,164131,164133],{"className":30429,"code":164132,"language":30431,"meta":23,"style":23},"序列[开始:结束:步长]\n",[25,164134,164135],{"__ignoreMap":23},[28,164136,164137],{"class":30,"line":31},[28,164138,164132],{"class":211},[14,164140,164141],{},"结束位置不包含。",[18,164143,164145],{"className":30429,"code":164144,"language":30431,"meta":23,"style":23},"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",[25,164146,164147,164184,164188,164207,164222,164236,164250],{"__ignoreMap":23},[28,164148,164149,164152,164154,164156,164158,164160,164162,164164,164166,164168,164170,164172,164174,164176,164178,164180,164182],{"class":30,"line":31},[28,164150,164151],{"class":211},"nums ",[28,164153,257],{"class":207},[28,164155,52277],{"class":211},[28,164157,401],{"class":38},[28,164159,12512],{"class":211},[28,164161,427],{"class":38},[28,164163,12512],{"class":211},[28,164165,288],{"class":38},[28,164167,12512],{"class":211},[28,164169,282],{"class":38},[28,164171,12512],{"class":211},[28,164173,503],{"class":38},[28,164175,12512],{"class":211},[28,164177,529],{"class":38},[28,164179,12512],{"class":211},[28,164181,554],{"class":38},[28,164183,33297],{"class":211},[28,164185,164186],{"class":30,"line":42},[28,164187,2477],{"emptyLinePlaceholder":134},[28,164189,164190,164192,164195,164197,164199,164201,164204],{"class":30,"line":50},[28,164191,30466],{"class":38},[28,164193,164194],{"class":211},"(nums[",[28,164196,427],{"class":38},[28,164198,1069],{"class":211},[28,164200,503],{"class":38},[28,164202,164203],{"class":211},"])    ",[28,164205,164206],{"class":269},"# [1, 2, 3]\n",[28,164208,164209,164211,164214,164216,164219],{"class":30,"line":58},[28,164210,30466],{"class":38},[28,164212,164213],{"class":211},"(nums[:",[28,164215,282],{"class":38},[28,164217,164218],{"class":211},"])     ",[28,164220,164221],{"class":269},"# [0, 1, 2]\n",[28,164223,164224,164226,164228,164230,164233],{"class":30,"line":70},[28,164225,30466],{"class":38},[28,164227,164194],{"class":211},[28,164229,282],{"class":38},[28,164231,164232],{"class":211},":])     ",[28,164234,164235],{"class":269},"# [3, 4, 5, 6]\n",[28,164237,164238,164240,164243,164245,164247],{"class":30,"line":78},[28,164239,30466],{"class":38},[28,164241,164242],{"class":211},"(nums[::",[28,164244,288],{"class":38},[28,164246,164203],{"class":211},[28,164248,164249],{"class":269},"# [0, 2, 4, 6]\n",[28,164251,164252,164254,164256,164258,164260,164263],{"class":30,"line":86},[28,164253,30466],{"class":38},[28,164255,164242],{"class":211},[28,164257,742],{"class":207},[28,164259,427],{"class":38},[28,164261,164262],{"class":211},"])   ",[28,164264,164265],{"class":269},"# 反转\n",[14,164267,164268],{},"字符串切片：",[18,164270,164272],{"className":30429,"code":164271,"language":30431,"meta":23,"style":23},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[25,164273,164274,164283,164297],{"__ignoreMap":23},[28,164275,164276,164278,164280],{"class":30,"line":31},[28,164277,156495],{"class":211},[28,164279,257],{"class":207},[28,164281,164282],{"class":64}," \"abcdef\"\n",[28,164284,164285,164287,164289,164291,164293,164295],{"class":30,"line":42},[28,164286,30466],{"class":38},[28,164288,164011],{"class":211},[28,164290,427],{"class":38},[28,164292,1069],{"class":211},[28,164294,503],{"class":38},[28,164296,4734],{"class":211},[28,164298,164299,164301,164304,164306,164308],{"class":30,"line":50},[28,164300,30466],{"class":38},[28,164302,164303],{"class":211},"(text[::",[28,164305,742],{"class":207},[28,164307,427],{"class":38},[28,164309,4734],{"class":211},[149,164311,164313],{"id":164312},"_69-集合set","6.9 集合set",[14,164315,164316],{},"集合特点：",[161,164318,164319,164322,164325],{},[119,164320,164321],{},"无序。",[119,164323,164324],{},"元素不重复。",[119,164326,164327],{},"可以做交集、并集、差集。",[18,164329,164331],{"className":30429,"code":164330,"language":30431,"meta":23,"style":23},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[25,164332,164333,164361],{"__ignoreMap":23},[28,164334,164335,164337,164339,164341,164343,164345,164347,164349,164351,164353,164355,164357,164359],{"class":30,"line":31},[28,164336,164151],{"class":211},[28,164338,257],{"class":207},[28,164340,4525],{"class":211},[28,164342,427],{"class":38},[28,164344,12512],{"class":211},[28,164346,288],{"class":38},[28,164348,12512],{"class":211},[28,164350,282],{"class":38},[28,164352,12512],{"class":211},[28,164354,282],{"class":38},[28,164356,12512],{"class":211},[28,164358,503],{"class":38},[28,164360,1643],{"class":211},[28,164362,164363,164365],{"class":30,"line":42},[28,164364,30466],{"class":38},[28,164366,164367],{"class":211},"(nums)\n",[14,164369,164370],{},"创建空集合：",[18,164372,164374],{"className":30429,"code":164373,"language":30431,"meta":23,"style":23},"s = set()\n",[25,164375,164376],{"__ignoreMap":23},[28,164377,164378,164380,164382,164384],{"class":30,"line":31},[28,164379,10656],{"class":211},[28,164381,257],{"class":207},[28,164383,119773],{"class":38},[28,164385,2053],{"class":211},[14,164387,9102,164388,164390],{},[25,164389,32510],{}," 是空字典，不是空集合。",[14,164392,164393],{},"集合常用操作：",[18,164395,164397],{"className":30429,"code":164396,"language":30431,"meta":23,"style":23},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[25,164398,164399,164419,164423,164432,164441,164450],{"__ignoreMap":23},[28,164400,164401,164403,164405,164407,164409,164411,164413,164415,164417],{"class":30,"line":31},[28,164402,10656],{"class":211},[28,164404,257],{"class":207},[28,164406,4525],{"class":211},[28,164408,427],{"class":38},[28,164410,12512],{"class":211},[28,164412,288],{"class":38},[28,164414,12512],{"class":211},[28,164416,282],{"class":38},[28,164418,1643],{"class":211},[28,164420,164421],{"class":30,"line":42},[28,164422,2477],{"emptyLinePlaceholder":134},[28,164424,164425,164428,164430],{"class":30,"line":50},[28,164426,164427],{"class":211},"s.add(",[28,164429,503],{"class":38},[28,164431,218],{"class":211},[28,164433,164434,164437,164439],{"class":30,"line":58},[28,164435,164436],{"class":211},"s.remove(",[28,164438,288],{"class":38},[28,164440,218],{"class":211},[28,164442,164443,164446,164448],{"class":30,"line":70},[28,164444,164445],{"class":211},"s.discard(",[28,164447,656],{"class":38},[28,164449,218],{"class":211},[28,164451,164452,164454,164456,164458],{"class":30,"line":78},[28,164453,30466],{"class":38},[28,164455,212],{"class":211},[28,164457,7435],{"class":38},[28,164459,164460],{"class":211},"(s))\n",[14,164462,164463],{},"交并差：",[18,164465,164467],{"className":30429,"code":164466,"language":30431,"meta":23,"style":23},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[25,164468,164469,164489,164509,164513,164528,164541],{"__ignoreMap":23},[28,164470,164471,164473,164475,164477,164479,164481,164483,164485,164487],{"class":30,"line":31},[28,164472,10996],{"class":211},[28,164474,257],{"class":207},[28,164476,4525],{"class":211},[28,164478,427],{"class":38},[28,164480,12512],{"class":211},[28,164482,288],{"class":38},[28,164484,12512],{"class":211},[28,164486,282],{"class":38},[28,164488,1643],{"class":211},[28,164490,164491,164493,164495,164497,164499,164501,164503,164505,164507],{"class":30,"line":42},[28,164492,11022],{"class":211},[28,164494,257],{"class":207},[28,164496,4525],{"class":211},[28,164498,282],{"class":38},[28,164500,12512],{"class":211},[28,164502,503],{"class":38},[28,164504,12512],{"class":211},[28,164506,529],{"class":38},[28,164508,1643],{"class":211},[28,164510,164511],{"class":30,"line":50},[28,164512,2477],{"emptyLinePlaceholder":134},[28,164514,164515,164517,164520,164522,164525],{"class":30,"line":58},[28,164516,30466],{"class":38},[28,164518,164519],{"class":211},"(a ",[28,164521,563],{"class":207},[28,164523,164524],{"class":211}," b)  ",[28,164526,164527],{"class":269},"# 交集\n",[28,164529,164530,164532,164534,164536,164538],{"class":30,"line":70},[28,164531,30466],{"class":38},[28,164533,164519],{"class":211},[28,164535,1131],{"class":207},[28,164537,164524],{"class":211},[28,164539,164540],{"class":269},"# 并集\n",[28,164542,164543,164545,164547,164549,164551],{"class":30,"line":78},[28,164544,30466],{"class":38},[28,164546,164519],{"class":211},[28,164548,742],{"class":207},[28,164550,164524],{"class":211},[28,164552,164553],{"class":269},"# 差集\n",[149,164555,164557],{"id":164556},"_610-字典dict","6.10 字典dict",[14,164559,164560],{},"字典通过 key-value 保存数据。",[18,164562,164564],{"className":30429,"code":164563,"language":30431,"meta":23,"style":23},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[25,164565,164566,164574,164584,164595,164605],{"__ignoreMap":23},[28,164567,164568,164570,164572],{"class":30,"line":31},[28,164569,149532],{"class":211},[28,164571,257],{"class":207},[28,164573,15649],{"class":211},[28,164575,164576,164578,164580,164582],{"class":30,"line":42},[28,164577,147071],{"class":64},[28,164579,51488],{"class":211},[28,164581,149939],{"class":64},[28,164583,31517],{"class":211},[28,164585,164586,164589,164591,164593],{"class":30,"line":50},[28,164587,164588],{"class":64},"    \"age\"",[28,164590,51488],{"class":211},[28,164592,860],{"class":38},[28,164594,31517],{"class":211},[28,164596,164597,164600,164602],{"class":30,"line":58},[28,164598,164599],{"class":64},"    \"score\"",[28,164601,51488],{"class":211},[28,164603,164604],{"class":38},"95\n",[28,164606,164607],{"class":30,"line":70},[28,164608,1643],{"class":211},[14,164610,164611],{},"获取值：",[18,164613,164615],{"className":30429,"code":164614,"language":30431,"meta":23,"style":23},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[25,164616,164617,164628],{"__ignoreMap":23},[28,164618,164619,164621,164624,164626],{"class":30,"line":31},[28,164620,30466],{"class":38},[28,164622,164623],{"class":211},"(student[",[28,164625,62730],{"class":64},[28,164627,4734],{"class":211},[28,164629,164630,164632,164635,164637],{"class":30,"line":42},[28,164631,30466],{"class":38},[28,164633,164634],{"class":211},"(student.get(",[28,164636,62730],{"class":64},[28,164638,30548],{"class":211},[14,164640,15465],{},[18,164642,164644],{"className":30429,"code":164643,"language":30431,"meta":23,"style":23},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[25,164645,164646,164659],{"__ignoreMap":23},[28,164647,164648,164650,164653,164656],{"class":30,"line":31},[28,164649,152910],{"class":211},[28,164651,164652],{"class":64},"\"address\"",[28,164654,164655],{"class":211},"]     ",[28,164657,164658],{"class":269},"# key不存在会报错\n",[28,164660,164661,164664,164666,164668],{"class":30,"line":42},[28,164662,164663],{"class":211},"student.get(",[28,164665,164652],{"class":64},[28,164667,13791],{"class":211},[28,164669,164670],{"class":269},"# key不存在返回None\n",[14,164672,164673],{},"设置默认值：",[18,164675,164677],{"className":30429,"code":164676,"language":30431,"meta":23,"style":23},"print(student.get(\"address\", \"未知\"))\n",[25,164678,164679],{"__ignoreMap":23},[28,164680,164681,164683,164685,164687,164689,164692],{"class":30,"line":31},[28,164682,30466],{"class":38},[28,164684,164634],{"class":211},[28,164686,164652],{"class":64},[28,164688,12512],{"class":211},[28,164690,164691],{"class":64},"\"未知\"",[28,164693,30548],{"class":211},[14,164695,164696],{},"新增和修改：",[18,164698,164700],{"className":30429,"code":164699,"language":30431,"meta":23,"style":23},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[25,164701,164702,164715],{"__ignoreMap":23},[28,164703,164704,164706,164708,164710,164712],{"class":30,"line":31},[28,164705,152910],{"class":211},[28,164707,69175],{"class":64},[28,164709,4520],{"class":211},[28,164711,257],{"class":207},[28,164713,164714],{"class":38}," 19\n",[28,164716,164717,164719,164721,164723,164725],{"class":30,"line":42},[28,164718,152910],{"class":211},[28,164720,164652],{"class":64},[28,164722,4520],{"class":211},[28,164724,257],{"class":207},[28,164726,164727],{"class":64}," \"北京\"\n",[14,164729,164730],{},"删除：",[18,164732,164734],{"className":30429,"code":164733,"language":30431,"meta":23,"style":23},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[25,164735,164736,164749,164759],{"__ignoreMap":23},[28,164737,164738,164740,164742,164745,164747],{"class":30,"line":31},[28,164739,155409],{"class":211},[28,164741,257],{"class":207},[28,164743,164744],{"class":211}," student.pop(",[28,164746,151523],{"class":64},[28,164748,218],{"class":211},[28,164750,164751,164753,164755,164757],{"class":30,"line":42},[28,164752,163434],{"class":207},[28,164754,152200],{"class":211},[28,164756,69175],{"class":64},[28,164758,33297],{"class":211},[28,164760,164761],{"class":30,"line":50},[28,164762,164763],{"class":211},"student.clear()\n",[149,164765,164767],{"id":164766},"_611-字典遍历","6.11 字典遍历",[14,164769,164770],{},"遍历 key：",[18,164772,164774],{"className":30429,"code":164773,"language":30431,"meta":23,"style":23},"for key in student:\n    print(key, student[key])\n",[25,164775,164776,164788],{"__ignoreMap":23},[28,164777,164778,164780,164783,164785],{"class":30,"line":31},[28,164779,3102],{"class":207},[28,164781,164782],{"class":211}," key ",[28,164784,26094],{"class":207},[28,164786,164787],{"class":211}," student:\n",[28,164789,164790,164792],{"class":30,"line":42},[28,164791,31350],{"class":38},[28,164793,164794],{"class":211},"(key, student[key])\n",[14,164796,164797],{},"遍历 value：",[18,164799,164801],{"className":30429,"code":164800,"language":30431,"meta":23,"style":23},"for value in student.values():\n    print(value)\n",[25,164802,164803,164815],{"__ignoreMap":23},[28,164804,164805,164807,164810,164812],{"class":30,"line":31},[28,164806,3102],{"class":207},[28,164808,164809],{"class":211}," value ",[28,164811,26094],{"class":207},[28,164813,164814],{"class":211}," student.values():\n",[28,164816,164817,164819],{"class":30,"line":42},[28,164818,31350],{"class":38},[28,164820,164821],{"class":211},"(value)\n",[14,164823,164824],{},"遍历 key 和 value：",[18,164826,164828],{"className":30429,"code":164827,"language":30431,"meta":23,"style":23},"for key, value in student.items():\n    print(key, value)\n",[25,164829,164830,164842],{"__ignoreMap":23},[28,164831,164832,164834,164837,164839],{"class":30,"line":31},[28,164833,3102],{"class":207},[28,164835,164836],{"class":211}," key, value ",[28,164838,26094],{"class":207},[28,164840,164841],{"class":211}," student.items():\n",[28,164843,164844,164846],{"class":30,"line":42},[28,164845,31350],{"class":38},[28,164847,164848],{"class":211},"(key, value)\n",[149,164850,164852],{"id":164851},"_612-嵌套容器","6.12 嵌套容器",[14,164854,164855],{},"列表中保存字典，是项目中最常见的结构之一。",[18,164857,164859],{"className":30429,"code":164858,"language":30431,"meta":23,"style":23},"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",[25,164860,164861,164869,164897,164925,164953,164957,164961,164971],{"__ignoreMap":23},[28,164862,164863,164865,164867],{"class":30,"line":31},[28,164864,159767],{"class":211},[28,164866,257],{"class":207},[28,164868,55498],{"class":211},[28,164870,164871,164873,164875,164877,164879,164881,164883,164885,164887,164889,164891,164893,164895],{"class":30,"line":42},[28,164872,148436],{"class":211},[28,164874,62730],{"class":64},[28,164876,51488],{"class":211},[28,164878,149939],{"class":64},[28,164880,12512],{"class":211},[28,164882,69175],{"class":64},[28,164884,51488],{"class":211},[28,164886,860],{"class":38},[28,164888,12512],{"class":211},[28,164890,151523],{"class":64},[28,164892,51488],{"class":211},[28,164894,1199],{"class":38},[28,164896,5007],{"class":211},[28,164898,164899,164901,164903,164905,164907,164909,164911,164913,164915,164917,164919,164921,164923],{"class":30,"line":50},[28,164900,148436],{"class":211},[28,164902,62730],{"class":64},[28,164904,51488],{"class":211},[28,164906,150987],{"class":64},[28,164908,12512],{"class":211},[28,164910,69175],{"class":64},[28,164912,51488],{"class":211},[28,164914,835],{"class":38},[28,164916,12512],{"class":211},[28,164918,151523],{"class":64},[28,164920,51488],{"class":211},[28,164922,1021],{"class":38},[28,164924,5007],{"class":211},[28,164926,164927,164929,164931,164933,164935,164937,164939,164941,164943,164945,164947,164949,164951],{"class":30,"line":58},[28,164928,148436],{"class":211},[28,164930,62730],{"class":64},[28,164932,51488],{"class":211},[28,164934,159782],{"class":64},[28,164936,12512],{"class":211},[28,164938,69175],{"class":64},[28,164940,51488],{"class":211},[28,164942,885],{"class":38},[28,164944,12512],{"class":211},[28,164946,151523],{"class":64},[28,164948,51488],{"class":211},[28,164950,616],{"class":38},[28,164952,5007],{"class":211},[28,164954,164955],{"class":30,"line":70},[28,164956,33297],{"class":211},[28,164958,164959],{"class":30,"line":78},[28,164960,2477],{"emptyLinePlaceholder":134},[28,164962,164963,164965,164967,164969],{"class":30,"line":86},[28,164964,3102],{"class":207},[28,164966,152188],{"class":211},[28,164968,26094],{"class":207},[28,164970,152193],{"class":211},[28,164972,164973,164975,164977,164979,164982,164984],{"class":30,"line":97},[28,164974,31350],{"class":38},[28,164976,164623],{"class":211},[28,164978,62730],{"class":64},[28,164980,164981],{"class":211},"], student[",[28,164983,151523],{"class":64},[28,164985,4734],{"class":211},[14,164987,164988],{},"统计平均分：",[18,164990,164992],{"className":30429,"code":164991,"language":30431,"meta":23,"style":23},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[25,164993,164994,165002,165006,165016,165028,165032,165047],{"__ignoreMap":23},[28,164995,164996,164998,165000],{"class":30,"line":31},[28,164997,157311],{"class":211},[28,164999,257],{"class":207},[28,165001,47384],{"class":38},[28,165003,165004],{"class":30,"line":42},[28,165005,2477],{"emptyLinePlaceholder":134},[28,165007,165008,165010,165012,165014],{"class":30,"line":50},[28,165009,3102],{"class":207},[28,165011,152188],{"class":211},[28,165013,26094],{"class":207},[28,165015,152193],{"class":211},[28,165017,165018,165020,165022,165024,165026],{"class":30,"line":58},[28,165019,159358],{"class":211},[28,165021,9554],{"class":207},[28,165023,152200],{"class":211},[28,165025,151523],{"class":64},[28,165027,33297],{"class":211},[28,165029,165030],{"class":30,"line":70},[28,165031,2477],{"emptyLinePlaceholder":134},[28,165033,165034,165036,165038,165040,165042,165044],{"class":30,"line":78},[28,165035,163825],{"class":211},[28,165037,257],{"class":207},[28,165039,163830],{"class":211},[28,165041,794],{"class":207},[28,165043,7408],{"class":38},[28,165045,165046],{"class":211},"(students)\n",[28,165048,165049,165051,165053,165055,165057,165059,165061,165063,165065,165067],{"class":30,"line":86},[28,165050,30466],{"class":38},[28,165052,212],{"class":211},[28,165054,263],{"class":207},[28,165056,163848],{"class":64},[28,165058,1106],{"class":38},[28,165060,163853],{"class":211},[28,165062,157210],{"class":207},[28,165064,1156],{"class":38},[28,165066,461],{"class":64},[28,165068,218],{"class":211},[14,165070,165071],{},"查找学生：",[18,165073,165075],{"className":30429,"code":165074,"language":30431,"meta":23,"style":23},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[25,165076,165077,165092,165096,165106,165120,165126,165130,165136],{"__ignoreMap":23},[28,165078,165079,165081,165083,165085,165087,165090],{"class":30,"line":31},[28,165080,111629],{"class":211},[28,165082,257],{"class":207},[28,165084,60656],{"class":38},[28,165086,212],{"class":211},[28,165088,165089],{"class":64},"\"请输入学生姓名:\"",[28,165091,218],{"class":211},[28,165093,165094],{"class":30,"line":42},[28,165095,2477],{"emptyLinePlaceholder":134},[28,165097,165098,165100,165102,165104],{"class":30,"line":50},[28,165099,3102],{"class":207},[28,165101,152188],{"class":211},[28,165103,26094],{"class":207},[28,165105,152193],{"class":211},[28,165107,165108,165110,165112,165114,165116,165118],{"class":30,"line":58},[28,165109,3178],{"class":207},[28,165111,152200],{"class":211},[28,165113,62730],{"class":64},[28,165115,4520],{"class":211},[28,165117,3026],{"class":207},[28,165119,160483],{"class":211},[28,165121,165122,165124],{"class":30,"line":70},[28,165123,32502],{"class":38},[28,165125,150093],{"class":211},[28,165127,165128],{"class":30,"line":78},[28,165129,31678],{"class":207},[28,165131,165132,165134],{"class":30,"line":86},[28,165133,1779],{"class":207},[28,165135,3816],{"class":211},[28,165137,165138,165140,165142,165145],{"class":30,"line":97},[28,165139,31350],{"class":38},[28,165141,212],{"class":211},[28,165143,165144],{"class":64},"\"没有找到\"",[28,165146,218],{"class":211},[149,165148,165150],{"id":165149},"_613-容器通用操作","6.13 容器通用操作",[14,165152,165153],{},"长度：",[18,165155,165157],{"className":30429,"code":165156,"language":30431,"meta":23,"style":23},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[25,165158,165159,165178,165188],{"__ignoreMap":23},[28,165160,165161,165163,165166,165168,165170,165172,165174,165176],{"class":30,"line":31},[28,165162,7435],{"class":38},[28,165164,165165],{"class":211},"([",[28,165167,427],{"class":38},[28,165169,12512],{"class":211},[28,165171,288],{"class":38},[28,165173,12512],{"class":211},[28,165175,282],{"class":38},[28,165177,4734],{"class":211},[28,165179,165180,165182,165184,165186],{"class":30,"line":42},[28,165181,7435],{"class":38},[28,165183,212],{"class":211},[28,165185,155931],{"class":64},[28,165187,218],{"class":211},[28,165189,165190,165192,165195,165197,165199,165201],{"class":30,"line":50},[28,165191,7435],{"class":38},[28,165193,165194],{"class":211},"({",[28,165196,62730],{"class":64},[28,165198,51488],{"class":211},[28,165200,149939],{"class":64},[28,165202,165203],{"class":211},"})\n",[14,165205,165206],{},"最大最小：",[18,165208,165210],{"className":30429,"code":165209,"language":30431,"meta":23,"style":23},"max([1, 2, 3])\nmin([1, 2, 3])\n",[25,165211,165212,165230],{"__ignoreMap":23},[28,165213,165214,165216,165218,165220,165222,165224,165226,165228],{"class":30,"line":31},[28,165215,6092],{"class":38},[28,165217,165165],{"class":211},[28,165219,427],{"class":38},[28,165221,12512],{"class":211},[28,165223,288],{"class":38},[28,165225,12512],{"class":211},[28,165227,282],{"class":38},[28,165229,4734],{"class":211},[28,165231,165232,165235,165237,165239,165241,165243,165245,165247],{"class":30,"line":42},[28,165233,165234],{"class":38},"min",[28,165236,165165],{"class":211},[28,165238,427],{"class":38},[28,165240,12512],{"class":211},[28,165242,288],{"class":38},[28,165244,12512],{"class":211},[28,165246,282],{"class":38},[28,165248,4734],{"class":211},[14,165250,165251],{},"求和：",[18,165253,165255],{"className":30429,"code":165254,"language":30431,"meta":23,"style":23},"sum([1, 2, 3])\n",[25,165256,165257],{"__ignoreMap":23},[28,165258,165259,165262,165264,165266,165268,165270,165272,165274],{"class":30,"line":31},[28,165260,165261],{"class":38},"sum",[28,165263,165165],{"class":211},[28,165265,427],{"class":38},[28,165267,12512],{"class":211},[28,165269,288],{"class":38},[28,165271,12512],{"class":211},[28,165273,282],{"class":38},[28,165275,4734],{"class":211},[14,165277,163522],{},[18,165279,165281],{"className":30429,"code":165280,"language":30431,"meta":23,"style":23},"sorted([3, 1, 2])\n",[25,165282,165283],{"__ignoreMap":23},[28,165284,165285,165288,165290,165292,165294,165296,165298,165300],{"class":30,"line":31},[28,165286,165287],{"class":38},"sorted",[28,165289,165165],{"class":211},[28,165291,282],{"class":38},[28,165293,12512],{"class":211},[28,165295,427],{"class":38},[28,165297,12512],{"class":211},[28,165299,288],{"class":38},[28,165301,4734],{"class":211},[14,165303,165304],{},"类型转换：",[18,165306,165308],{"className":30429,"code":165307,"language":30431,"meta":23,"style":23},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[25,165309,165310,165320,165338],{"__ignoreMap":23},[28,165311,165312,165314,165316,165318],{"class":30,"line":31},[28,165313,154121],{"class":38},[28,165315,212],{"class":211},[28,165317,155931],{"class":64},[28,165319,218],{"class":211},[28,165321,165322,165324,165326,165328,165330,165332,165334,165336],{"class":30,"line":42},[28,165323,155316],{"class":38},[28,165325,165165],{"class":211},[28,165327,427],{"class":38},[28,165329,12512],{"class":211},[28,165331,288],{"class":38},[28,165333,12512],{"class":211},[28,165335,282],{"class":38},[28,165337,4734],{"class":211},[28,165339,165340,165342,165344,165346,165348,165350,165352,165354,165356,165358],{"class":30,"line":50},[28,165341,155341],{"class":38},[28,165343,165165],{"class":211},[28,165345,427],{"class":38},[28,165347,12512],{"class":211},[28,165349,427],{"class":38},[28,165351,12512],{"class":211},[28,165353,288],{"class":38},[28,165355,12512],{"class":211},[28,165357,282],{"class":38},[28,165359,4734],{"class":211},[14,165361,165362],{},"成员判断：",[18,165364,165366],{"className":30429,"code":165365,"language":30431,"meta":23,"style":23},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[25,165367,165368,165385,165409],{"__ignoreMap":23},[28,165369,165370,165372,165374,165377,165380,165383],{"class":30,"line":31},[28,165371,30466],{"class":38},[28,165373,212],{"class":211},[28,165375,165376],{"class":64},"\"a\"",[28,165378,165379],{"class":207}," in",[28,165381,165382],{"class":64}," \"abc\"",[28,165384,218],{"class":211},[28,165386,165387,165389,165391,165393,165395,165397,165399,165401,165403,165405,165407],{"class":30,"line":42},[28,165388,30466],{"class":38},[28,165390,212],{"class":211},[28,165392,427],{"class":38},[28,165394,165379],{"class":207},[28,165396,52277],{"class":211},[28,165398,427],{"class":38},[28,165400,12512],{"class":211},[28,165402,288],{"class":38},[28,165404,12512],{"class":211},[28,165406,282],{"class":38},[28,165408,4734],{"class":211},[28,165410,165411,165413,165415,165417,165419,165421,165423,165425,165427],{"class":30,"line":50},[28,165412,30466],{"class":38},[28,165414,212],{"class":211},[28,165416,62730],{"class":64},[28,165418,165379],{"class":207},[28,165420,4525],{"class":211},[28,165422,62730],{"class":64},[28,165424,51488],{"class":211},[28,165426,149939],{"class":64},[28,165428,165203],{"class":211},[149,165430,165432],{"id":165431},"_614-推导式","6.14 推导式",[14,165434,165435],{},"推导式用于快速生成容器。",[14,165437,165438],{},"列表推导式：",[18,165440,165442],{"className":30429,"code":165441,"language":30431,"meta":23,"style":23},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[25,165443,165444,165471],{"__ignoreMap":23},[28,165445,165446,165448,165450,165453,165455,165457,165459,165461,165463,165465,165467,165469],{"class":30,"line":31},[28,165447,164151],{"class":211},[28,165449,257],{"class":207},[28,165451,165452],{"class":211}," [i ",[28,165454,3102],{"class":207},[28,165456,9515],{"class":211},[28,165458,26094],{"class":207},[28,165460,32494],{"class":38},[28,165462,212],{"class":211},[28,165464,427],{"class":38},[28,165466,12512],{"class":211},[28,165468,554],{"class":38},[28,165470,97351],{"class":211},[28,165472,165473,165475],{"class":30,"line":42},[28,165474,30466],{"class":38},[28,165476,164367],{"class":211},[14,165478,165479],{},"带条件：",[18,165481,165483],{"className":30429,"code":165482,"language":30431,"meta":23,"style":23},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[25,165484,165485,165526],{"__ignoreMap":23},[28,165486,165487,165490,165492,165494,165496,165498,165500,165502,165504,165506,165508,165510,165512,165514,165516,165518,165520,165522,165524],{"class":30,"line":31},[28,165488,165489],{"class":211},"even_nums ",[28,165491,257],{"class":207},[28,165493,165452],{"class":211},[28,165495,3102],{"class":207},[28,165497,9515],{"class":211},[28,165499,26094],{"class":207},[28,165501,32494],{"class":38},[28,165503,212],{"class":211},[28,165505,427],{"class":38},[28,165507,12512],{"class":211},[28,165509,547],{"class":38},[28,165511,13791],{"class":211},[28,165513,1609],{"class":207},[28,165515,9515],{"class":211},[28,165517,538],{"class":207},[28,165519,14832],{"class":38},[28,165521,101610],{"class":207},[28,165523,4170],{"class":38},[28,165525,33297],{"class":211},[28,165527,165528,165530],{"class":30,"line":42},[28,165529,30466],{"class":38},[28,165531,165532],{"class":211},"(even_nums)\n",[14,165534,165535],{},"字典推导式：",[18,165537,165539],{"className":30429,"code":165538,"language":30431,"meta":23,"style":23},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[25,165540,165541,165575],{"__ignoreMap":23},[28,165542,165543,165546,165548,165551,165553,165555,165558,165560,165562,165564,165566,165568,165570,165572],{"class":30,"line":31},[28,165544,165545],{"class":211},"squares ",[28,165547,257],{"class":207},[28,165549,165550],{"class":211}," {i: i ",[28,165552,10738],{"class":207},[28,165554,14832],{"class":38},[28,165556,165557],{"class":207}," for",[28,165559,9515],{"class":211},[28,165561,26094],{"class":207},[28,165563,32494],{"class":38},[28,165565,212],{"class":211},[28,165567,427],{"class":38},[28,165569,12512],{"class":211},[28,165571,554],{"class":38},[28,165573,165574],{"class":211},")}\n",[28,165576,165577,165579],{"class":30,"line":42},[28,165578,30466],{"class":38},[28,165580,165581],{"class":211},"(squares)\n",[14,165583,165584],{},"集合推导式：",[18,165586,165588],{"className":30429,"code":165587,"language":30431,"meta":23,"style":23},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[25,165589,165590,165611],{"__ignoreMap":23},[28,165591,165592,165595,165597,165600,165602,165604,165606,165609],{"class":30,"line":31},[28,165593,165594],{"class":211},"chars ",[28,165596,257],{"class":207},[28,165598,165599],{"class":211}," {ch ",[28,165601,3102],{"class":207},[28,165603,159743],{"class":211},[28,165605,26094],{"class":207},[28,165607,165608],{"class":64}," \"hello\"",[28,165610,1643],{"class":211},[28,165612,165613,165615],{"class":30,"line":42},[28,165614,30466],{"class":38},[28,165616,165617],{"class":211},"(chars)\n",[14,165619,165620],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[149,165622,165624],{"id":165623},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[18,165626,165628],{"className":30429,"code":165627,"language":30431,"meta":23,"style":23},"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",[25,165629,165630,165638,165658,165678,165698,165718,165722,165726,165734,165748,165757,165761,165771,165783,165787,165807,165816,165820,165836,165841,165845,165859,165863,165885,165921],{"__ignoreMap":23},[28,165631,165632,165634,165636],{"class":30,"line":31},[28,165633,159767],{"class":211},[28,165635,257],{"class":207},[28,165637,55498],{"class":211},[28,165639,165640,165642,165644,165646,165648,165650,165652,165654,165656],{"class":30,"line":42},[28,165641,148436],{"class":211},[28,165643,62730],{"class":64},[28,165645,51488],{"class":211},[28,165647,149939],{"class":64},[28,165649,12512],{"class":211},[28,165651,151523],{"class":64},[28,165653,51488],{"class":211},[28,165655,1199],{"class":38},[28,165657,5007],{"class":211},[28,165659,165660,165662,165664,165666,165668,165670,165672,165674,165676],{"class":30,"line":50},[28,165661,148436],{"class":211},[28,165663,62730],{"class":64},[28,165665,51488],{"class":211},[28,165667,150987],{"class":64},[28,165669,12512],{"class":211},[28,165671,151523],{"class":64},[28,165673,51488],{"class":211},[28,165675,1021],{"class":38},[28,165677,5007],{"class":211},[28,165679,165680,165682,165684,165686,165688,165690,165692,165694,165696],{"class":30,"line":58},[28,165681,148436],{"class":211},[28,165683,62730],{"class":64},[28,165685,51488],{"class":211},[28,165687,159782],{"class":64},[28,165689,12512],{"class":211},[28,165691,151523],{"class":64},[28,165693,51488],{"class":211},[28,165695,616],{"class":38},[28,165697,5007],{"class":211},[28,165699,165700,165702,165704,165706,165708,165710,165712,165714,165716],{"class":30,"line":70},[28,165701,148436],{"class":211},[28,165703,62730],{"class":64},[28,165705,51488],{"class":211},[28,165707,163361],{"class":64},[28,165709,12512],{"class":211},[28,165711,151523],{"class":64},[28,165713,51488],{"class":211},[28,165715,1092],{"class":38},[28,165717,5007],{"class":211},[28,165719,165720],{"class":30,"line":78},[28,165721,33297],{"class":211},[28,165723,165724],{"class":30,"line":86},[28,165725,2477],{"emptyLinePlaceholder":134},[28,165727,165728,165730,165732],{"class":30,"line":97},[28,165729,157311],{"class":211},[28,165731,257],{"class":207},[28,165733,47384],{"class":38},[28,165735,165736,165739,165741,165744,165746],{"class":30,"line":108},[28,165737,165738],{"class":211},"max_student ",[28,165740,257],{"class":207},[28,165742,165743],{"class":211}," students[",[28,165745,401],{"class":38},[28,165747,33297],{"class":211},[28,165749,165750,165753,165755],{"class":30,"line":1407},[28,165751,165752],{"class":211},"passed ",[28,165754,257],{"class":207},[28,165756,51889],{"class":211},[28,165758,165759],{"class":30,"line":1690},[28,165760,2477],{"emptyLinePlaceholder":134},[28,165762,165763,165765,165767,165769],{"class":30,"line":1695},[28,165764,3102],{"class":207},[28,165766,152188],{"class":211},[28,165768,26094],{"class":207},[28,165770,152193],{"class":211},[28,165772,165773,165775,165777,165779,165781],{"class":30,"line":1701},[28,165774,159358],{"class":211},[28,165776,9554],{"class":207},[28,165778,152200],{"class":211},[28,165780,151523],{"class":64},[28,165782,33297],{"class":211},[28,165784,165785],{"class":30,"line":1706},[28,165786,2477],{"emptyLinePlaceholder":134},[28,165788,165789,165791,165793,165795,165797,165799,165802,165804],{"class":30,"line":1720},[28,165790,3178],{"class":207},[28,165792,152200],{"class":211},[28,165794,151523],{"class":64},[28,165796,4520],{"class":211},[28,165798,1170],{"class":207},[28,165800,165801],{"class":211}," max_student[",[28,165803,151523],{"class":64},[28,165805,165806],{"class":211},"]:\n",[28,165808,165809,165812,165814],{"class":30,"line":1725},[28,165810,165811],{"class":211},"        max_student ",[28,165813,257],{"class":207},[28,165815,152216],{"class":211},[28,165817,165818],{"class":30,"line":1731},[28,165819,2477],{"emptyLinePlaceholder":134},[28,165821,165822,165824,165826,165828,165830,165832,165834],{"class":30,"line":1752},[28,165823,3178],{"class":207},[28,165825,152200],{"class":211},[28,165827,151523],{"class":64},[28,165829,4520],{"class":211},[28,165831,1788],{"class":207},[28,165833,157888],{"class":38},[28,165835,3816],{"class":211},[28,165837,165838],{"class":30,"line":1757},[28,165839,165840],{"class":211},"        passed.append(student)\n",[28,165842,165843],{"class":30,"line":1771},[28,165844,2477],{"emptyLinePlaceholder":134},[28,165846,165847,165849,165851,165853,165855,165857],{"class":30,"line":1776},[28,165848,163825],{"class":211},[28,165850,257],{"class":207},[28,165852,163830],{"class":211},[28,165854,794],{"class":207},[28,165856,7408],{"class":38},[28,165858,165046],{"class":211},[28,165860,165861],{"class":30,"line":1805},[28,165862,2477],{"emptyLinePlaceholder":134},[28,165864,165865,165867,165869,165871,165873,165875,165877,165879,165881,165883],{"class":30,"line":1810},[28,165866,30466],{"class":38},[28,165868,212],{"class":211},[28,165870,263],{"class":207},[28,165872,163848],{"class":64},[28,165874,1106],{"class":38},[28,165876,163853],{"class":211},[28,165878,157210],{"class":207},[28,165880,1156],{"class":38},[28,165882,461],{"class":64},[28,165884,218],{"class":211},[28,165886,165887,165889,165891,165893,165896,165898,165901,165903,165905,165907,165909,165911,165913,165915,165917,165919],{"class":30,"line":1827},[28,165888,30466],{"class":38},[28,165890,212],{"class":211},[28,165892,263],{"class":207},[28,165894,165895],{"class":64},"\"最高分学生:",[28,165897,1106],{"class":38},[28,165899,165900],{"class":211},"max_student[",[28,165902,152933],{"class":64},[28,165904,1150],{"class":211},[28,165906,1156],{"class":38},[28,165908,4525],{"class":38},[28,165910,165900],{"class":211},[28,165912,152971],{"class":64},[28,165914,1150],{"class":211},[28,165916,1156],{"class":38},[28,165918,461],{"class":64},[28,165920,218],{"class":211},[28,165922,165923,165925,165927,165929,165932,165935,165938,165940,165942],{"class":30,"line":1832},[28,165924,30466],{"class":38},[28,165926,212],{"class":211},[28,165928,263],{"class":207},[28,165930,165931],{"class":64},"\"及格人数:",[28,165933,165934],{"class":38},"{len",[28,165936,165937],{"class":211},"(passed)",[28,165939,1156],{"class":38},[28,165941,461],{"class":64},[28,165943,218],{"class":211},[149,165945,165947],{"id":165946},"_616-易错点","6.16 易错点",[161,165949,165950,165953,165956,165959,165965,165974],{},[119,165951,165952],{},"列表可变，元组和字符串不可变。",[119,165954,165955],{},"切片结束位置不包含。",[119,165957,165958],{},"字典通过 key 取值，不是通过索引。",[119,165960,165961,165962,28436],{},"空集合要用 ",[25,165963,165964],{},"set()",[119,165966,104417,165967,165970,165971,28436],{},[25,165968,165969],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[25,165972,165973],{},"get()",[119,165975,165976],{},"嵌套容器要先看清楚每一层是什么类型。",[149,165978,165980],{"id":165979},"_617-本章练习","6.17 本章练习",[161,165982,165983,165986,165989,165992,165995],{},[119,165984,165985],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[119,165987,165988],{},"输入一句话，统计每个字符出现次数。",[119,165990,165991],{},"使用集合去除列表中的重复元素。",[119,165993,165994],{},"使用字典保存一个学生的信息，并实现修改成绩。",[119,165996,165997],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[126,165999,166000],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":166002},[166003,166004,166005,166006,166007,166008,166009,166010,166011,166012,166013,166014,166015,166016,166017,166018,166019],{"id":162983,"depth":42,"text":162984},{"id":163100,"depth":42,"text":163101},{"id":163190,"depth":42,"text":163191},{"id":163314,"depth":42,"text":163315},{"id":163677,"depth":42,"text":163678},{"id":163864,"depth":42,"text":163865},{"id":163983,"depth":42,"text":163984},{"id":164125,"depth":42,"text":164126},{"id":164312,"depth":42,"text":164313},{"id":164556,"depth":42,"text":164557},{"id":164766,"depth":42,"text":164767},{"id":164851,"depth":42,"text":164852},{"id":165149,"depth":42,"text":165150},{"id":165431,"depth":42,"text":165432},{"id":165623,"depth":42,"text":165624},{"id":165946,"depth":42,"text":165947},{"id":165979,"depth":42,"text":165980},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162975,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166026,"title":166027,"body":166028,"description":131,"extension":132,"meta":168200,"navigation":134,"path":168201,"seo":168202,"stem":168203,"__hash__":168204},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166029,"toc":168175},[166030,166033,166037,166040,166120,166123,166144,166147,166151,166154,166216,166219,166236,166240,166243,166288,166290,166298,166302,166305,166387,166390,166393,166418,166421,166444,166448,166451,166453,166515,166518,166520,166571,166575,166579,166585,166690,166694,166700,166771,166775,166778,166846,166849,166929,166933,166939,166975,166978,166981,167091,167097,167101,167104,167176,167179,167183,167187,167192,167254,167258,167263,167331,167335,167340,167456,167460,167463,167543,167546,167550,167553,167657,167659,167674,167677,167681,167819,167827,167831,167833,167844,167846,168104,168108,168140,168144,168172],[10,166031,166027],{"id":166032},"_7-函数进阶",[149,166034,166036],{"id":166035},"_71-多返回值","7.1 多返回值",[14,166038,166039],{},"Python 函数可以返回多个值，本质上返回的是元组。",[18,166041,166043],{"className":30429,"code":166042,"language":30431,"meta":23,"style":23},"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",[25,166044,166045,166054,166062,166070,166079,166086,166090,166094,166103,166109],{"__ignoreMap":23},[28,166046,166047,166049,166052],{"class":30,"line":31},[28,166048,31998],{"class":207},[28,166050,166051],{"class":34}," get_info",[28,166053,32004],{"class":211},[28,166055,166056,166058,166060],{"class":30,"line":42},[28,166057,152421],{"class":211},[28,166059,257],{"class":207},[28,166061,149404],{"class":64},[28,166063,166064,166066,166068],{"class":30,"line":50},[28,166065,152437],{"class":211},[28,166067,257],{"class":207},[28,166069,146602],{"class":38},[28,166071,166072,166074,166076],{"class":30,"line":58},[28,166073,152452],{"class":211},[28,166075,257],{"class":207},[28,166077,166078],{"class":38}," 95\n",[28,166080,166081,166083],{"class":30,"line":70},[28,166082,4167],{"class":207},[28,166084,166085],{"class":211}," name, age, score\n",[28,166087,166088],{"class":30,"line":78},[28,166089,2477],{"emptyLinePlaceholder":134},[28,166091,166092],{"class":30,"line":86},[28,166093,2477],{"emptyLinePlaceholder":134},[28,166095,166096,166098,166100],{"class":30,"line":97},[28,166097,161357],{"class":211},[28,166099,257],{"class":207},[28,166101,166102],{"class":211}," get_info()\n",[28,166104,166105,166107],{"class":30,"line":108},[28,166106,30466],{"class":38},[28,166108,76636],{"class":211},[28,166110,166111,166113,166115,166117],{"class":30,"line":1407},[28,166112,30466],{"class":38},[28,166114,212],{"class":211},[28,166116,103158],{"class":38},[28,166118,166119],{"class":211},"(result))\n",[14,166121,166122],{},"可以直接解包：",[18,166124,166126],{"className":30429,"code":166125,"language":30431,"meta":23,"style":23},"name, age, score = get_info()\nprint(name, age, score)\n",[25,166127,166128,166137],{"__ignoreMap":23},[28,166129,166130,166133,166135],{"class":30,"line":31},[28,166131,166132],{"class":211},"name, age, score ",[28,166134,257],{"class":207},[28,166136,166102],{"class":211},[28,166138,166139,166141],{"class":30,"line":42},[28,166140,30466],{"class":38},[28,166142,166143],{"class":211},"(name, age, score)\n",[14,166145,166146],{},"返回多个值适合函数需要同时给出多个结果时使用。",[149,166148,166150],{"id":166149},"_72-位置参数","7.2 位置参数",[14,166152,166153],{},"位置参数按顺序传递。",[18,166155,166157],{"className":30429,"code":166156,"language":30431,"meta":23,"style":23},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[25,166158,166159,166167,166195,166199,166203],{"__ignoreMap":23},[28,166160,166161,166163,166165],{"class":30,"line":31},[28,166162,31998],{"class":207},[28,166164,149423],{"class":34},[28,166166,149426],{"class":211},[28,166168,166169,166171,166173,166175,166177,166179,166181,166183,166185,166187,166189,166191,166193],{"class":30,"line":42},[28,166170,31350],{"class":38},[28,166172,212],{"class":211},[28,166174,263],{"class":207},[28,166176,149437],{"class":64},[28,166178,1106],{"class":38},[28,166180,79861],{"class":211},[28,166182,1156],{"class":38},[28,166184,149446],{"class":64},[28,166186,1106],{"class":38},[28,166188,70272],{"class":211},[28,166190,1156],{"class":38},[28,166192,149455],{"class":64},[28,166194,218],{"class":211},[28,166196,166197],{"class":30,"line":50},[28,166198,2477],{"emptyLinePlaceholder":134},[28,166200,166201],{"class":30,"line":58},[28,166202,2477],{"emptyLinePlaceholder":134},[28,166204,166205,166208,166210,166212,166214],{"class":30,"line":70},[28,166206,166207],{"class":211},"introduce(",[28,166209,149939],{"class":64},[28,166211,12512],{"class":211},[28,166213,860],{"class":38},[28,166215,218],{"class":211},[14,166217,166218],{},"顺序错了就会得到错误含义：",[18,166220,166222],{"className":30429,"code":166221,"language":30431,"meta":23,"style":23},"introduce(18, \"小明\")\n",[25,166223,166224],{"__ignoreMap":23},[28,166225,166226,166228,166230,166232,166234],{"class":30,"line":31},[28,166227,166207],{"class":211},[28,166229,860],{"class":38},[28,166231,12512],{"class":211},[28,166233,149939],{"class":64},[28,166235,218],{"class":211},[149,166237,166239],{"id":166238},"_73-关键字参数","7.3 关键字参数",[14,166241,166242],{},"关键字参数按参数名传递。",[18,166244,166246],{"className":30429,"code":166245,"language":30431,"meta":23,"style":23},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[25,166247,166248,166268],{"__ignoreMap":23},[28,166249,166250,166252,166254,166256,166258,166260,166262,166264,166266],{"class":30,"line":31},[28,166251,166207],{"class":211},[28,166253,79861],{"class":5293},[28,166255,257],{"class":207},[28,166257,149939],{"class":64},[28,166259,12512],{"class":211},[28,166261,70272],{"class":5293},[28,166263,257],{"class":207},[28,166265,860],{"class":38},[28,166267,218],{"class":211},[28,166269,166270,166272,166274,166276,166278,166280,166282,166284,166286],{"class":30,"line":42},[28,166271,166207],{"class":211},[28,166273,70272],{"class":5293},[28,166275,257],{"class":207},[28,166277,860],{"class":38},[28,166279,12512],{"class":211},[28,166281,79861],{"class":5293},[28,166283,257],{"class":207},[28,166285,149939],{"class":64},[28,166287,218],{"class":211},[14,166289,117985],{},[161,166291,166292,166295],{},[119,166293,166294],{},"顺序不容易错。",[119,166296,166297],{},"调用时可读性更强。",[149,166299,166301],{"id":166300},"_74-默认参数","7.4 默认参数",[14,166303,166304],{},"默认参数给参数设置默认值。",[18,166306,166308],{"className":30429,"code":166307,"language":30431,"meta":23,"style":23},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[25,166309,166310,166326,166356,166360,166364,166374],{"__ignoreMap":23},[28,166311,166312,166314,166316,166319,166321,166324],{"class":30,"line":31},[28,166313,31998],{"class":207},[28,166315,122144],{"class":34},[28,166317,166318],{"class":211},"(host, port",[28,166320,257],{"class":207},[28,166322,166323],{"class":38},"3306",[28,166325,30837],{"class":211},[28,166327,166328,166330,166332,166334,166337,166339,166341,166343,166345,166347,166350,166352,166354],{"class":30,"line":42},[28,166329,31350],{"class":38},[28,166331,212],{"class":211},[28,166333,263],{"class":207},[28,166335,166336],{"class":64},"\"连接",[28,166338,1106],{"class":38},[28,166340,27446],{"class":211},[28,166342,1156],{"class":38},[28,166344,1069],{"class":64},[28,166346,1106],{"class":38},[28,166348,166349],{"class":211},"port",[28,166351,1156],{"class":38},[28,166353,461],{"class":64},[28,166355,218],{"class":211},[28,166357,166358],{"class":30,"line":50},[28,166359,2477],{"emptyLinePlaceholder":134},[28,166361,166362],{"class":30,"line":58},[28,166363,2477],{"emptyLinePlaceholder":134},[28,166365,166366,166369,166372],{"class":30,"line":70},[28,166367,166368],{"class":211},"connect(",[28,166370,166371],{"class":64},"\"localhost\"",[28,166373,218],{"class":211},[28,166375,166376,166378,166380,166382,166385],{"class":30,"line":78},[28,166377,166368],{"class":211},[28,166379,166371],{"class":64},[28,166381,12512],{"class":211},[28,166383,166384],{"class":38},"6379",[28,166386,218],{"class":211},[14,166388,166389],{},"注意：默认参数必须放在非默认参数后面。",[14,166391,166392],{},"错误：",[18,166394,166396],{"className":30429,"code":166395,"language":30431,"meta":23,"style":23},"def connect(port=3306, host):\n    pass\n",[25,166397,166398,166414],{"__ignoreMap":23},[28,166399,166400,166402,166404,166407,166409,166411],{"class":30,"line":31},[28,166401,31998],{"class":207},[28,166403,122144],{"class":34},[28,166405,166406],{"class":211},"(port",[28,166408,257],{"class":207},[28,166410,166323],{"class":38},[28,166412,166413],{"class":211},", host):\n",[28,166415,166416],{"class":30,"line":42},[28,166417,149588],{"class":207},[14,166419,166420],{},"正确：",[18,166422,166424],{"className":30429,"code":166423,"language":30431,"meta":23,"style":23},"def connect(host, port=3306):\n    pass\n",[25,166425,166426,166440],{"__ignoreMap":23},[28,166427,166428,166430,166432,166434,166436,166438],{"class":30,"line":31},[28,166429,31998],{"class":207},[28,166431,122144],{"class":34},[28,166433,166318],{"class":211},[28,166435,257],{"class":207},[28,166437,166323],{"class":38},[28,166439,30837],{"class":211},[28,166441,166442],{"class":30,"line":42},[28,166443,149588],{"class":207},[149,166445,166447],{"id":166446},"_75-默认参数的坑","7.5 默认参数的坑",[14,166449,166450],{},"不要使用可变对象作为默认参数。",[14,166452,157674],{},[18,166454,166456],{"className":30429,"code":166455,"language":30431,"meta":23,"style":23},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[25,166457,166458,166473,166478,166485,166489,166493,166504],{"__ignoreMap":23},[28,166459,166460,166462,166465,166468,166470],{"class":30,"line":31},[28,166461,31998],{"class":207},[28,166463,166464],{"class":34}," add_item",[28,166466,166467],{"class":211},"(item, items",[28,166469,257],{"class":207},[28,166471,166472],{"class":211},"[]):\n",[28,166474,166475],{"class":30,"line":42},[28,166476,166477],{"class":211},"    items.append(item)\n",[28,166479,166480,166482],{"class":30,"line":50},[28,166481,4167],{"class":207},[28,166483,166484],{"class":211}," items\n",[28,166486,166487],{"class":30,"line":58},[28,166488,2477],{"emptyLinePlaceholder":134},[28,166490,166491],{"class":30,"line":70},[28,166492,2477],{"emptyLinePlaceholder":134},[28,166494,166495,166497,166500,166502],{"class":30,"line":78},[28,166496,30466],{"class":38},[28,166498,166499],{"class":211},"(add_item(",[28,166501,165376],{"class":64},[28,166503,30548],{"class":211},[28,166505,166506,166508,166510,166513],{"class":30,"line":86},[28,166507,30466],{"class":38},[28,166509,166499],{"class":211},[28,166511,166512],{"class":64},"\"b\"",[28,166514,30548],{"class":211},[14,166516,166517],{},"第二次调用会复用第一次的列表。",[14,166519,155939],{},[18,166521,166523],{"className":30429,"code":166522,"language":30431,"meta":23,"style":23},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[25,166524,166525,166539,166552,166561,166565],{"__ignoreMap":23},[28,166526,166527,166529,166531,166533,166535,166537],{"class":30,"line":31},[28,166528,31998],{"class":207},[28,166530,166464],{"class":34},[28,166532,166467],{"class":211},[28,166534,257],{"class":207},[28,166536,95737],{"class":38},[28,166538,30837],{"class":211},[28,166540,166541,166543,166546,166548,166550],{"class":30,"line":42},[28,166542,3178],{"class":207},[28,166544,166545],{"class":211}," items ",[28,166547,38978],{"class":207},[28,166549,38984],{"class":38},[28,166551,3816],{"class":211},[28,166553,166554,166557,166559],{"class":30,"line":50},[28,166555,166556],{"class":211},"        items ",[28,166558,257],{"class":207},[28,166560,51889],{"class":211},[28,166562,166563],{"class":30,"line":58},[28,166564,166477],{"class":211},[28,166566,166567,166569],{"class":30,"line":70},[28,166568,4167],{"class":207},[28,166570,166484],{"class":211},[149,166572,166574],{"id":166573},"_76-不定长参数","7.6 不定长参数",[177,166576,166578],{"id":166577},"_761-args","7.6.1 *args",[14,166580,166581,166584],{},[25,166582,166583],{},"*args"," 接收任意数量的位置参数，得到元组。",[18,166586,166588],{"className":30429,"code":166587,"language":30431,"meta":23,"style":23},"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",[25,166589,166590,166603,166611,166622,166631,166637,166641,166645,166664],{"__ignoreMap":23},[28,166591,166592,166594,166596,166598,166600],{"class":30,"line":31},[28,166593,31998],{"class":207},[28,166595,5286],{"class":34},[28,166597,212],{"class":211},[28,166599,665],{"class":207},[28,166601,166602],{"class":211},"args):\n",[28,166604,166605,166607,166609],{"class":30,"line":42},[28,166606,159358],{"class":211},[28,166608,257],{"class":207},[28,166610,47384],{"class":38},[28,166612,166613,166615,166617,166619],{"class":30,"line":50},[28,166614,3278],{"class":207},[28,166616,156231],{"class":211},[28,166618,26094],{"class":207},[28,166620,166621],{"class":211}," args:\n",[28,166623,166624,166626,166628],{"class":30,"line":58},[28,166625,160033],{"class":211},[28,166627,9554],{"class":207},[28,166629,166630],{"class":211}," num\n",[28,166632,166633,166635],{"class":30,"line":70},[28,166634,4167],{"class":207},[28,166636,162338],{"class":211},[28,166638,166639],{"class":30,"line":78},[28,166640,2477],{"emptyLinePlaceholder":134},[28,166642,166643],{"class":30,"line":86},[28,166644,2477],{"emptyLinePlaceholder":134},[28,166646,166647,166649,166652,166654,166656,166658,166660,166662],{"class":30,"line":97},[28,166648,30466],{"class":38},[28,166650,166651],{"class":211},"(add(",[28,166653,427],{"class":38},[28,166655,12512],{"class":211},[28,166657,288],{"class":38},[28,166659,12512],{"class":211},[28,166661,282],{"class":38},[28,166663,30548],{"class":211},[28,166665,166666,166668,166670,166672,166674,166676,166678,166680,166682,166684,166686,166688],{"class":30,"line":108},[28,166667,30466],{"class":38},[28,166669,166651],{"class":211},[28,166671,427],{"class":38},[28,166673,12512],{"class":211},[28,166675,288],{"class":38},[28,166677,12512],{"class":211},[28,166679,282],{"class":38},[28,166681,12512],{"class":211},[28,166683,503],{"class":38},[28,166685,12512],{"class":211},[28,166687,529],{"class":38},[28,166689,30548],{"class":211},[177,166691,166693],{"id":166692},"_762-kwargs","7.6.2 **kwargs",[14,166695,166696,166699],{},[25,166697,166698],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[18,166701,166703],{"className":30429,"code":166702,"language":30431,"meta":23,"style":23},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[25,166704,166705,166718,166729,166735,166739,166743],{"__ignoreMap":23},[28,166706,166707,166709,166711,166713,166715],{"class":30,"line":31},[28,166708,31998],{"class":207},[28,166710,161996],{"class":34},[28,166712,212],{"class":211},[28,166714,10738],{"class":207},[28,166716,166717],{"class":211},"kwargs):\n",[28,166719,166720,166722,166724,166726],{"class":30,"line":42},[28,166721,3278],{"class":207},[28,166723,164836],{"class":211},[28,166725,26094],{"class":207},[28,166727,166728],{"class":211}," kwargs.items():\n",[28,166730,166731,166733],{"class":30,"line":50},[28,166732,32502],{"class":38},[28,166734,164848],{"class":211},[28,166736,166737],{"class":30,"line":58},[28,166738,2477],{"emptyLinePlaceholder":134},[28,166740,166741],{"class":30,"line":70},[28,166742,2477],{"emptyLinePlaceholder":134},[28,166744,166745,166747,166749,166751,166753,166755,166757,166759,166761,166763,166765,166767,166769],{"class":30,"line":78},[28,166746,162061],{"class":211},[28,166748,79861],{"class":5293},[28,166750,257],{"class":207},[28,166752,149939],{"class":64},[28,166754,12512],{"class":211},[28,166756,70272],{"class":5293},[28,166758,257],{"class":207},[28,166760,860],{"class":38},[28,166762,12512],{"class":211},[28,166764,70323],{"class":5293},[28,166766,257],{"class":207},[28,166768,69320],{"class":64},[28,166770,218],{"class":211},[149,166772,166774],{"id":166773},"_77-参数解包","7.7 参数解包",[14,166776,166777],{},"列表或元组解包为位置参数：",[18,166779,166781],{"className":30429,"code":166780,"language":30431,"meta":23,"style":23},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[25,166782,166783,166792,166807,166811,166815,166835],{"__ignoreMap":23},[28,166784,166785,166787,166789],{"class":30,"line":31},[28,166786,31998],{"class":207},[28,166788,5286],{"class":34},[28,166790,166791],{"class":211},"(a, b, c):\n",[28,166793,166794,166796,166798,166800,166802,166804],{"class":30,"line":42},[28,166795,4167],{"class":207},[28,166797,10946],{"class":211},[28,166799,691],{"class":207},[28,166801,10959],{"class":211},[28,166803,691],{"class":207},[28,166805,166806],{"class":211}," c\n",[28,166808,166809],{"class":30,"line":50},[28,166810,2477],{"emptyLinePlaceholder":134},[28,166812,166813],{"class":30,"line":58},[28,166814,2477],{"emptyLinePlaceholder":134},[28,166816,166817,166819,166821,166823,166825,166827,166829,166831,166833],{"class":30,"line":70},[28,166818,164151],{"class":211},[28,166820,257],{"class":207},[28,166822,52277],{"class":211},[28,166824,427],{"class":38},[28,166826,12512],{"class":211},[28,166828,288],{"class":38},[28,166830,12512],{"class":211},[28,166832,282],{"class":38},[28,166834,33297],{"class":211},[28,166836,166837,166839,166841,166843],{"class":30,"line":78},[28,166838,30466],{"class":38},[28,166840,166651],{"class":211},[28,166842,665],{"class":207},[28,166844,166845],{"class":211},"nums))\n",[14,166847,166848],{},"字典解包为关键字参数：",[18,166850,166852],{"className":30429,"code":166851,"language":30431,"meta":23,"style":23},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[25,166853,166854,166862,166888,166892,166896,166920],{"__ignoreMap":23},[28,166855,166856,166858,166860],{"class":30,"line":31},[28,166857,31998],{"class":207},[28,166859,149423],{"class":34},[28,166861,149426],{"class":211},[28,166863,166864,166866,166868,166870,166872,166874,166876,166878,166880,166882,166884,166886],{"class":30,"line":42},[28,166865,31350],{"class":38},[28,166867,212],{"class":211},[28,166869,263],{"class":207},[28,166871,461],{"class":64},[28,166873,1106],{"class":38},[28,166875,79861],{"class":211},[28,166877,1156],{"class":38},[28,166879,4525],{"class":38},[28,166881,70272],{"class":211},[28,166883,1156],{"class":38},[28,166885,461],{"class":64},[28,166887,218],{"class":211},[28,166889,166890],{"class":30,"line":50},[28,166891,2477],{"emptyLinePlaceholder":134},[28,166893,166894],{"class":30,"line":58},[28,166895,2477],{"emptyLinePlaceholder":134},[28,166897,166898,166900,166902,166904,166906,166908,166910,166912,166914,166916,166918],{"class":30,"line":70},[28,166899,116365],{"class":211},[28,166901,257],{"class":207},[28,166903,4525],{"class":211},[28,166905,62730],{"class":64},[28,166907,51488],{"class":211},[28,166909,149939],{"class":64},[28,166911,12512],{"class":211},[28,166913,69175],{"class":64},[28,166915,51488],{"class":211},[28,166917,860],{"class":38},[28,166919,1643],{"class":211},[28,166921,166922,166924,166926],{"class":30,"line":78},[28,166923,166207],{"class":211},[28,166925,10738],{"class":207},[28,166927,166928],{"class":211},"info)\n",[149,166930,166932],{"id":166931},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166934,166935,166938],{},[25,166936,166937],{},"lambda"," 用于定义简单匿名函数。",[18,166940,166942],{"className":30429,"code":166941,"language":30431,"meta":23,"style":23},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[25,166943,166944,166961],{"__ignoreMap":23},[28,166945,166946,166949,166951,166954,166957,166959],{"class":30,"line":31},[28,166947,166948],{"class":211},"add ",[28,166950,257],{"class":207},[28,166952,166953],{"class":207}," lambda",[28,166955,166956],{"class":211}," a, b: a ",[28,166958,691],{"class":207},[28,166960,151155],{"class":211},[28,166962,166963,166965,166967,166969,166971,166973],{"class":30,"line":42},[28,166964,30466],{"class":38},[28,166966,166651],{"class":211},[28,166968,427],{"class":38},[28,166970,12512],{"class":211},[28,166972,288],{"class":38},[28,166974,30548],{"class":211},[14,166976,166977],{},"常和排序、过滤等函数一起使用。",[14,166979,166980],{},"按分数排序：",[18,166982,166984],{"className":30429,"code":166983,"language":30431,"meta":23,"style":23},"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",[25,166985,166986,166994,167014,167034,167054,167058,167062,167085],{"__ignoreMap":23},[28,166987,166988,166990,166992],{"class":30,"line":31},[28,166989,159767],{"class":211},[28,166991,257],{"class":207},[28,166993,55498],{"class":211},[28,166995,166996,166998,167000,167002,167004,167006,167008,167010,167012],{"class":30,"line":42},[28,166997,148436],{"class":211},[28,166999,62730],{"class":64},[28,167001,51488],{"class":211},[28,167003,149939],{"class":64},[28,167005,12512],{"class":211},[28,167007,151523],{"class":64},[28,167009,51488],{"class":211},[28,167011,1199],{"class":38},[28,167013,5007],{"class":211},[28,167015,167016,167018,167020,167022,167024,167026,167028,167030,167032],{"class":30,"line":50},[28,167017,148436],{"class":211},[28,167019,62730],{"class":64},[28,167021,51488],{"class":211},[28,167023,150987],{"class":64},[28,167025,12512],{"class":211},[28,167027,151523],{"class":64},[28,167029,51488],{"class":211},[28,167031,1021],{"class":38},[28,167033,5007],{"class":211},[28,167035,167036,167038,167040,167042,167044,167046,167048,167050,167052],{"class":30,"line":58},[28,167037,148436],{"class":211},[28,167039,62730],{"class":64},[28,167041,51488],{"class":211},[28,167043,159782],{"class":64},[28,167045,12512],{"class":211},[28,167047,151523],{"class":64},[28,167049,51488],{"class":211},[28,167051,616],{"class":38},[28,167053,5007],{"class":211},[28,167055,167056],{"class":30,"line":70},[28,167057,33297],{"class":211},[28,167059,167060],{"class":30,"line":78},[28,167061,2477],{"emptyLinePlaceholder":134},[28,167063,167064,167067,167069,167071,167073,167075,167077,167079,167081,167083],{"class":30,"line":86},[28,167065,167066],{"class":211},"students.sort(",[28,167068,153997],{"class":5293},[28,167070,154000],{"class":207},[28,167072,154003],{"class":211},[28,167074,151523],{"class":64},[28,167076,112253],{"class":211},[28,167078,163579],{"class":5293},[28,167080,257],{"class":207},[28,167082,31527],{"class":38},[28,167084,218],{"class":211},[28,167086,167087,167089],{"class":30,"line":97},[28,167088,30466],{"class":38},[28,167090,165046],{"class":211},[14,167092,167093,167094,167096],{},"如果逻辑复杂，不要硬写 ",[25,167095,166937],{},"，定义普通函数更清晰。",[149,167098,167100],{"id":167099},"_79-函数作为参数","7.9 函数作为参数",[14,167102,167103],{},"函数可以作为参数传给另一个函数。",[18,167105,167107],{"className":30429,"code":167106,"language":30431,"meta":23,"style":23},"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",[25,167108,167109,167117,167127,167131,167135,167145,167152,167156,167160],{"__ignoreMap":23},[28,167110,167111,167113,167115],{"class":30,"line":31},[28,167112,31998],{"class":207},[28,167114,5286],{"class":34},[28,167116,151144],{"class":211},[28,167118,167119,167121,167123,167125],{"class":30,"line":42},[28,167120,4167],{"class":207},[28,167122,10946],{"class":211},[28,167124,691],{"class":207},[28,167126,151155],{"class":211},[28,167128,167129],{"class":30,"line":50},[28,167130,2477],{"emptyLinePlaceholder":134},[28,167132,167133],{"class":30,"line":58},[28,167134,2477],{"emptyLinePlaceholder":134},[28,167136,167137,167139,167142],{"class":30,"line":70},[28,167138,31998],{"class":207},[28,167140,167141],{"class":34}," calculate",[28,167143,167144],{"class":211},"(a, b, func):\n",[28,167146,167147,167149],{"class":30,"line":78},[28,167148,4167],{"class":207},[28,167150,167151],{"class":211}," func(a, b)\n",[28,167153,167154],{"class":30,"line":86},[28,167155,2477],{"emptyLinePlaceholder":134},[28,167157,167158],{"class":30,"line":97},[28,167159,2477],{"emptyLinePlaceholder":134},[28,167161,167162,167164,167167,167169,167171,167173],{"class":30,"line":108},[28,167163,30466],{"class":38},[28,167165,167166],{"class":211},"(calculate(",[28,167168,656],{"class":38},[28,167170,12512],{"class":211},[28,167172,910],{"class":38},[28,167174,167175],{"class":211},", add))\n",[14,167177,167178],{},"这种思想在排序、回调、框架中经常出现。",[149,167180,167182],{"id":167181},"_710-mapfiltersorted","7.10 map、filter、sorted",[177,167184,167186],{"id":167185},"_7101-map","7.10.1 map",[14,167188,167189,167191],{},[25,167190,74095],{}," 对每个元素执行函数。",[18,167193,167195],{"className":30429,"code":167194,"language":30431,"meta":23,"style":23},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[25,167196,167197,167221,167244],{"__ignoreMap":23},[28,167198,167199,167201,167203,167205,167207,167209,167211,167213,167215,167217,167219],{"class":30,"line":31},[28,167200,164151],{"class":211},[28,167202,257],{"class":207},[28,167204,52277],{"class":211},[28,167206,427],{"class":38},[28,167208,12512],{"class":211},[28,167210,288],{"class":38},[28,167212,12512],{"class":211},[28,167214,282],{"class":38},[28,167216,12512],{"class":211},[28,167218,503],{"class":38},[28,167220,33297],{"class":211},[28,167222,167223,167225,167227,167230,167232,167234,167237,167239,167241],{"class":30,"line":42},[28,167224,161357],{"class":211},[28,167226,257],{"class":207},[28,167228,167229],{"class":38}," map",[28,167231,212],{"class":211},[28,167233,166937],{"class":207},[28,167235,167236],{"class":211}," x: x ",[28,167238,665],{"class":207},[28,167240,14832],{"class":38},[28,167242,167243],{"class":211},", nums)\n",[28,167245,167246,167248,167250,167252],{"class":30,"line":50},[28,167247,30466],{"class":38},[28,167249,212],{"class":211},[28,167251,154121],{"class":38},[28,167253,166119],{"class":211},[177,167255,167257],{"id":167256},"_7102-filter","7.10.2 filter",[14,167259,167260,167262],{},[25,167261,80102],{}," 保留满足条件的元素。",[18,167264,167266],{"className":30429,"code":167265,"language":30431,"meta":23,"style":23},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[25,167267,167268,167296,167321],{"__ignoreMap":23},[28,167269,167270,167272,167274,167276,167278,167280,167282,167284,167286,167288,167290,167292,167294],{"class":30,"line":31},[28,167271,164151],{"class":211},[28,167273,257],{"class":207},[28,167275,52277],{"class":211},[28,167277,427],{"class":38},[28,167279,12512],{"class":211},[28,167281,288],{"class":38},[28,167283,12512],{"class":211},[28,167285,282],{"class":38},[28,167287,12512],{"class":211},[28,167289,503],{"class":38},[28,167291,12512],{"class":211},[28,167293,529],{"class":38},[28,167295,33297],{"class":211},[28,167297,167298,167300,167302,167305,167307,167309,167311,167313,167315,167317,167319],{"class":30,"line":42},[28,167299,161357],{"class":211},[28,167301,257],{"class":207},[28,167303,167304],{"class":38}," filter",[28,167306,212],{"class":211},[28,167308,166937],{"class":207},[28,167310,167236],{"class":211},[28,167312,538],{"class":207},[28,167314,14832],{"class":38},[28,167316,101610],{"class":207},[28,167318,4170],{"class":38},[28,167320,167243],{"class":211},[28,167322,167323,167325,167327,167329],{"class":30,"line":50},[28,167324,30466],{"class":38},[28,167326,212],{"class":211},[28,167328,154121],{"class":38},[28,167330,166119],{"class":211},[177,167332,167334],{"id":167333},"_7103-sorted","7.10.3 sorted",[14,167336,167337,167339],{},[25,167338,165287],{}," 返回排序后的新列表。",[18,167341,167343],{"className":30429,"code":167342,"language":30431,"meta":23,"style":23},"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",[25,167344,167345,167353,167373,167393,167413,167417,167421,167450],{"__ignoreMap":23},[28,167346,167347,167349,167351],{"class":30,"line":31},[28,167348,159767],{"class":211},[28,167350,257],{"class":207},[28,167352,55498],{"class":211},[28,167354,167355,167357,167359,167361,167363,167365,167367,167369,167371],{"class":30,"line":42},[28,167356,148436],{"class":211},[28,167358,62730],{"class":64},[28,167360,51488],{"class":211},[28,167362,149939],{"class":64},[28,167364,12512],{"class":211},[28,167366,151523],{"class":64},[28,167368,51488],{"class":211},[28,167370,1199],{"class":38},[28,167372,5007],{"class":211},[28,167374,167375,167377,167379,167381,167383,167385,167387,167389,167391],{"class":30,"line":50},[28,167376,148436],{"class":211},[28,167378,62730],{"class":64},[28,167380,51488],{"class":211},[28,167382,150987],{"class":64},[28,167384,12512],{"class":211},[28,167386,151523],{"class":64},[28,167388,51488],{"class":211},[28,167390,1021],{"class":38},[28,167392,5007],{"class":211},[28,167394,167395,167397,167399,167401,167403,167405,167407,167409,167411],{"class":30,"line":58},[28,167396,148436],{"class":211},[28,167398,62730],{"class":64},[28,167400,51488],{"class":211},[28,167402,159782],{"class":64},[28,167404,12512],{"class":211},[28,167406,151523],{"class":64},[28,167408,51488],{"class":211},[28,167410,616],{"class":38},[28,167412,5007],{"class":211},[28,167414,167415],{"class":30,"line":70},[28,167416,33297],{"class":211},[28,167418,167419],{"class":30,"line":78},[28,167420,2477],{"emptyLinePlaceholder":134},[28,167422,167423,167425,167427,167429,167432,167434,167436,167438,167440,167442,167444,167446,167448],{"class":30,"line":86},[28,167424,161357],{"class":211},[28,167426,257],{"class":207},[28,167428,163655],{"class":38},[28,167430,167431],{"class":211},"(students, ",[28,167433,153997],{"class":5293},[28,167435,154000],{"class":207},[28,167437,154003],{"class":211},[28,167439,151523],{"class":64},[28,167441,112253],{"class":211},[28,167443,163579],{"class":5293},[28,167445,257],{"class":207},[28,167447,31527],{"class":38},[28,167449,218],{"class":211},[28,167451,167452,167454],{"class":30,"line":97},[28,167453,30466],{"class":38},[28,167455,76636],{"class":211},[149,167457,167459],{"id":167458},"_711-闭包入门","7.11 闭包入门",[14,167461,167462],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[18,167464,167466],{"className":30429,"code":167465,"language":30431,"meta":23,"style":23},"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",[25,167467,167468,167478,167488,167499,167503,167510,167514,167518,167532],{"__ignoreMap":23},[28,167469,167470,167472,167475],{"class":30,"line":31},[28,167471,31998],{"class":207},[28,167473,167474],{"class":34}," outer",[28,167476,167477],{"class":211},"(base):\n",[28,167479,167480,167482,167485],{"class":30,"line":42},[28,167481,30852],{"class":207},[28,167483,167484],{"class":34}," inner",[28,167486,167487],{"class":211},"(num):\n",[28,167489,167490,167492,167495,167497],{"class":30,"line":50},[28,167491,14829],{"class":207},[28,167493,167494],{"class":211}," base ",[28,167496,691],{"class":207},[28,167498,166630],{"class":211},[28,167500,167501],{"class":30,"line":58},[28,167502,2477],{"emptyLinePlaceholder":134},[28,167504,167505,167507],{"class":30,"line":70},[28,167506,4167],{"class":207},[28,167508,167509],{"class":211}," inner\n",[28,167511,167512],{"class":30,"line":78},[28,167513,2477],{"emptyLinePlaceholder":134},[28,167515,167516],{"class":30,"line":86},[28,167517,2477],{"emptyLinePlaceholder":134},[28,167519,167520,167523,167525,167528,167530],{"class":30,"line":97},[28,167521,167522],{"class":211},"add_10 ",[28,167524,257],{"class":207},[28,167526,167527],{"class":211}," outer(",[28,167529,656],{"class":38},[28,167531,218],{"class":211},[28,167533,167534,167536,167539,167541],{"class":30,"line":108},[28,167535,30466],{"class":38},[28,167537,167538],{"class":211},"(add_10(",[28,167540,529],{"class":38},[28,167542,30548],{"class":211},[14,167544,167545],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[149,167547,167549],{"id":167548},"_712-装饰器入门","7.12 装饰器入门",[14,167551,167552],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[18,167554,167556],{"className":30429,"code":167555,"language":30431,"meta":23,"style":23},"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",[25,167557,167558,167567,167576,167587,167592,167603,167607,167614,167618,167622,167627,167635,167645,167649,167653],{"__ignoreMap":23},[28,167559,167560,167562,167564],{"class":30,"line":31},[28,167561,31998],{"class":207},[28,167563,87242],{"class":34},[28,167565,167566],{"class":211},"(func):\n",[28,167568,167569,167571,167574],{"class":30,"line":42},[28,167570,30852],{"class":207},[28,167572,167573],{"class":34}," wrapper",[28,167575,32004],{"class":211},[28,167577,167578,167580,167582,167585],{"class":30,"line":50},[28,167579,32502],{"class":38},[28,167581,212],{"class":211},[28,167583,167584],{"class":64},"\"函数开始执行\"",[28,167586,218],{"class":211},[28,167588,167589],{"class":30,"line":58},[28,167590,167591],{"class":211},"        func()\n",[28,167593,167594,167596,167598,167601],{"class":30,"line":70},[28,167595,32502],{"class":38},[28,167597,212],{"class":211},[28,167599,167600],{"class":64},"\"函数执行结束\"",[28,167602,218],{"class":211},[28,167604,167605],{"class":30,"line":78},[28,167606,2477],{"emptyLinePlaceholder":134},[28,167608,167609,167611],{"class":30,"line":86},[28,167610,4167],{"class":207},[28,167612,167613],{"class":211}," wrapper\n",[28,167615,167616],{"class":30,"line":97},[28,167617,2477],{"emptyLinePlaceholder":134},[28,167619,167620],{"class":30,"line":108},[28,167621,2477],{"emptyLinePlaceholder":134},[28,167623,167624],{"class":30,"line":1407},[28,167625,167626],{"class":34},"@log\n",[28,167628,167629,167631,167633],{"class":30,"line":1690},[28,167630,31998],{"class":207},[28,167632,161047],{"class":34},[28,167634,32004],{"class":211},[28,167636,167637,167639,167641,167643],{"class":30,"line":1695},[28,167638,31350],{"class":38},[28,167640,212],{"class":211},[28,167642,5921],{"class":64},[28,167644,218],{"class":211},[28,167646,167647],{"class":30,"line":1701},[28,167648,2477],{"emptyLinePlaceholder":134},[28,167650,167651],{"class":30,"line":1706},[28,167652,2477],{"emptyLinePlaceholder":134},[28,167654,167655],{"class":30,"line":1720},[28,167656,161082],{"class":211},[14,167658,158325],{},[18,167660,167662],{"className":30429,"code":167661,"language":30431,"meta":23,"style":23},"say_hello = log(say_hello)\n",[25,167663,167664],{"__ignoreMap":23},[28,167665,167666,167669,167671],{"class":30,"line":31},[28,167667,167668],{"class":211},"say_hello ",[28,167670,257],{"class":207},[28,167672,167673],{"class":211}," log(say_hello)\n",[14,167675,167676],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[149,167678,167680],{"id":167679},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[18,167682,167684],{"className":30429,"code":167683,"language":30431,"meta":23,"style":23},"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",[25,167685,167686,167694,167711,167721,167740,167750,167757,167761,167767,167771,167775,167779,167787,167797,167801,167805],{"__ignoreMap":23},[28,167687,167688,167690,167692],{"class":30,"line":31},[28,167689,31998],{"class":207},[28,167691,87242],{"class":34},[28,167693,167566],{"class":211},[28,167695,167696,167698,167700,167702,167704,167707,167709],{"class":30,"line":42},[28,167697,30852],{"class":207},[28,167699,167573],{"class":34},[28,167701,212],{"class":211},[28,167703,665],{"class":207},[28,167705,167706],{"class":211},"args, ",[28,167708,10738],{"class":207},[28,167710,166717],{"class":211},[28,167712,167713,167715,167717,167719],{"class":30,"line":50},[28,167714,32502],{"class":38},[28,167716,212],{"class":211},[28,167718,167584],{"class":64},[28,167720,218],{"class":211},[28,167722,167723,167726,167728,167731,167733,167735,167737],{"class":30,"line":58},[28,167724,167725],{"class":211},"        result ",[28,167727,257],{"class":207},[28,167729,167730],{"class":211}," func(",[28,167732,665],{"class":207},[28,167734,167706],{"class":211},[28,167736,10738],{"class":207},[28,167738,167739],{"class":211},"kwargs)\n",[28,167741,167742,167744,167746,167748],{"class":30,"line":70},[28,167743,32502],{"class":38},[28,167745,212],{"class":211},[28,167747,167600],{"class":64},[28,167749,218],{"class":211},[28,167751,167752,167754],{"class":30,"line":78},[28,167753,14829],{"class":207},[28,167755,167756],{"class":211}," result\n",[28,167758,167759],{"class":30,"line":86},[28,167760,2477],{"emptyLinePlaceholder":134},[28,167762,167763,167765],{"class":30,"line":97},[28,167764,4167],{"class":207},[28,167766,167613],{"class":211},[28,167768,167769],{"class":30,"line":108},[28,167770,2477],{"emptyLinePlaceholder":134},[28,167772,167773],{"class":30,"line":1407},[28,167774,2477],{"emptyLinePlaceholder":134},[28,167776,167777],{"class":30,"line":1690},[28,167778,167626],{"class":34},[28,167780,167781,167783,167785],{"class":30,"line":1695},[28,167782,31998],{"class":207},[28,167784,5286],{"class":34},[28,167786,151144],{"class":211},[28,167788,167789,167791,167793,167795],{"class":30,"line":1701},[28,167790,4167],{"class":207},[28,167792,10946],{"class":211},[28,167794,691],{"class":207},[28,167796,151155],{"class":211},[28,167798,167799],{"class":30,"line":1706},[28,167800,2477],{"emptyLinePlaceholder":134},[28,167802,167803],{"class":30,"line":1720},[28,167804,2477],{"emptyLinePlaceholder":134},[28,167806,167807,167809,167811,167813,167815,167817],{"class":30,"line":1725},[28,167808,30466],{"class":38},[28,167810,166651],{"class":211},[28,167812,656],{"class":38},[28,167814,12512],{"class":211},[28,167816,910],{"class":38},[28,167818,30548],{"class":211},[14,167820,167821,167822,101069,167824,167826],{},"这个写法使用 ",[25,167823,166583],{},[25,167825,166698],{}," 接收原函数的所有参数。",[149,167828,167830],{"id":167829},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167832,123343],{},[161,167834,167835,167838,167841],{},[119,167836,167837],{},"给定一组学生数据。",[119,167839,167840],{},"封装函数，根据传入规则筛选学生。",[119,167842,167843],{},"筛选及格、优秀、未成年学生。",[14,167845,10112],{},[18,167847,167849],{"className":30429,"code":167848,"language":30431,"meta":23,"style":23},"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",[25,167850,167851,167859,167887,167915,167943,167947,167951,167955,167965,167973,167983,167990,167995,168001,168005,168009,168033,168056,168079,168083,168090,168097],{"__ignoreMap":23},[28,167852,167853,167855,167857],{"class":30,"line":31},[28,167854,159767],{"class":211},[28,167856,257],{"class":207},[28,167858,55498],{"class":211},[28,167860,167861,167863,167865,167867,167869,167871,167873,167875,167877,167879,167881,167883,167885],{"class":30,"line":42},[28,167862,148436],{"class":211},[28,167864,62730],{"class":64},[28,167866,51488],{"class":211},[28,167868,149939],{"class":64},[28,167870,12512],{"class":211},[28,167872,69175],{"class":64},[28,167874,51488],{"class":211},[28,167876,860],{"class":38},[28,167878,12512],{"class":211},[28,167880,151523],{"class":64},[28,167882,51488],{"class":211},[28,167884,1199],{"class":38},[28,167886,5007],{"class":211},[28,167888,167889,167891,167893,167895,167897,167899,167901,167903,167905,167907,167909,167911,167913],{"class":30,"line":50},[28,167890,148436],{"class":211},[28,167892,62730],{"class":64},[28,167894,51488],{"class":211},[28,167896,150987],{"class":64},[28,167898,12512],{"class":211},[28,167900,69175],{"class":64},[28,167902,51488],{"class":211},[28,167904,835],{"class":38},[28,167906,12512],{"class":211},[28,167908,151523],{"class":64},[28,167910,51488],{"class":211},[28,167912,1021],{"class":38},[28,167914,5007],{"class":211},[28,167916,167917,167919,167921,167923,167925,167927,167929,167931,167933,167935,167937,167939,167941],{"class":30,"line":58},[28,167918,148436],{"class":211},[28,167920,62730],{"class":64},[28,167922,51488],{"class":211},[28,167924,159782],{"class":64},[28,167926,12512],{"class":211},[28,167928,69175],{"class":64},[28,167930,51488],{"class":211},[28,167932,885],{"class":38},[28,167934,12512],{"class":211},[28,167936,151523],{"class":64},[28,167938,51488],{"class":211},[28,167940,1092],{"class":38},[28,167942,5007],{"class":211},[28,167944,167945],{"class":30,"line":70},[28,167946,33297],{"class":211},[28,167948,167949],{"class":30,"line":78},[28,167950,2477],{"emptyLinePlaceholder":134},[28,167952,167953],{"class":30,"line":86},[28,167954,2477],{"emptyLinePlaceholder":134},[28,167956,167957,167959,167962],{"class":30,"line":97},[28,167958,31998],{"class":207},[28,167960,167961],{"class":34}," filter_students",[28,167963,167964],{"class":211},"(students, condition):\n",[28,167966,167967,167969,167971],{"class":30,"line":108},[28,167968,161274],{"class":211},[28,167970,257],{"class":207},[28,167972,51889],{"class":211},[28,167974,167975,167977,167979,167981],{"class":30,"line":1407},[28,167976,3278],{"class":207},[28,167978,152188],{"class":211},[28,167980,26094],{"class":207},[28,167982,152193],{"class":211},[28,167984,167985,167987],{"class":30,"line":1690},[28,167986,2574],{"class":207},[28,167988,167989],{"class":211}," condition(student):\n",[28,167991,167992],{"class":30,"line":1695},[28,167993,167994],{"class":211},"            result.append(student)\n",[28,167996,167997,167999],{"class":30,"line":1701},[28,167998,4167],{"class":207},[28,168000,167756],{"class":211},[28,168002,168003],{"class":30,"line":1706},[28,168004,2477],{"emptyLinePlaceholder":134},[28,168006,168007],{"class":30,"line":1720},[28,168008,2477],{"emptyLinePlaceholder":134},[28,168010,168011,168013,168015,168018,168020,168023,168025,168027,168029,168031],{"class":30,"line":1725},[28,168012,165752],{"class":211},[28,168014,257],{"class":207},[28,168016,168017],{"class":211}," filter_students(students, ",[28,168019,166937],{"class":207},[28,168021,168022],{"class":211}," s: s[",[28,168024,151523],{"class":64},[28,168026,4520],{"class":211},[28,168028,1788],{"class":207},[28,168030,157888],{"class":38},[28,168032,218],{"class":211},[28,168034,168035,168038,168040,168042,168044,168046,168048,168050,168052,168054],{"class":30,"line":1731},[28,168036,168037],{"class":211},"excellent ",[28,168039,257],{"class":207},[28,168041,168017],{"class":211},[28,168043,166937],{"class":207},[28,168045,168022],{"class":211},[28,168047,151523],{"class":64},[28,168049,4520],{"class":211},[28,168051,1788],{"class":207},[28,168053,157839],{"class":38},[28,168055,218],{"class":211},[28,168057,168058,168061,168063,168065,168067,168069,168071,168073,168075,168077],{"class":30,"line":1752},[28,168059,168060],{"class":211},"under_age ",[28,168062,257],{"class":207},[28,168064,168017],{"class":211},[28,168066,166937],{"class":207},[28,168068,168022],{"class":211},[28,168070,69175],{"class":64},[28,168072,4520],{"class":211},[28,168074,1120],{"class":207},[28,168076,156336],{"class":38},[28,168078,218],{"class":211},[28,168080,168081],{"class":30,"line":1757},[28,168082,2477],{"emptyLinePlaceholder":134},[28,168084,168085,168087],{"class":30,"line":1771},[28,168086,30466],{"class":38},[28,168088,168089],{"class":211},"(passed)\n",[28,168091,168092,168094],{"class":30,"line":1776},[28,168093,30466],{"class":38},[28,168095,168096],{"class":211},"(excellent)\n",[28,168098,168099,168101],{"class":30,"line":1805},[28,168100,30466],{"class":38},[28,168102,168103],{"class":211},"(under_age)\n",[149,168105,168107],{"id":168106},"_715-易错点","7.15 易错点",[161,168109,168110,168113,168121,168126,168137],{},[119,168111,168112],{},"默认参数不要写可变对象。",[119,168114,168115,168117,168118,168120],{},[25,168116,166583],{}," 是元组，",[25,168119,166698],{}," 是字典。",[119,168122,168123,168125],{},[25,168124,166937],{}," 只适合简单表达式。",[119,168127,168128,101069,168130,168132,168133,168136],{},[25,168129,74095],{},[25,168131,80102],{}," 的结果是迭代器，常用 ",[25,168134,168135],{},"list()"," 转换查看。",[119,168138,168139],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[149,168141,168143],{"id":168142},"_716-本章练习","7.16 本章练习",[161,168145,168146,168153,168159,168164,168169],{},[119,168147,168148,168149,168152],{},"写函数 ",[25,168150,168151],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[119,168154,168148,168155,168158],{},[25,168156,168157],{},"print_user(**kwargs)","，输出用户所有字段。",[119,168160,104417,168161,168163],{},[25,168162,166937],{}," 对学生列表按年龄排序。",[119,168165,104417,168166,168168],{},[25,168167,80102],{}," 找出成绩不及格的学生。",[119,168170,168171],{},"写一个装饰器，统计函数执行前后的提示信息。",[126,168173,168174],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":168176},[168177,168178,168179,168180,168181,168182,168186,168187,168188,168189,168194,168195,168196,168197,168198,168199],{"id":166035,"depth":42,"text":166036},{"id":166149,"depth":42,"text":166150},{"id":166238,"depth":42,"text":166239},{"id":166300,"depth":42,"text":166301},{"id":166446,"depth":42,"text":166447},{"id":166573,"depth":42,"text":166574,"children":168183},[168184,168185],{"id":166577,"depth":50,"text":166578},{"id":166692,"depth":50,"text":166693},{"id":166773,"depth":42,"text":166774},{"id":166931,"depth":42,"text":166932},{"id":167099,"depth":42,"text":167100},{"id":167181,"depth":42,"text":167182,"children":168190},[168191,168192,168193],{"id":167185,"depth":50,"text":167186},{"id":167256,"depth":50,"text":167257},{"id":167333,"depth":50,"text":167334},{"id":167458,"depth":42,"text":167459},{"id":167548,"depth":42,"text":167549},{"id":167679,"depth":42,"text":167680},{"id":167829,"depth":42,"text":167830},{"id":168106,"depth":42,"text":168107},{"id":168142,"depth":42,"text":168143},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166027,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168206,"title":168207,"body":168208,"description":131,"extension":132,"meta":170727,"navigation":134,"path":170728,"seo":170729,"stem":170730,"__hash__":170731},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168209,"toc":170702},[168210,168213,168217,168220,168223,168254,168258,168262,168265,168292,168296,168299,168350,168353,168368,168371,168406,168410,168412,168436,168439,168499,168503,168507,168510,168567,168570,168590,168594,168597,168660,168664,168667,168723,168730,168754,168758,168761,168824,168828,168833,168884,168887,168891,168896,168963,168966,169048,169052,169057,169108,169111,169115,169118,169121,169129,169132,169178,169181,169227,169231,169237,169281,169284,169330,169333,169373,169376,169437,169441,169444,169534,169537,169679,169682,169749,169753,169756,169759,169900,169903,169981,169984,170160,170164,170166,170177,170179,170378,170382,170626,170630,170664,170668,170699],[10,168211,168207],{"id":168212},"_8-文件操作",[149,168214,168216],{"id":168215},"_81-文件操作的意义","8.1 文件操作的意义",[14,168218,168219],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168221,168222],{},"常见文件类型：",[161,168224,168225,168231,168237,168243,168249],{},[119,168226,168227,168230],{},[25,168228,168229],{},".txt","：普通文本。",[119,168232,168233,168236],{},[25,168234,168235],{},".csv","：表格文本。",[119,168238,168239,168242],{},[25,168240,168241],{},".json","：结构化数据。",[119,168244,168245,168248],{},[25,168246,168247],{},".log","：日志文件。",[119,168250,168251,168253],{},[25,168252,146403],{},"：Python 源代码。",[149,168255,168257],{"id":168256},"_82-路径","8.2 路径",[177,168259,168261],{"id":168260},"_821-相对路径","8.2.1 相对路径",[14,168263,168264],{},"相对当前运行目录：",[18,168266,168268],{"className":30429,"code":168267,"language":30431,"meta":23,"style":23},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[25,168269,168270],{"__ignoreMap":23},[28,168271,168272,168274,168276,168278,168280,168282,168284,168286,168288,168290],{"class":30,"line":31},[28,168273,86966],{"class":38},[28,168275,212],{"class":211},[28,168277,146847],{"class":64},[28,168279,12512],{"class":211},[28,168281,146852],{"class":64},[28,168283,12512],{"class":211},[28,168285,146857],{"class":5293},[28,168287,257],{"class":207},[28,168289,146862],{"class":64},[28,168291,218],{"class":211},[177,168293,168295],{"id":168294},"_822-绝对路径","8.2.2 绝对路径",[14,168297,168298],{},"从根目录或盘符开始：",[18,168300,168302],{"className":30429,"code":168301,"language":30431,"meta":23,"style":23},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[25,168303,168304,168327],{"__ignoreMap":23},[28,168305,168306,168308,168310,168313,168315,168317,168319,168321,168323,168325],{"class":30,"line":31},[28,168307,86966],{"class":38},[28,168309,212],{"class":211},[28,168311,168312],{"class":64},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[28,168314,12512],{"class":211},[28,168316,146852],{"class":64},[28,168318,12512],{"class":211},[28,168320,146857],{"class":5293},[28,168322,257],{"class":207},[28,168324,146862],{"class":64},[28,168326,218],{"class":211},[28,168328,168329,168331,168333,168336,168338,168340,168342,168344,168346,168348],{"class":30,"line":42},[28,168330,86966],{"class":38},[28,168332,212],{"class":211},[28,168334,168335],{"class":64},"\"D:\u002Fdata\u002Fdata.txt\"",[28,168337,12512],{"class":211},[28,168339,146852],{"class":64},[28,168341,12512],{"class":211},[28,168343,146857],{"class":5293},[28,168345,257],{"class":207},[28,168347,146862],{"class":64},[28,168349,218],{"class":211},[14,168351,168352],{},"Windows 路径建议写成：",[18,168354,168356],{"className":30429,"code":168355,"language":30431,"meta":23,"style":23},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[25,168357,168358],{"__ignoreMap":23},[28,168359,168360,168363,168365],{"class":30,"line":31},[28,168361,168362],{"class":211},"path ",[28,168364,257],{"class":207},[28,168366,168367],{"class":64}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168369,168370],{},"或原始字符串：",[18,168372,168374],{"className":30429,"code":168373,"language":30431,"meta":23,"style":23},"path = r\"D:\\data\\data.txt\"\n",[25,168375,168376],{"__ignoreMap":23},[28,168377,168378,168380,168382,168384,168386,168389,168392,168395,168397,168399,168401,168404],{"class":30,"line":31},[28,168379,168362],{"class":211},[28,168381,257],{"class":207},[28,168383,17198],{"class":207},[28,168385,461],{"class":64},[28,168387,168388],{"class":48028},"D:",[28,168390,168391],{"class":38},"\\d",[28,168393,168394],{"class":48028},"ata",[28,168396,168391],{"class":38},[28,168398,168394],{"class":48028},[28,168400,768],{"class":38},[28,168402,168403],{"class":48028},"txt",[28,168405,25204],{"class":64},[149,168407,168409],{"id":168408},"_83-open函数","8.3 open函数",[14,168411,5258],{},[18,168413,168415],{"className":30429,"code":168414,"language":30431,"meta":23,"style":23},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[25,168416,168417],{"__ignoreMap":23},[28,168418,168419,168421,168423,168425,168428,168430,168432,168434],{"class":30,"line":31},[28,168420,45405],{"class":5293},[28,168422,13641],{"class":207},[28,168424,146842],{"class":38},[28,168426,168427],{"class":211},"(文件路径, 打开模式, ",[28,168429,146857],{"class":5293},[28,168431,257],{"class":207},[28,168433,146862],{"class":64},[28,168435,218],{"class":211},[14,168437,168438],{},"常见模式：",[347,168440,168441,168450],{},[350,168442,168443],{},[353,168444,168445,168448],{},[356,168446,168447],{},"模式",[356,168449,25920],{},[394,168451,168452,168461,168470,168479,168489],{},[353,168453,168454,168458],{},[399,168455,168456],{},[25,168457,880],{},[399,168459,168460],{},"只读，文件不存在会报错",[353,168462,168463,168467],{},[399,168464,168465],{},[25,168466,1005],{},[399,168468,168469],{},"只写，文件不存在会创建，存在会清空",[353,168471,168472,168476],{},[399,168473,168474],{},[25,168475,448],{},[399,168477,168478],{},"追加，文件不存在会创建",[353,168480,168481,168486],{},[399,168482,168483],{},[25,168484,168485],{},"rb",[399,168487,168488],{},"二进制只读",[353,168490,168491,168496],{},[399,168492,168493],{},[25,168494,168495],{},"wb",[399,168497,168498],{},"二进制只写",[149,168500,168502],{"id":168501},"_84-读取文件","8.4 读取文件",[177,168504,168506],{"id":168505},"_841-read","8.4.1 read",[14,168508,168509],{},"一次读取全部内容：",[18,168511,168513],{"className":30429,"code":168512,"language":30431,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[25,168514,168515,168541,168553,168560],{"__ignoreMap":23},[28,168516,168517,168519,168521,168523,168525,168527,168529,168531,168533,168535,168537,168539],{"class":30,"line":31},[28,168518,45405],{"class":5293},[28,168520,13641],{"class":207},[28,168522,146842],{"class":38},[28,168524,212],{"class":211},[28,168526,146847],{"class":64},[28,168528,12512],{"class":211},[28,168530,146852],{"class":64},[28,168532,12512],{"class":211},[28,168534,146857],{"class":5293},[28,168536,257],{"class":207},[28,168538,146862],{"class":64},[28,168540,218],{"class":211},[28,168542,168543,168546,168548,168550],{"class":30,"line":42},[28,168544,168545],{"class":211},"content ",[28,168547,257],{"class":207},[28,168549,148204],{"class":5293},[28,168551,168552],{"class":211},".read()\n",[28,168554,168555,168557],{"class":30,"line":50},[28,168556,30466],{"class":38},[28,168558,168559],{"class":211},"(content)\n",[28,168561,168562,168564],{"class":30,"line":58},[28,168563,45405],{"class":5293},[28,168565,168566],{"class":211},".close()\n",[14,168568,168569],{},"可以指定读取字符数：",[18,168571,168573],{"className":30429,"code":168572,"language":30431,"meta":23,"style":23},"content = file.read(10)\n",[25,168574,168575],{"__ignoreMap":23},[28,168576,168577,168579,168581,168583,168586,168588],{"class":30,"line":31},[28,168578,168545],{"class":211},[28,168580,257],{"class":207},[28,168582,148204],{"class":5293},[28,168584,168585],{"class":211},".read(",[28,168587,656],{"class":38},[28,168589,218],{"class":211},[177,168591,168593],{"id":168592},"_842-readline","8.4.2 readline",[14,168595,168596],{},"一次读取一行：",[18,168598,168600],{"className":30429,"code":168599,"language":30431,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[25,168601,168602,168628,168632,168643,168650,168654],{"__ignoreMap":23},[28,168603,168604,168606,168608,168610,168612,168614,168616,168618,168620,168622,168624,168626],{"class":30,"line":31},[28,168605,45405],{"class":5293},[28,168607,13641],{"class":207},[28,168609,146842],{"class":38},[28,168611,212],{"class":211},[28,168613,146847],{"class":64},[28,168615,12512],{"class":211},[28,168617,146852],{"class":64},[28,168619,12512],{"class":211},[28,168621,146857],{"class":5293},[28,168623,257],{"class":207},[28,168625,146862],{"class":64},[28,168627,218],{"class":211},[28,168629,168630],{"class":30,"line":42},[28,168631,2477],{"emptyLinePlaceholder":134},[28,168633,168634,168636,168638,168640],{"class":30,"line":50},[28,168635,147303],{"class":211},[28,168637,257],{"class":207},[28,168639,148204],{"class":5293},[28,168641,168642],{"class":211},".readline()\n",[28,168644,168645,168647],{"class":30,"line":58},[28,168646,30466],{"class":38},[28,168648,168649],{"class":211},"(line)\n",[28,168651,168652],{"class":30,"line":70},[28,168653,2477],{"emptyLinePlaceholder":134},[28,168655,168656,168658],{"class":30,"line":78},[28,168657,45405],{"class":5293},[28,168659,168566],{"class":211},[177,168661,168663],{"id":168662},"_843-readlines","8.4.3 readlines",[14,168665,168666],{},"读取所有行，返回列表：",[18,168668,168670],{"className":30429,"code":168669,"language":30431,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[25,168671,168672,168698,168710,168717],{"__ignoreMap":23},[28,168673,168674,168676,168678,168680,168682,168684,168686,168688,168690,168692,168694,168696],{"class":30,"line":31},[28,168675,45405],{"class":5293},[28,168677,13641],{"class":207},[28,168679,146842],{"class":38},[28,168681,212],{"class":211},[28,168683,146847],{"class":64},[28,168685,12512],{"class":211},[28,168687,146852],{"class":64},[28,168689,12512],{"class":211},[28,168691,146857],{"class":5293},[28,168693,257],{"class":207},[28,168695,146862],{"class":64},[28,168697,218],{"class":211},[28,168699,168700,168703,168705,168707],{"class":30,"line":42},[28,168701,168702],{"class":211},"lines ",[28,168704,257],{"class":207},[28,168706,148204],{"class":5293},[28,168708,168709],{"class":211},".readlines()\n",[28,168711,168712,168714],{"class":30,"line":50},[28,168713,30466],{"class":38},[28,168715,168716],{"class":211},"(lines)\n",[28,168718,168719,168721],{"class":30,"line":58},[28,168720,45405],{"class":5293},[28,168722,168566],{"class":211},[14,168724,168725,168726,168729],{},"每一行通常带有换行符，可以用 ",[25,168727,168728],{},"strip()"," 去掉：",[18,168731,168733],{"className":30429,"code":168732,"language":30431,"meta":23,"style":23},"for line in lines:\n    print(line.strip())\n",[25,168734,168735,168747],{"__ignoreMap":23},[28,168736,168737,168739,168742,168744],{"class":30,"line":31},[28,168738,3102],{"class":207},[28,168740,168741],{"class":211}," line ",[28,168743,26094],{"class":207},[28,168745,168746],{"class":211}," lines:\n",[28,168748,168749,168751],{"class":30,"line":42},[28,168750,31350],{"class":38},[28,168752,168753],{"class":211},"(line.strip())\n",[177,168755,168757],{"id":168756},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168759,168760],{},"推荐读取大文件时使用：",[18,168762,168764],{"className":30429,"code":168763,"language":30431,"meta":23,"style":23},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[25,168765,168766,168792,168796,168808,168814,168818],{"__ignoreMap":23},[28,168767,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790],{"class":30,"line":31},[28,168769,45405],{"class":5293},[28,168771,13641],{"class":207},[28,168773,146842],{"class":38},[28,168775,212],{"class":211},[28,168777,146847],{"class":64},[28,168779,12512],{"class":211},[28,168781,146852],{"class":64},[28,168783,12512],{"class":211},[28,168785,146857],{"class":5293},[28,168787,257],{"class":207},[28,168789,146862],{"class":64},[28,168791,218],{"class":211},[28,168793,168794],{"class":30,"line":42},[28,168795,2477],{"emptyLinePlaceholder":134},[28,168797,168798,168800,168802,168804,168806],{"class":30,"line":50},[28,168799,3102],{"class":207},[28,168801,168741],{"class":211},[28,168803,26094],{"class":207},[28,168805,148204],{"class":5293},[28,168807,3816],{"class":211},[28,168809,168810,168812],{"class":30,"line":58},[28,168811,31350],{"class":38},[28,168813,168753],{"class":211},[28,168815,168816],{"class":30,"line":70},[28,168817,2477],{"emptyLinePlaceholder":134},[28,168819,168820,168822],{"class":30,"line":78},[28,168821,45405],{"class":5293},[28,168823,168566],{"class":211},[149,168825,168827],{"id":168826},"_85-with语句","8.5 with语句",[14,168829,168830,168832],{},[25,168831,107884],{}," 会自动关闭文件，推荐使用。",[18,168834,168836],{"className":30429,"code":168835,"language":30431,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[25,168837,168838,168868,168878],{"__ignoreMap":23},[28,168839,168840,168842,168844,168846,168848,168850,168852,168854,168856,168858,168860,168862,168864,168866],{"class":30,"line":31},[28,168841,107884],{"class":207},[28,168843,146842],{"class":38},[28,168845,212],{"class":211},[28,168847,146847],{"class":64},[28,168849,12512],{"class":211},[28,168851,146852],{"class":64},[28,168853,12512],{"class":211},[28,168855,146857],{"class":5293},[28,168857,257],{"class":207},[28,168859,146862],{"class":64},[28,168861,13791],{"class":211},[28,168863,31434],{"class":207},[28,168865,148204],{"class":5293},[28,168867,3816],{"class":211},[28,168869,168870,168872,168874,168876],{"class":30,"line":42},[28,168871,146874],{"class":211},[28,168873,257],{"class":207},[28,168875,148204],{"class":5293},[28,168877,168552],{"class":211},[28,168879,168880,168882],{"class":30,"line":50},[28,168881,31350],{"class":38},[28,168883,168559],{"class":211},[14,168885,168886],{},"等价于打开文件、读取、最后关闭，但更安全。",[149,168888,168890],{"id":168889},"_86-写入文件","8.6 写入文件",[14,168892,168893,168895],{},[25,168894,1005],{}," 模式会清空原文件。",[18,168897,168899],{"className":30429,"code":168898,"language":30431,"meta":23,"style":23},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[25,168900,168901,168931,168948],{"__ignoreMap":23},[28,168902,168903,168905,168907,168909,168911,168913,168915,168917,168919,168921,168923,168925,168927,168929],{"class":30,"line":31},[28,168904,107884],{"class":207},[28,168906,146842],{"class":38},[28,168908,212],{"class":211},[28,168910,146847],{"class":64},[28,168912,12512],{"class":211},[28,168914,152027],{"class":64},[28,168916,12512],{"class":211},[28,168918,146857],{"class":5293},[28,168920,257],{"class":207},[28,168922,146862],{"class":64},[28,168924,13791],{"class":211},[28,168926,31434],{"class":207},[28,168928,148204],{"class":5293},[28,168930,3816],{"class":211},[28,168932,168933,168936,168939,168942,168944,168946],{"class":30,"line":42},[28,168934,168935],{"class":5293},"    file",[28,168937,168938],{"class":211},".write(",[28,168940,168941],{"class":64},"\"hello",[28,168943,156576],{"class":38},[28,168945,461],{"class":64},[28,168947,218],{"class":211},[28,168949,168950,168952,168954,168957,168959,168961],{"class":30,"line":50},[28,168951,168935],{"class":5293},[28,168953,168938],{"class":211},[28,168955,168956],{"class":64},"\"python",[28,168958,156576],{"class":38},[28,168960,461],{"class":64},[28,168962,218],{"class":211},[14,168964,168965],{},"写入多行：",[18,168967,168969],{"className":30429,"code":168968,"language":30431,"meta":23,"style":23},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[25,168970,168971,169006,169010,169041],{"__ignoreMap":23},[28,168972,168973,168975,168977,168979,168982,168984,168986,168988,168991,168993,168995,168997,169000,169002,169004],{"class":30,"line":31},[28,168974,168702],{"class":211},[28,168976,257],{"class":207},[28,168978,52277],{"class":211},[28,168980,168981],{"class":64},"\"小明,18",[28,168983,156576],{"class":38},[28,168985,461],{"class":64},[28,168987,12512],{"class":211},[28,168989,168990],{"class":64},"\"小红,17",[28,168992,156576],{"class":38},[28,168994,461],{"class":64},[28,168996,12512],{"class":211},[28,168998,168999],{"class":64},"\"小刚,19",[28,169001,156576],{"class":38},[28,169003,461],{"class":64},[28,169005,33297],{"class":211},[28,169007,169008],{"class":30,"line":42},[28,169009,2477],{"emptyLinePlaceholder":134},[28,169011,169012,169014,169016,169018,169021,169023,169025,169027,169029,169031,169033,169035,169037,169039],{"class":30,"line":50},[28,169013,107884],{"class":207},[28,169015,146842],{"class":38},[28,169017,212],{"class":211},[28,169019,169020],{"class":64},"\"students.txt\"",[28,169022,12512],{"class":211},[28,169024,152027],{"class":64},[28,169026,12512],{"class":211},[28,169028,146857],{"class":5293},[28,169030,257],{"class":207},[28,169032,146862],{"class":64},[28,169034,13791],{"class":211},[28,169036,31434],{"class":207},[28,169038,148204],{"class":5293},[28,169040,3816],{"class":211},[28,169042,169043,169045],{"class":30,"line":58},[28,169044,168935],{"class":5293},[28,169046,169047],{"class":211},".writelines(lines)\n",[149,169049,169051],{"id":169050},"_87-追加文件","8.7 追加文件",[14,169053,169054,169056],{},[25,169055,448],{}," 模式不会清空原内容，而是在末尾追加。",[18,169058,169060],{"className":30429,"code":169059,"language":30431,"meta":23,"style":23},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[25,169061,169062,169093],{"__ignoreMap":23},[28,169063,169064,169066,169068,169070,169073,169075,169077,169079,169081,169083,169085,169087,169089,169091],{"class":30,"line":31},[28,169065,107884],{"class":207},[28,169067,146842],{"class":38},[28,169069,212],{"class":211},[28,169071,169072],{"class":64},"\"log.txt\"",[28,169074,12512],{"class":211},[28,169076,165376],{"class":64},[28,169078,12512],{"class":211},[28,169080,146857],{"class":5293},[28,169082,257],{"class":207},[28,169084,146862],{"class":64},[28,169086,13791],{"class":211},[28,169088,31434],{"class":207},[28,169090,148204],{"class":5293},[28,169092,3816],{"class":211},[28,169094,169095,169097,169099,169102,169104,169106],{"class":30,"line":42},[28,169096,168935],{"class":5293},[28,169098,168938],{"class":211},[28,169100,169101],{"class":64},"\"程序启动",[28,169103,156576],{"class":38},[28,169105,461],{"class":64},[28,169107,218],{"class":211},[14,169109,169110],{},"日志类文件常用追加模式。",[149,169112,169114],{"id":169113},"_88-文件编码","8.8 文件编码",[14,169116,169117],{},"编码决定文字如何保存为字节。",[14,169119,169120],{},"常见编码：",[161,169122,169123,169126],{},[119,169124,169125],{},"UTF-8：推荐。",[119,169127,169128],{},"GBK：部分 Windows 中文文件常见。",[14,169130,169131],{},"读取文件乱码时，可以尝试：",[18,169133,169135],{"className":30429,"code":169134,"language":30431,"meta":23,"style":23},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[25,169136,169137,169168],{"__ignoreMap":23},[28,169138,169139,169141,169143,169145,169147,169149,169151,169153,169155,169157,169160,169162,169164,169166],{"class":30,"line":31},[28,169140,107884],{"class":207},[28,169142,146842],{"class":38},[28,169144,212],{"class":211},[28,169146,146847],{"class":64},[28,169148,12512],{"class":211},[28,169150,146852],{"class":64},[28,169152,12512],{"class":211},[28,169154,146857],{"class":5293},[28,169156,257],{"class":207},[28,169158,169159],{"class":64},"\"gbk\"",[28,169161,13791],{"class":211},[28,169163,31434],{"class":207},[28,169165,148204],{"class":5293},[28,169167,3816],{"class":211},[28,169169,169170,169172,169174,169176],{"class":30,"line":42},[28,169171,146874],{"class":211},[28,169173,257],{"class":207},[28,169175,148204],{"class":5293},[28,169177,168552],{"class":211},[14,169179,169180],{},"写文件时建议统一 UTF-8：",[18,169182,169184],{"className":30429,"code":169183,"language":30431,"meta":23,"style":23},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[25,169185,169186,169216],{"__ignoreMap":23},[28,169187,169188,169190,169192,169194,169196,169198,169200,169202,169204,169206,169208,169210,169212,169214],{"class":30,"line":31},[28,169189,107884],{"class":207},[28,169191,146842],{"class":38},[28,169193,212],{"class":211},[28,169195,146847],{"class":64},[28,169197,12512],{"class":211},[28,169199,152027],{"class":64},[28,169201,12512],{"class":211},[28,169203,146857],{"class":5293},[28,169205,257],{"class":207},[28,169207,146862],{"class":64},[28,169209,13791],{"class":211},[28,169211,31434],{"class":207},[28,169213,148204],{"class":5293},[28,169215,3816],{"class":211},[28,169217,169218,169220,169222,169225],{"class":30,"line":42},[28,169219,168935],{"class":5293},[28,169221,168938],{"class":211},[28,169223,169224],{"class":64},"\"中文内容\"",[28,169226,218],{"class":211},[149,169228,169230],{"id":169229},"_89-pathlib","8.9 pathlib",[14,169232,169233,169236],{},[25,169234,169235],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[18,169238,169240],{"className":30429,"code":169239,"language":30431,"meta":23,"style":23},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[25,169241,169242,169252,169256,169274],{"__ignoreMap":23},[28,169243,169244,169246,169248,169250],{"class":30,"line":31},[28,169245,30788],{"class":207},[28,169247,108362],{"class":211},[28,169249,30443],{"class":207},[28,169251,108367],{"class":211},[28,169253,169254],{"class":30,"line":42},[28,169255,2477],{"emptyLinePlaceholder":134},[28,169257,169258,169260,169262,169264,169267,169269,169271],{"class":30,"line":50},[28,169259,168362],{"class":211},[28,169261,257],{"class":207},[28,169263,108596],{"class":211},[28,169265,169266],{"class":64},"\"data\"",[28,169268,13791],{"class":211},[28,169270,794],{"class":207},[28,169272,169273],{"class":64}," \"students.txt\"\n",[28,169275,169276,169278],{"class":30,"line":58},[28,169277,30466],{"class":38},[28,169279,169280],{"class":211},"(path)\n",[14,169282,169283],{},"创建目录：",[18,169285,169287],{"className":30429,"code":169286,"language":30431,"meta":23,"style":23},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[25,169288,169289,169299,169303,169316],{"__ignoreMap":23},[28,169290,169291,169293,169295,169297],{"class":30,"line":31},[28,169292,30788],{"class":207},[28,169294,108362],{"class":211},[28,169296,30443],{"class":207},[28,169298,108367],{"class":211},[28,169300,169301],{"class":30,"line":42},[28,169302,2477],{"emptyLinePlaceholder":134},[28,169304,169305,169308,169310,169312,169314],{"class":30,"line":50},[28,169306,169307],{"class":211},"data_dir ",[28,169309,257],{"class":207},[28,169311,108596],{"class":211},[28,169313,169266],{"class":64},[28,169315,218],{"class":211},[28,169317,169318,169321,169324,169326,169328],{"class":30,"line":58},[28,169319,169320],{"class":211},"data_dir.mkdir(",[28,169322,169323],{"class":5293},"exist_ok",[28,169325,257],{"class":207},[28,169327,31527],{"class":38},[28,169329,218],{"class":211},[14,169331,169332],{},"判断文件是否存在：",[18,169334,169336],{"className":30429,"code":169335,"language":30431,"meta":23,"style":23},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[25,169337,169338,169351,169355,169362],{"__ignoreMap":23},[28,169339,169340,169342,169344,169346,169349],{"class":30,"line":31},[28,169341,168362],{"class":211},[28,169343,257],{"class":207},[28,169345,108596],{"class":211},[28,169347,169348],{"class":64},"\"data\u002Fstudents.txt\"",[28,169350,218],{"class":211},[28,169352,169353],{"class":30,"line":42},[28,169354,2477],{"emptyLinePlaceholder":134},[28,169356,169357,169359],{"class":30,"line":50},[28,169358,1609],{"class":207},[28,169360,169361],{"class":211}," path.exists():\n",[28,169363,169364,169366,169368,169371],{"class":30,"line":58},[28,169365,31350],{"class":38},[28,169367,212],{"class":211},[28,169369,169370],{"class":64},"\"文件存在\"",[28,169372,218],{"class":211},[14,169374,169375],{},"读写文本：",[18,169377,169379],{"className":30429,"code":169378,"language":30431,"meta":23,"style":23},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[25,169380,169381,169393,169397,169414,169431],{"__ignoreMap":23},[28,169382,169383,169385,169387,169389,169391],{"class":30,"line":31},[28,169384,168362],{"class":211},[28,169386,257],{"class":207},[28,169388,108596],{"class":211},[28,169390,146847],{"class":64},[28,169392,218],{"class":211},[28,169394,169395],{"class":30,"line":42},[28,169396,2477],{"emptyLinePlaceholder":134},[28,169398,169399,169402,169404,169406,169408,169410,169412],{"class":30,"line":50},[28,169400,169401],{"class":211},"path.write_text(",[28,169403,145927],{"class":64},[28,169405,12512],{"class":211},[28,169407,146857],{"class":5293},[28,169409,257],{"class":207},[28,169411,146862],{"class":64},[28,169413,218],{"class":211},[28,169415,169416,169418,169420,169423,169425,169427,169429],{"class":30,"line":58},[28,169417,168545],{"class":211},[28,169419,257],{"class":207},[28,169421,169422],{"class":211}," path.read_text(",[28,169424,146857],{"class":5293},[28,169426,257],{"class":207},[28,169428,146862],{"class":64},[28,169430,218],{"class":211},[28,169432,169433,169435],{"class":30,"line":70},[28,169434,30466],{"class":38},[28,169436,168559],{"class":211},[149,169438,169440],{"id":169439},"_810-json文件","8.10 JSON文件",[14,169442,169443],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[18,169445,169447],{"className":30429,"code":169446,"language":30431,"meta":23,"style":23},"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",[25,169448,169449,169455,169459,169467,169477,169487,169495,169499,169503,169528],{"__ignoreMap":23},[28,169450,169451,169453],{"class":30,"line":31},[28,169452,30443],{"class":207},[28,169454,147142],{"class":211},[28,169456,169457],{"class":30,"line":42},[28,169458,2477],{"emptyLinePlaceholder":134},[28,169460,169461,169463,169465],{"class":30,"line":50},[28,169462,149532],{"class":211},[28,169464,257],{"class":207},[28,169466,15649],{"class":211},[28,169468,169469,169471,169473,169475],{"class":30,"line":58},[28,169470,147071],{"class":64},[28,169472,51488],{"class":211},[28,169474,149939],{"class":64},[28,169476,31517],{"class":211},[28,169478,169479,169481,169483,169485],{"class":30,"line":70},[28,169480,164588],{"class":64},[28,169482,51488],{"class":211},[28,169484,860],{"class":38},[28,169486,31517],{"class":211},[28,169488,169489,169491,169493],{"class":30,"line":78},[28,169490,164599],{"class":64},[28,169492,51488],{"class":211},[28,169494,164604],{"class":38},[28,169496,169497],{"class":30,"line":86},[28,169498,1643],{"class":211},[28,169500,169501],{"class":30,"line":97},[28,169502,2477],{"emptyLinePlaceholder":134},[28,169504,169505,169507,169509,169512,169514,169516,169518,169520,169522,169524,169526],{"class":30,"line":108},[28,169506,156495],{"class":211},[28,169508,257],{"class":207},[28,169510,169511],{"class":211}," json.dumps(student, ",[28,169513,147188],{"class":5293},[28,169515,257],{"class":207},[28,169517,34038],{"class":38},[28,169519,12512],{"class":211},[28,169521,152063],{"class":5293},[28,169523,257],{"class":207},[28,169525,288],{"class":38},[28,169527,218],{"class":211},[28,169529,169530,169532],{"class":30,"line":1407},[28,169531,30466],{"class":38},[28,169533,164122],{"class":211},[14,169535,169536],{},"写入 JSON 文件：",[18,169538,169540],{"className":30429,"code":169539,"language":30431,"meta":23,"style":23},"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",[25,169541,169542,169548,169552,169560,169588,169616,169620,169624,169654],{"__ignoreMap":23},[28,169543,169544,169546],{"class":30,"line":31},[28,169545,30443],{"class":207},[28,169547,147142],{"class":211},[28,169549,169550],{"class":30,"line":42},[28,169551,2477],{"emptyLinePlaceholder":134},[28,169553,169554,169556,169558],{"class":30,"line":50},[28,169555,159767],{"class":211},[28,169557,257],{"class":207},[28,169559,55498],{"class":211},[28,169561,169562,169564,169566,169568,169570,169572,169574,169576,169578,169580,169582,169584,169586],{"class":30,"line":58},[28,169563,148436],{"class":211},[28,169565,62730],{"class":64},[28,169567,51488],{"class":211},[28,169569,149939],{"class":64},[28,169571,12512],{"class":211},[28,169573,69175],{"class":64},[28,169575,51488],{"class":211},[28,169577,860],{"class":38},[28,169579,12512],{"class":211},[28,169581,151523],{"class":64},[28,169583,51488],{"class":211},[28,169585,1199],{"class":38},[28,169587,5007],{"class":211},[28,169589,169590,169592,169594,169596,169598,169600,169602,169604,169606,169608,169610,169612,169614],{"class":30,"line":70},[28,169591,148436],{"class":211},[28,169593,62730],{"class":64},[28,169595,51488],{"class":211},[28,169597,150987],{"class":64},[28,169599,12512],{"class":211},[28,169601,69175],{"class":64},[28,169603,51488],{"class":211},[28,169605,835],{"class":38},[28,169607,12512],{"class":211},[28,169609,151523],{"class":64},[28,169611,51488],{"class":211},[28,169613,1021],{"class":38},[28,169615,5007],{"class":211},[28,169617,169618],{"class":30,"line":78},[28,169619,33297],{"class":211},[28,169621,169622],{"class":30,"line":86},[28,169623,2477],{"emptyLinePlaceholder":134},[28,169625,169626,169628,169630,169632,169634,169636,169638,169640,169642,169644,169646,169648,169650,169652],{"class":30,"line":97},[28,169627,107884],{"class":207},[28,169629,146842],{"class":38},[28,169631,212],{"class":211},[28,169633,151882],{"class":64},[28,169635,12512],{"class":211},[28,169637,152027],{"class":64},[28,169639,12512],{"class":211},[28,169641,146857],{"class":5293},[28,169643,257],{"class":207},[28,169645,146862],{"class":64},[28,169647,13791],{"class":211},[28,169649,31434],{"class":207},[28,169651,148204],{"class":5293},[28,169653,3816],{"class":211},[28,169655,169656,169659,169661,169663,169665,169667,169669,169671,169673,169675,169677],{"class":30,"line":108},[28,169657,169658],{"class":211},"    json.dump(students, ",[28,169660,45405],{"class":5293},[28,169662,12512],{"class":211},[28,169664,147188],{"class":5293},[28,169666,257],{"class":207},[28,169668,34038],{"class":38},[28,169670,12512],{"class":211},[28,169672,152063],{"class":5293},[28,169674,257],{"class":207},[28,169676,288],{"class":38},[28,169678,218],{"class":211},[14,169680,169681],{},"读取 JSON 文件：",[18,169683,169685],{"className":30429,"code":169684,"language":30431,"meta":23,"style":23},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[25,169686,169687,169693,169697,169727,169739,169743],{"__ignoreMap":23},[28,169688,169689,169691],{"class":30,"line":31},[28,169690,30443],{"class":207},[28,169692,147142],{"class":211},[28,169694,169695],{"class":30,"line":42},[28,169696,2477],{"emptyLinePlaceholder":134},[28,169698,169699,169701,169703,169705,169707,169709,169711,169713,169715,169717,169719,169721,169723,169725],{"class":30,"line":50},[28,169700,107884],{"class":207},[28,169702,146842],{"class":38},[28,169704,212],{"class":211},[28,169706,151882],{"class":64},[28,169708,12512],{"class":211},[28,169710,146852],{"class":64},[28,169712,12512],{"class":211},[28,169714,146857],{"class":5293},[28,169716,257],{"class":207},[28,169718,146862],{"class":64},[28,169720,13791],{"class":211},[28,169722,31434],{"class":207},[28,169724,148204],{"class":5293},[28,169726,3816],{"class":211},[28,169728,169729,169731,169733,169735,169737],{"class":30,"line":58},[28,169730,153088],{"class":211},[28,169732,257],{"class":207},[28,169734,148215],{"class":211},[28,169736,45405],{"class":5293},[28,169738,218],{"class":211},[28,169740,169741],{"class":30,"line":70},[28,169742,2477],{"emptyLinePlaceholder":134},[28,169744,169745,169747],{"class":30,"line":78},[28,169746,30466],{"class":38},[28,169748,165046],{"class":211},[149,169750,169752],{"id":169751},"_811-csv文件","8.11 CSV文件",[14,169754,169755],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169757,169758],{},"写入 CSV：",[18,169760,169762],{"className":30429,"code":169761,"language":30431,"meta":23,"style":23},"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",[25,169763,169764,169771,169775,169783,169801,169817,169833,169837,169841,169881,169895],{"__ignoreMap":23},[28,169765,169766,169768],{"class":30,"line":31},[28,169767,30443],{"class":207},[28,169769,169770],{"class":211}," csv\n",[28,169772,169773],{"class":30,"line":42},[28,169774,2477],{"emptyLinePlaceholder":134},[28,169776,169777,169779,169781],{"class":30,"line":50},[28,169778,159767],{"class":211},[28,169780,257],{"class":207},[28,169782,55498],{"class":211},[28,169784,169785,169788,169790,169792,169794,169796,169799],{"class":30,"line":58},[28,169786,169787],{"class":211},"    [",[28,169789,73150],{"class":64},[28,169791,12512],{"class":211},[28,169793,73183],{"class":64},[28,169795,12512],{"class":211},[28,169797,169798],{"class":64},"\"成绩\"",[28,169800,87887],{"class":211},[28,169802,169803,169805,169807,169809,169811,169813,169815],{"class":30,"line":70},[28,169804,169787],{"class":211},[28,169806,149939],{"class":64},[28,169808,12512],{"class":211},[28,169810,860],{"class":38},[28,169812,12512],{"class":211},[28,169814,1199],{"class":38},[28,169816,87887],{"class":211},[28,169818,169819,169821,169823,169825,169827,169829,169831],{"class":30,"line":78},[28,169820,169787],{"class":211},[28,169822,150987],{"class":64},[28,169824,12512],{"class":211},[28,169826,835],{"class":38},[28,169828,12512],{"class":211},[28,169830,1021],{"class":38},[28,169832,87887],{"class":211},[28,169834,169835],{"class":30,"line":86},[28,169836,33297],{"class":211},[28,169838,169839],{"class":30,"line":97},[28,169840,2477],{"emptyLinePlaceholder":134},[28,169842,169843,169845,169847,169849,169852,169854,169856,169858,169860,169862,169864,169866,169869,169871,169873,169875,169877,169879],{"class":30,"line":108},[28,169844,107884],{"class":207},[28,169846,146842],{"class":38},[28,169848,212],{"class":211},[28,169850,169851],{"class":64},"\"students.csv\"",[28,169853,12512],{"class":211},[28,169855,152027],{"class":64},[28,169857,12512],{"class":211},[28,169859,146857],{"class":5293},[28,169861,257],{"class":207},[28,169863,146862],{"class":64},[28,169865,12512],{"class":211},[28,169867,169868],{"class":5293},"newline",[28,169870,257],{"class":207},[28,169872,7729],{"class":64},[28,169874,13791],{"class":211},[28,169876,31434],{"class":207},[28,169878,148204],{"class":5293},[28,169880,3816],{"class":211},[28,169882,169883,169886,169888,169891,169893],{"class":30,"line":1407},[28,169884,169885],{"class":211},"    writer ",[28,169887,257],{"class":207},[28,169889,169890],{"class":211}," csv.writer(",[28,169892,45405],{"class":5293},[28,169894,218],{"class":211},[28,169896,169897],{"class":30,"line":1690},[28,169898,169899],{"class":211},"    writer.writerows(students)\n",[14,169901,169902],{},"读取 CSV：",[18,169904,169906],{"className":30429,"code":169905,"language":30431,"meta":23,"style":23},"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",[25,169907,169908,169914,169918,169948,169962,169974],{"__ignoreMap":23},[28,169909,169910,169912],{"class":30,"line":31},[28,169911,30443],{"class":207},[28,169913,169770],{"class":211},[28,169915,169916],{"class":30,"line":42},[28,169917,2477],{"emptyLinePlaceholder":134},[28,169919,169920,169922,169924,169926,169928,169930,169932,169934,169936,169938,169940,169942,169944,169946],{"class":30,"line":50},[28,169921,107884],{"class":207},[28,169923,146842],{"class":38},[28,169925,212],{"class":211},[28,169927,169851],{"class":64},[28,169929,12512],{"class":211},[28,169931,146852],{"class":64},[28,169933,12512],{"class":211},[28,169935,146857],{"class":5293},[28,169937,257],{"class":207},[28,169939,146862],{"class":64},[28,169941,13791],{"class":211},[28,169943,31434],{"class":207},[28,169945,148204],{"class":5293},[28,169947,3816],{"class":211},[28,169949,169950,169953,169955,169958,169960],{"class":30,"line":58},[28,169951,169952],{"class":211},"    reader ",[28,169954,257],{"class":207},[28,169956,169957],{"class":211}," csv.reader(",[28,169959,45405],{"class":5293},[28,169961,218],{"class":211},[28,169963,169964,169966,169969,169971],{"class":30,"line":70},[28,169965,3278],{"class":207},[28,169967,169968],{"class":211}," row ",[28,169970,26094],{"class":207},[28,169972,169973],{"class":211}," reader:\n",[28,169975,169976,169978],{"class":30,"line":78},[28,169977,32502],{"class":38},[28,169979,169980],{"class":211},"(row)\n",[14,169982,169983],{},"使用字典写入：",[18,169985,169987],{"className":30429,"code":169986,"language":30431,"meta":23,"style":23},"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",[25,169988,169989,169995,169999,170007,170035,170063,170067,170071,170109,170130,170151,170156],{"__ignoreMap":23},[28,169990,169991,169993],{"class":30,"line":31},[28,169992,30443],{"class":207},[28,169994,169770],{"class":211},[28,169996,169997],{"class":30,"line":42},[28,169998,2477],{"emptyLinePlaceholder":134},[28,170000,170001,170003,170005],{"class":30,"line":50},[28,170002,159767],{"class":211},[28,170004,257],{"class":207},[28,170006,55498],{"class":211},[28,170008,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033],{"class":30,"line":58},[28,170010,148436],{"class":211},[28,170012,62730],{"class":64},[28,170014,51488],{"class":211},[28,170016,149939],{"class":64},[28,170018,12512],{"class":211},[28,170020,69175],{"class":64},[28,170022,51488],{"class":211},[28,170024,860],{"class":38},[28,170026,12512],{"class":211},[28,170028,151523],{"class":64},[28,170030,51488],{"class":211},[28,170032,1199],{"class":38},[28,170034,5007],{"class":211},[28,170036,170037,170039,170041,170043,170045,170047,170049,170051,170053,170055,170057,170059,170061],{"class":30,"line":70},[28,170038,148436],{"class":211},[28,170040,62730],{"class":64},[28,170042,51488],{"class":211},[28,170044,150987],{"class":64},[28,170046,12512],{"class":211},[28,170048,69175],{"class":64},[28,170050,51488],{"class":211},[28,170052,835],{"class":38},[28,170054,12512],{"class":211},[28,170056,151523],{"class":64},[28,170058,51488],{"class":211},[28,170060,1021],{"class":38},[28,170062,5007],{"class":211},[28,170064,170065],{"class":30,"line":78},[28,170066,33297],{"class":211},[28,170068,170069],{"class":30,"line":86},[28,170070,2477],{"emptyLinePlaceholder":134},[28,170072,170073,170075,170077,170079,170081,170083,170085,170087,170089,170091,170093,170095,170097,170099,170101,170103,170105,170107],{"class":30,"line":97},[28,170074,107884],{"class":207},[28,170076,146842],{"class":38},[28,170078,212],{"class":211},[28,170080,169851],{"class":64},[28,170082,12512],{"class":211},[28,170084,152027],{"class":64},[28,170086,12512],{"class":211},[28,170088,146857],{"class":5293},[28,170090,257],{"class":207},[28,170092,146862],{"class":64},[28,170094,12512],{"class":211},[28,170096,169868],{"class":5293},[28,170098,257],{"class":207},[28,170100,7729],{"class":64},[28,170102,13791],{"class":211},[28,170104,31434],{"class":207},[28,170106,148204],{"class":5293},[28,170108,3816],{"class":211},[28,170110,170111,170114,170116,170118,170120,170122,170124,170126,170128],{"class":30,"line":108},[28,170112,170113],{"class":211},"    fieldnames ",[28,170115,257],{"class":207},[28,170117,52277],{"class":211},[28,170119,62730],{"class":64},[28,170121,12512],{"class":211},[28,170123,69175],{"class":64},[28,170125,12512],{"class":211},[28,170127,151523],{"class":64},[28,170129,33297],{"class":211},[28,170131,170132,170134,170136,170139,170141,170143,170146,170148],{"class":30,"line":1407},[28,170133,169885],{"class":211},[28,170135,257],{"class":207},[28,170137,170138],{"class":211}," csv.DictWriter(",[28,170140,45405],{"class":5293},[28,170142,12512],{"class":211},[28,170144,170145],{"class":5293},"fieldnames",[28,170147,257],{"class":207},[28,170149,170150],{"class":211},"fieldnames)\n",[28,170152,170153],{"class":30,"line":1690},[28,170154,170155],{"class":211},"    writer.writeheader()\n",[28,170157,170158],{"class":30,"line":1695},[28,170159,169899],{"class":211},[149,170161,170163],{"id":170162},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170165,123343],{},[161,170167,170168,170171,170174],{},[119,170169,170170],{},"读取文本文件。",[119,170172,170173],{},"统计每个单词出现次数。",[119,170175,170176],{},"输出出现次数最多的前 10 个单词。",[14,170178,10112],{},[18,170180,170182],{"className":30429,"code":170181,"language":30431,"meta":23,"style":23},"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",[25,170183,170184,170194,170198,170211,170227,170231,170241,170250,170254,170266,170286,170295,170299,170317,170321,170351,170355,170371],{"__ignoreMap":23},[28,170185,170186,170188,170190,170192],{"class":30,"line":31},[28,170187,30788],{"class":207},[28,170189,108362],{"class":211},[28,170191,30443],{"class":207},[28,170193,108367],{"class":211},[28,170195,170196],{"class":30,"line":42},[28,170197,2477],{"emptyLinePlaceholder":134},[28,170199,170200,170202,170204,170206,170209],{"class":30,"line":50},[28,170201,168362],{"class":211},[28,170203,257],{"class":207},[28,170205,108596],{"class":211},[28,170207,170208],{"class":64},"\"article.txt\"",[28,170210,218],{"class":211},[28,170212,170213,170215,170217,170219,170221,170223,170225],{"class":30,"line":58},[28,170214,168545],{"class":211},[28,170216,257],{"class":207},[28,170218,169422],{"class":211},[28,170220,146857],{"class":5293},[28,170222,257],{"class":207},[28,170224,146862],{"class":64},[28,170226,218],{"class":211},[28,170228,170229],{"class":30,"line":70},[28,170230,2477],{"emptyLinePlaceholder":134},[28,170232,170233,170236,170238],{"class":30,"line":78},[28,170234,170235],{"class":211},"words ",[28,170237,257],{"class":207},[28,170239,170240],{"class":211}," content.lower().split()\n",[28,170242,170243,170246,170248],{"class":30,"line":86},[28,170244,170245],{"class":211},"counter ",[28,170247,257],{"class":207},[28,170249,87919],{"class":211},[28,170251,170252],{"class":30,"line":97},[28,170253,2477],{"emptyLinePlaceholder":134},[28,170255,170256,170258,170261,170263],{"class":30,"line":108},[28,170257,3102],{"class":207},[28,170259,170260],{"class":211}," word ",[28,170262,26094],{"class":207},[28,170264,170265],{"class":211}," words:\n",[28,170267,170268,170271,170273,170276,170279,170281,170284],{"class":30,"line":1407},[28,170269,170270],{"class":211},"    word ",[28,170272,257],{"class":207},[28,170274,170275],{"class":211}," word.strip(",[28,170277,170278],{"class":64},"\".,!?;:",[28,170280,156546],{"class":38},[28,170282,170283],{"class":64},"'()[]\"",[28,170285,218],{"class":211},[28,170287,170288,170290,170292],{"class":30,"line":1690},[28,170289,3178],{"class":207},[28,170291,38981],{"class":207},[28,170293,170294],{"class":211}," word:\n",[28,170296,170297],{"class":30,"line":1695},[28,170298,148563],{"class":207},[28,170300,170301,170304,170306,170309,170311,170313,170315],{"class":30,"line":1701},[28,170302,170303],{"class":211},"    counter[word] ",[28,170305,257],{"class":207},[28,170307,170308],{"class":211}," counter.get(word, ",[28,170310,401],{"class":38},[28,170312,13791],{"class":211},[28,170314,691],{"class":207},[28,170316,55750],{"class":38},[28,170318,170319],{"class":30,"line":1706},[28,170320,2477],{"emptyLinePlaceholder":134},[28,170322,170323,170326,170328,170330,170333,170335,170337,170339,170341,170343,170345,170347,170349],{"class":30,"line":1720},[28,170324,170325],{"class":211},"items ",[28,170327,257],{"class":207},[28,170329,163655],{"class":38},[28,170331,170332],{"class":211},"(counter.items(), ",[28,170334,153997],{"class":5293},[28,170336,154000],{"class":207},[28,170338,154003],{"class":211},[28,170340,427],{"class":38},[28,170342,112253],{"class":211},[28,170344,163579],{"class":5293},[28,170346,257],{"class":207},[28,170348,31527],{"class":38},[28,170350,218],{"class":211},[28,170352,170353],{"class":30,"line":1725},[28,170354,2477],{"emptyLinePlaceholder":134},[28,170356,170357,170359,170362,170364,170367,170369],{"class":30,"line":1731},[28,170358,3102],{"class":207},[28,170360,170361],{"class":211}," word, count ",[28,170363,26094],{"class":207},[28,170365,170366],{"class":211}," items[:",[28,170368,656],{"class":38},[28,170370,165806],{"class":211},[28,170372,170373,170375],{"class":30,"line":1752},[28,170374,31350],{"class":38},[28,170376,170377],{"class":211},"(word, count)\n",[149,170379,170381],{"id":170380},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[18,170383,170385],{"className":30429,"code":170384,"language":30431,"meta":23,"style":23},"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",[25,170386,170387,170393,170403,170407,170419,170423,170427,170435,170445,170451,170455,170485,170495,170499,170503,170511,170541,170565,170569,170573,170581,170610,170615],{"__ignoreMap":23},[28,170388,170389,170391],{"class":30,"line":31},[28,170390,30443],{"class":207},[28,170392,147142],{"class":211},[28,170394,170395,170397,170399,170401],{"class":30,"line":42},[28,170396,30788],{"class":207},[28,170398,108362],{"class":211},[28,170400,30443],{"class":207},[28,170402,108367],{"class":211},[28,170404,170405],{"class":30,"line":50},[28,170406,2477],{"emptyLinePlaceholder":134},[28,170408,170409,170411,170413,170415,170417],{"class":30,"line":58},[28,170410,151875],{"class":38},[28,170412,13641],{"class":207},[28,170414,108596],{"class":211},[28,170416,151882],{"class":64},[28,170418,218],{"class":211},[28,170420,170421],{"class":30,"line":70},[28,170422,2477],{"emptyLinePlaceholder":134},[28,170424,170425],{"class":30,"line":78},[28,170426,2477],{"emptyLinePlaceholder":134},[28,170428,170429,170431,170433],{"class":30,"line":86},[28,170430,31998],{"class":207},[28,170432,151899],{"class":34},[28,170434,32004],{"class":211},[28,170436,170437,170439,170441,170443],{"class":30,"line":97},[28,170438,3178],{"class":207},[28,170440,38981],{"class":207},[28,170442,151910],{"class":38},[28,170444,151913],{"class":211},[28,170446,170447,170449],{"class":30,"line":108},[28,170448,14829],{"class":207},[28,170450,51889],{"class":211},[28,170452,170453],{"class":30,"line":1407},[28,170454,2477],{"emptyLinePlaceholder":134},[28,170456,170457,170459,170461,170463,170465,170467,170469,170471,170473,170475,170477,170479,170481,170483],{"class":30,"line":1690},[28,170458,34229],{"class":207},[28,170460,146842],{"class":38},[28,170462,212],{"class":211},[28,170464,151875],{"class":38},[28,170466,12512],{"class":211},[28,170468,146852],{"class":64},[28,170470,12512],{"class":211},[28,170472,146857],{"class":5293},[28,170474,257],{"class":207},[28,170476,146862],{"class":64},[28,170478,13791],{"class":211},[28,170480,31434],{"class":207},[28,170482,148204],{"class":5293},[28,170484,3816],{"class":211},[28,170486,170487,170489,170491,170493],{"class":30,"line":1695},[28,170488,14829],{"class":207},[28,170490,148215],{"class":211},[28,170492,45405],{"class":5293},[28,170494,218],{"class":211},[28,170496,170497],{"class":30,"line":1701},[28,170498,2477],{"emptyLinePlaceholder":134},[28,170500,170501],{"class":30,"line":1706},[28,170502,2477],{"emptyLinePlaceholder":134},[28,170504,170505,170507,170509],{"class":30,"line":1720},[28,170506,31998],{"class":207},[28,170508,152009],{"class":34},[28,170510,152012],{"class":211},[28,170512,170513,170515,170517,170519,170521,170523,170525,170527,170529,170531,170533,170535,170537,170539],{"class":30,"line":1725},[28,170514,34229],{"class":207},[28,170516,146842],{"class":38},[28,170518,212],{"class":211},[28,170520,151875],{"class":38},[28,170522,12512],{"class":211},[28,170524,152027],{"class":64},[28,170526,12512],{"class":211},[28,170528,146857],{"class":5293},[28,170530,257],{"class":207},[28,170532,146862],{"class":64},[28,170534,13791],{"class":211},[28,170536,31434],{"class":207},[28,170538,148204],{"class":5293},[28,170540,3816],{"class":211},[28,170542,170543,170545,170547,170549,170551,170553,170555,170557,170559,170561,170563],{"class":30,"line":1731},[28,170544,152048],{"class":211},[28,170546,45405],{"class":5293},[28,170548,12512],{"class":211},[28,170550,147188],{"class":5293},[28,170552,257],{"class":207},[28,170554,34038],{"class":38},[28,170556,12512],{"class":211},[28,170558,152063],{"class":5293},[28,170560,257],{"class":207},[28,170562,288],{"class":38},[28,170564,218],{"class":211},[28,170566,170567],{"class":30,"line":1752},[28,170568,2477],{"emptyLinePlaceholder":134},[28,170570,170571],{"class":30,"line":1757},[28,170572,2477],{"emptyLinePlaceholder":134},[28,170574,170575,170577,170579],{"class":30,"line":1771},[28,170576,159767],{"class":211},[28,170578,257],{"class":207},[28,170580,153093],{"class":211},[28,170582,170583,170586,170588,170590,170592,170594,170596,170598,170600,170602,170604,170606,170608],{"class":30,"line":1776},[28,170584,170585],{"class":211},"students.append({",[28,170587,62730],{"class":64},[28,170589,51488],{"class":211},[28,170591,149939],{"class":64},[28,170593,12512],{"class":211},[28,170595,69175],{"class":64},[28,170597,51488],{"class":211},[28,170599,860],{"class":38},[28,170601,12512],{"class":211},[28,170603,151523],{"class":64},[28,170605,51488],{"class":211},[28,170607,1199],{"class":38},[28,170609,165203],{"class":211},[28,170611,170612],{"class":30,"line":1805},[28,170613,170614],{"class":211},"save_students(students)\n",[28,170616,170617,170619,170621,170624],{"class":30,"line":1810},[28,170618,30466],{"class":38},[28,170620,212],{"class":211},[28,170622,170623],{"class":64},"\"保存成功\"",[28,170625,218],{"class":211},[149,170627,170629],{"id":170628},"_814-易错点","8.14 易错点",[161,170631,170632,170636,170642,170647,170654,170661],{},[119,170633,170634,168895],{},[25,170635,1005],{},[119,170637,170638,170639,28436],{},"读写中文要指定 ",[25,170640,170641],{},"encoding=\"utf-8\"",[119,170643,170644,170645,28436],{},"打开文件后要关闭，推荐使用 ",[25,170646,107884],{},[119,170648,170649,170650,170653],{},"读取大文件不要直接 ",[25,170651,170652],{},"read()"," 全部内容。",[119,170655,170656,170657,170660],{},"Windows 写 CSV 时建议加 ",[25,170658,170659],{},"newline=\"\"","，避免空行。",[119,170662,170663],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[149,170665,170667],{"id":170666},"_815-本章练习","8.15 本章练习",[161,170669,170670,170677,170682,170685,170688],{},[119,170671,170672,170673,170676],{},"写入一个 ",[25,170674,170675],{},"students.txt","，每行保存一个学生姓名。",[119,170678,104406,170679,170681],{},[25,170680,170675],{}," 并输出所有学生。",[119,170683,170684],{},"把学生列表保存为 JSON 文件。",[119,170686,170687],{},"从 JSON 文件读取学生数据，计算平均分。",[119,170689,170690,170691,170694,170695,170698],{},"写一个日志函数 ",[25,170692,170693],{},"write_log(message)","，每次调用向 ",[25,170696,170697],{},"app.log"," 追加一行。",[126,170700,170701],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":23,"searchDepth":42,"depth":42,"links":170703},[170704,170705,170709,170710,170716,170717,170718,170719,170720,170721,170722,170723,170724,170725,170726],{"id":168215,"depth":42,"text":168216},{"id":168256,"depth":42,"text":168257,"children":170706},[170707,170708],{"id":168260,"depth":50,"text":168261},{"id":168294,"depth":50,"text":168295},{"id":168408,"depth":42,"text":168409},{"id":168501,"depth":42,"text":168502,"children":170711},[170712,170713,170714,170715],{"id":168505,"depth":50,"text":168506},{"id":168592,"depth":50,"text":168593},{"id":168662,"depth":50,"text":168663},{"id":168756,"depth":50,"text":168757},{"id":168826,"depth":42,"text":168827},{"id":168889,"depth":42,"text":168890},{"id":169050,"depth":42,"text":169051},{"id":169113,"depth":42,"text":169114},{"id":169229,"depth":42,"text":169230},{"id":169439,"depth":42,"text":169440},{"id":169751,"depth":42,"text":169752},{"id":170162,"depth":42,"text":170163},{"id":170380,"depth":42,"text":170381},{"id":170628,"depth":42,"text":170629},{"id":170666,"depth":42,"text":170667},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168207,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170733,"title":170734,"body":170735,"description":131,"extension":132,"meta":172921,"navigation":134,"path":172922,"seo":172923,"stem":172924,"__hash__":172925},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170736,"toc":172888},[170737,170740,170744,170747,170750,170842,170844,170863,170868,170872,170875,170878,170907,170914,170917,170921,170924,170953,170955,171007,171013,171066,171070,171168,171171,171238,171242,171299,171301,171307,171311,171316,171322,171413,171418,171422,171425,171503,171506,171544,171548,171666,171669,171673,171676,171721,171724,171728,171733,171739,171789,171792,171823,171827,171831,171861,171865,171900,171904,171939,171979,171983,171999,172002,172006,172010,172089,172093,172134,172138,172193,172197,172231,172235,172265,172274,172281,172287,172344,172347,172355,172358,172362,172369,172372,172378,172381,172398,172403,172407,172413,172426,172429,172466,172469,172480,172483,172497,172500,172514,172518,172525,172558,172561,172563,172569,172572,172576,172578,172584,172589,172762,172766,172829,172833,172857,172861,172885],[10,170738,170734],{"id":170739},"_9-异常模块与包",[149,170741,170743],{"id":170742},"_91-什么是异常","9.1 什么是异常",[14,170745,170746],{},"异常是程序运行过程中出现的错误。",[14,170748,170749],{},"常见异常：",[347,170751,170752,170761],{},[350,170753,170754],{},[353,170755,170756,170759],{},[356,170757,170758],{},"异常",[356,170760,25920],{},[394,170762,170763,170773,170783,170792,170802,170812,170822,170832],{},[353,170764,170765,170770],{},[399,170766,170767],{},[25,170768,170769],{},"NameError",[399,170771,170772],{},"使用了未定义变量",[353,170774,170775,170780],{},[399,170776,170777],{},[25,170778,170779],{},"TypeError",[399,170781,170782],{},"类型不匹配",[353,170784,170785,170789],{},[399,170786,170787],{},[25,170788,154885],{},[399,170790,170791],{},"值不合法",[353,170793,170794,170799],{},[399,170795,170796],{},[25,170797,170798],{},"IndexError",[399,170800,170801],{},"列表索引越界",[353,170803,170804,170809],{},[399,170805,170806],{},[25,170807,170808],{},"KeyError",[399,170810,170811],{},"字典 key 不存在",[353,170813,170814,170819],{},[399,170815,170816],{},[25,170817,170818],{},"FileNotFoundError",[399,170820,170821],{},"文件不存在",[353,170823,170824,170829],{},[399,170825,170826],{},[25,170827,170828],{},"ZeroDivisionError",[399,170830,170831],{},"除数为 0",[353,170833,170834,170839],{},[399,170835,170836],{},[25,170837,170838],{},"ImportError",[399,170840,170841],{},"导入失败",[14,170843,15212],{},[18,170845,170847],{"className":30429,"code":170846,"language":30431,"meta":23,"style":23},"num = int(\"abc\")\n",[25,170848,170849],{"__ignoreMap":23},[28,170850,170851,170853,170855,170857,170859,170861],{"class":30,"line":31},[28,170852,155838],{"class":211},[28,170854,257],{"class":207},[28,170856,2459],{"class":38},[28,170858,212],{"class":211},[28,170860,155931],{"class":64},[28,170862,218],{"class":211},[14,170864,170865,170866,28436],{},"会触发 ",[25,170867,154885],{},[149,170869,170871],{"id":170870},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170873,170874],{},"如果不处理异常，程序会直接终止。",[14,170876,170877],{},"例如用户输入年龄：",[18,170879,170881],{"className":30429,"code":170880,"language":30431,"meta":23,"style":23},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[25,170882,170883,170901],{"__ignoreMap":23},[28,170884,170885,170887,170889,170891,170893,170895,170897,170899],{"class":30,"line":31},[28,170886,146597],{"class":211},[28,170888,257],{"class":207},[28,170890,2459],{"class":38},[28,170892,212],{"class":211},[28,170894,53872],{"class":38},[28,170896,212],{"class":211},[28,170898,152445],{"class":64},[28,170900,30548],{"class":211},[28,170902,170903,170905],{"class":30,"line":42},[28,170904,30466],{"class":38},[28,170906,155812],{"class":211},[14,170908,170909,170910,170913],{},"用户输入 ",[25,170911,170912],{},"abc","，程序就会报错退出。",[14,170915,170916],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[149,170918,170920],{"id":170919},"_93-try-except","9.3 try except",[14,170922,170923],{},"基础语法：",[18,170925,170927],{"className":30429,"code":170926,"language":30431,"meta":23,"style":23},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[25,170928,170929,170936,170941,170948],{"__ignoreMap":23},[28,170930,170931,170934],{"class":30,"line":31},[28,170932,170933],{"class":207},"try",[28,170935,3816],{"class":211},[28,170937,170938],{"class":30,"line":42},[28,170939,170940],{"class":211},"    可能出错的代码\n",[28,170942,170943,170946],{"class":30,"line":50},[28,170944,170945],{"class":207},"except",[28,170947,3816],{"class":211},[28,170949,170950],{"class":30,"line":58},[28,170951,170952],{"class":211},"    出错后的处理代码\n",[14,170954,15212],{},[18,170956,170958],{"className":30429,"code":170957,"language":30431,"meta":23,"style":23},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[25,170959,170960,170966,170984,170990,170996],{"__ignoreMap":23},[28,170961,170962,170964],{"class":30,"line":31},[28,170963,170933],{"class":207},[28,170965,3816],{"class":211},[28,170967,170968,170970,170972,170974,170976,170978,170980,170982],{"class":30,"line":42},[28,170969,152437],{"class":211},[28,170971,257],{"class":207},[28,170973,2459],{"class":38},[28,170975,212],{"class":211},[28,170977,53872],{"class":38},[28,170979,212],{"class":211},[28,170981,152445],{"class":64},[28,170983,30548],{"class":211},[28,170985,170986,170988],{"class":30,"line":50},[28,170987,31350],{"class":38},[28,170989,155812],{"class":211},[28,170991,170992,170994],{"class":30,"line":58},[28,170993,170945],{"class":207},[28,170995,3816],{"class":211},[28,170997,170998,171000,171002,171005],{"class":30,"line":70},[28,170999,31350],{"class":38},[28,171001,212],{"class":211},[28,171003,171004],{"class":64},"\"年龄必须是数字\"",[28,171006,218],{"class":211},[14,171008,171009,171010,171012],{},"不建议裸写 ",[25,171011,170945],{},"，最好指定异常类型。",[18,171014,171016],{"className":30429,"code":171015,"language":30431,"meta":23,"style":23},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[25,171017,171018,171024,171042,171048,171056],{"__ignoreMap":23},[28,171019,171020,171022],{"class":30,"line":31},[28,171021,170933],{"class":207},[28,171023,3816],{"class":211},[28,171025,171026,171028,171030,171032,171034,171036,171038,171040],{"class":30,"line":42},[28,171027,152437],{"class":211},[28,171029,257],{"class":207},[28,171031,2459],{"class":38},[28,171033,212],{"class":211},[28,171035,53872],{"class":38},[28,171037,212],{"class":211},[28,171039,152445],{"class":64},[28,171041,30548],{"class":211},[28,171043,171044,171046],{"class":30,"line":50},[28,171045,31350],{"class":38},[28,171047,155812],{"class":211},[28,171049,171050,171052,171054],{"class":30,"line":58},[28,171051,170945],{"class":207},[28,171053,152277],{"class":38},[28,171055,3816],{"class":211},[28,171057,171058,171060,171062,171064],{"class":30,"line":70},[28,171059,31350],{"class":38},[28,171061,212],{"class":211},[28,171063,171004],{"class":64},[28,171065,218],{"class":211},[149,171067,171069],{"id":171068},"_94-捕获多个异常","9.4 捕获多个异常",[18,171071,171073],{"className":30429,"code":171072,"language":30431,"meta":23,"style":23},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[25,171074,171075,171081,171102,171122,171129,171137,171148,171157],{"__ignoreMap":23},[28,171076,171077,171079],{"class":30,"line":31},[28,171078,170933],{"class":207},[28,171080,3816],{"class":211},[28,171082,171083,171086,171088,171090,171092,171094,171096,171098,171100],{"class":30,"line":42},[28,171084,171085],{"class":211},"    nums ",[28,171087,257],{"class":207},[28,171089,52277],{"class":211},[28,171091,427],{"class":38},[28,171093,12512],{"class":211},[28,171095,288],{"class":38},[28,171097,12512],{"class":211},[28,171099,282],{"class":38},[28,171101,33297],{"class":211},[28,171103,171104,171107,171109,171111,171113,171115,171117,171120],{"class":30,"line":50},[28,171105,171106],{"class":211},"    index ",[28,171108,257],{"class":207},[28,171110,2459],{"class":38},[28,171112,212],{"class":211},[28,171114,53872],{"class":38},[28,171116,212],{"class":211},[28,171118,171119],{"class":64},"\"请输入索引:\"",[28,171121,30548],{"class":211},[28,171123,171124,171126],{"class":30,"line":58},[28,171125,31350],{"class":38},[28,171127,171128],{"class":211},"(nums[index])\n",[28,171130,171131,171133,171135],{"class":30,"line":70},[28,171132,170945],{"class":207},[28,171134,152277],{"class":38},[28,171136,3816],{"class":211},[28,171138,171139,171141,171143,171146],{"class":30,"line":78},[28,171140,31350],{"class":38},[28,171142,212],{"class":211},[28,171144,171145],{"class":64},"\"索引必须是整数\"",[28,171147,218],{"class":211},[28,171149,171150,171152,171155],{"class":30,"line":86},[28,171151,170945],{"class":207},[28,171153,171154],{"class":38}," IndexError",[28,171156,3816],{"class":211},[28,171158,171159,171161,171163,171166],{"class":30,"line":97},[28,171160,31350],{"class":38},[28,171162,212],{"class":211},[28,171164,171165],{"class":64},"\"索引越界\"",[28,171167,218],{"class":211},[14,171169,171170],{},"多个异常使用相同处理逻辑：",[18,171172,171174],{"className":30429,"code":171173,"language":30431,"meta":23,"style":23},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[25,171175,171176,171182,171200,171213,171227],{"__ignoreMap":23},[28,171177,171178,171180],{"class":30,"line":31},[28,171179,170933],{"class":207},[28,171181,3816],{"class":211},[28,171183,171184,171186,171188,171190,171192,171194,171196,171198],{"class":30,"line":42},[28,171185,45644],{"class":211},[28,171187,257],{"class":207},[28,171189,2459],{"class":38},[28,171191,212],{"class":211},[28,171193,53872],{"class":38},[28,171195,212],{"class":211},[28,171197,155847],{"class":64},[28,171199,30548],{"class":211},[28,171201,171202,171204,171206,171208,171210],{"class":30,"line":50},[28,171203,31350],{"class":38},[28,171205,212],{"class":211},[28,171207,656],{"class":38},[28,171209,156097],{"class":207},[28,171211,171212],{"class":211}," num)\n",[28,171214,171215,171217,171219,171221,171223,171225],{"class":30,"line":58},[28,171216,170945],{"class":207},[28,171218,1736],{"class":211},[28,171220,154885],{"class":38},[28,171222,12512],{"class":211},[28,171224,170828],{"class":38},[28,171226,30837],{"class":211},[28,171228,171229,171231,171233,171236],{"class":30,"line":70},[28,171230,31350],{"class":38},[28,171232,212],{"class":211},[28,171234,171235],{"class":64},"\"输入不合法\"",[28,171237,218],{"class":211},[149,171239,171241],{"id":171240},"_95-获取异常信息","9.5 获取异常信息",[18,171243,171245],{"className":30429,"code":171244,"language":30431,"meta":23,"style":23},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[25,171246,171247,171253,171267,171278],{"__ignoreMap":23},[28,171248,171249,171251],{"class":30,"line":31},[28,171250,170933],{"class":207},[28,171252,3816],{"class":211},[28,171254,171255,171257,171259,171261,171263,171265],{"class":30,"line":42},[28,171256,45644],{"class":211},[28,171258,257],{"class":207},[28,171260,2459],{"class":38},[28,171262,212],{"class":211},[28,171264,155931],{"class":64},[28,171266,218],{"class":211},[28,171268,171269,171271,171273,171275],{"class":30,"line":50},[28,171270,170945],{"class":207},[28,171272,152277],{"class":38},[28,171274,64655],{"class":207},[28,171276,171277],{"class":211}," e:\n",[28,171279,171280,171282,171284,171286,171289,171291,171293,171295,171297],{"class":30,"line":58},[28,171281,31350],{"class":38},[28,171283,212],{"class":211},[28,171285,263],{"class":207},[28,171287,171288],{"class":64},"\"出错了:",[28,171290,1106],{"class":38},[28,171292,285],{"class":211},[28,171294,1156],{"class":38},[28,171296,461],{"class":64},[28,171298,218],{"class":211},[14,171300,146508],{},[18,171302,171305],{"className":171303,"code":171304,"language":5264,"meta":23},[5262],"出错了:invalid literal for int() with base 10: 'abc'\n",[25,171306,171304],{"__ignoreMap":23},[149,171308,171310],{"id":171309},"_96-else和finally","9.6 else和finally",[14,171312,171313,171315],{},[25,171314,1779],{},"：没有异常时执行。",[14,171317,171318,171321],{},[25,171319,171320],{},"finally","：无论是否异常都会执行。",[18,171323,171325],{"className":30429,"code":171324,"language":30431,"meta":23,"style":23},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[25,171326,171327,171333,171351,171359,171369,171375,171396,171402],{"__ignoreMap":23},[28,171328,171329,171331],{"class":30,"line":31},[28,171330,170933],{"class":207},[28,171332,3816],{"class":211},[28,171334,171335,171337,171339,171341,171343,171345,171347,171349],{"class":30,"line":42},[28,171336,45644],{"class":211},[28,171338,257],{"class":207},[28,171340,2459],{"class":38},[28,171342,212],{"class":211},[28,171344,53872],{"class":38},[28,171346,212],{"class":211},[28,171348,155847],{"class":64},[28,171350,30548],{"class":211},[28,171352,171353,171355,171357],{"class":30,"line":50},[28,171354,170945],{"class":207},[28,171356,152277],{"class":38},[28,171358,3816],{"class":211},[28,171360,171361,171363,171365,171367],{"class":30,"line":58},[28,171362,31350],{"class":38},[28,171364,212],{"class":211},[28,171366,153265],{"class":64},[28,171368,218],{"class":211},[28,171370,171371,171373],{"class":30,"line":70},[28,171372,1779],{"class":207},[28,171374,3816],{"class":211},[28,171376,171377,171379,171381,171383,171386,171388,171390,171392,171394],{"class":30,"line":78},[28,171378,31350],{"class":38},[28,171380,212],{"class":211},[28,171382,263],{"class":207},[28,171384,171385],{"class":64},"\"输入正确:",[28,171387,1106],{"class":38},[28,171389,1743],{"class":211},[28,171391,1156],{"class":38},[28,171393,461],{"class":64},[28,171395,218],{"class":211},[28,171397,171398,171400],{"class":30,"line":86},[28,171399,171320],{"class":207},[28,171401,3816],{"class":211},[28,171403,171404,171406,171408,171411],{"class":30,"line":97},[28,171405,31350],{"class":38},[28,171407,212],{"class":211},[28,171409,171410],{"class":64},"\"程序结束\"",[28,171412,218],{"class":211},[14,171414,171415,171417],{},[25,171416,171320],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[149,171419,171421],{"id":171420},"_97-抛出异常","9.7 抛出异常",[14,171423,171424],{},"程序可以主动抛出异常。",[18,171426,171428],{"className":30429,"code":171427,"language":30431,"meta":23,"style":23},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[25,171429,171430,171439,171451,171464,171484,171488,171492],{"__ignoreMap":23},[28,171431,171432,171434,171437],{"class":30,"line":31},[28,171433,31998],{"class":207},[28,171435,171436],{"class":34}," set_age",[28,171438,161466],{"class":211},[28,171440,171441,171443,171445,171447,171449],{"class":30,"line":42},[28,171442,3178],{"class":207},[28,171444,15784],{"class":211},[28,171446,1120],{"class":207},[28,171448,4170],{"class":38},[28,171450,3816],{"class":211},[28,171452,171453,171455,171457,171459,171462],{"class":30,"line":50},[28,171454,103483],{"class":207},[28,171456,152277],{"class":38},[28,171458,212],{"class":211},[28,171460,171461],{"class":64},"\"年龄不能为负数\"",[28,171463,218],{"class":211},[28,171465,171466,171468,171470,171472,171474,171476,171478,171480,171482],{"class":30,"line":58},[28,171467,31350],{"class":38},[28,171469,212],{"class":211},[28,171471,263],{"class":207},[28,171473,162034],{"class":64},[28,171475,1106],{"class":38},[28,171477,70272],{"class":211},[28,171479,1156],{"class":38},[28,171481,461],{"class":64},[28,171483,218],{"class":211},[28,171485,171486],{"class":30,"line":70},[28,171487,2477],{"emptyLinePlaceholder":134},[28,171489,171490],{"class":30,"line":78},[28,171491,2477],{"emptyLinePlaceholder":134},[28,171493,171494,171497,171499,171501],{"class":30,"line":86},[28,171495,171496],{"class":211},"set_age(",[28,171498,742],{"class":207},[28,171500,427],{"class":38},[28,171502,218],{"class":211},[14,171504,171505],{},"调用者可以捕获：",[18,171507,171509],{"className":30429,"code":171508,"language":30431,"meta":23,"style":23},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[25,171510,171511,171517,171528,171538],{"__ignoreMap":23},[28,171512,171513,171515],{"class":30,"line":31},[28,171514,170933],{"class":207},[28,171516,3816],{"class":211},[28,171518,171519,171522,171524,171526],{"class":30,"line":42},[28,171520,171521],{"class":211},"    set_age(",[28,171523,742],{"class":207},[28,171525,427],{"class":38},[28,171527,218],{"class":211},[28,171529,171530,171532,171534,171536],{"class":30,"line":50},[28,171531,170945],{"class":207},[28,171533,152277],{"class":38},[28,171535,64655],{"class":207},[28,171537,171277],{"class":211},[28,171539,171540,171542],{"class":30,"line":58},[28,171541,31350],{"class":38},[28,171543,67050],{"class":211},[149,171545,171547],{"id":171546},"_98-自定义异常","9.8 自定义异常",[18,171549,171551],{"className":30429,"code":171550,"language":30431,"meta":23,"style":23},"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",[25,171552,171553,171567,171571,171575,171579,171587,171597,171608,171618,171622,171626,171632,171649,171660],{"__ignoreMap":23},[28,171554,171555,171557,171560,171562,171565],{"class":30,"line":31},[28,171556,14771],{"class":207},[28,171558,171559],{"class":34}," BalanceNotEnoughError",[28,171561,212],{"class":211},[28,171563,171564],{"class":38},"Exception",[28,171566,30837],{"class":211},[28,171568,171569],{"class":30,"line":42},[28,171570,149588],{"class":207},[28,171572,171573],{"class":30,"line":50},[28,171574,2477],{"emptyLinePlaceholder":134},[28,171576,171577],{"class":30,"line":58},[28,171578,2477],{"emptyLinePlaceholder":134},[28,171580,171581,171583,171585],{"class":30,"line":70},[28,171582,31998],{"class":207},[28,171584,150237],{"class":34},[28,171586,162863],{"class":211},[28,171588,171589,171591,171593,171595],{"class":30,"line":78},[28,171590,3178],{"class":207},[28,171592,150193],{"class":211},[28,171594,1170],{"class":207},[28,171596,162640],{"class":211},[28,171598,171599,171601,171604,171606],{"class":30,"line":86},[28,171600,103483],{"class":207},[28,171602,171603],{"class":211}," BalanceNotEnoughError(",[28,171605,150288],{"class":64},[28,171607,218],{"class":211},[28,171609,171610,171612,171614,171616],{"class":30,"line":97},[28,171611,4167],{"class":207},[28,171613,162870],{"class":211},[28,171615,742],{"class":207},[28,171617,150226],{"class":211},[28,171619,171620],{"class":30,"line":108},[28,171621,2477],{"emptyLinePlaceholder":134},[28,171623,171624],{"class":30,"line":1407},[28,171625,2477],{"emptyLinePlaceholder":134},[28,171627,171628,171630],{"class":30,"line":1690},[28,171629,170933],{"class":207},[28,171631,3816],{"class":211},[28,171633,171634,171636,171638,171641,171643,171645,171647],{"class":30,"line":1695},[28,171635,162541],{"class":211},[28,171637,257],{"class":207},[28,171639,171640],{"class":211}," withdraw(",[28,171642,521],{"class":38},[28,171644,12512],{"class":211},[28,171646,1800],{"class":38},[28,171648,218],{"class":211},[28,171650,171651,171653,171656,171658],{"class":30,"line":1701},[28,171652,170945],{"class":207},[28,171654,171655],{"class":211}," BalanceNotEnoughError ",[28,171657,31434],{"class":207},[28,171659,171277],{"class":211},[28,171661,171662,171664],{"class":30,"line":1706},[28,171663,31350],{"class":38},[28,171665,67050],{"class":211},[14,171667,171668],{},"入门阶段大多数情况使用内置异常即可。",[149,171670,171672],{"id":171671},"_99-traceback","9.9 traceback",[14,171674,171675],{},"调试时可以输出完整异常堆栈。",[18,171677,171679],{"className":30429,"code":171678,"language":30431,"meta":23,"style":23},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[25,171680,171681,171688,171692,171698,171708,171716],{"__ignoreMap":23},[28,171682,171683,171685],{"class":30,"line":31},[28,171684,30443],{"class":207},[28,171686,171687],{"class":211}," traceback\n",[28,171689,171690],{"class":30,"line":42},[28,171691,2477],{"emptyLinePlaceholder":134},[28,171693,171694,171696],{"class":30,"line":50},[28,171695,170933],{"class":207},[28,171697,3816],{"class":211},[28,171699,171700,171702,171704,171706],{"class":30,"line":58},[28,171701,2062],{"class":38},[28,171703,212],{"class":211},[28,171705,155931],{"class":64},[28,171707,218],{"class":211},[28,171709,171710,171712,171714],{"class":30,"line":70},[28,171711,170945],{"class":207},[28,171713,152277],{"class":38},[28,171715,3816],{"class":211},[28,171717,171718],{"class":30,"line":78},[28,171719,171720],{"class":211},"    traceback.print_exc()\n",[14,171722,171723],{},"日志系统中常把异常堆栈记录到文件。",[149,171725,171727],{"id":171726},"_910-什么是模块","9.10 什么是模块",[14,171729,171730,171731,126034],{},"模块就是一个 ",[25,171732,146403],{},[14,171734,171735,171736,24694],{},"例如创建 ",[25,171737,171738],{},"my_math.py",[18,171740,171742],{"className":30429,"code":171741,"language":30431,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[25,171743,171744,171752,171762,171766,171770,171779],{"__ignoreMap":23},[28,171745,171746,171748,171750],{"class":30,"line":31},[28,171747,31998],{"class":207},[28,171749,5286],{"class":34},[28,171751,151144],{"class":211},[28,171753,171754,171756,171758,171760],{"class":30,"line":42},[28,171755,4167],{"class":207},[28,171757,10946],{"class":211},[28,171759,691],{"class":207},[28,171761,151155],{"class":211},[28,171763,171764],{"class":30,"line":50},[28,171765,2477],{"emptyLinePlaceholder":134},[28,171767,171768],{"class":30,"line":58},[28,171769,2477],{"emptyLinePlaceholder":134},[28,171771,171772,171774,171777],{"class":30,"line":70},[28,171773,31998],{"class":207},[28,171775,171776],{"class":34}," sub",[28,171778,151144],{"class":211},[28,171780,171781,171783,171785,171787],{"class":30,"line":78},[28,171782,4167],{"class":207},[28,171784,10946],{"class":211},[28,171786,742],{"class":207},[28,171788,151155],{"class":211},[14,171790,171791],{},"在另一个文件中导入：",[18,171793,171795],{"className":30429,"code":171794,"language":30431,"meta":23,"style":23},"import my_math\n\nprint(my_math.add(1, 2))\n",[25,171796,171797,171804,171808],{"__ignoreMap":23},[28,171798,171799,171801],{"class":30,"line":31},[28,171800,30443],{"class":207},[28,171802,171803],{"class":211}," my_math\n",[28,171805,171806],{"class":30,"line":42},[28,171807,2477],{"emptyLinePlaceholder":134},[28,171809,171810,171812,171815,171817,171819,171821],{"class":30,"line":50},[28,171811,30466],{"class":38},[28,171813,171814],{"class":211},"(my_math.add(",[28,171816,427],{"class":38},[28,171818,12512],{"class":211},[28,171820,288],{"class":38},[28,171822,30548],{"class":211},[149,171824,171826],{"id":171825},"_911-import导入","9.11 import导入",[177,171828,171830],{"id":171829},"_9111-导入模块","9.11.1 导入模块",[18,171832,171834],{"className":30429,"code":171833,"language":30431,"meta":23,"style":23},"import random\n\nprint(random.randint(1, 10))\n",[25,171835,171836,171842,171846],{"__ignoreMap":23},[28,171837,171838,171840],{"class":30,"line":31},[28,171839,30443],{"class":207},[28,171841,45379],{"class":211},[28,171843,171844],{"class":30,"line":42},[28,171845,2477],{"emptyLinePlaceholder":134},[28,171847,171848,171850,171853,171855,171857,171859],{"class":30,"line":50},[28,171849,30466],{"class":38},[28,171851,171852],{"class":211},"(random.randint(",[28,171854,427],{"class":38},[28,171856,12512],{"class":211},[28,171858,656],{"class":38},[28,171860,30548],{"class":211},[177,171862,171864],{"id":171863},"_9112-导入指定内容","9.11.2 导入指定内容",[18,171866,171868],{"className":30429,"code":171867,"language":30431,"meta":23,"style":23},"from random import randint\n\nprint(randint(1, 10))\n",[25,171869,171870,171881,171885],{"__ignoreMap":23},[28,171871,171872,171874,171876,171878],{"class":30,"line":31},[28,171873,30788],{"class":207},[28,171875,57847],{"class":211},[28,171877,30443],{"class":207},[28,171879,171880],{"class":211}," randint\n",[28,171882,171883],{"class":30,"line":42},[28,171884,2477],{"emptyLinePlaceholder":134},[28,171886,171887,171889,171892,171894,171896,171898],{"class":30,"line":50},[28,171888,30466],{"class":38},[28,171890,171891],{"class":211},"(randint(",[28,171893,427],{"class":38},[28,171895,12512],{"class":211},[28,171897,656],{"class":38},[28,171899,30548],{"class":211},[177,171901,171903],{"id":171902},"_9113-起别名","9.11.3 起别名",[18,171905,171907],{"className":30429,"code":171906,"language":30431,"meta":23,"style":23},"import random as rd\n\nprint(rd.randint(1, 10))\n",[25,171908,171909,171920,171924],{"__ignoreMap":23},[28,171910,171911,171913,171915,171917],{"class":30,"line":31},[28,171912,30443],{"class":207},[28,171914,57847],{"class":211},[28,171916,31434],{"class":207},[28,171918,171919],{"class":211}," rd\n",[28,171921,171922],{"class":30,"line":42},[28,171923,2477],{"emptyLinePlaceholder":134},[28,171925,171926,171928,171931,171933,171935,171937],{"class":30,"line":50},[28,171927,30466],{"class":38},[28,171929,171930],{"class":211},"(rd.randint(",[28,171932,427],{"class":38},[28,171934,12512],{"class":211},[28,171936,656],{"class":38},[28,171938,30548],{"class":211},[18,171940,171942],{"className":30429,"code":171941,"language":30431,"meta":23,"style":23},"from random import randint as rint\n\nprint(rint(1, 10))\n",[25,171943,171944,171960,171964],{"__ignoreMap":23},[28,171945,171946,171948,171950,171952,171955,171957],{"class":30,"line":31},[28,171947,30788],{"class":207},[28,171949,57847],{"class":211},[28,171951,30443],{"class":207},[28,171953,171954],{"class":211}," randint ",[28,171956,31434],{"class":207},[28,171958,171959],{"class":211}," rint\n",[28,171961,171962],{"class":30,"line":42},[28,171963,2477],{"emptyLinePlaceholder":134},[28,171965,171966,171968,171971,171973,171975,171977],{"class":30,"line":50},[28,171967,30466],{"class":38},[28,171969,171970],{"class":211},"(rint(",[28,171972,427],{"class":38},[28,171974,12512],{"class":211},[28,171976,656],{"class":38},[28,171978,30548],{"class":211},[177,171980,171982],{"id":171981},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[18,171984,171986],{"className":30429,"code":171985,"language":30431,"meta":23,"style":23},"from random import *\n",[25,171987,171988],{"__ignoreMap":23},[28,171989,171990,171992,171994,171996],{"class":30,"line":31},[28,171991,30788],{"class":207},[28,171993,57847],{"class":211},[28,171995,30443],{"class":207},[28,171997,171998],{"class":207}," *\n",[14,172000,172001],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[149,172003,172005],{"id":172004},"_912-常用内置模块","9.12 常用内置模块",[177,172007,172009],{"id":172008},"_9121-random","9.12.1 random",[18,172011,172013],{"className":30429,"code":172012,"language":30431,"meta":23,"style":23},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[25,172014,172015,172021,172025,172039,172058],{"__ignoreMap":23},[28,172016,172017,172019],{"class":30,"line":31},[28,172018,30443],{"class":207},[28,172020,45379],{"class":211},[28,172022,172023],{"class":30,"line":42},[28,172024,2477],{"emptyLinePlaceholder":134},[28,172026,172027,172029,172031,172033,172035,172037],{"class":30,"line":50},[28,172028,30466],{"class":38},[28,172030,171852],{"class":211},[28,172032,427],{"class":38},[28,172034,12512],{"class":211},[28,172036,656],{"class":38},[28,172038,30548],{"class":211},[28,172040,172041,172043,172046,172048,172050,172052,172054,172056],{"class":30,"line":58},[28,172042,30466],{"class":38},[28,172044,172045],{"class":211},"(random.choice([",[28,172047,149939],{"class":64},[28,172049,12512],{"class":211},[28,172051,150987],{"class":64},[28,172053,12512],{"class":211},[28,172055,159782],{"class":64},[28,172057,33194],{"class":211},[28,172059,172060,172062,172065,172067,172069,172071,172073,172075,172077,172079,172081,172083,172085,172087],{"class":30,"line":70},[28,172061,30466],{"class":38},[28,172063,172064],{"class":211},"(random.sample([",[28,172066,427],{"class":38},[28,172068,12512],{"class":211},[28,172070,288],{"class":38},[28,172072,12512],{"class":211},[28,172074,282],{"class":38},[28,172076,12512],{"class":211},[28,172078,503],{"class":38},[28,172080,12512],{"class":211},[28,172082,529],{"class":38},[28,172084,112253],{"class":211},[28,172086,288],{"class":38},[28,172088,30548],{"class":211},[177,172090,172092],{"id":172091},"_9122-time","9.12.2 time",[18,172094,172096],{"className":30429,"code":172095,"language":30431,"meta":23,"style":23},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[25,172097,172098,172104,172108,172115,172123],{"__ignoreMap":23},[28,172099,172100,172102],{"class":30,"line":31},[28,172101,30443],{"class":207},[28,172103,31880],{"class":211},[28,172105,172106],{"class":30,"line":42},[28,172107,2477],{"emptyLinePlaceholder":134},[28,172109,172110,172112],{"class":30,"line":50},[28,172111,30466],{"class":38},[28,172113,172114],{"class":211},"(time.time())\n",[28,172116,172117,172119,172121],{"class":30,"line":58},[28,172118,95122],{"class":211},[28,172120,427],{"class":38},[28,172122,218],{"class":211},[28,172124,172125,172127,172129,172132],{"class":30,"line":70},[28,172126,30466],{"class":38},[28,172128,212],{"class":211},[28,172130,172131],{"class":64},"\"1秒后执行\"",[28,172133,218],{"class":211},[177,172135,172137],{"id":172136},"_9123-datetime","9.12.3 datetime",[18,172139,172141],{"className":30429,"code":172140,"language":30431,"meta":23,"style":23},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[25,172142,172143,172155,172159,172169,172176],{"__ignoreMap":23},[28,172144,172145,172147,172150,172152],{"class":30,"line":31},[28,172146,30788],{"class":207},[28,172148,172149],{"class":211}," datetime ",[28,172151,30443],{"class":207},[28,172153,172154],{"class":211}," datetime\n",[28,172156,172157],{"class":30,"line":42},[28,172158,2477],{"emptyLinePlaceholder":134},[28,172160,172161,172164,172166],{"class":30,"line":50},[28,172162,172163],{"class":211},"now ",[28,172165,257],{"class":207},[28,172167,172168],{"class":211}," datetime.now()\n",[28,172170,172171,172173],{"class":30,"line":58},[28,172172,30466],{"class":38},[28,172174,172175],{"class":211},"(now)\n",[28,172177,172178,172180,172183,172186,172188,172191],{"class":30,"line":70},[28,172179,30466],{"class":38},[28,172181,172182],{"class":211},"(now.strftime(",[28,172184,172185],{"class":64},"\"%Y-%m-",[28,172187,156742],{"class":38},[28,172189,172190],{"class":64}," %H:%M:%S\"",[28,172192,30548],{"class":211},[177,172194,172196],{"id":172195},"_9124-os","9.12.4 os",[18,172198,172200],{"className":30429,"code":172199,"language":30431,"meta":23,"style":23},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[25,172201,172202,172208,172212,172219],{"__ignoreMap":23},[28,172203,172204,172206],{"class":30,"line":31},[28,172205,30443],{"class":207},[28,172207,45356],{"class":211},[28,172209,172210],{"class":30,"line":42},[28,172211,2477],{"emptyLinePlaceholder":134},[28,172213,172214,172216],{"class":30,"line":50},[28,172215,30466],{"class":38},[28,172217,172218],{"class":211},"(os.getcwd())\n",[28,172220,172221,172223,172226,172229],{"class":30,"line":58},[28,172222,30466],{"class":38},[28,172224,172225],{"class":211},"(os.listdir(",[28,172227,172228],{"class":64},"\".\"",[28,172230,30548],{"class":211},[177,172232,172234],{"id":172233},"_9125-sys","9.12.5 sys",[18,172236,172238],{"className":30429,"code":172237,"language":30431,"meta":23,"style":23},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[25,172239,172240,172247,172251,172258],{"__ignoreMap":23},[28,172241,172242,172244],{"class":30,"line":31},[28,172243,30443],{"class":207},[28,172245,172246],{"class":211}," sys\n",[28,172248,172249],{"class":30,"line":42},[28,172250,2477],{"emptyLinePlaceholder":134},[28,172252,172253,172255],{"class":30,"line":50},[28,172254,30466],{"class":38},[28,172256,172257],{"class":211},"(sys.version)\n",[28,172259,172260,172262],{"class":30,"line":58},[28,172261,30466],{"class":38},[28,172263,172264],{"class":211},"(sys.path)\n",[149,172266,172268,172269,172271,172272,461],{"id":172267},"_913-if-name-main","9.13 if ",[359,172270,79861],{}," == \"",[359,172273,102109],{},[14,172275,172276,172277,172280],{},"模块被直接运行和被导入时，",[25,172278,172279],{},"__name__"," 的值不同。",[14,172282,172283,172284,24694],{},"创建 ",[25,172285,172286],{},"my_module.py",[18,172288,172290],{"className":30429,"code":172289,"language":30431,"meta":23,"style":23},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[25,172291,172292,172300,172310,172314,172318,172330],{"__ignoreMap":23},[28,172293,172294,172296,172298],{"class":30,"line":31},[28,172295,31998],{"class":207},[28,172297,5286],{"class":34},[28,172299,151144],{"class":211},[28,172301,172302,172304,172306,172308],{"class":30,"line":42},[28,172303,4167],{"class":207},[28,172305,10946],{"class":211},[28,172307,691],{"class":207},[28,172309,151155],{"class":211},[28,172311,172312],{"class":30,"line":50},[28,172313,2477],{"emptyLinePlaceholder":134},[28,172315,172316],{"class":30,"line":58},[28,172317,2477],{"emptyLinePlaceholder":134},[28,172319,172320,172322,172324,172326,172328],{"class":30,"line":70},[28,172321,1609],{"class":207},[28,172323,31271],{"class":38},[28,172325,101610],{"class":207},[28,172327,101613],{"class":64},[28,172329,3816],{"class":211},[28,172331,172332,172334,172336,172338,172340,172342],{"class":30,"line":78},[28,172333,31350],{"class":38},[28,172335,166651],{"class":211},[28,172337,427],{"class":38},[28,172339,12512],{"class":211},[28,172341,288],{"class":38},[28,172343,30548],{"class":211},[14,172345,172346],{},"作用：",[161,172348,172349,172352],{},[119,172350,172351],{},"直接运行该文件时，执行测试代码。",[119,172353,172354],{},"被其他文件导入时，不执行测试代码。",[14,172356,172357],{},"这是写模块时很常用的习惯。",[149,172359,172361],{"id":172360},"_914-包","9.14 包",[14,172363,172364,172365,172368],{},"包是包含 ",[25,172366,172367],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172370,172371],{},"目录结构：",[18,172373,172376],{"className":172374,"code":172375,"language":5264,"meta":23},[5262],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[25,172377,172375],{"__ignoreMap":23},[14,172379,172380],{},"导入：",[18,172382,172384],{"className":30429,"code":172383,"language":30431,"meta":23,"style":23},"from utils.file_utils import read_file\n",[25,172385,172386],{"__ignoreMap":23},[28,172387,172388,172390,172393,172395],{"class":30,"line":31},[28,172389,30788],{"class":207},[28,172391,172392],{"class":211}," utils.file_utils ",[28,172394,30443],{"class":207},[28,172396,172397],{"class":211}," read_file\n",[14,172399,172400,172402],{},[25,172401,172367],{}," 可以为空，也可以写包初始化逻辑。",[149,172404,172406],{"id":172405},"_915-第三方包","9.15 第三方包",[14,172408,172409,172410,172412],{},"第三方包通过 ",[25,172411,23906],{}," 安装。",[18,172414,172416],{"className":20,"code":172415,"language":22,"meta":23,"style":23},"pip install requests\n",[25,172417,172418],{"__ignoreMap":23},[28,172419,172420,172422,172424],{"class":30,"line":31},[28,172421,23906],{"class":34},[28,172423,23909],{"class":64},[28,172425,146149],{"class":64},[14,172427,172428],{},"使用：",[18,172430,172432],{"className":30429,"code":172431,"language":30431,"meta":23,"style":23},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[25,172433,172434,172440,172444,172459],{"__ignoreMap":23},[28,172435,172436,172438],{"class":30,"line":31},[28,172437,30443],{"class":207},[28,172439,146149],{"class":211},[28,172441,172442],{"class":30,"line":42},[28,172443,2477],{"emptyLinePlaceholder":134},[28,172445,172446,172449,172451,172454,172457],{"class":30,"line":50},[28,172447,172448],{"class":211},"response ",[28,172450,257],{"class":207},[28,172452,172453],{"class":211}," requests.get(",[28,172455,172456],{"class":64},"\"https:\u002F\u002Fwww.example.com\"",[28,172458,218],{"class":211},[28,172460,172461,172463],{"class":30,"line":58},[28,172462,30466],{"class":38},[28,172464,172465],{"class":211},"(response.status_code)\n",[14,172467,172468],{},"查看已安装包：",[18,172470,172472],{"className":20,"code":172471,"language":22,"meta":23,"style":23},"pip list\n",[25,172473,172474],{"__ignoreMap":23},[28,172475,172476,172478],{"class":30,"line":31},[28,172477,23906],{"class":34},[28,172479,119006],{"class":64},[14,172481,172482],{},"导出项目依赖：",[18,172484,172485],{"className":20,"code":146344,"language":22,"meta":23,"style":23},[25,172486,172487],{"__ignoreMap":23},[28,172488,172489,172491,172493,172495],{"class":30,"line":31},[28,172490,23906],{"class":34},[28,172492,146353],{"class":64},[28,172494,26273],{"class":207},[28,172496,146358],{"class":64},[14,172498,172499],{},"安装项目依赖：",[18,172501,172502],{"className":20,"code":146364,"language":22,"meta":23,"style":23},[25,172503,172504],{"__ignoreMap":23},[28,172505,172506,172508,172510,172512],{"class":30,"line":31},[28,172507,23906],{"class":34},[28,172509,23909],{"class":64},[28,172511,119690],{"class":38},[28,172513,146358],{"class":64},[149,172515,172517],{"id":172516},"_916-模块搜索路径","9.16 模块搜索路径",[14,172519,172520,172521,172524],{},"Python 导入模块时会在 ",[25,172522,172523],{},"sys.path"," 中查找。",[18,172526,172528],{"className":30429,"code":172527,"language":30431,"meta":23,"style":23},"import sys\n\nfor path in sys.path:\n    print(path)\n",[25,172529,172530,172536,172540,172552],{"__ignoreMap":23},[28,172531,172532,172534],{"class":30,"line":31},[28,172533,30443],{"class":207},[28,172535,172246],{"class":211},[28,172537,172538],{"class":30,"line":42},[28,172539,2477],{"emptyLinePlaceholder":134},[28,172541,172542,172544,172547,172549],{"class":30,"line":50},[28,172543,3102],{"class":207},[28,172545,172546],{"class":211}," path ",[28,172548,26094],{"class":207},[28,172550,172551],{"class":211}," sys.path:\n",[28,172553,172554,172556],{"class":30,"line":58},[28,172555,31350],{"class":38},[28,172557,169280],{"class":211},[14,172559,172560],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172562,157674],{},[18,172564,172567],{"className":172565,"code":172566,"language":5264,"meta":23},[5262],"random.py\njson.py\ntime.py\n",[25,172568,172566],{"__ignoreMap":23},[14,172570,172571],{},"这些文件名可能导致导入异常。",[149,172573,172575],{"id":172574},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172577,172371],{},[18,172579,172582],{"className":172580,"code":172581,"language":5264,"meta":23},[5262],"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",[25,172583,172581],{"__ignoreMap":23},[14,172585,172586,24694],{},[25,172587,172588],{},"utils\u002Ffile_utils.py",[18,172590,172592],{"className":30429,"code":172591,"language":30431,"meta":23,"style":23},"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",[25,172593,172594,172600,172610,172614,172618,172628,172638,172646,172652,172656,172683,172693,172697,172701,172711,172737],{"__ignoreMap":23},[28,172595,172596,172598],{"class":30,"line":31},[28,172597,30443],{"class":207},[28,172599,147142],{"class":211},[28,172601,172602,172604,172606,172608],{"class":30,"line":42},[28,172603,30788],{"class":207},[28,172605,108362],{"class":211},[28,172607,30443],{"class":207},[28,172609,108367],{"class":211},[28,172611,172612],{"class":30,"line":50},[28,172613,2477],{"emptyLinePlaceholder":134},[28,172615,172616],{"class":30,"line":58},[28,172617,2477],{"emptyLinePlaceholder":134},[28,172619,172620,172622,172625],{"class":30,"line":70},[28,172621,31998],{"class":207},[28,172623,172624],{"class":34}," read_json",[28,172626,172627],{"class":211},"(path):\n",[28,172629,172630,172633,172635],{"class":30,"line":78},[28,172631,172632],{"class":211},"    path ",[28,172634,257],{"class":207},[28,172636,172637],{"class":211}," Path(path)\n",[28,172639,172640,172642,172644],{"class":30,"line":86},[28,172641,3178],{"class":207},[28,172643,38981],{"class":207},[28,172645,169361],{"class":211},[28,172647,172648,172650],{"class":30,"line":97},[28,172649,14829],{"class":207},[28,172651,51889],{"class":211},[28,172653,172654],{"class":30,"line":108},[28,172655,2477],{"emptyLinePlaceholder":134},[28,172657,172658,172660,172662,172665,172667,172669,172671,172673,172675,172677,172679,172681],{"class":30,"line":1407},[28,172659,34229],{"class":207},[28,172661,146842],{"class":38},[28,172663,172664],{"class":211},"(path, ",[28,172666,146852],{"class":64},[28,172668,12512],{"class":211},[28,172670,146857],{"class":5293},[28,172672,257],{"class":207},[28,172674,146862],{"class":64},[28,172676,13791],{"class":211},[28,172678,31434],{"class":207},[28,172680,148204],{"class":5293},[28,172682,3816],{"class":211},[28,172684,172685,172687,172689,172691],{"class":30,"line":1690},[28,172686,14829],{"class":207},[28,172688,148215],{"class":211},[28,172690,45405],{"class":5293},[28,172692,218],{"class":211},[28,172694,172695],{"class":30,"line":1695},[28,172696,2477],{"emptyLinePlaceholder":134},[28,172698,172699],{"class":30,"line":1701},[28,172700,2477],{"emptyLinePlaceholder":134},[28,172702,172703,172705,172708],{"class":30,"line":1706},[28,172704,31998],{"class":207},[28,172706,172707],{"class":34}," write_json",[28,172709,172710],{"class":211},"(path, data):\n",[28,172712,172713,172715,172717,172719,172721,172723,172725,172727,172729,172731,172733,172735],{"class":30,"line":1720},[28,172714,34229],{"class":207},[28,172716,146842],{"class":38},[28,172718,172664],{"class":211},[28,172720,152027],{"class":64},[28,172722,12512],{"class":211},[28,172724,146857],{"class":5293},[28,172726,257],{"class":207},[28,172728,146862],{"class":64},[28,172730,13791],{"class":211},[28,172732,31434],{"class":207},[28,172734,148204],{"class":5293},[28,172736,3816],{"class":211},[28,172738,172739,172742,172744,172746,172748,172750,172752,172754,172756,172758,172760],{"class":30,"line":1725},[28,172740,172741],{"class":211},"        json.dump(data, ",[28,172743,45405],{"class":5293},[28,172745,12512],{"class":211},[28,172747,147188],{"class":5293},[28,172749,257],{"class":207},[28,172751,34038],{"class":38},[28,172753,12512],{"class":211},[28,172755,152063],{"class":5293},[28,172757,257],{"class":207},[28,172759,288],{"class":38},[28,172761,218],{"class":211},[14,172763,172764,24694],{},[25,172765,154658],{},[18,172767,172769],{"className":30429,"code":172768,"language":30431,"meta":23,"style":23},"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",[25,172770,172771,172782,172786,172799,172819],{"__ignoreMap":23},[28,172772,172773,172775,172777,172779],{"class":30,"line":31},[28,172774,30788],{"class":207},[28,172776,172392],{"class":211},[28,172778,30443],{"class":207},[28,172780,172781],{"class":211}," read_json, write_json\n",[28,172783,172784],{"class":30,"line":42},[28,172785,2477],{"emptyLinePlaceholder":134},[28,172787,172788,172790,172792,172795,172797],{"class":30,"line":50},[28,172789,159767],{"class":211},[28,172791,257],{"class":207},[28,172793,172794],{"class":211}," read_json(",[28,172796,151882],{"class":64},[28,172798,218],{"class":211},[28,172800,172801,172803,172805,172807,172809,172811,172813,172815,172817],{"class":30,"line":58},[28,172802,170585],{"class":211},[28,172804,62730],{"class":64},[28,172806,51488],{"class":211},[28,172808,149939],{"class":64},[28,172810,12512],{"class":211},[28,172812,151523],{"class":64},[28,172814,51488],{"class":211},[28,172816,1199],{"class":38},[28,172818,165203],{"class":211},[28,172820,172821,172824,172826],{"class":30,"line":70},[28,172822,172823],{"class":211},"write_json(",[28,172825,151882],{"class":64},[28,172827,172828],{"class":211},", students)\n",[149,172830,172832],{"id":172831},"_918-易错点","9.18 易错点",[161,172834,172835,172838,172843,172848,172851,172854],{},[119,172836,172837],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[119,172839,172840,172841,28436],{},"能指定异常类型就不要裸写 ",[25,172842,170945],{},[119,172844,172845,172847],{},[25,172846,171320],{}," 无论是否出错都会执行。",[119,172849,172850],{},"模块文件名不要和标准库重名。",[119,172852,172853],{},"导入自己写的模块时，要注意运行目录。",[119,172855,172856],{},"第三方包要安装到当前解释器或虚拟环境中。",[149,172858,172860],{"id":172859},"_919-本章练习","9.19 本章练习",[161,172862,172863,172866,172869,172875,172882],{},[119,172864,172865],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[119,172867,172868],{},"写函数读取文件，如果文件不存在则返回空字符串。",[119,172870,172283,172871,172874],{},[25,172872,172873],{},"math_utils.py","，实现加减乘除函数并导入使用。",[119,172876,172877,172878,172881],{},"创建一个 ",[25,172879,172880],{},"utils"," 包，把 JSON 读写函数放进去。",[119,172883,172884],{},"写一个程序，捕获除零异常和输入格式异常。",[126,172886,172887],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":23,"searchDepth":42,"depth":42,"links":172889},[172890,172891,172892,172893,172894,172895,172896,172897,172898,172899,172900,172906,172913,172915,172916,172917,172918,172919,172920],{"id":170742,"depth":42,"text":170743},{"id":170870,"depth":42,"text":170871},{"id":170919,"depth":42,"text":170920},{"id":171068,"depth":42,"text":171069},{"id":171240,"depth":42,"text":171241},{"id":171309,"depth":42,"text":171310},{"id":171420,"depth":42,"text":171421},{"id":171546,"depth":42,"text":171547},{"id":171671,"depth":42,"text":171672},{"id":171726,"depth":42,"text":171727},{"id":171825,"depth":42,"text":171826,"children":172901},[172902,172903,172904,172905],{"id":171829,"depth":50,"text":171830},{"id":171863,"depth":50,"text":171864},{"id":171902,"depth":50,"text":171903},{"id":171981,"depth":50,"text":171982},{"id":172004,"depth":42,"text":172005,"children":172907},[172908,172909,172910,172911,172912],{"id":172008,"depth":50,"text":172009},{"id":172091,"depth":50,"text":172092},{"id":172136,"depth":50,"text":172137},{"id":172195,"depth":50,"text":172196},{"id":172233,"depth":50,"text":172234},{"id":172267,"depth":42,"text":172914},"9.13 if name == \"main\"",{"id":172360,"depth":42,"text":172361},{"id":172405,"depth":42,"text":172406},{"id":172516,"depth":42,"text":172517},{"id":172574,"depth":42,"text":172575},{"id":172831,"depth":42,"text":172832},{"id":172859,"depth":42,"text":172860},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170734,"description":131},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172927,"title":172928,"body":172929,"description":173092,"extension":132,"meta":173093,"navigation":134,"path":173094,"seo":173095,"stem":173096,"__hash__":173097},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172930,"toc":173087},[172931,172934,172937,172940,172951,172953,173027,173030,173033,173036,173039,173042,173045,173048,173051,173054,173057],[10,172932,172928],{"id":172933},"python教程",[14,172935,172936],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172938,172939],{},"建议学习环境：",[161,172941,172942,172945,172948],{},[119,172943,172944],{},"Python 版本：Python 3.10 及以上。",[119,172946,172947],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[119,172949,172950],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[149,172952,117129],{"id":117129},[161,172954,172955,172961,172967,172973,172979,172985,172991,172997,173003,173009,173015,173021],{},[119,172956,172957],{},[448,172958,172960],{"href":172959},".\u002Fch1-Python","Python环境与第一个程序",[119,172962,172963],{},[448,172964,172966],{"href":172965},".\u002Fch2","基础语法、变量与字符串",[119,172968,172969],{},[448,172970,172972],{"href":172971},".\u002Fch3","判断语句",[119,172974,172975],{},[448,172976,172978],{"href":172977},".\u002Fch4","循环语句",[119,172980,172981],{},[448,172982,172984],{"href":172983},".\u002Fch5","函数基础",[119,172986,172987],{},[448,172988,172990],{"href":172989},".\u002Fch6","数据容器",[119,172992,172993],{},[448,172994,172996],{"href":172995},".\u002Fch7","函数进阶",[119,172998,172999],{},[448,173000,173002],{"href":173001},".\u002Fch8","文件操作",[119,173004,173005],{},[448,173006,173008],{"href":173007},".\u002Fch9","异常、模块与包",[119,173010,173011],{},[448,173012,173014],{"href":173013},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[119,173016,173017],{},[448,173018,173020],{"href":173019},".\u002Fch11","面向对象基础",[119,173022,173023],{},[448,173024,173026],{"href":173025},".\u002Fch12","综合案例与复习路线",[149,173028,173029],{"id":173029},"学习路线",[14,173031,173032],{},"第一阶段：能运行程序。",[14,173034,173035],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,173037,173038],{},"第二阶段：能组织数据。",[14,173040,173041],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,173043,173044],{},"第三阶段：能封装逻辑。",[14,173046,173047],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,173049,173050],{},"第四阶段：能做小项目。",[14,173052,173053],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[149,173055,173056],{"id":173056},"参考资料",[161,173058,173059,173066,173073,173080],{},[119,173060,173061,173062],{},"黑马程序员 Python 入门教程推荐：",[448,173063,173064],{"href":173064,"rel":173065},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23940],[119,173067,173068,173069],{},"Python 官方中文教程：",[448,173070,173071],{"href":173071,"rel":173072},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23940],[119,173074,173075,173076],{},"Python 标准库文档：",[448,173077,173078],{"href":173078,"rel":173079},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23940],[119,173081,173082,173083],{},"pyecharts 文档：",[448,173084,173085],{"href":173085,"rel":173086},"https:\u002F\u002Fpyecharts.org\u002F",[23940],{"title":23,"searchDepth":42,"depth":42,"links":173088},[173089,173090,173091],{"id":117129,"depth":42,"text":117129},{"id":173029,"depth":42,"text":173029},{"id":173056,"depth":42,"text":173056},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23455},"\u002Fwiki\u002F2024-10-10-python",{"title":172928,"description":173092},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331398894]